16d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 26d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 36d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)// found in the LICENSE file. 46d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 56d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#ifndef CHROME_BROWSER_BITMAP_FETCHER_BITMAP_FETCHER_H_ 66d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#define CHROME_BROWSER_BITMAP_FETCHER_BITMAP_FETCHER_H_ 76d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 86d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 96d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#include "chrome/browser/bitmap_fetcher_delegate.h" 106d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#include "chrome/browser/image_decoder.h" 116d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#include "net/url_request/url_fetcher_delegate.h" 126d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#include "net/url_request/url_request.h" 136d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#include "third_party/skia/include/core/SkBitmap.h" 146d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#include "url/gurl.h" 156d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 166d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)namespace net { 176d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)class URLFetcher; 186d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)class URLRequestContextGetter; 196d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)} // namespace net 206d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 216d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)namespace chrome { 226d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 236d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)// Asynchrounously fetches an image from the given URL and returns the 246d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)// decoded Bitmap to the provided BitmapFetcherDelegate. 256d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)class BitmapFetcher : public net::URLFetcherDelegate, 266d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) public ImageDecoder::Delegate { 276d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) public: 286d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) BitmapFetcher(const GURL& url, BitmapFetcherDelegate* delegate); 296d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) virtual ~BitmapFetcher(); 306d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 316d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) const GURL& url() const { return url_; } 326d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 336d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) // Start fetching the URL with the fetcher. The delegate is notified 346d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) // asynchronously when done. Start may be called more than once in some 356d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) // cases. If so, subsequent starts will be ignored since the operation is 366d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) // already in progress. Arguments are used to configure the internal fetcher. 376d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) // Values for |load_flags| are defined in net/base/load_flags.h. In general, 386d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) // |net::LOAD_NORMAL| is appropriate. 396d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) void Start(net::URLRequestContextGetter* request_context, 406d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) const std::string& referrer, 416d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) net::URLRequest::ReferrerPolicy referrer_policy, 426d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) int load_flags); 436d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 446d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) // Methods inherited from URLFetcherDelegate 456d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 466d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) // This will be called when the URL has been fetched, successfully or not. 476d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) // Use accessor methods on |source| to get the results. 486d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) virtual void OnURLFetchComplete(const net::URLFetcher* source) OVERRIDE; 496d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 506d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) // This will be called when some part of the response is read. |current| 516d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) // denotes the number of bytes received up to the call, and |total| is the 526d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) // expected total size of the response (or -1 if not determined). 536d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) virtual void OnURLFetchDownloadProgress(const net::URLFetcher* source, 546d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) int64 current, 556d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) int64 total) OVERRIDE; 566d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 576d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) // Methods inherited from ImageDecoder::Delegate 586d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 596d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) // Called when image is decoded. |decoder| is used to identify the image in 606d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) // case of decoding several images simultaneously. This will not be called 616d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) // on the UI thread. 626d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) virtual void OnImageDecoded(const ImageDecoder* decoder, 636d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) const SkBitmap& decoded_image) OVERRIDE; 646d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 656d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) // Called when decoding image failed. 666d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) virtual void OnDecodeImageFailed(const ImageDecoder* decoder) OVERRIDE; 676d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 686d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) private: 696d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) // Alerts the delegate that a failure occurred. 706d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) void ReportFailure(); 716d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 726d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) scoped_ptr<net::URLFetcher> url_fetcher_; 736d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) scoped_refptr<ImageDecoder> image_decoder_; 746d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) const GURL url_; 756d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) BitmapFetcherDelegate* const delegate_; 766d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 776d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(BitmapFetcher); 786d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)}; 796d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 806d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)} // namespace chrome 816d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 826d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#endif // CHROME_BROWSER_BITMAP_FETCHER_BITMAP_FETCHER_H_ 83