Chromium Code Reviews| 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, |