Index: components/image_fetcher/image_data_fetcher.cc |
diff --git a/components/image_fetcher/image_data_fetcher.cc b/components/image_fetcher/image_data_fetcher.cc |
index 8be7dcb0efad9af365e13958b848633e0e255068..0f9113141371c6a4cfff22b9f173d3433514dd1c 100644 |
--- a/components/image_fetcher/image_data_fetcher.cc |
+++ b/components/image_fetcher/image_data_fetcher.cc |
@@ -6,7 +6,6 @@ |
#include "net/base/load_flags.h" |
#include "net/url_request/url_fetcher.h" |
-#include "net/url_request/url_fetcher_delegate.h" |
#include "net/url_request/url_request.h" |
#include "net/url_request/url_request_context_getter.h" |
#include "net/url_request/url_request_status.h" |
@@ -14,71 +13,23 @@ |
namespace image_fetcher { |
-// An active image URL fetcher request. The class contains any related request |
-// state and logic for handling a single image url request. |
-class ImageDataFetcher::ImageDataFetcherRequest |
- : public net::URLFetcherDelegate { |
- public: |
- ImageDataFetcherRequest(const GURL& url, |
- const ImageDataFetcherCallback& callback, |
- ImageDataFetcher* image_url_fetcher); |
- ~ImageDataFetcherRequest() override {} |
+// An active image URL fetcher request. The struct contains the related requests |
+// state. |
+struct ImageDataFetcher::ImageDataFetcherRequest { |
+ ImageDataFetcherRequest(const ImageDataFetcherCallback& callback, |
+ std::unique_ptr<net::URLFetcher> url_fetcher) |
+ : callback(callback), |
+ url_fetcher(std::move(url_fetcher)) {} |
- // Sends the URL requests. |
- void Start(net::URLRequestContextGetter* request_context); |
- |
- private: |
- // Method inherited from URLFetcherDelegate |
- void OnURLFetchComplete(const net::URLFetcher* source) override; |
- |
- // The URL of the image to fetch. |
- const GURL url_; |
+ ~ImageDataFetcherRequest() {} |
// The callback to run after the image data was fetched. The callback will |
// be run even if the image data could not be fetched successfully. |
- ImageDataFetcherCallback callback_; |
- |
- // The ImageDataFetcher that owns the ImageDataFetcherRequest. |
- ImageDataFetcher* image_url_fetcher_; |
+ ImageDataFetcherCallback callback; |
- std::unique_ptr<net::URLFetcher> url_fetcher_; |
- |
- DISALLOW_COPY_AND_ASSIGN(ImageDataFetcherRequest); |
+ std::unique_ptr<net::URLFetcher> url_fetcher; |
}; |
-ImageDataFetcher::ImageDataFetcherRequest::ImageDataFetcherRequest( |
- const GURL& url, |
- const ImageDataFetcherCallback& callback, |
- ImageDataFetcher* image_url_fetcher) |
- : url_(url), |
- callback_(callback), |
- image_url_fetcher_(image_url_fetcher) { |
-} |
- |
-void ImageDataFetcher::ImageDataFetcherRequest::Start( |
- net::URLRequestContextGetter* request_context) { |
- DCHECK(!url_fetcher_); |
- |
- url_fetcher_ = net::URLFetcher::Create(url_, net::URLFetcher::GET, this); |
- url_fetcher_->SetRequestContext(request_context); |
- url_fetcher_->Start(); |
-} |
- |
-void ImageDataFetcher::ImageDataFetcherRequest::OnURLFetchComplete( |
- const net::URLFetcher* source) { |
- // An empty string is passed to the callback in case on an unsuccessfull URL |
- // request. |
- std::string image_data; |
- if (source->GetStatus().status() == net::URLRequestStatus::SUCCESS) { |
- source->GetResponseAsString(&image_data); |
- } |
- callback_.Run(image_data); |
- |
- // Remove the completed ImageDataFetcherRequest from the internal request |
- // queue. This must be last in the method. |
- image_url_fetcher_->RemoveImageDataFetcherRequest(url_); |
-} |
- |
ImageDataFetcher::ImageDataFetcher( |
net::URLRequestContextGetter* url_request_context_getter) |
: url_request_context_getter_(url_request_context_getter) {} |
@@ -87,15 +38,29 @@ ImageDataFetcher::~ImageDataFetcher() {} |
void ImageDataFetcher::FetchImageData( |
const GURL& url, const ImageDataFetcherCallback& callback) { |
+ std::unique_ptr<net::URLFetcher> url_fetcher = |
+ net::URLFetcher::Create(url, net::URLFetcher::GET, this); |
+ |
std::unique_ptr<ImageDataFetcherRequest> request( |
- new ImageDataFetcherRequest(url, callback, this)); |
- request->Start(url_request_context_getter_.get()); |
- pending_requests_[url] = std::move(request); |
+ new ImageDataFetcherRequest(callback, std::move(url_fetcher))); |
+ request->url_fetcher->SetRequestContext(url_request_context_getter_.get()); |
+ request->url_fetcher->Start(); |
+ |
+ pending_requests_[request->url_fetcher.get()] = std::move(request); |
} |
-void ImageDataFetcher::RemoveImageDataFetcherRequest(const GURL& image_url) { |
- size_t count = pending_requests_.erase(image_url); |
- DCHECK(count); |
+void ImageDataFetcher::OnURLFetchComplete(const net::URLFetcher* source) { |
+ auto request_iter = pending_requests_.find(source); |
+ DCHECK(request_iter != pending_requests_.end()); |
+ |
+ std::string image_data; |
+ if (source->GetStatus().status() == net::URLRequestStatus::SUCCESS) { |
+ source->GetResponseAsString(&image_data); |
+ } |
+ request_iter->second->callback.Run(image_data); |
+ |
+ // Remove the finished request. |
+ pending_requests_.erase(request_iter); |
} |
} // namespace image_fetcher |