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

Unified Diff: chrome/browser/ui/webui/favicon_source.cc

Issue 2535463002: [Favicon] Stop caching the default favicon (Closed)
Patch Set: restructure the code Created 4 years 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/ui/webui/favicon_source.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/ui/webui/favicon_source.cc
diff --git a/chrome/browser/ui/webui/favicon_source.cc b/chrome/browser/ui/webui/favicon_source.cc
index 8ecedfbd5dfe03c668431458efc1ae3d7bd20189..9172f7d2688243b22fed2d77c9a0f18dab692daa 100644
--- a/chrome/browser/ui/webui/favicon_source.cc
+++ b/chrome/browser/ui/webui/favicon_source.cc
@@ -4,8 +4,6 @@
#include "chrome/browser/ui/webui/favicon_source.h"
-#include <cmath>
-
#include "base/bind.h"
#include "base/bind_helpers.h"
#include "base/strings/string_number_conversions.h"
@@ -23,8 +21,41 @@
#include "ui/base/layout.h"
#include "ui/base/resource/resource_bundle.h"
#include "ui/base/webui/web_ui_util.h"
+#include "ui/gfx/geometry/safe_integer_conversions.h"
#include "ui/resources/grit/ui_resources.h"
+namespace {
+
+struct DefaultFaviconResourceMap {
+ float scale;
+ int value;
+};
+
+const DefaultFaviconResourceMap kDefaultFaviconResources[] = {
+ {1.0f, IDR_DEFAULT_FAVICON},
+ {2.0f, IDR_DEFAULT_FAVICON_32},
+ {4.0f, IDR_DEFAULT_FAVICON_64}};
+
+// Return the resource id of default favicon, whose scale is closet to
+// |scale_factor|.
+int FindBestMatchDefaultFaviconResourceIdForScaleFactor(
+ ui::ScaleFactor scale_factor) {
+ float scale = ui::GetScaleForScaleFactor(scale_factor);
+ float smallest_diff = std::numeric_limits<float>::max();
+ int resource_id = IDR_DEFAULT_FAVICON;
+
+ for (size_t i = 0; i < arraysize(kDefaultFaviconResources); ++i) {
+ float diff = std::abs(kDefaultFaviconResources[i].scale - scale);
+ if (diff < smallest_diff) {
+ resource_id = kDefaultFaviconResources[i].value;
+ smallest_diff = diff;
+ }
+ }
+ return resource_id;
+}
+
+} // namespace
+
FaviconSource::IconRequest::IconRequest()
: size_in_dip(gfx::kFaviconSize), device_scale_factor(1.0f) {
}
@@ -81,7 +112,7 @@ void FaviconSource::StartDataRequest(
GURL url(parsed.url);
int desired_size_in_pixel =
- std::ceil(parsed.size_in_dip * parsed.device_scale_factor);
+ gfx::ToCeiledInt(parsed.size_in_dip * parsed.device_scale_factor);
if (parsed.is_icon_url) {
// TODO(michaelbai): Change GetRawFavicon to support combination of
@@ -178,33 +209,33 @@ void FaviconSource::SendDefaultResponse(
}
void FaviconSource::SendDefaultResponse(const IconRequest& icon_request) {
- int favicon_index;
int resource_id;
- switch (icon_request.size_in_dip) {
+ ui::ScaleFactor resource_scale_factor = ui::SCALE_FACTOR_NONE;
+
+ int desired_size_in_pixel = gfx::ToCeiledInt(
+ icon_request.size_in_dip * icon_request.device_scale_factor);
+
+ switch (desired_size_in_pixel) {
case 64:
- favicon_index = SIZE_64;
resource_id = IDR_DEFAULT_FAVICON_64;
break;
case 32:
- favicon_index = SIZE_32;
resource_id = IDR_DEFAULT_FAVICON_32;
break;
- default:
- favicon_index = SIZE_16;
+ case 16:
resource_id = IDR_DEFAULT_FAVICON;
break;
+ default:
+ resource_scale_factor =
+ ui::GetSupportedScaleFactor(icon_request.device_scale_factor);
+ resource_id = FindBestMatchDefaultFaviconResourceIdForScaleFactor(
+ resource_scale_factor);
+ break;
}
+
base::RefCountedMemory* default_favicon =
- default_favicons_[favicon_index].get();
Peter Kasting 2016/12/01 07:17:46 oshima suggested that just removing this cache mig
minggang 2016/12/01 08:40:24 By removing the cache, we can fix this bug apparen
-
- if (!default_favicon) {
- ui::ScaleFactor resource_scale_factor =
- ui::GetSupportedScaleFactor(icon_request.device_scale_factor);
- default_favicon =
- ResourceBundle::GetSharedInstance().LoadDataResourceBytesForScale(
- resource_id, resource_scale_factor);
- default_favicons_[favicon_index] = default_favicon;
- }
+ ResourceBundle::GetSharedInstance().LoadDataResourceBytesForScale(
+ resource_id, resource_scale_factor);
icon_request.callback.Run(default_favicon);
}
« no previous file with comments | « chrome/browser/ui/webui/favicon_source.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698