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

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

Issue 6873014: Clear RenderThread of any Chrome specific code, and move a bunch of stuff out of RenderView. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 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.h ('k') | content/renderer/render_view_observer.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) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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.h" 5 #include "content/renderer/render_view.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <cmath> 8 #include <cmath>
9 #include <string> 9 #include <string>
10 #include <vector> 10 #include <vector>
11 11
12 #include "base/callback.h" 12 #include "base/callback.h"
13 #include "base/command_line.h" 13 #include "base/command_line.h"
14 #include "base/compiler_specific.h" 14 #include "base/compiler_specific.h"
15 #include "base/lazy_instance.h" 15 #include "base/lazy_instance.h"
16 #include "base/metrics/histogram.h" 16 #include "base/metrics/histogram.h"
17 #include "base/path_service.h" 17 #include "base/path_service.h"
18 #include "base/process_util.h" 18 #include "base/process_util.h"
19 #include "base/string_piece.h" 19 #include "base/string_piece.h"
20 #include "base/string_util.h" 20 #include "base/string_util.h"
21 #include "base/sys_string_conversions.h" 21 #include "base/sys_string_conversions.h"
22 #include "base/time.h" 22 #include "base/time.h"
23 #include "base/utf_string_conversions.h" 23 #include "base/utf_string_conversions.h"
24 #include "chrome/common/autofill_messages.h"
25 #include "chrome/common/bindings_policy.h" 24 #include "chrome/common/bindings_policy.h"
26 #include "chrome/common/child_process_logging.h"
27 #include "chrome/common/chrome_constants.h" 25 #include "chrome/common/chrome_constants.h"
28 #include "chrome/common/chrome_paths.h" 26 #include "chrome/common/chrome_paths.h"
29 #include "chrome/common/chrome_switches.h" 27 #include "chrome/common/chrome_switches.h"
30 #include "chrome/common/extensions/extension_messages.h"
31 #include "chrome/common/json_value_serializer.h"
32 #include "chrome/common/pepper_plugin_registry.h" 28 #include "chrome/common/pepper_plugin_registry.h"
33 #include "chrome/common/render_messages.h" 29 #include "chrome/common/render_messages.h"
34 #include "chrome/common/render_view_commands.h"
35 #include "chrome/common/url_constants.h" 30 #include "chrome/common/url_constants.h"
36 #include "chrome/common/web_apps.h"
37 #include "chrome/renderer/about_handler.h"
38 #include "chrome/renderer/automation/dom_automation_controller.h" 31 #include "chrome/renderer/automation/dom_automation_controller.h"
39 #include "chrome/renderer/external_host_bindings.h" 32 #include "chrome/renderer/external_host_bindings.h"
40 #include "chrome/renderer/localized_error.h" 33 #include "chrome/renderer/localized_error.h"
41 #include "chrome/renderer/searchbox.h"
42 #include "chrome/renderer/visitedlink_slave.h"
43 #include "content/common/appcache/appcache_dispatcher.h" 34 #include "content/common/appcache/appcache_dispatcher.h"
44 #include "content/common/clipboard_messages.h" 35 #include "content/common/clipboard_messages.h"
45 #include "content/common/content_constants.h" 36 #include "content/common/content_constants.h"
46 #include "content/common/database_messages.h" 37 #include "content/common/database_messages.h"
47 #include "content/common/drag_messages.h" 38 #include "content/common/drag_messages.h"
48 #include "content/common/file_system/file_system_dispatcher.h" 39 #include "content/common/file_system/file_system_dispatcher.h"
49 #include "content/common/file_system/webfilesystem_callback_dispatcher.h" 40 #include "content/common/file_system/webfilesystem_callback_dispatcher.h"
50 #include "content/common/notification_service.h" 41 #include "content/common/notification_service.h"
51 #include "content/common/pepper_messages.h" 42 #include "content/common/pepper_messages.h"
52 #include "content/common/quota_dispatcher.h" 43 #include "content/common/quota_dispatcher.h"
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
140 #include "webkit/glue/alt_error_page_resource_fetcher.h" 131 #include "webkit/glue/alt_error_page_resource_fetcher.h"
141 #include "webkit/glue/context_menu.h" 132 #include "webkit/glue/context_menu.h"
142 #include "webkit/glue/dom_operations.h" 133 #include "webkit/glue/dom_operations.h"
143 #include "webkit/glue/form_data.h" 134 #include "webkit/glue/form_data.h"
144 #include "webkit/glue/form_field.h" 135 #include "webkit/glue/form_field.h"
145 #include "webkit/glue/glue_serialize.h" 136 #include "webkit/glue/glue_serialize.h"
146 #include "webkit/glue/image_decoder.h" 137 #include "webkit/glue/image_decoder.h"
147 #include "webkit/glue/image_resource_fetcher.h" 138 #include "webkit/glue/image_resource_fetcher.h"
148 #include "webkit/glue/media/video_renderer_impl.h" 139 #include "webkit/glue/media/video_renderer_impl.h"
149 #include "webkit/glue/password_form_dom_manager.h" 140 #include "webkit/glue/password_form_dom_manager.h"
150 #include "webkit/glue/resource_fetcher.h"
151 #include "webkit/glue/site_isolation_metrics.h" 141 #include "webkit/glue/site_isolation_metrics.h"
152 #include "webkit/glue/webaccessibility.h" 142 #include "webkit/glue/webaccessibility.h"
153 #include "webkit/glue/webdropdata.h" 143 #include "webkit/glue/webdropdata.h"
154 #include "webkit/glue/webkit_constants.h" 144 #include "webkit/glue/webkit_constants.h"
155 #include "webkit/glue/webkit_glue.h" 145 #include "webkit/glue/webkit_glue.h"
156 #include "webkit/glue/webmediaplayer_impl.h" 146 #include "webkit/glue/webmediaplayer_impl.h"
157 #include "webkit/plugins/npapi/default_plugin_shared.h" 147 #include "webkit/plugins/npapi/default_plugin_shared.h"
158 #include "webkit/plugins/npapi/plugin_list.h" 148 #include "webkit/plugins/npapi/plugin_list.h"
159 #include "webkit/plugins/npapi/webplugin_delegate.h" 149 #include "webkit/plugins/npapi/webplugin_delegate.h"
160 #include "webkit/plugins/npapi/webplugin_delegate_impl.h" 150 #include "webkit/plugins/npapi/webplugin_delegate_impl.h"
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after
301 for (size_t i = 0; i < arraysize(kDirProtocols); ++i) { 291 for (size_t i = 0; i < arraysize(kDirProtocols); ++i) {
302 if (EqualsASCII(origin.protocol(), kDirProtocols[i])) { 292 if (EqualsASCII(origin.protocol(), kDirProtocols[i])) {
303 return frame_url.SchemeIs(kDirProtocols[i]) && 293 return frame_url.SchemeIs(kDirProtocols[i]) &&
304 frame_url.ExtractFileName().empty(); 294 frame_url.ExtractFileName().empty();
305 } 295 }
306 } 296 }
307 297
308 return false; 298 return false;
309 } 299 }
310 300
311 // Returns true if the parameter node is a textfield, text area or a content
312 // editable div.
313 static bool IsEditableNode(const WebNode& node) {
314 bool is_editable_node = false;
315 if (!node.isNull()) {
316 if (node.isContentEditable()) {
317 is_editable_node = true;
318 } else if (node.isElementNode()) {
319 is_editable_node =
320 node.toConst<WebElement>().isTextFormControlElement();
321 }
322 }
323 return is_editable_node;
324 }
325
326 static bool WebAccessibilityNotificationToViewHostMsg( 301 static bool WebAccessibilityNotificationToViewHostMsg(
327 WebAccessibilityNotification notification, 302 WebAccessibilityNotification notification,
328 ViewHostMsg_AccessibilityNotification_Type::Value* type) { 303 ViewHostMsg_AccessibilityNotification_Type::Value* type) {
329 switch (notification) { 304 switch (notification) {
330 case WebKit::WebAccessibilityNotificationCheckedStateChanged: 305 case WebKit::WebAccessibilityNotificationCheckedStateChanged:
331 *type = ViewHostMsg_AccessibilityNotification_Type:: 306 *type = ViewHostMsg_AccessibilityNotification_Type::
332 NOTIFICATION_TYPE_CHECK_STATE_CHANGED; 307 NOTIFICATION_TYPE_CHECK_STATE_CHANGED;
333 break; 308 break;
334 case WebKit::WebAccessibilityNotificationChildrenChanged: 309 case WebKit::WebAccessibilityNotificationChildrenChanged:
335 *type = ViewHostMsg_AccessibilityNotification_Type:: 310 *type = ViewHostMsg_AccessibilityNotification_Type::
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
434 view_type_(ViewType::INVALID), 409 view_type_(ViewType::INVALID),
435 browser_window_id_(-1), 410 browser_window_id_(-1),
436 ALLOW_THIS_IN_INITIALIZER_LIST(pepper_delegate_(this)), 411 ALLOW_THIS_IN_INITIALIZER_LIST(pepper_delegate_(this)),
437 ALLOW_THIS_IN_INITIALIZER_LIST(accessibility_method_factory_(this)), 412 ALLOW_THIS_IN_INITIALIZER_LIST(accessibility_method_factory_(this)),
438 ALLOW_THIS_IN_INITIALIZER_LIST(cookie_jar_(this)), 413 ALLOW_THIS_IN_INITIALIZER_LIST(cookie_jar_(this)),
439 geolocation_dispatcher_(NULL), 414 geolocation_dispatcher_(NULL),
440 speech_input_dispatcher_(NULL), 415 speech_input_dispatcher_(NULL),
441 device_orientation_dispatcher_(NULL), 416 device_orientation_dispatcher_(NULL),
442 accessibility_ack_pending_(false), 417 accessibility_ack_pending_(false),
443 p2p_socket_dispatcher_(NULL), 418 p2p_socket_dispatcher_(NULL),
444 pending_app_icon_requests_(0),
445 session_storage_namespace_id_(session_storage_namespace_id) { 419 session_storage_namespace_id_(session_storage_namespace_id) {
446 420
447 ClearBlockedContentSettings(); 421 ClearBlockedContentSettings();
448 422
449 routing_id_ = routing_id; 423 routing_id_ = routing_id;
450 if (opener_id != MSG_ROUTING_NONE) 424 if (opener_id != MSG_ROUTING_NONE)
451 opener_id_ = opener_id; 425 opener_id_ = opener_id;
452 426
453 webwidget_ = WebView::create(this); 427 webwidget_ = WebView::create(this);
454 428
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after
609 } 583 }
610 584
611 WebKit::WebView* RenderView::webview() const { 585 WebKit::WebView* RenderView::webview() const {
612 return static_cast<WebKit::WebView*>(webwidget()); 586 return static_cast<WebKit::WebView*>(webwidget());
613 } 587 }
614 588
615 void RenderView::UserMetricsRecordAction(const std::string& action) { 589 void RenderView::UserMetricsRecordAction(const std::string& action) {
616 Send(new ViewHostMsg_UserMetricsRecordAction(action)); 590 Send(new ViewHostMsg_UserMetricsRecordAction(action));
617 } 591 }
618 592
619 bool RenderView::InstallWebApplicationUsingDefinitionFile(WebFrame* frame,
620 string16* error) {
621 // There is an issue of drive-by installs with the below implementation. A web
622 // site could force a user to install an app by timing the dialog to come up
623 // just before the user clicks.
624 //
625 // We do show a success UI that allows users to uninstall, but it seems that
626 // we might still want to put up an infobar before showing the install dialog.
627 //
628 // TODO(aa): Figure out this issue before removing the kEnableCrxlessWebApps
629 // switch.
630 if (!CommandLine::ForCurrentProcess()->HasSwitch(
631 switches::kEnableCrxlessWebApps)) {
632 *error = ASCIIToUTF16("CRX-less web apps aren't enabled.");
633 return false;
634 }
635
636 if (frame != frame->top()) {
637 *error = ASCIIToUTF16("Applications can only be installed from the top "
638 "frame.");
639 return false;
640 }
641
642 if (pending_app_info_.get()) {
643 *error = ASCIIToUTF16("An application install is already in progress.");
644 return false;
645 }
646
647 pending_app_info_.reset(new WebApplicationInfo());
648 if (!web_apps::ParseWebAppFromWebDocument(frame, pending_app_info_.get(),
649 error)) {
650 return false;
651 }
652
653 if (!pending_app_info_->manifest_url.is_valid()) {
654 *error = ASCIIToUTF16("Web application definition not found or invalid.");
655 return false;
656 }
657
658 app_definition_fetcher_.reset(new ResourceFetcher(
659 pending_app_info_->manifest_url, webview()->mainFrame(),
660 WebURLRequest::TargetIsSubresource,
661 NewCallback(this, &RenderView::DidDownloadApplicationDefinition)));
662 return true;
663 }
664
665 void RenderView::SetReportLoadProgressEnabled(bool enabled) { 593 void RenderView::SetReportLoadProgressEnabled(bool enabled) {
666 if (!enabled) { 594 if (!enabled) {
667 load_progress_tracker_.reset(NULL); 595 load_progress_tracker_.reset(NULL);
668 return; 596 return;
669 } 597 }
670 if (load_progress_tracker_ == NULL) 598 if (load_progress_tracker_ == NULL)
671 load_progress_tracker_.reset(new LoadProgressTracker(this)); 599 load_progress_tracker_.reset(new LoadProgressTracker(this));
672 } 600 }
673 601
674 void RenderView::DidDownloadApplicationDefinition(
675 const WebKit::WebURLResponse& response,
676 const std::string& data) {
677 scoped_ptr<WebApplicationInfo> app_info(
678 pending_app_info_.release());
679
680 JSONStringValueSerializer serializer(data);
681 int error_code = 0;
682 std::string error_message;
683 scoped_ptr<Value> result(serializer.Deserialize(&error_code, &error_message));
684 if (!result.get()) {
685 AddErrorToRootConsole(UTF8ToUTF16(error_message));
686 return;
687 }
688
689 string16 error_message_16;
690 if (!web_apps::ParseWebAppFromDefinitionFile(result.get(), app_info.get(),
691 &error_message_16)) {
692 AddErrorToRootConsole(error_message_16);
693 return;
694 }
695
696 if (!app_info->icons.empty()) {
697 pending_app_info_.reset(app_info.release());
698 pending_app_icon_requests_ =
699 static_cast<int>(pending_app_info_->icons.size());
700 for (size_t i = 0; i < pending_app_info_->icons.size(); ++i) {
701 app_icon_fetchers_.push_back(linked_ptr<ImageResourceFetcher>(
702 new ImageResourceFetcher(
703 pending_app_info_->icons[i].url,
704 webview()->mainFrame(),
705 static_cast<int>(i),
706 pending_app_info_->icons[i].width,
707 WebURLRequest::TargetIsFavicon,
708 NewCallback(this, &RenderView::DidDownloadApplicationIcon))));
709 }
710 } else {
711 Send(new ExtensionHostMsg_InstallApplication(routing_id_, *app_info));
712 }
713 }
714
715 void RenderView::DidDownloadApplicationIcon(ImageResourceFetcher* fetcher,
716 const SkBitmap& image) {
717 pending_app_info_->icons[fetcher->id()].data = image;
718
719 // Remove the image fetcher from our pending list. We're in the callback from
720 // ImageResourceFetcher, best to delay deletion.
721 for (ImageResourceFetcherList::iterator iter = app_icon_fetchers_.begin();
722 iter != app_icon_fetchers_.end(); ++iter) {
723 if (iter->get() == fetcher) {
724 iter->release();
725 app_icon_fetchers_.erase(iter);
726 break;
727 }
728 }
729
730 // We're in the callback from the ImageResourceFetcher, best to delay
731 // deletion.
732 MessageLoop::current()->DeleteSoon(FROM_HERE, fetcher);
733
734 if (--pending_app_icon_requests_ > 0)
735 return;
736
737 // There is a maximum size of IPC on OS X and Linux that we have run into in
738 // some situations. We're not sure what it is, but our hypothesis is in the
739 // neighborhood of 1 MB.
740 //
741 // To be on the safe side, we give ourselves 128 KB for just the image data.
742 // This should be more than enough for 128, 48, and 16 px 32-bit icons. If we
743 // want to start allowing larger icons (see bug 63406), we'll have to either
744 // experiment mor ewith this and find the real limit, or else come up with
745 // some alternative way to transmit the icon data to the browser process.
746 //
747 // See also: bug 63729.
748 const size_t kMaxIconSize = 1024 * 128;
749 size_t actual_icon_size = 0;
750 for (size_t i = 0; i < pending_app_info_->icons.size(); ++i) {
751 size_t current_size = pending_app_info_->icons[i].data.getSize();
752 if (current_size > kMaxIconSize - actual_icon_size) {
753 AddErrorToRootConsole(ASCIIToUTF16(
754 "Icons are too large. Maximum total size for app icons is 128 KB."));
755 return;
756 }
757 actual_icon_size += current_size;
758 }
759
760 Send(new ExtensionHostMsg_InstallApplication(
761 routing_id_, *pending_app_info_));
762 pending_app_info_.reset(NULL);
763 }
764
765 void RenderView::PluginCrashed(const FilePath& plugin_path) { 602 void RenderView::PluginCrashed(const FilePath& plugin_path) {
766 Send(new ViewHostMsg_CrashedPlugin(routing_id_, plugin_path)); 603 Send(new ViewHostMsg_CrashedPlugin(routing_id_, plugin_path));
767 } 604 }
768 605
769 WebPlugin* RenderView::CreatePluginNoCheck(WebFrame* frame, 606 WebPlugin* RenderView::CreatePluginNoCheck(WebFrame* frame,
770 const WebPluginParams& params) { 607 const WebPluginParams& params) {
771 webkit::npapi::WebPluginInfo info; 608 webkit::npapi::WebPluginInfo info;
772 bool found; 609 bool found;
773 int content_setting; 610 int content_setting;
774 std::string mime_type; 611 std::string mime_type;
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
806 delegate->SetContentAreaFocus(has_focus()); 643 delegate->SetContentAreaFocus(has_focus());
807 } 644 }
808 645
809 void RenderView::UnregisterPluginDelegate(WebPluginDelegateProxy* delegate) { 646 void RenderView::UnregisterPluginDelegate(WebPluginDelegateProxy* delegate) {
810 plugin_delegates_.erase(delegate); 647 plugin_delegates_.erase(delegate);
811 } 648 }
812 649
813 bool RenderView::OnMessageReceived(const IPC::Message& message) { 650 bool RenderView::OnMessageReceived(const IPC::Message& message) {
814 WebFrame* main_frame = webview() ? webview()->mainFrame() : NULL; 651 WebFrame* main_frame = webview() ? webview()->mainFrame() : NULL;
815 if (main_frame) 652 if (main_frame)
816 child_process_logging::SetActiveURL(main_frame->url()); 653 content::GetContentClient()->SetActiveURL(main_frame->url());
817 654
818 ObserverListBase<RenderViewObserver>::Iterator it(observers_); 655 ObserverListBase<RenderViewObserver>::Iterator it(observers_);
819 RenderViewObserver* observer; 656 RenderViewObserver* observer;
820 while ((observer = it.GetNext()) != NULL) 657 while ((observer = it.GetNext()) != NULL)
821 if (observer->OnMessageReceived(message)) 658 if (observer->OnMessageReceived(message))
822 return true; 659 return true;
823 660
824 bool handled = true; 661 bool handled = true;
825 IPC_BEGIN_MESSAGE_MAP(RenderView, message) 662 IPC_BEGIN_MESSAGE_MAP(RenderView, message)
826 IPC_MESSAGE_HANDLER(ViewMsg_Navigate, OnNavigate) 663 IPC_MESSAGE_HANDLER(ViewMsg_Navigate, OnNavigate)
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
875 OnDisplayPrerenderedPage) 712 OnDisplayPrerenderedPage)
876 IPC_MESSAGE_HANDLER(ViewMsg_EnumerateDirectoryResponse, 713 IPC_MESSAGE_HANDLER(ViewMsg_EnumerateDirectoryResponse,
877 OnEnumerateDirectoryResponse) 714 OnEnumerateDirectoryResponse)
878 IPC_MESSAGE_HANDLER(ViewMsg_RunFileChooserResponse, OnFileChooserResponse) 715 IPC_MESSAGE_HANDLER(ViewMsg_RunFileChooserResponse, OnFileChooserResponse)
879 IPC_MESSAGE_HANDLER(ViewMsg_EnableViewSourceMode, OnEnableViewSourceMode) 716 IPC_MESSAGE_HANDLER(ViewMsg_EnableViewSourceMode, OnEnableViewSourceMode)
880 IPC_MESSAGE_HANDLER(ViewMsg_GetAllSavableResourceLinksForCurrentPage, 717 IPC_MESSAGE_HANDLER(ViewMsg_GetAllSavableResourceLinksForCurrentPage,
881 OnGetAllSavableResourceLinksForCurrentPage) 718 OnGetAllSavableResourceLinksForCurrentPage)
882 IPC_MESSAGE_HANDLER( 719 IPC_MESSAGE_HANDLER(
883 ViewMsg_GetSerializedHtmlDataForCurrentPageWithLocalLinks, 720 ViewMsg_GetSerializedHtmlDataForCurrentPageWithLocalLinks,
884 OnGetSerializedHtmlDataForCurrentPageWithLocalLinks) 721 OnGetSerializedHtmlDataForCurrentPageWithLocalLinks)
885 IPC_MESSAGE_HANDLER(ExtensionMsg_GetApplicationInfo, OnGetApplicationInfo)
886 IPC_MESSAGE_HANDLER(ViewMsg_ShouldClose, OnShouldClose) 722 IPC_MESSAGE_HANDLER(ViewMsg_ShouldClose, OnShouldClose)
887 IPC_MESSAGE_HANDLER(ViewMsg_ClosePage, OnClosePage) 723 IPC_MESSAGE_HANDLER(ViewMsg_ClosePage, OnClosePage)
888 IPC_MESSAGE_HANDLER(ViewMsg_ThemeChanged, OnThemeChanged) 724 IPC_MESSAGE_HANDLER(ViewMsg_ThemeChanged, OnThemeChanged)
889 IPC_MESSAGE_HANDLER(ViewMsg_HandleMessageFromExternalHost, 725 IPC_MESSAGE_HANDLER(ViewMsg_HandleMessageFromExternalHost,
890 OnHandleMessageFromExternalHost) 726 OnHandleMessageFromExternalHost)
891 IPC_MESSAGE_HANDLER(ViewMsg_DisassociateFromPopupCount, 727 IPC_MESSAGE_HANDLER(ViewMsg_DisassociateFromPopupCount,
892 OnDisassociateFromPopupCount) 728 OnDisassociateFromPopupCount)
893 IPC_MESSAGE_HANDLER(ViewMsg_AllowScriptToClose, 729 IPC_MESSAGE_HANDLER(ViewMsg_AllowScriptToClose,
894 OnAllowScriptToClose) 730 OnAllowScriptToClose)
895 IPC_MESSAGE_HANDLER(ViewMsg_MoveOrResizeStarted, OnMoveOrResizeStarted) 731 IPC_MESSAGE_HANDLER(ViewMsg_MoveOrResizeStarted, OnMoveOrResizeStarted)
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
943 return handled; 779 return handled;
944 } 780 }
945 781
946 void RenderView::OnNavigate(const ViewMsg_Navigate_Params& params) { 782 void RenderView::OnNavigate(const ViewMsg_Navigate_Params& params) {
947 if (!webview()) 783 if (!webview())
948 return; 784 return;
949 785
950 history_list_offset_ = params.current_history_list_offset; 786 history_list_offset_ = params.current_history_list_offset;
951 history_list_length_ = params.current_history_list_length; 787 history_list_length_ = params.current_history_list_length;
952 788
953 child_process_logging::SetActiveURL(params.url); 789 content::GetContentClient()->SetActiveURL(params.url);
954
955 AboutHandler::MaybeHandle(params.url);
956 790
957 bool is_reload = 791 bool is_reload =
958 params.navigation_type == ViewMsg_Navigate_Type::RELOAD || 792 params.navigation_type == ViewMsg_Navigate_Type::RELOAD ||
959 params.navigation_type == ViewMsg_Navigate_Type::RELOAD_IGNORING_CACHE; 793 params.navigation_type == ViewMsg_Navigate_Type::RELOAD_IGNORING_CACHE;
960 794
961 WebFrame* main_frame = webview()->mainFrame(); 795 WebFrame* main_frame = webview()->mainFrame();
962 if (is_reload && main_frame->currentHistoryItem().isNull()) { 796 if (is_reload && main_frame->currentHistoryItem().isNull()) {
963 // We cannot reload if we do not have any history state. This happens, for 797 // We cannot reload if we do not have any history state. This happens, for
964 // example, when recovering from a crash. Our workaround here is a bit of 798 // example, when recovering from a crash. Our workaround here is a bit of
965 // a hack since it means that reload after a crashed tab does not cause an 799 // a hack since it means that reload after a crashed tab does not cause an
(...skipping 1009 matching lines...) Expand 10 before | Expand all | Expand 10 after
1975 // any existing pending sends. 1809 // any existing pending sends.
1976 pending_target_url_ = latest_url; 1810 pending_target_url_ = latest_url;
1977 target_url_status_ = TARGET_PENDING; 1811 target_url_status_ = TARGET_PENDING;
1978 } else { 1812 } else {
1979 Send(new ViewHostMsg_UpdateTargetURL(routing_id_, page_id_, latest_url)); 1813 Send(new ViewHostMsg_UpdateTargetURL(routing_id_, page_id_, latest_url));
1980 target_url_ = latest_url; 1814 target_url_ = latest_url;
1981 target_url_status_ = TARGET_INFLIGHT; 1815 target_url_status_ = TARGET_INFLIGHT;
1982 } 1816 }
1983 } 1817 }
1984 1818
1985 void RenderView::UpdateToggleSpellCheckCommandState() {
1986 bool is_enabled = false;
1987 WebKit::WebNode node = GetFocusedNode();
1988 if (!node.isNull())
1989 is_enabled = IsEditableNode(node);
1990
1991 RenderViewCommandCheckedState checked_state =
1992 RENDER_VIEW_COMMAND_CHECKED_STATE_UNCHECKED;
1993 if (is_enabled && webview()) {
1994 WebFrame* frame = webview()->focusedFrame();
1995 if (frame->isContinuousSpellCheckingEnabled())
1996 checked_state = RENDER_VIEW_COMMAND_CHECKED_STATE_CHECKED;
1997 }
1998
1999 Send(new ViewHostMsg_CommandStateChanged(
2000 routing_id_,
2001 RENDER_VIEW_COMMAND_TOGGLE_SPELL_CHECK,
2002 is_enabled,
2003 checked_state));
2004 }
2005
2006 void RenderView::StartNavStateSyncTimerIfNecessary() { 1819 void RenderView::StartNavStateSyncTimerIfNecessary() {
2007 int delay; 1820 int delay;
2008 if (send_content_state_immediately_) 1821 if (send_content_state_immediately_)
2009 delay = 0; 1822 delay = 0;
2010 else if (is_hidden()) 1823 else if (is_hidden())
2011 delay = kDelaySecondsForContentStateSyncHidden; 1824 delay = kDelaySecondsForContentStateSyncHidden;
2012 else 1825 else
2013 delay = kDelaySecondsForContentStateSync; 1826 delay = kDelaySecondsForContentStateSync;
2014 1827
2015 if (nav_state_sync_timer_.IsRunning()) { 1828 if (nav_state_sync_timer_.IsRunning()) {
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
2073 Send(new ViewHostMsg_FocusedNodeChanged(routing_id_, IsEditableNode(node))); 1886 Send(new ViewHostMsg_FocusedNodeChanged(routing_id_, IsEditableNode(node)));
2074 1887
2075 if (WebAccessibilityCache::accessibilityEnabled() && node.isNull()) { 1888 if (WebAccessibilityCache::accessibilityEnabled() && node.isNull()) {
2076 // TODO(ctguil): Make WebKit send this notification. 1889 // TODO(ctguil): Make WebKit send this notification.
2077 // When focus is cleared notify accessibility that the document is focused. 1890 // When focus is cleared notify accessibility that the document is focused.
2078 postAccessibilityNotification( 1891 postAccessibilityNotification(
2079 webview()->accessibilityObject(), 1892 webview()->accessibilityObject(),
2080 WebKit::WebAccessibilityNotificationFocusedUIElementChanged); 1893 WebKit::WebAccessibilityNotificationFocusedUIElementChanged);
2081 } 1894 }
2082 1895
2083 UpdateToggleSpellCheckCommandState(); 1896 FOR_EACH_OBSERVER(RenderViewObserver, observers_, FocusedNodeChanged(node));
2084 } 1897 }
2085 1898
2086 void RenderView::navigateBackForwardSoon(int offset) { 1899 void RenderView::navigateBackForwardSoon(int offset) {
2087 Send(new ViewHostMsg_GoToEntryAtOffset(routing_id_, offset)); 1900 Send(new ViewHostMsg_GoToEntryAtOffset(routing_id_, offset));
2088 } 1901 }
2089 1902
2090 int RenderView::historyBackListCount() { 1903 int RenderView::historyBackListCount() {
2091 return history_list_offset_ < 0 ? 0 : history_list_offset_; 1904 return history_list_offset_ < 0 ? 0 : history_list_offset_;
2092 } 1905 }
2093 1906
(...skipping 453 matching lines...) Expand 10 before | Expand all | Expand 10 after
2547 2360
2548 void RenderView::didCompleteClientRedirect( 2361 void RenderView::didCompleteClientRedirect(
2549 WebFrame* frame, const WebURL& from) { 2362 WebFrame* frame, const WebURL& from) {
2550 if (!frame->parent()) 2363 if (!frame->parent())
2551 completed_client_redirect_src_ = from; 2364 completed_client_redirect_src_ = from;
2552 FOR_EACH_OBSERVER( 2365 FOR_EACH_OBSERVER(
2553 RenderViewObserver, observers_, DidCompleteClientRedirect(frame, from)); 2366 RenderViewObserver, observers_, DidCompleteClientRedirect(frame, from));
2554 } 2367 }
2555 2368
2556 void RenderView::didCreateDataSource(WebFrame* frame, WebDataSource* ds) { 2369 void RenderView::didCreateDataSource(WebFrame* frame, WebDataSource* ds) {
2557 // If there are any app-related fetches in progress, they can be cancelled now
2558 // since we have navigated away from the page that created them.
2559 if (!frame->parent()) {
2560 app_icon_fetchers_.clear();
2561 app_definition_fetcher_.reset(NULL);
2562 }
2563
2564 // The rest of RenderView assumes that a WebDataSource will always have a 2370 // The rest of RenderView assumes that a WebDataSource will always have a
2565 // non-null NavigationState. 2371 // non-null NavigationState.
2566 bool content_initiated = !pending_navigation_state_.get(); 2372 bool content_initiated = !pending_navigation_state_.get();
2567 NavigationState* state = content_initiated ? 2373 NavigationState* state = content_initiated ?
2568 NavigationState::CreateContentInitiated() : 2374 NavigationState::CreateContentInitiated() :
2569 pending_navigation_state_.release(); 2375 pending_navigation_state_.release();
2570 2376
2571 // NavigationState::referred_by_prefetcher_ is true if we are 2377 // NavigationState::referred_by_prefetcher_ is true if we are
2572 // navigating from a page that used prefetching using a link on that 2378 // navigating from a page that used prefetching using a link on that
2573 // page. We are early enough in the request process here that we 2379 // page. We are early enough in the request process here that we
(...skipping 837 matching lines...) Expand 10 before | Expand all | Expand 10 after
3411 // Decode the favicon using WebKit's image decoder. 3217 // Decode the favicon using WebKit's image decoder.
3412 webkit_glue::ImageDecoder decoder(gfx::Size(kFaviconSize, kFaviconSize)); 3218 webkit_glue::ImageDecoder decoder(gfx::Size(kFaviconSize, kFaviconSize));
3413 const unsigned char* src_data = 3219 const unsigned char* src_data =
3414 reinterpret_cast<const unsigned char*>(&data[0]); 3220 reinterpret_cast<const unsigned char*>(&data[0]);
3415 3221
3416 return decoder.Decode(src_data, data.size()); 3222 return decoder.Decode(src_data, data.size());
3417 } 3223 }
3418 return SkBitmap(); 3224 return SkBitmap();
3419 } 3225 }
3420 3226
3421 void RenderView::OnGetApplicationInfo(int page_id) {
3422 WebApplicationInfo app_info;
3423 if (page_id == page_id_) {
3424 string16 error;
3425 web_apps::ParseWebAppFromWebDocument(webview()->mainFrame(), &app_info,
3426 &error);
3427 }
3428
3429 // Prune out any data URLs in the set of icons. The browser process expects
3430 // any icon with a data URL to have originated from a favicon. We don't want
3431 // to decode arbitrary data URLs in the browser process. See
3432 // http://b/issue?id=1162972
3433 for (size_t i = 0; i < app_info.icons.size(); ++i) {
3434 if (app_info.icons[i].url.SchemeIs(chrome::kDataScheme)) {
3435 app_info.icons.erase(app_info.icons.begin() + i);
3436 --i;
3437 }
3438 }
3439
3440 Send(new ExtensionHostMsg_DidGetApplicationInfo(
3441 routing_id_, page_id, app_info));
3442 }
3443
3444 GURL RenderView::GetAlternateErrorPageURL(const GURL& failed_url, 3227 GURL RenderView::GetAlternateErrorPageURL(const GURL& failed_url,
3445 ErrorPageType error_type) { 3228 ErrorPageType error_type) {
3446 if (failed_url.SchemeIsSecure()) { 3229 if (failed_url.SchemeIsSecure()) {
3447 // If the URL that failed was secure, then the embedding web page was not 3230 // If the URL that failed was secure, then the embedding web page was not
3448 // expecting a network attacker to be able to manipulate its contents. As 3231 // expecting a network attacker to be able to manipulate its contents. As
3449 // we fetch alternate error pages over HTTP, we would be allowing a network 3232 // we fetch alternate error pages over HTTP, we would be allowing a network
3450 // attacker to manipulate the contents of the response if we tried to use 3233 // attacker to manipulate the contents of the response if we tried to use
3451 // the link doctor here. 3234 // the link doctor here.
3452 return GURL(); 3235 return GURL();
3453 } 3236 }
(...skipping 365 matching lines...) Expand 10 before | Expand all | Expand 10 after
3819 WebFrame* focused_frame = webview()->focusedFrame(); 3602 WebFrame* focused_frame = webview()->focusedFrame();
3820 if (focused_frame) { 3603 if (focused_frame) {
3821 WebDocument doc = focused_frame->document(); 3604 WebDocument doc = focused_frame->document();
3822 if (!doc.isNull()) 3605 if (!doc.isNull())
3823 return doc.focusedNode(); 3606 return doc.focusedNode();
3824 } 3607 }
3825 3608
3826 return WebNode(); 3609 return WebNode();
3827 } 3610 }
3828 3611
3612 bool RenderView::IsEditableNode(const WebNode& node) {
3613 bool is_editable_node = false;
3614 if (!node.isNull()) {
3615 if (node.isContentEditable()) {
3616 is_editable_node = true;
3617 } else if (node.isElementNode()) {
3618 is_editable_node =
3619 node.toConst<WebElement>().isTextFormControlElement();
3620 }
3621 }
3622 return is_editable_node;
3623 }
3624
3829 void RenderView::EvaluateScript(const string16& frame_xpath, 3625 void RenderView::EvaluateScript(const string16& frame_xpath,
3830 const string16& script, 3626 const string16& script,
3831 int id, 3627 int id,
3832 bool notify_result) { 3628 bool notify_result) {
3833 v8::Handle<v8::Value> result; 3629 v8::Handle<v8::Value> result;
3834 WebFrame* web_frame = GetChildFrame(UTF16ToWideHack(frame_xpath)); 3630 WebFrame* web_frame = GetChildFrame(UTF16ToWideHack(frame_xpath));
3835 if (web_frame) 3631 if (web_frame)
3836 result = web_frame->executeScriptAndReturnValue(WebScriptSource(script)); 3632 result = web_frame->executeScriptAndReturnValue(WebScriptSource(script));
3837 if (notify_result) { 3633 if (notify_result) {
3838 ListValue list; 3634 ListValue list;
(...skipping 949 matching lines...) Expand 10 before | Expand all | Expand 10 after
4788 // If you hit this please file a bug against jcivelli and include the page 4584 // If you hit this please file a bug against jcivelli and include the page
4789 // and steps to repro. 4585 // and steps to repro.
4790 NOTREACHED(); 4586 NOTREACHED();
4791 return; 4587 return;
4792 } 4588 }
4793 external_popup_menu_->DidSelectItem(selected_index); 4589 external_popup_menu_->DidSelectItem(selected_index);
4794 external_popup_menu_.reset(); 4590 external_popup_menu_.reset();
4795 } 4591 }
4796 #endif 4592 #endif
4797 4593
4798 void RenderView::AddErrorToRootConsole(const string16& message) {
4799 if (webview() && webview()->mainFrame()) {
4800 webview()->mainFrame()->addMessageToConsole(
4801 WebConsoleMessage(WebConsoleMessage::LevelError, message));
4802 }
4803 }
4804
4805 #if defined(ENABLE_FLAPPER_HACKS) 4594 #if defined(ENABLE_FLAPPER_HACKS)
4806 void RenderView::OnConnectTcpACK( 4595 void RenderView::OnConnectTcpACK(
4807 int request_id, 4596 int request_id,
4808 IPC::PlatformFileForTransit socket_for_transit, 4597 IPC::PlatformFileForTransit socket_for_transit,
4809 const PP_Flash_NetAddress& local_addr, 4598 const PP_Flash_NetAddress& local_addr,
4810 const PP_Flash_NetAddress& remote_addr) { 4599 const PP_Flash_NetAddress& remote_addr) {
4811 pepper_delegate_.OnConnectTcpACK( 4600 pepper_delegate_.OnConnectTcpACK(
4812 request_id, 4601 request_id,
4813 IPC::PlatformFileForTransitToPlatformFile(socket_for_transit), 4602 IPC::PlatformFileForTransitToPlatformFile(socket_for_transit),
4814 local_addr, 4603 local_addr,
(...skipping 13 matching lines...) Expand all
4828 const webkit_glue::CustomContextMenuContext& custom_context) { 4617 const webkit_glue::CustomContextMenuContext& custom_context) {
4829 if (custom_context.is_pepper_menu) 4618 if (custom_context.is_pepper_menu)
4830 pepper_delegate_.OnContextMenuClosed(custom_context); 4619 pepper_delegate_.OnContextMenuClosed(custom_context);
4831 else 4620 else
4832 context_menu_node_.reset(); 4621 context_menu_node_.reset();
4833 } 4622 }
4834 4623
4835 void RenderView::OnNetworkStateChanged(bool online) { 4624 void RenderView::OnNetworkStateChanged(bool online) {
4836 WebNetworkStateNotifier::setOnLine(online); 4625 WebNetworkStateNotifier::setOnLine(online);
4837 } 4626 }
OLDNEW
« no previous file with comments | « content/renderer/render_view.h ('k') | content/renderer/render_view_observer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698