Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1349)

Unified Diff: components/image_fetcher/image_data_fetcher.cc

Issue 2073753002: Simplify the ImageDataFetcher code. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Sync to tot Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « components/image_fetcher/image_data_fetcher.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
« no previous file with comments | « components/image_fetcher/image_data_fetcher.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698