Index: chrome/browser/ui/intents/web_intent_icon_loader.cc |
diff --git a/chrome/browser/ui/intents/web_intent_icon_loader.cc b/chrome/browser/ui/intents/web_intent_icon_loader.cc |
deleted file mode 100644 |
index 6792a1474a29720dec4da3e80a82b6e4b9511d79..0000000000000000000000000000000000000000 |
--- a/chrome/browser/ui/intents/web_intent_icon_loader.cc |
+++ /dev/null |
@@ -1,159 +0,0 @@ |
-// Copyright (c) 2012 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 "chrome/browser/ui/intents/web_intent_icon_loader.h" |
- |
-#include "chrome/browser/favicon/favicon_service.h" |
-#include "chrome/browser/favicon/favicon_service_factory.h" |
-#include "chrome/browser/ui/intents/web_intent_picker_model.h" |
-#include "content/public/browser/browser_thread.h" |
-#include "net/base/load_flags.h" |
-#include "net/url_request/url_fetcher.h" |
-#include "net/url_request/url_fetcher_delegate.h" |
-#include "skia/ext/image_operations.h" |
-#include "ui/gfx/codec/png_codec.h" |
-#include "ui/gfx/favicon_size.h" |
- |
-namespace { |
- |
-typedef base::Callback<void(const gfx::Image&)> |
- ExtensionIconAvailableCallback; |
- |
-// Decodes an |icon_repsonse| as delivered via URLFetcher. The response should |
-// be in PNG format, but is not guaranteed to be. Posts the |callback| task |
-// when done. |
-void DecodeExtensionIconAndResize( |
- scoped_ptr<std::string> icon_response, |
- const ExtensionIconAvailableCallback& callback) { |
- SkBitmap icon_bitmap; |
- if (gfx::PNGCodec::Decode( |
- reinterpret_cast<const unsigned char*>(icon_response->data()), |
- icon_response->length(), |
- &icon_bitmap)) { |
- SkBitmap resized_icon = skia::ImageOperations::Resize( |
- icon_bitmap, |
- skia::ImageOperations::RESIZE_BEST, |
- gfx::kFaviconSize, gfx::kFaviconSize); |
- gfx::Image icon_image = gfx::Image::CreateFrom1xBitmap(resized_icon); |
- |
- content::BrowserThread::PostTask( |
- content::BrowserThread::UI, |
- FROM_HERE, |
- base::Bind(callback, icon_image)); |
- } |
-} |
- |
-// Self-deleting trampoline that forwards A URLFetcher response to a callback. |
-class URLFetcherTrampoline : public net::URLFetcherDelegate { |
- public: |
- typedef base::Callback<void(const net::URLFetcher* source)> |
- ForwardingCallback; |
- |
- explicit URLFetcherTrampoline(const ForwardingCallback& callback) |
- : callback_(callback) {} |
- virtual ~URLFetcherTrampoline() {} |
- |
- // net::URLFetcherDelegate implementation. |
- virtual void OnURLFetchComplete(const net::URLFetcher* source) OVERRIDE; |
- |
- private: |
- // Fowarding callback from |OnURLFetchComplete|. |
- ForwardingCallback callback_; |
-}; |
- |
-void URLFetcherTrampoline::OnURLFetchComplete( |
- const net::URLFetcher* source) { |
- DCHECK(!callback_.is_null()); |
- callback_.Run(source); |
- delete source; |
- delete this; |
-} |
- |
-} |
- |
-namespace web_intents { |
- |
-IconLoader::IconLoader(Profile* profile, |
- WebIntentPickerModel* model) |
- : profile_(profile), |
- model_(model), |
- ALLOW_THIS_IN_INITIALIZER_LIST(weak_ptr_factory_(this)) { |
-} |
- |
-IconLoader::~IconLoader() {} |
- |
-void IconLoader::LoadFavicon(const GURL& url) { |
- FaviconService* favicon_service = |
- FaviconServiceFactory::GetForProfile(profile_, |
- Profile::EXPLICIT_ACCESS); |
- |
- favicon_service->GetFaviconImageForURL( |
- FaviconService::FaviconForURLParams( |
- profile_, url, history::FAVICON, gfx::kFaviconSize), |
- base::Bind( |
- &IconLoader::OnFaviconDataAvailable, |
- weak_ptr_factory_.GetWeakPtr(), url), |
- &cancelable_task_tracker_); |
-} |
- |
-void IconLoader::LoadExtensionIcon(const GURL& url, |
- const std::string& extension_id) { |
- |
- net::URLFetcher* icon_url_fetcher = net::URLFetcher::Create( |
- 0, |
- url, |
- net::URLFetcher::GET, |
- new URLFetcherTrampoline( |
- base::Bind( |
- &IconLoader::OnExtensionIconURLFetchComplete, |
- weak_ptr_factory_.GetWeakPtr(), extension_id))); |
- |
- icon_url_fetcher->SetLoadFlags( |
- net::LOAD_DO_NOT_SEND_COOKIES | net::LOAD_DO_NOT_SAVE_COOKIES); |
- icon_url_fetcher->SetRequestContext(profile_->GetRequestContext()); |
- icon_url_fetcher->Start(); |
-} |
- |
-void IconLoader::OnFaviconDataAvailable( |
- const GURL& url, |
- const history::FaviconImageResult& image_result) { |
- if (!image_result.image.IsEmpty()) |
- model_->UpdateFaviconForServiceWithURL(url, image_result.image); |
-} |
- |
-void IconLoader::OnExtensionIconURLFetchComplete( |
- const std::string& extension_id, const net::URLFetcher* source) { |
- DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); |
- if (source->GetResponseCode() != 200) |
- return; |
- |
- scoped_ptr<std::string> response(new std::string); |
- if (!source->GetResponseAsString(response.get())) |
- return; |
- |
- // Decoding the extension icon needs to happen on a worker thread, not the |
- // UI thread. However, callbacks to IconLoader need to happen on the UI |
- // thread, since IconLoader lives on UI thread. (And WeakPtrs must be de- |
- // referenced on the thread they were created on). |
- ExtensionIconAvailableCallback available_callback = |
- base::Bind( |
- &IconLoader::OnExtensionIconAvailable, |
- weak_ptr_factory_.GetWeakPtr(), |
- extension_id); |
- |
- // Decode PNG and resize on worker thread. |
- content::BrowserThread::PostBlockingPoolTask( |
- FROM_HERE, |
- base::Bind(&DecodeExtensionIconAndResize, |
- base::Passed(&response), |
- available_callback)); |
-} |
- |
-void IconLoader::OnExtensionIconAvailable( |
- const std::string& extension_id, |
- const gfx::Image& icon_image) { |
- model_->SetSuggestedExtensionIconWithId(extension_id, icon_image); |
-} |
- |
-} // namespace web_intents |