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

Unified Diff: chrome/browser/search/suggestions/image_fetcher_impl.cc

Issue 2064793004: Reland: Split the code for fetching images and for decoding images into two separate classes. This w (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Only start image requests once (Fixes a bug). 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 | « chrome/browser/search/suggestions/image_fetcher_impl.h ('k') | chrome/chrome_browser.gypi » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/search/suggestions/image_fetcher_impl.cc
diff --git a/chrome/browser/search/suggestions/image_fetcher_impl.cc b/chrome/browser/search/suggestions/image_fetcher_impl.cc
index 5b99e0c94397d16769f7391042f5952634304cc1..f2173a1f4540fb1eb9a7467177e5db5631ced776 100644
--- a/chrome/browser/search/suggestions/image_fetcher_impl.cc
+++ b/chrome/browser/search/suggestions/image_fetcher_impl.cc
@@ -6,6 +6,8 @@
#include <string>
+#include "base/bind.h"
+#include "chrome/browser/search/suggestions/image_decoder_impl.h"
#include "content/public/browser/browser_thread.h"
#include "net/base/load_flags.h"
#include "net/url_request/url_request_context_getter.h"
@@ -15,19 +17,20 @@ namespace suggestions {
ImageFetcherImpl::ImageFetcherImpl(
net::URLRequestContextGetter* url_request_context)
- : delegate_(NULL), url_request_context_(url_request_context) {}
+ : delegate_(nullptr), url_request_context_(url_request_context),
+ image_decoder_(new suggestions::ImageDecoderImpl()),
+ image_data_fetcher_(
+ new image_fetcher::ImageDataFetcher(url_request_context_)) {
+}
ImageFetcherImpl::~ImageFetcherImpl() {}
-ImageFetcherImpl::ImageRequest::ImageRequest() : fetcher(NULL) {}
-
-ImageFetcherImpl::ImageRequest::ImageRequest(chrome::BitmapFetcher* f)
- : fetcher(f) {}
+ImageFetcherImpl::ImageRequest::ImageRequest() {}
ImageFetcherImpl::ImageRequest::ImageRequest(const ImageRequest& other) =
default;
-ImageFetcherImpl::ImageRequest::~ImageRequest() { delete fetcher; }
+ImageFetcherImpl::ImageRequest::~ImageRequest() { }
void ImageFetcherImpl::SetImageFetcherDelegate(
image_fetcher::ImageFetcherDelegate* delegate) {
@@ -43,39 +46,39 @@ void ImageFetcherImpl::StartOrQueueNetworkRequest(
// |image_url|, and queue if appropriate.
ImageRequestMap::iterator it = pending_net_requests_.find(image_url);
if (it == pending_net_requests_.end()) {
- // |image_url| is not being fetched, so create a request and initiate
- // the fetch.
- ImageRequest request(new chrome::BitmapFetcher(image_url, this));
+ ImageRequest request;
request.id = id;
request.callbacks.push_back(callback);
- request.fetcher->Init(
- url_request_context_, std::string(),
- net::URLRequest::CLEAR_REFERRER_ON_TRANSITION_FROM_SECURE_TO_INSECURE,
- net::LOAD_NORMAL);
- request.fetcher->Start();
pending_net_requests_[image_url].swap(&request);
+
+ image_data_fetcher_->FetchImageData(
+ image_url,
+ base::Bind(&ImageFetcherImpl::OnImageURLFetched,
+ base::Unretained(this), image_url));
} else {
// Request in progress. Register as an interested callback.
it->second.callbacks.push_back(callback);
}
}
-void ImageFetcherImpl::OnFetchComplete(const GURL& image_url,
- const SkBitmap* bitmap) {
+void ImageFetcherImpl::OnImageURLFetched(const GURL& image_url,
+ const std::string& image_data) {
+ // TODO(markusheintz): Add a method OnImageDataFetched on the delegate and
+ // call that here.
+ image_decoder_->DecodeImage(
+ image_data,
+ base::Bind(&ImageFetcherImpl::OnImageDecoded,
+ base::Unretained(this), image_url));
+}
+
+void ImageFetcherImpl::OnImageDecoded(const GURL& image_url,
+ const gfx::Image& image) {
+ // Get request for the given image_url from the request queue.
ImageRequestMap::iterator image_iter = pending_net_requests_.find(image_url);
DCHECK(image_iter != pending_net_requests_.end());
-
ImageRequest* request = &image_iter->second;
- // Here |bitmap| could be NULL. In this case an empty image is passed to the
- // callbacks and delegate. The pointer to the bitmap which is owned by the
- // BitmapFetcher ceases to exist after this function. The created gfx::Image
- // shares the pixels with the |bitmap|. The image is passed to the callbacks
- // and delegate that are run synchronously.
- gfx::Image image;
- if (bitmap != nullptr)
- image = gfx::Image::CreateFrom1xBitmap(*bitmap);
-
+ // Run all callbacks
for (const auto& callback : request->callbacks) {
callback.Run(request->id, image);
}
« no previous file with comments | « chrome/browser/search/suggestions/image_fetcher_impl.h ('k') | chrome/chrome_browser.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698