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

Unified Diff: chrome/browser/favicon/favicon_service.cc

Issue 336423006: Pass in a set of requested favicon pixel sizes to the HistoryService (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 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
Index: chrome/browser/favicon/favicon_service.cc
diff --git a/chrome/browser/favicon/favicon_service.cc b/chrome/browser/favicon/favicon_service.cc
index afa01428398226f938d45479df75b4f8f5a15747..17d0346ec952b49db8e6f175d1ae62e74d7a9df3 100644
--- a/chrome/browser/favicon/favicon_service.cc
+++ b/chrome/browser/favicon/favicon_service.cc
@@ -49,7 +49,7 @@ base::CancelableTaskTracker::TaskId RunWithEmptyResultAsync(
base::CancelableTaskTracker::TaskId GetFaviconForChromeURL(
Profile* profile,
const GURL& page_url,
- const std::vector<ui::ScaleFactor>& desired_scale_factors,
+ const std::vector<int>& desired_sizes_in_pixel,
const favicon_base::FaviconResultsCallback& callback,
base::CancelableTaskTracker* tracker) {
base::CancelableTaskTracker::IsCanceledCallback is_canceled_cb;
@@ -58,10 +58,22 @@ base::CancelableTaskTracker::TaskId GetFaviconForChromeURL(
favicon_base::FaviconResultsCallback cancelable_cb =
Bind(&CancelOrRunFaviconResultsCallback, is_canceled_cb, callback);
ChromeWebUIControllerFactory::GetInstance()->GetFaviconForURL(profile,
- page_url, desired_scale_factors, cancelable_cb);
+ page_url, desired_sizes_in_pixel, cancelable_cb);
return id;
}
+// Returns a vector of pixel edge sizes from |size_in_dip| and |scale_factors|.
+std::vector<int> GetPixelSizes(
oshima 2014/06/18 07:03:02 looks like all calls are just passing GetFaviconSc
+ int size_in_dip,
+ const std::vector<ui::ScaleFactor>& scale_factors) {
+ std::vector<int> sizes_in_pixel;
+ for (size_t i = 0; i < scale_factors.size(); ++i) {
+ float scale = ui::GetScaleForScaleFactor(scale_factors[i]);
+ sizes_in_pixel.push_back(static_cast<int>(size_in_dip * scale + 0.5f));
+ }
+ return sizes_in_pixel;
+}
+
} // namespace
FaviconService::FaviconService(Profile* profile)
@@ -89,9 +101,11 @@ base::CancelableTaskTracker::TaskId FaviconService::GetFaviconImage(
if (history_service_) {
std::vector<GURL> icon_urls;
icon_urls.push_back(icon_url);
+ std::vector<int> desired_sizes_in_pixel =
+ GetPixelSizes(desired_size_in_dip,
+ FaviconUtil::GetFaviconScaleFactors());
return history_service_->GetFavicons(
- icon_urls, icon_type, desired_size_in_dip,
- FaviconUtil::GetFaviconScaleFactors(), callback_runner, tracker);
+ icon_urls, icon_type, desired_sizes_in_pixel, callback_runner, tracker);
}
return RunWithEmptyResultAsync(callback_runner, tracker);
}
@@ -103,22 +117,23 @@ base::CancelableTaskTracker::TaskId FaviconService::GetRawFavicon(
ui::ScaleFactor desired_scale_factor,
const favicon_base::FaviconRawBitmapCallback& callback,
base::CancelableTaskTracker* tracker) {
+ float desired_scale = ui::GetScaleForScaleFactor(desired_scale_factor);
+ int desired_size_in_pixel =
+ static_cast<int>(desired_size_in_dip * desired_scale + 0.5);
favicon_base::FaviconResultsCallback callback_runner =
Bind(&FaviconService::RunFaviconRawBitmapCallbackWithBitmapResults,
base::Unretained(this),
callback,
- desired_size_in_dip,
- desired_scale_factor);
+ desired_size_in_pixel);
if (history_service_) {
std::vector<GURL> icon_urls;
icon_urls.push_back(icon_url);
- std::vector<ui::ScaleFactor> desired_scale_factors;
- desired_scale_factors.push_back(desired_scale_factor);
+ std::vector<int> desired_sizes_in_pixel;
+ desired_sizes_in_pixel.push_back(desired_size_in_pixel);
return history_service_->GetFavicons(
- icon_urls, icon_type, desired_size_in_dip, desired_scale_factors,
- callback_runner, tracker);
+ icon_urls, icon_type, desired_sizes_in_pixel, callback_runner, tracker);
}
return RunWithEmptyResultAsync(callback_runner, tracker);
}
@@ -132,9 +147,11 @@ base::CancelableTaskTracker::TaskId FaviconService::GetFavicon(
if (history_service_) {
std::vector<GURL> icon_urls;
icon_urls.push_back(icon_url);
+ std::vector<int> desired_sizes_in_pixel =
+ GetPixelSizes(desired_size_in_dip,
+ FaviconUtil::GetFaviconScaleFactors());
return history_service_->GetFavicons(
- icon_urls, icon_type, desired_size_in_dip,
- FaviconUtil::GetFaviconScaleFactors(), callback, tracker);
+ icon_urls, icon_type, desired_sizes_in_pixel, callback, tracker);
}
return RunWithEmptyResultAsync(callback, tracker);
}
@@ -148,9 +165,12 @@ FaviconService::UpdateFaviconMappingsAndFetch(
const favicon_base::FaviconResultsCallback& callback,
base::CancelableTaskTracker* tracker) {
if (history_service_) {
+ std::vector<int> desired_sizes_in_pixel =
+ GetPixelSizes(desired_size_in_dip,
+ FaviconUtil::GetFaviconScaleFactors());
return history_service_->UpdateFaviconMappingsAndFetch(
- page_url, icon_urls, icon_types, desired_size_in_dip,
- FaviconUtil::GetFaviconScaleFactors(), callback, tracker);
+ page_url, icon_urls, icon_types, desired_sizes_in_pixel, callback,
+ tracker);
}
return RunWithEmptyResultAsync(callback, tracker);
}
@@ -159,9 +179,12 @@ base::CancelableTaskTracker::TaskId FaviconService::GetFaviconImageForPageURL(
const FaviconForPageURLParams& params,
const favicon_base::FaviconImageCallback& callback,
base::CancelableTaskTracker* tracker) {
+ std::vector<int> desired_sizes_in_pixel =
+ GetPixelSizes(params.desired_size_in_dip,
+ FaviconUtil::GetFaviconScaleFactors());
return GetFaviconForPageURLImpl(
params,
- FaviconUtil::GetFaviconScaleFactors(),
+ desired_sizes_in_pixel,
Bind(&FaviconService::RunFaviconImageCallbackWithBitmapResults,
base::Unretained(this),
callback,
@@ -174,16 +197,18 @@ base::CancelableTaskTracker::TaskId FaviconService::GetRawFaviconForPageURL(
ui::ScaleFactor desired_scale_factor,
const favicon_base::FaviconRawBitmapCallback& callback,
base::CancelableTaskTracker* tracker) {
- std::vector<ui::ScaleFactor> desired_scale_factors;
- desired_scale_factors.push_back(desired_scale_factor);
+ float desired_scale = ui::GetScaleForScaleFactor(desired_scale_factor);
+ int desired_size_in_pixel =
+ static_cast<int>(params.desired_size_in_dip * desired_scale + 0.5f);
+ std::vector<int> desired_sizes_in_pixel;
+ desired_sizes_in_pixel.push_back(desired_size_in_pixel);
return GetFaviconForPageURLImpl(
params,
- desired_scale_factors,
+ desired_sizes_in_pixel,
Bind(&FaviconService::RunFaviconRawBitmapCallbackWithBitmapResults,
base::Unretained(this),
callback,
- params.desired_size_in_dip,
- desired_scale_factor),
+ desired_size_in_pixel),
tracker);
}
@@ -199,13 +224,12 @@ FaviconService::GetLargestRawFaviconForPageURL(
Bind(&FaviconService::RunFaviconRawBitmapCallbackWithBitmapResults,
base::Unretained(this),
callback,
- 0,
- ui::ScaleFactor());
+ 0);
if (page_url.SchemeIs(content::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,
+ std::vector<int> desired_sizes_in_pixel;
+ desired_sizes_in_pixel.push_back(0);
+ return GetFaviconForChromeURL(profile, page_url, desired_sizes_in_pixel,
favicon_results_callback, tracker);
}
if (history_service_) {
@@ -219,29 +243,29 @@ base::CancelableTaskTracker::TaskId FaviconService::GetFaviconForPageURL(
const FaviconForPageURLParams& params,
const favicon_base::FaviconResultsCallback& callback,
base::CancelableTaskTracker* tracker) {
+ std::vector<int> desired_sizes_in_pixel =
+ GetPixelSizes(params.desired_size_in_dip,
+ FaviconUtil::GetFaviconScaleFactors());
return GetFaviconForPageURLImpl(
- params, FaviconUtil::GetFaviconScaleFactors(), callback, tracker);
+ params, desired_sizes_in_pixel, callback, tracker);
}
base::CancelableTaskTracker::TaskId FaviconService::GetLargestRawFaviconForID(
favicon_base::FaviconID favicon_id,
const favicon_base::FaviconRawBitmapCallback& callback,
base::CancelableTaskTracker* tracker) {
- // Use 0 as |desired_size_in_dip| to get the largest bitmap for |favicon_id|
- // without any resizing.
- int desired_size_in_dip = 0;
- ui::ScaleFactor desired_scale_factor = ui::SCALE_FACTOR_100P;
+ // Use 0 as |desired_size| to get the largest bitmap for |favicon_id| without
+ // any resizing.
+ int desired_size = 0;
favicon_base::FaviconResultsCallback callback_runner =
Bind(&FaviconService::RunFaviconRawBitmapCallbackWithBitmapResults,
base::Unretained(this),
callback,
- desired_size_in_dip,
- desired_scale_factor);
+ desired_size);
if (history_service_) {
return history_service_->GetFaviconForID(
- favicon_id, desired_size_in_dip, desired_scale_factor,
- callback_runner, tracker);
+ favicon_id, desired_size, callback_runner, tracker);
}
return RunWithEmptyResultAsync(callback_runner, tracker);
}
@@ -324,19 +348,18 @@ FaviconService::~FaviconService() {}
base::CancelableTaskTracker::TaskId FaviconService::GetFaviconForPageURLImpl(
const FaviconForPageURLParams& params,
- const std::vector<ui::ScaleFactor>& desired_scale_factors,
+ const std::vector<int>& desired_sizes_in_pixel,
const favicon_base::FaviconResultsCallback& callback,
base::CancelableTaskTracker* tracker) {
if (params.page_url.SchemeIs(content::kChromeUIScheme) ||
params.page_url.SchemeIs(extensions::kExtensionScheme)) {
return GetFaviconForChromeURL(profile_, params.page_url,
- desired_scale_factors, callback, tracker);
+ desired_sizes_in_pixel, callback, tracker);
}
if (history_service_) {
return history_service_->GetFaviconsForURL(params.page_url,
params.icon_types,
- params.desired_size_in_dip,
- desired_scale_factors,
+ desired_sizes_in_pixel,
callback,
tracker);
}
@@ -362,8 +385,7 @@ void FaviconService::RunFaviconImageCallbackWithBitmapResults(
void FaviconService::RunFaviconRawBitmapCallbackWithBitmapResults(
const favicon_base::FaviconRawBitmapCallback& callback,
- int desired_size_in_dip,
- ui::ScaleFactor desired_scale_factor,
+ int desired_size_in_pixel,
const std::vector<favicon_base::FaviconRawBitmapResult>&
favicon_bitmap_results) {
if (favicon_bitmap_results.empty() || !favicon_bitmap_results[0].is_valid()) {
@@ -378,19 +400,14 @@ void FaviconService::RunFaviconRawBitmapCallbackWithBitmapResults(
// If the desired size is 0, SelectFaviconFrames() will return the largest
// bitmap without doing any resizing. As |favicon_bitmap_results| has bitmap
// data for a single bitmap, return it and avoid an unnecessary decode.
- if (desired_size_in_dip == 0) {
+ if (desired_size_in_pixel == 0) {
callback.Run(bitmap_result);
return;
}
// If history bitmap is already desired pixel size, return early.
- float desired_scale = ui::GetScaleForScaleFactor(desired_scale_factor);
- int desired_edge_width_in_pixel = static_cast<int>(
- desired_size_in_dip * desired_scale + 0.5f);
-
- gfx::Size desired_size_in_pixel(desired_edge_width_in_pixel,
- desired_edge_width_in_pixel);
- if (bitmap_result.pixel_size == desired_size_in_pixel) {
+ if (bitmap_result.pixel_size.width() == desired_size_in_pixel &&
+ bitmap_result.pixel_size.height() == desired_size_in_pixel) {
callback.Run(bitmap_result);
return;
}
@@ -398,9 +415,9 @@ void FaviconService::RunFaviconRawBitmapCallbackWithBitmapResults(
// Convert raw bytes to SkBitmap, resize via SelectFaviconFrames(), then
// convert back.
std::vector<ui::ScaleFactor> desired_scale_factors;
- desired_scale_factors.push_back(desired_scale_factor);
+ desired_scale_factors.push_back(ui::SCALE_FACTOR_100P);
gfx::Image resized_image = FaviconUtil::SelectFaviconFramesFromPNGs(
- favicon_bitmap_results, desired_scale_factors, desired_size_in_dip);
+ favicon_bitmap_results, desired_scale_factors, desired_size_in_pixel);
std::vector<unsigned char> resized_bitmap_data;
if (!gfx::PNGCodec::EncodeBGRASkBitmap(resized_image.AsBitmap(), false,

Powered by Google App Engine
This is Rietveld 408576698