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..e4b54e656b21c24b0472b382dc67e2f1b117867b 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,69 +13,25 @@ |
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 {} |
- |
- // 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_; |
+// 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); |
+ ~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_; |
+ ImageDataFetcherCallback callback; |
- // The ImageDataFetcher that owns the ImageDataFetcherRequest. |
- ImageDataFetcher* image_url_fetcher_; |
- |
- 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_); |
+ std::unique_ptr<net::URLFetcher> url_fetcher) |
+ : callback(callback), |
+ url_fetcher(std::move(url_fetcher)) { |
Marc Treib
2016/06/16 11:52:09
optional: You could just inline this above.
|
} |
ImageDataFetcher::ImageDataFetcher( |
@@ -87,15 +42,30 @@ 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 |