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..033349e1ddd40814e07b0f6921a8a4f1e92c39c4 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,7 @@ |
#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/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" |
@@ -74,6 +75,7 @@ |
#include "extensions/common/extension.h" |
#include "extensions/common/feature_switch.h" |
#include "extensions/common/manifest.h" |
+#include "ui/base/layout.h" |
#include "ui/gfx/favicon_size.h" |
#include "ui/web_dialogs/web_dialog_ui.h" |
#include "url/gurl.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 = ui::GetSupportedScaleFactors(); |
oshima
2014/06/18 07:03:02
Does this have to be 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]; |
+ ui::ScaleFactor scale_factor = scale_factors[selected_index]; |
scoped_refptr<base::RefCountedMemory> bitmap(GetFaviconResourceBytes( |
- url, scale_factors[i])); |
+ url, scale_factor)); |
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]; |
} |
} |