1 // Copyright 2014 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 CHROME_BROWSER_BITMAP_FETCHER_BITMAP_FETCHER_H_ 6 #define CHROME_BROWSER_BITMAP_FETCHER_BITMAP_FETCHER_H_ 7 8 #include "base/memory/scoped_ptr.h" 9 #include "chrome/browser/bitmap_fetcher_delegate.h" 10 #include "chrome/browser/image_decoder.h" 11 #include "net/url_request/url_fetcher_delegate.h" 12 #include "net/url_request/url_request.h" 13 #include "third_party/skia/include/core/SkBitmap.h" 14 #include "url/gurl.h" 15 16 namespace net { 17 class URLFetcher; 18 class URLRequestContextGetter; 19 } // namespace net 20 21 namespace chrome { 22 23 // Asynchrounously fetches an image from the given URL and returns the 24 // decoded Bitmap to the provided BitmapFetcherDelegate. 25 class BitmapFetcher : public net::URLFetcherDelegate, 26 public ImageDecoder::Delegate { 27 public: 28 BitmapFetcher(const GURL& url, BitmapFetcherDelegate* delegate); 29 virtual ~BitmapFetcher(); 30 31 const GURL& url() const { return url_; } 32 33 // Start fetching the URL with the fetcher. The delegate is notified 34 // asynchronously when done. Start may be called more than once in some 35 // cases. If so, subsequent starts will be ignored since the operation is 36 // already in progress. Arguments are used to configure the internal fetcher. 37 // Values for |load_flags| are defined in net/base/load_flags.h. In general, 38 // |net::LOAD_NORMAL| is appropriate. 39 void Start(net::URLRequestContextGetter* request_context, 40 const std::string& referrer, 41 net::URLRequest::ReferrerPolicy referrer_policy, 42 int load_flags); 43 44 // Methods inherited from URLFetcherDelegate 45 46 // This will be called when the URL has been fetched, successfully or not. 47 // Use accessor methods on |source| to get the results. 48 virtual void OnURLFetchComplete(const net::URLFetcher* source) OVERRIDE; 49 50 // This will be called when some part of the response is read. |current| 51 // denotes the number of bytes received up to the call, and |total| is the 52 // expected total size of the response (or -1 if not determined). 53 virtual void OnURLFetchDownloadProgress(const net::URLFetcher* source, 54 int64 current, 55 int64 total) OVERRIDE; 56 57 // Methods inherited from ImageDecoder::Delegate 58 59 // Called when image is decoded. |decoder| is used to identify the image in 60 // case of decoding several images simultaneously. This will not be called 61 // on the UI thread. 62 virtual void OnImageDecoded(const ImageDecoder* decoder, 63 const SkBitmap& decoded_image) OVERRIDE; 64 65 // Called when decoding image failed. 66 virtual void OnDecodeImageFailed(const ImageDecoder* decoder) OVERRIDE; 67 68 private: 69 // Alerts the delegate that a failure occurred. 70 void ReportFailure(); 71 72 scoped_ptr<net::URLFetcher> url_fetcher_; 73 scoped_refptr<ImageDecoder> image_decoder_; 74 const GURL url_; 75 BitmapFetcherDelegate* const delegate_; 76 77 DISALLOW_COPY_AND_ASSIGN(BitmapFetcher); 78 }; 79 80 } // namespace chrome 81 82 #endif // CHROME_BROWSER_BITMAP_FETCHER_BITMAP_FETCHER_H_ 83