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

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
« no previous file with comments | « chrome/browser/favicon/favicon_service.h ('k') | chrome/browser/history/history_backend.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/favicon/favicon_service.cc
diff --git a/chrome/browser/favicon/favicon_service.cc b/chrome/browser/favicon/favicon_service.cc
index 5d4763e77e597223cf4709b5f8665bd61a02fdb2..77c5f99b5e7fadf98d4e2dbf80ee5c7e38ea70e8 100644
--- a/chrome/browser/favicon/favicon_service.cc
+++ b/chrome/browser/favicon/favicon_service.cc
@@ -4,6 +4,8 @@
#include "chrome/browser/favicon/favicon_service.h"
+#include <cmath>
+
#include "base/hash.h"
#include "base/message_loop/message_loop_proxy.h"
#include "chrome/browser/history/history_backend.h"
@@ -49,7 +51,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 +60,28 @@ 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 the size in pixel that a favicon should be based on |size_in_dip|
+// and |scale_factor|.
+int GetSizeInPixel(int size_in_dip, ui::ScaleFactor scale_factor) {
+ return ceil(size_in_dip * ui::GetScaleForScaleFactor(scale_factor));
+}
+
+// Returns a vector of pixel edge sizes from |size_in_dip| and
+// favicon_base::GetFaviconScaleFactors().
+std::vector<int> GetPixelSizesForFaviconScales(int size_in_dip) {
+ std::vector<ui::ScaleFactor> scale_factors =
+ favicon_base::GetFaviconScaleFactors();
+ std::vector<int> sizes_in_pixel;
+ for (size_t i = 0; i < scale_factors.size(); ++i) {
+ sizes_in_pixel.push_back(GetSizeInPixel(size_in_dip, scale_factors[i]));
+ }
+ return sizes_in_pixel;
+}
+
} // namespace
FaviconService::FaviconService(Profile* profile)
@@ -89,12 +109,12 @@ base::CancelableTaskTracker::TaskId FaviconService::GetFaviconImage(
if (history_service_) {
std::vector<GURL> icon_urls;
icon_urls.push_back(icon_url);
- return history_service_->GetFavicons(icon_urls,
- icon_type,
- desired_size_in_dip,
- favicon_base::GetFaviconScaleFactors(),
- callback_runner,
- tracker);
+ return history_service_->GetFavicons(
+ icon_urls,
+ icon_type,
+ GetPixelSizesForFaviconScales(desired_size_in_dip),
+ callback_runner,
+ tracker);
}
return RunWithEmptyResultAsync(callback_runner, tracker);
}
@@ -106,22 +126,22 @@ base::CancelableTaskTracker::TaskId FaviconService::GetRawFavicon(
ui::ScaleFactor desired_scale_factor,
const favicon_base::FaviconRawBitmapCallback& callback,
base::CancelableTaskTracker* tracker) {
+ int desired_size_in_pixel =
+ GetSizeInPixel(desired_size_in_dip, desired_scale_factor);
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);
}
@@ -135,12 +155,12 @@ base::CancelableTaskTracker::TaskId FaviconService::GetFavicon(
if (history_service_) {
std::vector<GURL> icon_urls;
icon_urls.push_back(icon_url);
- return history_service_->GetFavicons(icon_urls,
- icon_type,
- desired_size_in_dip,
- favicon_base::GetFaviconScaleFactors(),
- callback,
- tracker);
+ return history_service_->GetFavicons(
+ icon_urls,
+ icon_type,
+ GetPixelSizesForFaviconScales(desired_size_in_dip),
+ callback,
+ tracker);
}
return RunWithEmptyResultAsync(callback, tracker);
}
@@ -158,8 +178,7 @@ FaviconService::UpdateFaviconMappingsAndFetch(
page_url,
icon_urls,
icon_types,
- desired_size_in_dip,
- favicon_base::GetFaviconScaleFactors(),
+ GetPixelSizesForFaviconScales(desired_size_in_dip),
callback,
tracker);
}
@@ -172,7 +191,7 @@ base::CancelableTaskTracker::TaskId FaviconService::GetFaviconImageForPageURL(
base::CancelableTaskTracker* tracker) {
return GetFaviconForPageURLImpl(
params,
- favicon_base::GetFaviconScaleFactors(),
+ GetPixelSizesForFaviconScales(params.desired_size_in_dip),
Bind(&FaviconService::RunFaviconImageCallbackWithBitmapResults,
base::Unretained(this),
callback,
@@ -185,16 +204,17 @@ 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);
+ int desired_size_in_pixel =
+ GetSizeInPixel(params.desired_size_in_dip, desired_scale_factor);
+ 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);
}
@@ -210,13 +230,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_) {
@@ -231,28 +250,28 @@ base::CancelableTaskTracker::TaskId FaviconService::GetFaviconForPageURL(
const favicon_base::FaviconResultsCallback& callback,
base::CancelableTaskTracker* tracker) {
return GetFaviconForPageURLImpl(
- params, favicon_base::GetFaviconScaleFactors(), callback, tracker);
+ params,
+ GetPixelSizesForFaviconScales(params.desired_size_in_dip),
+ 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);
}
@@ -335,19 +354,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);
}
@@ -373,8 +391,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()) {
@@ -389,19 +406,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;
}
@@ -409,9 +421,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 = favicon_base::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,
« no previous file with comments | « chrome/browser/favicon/favicon_service.h ('k') | chrome/browser/history/history_backend.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698