1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef CONTENT_RENDERER_FETCHERS_IMAGE_RESOURCE_FETCHER_H_ 6 #define CONTENT_RENDERER_FETCHERS_IMAGE_RESOURCE_FETCHER_H_ 7 8 #include "base/basictypes.h" 9 #include "base/callback.h" 10 #include "base/memory/scoped_ptr.h" 11 #include "third_party/WebKit/public/platform/WebURLRequest.h" 12 #include "url/gurl.h" 13 14 class SkBitmap; 15 16 namespace blink { 17 class WebFrame; 18 class WebURLResponse; 19 } 20 21 namespace content { 22 23 class ResourceFetcher; 24 25 // ImageResourceFetcher handles downloading an image for a webview. Once 26 // downloading is done the supplied callback is notified. ImageResourceFetcher 27 // is used to download the favicon and images for web apps. 28 class ImageResourceFetcher { 29 public: 30 typedef base::Callback<void(ImageResourceFetcher*, const SkBitmap&)> Callback; 31 32 ImageResourceFetcher( 33 const GURL& image_url, 34 blink::WebFrame* frame, 35 int id, 36 int image_size, 37 blink::WebURLRequest::TargetType target_type, 38 const Callback& callback); 39 40 virtual ~ImageResourceFetcher(); 41 42 // URL of the image we're downloading. image_url()43 const GURL& image_url() const { return image_url_; } 44 45 // Unique identifier for the request. id()46 int id() const { return id_; } 47 48 private: 49 // ResourceFetcher::Callback. Decodes the image and invokes callback_. 50 void OnURLFetchComplete(const blink::WebURLResponse& response, 51 const std::string& data); 52 53 Callback callback_; 54 55 // Unique identifier for the request. 56 const int id_; 57 58 // URL of the image. 59 const GURL image_url_; 60 61 // The size of the image. This is only a hint that is used if the image 62 // contains multiple sizes. A value of 0 results in using the first frame 63 // of the image. 64 const int image_size_; 65 66 // Does the actual download. 67 scoped_ptr<ResourceFetcher> fetcher_; 68 69 DISALLOW_COPY_AND_ASSIGN(ImageResourceFetcher); 70 }; 71 72 } // namespace content 73 74 #endif // CONTENT_RENDERER_FETCHERS_IMAGE_RESOURCE_FETCHER_H_ 75