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

Unified Diff: chrome/browser/favicon/favicon_handler.cc

Issue 11746010: Cleanup history favicon code (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 11 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_handler.h ('k') | chrome/browser/favicon/favicon_handler_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/favicon/favicon_handler.cc
diff --git a/chrome/browser/favicon/favicon_handler.cc b/chrome/browser/favicon/favicon_handler.cc
index 539ae64681fcaa490c4eafca0e68566d0e3b7dca..a25f5363fdff8ddcb0d99c9f10c670222fcf495a 100644
--- a/chrome/browser/favicon/favicon_handler.cc
+++ b/chrome/browser/favicon/favicon_handler.cc
@@ -94,59 +94,41 @@ bool IsValid(const history::FaviconBitmapResult& bitmap_result) {
return bitmap_result.is_valid();
}
-// Return list with the current value and historical values of
-// history::GetDefaultFaviconSizes().
-const std::vector<history::FaviconSizes>& GetHistoricalDefaultFaviconSizes() {
- CR_DEFINE_STATIC_LOCAL(
- std::vector<history::FaviconSizes>, kHistoricalFaviconSizes, ());
- if (kHistoricalFaviconSizes.empty()) {
- kHistoricalFaviconSizes.push_back(history::GetDefaultFaviconSizes());
- // The default favicon sizes used to be a single empty size.
- history::FaviconSizes old_favicon_sizes;
- old_favicon_sizes.push_back(gfx::Size());
- kHistoricalFaviconSizes.push_back(old_favicon_sizes);
- }
- return kHistoricalFaviconSizes;
-}
-
// Returns true if at least one of the bitmaps in |bitmap_results| is expired or
-// if |bitmap_results| is known to be incomplete.
+// if |bitmap_results| is missing favicons for |desired_size_in_dip| and one of
+// the scale factors in FaviconUtil::GetFaviconScaleFactors().
bool HasExpiredOrIncompleteResult(
- const std::vector<history::FaviconBitmapResult>& bitmap_results,
- const history::IconURLSizesMap& icon_url_sizes) {
+ int desired_size_in_dip,
+ const std::vector<history::FaviconBitmapResult>& bitmap_results) {
// Check if at least one of the bitmaps is expired.
std::vector<history::FaviconBitmapResult>::const_iterator it =
std::find_if(bitmap_results.begin(), bitmap_results.end(), IsExpired);
if (it != bitmap_results.end())
return true;
- // |bitmap_results| is known to be incomplete if the favicon sizes in
- // |icon_url_sizes| for any of the icon URLs in |bitmap_results| are unknown.
- // The favicon sizes for an icon URL are unknown if MergeFavicon() has set
- // them to the default favicon sizes.
-
- std::set<GURL> icon_urls;
+ // Any favicon size is good if the desired size is 0.
+ if (desired_size_in_dip == 0)
+ return false;
+
+ // Check if the favicon for at least one of the scale factors is missing.
+ // |bitmap_results| should always be complete for data inserted by
+ // FaviconHandler as the FaviconHandler stores favicons resized to all
+ // of FaviconUtil::GetFaviconScaleFactors() into the history backend.
+ // Examples of when |bitmap_results| can be incomplete:
+ // - Favicons inserted into the history backend by sync.
+ // - Favicons for imported bookmarks.
+ std::vector<gfx::Size> favicon_sizes;
for (size_t i = 0; i < bitmap_results.size(); ++i)
- icon_urls.insert(bitmap_results[i].icon_url);
-
- for (std::set<GURL>::iterator it = icon_urls.begin(); it != icon_urls.end();
- ++it) {
- const GURL& icon_url = *it;
- history::IconURLSizesMap::const_iterator icon_url_sizes_it =
- icon_url_sizes.find(icon_url);
- if (icon_url_sizes_it == icon_url_sizes.end()) {
- // |icon_url_sizes| should have an entry for each icon URL in
- // |bitmap_results|.
- NOTREACHED();
- return true;
- }
-
- const history::FaviconSizes& sizes = icon_url_sizes_it->second;
- const std::vector<history::FaviconSizes>& historical_sizes =
- GetHistoricalDefaultFaviconSizes();
- std::vector<history::FaviconSizes>::const_iterator historical_it =
- std::find(historical_sizes.begin(), historical_sizes.end(), sizes);
- if (historical_it != historical_sizes.end())
+ favicon_sizes.push_back(bitmap_results[i].pixel_size);
+
+ std::vector<ui::ScaleFactor> scale_factors =
+ FaviconUtil::GetFaviconScaleFactors();
+ for (size_t i = 0; i < scale_factors.size(); ++i) {
+ int edge_size_in_pixel = floor(
+ desired_size_in_dip * ui::GetScaleFactorScale(scale_factors[i]));
+ std::vector<gfx::Size>::iterator it = std::find(favicon_sizes.begin(),
+ favicon_sizes.end(), gfx::Size(edge_size_in_pixel, edge_size_in_pixel));
+ if (it == favicon_sizes.end())
return true;
}
return false;
@@ -483,8 +465,7 @@ bool FaviconHandler::ShouldSaveFavicon(const GURL& url) {
}
void FaviconHandler::OnFaviconDataForInitialURL(
- const std::vector<history::FaviconBitmapResult>& favicon_bitmap_results,
- const history::IconURLSizesMap& icon_url_sizes) {
+ const std::vector<history::FaviconBitmapResult>& favicon_bitmap_results) {
NavigationEntry* entry = GetEntry();
if (!entry)
return;
@@ -494,7 +475,7 @@ void FaviconHandler::OnFaviconDataForInitialURL(
bool has_results = !favicon_bitmap_results.empty();
favicon_expired_or_incomplete_ = has_results && HasExpiredOrIncompleteResult(
- favicon_bitmap_results, icon_url_sizes);
+ preferred_icon_size(), favicon_bitmap_results);
if (has_results && icon_types_ == history::FAVICON &&
!entry->GetFavicon().valid &&
@@ -566,15 +547,14 @@ void FaviconHandler::DownloadFaviconOrAskHistory(
}
void FaviconHandler::OnFaviconData(
- const std::vector<history::FaviconBitmapResult>& favicon_bitmap_results,
- const history::IconURLSizesMap& icon_url_sizes) {
+ const std::vector<history::FaviconBitmapResult>& favicon_bitmap_results) {
NavigationEntry* entry = GetEntry();
if (!entry)
return;
bool has_results = !favicon_bitmap_results.empty();
bool has_expired_or_incomplete_result = HasExpiredOrIncompleteResult(
- favicon_bitmap_results, icon_url_sizes);
+ preferred_icon_size(), favicon_bitmap_results);
// No need to update the favicon url. By the time we get here
// UpdateFaviconURL will have set the favicon url.
« no previous file with comments | « chrome/browser/favicon/favicon_handler.h ('k') | chrome/browser/favicon/favicon_handler_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698