Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(326)

Side by Side Diff: chrome/renderer/chrome_render_view_observer.cc

Issue 10831163: Update favicon URLs on FinishLoad for main frame (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Moved the function to match the order in the header file. Created 8 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « chrome/renderer/chrome_render_view_observer.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/renderer/chrome_render_view_observer.h" 5 #include "chrome/renderer/chrome_render_view_observer.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/bind_helpers.h" 8 #include "base/bind_helpers.h"
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/debug/trace_event.h" 10 #include "base/debug/trace_event.h"
(...skipping 678 matching lines...) Expand 10 before | Expand all | Expand 10 after
689 render_view()->GetContentStateImmediately() ? 689 render_view()->GetContentStateImmediately() ?
690 0 : kDelayForCaptureMs)); 690 0 : kDelayForCaptureMs));
691 691
692 WebFrame* main_frame = render_view()->GetWebView()->mainFrame(); 692 WebFrame* main_frame = render_view()->GetWebView()->mainFrame();
693 GURL osd_url = main_frame->document().openSearchDescriptionURL(); 693 GURL osd_url = main_frame->document().openSearchDescriptionURL();
694 if (!osd_url.is_empty()) { 694 if (!osd_url.is_empty()) {
695 Send(new ChromeViewHostMsg_PageHasOSDD( 695 Send(new ChromeViewHostMsg_PageHasOSDD(
696 routing_id(), render_view()->GetPageId(), osd_url, 696 routing_id(), render_view()->GetPageId(), osd_url,
697 search_provider::AUTODETECTED_PROVIDER)); 697 search_provider::AUTODETECTED_PROVIDER));
698 } 698 }
699 }
699 700
701 void ChromeRenderViewObserver::DidFinishLoad(WebKit::WebFrame* frame) {
702 if (frame->parent())
703 return;
704
705 // Please note that we are updating favicons only for the _main_ frame.
706 // Updating Favicon URLs at DidFinishLoad ensures that icon loads always get
707 // initiated after all of the other page resources have been fetched, so icon
708 // loads should not compete with page resources for network bandwidth.
700 int icon_types = WebIconURL::TypeFavicon; 709 int icon_types = WebIconURL::TypeFavicon;
701 if (chrome::kEnableTouchIcon) 710 if (chrome::kEnableTouchIcon)
702 icon_types |= WebIconURL::TypeTouchPrecomposed | WebIconURL::TypeTouch; 711 icon_types |= WebIconURL::TypeTouchPrecomposed | WebIconURL::TypeTouch;
703 712
704 WebVector<WebIconURL> icon_urls = 713 CollectAndUpdateFaviconURLs(frame, icon_types);
705 render_view()->GetWebView()->mainFrame()->iconURLs(icon_types);
706 std::vector<FaviconURL> urls;
707 for (size_t i = 0; i < icon_urls.size(); i++) {
708 WebURL url = icon_urls[i].iconURL();
709 if (!url.isEmpty())
710 urls.push_back(FaviconURL(url, ToFaviconType(icon_urls[i].iconType())));
711 }
712 if (!urls.empty()) {
713 Send(new IconHostMsg_UpdateFaviconURL(
714 routing_id(), render_view()->GetPageId(), urls));
715 }
716 } 714 }
717 715
718 void ChromeRenderViewObserver::DidChangeIcon(WebFrame* frame, 716 void ChromeRenderViewObserver::DidChangeIcon(WebFrame* frame,
719 WebIconURL::Type icon_type) { 717 WebIconURL::Type icon_type) {
720 if (frame->parent()) 718 if (frame->parent())
721 return; 719 return;
722 720
723 if (!chrome::kEnableTouchIcon && 721 if (!chrome::kEnableTouchIcon &&
724 icon_type != WebIconURL::TypeFavicon) 722 icon_type != WebIconURL::TypeFavicon)
725 return; 723 return;
726 724
727 WebVector<WebIconURL> icon_urls = frame->iconURLs(icon_type); 725 CollectAndUpdateFaviconURLs(frame, icon_type);
728 std::vector<FaviconURL> urls;
729 for (size_t i = 0; i < icon_urls.size(); i++) {
730 urls.push_back(FaviconURL(icon_urls[i].iconURL(),
731 ToFaviconType(icon_urls[i].iconType())));
732 }
733 Send(new IconHostMsg_UpdateFaviconURL(
734 routing_id(), render_view()->GetPageId(), urls));
735 } 726 }
736 727
737 void ChromeRenderViewObserver::DidCommitProvisionalLoad( 728 void ChromeRenderViewObserver::DidCommitProvisionalLoad(
738 WebFrame* frame, bool is_new_navigation) { 729 WebFrame* frame, bool is_new_navigation) {
739 if (!is_new_navigation) 730 if (!is_new_navigation)
740 return; 731 return;
741 732
742 CapturePageInfoLater( 733 CapturePageInfoLater(
743 true, // preliminary_capture 734 true, // preliminary_capture
744 base::TimeDelta::FromMilliseconds(kDelayForForcedCaptureMs)); 735 base::TimeDelta::FromMilliseconds(kDelayForForcedCaptureMs));
(...skipping 341 matching lines...) Expand 10 before | Expand all | Expand 10 after
1086 webkit_glue::ImageDecoder decoder( 1077 webkit_glue::ImageDecoder decoder(
1087 gfx::Size(gfx::kFaviconSize, gfx::kFaviconSize)); 1078 gfx::Size(gfx::kFaviconSize, gfx::kFaviconSize));
1088 const unsigned char* src_data = 1079 const unsigned char* src_data =
1089 reinterpret_cast<const unsigned char*>(&data[0]); 1080 reinterpret_cast<const unsigned char*>(&data[0]);
1090 1081
1091 return decoder.Decode(src_data, data.size()); 1082 return decoder.Decode(src_data, data.size());
1092 } 1083 }
1093 return SkBitmap(); 1084 return SkBitmap();
1094 } 1085 }
1095 1086
1087 void ChromeRenderViewObserver::CollectAndUpdateFaviconURLs(
1088 WebKit::WebFrame* frame, int icon_types) {
1089 WebVector<WebIconURL> icon_urls = frame->iconURLs(icon_types);
1090 std::vector<FaviconURL> urls;
1091 for (size_t i = 0; i < icon_urls.size(); i++) {
1092 WebURL url = icon_urls[i].iconURL();
1093 if (!url.isEmpty())
1094 urls.push_back(FaviconURL(url, ToFaviconType(icon_urls[i].iconType())));
1095 }
1096 if (!urls.empty()) {
1097 Send(new IconHostMsg_UpdateFaviconURL(
1098 routing_id(), render_view()->GetPageId(), urls));
1099 }
1100 }
1101
1096 bool ChromeRenderViewObserver::IsStrictSecurityHost(const std::string& host) { 1102 bool ChromeRenderViewObserver::IsStrictSecurityHost(const std::string& host) {
1097 return (strict_security_hosts_.find(host) != strict_security_hosts_.end()); 1103 return (strict_security_hosts_.find(host) != strict_security_hosts_.end());
1098 } 1104 }
OLDNEW
« no previous file with comments | « chrome/renderer/chrome_render_view_observer.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698