Index: chrome/browser/favicon/favicon_service.cc |
diff --git a/chrome/browser/favicon/favicon_service.cc b/chrome/browser/favicon/favicon_service.cc |
index 064151e925a10491667a4d449234b26602522807..5e33fcb5714ed6c5b0c6d56f8733fd83d43ae7ef 100644 |
--- a/chrome/browser/favicon/favicon_service.cc |
+++ b/chrome/browser/favicon/favicon_service.cc |
@@ -14,7 +14,7 @@ |
#include "chrome/browser/ui/webui/chrome_web_ui_controller_factory.h" |
#include "chrome/common/importer/imported_favicon_usage.h" |
#include "chrome/common/url_constants.h" |
-#include "components/favicon_base/favicon_types.h" |
+#include "components/favicon_base/fallback_icon_service.h" |
#include "components/favicon_base/favicon_util.h" |
#include "components/favicon_base/select_favicon_frames.h" |
#include "extensions/common/constants.h" |
@@ -22,11 +22,14 @@ |
#include "ui/gfx/codec/png_codec.h" |
#include "ui/gfx/favicon_size.h" |
#include "ui/gfx/image/image_skia.h" |
+#include "url/gurl.h" |
using base::Bind; |
namespace { |
+const int kMaxFallbackFaviconSize = 288; |
+ |
void CancelOrRunFaviconResultsCallback( |
const base::CancelableTaskTracker::IsCanceledCallback& is_canceled, |
const favicon_base::FaviconResultsCallback& callback, |
@@ -81,6 +84,7 @@ FaviconService::FaviconService(Profile* profile, FaviconClient* favicon_client) |
: history_service_(HistoryServiceFactory::GetForProfile( |
profile, |
ServiceAccessType::EXPLICIT_ACCESS)), |
+ fallback_icon_service_(new favicon_base::FallbackIconService()), |
profile_(profile), |
favicon_client_(favicon_client) { |
} |
@@ -170,6 +174,29 @@ base::CancelableTaskTracker::TaskId FaviconService::GetFaviconImageForPageURL( |
tracker); |
} |
+base::CancelableTaskTracker::TaskId FaviconService::GetRawFallbackFaviconImage( |
+ const GURL& icon_url, |
+ favicon_base::IconType icon_type, |
+ int desired_size_in_pixel, |
+ const favicon_base::FallbackIconSpecs& specs, |
+ const favicon_base::FaviconRawBitmapCallback& callback, |
+ base::CancelableTaskTracker* tracker) { |
+ int size_to_use = desired_size_in_pixel; |
+ if (desired_size_in_pixel == 0 || |
+ desired_size_in_pixel > kMaxFallbackFaviconSize) { |
+ size_to_use = kMaxFallbackFaviconSize; |
+ } |
+ |
+ favicon_base::FaviconResultsCallback callback_runner = |
+ Bind(&FaviconService::RunFaviconRawBitmapCallbackWithBitmapResults, |
+ base::Unretained(this), |
+ callback, |
+ size_to_use); |
+ |
+ return fallback_icon_service_->GetFallbackIcon( |
+ icon_url, size_to_use, specs, callback_runner, tracker); |
+} |
+ |
base::CancelableTaskTracker::TaskId FaviconService::GetRawFaviconForPageURL( |
const GURL& page_url, |
int icon_types, |