summaryrefslogtreecommitdiffstats
path: root/chrome/renderer/chrome_render_view_observer.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/renderer/chrome_render_view_observer.cc')
-rw-r--r--chrome/renderer/chrome_render_view_observer.cc46
1 files changed, 26 insertions, 20 deletions
diff --git a/chrome/renderer/chrome_render_view_observer.cc b/chrome/renderer/chrome_render_view_observer.cc
index 1aca18d..9b7e3f5 100644
--- a/chrome/renderer/chrome_render_view_observer.cc
+++ b/chrome/renderer/chrome_render_view_observer.cc
@@ -698,23 +698,21 @@ void ChromeRenderViewObserver::DidStopLoading() {
routing_id(), render_view()->GetPageId(), osd_url,
search_provider::AUTODETECTED_PROVIDER));
}
+}
+
+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;
- WebVector<WebIconURL> icon_urls =
- render_view()->GetWebView()->mainFrame()->iconURLs(icon_types);
- std::vector<FaviconURL> urls;
- for (size_t i = 0; i < icon_urls.size(); i++) {
- WebURL url = icon_urls[i].iconURL();
- if (!url.isEmpty())
- urls.push_back(FaviconURL(url, ToFaviconType(icon_urls[i].iconType())));
- }
- if (!urls.empty()) {
- Send(new IconHostMsg_UpdateFaviconURL(
- routing_id(), render_view()->GetPageId(), urls));
- }
+ CollectAndUpdateFaviconURLs(frame, icon_types);
}
void ChromeRenderViewObserver::DidChangeIcon(WebFrame* frame,
@@ -726,14 +724,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(
@@ -1098,6 +1089,21 @@ SkBitmap ChromeRenderViewObserver::ImageFromDataUrl(const GURL& url) const {
return SkBitmap();
}
+void ChromeRenderViewObserver::CollectAndUpdateFaviconURLs(
+ 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();
+ if (!url.isEmpty())
+ urls.push_back(FaviconURL(url, ToFaviconType(icon_urls[i].iconType())));
+ }
+ if (!urls.empty()) {
+ Send(new IconHostMsg_UpdateFaviconURL(
+ routing_id(), render_view()->GetPageId(), urls));
+ }
+}
+
bool ChromeRenderViewObserver::IsStrictSecurityHost(const std::string& host) {
return (strict_security_hosts_.find(host) != strict_security_hosts_.end());
}