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..81480bc36da69ecf8781e674213df88c127c5a17 100644 |
--- a/chrome/browser/favicon/favicon_handler.cc |
+++ b/chrome/browser/favicon/favicon_handler.cc |
@@ -49,6 +49,18 @@ bool DoUrlAndIconMatch(const FaviconURL& favicon_url, |
favicon_url.icon_type == static_cast<FaviconURL::IconType>(icon_type); |
} |
+std::string UrlWithoutFragment(const GURL& gurl) { |
+ std::string url = gurl.spec(); |
sky
2012/03/25 18:46:46
I believe you want ReplaceComponents.
stevenjb
2012/03/25 22:00:15
So I do, thanks.
Done.
|
+ std::string::size_type n = url.rfind(gurl.ref()); |
+ if (n != std::string::npos && n > 0) |
+ url = url.substr(0, n-1); // Trim fragment, including the leading '#'. |
+ return url; |
+} |
+ |
+bool UrlMatches(const GURL& gurl_a, const GURL& gurl_b) { |
+ return UrlWithoutFragment(gurl_a) == UrlWithoutFragment(gurl_b); |
+} |
+ |
} // namespace |
//////////////////////////////////////////////////////////////////////////////// |
@@ -154,10 +166,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 +180,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 +213,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 +335,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) |