Index: chrome/browser/favicon/favicon_service.cc |
diff --git a/chrome/browser/favicon/favicon_service.cc b/chrome/browser/favicon/favicon_service.cc |
index fd0f9eb557c4cd9931b4a70dee6df9e80020add7..9f0ff332cd1a5fe2e1caa498497ff1eb9ec0a895 100644 |
--- a/chrome/browser/favicon/favicon_service.cc |
+++ b/chrome/browser/favicon/favicon_service.cc |
@@ -45,6 +45,22 @@ CancelableTaskTracker::TaskId RunWithEmptyResultAsync( |
Bind(callback, std::vector<chrome::FaviconBitmapResult>())); |
} |
+// Return the TaskId to retreive the favicon from chrome specific URL. |
+CancelableTaskTracker::TaskId GetFaviconForChromeURL( |
+ Profile* profile, |
+ const GURL& page_url, |
+ const std::vector<ui::ScaleFactor>& desired_scale_factors, |
+ const FaviconService::FaviconResultsCallback& callback, |
+ CancelableTaskTracker* tracker) { |
+ CancelableTaskTracker::IsCanceledCallback is_canceled_cb; |
+ CancelableTaskTracker::TaskId id = tracker->NewTrackedTaskId(&is_canceled_cb); |
+ FaviconService::FaviconResultsCallback cancelable_cb = |
+ Bind(&CancelOrRunFaviconResultsCallback, is_canceled_cb, callback); |
+ ChromeWebUIControllerFactory::GetInstance()->GetFaviconForURL(profile, |
+ page_url, desired_scale_factors, cancelable_cb); |
+ return id; |
+} |
+ |
} // namespace |
FaviconService::FaviconService(HistoryService* history_service) |
@@ -169,6 +185,29 @@ CancelableTaskTracker::TaskId FaviconService::GetRawFaviconForURL( |
tracker); |
} |
+CancelableTaskTracker::TaskId FaviconService::GetLargestRawFaviconForURL( |
+ Profile* profile, |
+ const GURL& page_url, |
+ const std::vector<int>& icon_types, |
+ int minimum_size_in_pixels, |
+ const FaviconRawCallback& callback, |
+ CancelableTaskTracker* tracker) { |
+ FaviconResultsCallback favicon_results_callback = |
+ Bind(&FaviconService::RunFaviconRawCallbackWithBitmapResults, |
+ base::Unretained(this), callback, 0, ui::ScaleFactor()); |
+ if (page_url.SchemeIs(chrome::kChromeUIScheme) || |
+ page_url.SchemeIs(extensions::kExtensionScheme)) { |
+ std::vector<ui::ScaleFactor> scale_factor; |
+ scale_factor.push_back(ui::SCALE_FACTOR_100P); |
+ return GetFaviconForChromeURL(profile, page_url, scale_factor, |
+ favicon_results_callback, tracker); |
+ } else if (history_service_) { |
+ return history_service_->GetLargestFaviconForURL(page_url, icon_types, |
+ minimum_size_in_pixels, callback, tracker); |
+ } |
+ return RunWithEmptyResultAsync(favicon_results_callback, tracker); |
+} |
+ |
CancelableTaskTracker::TaskId FaviconService::GetFaviconForURL( |
const FaviconForURLParams& params, |
const FaviconResultsCallback& callback, |
@@ -284,15 +323,8 @@ CancelableTaskTracker::TaskId FaviconService::GetFaviconForURLImpl( |
CancelableTaskTracker* tracker) { |
if (params.page_url.SchemeIs(chrome::kChromeUIScheme) || |
params.page_url.SchemeIs(extensions::kExtensionScheme)) { |
- CancelableTaskTracker::IsCanceledCallback is_canceled_cb; |
- CancelableTaskTracker::TaskId id = |
- tracker->NewTrackedTaskId(&is_canceled_cb); |
- |
- FaviconResultsCallback cancelable_cb = |
- Bind(&CancelOrRunFaviconResultsCallback, is_canceled_cb, callback); |
- ChromeWebUIControllerFactory::GetInstance()->GetFaviconForURL( |
- params.profile, params.page_url, desired_scale_factors, cancelable_cb); |
- return id; |
+ return GetFaviconForChromeURL(params.profile, params.page_url, |
+ desired_scale_factors, callback, tracker); |
} else if (history_service_) { |
return history_service_->GetFaviconsForURL(params.page_url, |
params.icon_types, |
@@ -300,9 +332,8 @@ CancelableTaskTracker::TaskId FaviconService::GetFaviconForURLImpl( |
desired_scale_factors, |
callback, |
tracker); |
- } else { |
- return RunWithEmptyResultAsync(callback, tracker); |
} |
+ return RunWithEmptyResultAsync(callback, tracker); |
} |
void FaviconService::RunFaviconImageCallbackWithBitmapResults( |