Index: ios/chrome/browser/suggestions/image_fetcher_impl.mm |
diff --git a/ios/chrome/browser/suggestions/image_fetcher_impl.mm b/ios/chrome/browser/suggestions/image_fetcher_impl.mm |
new file mode 100644 |
index 0000000000000000000000000000000000000000..78f20e625a6941e44172da092bee6bf672900f1b |
--- /dev/null |
+++ b/ios/chrome/browser/suggestions/image_fetcher_impl.mm |
@@ -0,0 +1,66 @@ |
+// Copyright 2014 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "ios/chrome/browser/suggestions/image_fetcher_impl.h" |
+ |
+#include <UIKit/UIKit.h> |
+ |
+#include "base/threading/sequenced_worker_pool.h" |
+#include "ios/chrome/browser/net/image_fetcher.h" |
+#include "skia/ext/skia_utils_ios.h" |
+ |
+namespace suggestions { |
+ |
+ImageFetcherImpl::ImageFetcherImpl( |
+ net::URLRequestContextGetter* url_request_context, |
+ base::SequencedWorkerPool* blocking_pool) { |
+ imageFetcher_.reset(new image_fetcher::ImageFetcher(blocking_pool)); |
+ imageFetcher_->SetRequestContextGetter(url_request_context); |
+} |
+ |
+ImageFetcherImpl::~ImageFetcherImpl() { |
+} |
+ |
+void ImageFetcherImpl::SetImageFetcherDelegate(ImageFetcherDelegate* delegate) { |
+ DCHECK(delegate); |
+ delegate_ = delegate; |
+} |
+ |
+void ImageFetcherImpl::StartOrQueueNetworkRequest( |
+ const GURL& url, |
+ const GURL& image_url, |
+ base::Callback<void(const GURL&, const SkBitmap*)> callback) { |
+ if (image_url.is_empty()) { |
+ callback.Run(url, nullptr); |
+ if (delegate_) { |
+ delegate_->OnImageFetched(url, nullptr); |
+ } |
+ return; |
+ } |
+ // Copy url reference so it's retained. |
+ const GURL page_url(url); |
+ image_fetcher::Callback fetcher_callback = |
+ ^(const GURL& original_url, int response_code, NSData* data) { |
+ if (data) { |
+ // Most likely always returns 1x images. |
+ UIImage* image = [UIImage imageWithData:data scale:1]; |
+ if (image) { |
+ SkBitmap bitmap = |
+ gfx::CGImageToSkBitmap(image.CGImage, [image size], YES); |
+ callback.Run(page_url, &bitmap); |
+ if (delegate_) { |
+ delegate_->OnImageFetched(page_url, &bitmap); |
+ } |
+ return; |
+ } |
+ } |
+ callback.Run(page_url, nullptr); |
+ if (delegate_) { |
+ delegate_->OnImageFetched(page_url, nullptr); |
+ } |
+ }; |
+ imageFetcher_->StartDownload(image_url, fetcher_callback); |
+} |
+ |
+} // namespace suggestions |