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

Unified Diff: components/favicon/core/favicon_handler.h

Issue 2739173002: Always select best favicon bitmap (Closed)
Patch Set: Return default value after NOTREACHED. Created 3 years, 9 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 | « no previous file | components/favicon/core/favicon_handler.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: components/favicon/core/favicon_handler.h
diff --git a/components/favicon/core/favicon_handler.h b/components/favicon/core/favicon_handler.h
index 5bab69c48bc15ea8087996c3ed5e8024fa32d931..9e6e22b9f97126bc1762aa49db194d4225a8f635 100644
--- a/components/favicon/core/favicon_handler.h
+++ b/components/favicon/core/favicon_handler.h
@@ -130,33 +130,44 @@ class FaviconHandler {
const std::vector<favicon::FaviconURL>& candidates);
// For testing.
- const std::vector<favicon::FaviconURL>& image_urls() const {
- return image_urls_;
- }
+ const std::vector<GURL> GetIconURLs() const;
// Returns whether the handler is waiting for a download to complete or for
// data from the FaviconService. Reserved for testing.
bool HasPendingTasksForTest();
- // Get the maximal icon size in pixels for a icon of type |icon_type| for the
- // current platform.
- static int GetMaximalIconSize(favicon_base::IconType icon_type);
+ // Get the maximal icon size in pixels for a handler of type |handler_type|.
+ static int GetMaximalIconSize(
+ FaviconDriverObserver::NotificationIconType handler_type);
private:
// Used to track a candidate for the favicon.
struct FaviconCandidate {
- FaviconCandidate();
- ~FaviconCandidate();
-
- FaviconCandidate(const GURL& image_url,
- const gfx::Image& image,
- float score,
- favicon_base::IconType icon_type);
+ // Builds a scored candidate by selecting the best bitmap sizes.
+ static FaviconCandidate FromFaviconURL(
+ const favicon::FaviconURL& favicon_url,
+ const std::vector<int>& desired_pixel_sizes);
+
+ friend bool operator==(const FaviconCandidate& lhs,
+ const FaviconCandidate& rhs) {
+ return lhs.icon_url == rhs.icon_url && lhs.icon_type == rhs.icon_type &&
+ lhs.score == rhs.score;
+ }
+
+ // Compare function used for std::stable_sort to sort in descending order.
+ static bool CompareScore(const FaviconCandidate& lhs,
+ const FaviconCandidate& rhs) {
+ return lhs.score > rhs.score;
+ }
+
+ GURL icon_url;
+ favicon_base::IconType icon_type = favicon_base::INVALID_ICON;
+ float score = 0;
+ };
- GURL image_url;
+ struct DownloadedFavicon {
+ FaviconCandidate candidate;
gfx::Image image;
- float score;
- favicon_base::IconType icon_type;
};
// Returns the bit mask of favicon_base::IconType based on the handler's type.
@@ -197,11 +208,9 @@ class FaviconHandler {
bool ShouldSaveFavicon();
- // Updates |favicon_candidate_| and returns true if it is an exact match.
- bool UpdateFaviconCandidate(const GURL& image_url,
- const gfx::Image& image,
- float score,
- favicon_base::IconType icon_type);
+ // Updates |best_favicon_| and returns true if it was considered a satisfying
+ // image (e.g. exact size match).
+ bool UpdateFaviconCandidate(const DownloadedFavicon& downloaded_favicon);
// Sets the image data for the favicon.
void SetFavicon(const GURL& icon_url,
@@ -221,9 +230,9 @@ class FaviconHandler {
const gfx::Image& image);
// Return the current candidate if any.
- favicon::FaviconURL* current_candidate() {
- return current_candidate_index_ < image_urls_.size()
- ? &image_urls_[current_candidate_index_]
+ const FaviconCandidate* current_candidate() const {
+ return current_candidate_index_ < candidates_.size()
+ ? &candidates_[current_candidate_index_]
: nullptr;
}
@@ -267,7 +276,7 @@ class FaviconHandler {
const bool download_largest_icon_;
// The prioritized favicon candidates from the page back from the renderer.
- std::vector<favicon::FaviconURL> image_urls_;
+ std::vector<FaviconCandidate> candidates_;
// The icon URL and the icon type of the favicon in the most recent
// FaviconDriver::OnFaviconAvailable() notification.
@@ -286,10 +295,10 @@ class FaviconHandler {
size_t current_candidate_index_;
// Best image we've seen so far. As images are downloaded from the page they
- // are stored here. When there is an exact match, or no more images are
- // available the favicon service and the current page are updated (assuming
- // the image is for a favicon).
- FaviconCandidate best_favicon_candidate_;
+ // are stored here. When a satisfying icon is found (as defined in
+ // UpdateFaviconCandidate()), the favicon service and the delegate are
+ // notified.
+ DownloadedFavicon best_favicon_;
DISALLOW_COPY_AND_ASSIGN(FaviconHandler);
};
« no previous file with comments | « no previous file | components/favicon/core/favicon_handler.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698