| Index: chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc
|
| diff --git a/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc b/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc
|
| index d9bd629f3da004599d961095cb0c743d2056b006..4c0ca3ba07c67253faaf35211a2a8e453182555d 100644
|
| --- a/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc
|
| +++ b/chrome/browser/ui/webui/chrome_web_ui_controller_factory.cc
|
| @@ -62,6 +62,8 @@
|
| #include "components/dom_distiller/core/dom_distiller_constants.h"
|
| #include "components/dom_distiller/core/dom_distiller_service.h"
|
| #include "components/dom_distiller/webui/dom_distiller_ui.h"
|
| +#include "components/favicon_base/favicon_util.h"
|
| +#include "components/favicon_base/select_favicon_frames.h"
|
| #include "components/password_manager/core/common/password_manager_switches.h"
|
| #include "components/signin/core/common/profile_management_switches.h"
|
| #include "content/public/browser/web_contents.h"
|
| @@ -570,7 +572,7 @@ WebUIController* ChromeWebUIControllerFactory::CreateWebUIControllerForURL(
|
| void ChromeWebUIControllerFactory::GetFaviconForURL(
|
| Profile* profile,
|
| const GURL& page_url,
|
| - const std::vector<ui::ScaleFactor>& scale_factors,
|
| + const std::vector<int>& desired_sizes_in_pixel,
|
| const favicon_base::FaviconResultsCallback& callback) const {
|
| // Before determining whether page_url is an extension url, we must handle
|
| // overrides. This changes urls in |kChromeUIScheme| to extension urls, and
|
| @@ -594,9 +596,27 @@ void ChromeWebUIControllerFactory::GetFaviconForURL(
|
| std::vector<favicon_base::FaviconRawBitmapResult>* favicon_bitmap_results =
|
| new std::vector<favicon_base::FaviconRawBitmapResult>();
|
|
|
| + // Assume that GetFaviconResourceBytes() returns favicons which are
|
| + // |gfx::kFaviconSize| x |gfx::kFaviconSize| DIP.
|
| + std::vector<ui::ScaleFactor> scale_factors =
|
| + favicon_base::GetFaviconScaleFactors();
|
| + std::vector<gfx::Size> candidate_sizes;
|
| for (size_t i = 0; i < scale_factors.size(); ++i) {
|
| + float scale = ui::GetScaleForScaleFactor(scale_factors[i]);
|
| + int candidate_edge_size =
|
| + static_cast<int>(gfx::kFaviconSize * scale + 0.5f);
|
| + candidate_sizes.push_back(
|
| + gfx::Size(candidate_edge_size, candidate_edge_size));
|
| + }
|
| + std::vector<size_t> selected_indices;
|
| + SelectFaviconFrameIndices(candidate_sizes,
|
| + desired_sizes_in_pixel,
|
| + &selected_indices,
|
| + NULL);
|
| + for (size_t i = 0; i < selected_indices.size(); ++i) {
|
| + size_t selected_index = selected_indices[i];
|
| scoped_refptr<base::RefCountedMemory> bitmap(GetFaviconResourceBytes(
|
| - url, scale_factors[i]));
|
| + url, scale_factors[selected_index]));
|
| if (bitmap.get() && bitmap->size()) {
|
| favicon_base::FaviconRawBitmapResult bitmap_result;
|
| bitmap_result.bitmap_data = bitmap;
|
| @@ -604,12 +624,7 @@ void ChromeWebUIControllerFactory::GetFaviconForURL(
|
| bitmap_result.icon_type = favicon_base::FAVICON;
|
| favicon_bitmap_results->push_back(bitmap_result);
|
|
|
| - // Assume that |bitmap| is |gfx::kFaviconSize| x |gfx::kFaviconSize|
|
| - // DIP.
|
| - float scale = ui::GetScaleForScaleFactor(scale_factors[i]);
|
| - int edge_pixel_size =
|
| - static_cast<int>(gfx::kFaviconSize * scale + 0.5f);
|
| - bitmap_result.pixel_size = gfx::Size(edge_pixel_size, edge_pixel_size);
|
| + bitmap_result.pixel_size = candidate_sizes[selected_index];
|
| }
|
| }
|
|
|
|
|