| Index: chrome/browser/favicon/favicon_handler.cc
|
| diff --git a/chrome/browser/favicon/favicon_handler.cc b/chrome/browser/favicon/favicon_handler.cc
|
| index a94a8d7e8d2908810964f43a6cfac987c9b0b207..9dc53a7152c6786cfade809fdab518ac1293b793 100644
|
| --- a/chrome/browser/favicon/favicon_handler.cc
|
| +++ b/chrome/browser/favicon/favicon_handler.cc
|
| @@ -49,6 +49,16 @@ bool DoUrlAndIconMatch(const FaviconURL& favicon_url,
|
| favicon_url.icon_type == static_cast<FaviconURL::IconType>(icon_type);
|
| }
|
|
|
| +std::string UrlWithoutFragment(const GURL& gurl) {
|
| + GURL::Replacements replacements;
|
| + replacements.ClearRef();
|
| + return gurl.ReplaceComponents(replacements).spec();
|
| +}
|
| +
|
| +bool UrlMatches(const GURL& gurl_a, const GURL& gurl_b) {
|
| + return UrlWithoutFragment(gurl_a) == UrlWithoutFragment(gurl_b);
|
| +}
|
| +
|
| } // namespace
|
|
|
| ////////////////////////////////////////////////////////////////////////////////
|
| @@ -154,10 +164,11 @@ bool FaviconHandler::UpdateFaviconCandidate(const GURL& url,
|
| const gfx::Image& image,
|
| history::IconType icon_type) {
|
| bool update_candidate = false;
|
| - bool exact_match = false;
|
| SkBitmap bitmap = *(image.ToSkBitmap());
|
| int bitmap_size = std::max(bitmap.width(), bitmap.height());
|
| + bool exact_match = (bitmap_size == preferred_icon_size());
|
| if (preferred_icon_size() == 0) {
|
| + // No preferred size, use this icon.
|
| update_candidate = true;
|
| exact_match = true;
|
| } else if (favicon_candidate_.icon_type == history::INVALID_ICON) {
|
| @@ -167,7 +178,6 @@ bool FaviconHandler::UpdateFaviconCandidate(const GURL& url,
|
| if (bitmap_size == preferred_icon_size()) {
|
| // Exact match, use this.
|
| update_candidate = true;
|
| - exact_match = true;
|
| } else {
|
| // Compare against current candidate.
|
| int cur_size = favicon_candidate_.bitmap_size;
|
| @@ -201,7 +211,7 @@ void FaviconHandler::SetFavicon(
|
| SetHistoryFavicon(url, image_url, image_data, icon_type);
|
| }
|
|
|
| - if (url == url_ && icon_type == history::FAVICON) {
|
| + if (UrlMatches(url, url_) && icon_type == history::FAVICON) {
|
| NavigationEntry* entry = GetEntry();
|
| if (entry) {
|
| entry->GetFavicon().url = image_url;
|
| @@ -323,7 +333,7 @@ void FaviconHandler::OnDidDownloadFavicon(int id,
|
|
|
| NavigationEntry* FaviconHandler::GetEntry() {
|
| NavigationEntry* entry = delegate_->GetActiveEntry();
|
| - if (entry && entry->GetURL() == url_)
|
| + if (entry && UrlMatches(entry->GetURL(), url_))
|
| return entry;
|
|
|
| // If the URL has changed out from under us (as will happen with redirects)
|
|
|