| 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..9793f19869f9e96fadf6fbd2169f5b6c3b5c8192 100644
|
| --- a/chrome/renderer/chrome_render_view_observer.cc
|
| +++ b/chrome/renderer/chrome_render_view_observer.cc
|
| @@ -696,23 +696,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,
|
| @@ -724,14 +722,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(
|
| @@ -1093,6 +1084,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());
|
| }
|
|
|