Index: chrome/renderer/chrome_render_view_observer.cc |
diff --git a/chrome/renderer/chrome_render_view_observer.cc b/chrome/renderer/chrome_render_view_observer.cc |
index 9d820967d6dfee9bf5bed81c71c2830eb39bd1e2..4625e6206e29ffa49e174a27d8107611aa04c377 100644 |
--- a/chrome/renderer/chrome_render_view_observer.cc |
+++ b/chrome/renderer/chrome_render_view_observer.cc |
@@ -696,13 +696,11 @@ void ChromeRenderViewObserver::DidStopLoading() { |
routing_id(), render_view()->GetPageId(), osd_url, |
search_provider::AUTODETECTED_PROVIDER)); |
} |
+} |
- int icon_types = WebIconURL::TypeFavicon; |
- if (chrome::kEnableTouchIcon) |
- icon_types |= WebIconURL::TypeTouchPrecomposed | WebIconURL::TypeTouch; |
- |
- WebVector<WebIconURL> icon_urls = |
- render_view()->GetWebView()->mainFrame()->iconURLs(icon_types); |
+void ChromeRenderViewObserver::CollectAndUpdateFaviconURLs( |
darin (slow to review)
2012/08/06 20:46:32
please list functions in the .cpp file in the same
aruslan
2012/08/06 20:52:27
Done.
|
+ WebKit::WebFrame* frame, int icon_types) { |
+ WebVector<WebIconURL> icon_urls = frame->iconURLs(icon_types); |
std::vector<FaviconURL> urls; |
for (size_t i = 0; i < icon_urls.size(); i++) { |
WebURL url = icon_urls[i].iconURL(); |
@@ -715,6 +713,21 @@ void ChromeRenderViewObserver::DidStopLoading() { |
} |
} |
+void ChromeRenderViewObserver::DidFinishLoad(WebKit::WebFrame* frame) { |
+ if (frame->parent()) |
+ return; |
+ |
+ // Please note that we are updating favicons only for the _main_ frame. |
+ // Updating Favicon URLs at DidFinishLoad ensures that icon loads always get |
+ // initiated after all of the other page resources have been fetched, so icon |
+ // loads should not compete with page resources for network bandwidth. |
+ int icon_types = WebIconURL::TypeFavicon; |
+ if (chrome::kEnableTouchIcon) |
+ icon_types |= WebIconURL::TypeTouchPrecomposed | WebIconURL::TypeTouch; |
+ |
+ CollectAndUpdateFaviconURLs(frame, icon_types); |
+} |
+ |
void ChromeRenderViewObserver::DidChangeIcon(WebFrame* frame, |
WebIconURL::Type icon_type) { |
if (frame->parent()) |
@@ -724,14 +737,7 @@ void ChromeRenderViewObserver::DidChangeIcon(WebFrame* frame, |
icon_type != WebIconURL::TypeFavicon) |
return; |
- WebVector<WebIconURL> icon_urls = frame->iconURLs(icon_type); |
- std::vector<FaviconURL> urls; |
- for (size_t i = 0; i < icon_urls.size(); i++) { |
- urls.push_back(FaviconURL(icon_urls[i].iconURL(), |
- ToFaviconType(icon_urls[i].iconType()))); |
- } |
- Send(new IconHostMsg_UpdateFaviconURL( |
- routing_id(), render_view()->GetPageId(), urls)); |
+ CollectAndUpdateFaviconURLs(frame, icon_type); |
} |
void ChromeRenderViewObserver::DidCommitProvisionalLoad( |