| 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
|
|
|