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

Side by Side Diff: content/renderer/render_view_impl.cc

Issue 12780024: Split FaviconHelper in two: ImageLoadingHelper and FaviconHelper (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: caitp feedback Created 7 years, 8 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 | Annotate | Revision Log
« no previous file with comments | « content/renderer/render_view_impl.h ('k') | ipc/ipc_message_start.h » ('j') | 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 "content/renderer/render_view_impl.h" 5 #include "content/renderer/render_view_impl.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <cmath> 8 #include <cmath>
9 9
10 #include "base/auto_reset.h" 10 #include "base/auto_reset.h"
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
44 #include "content/common/request_extra_data.h" 44 #include "content/common/request_extra_data.h"
45 #include "content/common/socket_stream_handle_data.h" 45 #include "content/common/socket_stream_handle_data.h"
46 #include "content/common/ssl_status_serialization.h" 46 #include "content/common/ssl_status_serialization.h"
47 #include "content/common/view_messages.h" 47 #include "content/common/view_messages.h"
48 #include "content/common/webmessageportchannel_impl.h" 48 #include "content/common/webmessageportchannel_impl.h"
49 #include "content/public/common/bindings_policy.h" 49 #include "content/public/common/bindings_policy.h"
50 #include "content/public/common/content_client.h" 50 #include "content/public/common/content_client.h"
51 #include "content/public/common/content_constants.h" 51 #include "content/public/common/content_constants.h"
52 #include "content/public/common/content_switches.h" 52 #include "content/public/common/content_switches.h"
53 #include "content/public/common/context_menu_params.h" 53 #include "content/public/common/context_menu_params.h"
54 #include "content/public/common/favicon_url.h"
54 #include "content/public/common/file_chooser_params.h" 55 #include "content/public/common/file_chooser_params.h"
55 #include "content/public/common/ssl_status.h" 56 #include "content/public/common/ssl_status.h"
56 #include "content/public/common/three_d_api_types.h" 57 #include "content/public/common/three_d_api_types.h"
57 #include "content/public/common/url_constants.h" 58 #include "content/public/common/url_constants.h"
58 #include "content/public/renderer/content_renderer_client.h" 59 #include "content/public/renderer/content_renderer_client.h"
59 #include "content/public/renderer/context_menu_client.h" 60 #include "content/public/renderer/context_menu_client.h"
60 #include "content/public/renderer/document_state.h" 61 #include "content/public/renderer/document_state.h"
61 #include "content/public/renderer/navigation_state.h" 62 #include "content/public/renderer/navigation_state.h"
62 #include "content/public/renderer/password_form_conversion_utils.h" 63 #include "content/public/renderer/password_form_conversion_utils.h"
63 #include "content/public/renderer/render_view_observer.h" 64 #include "content/public/renderer/render_view_observer.h"
64 #include "content/public/renderer/render_view_visitor.h" 65 #include "content/public/renderer/render_view_visitor.h"
65 #include "content/renderer/accessibility/renderer_accessibility.h" 66 #include "content/renderer/accessibility/renderer_accessibility.h"
66 #include "content/renderer/accessibility/renderer_accessibility_complete.h" 67 #include "content/renderer/accessibility/renderer_accessibility_complete.h"
67 #include "content/renderer/accessibility/renderer_accessibility_focus_only.h" 68 #include "content/renderer/accessibility/renderer_accessibility_focus_only.h"
68 #include "content/renderer/browser_plugin/browser_plugin.h" 69 #include "content/renderer/browser_plugin/browser_plugin.h"
69 #include "content/renderer/browser_plugin/browser_plugin_manager.h" 70 #include "content/renderer/browser_plugin/browser_plugin_manager.h"
70 #include "content/renderer/browser_plugin/browser_plugin_manager_impl.h" 71 #include "content/renderer/browser_plugin/browser_plugin_manager_impl.h"
71 #include "content/renderer/device_orientation_dispatcher.h" 72 #include "content/renderer/device_orientation_dispatcher.h"
72 #include "content/renderer/devtools/devtools_agent.h" 73 #include "content/renderer/devtools/devtools_agent.h"
73 #include "content/renderer/disambiguation_popup_helper.h" 74 #include "content/renderer/disambiguation_popup_helper.h"
74 #include "content/renderer/do_not_track_bindings.h" 75 #include "content/renderer/do_not_track_bindings.h"
75 #include "content/renderer/dom_automation_controller.h" 76 #include "content/renderer/dom_automation_controller.h"
76 #include "content/renderer/dom_storage/webstoragenamespace_impl.h" 77 #include "content/renderer/dom_storage/webstoragenamespace_impl.h"
77 #include "content/renderer/external_popup_menu.h" 78 #include "content/renderer/external_popup_menu.h"
78 #include "content/renderer/favicon_helper.h"
79 #include "content/renderer/geolocation_dispatcher.h" 79 #include "content/renderer/geolocation_dispatcher.h"
80 #include "content/renderer/gpu/input_handler_manager.h" 80 #include "content/renderer/gpu/input_handler_manager.h"
81 #include "content/renderer/gpu/render_widget_compositor.h" 81 #include "content/renderer/gpu/render_widget_compositor.h"
82 #include "content/renderer/idle_user_detector.h" 82 #include "content/renderer/idle_user_detector.h"
83 #include "content/renderer/image_loading_helper.h"
83 #include "content/renderer/input_tag_speech_dispatcher.h" 84 #include "content/renderer/input_tag_speech_dispatcher.h"
84 #include "content/renderer/java/java_bridge_dispatcher.h" 85 #include "content/renderer/java/java_bridge_dispatcher.h"
85 #include "content/renderer/load_progress_tracker.h" 86 #include "content/renderer/load_progress_tracker.h"
86 #include "content/renderer/media/audio_device_factory.h" 87 #include "content/renderer/media/audio_device_factory.h"
87 #include "content/renderer/media/audio_renderer_mixer_manager.h" 88 #include "content/renderer/media/audio_renderer_mixer_manager.h"
88 #include "content/renderer/media/media_stream_dependency_factory.h" 89 #include "content/renderer/media/media_stream_dependency_factory.h"
89 #include "content/renderer/media/media_stream_dispatcher.h" 90 #include "content/renderer/media/media_stream_dispatcher.h"
90 #include "content/renderer/media/media_stream_impl.h" 91 #include "content/renderer/media/media_stream_impl.h"
91 #include "content/renderer/media/render_media_log.h" 92 #include "content/renderer/media/render_media_log.h"
92 #include "content/renderer/media/renderer_audio_output_device.h" 93 #include "content/renderer/media/renderer_audio_output_device.h"
(...skipping 446 matching lines...) Expand 10 before | Expand all | Expand 10 after
539 540
540 if (device_scale_factor > 1.0f && 541 if (device_scale_factor > 1.0f &&
541 command_line.HasSwitch( 542 command_line.HasSwitch(
542 switches::kEnableHighDpiCompositingForFixedPosition)) 543 switches::kEnableHighDpiCompositingForFixedPosition))
543 return true; 544 return true;
544 545
545 // Default, when no switches are specified, is disabled. 546 // Default, when no switches are specified, is disabled.
546 return false; 547 return false;
547 } 548 }
548 549
550 static FaviconURL::IconType ToFaviconType(WebKit::WebIconURL::Type type) {
551 switch (type) {
552 case WebKit::WebIconURL::TypeFavicon:
553 return FaviconURL::FAVICON;
554 case WebKit::WebIconURL::TypeTouch:
555 return FaviconURL::TOUCH_ICON;
556 case WebKit::WebIconURL::TypeTouchPrecomposed:
557 return FaviconURL::TOUCH_PRECOMPOSED_ICON;
558 case WebKit::WebIconURL::TypeInvalid:
559 return FaviconURL::INVALID_ICON;
560 }
561 return FaviconURL::INVALID_ICON;
562 }
563
549 /////////////////////////////////////////////////////////////////////////////// 564 ///////////////////////////////////////////////////////////////////////////////
550 565
551 struct RenderViewImpl::PendingFileChooser { 566 struct RenderViewImpl::PendingFileChooser {
552 PendingFileChooser(const FileChooserParams& p, WebFileChooserCompletion* c) 567 PendingFileChooser(const FileChooserParams& p, WebFileChooserCompletion* c)
553 : params(p), 568 : params(p),
554 completion(c) { 569 completion(c) {
555 } 570 }
556 FileChooserParams params; 571 FileChooserParams params;
557 WebFileChooserCompletion* completion; // MAY BE NULL to skip callback. 572 WebFileChooserCompletion* completion; // MAY BE NULL to skip callback.
558 }; 573 };
(...skipping 29 matching lines...) Expand all
588 int64 ExtractPostId(const WebHistoryItem& item) { 603 int64 ExtractPostId(const WebHistoryItem& item) {
589 if (item.isNull()) 604 if (item.isNull())
590 return -1; 605 return -1;
591 606
592 if (item.httpBody().isNull()) 607 if (item.httpBody().isNull())
593 return -1; 608 return -1;
594 609
595 return item.httpBody().identifier(); 610 return item.httpBody().identifier();
596 } 611 }
597 612
613 bool TouchEnabled() {
614 // Based on the definition of chrome::kEnableTouchIcon.
615 #if defined(OS_ANDROID)
616 return true;
617 #else
618 return false;
619 #endif
620 }
621
598 } // namespace 622 } // namespace
599 623
600 RenderViewImpl::RenderViewImpl(RenderViewImplParams* params) 624 RenderViewImpl::RenderViewImpl(RenderViewImplParams* params)
601 : RenderWidget(WebKit::WebPopupTypeNone, 625 : RenderWidget(WebKit::WebPopupTypeNone,
602 params->screen_info, 626 params->screen_info,
603 params->swapped_out), 627 params->swapped_out),
604 webkit_preferences_(params->webkit_prefs), 628 webkit_preferences_(params->webkit_prefs),
605 send_content_state_immediately_(false), 629 send_content_state_immediately_(false),
606 enabled_bindings_(0), 630 enabled_bindings_(0),
607 send_preferred_size_changes_(false), 631 send_preferred_size_changes_(false),
(...skipping 20 matching lines...) Expand all
628 speech_recognition_dispatcher_(NULL), 652 speech_recognition_dispatcher_(NULL),
629 device_orientation_dispatcher_(NULL), 653 device_orientation_dispatcher_(NULL),
630 media_stream_dispatcher_(NULL), 654 media_stream_dispatcher_(NULL),
631 browser_plugin_manager_(NULL), 655 browser_plugin_manager_(NULL),
632 media_stream_impl_(NULL), 656 media_stream_impl_(NULL),
633 devtools_agent_(NULL), 657 devtools_agent_(NULL),
634 accessibility_mode_(AccessibilityModeOff), 658 accessibility_mode_(AccessibilityModeOff),
635 renderer_accessibility_(NULL), 659 renderer_accessibility_(NULL),
636 java_bridge_dispatcher_(NULL), 660 java_bridge_dispatcher_(NULL),
637 mouse_lock_dispatcher_(NULL), 661 mouse_lock_dispatcher_(NULL),
638 favicon_helper_(NULL),
639 #if defined(OS_ANDROID) 662 #if defined(OS_ANDROID)
640 body_background_color_(SK_ColorWHITE), 663 body_background_color_(SK_ColorWHITE),
641 update_frame_info_scheduled_(false), 664 update_frame_info_scheduled_(false),
642 expected_content_intent_id_(0), 665 expected_content_intent_id_(0),
643 media_player_proxy_(NULL), 666 media_player_proxy_(NULL),
644 enumeration_completion_id_(0), 667 enumeration_completion_id_(0),
645 ALLOW_THIS_IN_INITIALIZER_LIST( 668 ALLOW_THIS_IN_INITIALIZER_LIST(
646 load_progress_tracker_(new LoadProgressTracker(this))), 669 load_progress_tracker_(new LoadProgressTracker(this))),
647 #endif 670 #endif
648 session_storage_namespace_id_(params->session_storage_namespace_id), 671 session_storage_namespace_id_(params->session_storage_namespace_id),
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
755 778
756 #if defined(OS_ANDROID) 779 #if defined(OS_ANDROID)
757 media_player_manager_.reset( 780 media_player_manager_.reset(
758 new webkit_media::WebMediaPlayerManagerAndroid()); 781 new webkit_media::WebMediaPlayerManagerAndroid());
759 #endif 782 #endif
760 783
761 // The next group of objects all implement RenderViewObserver, so are deleted 784 // The next group of objects all implement RenderViewObserver, so are deleted
762 // along with the RenderView automatically. 785 // along with the RenderView automatically.
763 devtools_agent_ = new DevToolsAgent(this); 786 devtools_agent_ = new DevToolsAgent(this);
764 mouse_lock_dispatcher_ = new RenderViewMouseLockDispatcher(this); 787 mouse_lock_dispatcher_ = new RenderViewMouseLockDispatcher(this);
765 favicon_helper_ = new FaviconHelper(this); 788
789 new ImageLoadingHelper(this);
766 790
767 // Create renderer_accessibility_ if needed. 791 // Create renderer_accessibility_ if needed.
768 OnSetAccessibilityMode(params->accessibility_mode); 792 OnSetAccessibilityMode(params->accessibility_mode);
769 793
770 new IdleUserDetector(this); 794 new IdleUserDetector(this);
771 795
772 if (command_line.HasSwitch(switches::kDomAutomationController)) 796 if (command_line.HasSwitch(switches::kDomAutomationController))
773 enabled_bindings_ |= BINDINGS_POLICY_DOM_AUTOMATION; 797 enabled_bindings_ |= BINDINGS_POLICY_DOM_AUTOMATION;
774 798
775 ProcessViewLayoutFlags(command_line); 799 ProcessViewLayoutFlags(command_line);
(...skipping 1326 matching lines...) Expand 10 before | Expand all | Expand 10 after
2102 // NOTE: For now we're doing the safest thing, and sending out notification 2126 // NOTE: For now we're doing the safest thing, and sending out notification
2103 // when done loading. This currently isn't an issue as the favicon is only 2127 // when done loading. This currently isn't an issue as the favicon is only
2104 // displayed when done loading. Ideally we would send notification when 2128 // displayed when done loading. Ideally we would send notification when
2105 // finished parsing the head, but webkit doesn't support that yet. 2129 // finished parsing the head, but webkit doesn't support that yet.
2106 // The feed discovery code would also benefit from access to the head. 2130 // The feed discovery code would also benefit from access to the head.
2107 Send(new ViewHostMsg_DidStopLoading(routing_id_)); 2131 Send(new ViewHostMsg_DidStopLoading(routing_id_));
2108 2132
2109 if (load_progress_tracker_ != NULL) 2133 if (load_progress_tracker_ != NULL)
2110 load_progress_tracker_->DidStopLoading(); 2134 load_progress_tracker_->DidStopLoading();
2111 2135
2136 DidStopLoadingIcons();
2137
2112 FOR_EACH_OBSERVER(RenderViewObserver, observers_, DidStopLoading()); 2138 FOR_EACH_OBSERVER(RenderViewObserver, observers_, DidStopLoading());
2113 } 2139 }
2114 2140
2115 void RenderViewImpl::didChangeLoadProgress(WebFrame* frame, 2141 void RenderViewImpl::didChangeLoadProgress(WebFrame* frame,
2116 double load_progress) { 2142 double load_progress) {
2117 if (load_progress_tracker_ != NULL) 2143 if (load_progress_tracker_ != NULL)
2118 load_progress_tracker_->DidChangeLoadProgress(frame, load_progress); 2144 load_progress_tracker_->DidChangeLoadProgress(frame, load_progress);
2119 } 2145 }
2120 2146
2121 void RenderViewImpl::didCancelCompositionOnSelectionChange() { 2147 void RenderViewImpl::didCancelCompositionOnSelectionChange() {
(...skipping 1505 matching lines...) Expand 10 before | Expand all | Expand 10 after
3627 } 3653 }
3628 3654
3629 void RenderViewImpl::didReceiveTitle(WebFrame* frame, const WebString& title, 3655 void RenderViewImpl::didReceiveTitle(WebFrame* frame, const WebString& title,
3630 WebTextDirection direction) { 3656 WebTextDirection direction) {
3631 UpdateTitle(frame, title, direction); 3657 UpdateTitle(frame, title, direction);
3632 3658
3633 // Also check whether we have new encoding name. 3659 // Also check whether we have new encoding name.
3634 UpdateEncoding(frame, frame->view()->pageEncoding().utf8()); 3660 UpdateEncoding(frame, frame->view()->pageEncoding().utf8());
3635 } 3661 }
3636 3662
3637 void RenderViewImpl::didChangeIcon(WebFrame* frame, WebIconURL::Type type) { 3663 void RenderViewImpl::didChangeIcon(WebFrame* frame,
3638 favicon_helper_->DidChangeIcon(frame, type); 3664 WebIconURL::Type icon_type) {
3665 if (frame->parent())
3666 return;
3667
3668 if (!TouchEnabled() && icon_type != WebIconURL::TypeFavicon)
3669 return;
3670
3671 WebVector<WebIconURL> icon_urls = frame->iconURLs(icon_type);
3672 std::vector<FaviconURL> urls;
3673 for (size_t i = 0; i < icon_urls.size(); i++) {
3674 urls.push_back(FaviconURL(icon_urls[i].iconURL(),
3675 ToFaviconType(icon_urls[i].iconType())));
3676 }
3677 SendUpdateFaviconURL(urls);
3639 } 3678 }
3640 3679
3641 void RenderViewImpl::didFinishDocumentLoad(WebFrame* frame) { 3680 void RenderViewImpl::didFinishDocumentLoad(WebFrame* frame) {
3642 WebDataSource* ds = frame->dataSource(); 3681 WebDataSource* ds = frame->dataSource();
3643 DocumentState* document_state = DocumentState::FromDataSource(ds); 3682 DocumentState* document_state = DocumentState::FromDataSource(ds);
3644 document_state->set_finish_document_load_time(Time::Now()); 3683 document_state->set_finish_document_load_time(Time::Now());
3645 3684
3646 Send(new ViewHostMsg_DocumentLoadedInFrame(routing_id_, frame->identifier())); 3685 Send(new ViewHostMsg_DocumentLoadedInFrame(routing_id_, frame->identifier()));
3647 3686
3648 FOR_EACH_OBSERVER(RenderViewObserver, observers_, 3687 FOR_EACH_OBSERVER(RenderViewObserver, observers_,
(...skipping 2899 matching lines...) Expand 10 before | Expand all | Expand 10 after
6548 TransportDIB::Handle dib_handle) { 6587 TransportDIB::Handle dib_handle) {
6549 TransportDIB* dib = TransportDIB::CreateWithHandle(dib_handle); 6588 TransportDIB* dib = TransportDIB::CreateWithHandle(dib_handle);
6550 RenderProcess::current()->ReleaseTransportDIB(dib); 6589 RenderProcess::current()->ReleaseTransportDIB(dib);
6551 } 6590 }
6552 6591
6553 void RenderViewImpl::DidCommitCompositorFrame() { 6592 void RenderViewImpl::DidCommitCompositorFrame() {
6554 RenderWidget::DidCommitCompositorFrame(); 6593 RenderWidget::DidCommitCompositorFrame();
6555 FOR_EACH_OBSERVER(RenderViewObserver, observers_, DidCommitCompositorFrame()); 6594 FOR_EACH_OBSERVER(RenderViewObserver, observers_, DidCommitCompositorFrame());
6556 } 6595 }
6557 6596
6597 void RenderViewImpl::SendUpdateFaviconURL(const std::vector<FaviconURL>& urls) {
6598 if (!urls.empty())
6599 Send(new ViewHostMsg_UpdateFaviconURL(routing_id_, page_id_, urls));
6600 }
6601
6602 void RenderViewImpl::DidStopLoadingIcons() {
6603 int icon_types = WebIconURL::TypeFavicon;
6604 if (TouchEnabled())
6605 icon_types |= WebIconURL::TypeTouchPrecomposed | WebIconURL::TypeTouch;
6606
6607 WebVector<WebIconURL> icon_urls =
6608 webview()->mainFrame()->iconURLs(icon_types);
6609
6610 std::vector<FaviconURL> urls;
6611 for (size_t i = 0; i < icon_urls.size(); i++) {
6612 WebURL url = icon_urls[i].iconURL();
6613 if (!url.isEmpty())
6614 urls.push_back(FaviconURL(url,
6615 ToFaviconType(icon_urls[i].iconType())));
6616 }
6617 SendUpdateFaviconURL(urls);
6618 }
6619
6620
6558 } // namespace content 6621 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/render_view_impl.h ('k') | ipc/ipc_message_start.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698