Index: chrome/browser/favicon/favicon_handler.cc |
diff --git a/chrome/browser/favicon/favicon_handler.cc b/chrome/browser/favicon/favicon_handler.cc |
index fcf89fe939638f967025ff89bcfbacbd64655fe9..eec1a380178a0e8292d649443c2aafc69ebc38e8 100644 |
--- a/chrome/browser/favicon/favicon_handler.cc |
+++ b/chrome/browser/favicon/favicon_handler.cc |
@@ -288,9 +288,11 @@ void FaviconHandler::SetFavicon(const GURL& url, |
if (client_->GetFaviconService() && ShouldSaveFavicon(url)) |
SetHistoryFavicons(url, icon_url, icon_type, image); |
- if (UrlMatches(url, url_) && icon_type == favicon_base::FAVICON) { |
- if (!PageChangedSinceFaviconWasRequested()) |
+ if (UrlMatches(url, url_) && !PageChangedSinceFaviconWasRequested()) { |
+ if (icon_type == favicon_base::FAVICON && !download_largest_icon_) |
SetFaviconOnActivePage(icon_url, image); |
+ if (!image.IsEmpty()) |
+ NotifyFaviconUpdated(icon_url); |
sky
2014/10/29 15:50:55
Sorry, this is wrong. We shouldn't need the invali
|
} |
} |
@@ -311,8 +313,6 @@ void FaviconHandler::SetFaviconOnActivePage(const GURL& icon_url, |
const gfx::Image& image) { |
// No matter what happens, we need to mark the favicon as being set. |
driver_->SetActiveFaviconValidity(true); |
- |
- bool icon_url_changed = driver_->GetActiveFaviconURL() != icon_url; |
driver_->SetActiveFaviconURL(icon_url); |
if (image.IsEmpty()) |
@@ -322,7 +322,6 @@ void FaviconHandler::SetFaviconOnActivePage(const GURL& icon_url, |
favicon_base::SetFaviconColorSpace(&image_with_adjusted_colorspace); |
driver_->SetActiveFaviconImage(image_with_adjusted_colorspace); |
- NotifyFaviconUpdated(icon_url_changed); |
} |
void FaviconHandler::OnUpdateFaviconURL( |
@@ -510,7 +509,14 @@ bool FaviconHandler::ShouldSaveFavicon(const GURL& url) { |
return client_->IsBookmarked(url); |
} |
-void FaviconHandler::NotifyFaviconUpdated(bool icon_url_changed) { |
+void FaviconHandler::NotifyFaviconUpdated(const GURL& icon_url) { |
+ bool icon_url_changed = false; |
+ if (icon_types_ == favicon_base::FAVICON) { |
+ icon_url_changed = driver_->GetActiveFaviconURL() != icon_url; |
+ } else { |
+ icon_url_changed = icon_url != notified_touch_icon_url_; |
+ notified_touch_icon_url_ = icon_url; |
+ } |
driver_->NotifyFaviconUpdated(icon_url_changed); |
} |
@@ -551,7 +557,9 @@ void FaviconHandler::OnFaviconDataForInitialURLFromFaviconService( |
// doesn't have an icon. Set the favicon now, and if the favicon turns out |
// to be expired (or the wrong url) we'll fetch later on. This way the |
// user doesn't see a flash of the default favicon. |
- SetFaviconOnActivePage(favicon_bitmap_results); |
+ if (!download_largest_icon_) |
+ SetFaviconOnActivePage(favicon_bitmap_results); |
+ NotifyFaviconUpdated(favicon_bitmap_results[0].icon_url); |
} else { |
// If |favicon_bitmap_results| does not have any valid results, treat the |
// favicon as if it's expired. |
@@ -579,6 +587,13 @@ void FaviconHandler::OnFaviconDataForInitialURLFromFaviconService( |
} |
// else we haven't got the icon url. When we get it we'll ask the |
// renderer to download the icon. |
+ |
+ // Notify the TOUCH_ICON or TOUCH_PRECOMPOSED_ICON available in |
+ // HistoryBackend. |
+ if (icon_types_ != favicon_base::FAVICON && |
+ HasValidResult(favicon_bitmap_results)) { |
+ NotifyFaviconUpdated(favicon_bitmap_results[0].icon_url); |
+ } |
michaelbai
2014/10/29 04:30:32
I just simply added code here because this is touc
|
} |
void FaviconHandler::DownloadFaviconOrAskFaviconService( |
@@ -625,7 +640,9 @@ void FaviconHandler::OnFaviconData(const std::vector< |
// There is a favicon, set it now. If expired we'll download the current |
// one again, but at least the user will get some icon instead of the |
// default and most likely the current one is fine anyway. |
- SetFaviconOnActivePage(favicon_bitmap_results); |
+ if (!download_largest_icon_) |
+ SetFaviconOnActivePage(favicon_bitmap_results); |
+ NotifyFaviconUpdated(favicon_bitmap_results[0].icon_url); |
} |
if (has_expired_or_incomplete_result) { |
// The favicon is out of date. Request the current one. |
@@ -642,6 +659,12 @@ void FaviconHandler::OnFaviconData(const std::vector< |
current_candidate()->icon_url, |
current_candidate()->icon_type); |
} |
+ // Notify the TOUCH_ICON or TOUCH_PRECOMPOSED_ICON available in |
+ // HistoryBackend. |
+ if (icon_types_ != favicon_base::FAVICON && |
+ HasValidResult(favicon_bitmap_results)) { |
+ NotifyFaviconUpdated(favicon_bitmap_results[0].icon_url); |
+ } |
history_results_ = favicon_bitmap_results; |
} |