| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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_frame_impl.h" | 5 #include "content/renderer/render_frame_impl.h" |
| 6 | 6 |
| 7 #include <map> | 7 #include <map> |
| 8 #include <string> | 8 #include <string> |
| 9 | 9 |
| 10 #include "base/auto_reset.h" |
| 10 #include "base/command_line.h" | 11 #include "base/command_line.h" |
| 11 #include "base/debug/alias.h" | 12 #include "base/debug/alias.h" |
| 12 #include "base/debug/dump_without_crashing.h" | 13 #include "base/debug/dump_without_crashing.h" |
| 13 #include "base/i18n/char_iterator.h" | 14 #include "base/i18n/char_iterator.h" |
| 14 #include "base/metrics/histogram.h" | 15 #include "base/metrics/histogram.h" |
| 15 #include "base/process/kill.h" | 16 #include "base/process/kill.h" |
| 16 #include "base/process/process.h" | 17 #include "base/process/process.h" |
| 17 #include "base/strings/utf_string_conversions.h" | 18 #include "base/strings/utf_string_conversions.h" |
| 18 #include "base/time/time.h" | 19 #include "base/time/time.h" |
| 19 #include "content/child/appcache/appcache_dispatcher.h" | 20 #include "content/child/appcache/appcache_dispatcher.h" |
| 20 #include "content/child/plugin_messages.h" | 21 #include "content/child/plugin_messages.h" |
| 21 #include "content/child/quota_dispatcher.h" | 22 #include "content/child/quota_dispatcher.h" |
| 22 #include "content/child/request_extra_data.h" | 23 #include "content/child/request_extra_data.h" |
| 23 #include "content/child/service_worker/service_worker_network_provider.h" | 24 #include "content/child/service_worker/service_worker_network_provider.h" |
| 24 #include "content/child/service_worker/web_service_worker_provider_impl.h" | 25 #include "content/child/service_worker/web_service_worker_provider_impl.h" |
| 25 #include "content/child/web_socket_stream_handle_impl.h" | 26 #include "content/child/web_socket_stream_handle_impl.h" |
| 26 #include "content/common/frame_messages.h" | 27 #include "content/common/frame_messages.h" |
| 28 #include "content/common/input_messages.h" |
| 27 #include "content/common/service_worker/service_worker_types.h" | 29 #include "content/common/service_worker/service_worker_types.h" |
| 28 #include "content/common/socket_stream_handle_data.h" | 30 #include "content/common/socket_stream_handle_data.h" |
| 29 #include "content/common/swapped_out_messages.h" | 31 #include "content/common/swapped_out_messages.h" |
| 30 #include "content/common/view_messages.h" | 32 #include "content/common/view_messages.h" |
| 31 #include "content/public/common/bindings_policy.h" | 33 #include "content/public/common/bindings_policy.h" |
| 32 #include "content/public/common/content_constants.h" | 34 #include "content/public/common/content_constants.h" |
| 33 #include "content/public/common/content_switches.h" | 35 #include "content/public/common/content_switches.h" |
| 34 #include "content/public/common/context_menu_params.h" | 36 #include "content/public/common/context_menu_params.h" |
| 35 #include "content/public/common/url_constants.h" | 37 #include "content/public/common/url_constants.h" |
| 36 #include "content/public/common/url_utils.h" | 38 #include "content/public/common/url_utils.h" |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 87 #endif | 89 #endif |
| 88 | 90 |
| 89 #if defined(ENABLE_WEBRTC) | 91 #if defined(ENABLE_WEBRTC) |
| 90 #include "content/renderer/media/rtc_peer_connection_handler.h" | 92 #include "content/renderer/media/rtc_peer_connection_handler.h" |
| 91 #endif | 93 #endif |
| 92 | 94 |
| 93 using blink::WebContextMenuData; | 95 using blink::WebContextMenuData; |
| 94 using blink::WebData; | 96 using blink::WebData; |
| 95 using blink::WebDataSource; | 97 using blink::WebDataSource; |
| 96 using blink::WebDocument; | 98 using blink::WebDocument; |
| 99 using blink::WebElement; |
| 97 using blink::WebFrame; | 100 using blink::WebFrame; |
| 98 using blink::WebHistoryItem; | 101 using blink::WebHistoryItem; |
| 99 using blink::WebHTTPBody; | 102 using blink::WebHTTPBody; |
| 100 using blink::WebNavigationPolicy; | 103 using blink::WebNavigationPolicy; |
| 101 using blink::WebNavigationType; | 104 using blink::WebNavigationType; |
| 105 using blink::WebNode; |
| 102 using blink::WebPluginParams; | 106 using blink::WebPluginParams; |
| 103 using blink::WebReferrerPolicy; | 107 using blink::WebReferrerPolicy; |
| 104 using blink::WebSearchableFormData; | 108 using blink::WebSearchableFormData; |
| 105 using blink::WebSecurityOrigin; | 109 using blink::WebSecurityOrigin; |
| 106 using blink::WebSecurityPolicy; | 110 using blink::WebSecurityPolicy; |
| 107 using blink::WebServiceWorkerProvider; | 111 using blink::WebServiceWorkerProvider; |
| 108 using blink::WebStorageQuotaCallbacks; | 112 using blink::WebStorageQuotaCallbacks; |
| 109 using blink::WebString; | 113 using blink::WebString; |
| 110 using blink::WebURL; | 114 using blink::WebURL; |
| 111 using blink::WebURLError; | 115 using blink::WebURLError; |
| (...skipping 239 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 351 PepperPluginInstanceImpl* instance) { | 355 PepperPluginInstanceImpl* instance) { |
| 352 render_view_->set_pepper_last_mouse_event_target(instance); | 356 render_view_->set_pepper_last_mouse_event_target(instance); |
| 353 } | 357 } |
| 354 | 358 |
| 355 void RenderFrameImpl::PepperTextInputTypeChanged( | 359 void RenderFrameImpl::PepperTextInputTypeChanged( |
| 356 PepperPluginInstanceImpl* instance) { | 360 PepperPluginInstanceImpl* instance) { |
| 357 if (instance != render_view_->focused_pepper_plugin()) | 361 if (instance != render_view_->focused_pepper_plugin()) |
| 358 return; | 362 return; |
| 359 | 363 |
| 360 GetRenderWidget()->UpdateTextInputType(); | 364 GetRenderWidget()->UpdateTextInputType(); |
| 361 if (render_view_->renderer_accessibility()) { | 365 if (render_view_->renderer_accessibility()) |
| 362 render_view_->renderer_accessibility()->FocusedNodeChanged( | 366 render_view_->renderer_accessibility()->FocusedNodeChanged(WebNode()); |
| 363 blink::WebNode()); | |
| 364 } | |
| 365 } | 367 } |
| 366 | 368 |
| 367 void RenderFrameImpl::PepperCaretPositionChanged( | 369 void RenderFrameImpl::PepperCaretPositionChanged( |
| 368 PepperPluginInstanceImpl* instance) { | 370 PepperPluginInstanceImpl* instance) { |
| 369 if (instance != render_view_->focused_pepper_plugin()) | 371 if (instance != render_view_->focused_pepper_plugin()) |
| 370 return; | 372 return; |
| 371 GetRenderWidget()->UpdateSelectionBounds(); | 373 GetRenderWidget()->UpdateSelectionBounds(); |
| 372 } | 374 } |
| 373 | 375 |
| 374 void RenderFrameImpl::PepperCancelComposition( | 376 void RenderFrameImpl::PepperCancelComposition( |
| (...skipping 160 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 535 IPC_BEGIN_MESSAGE_MAP_EX(RenderFrameImpl, msg, msg_is_ok) | 537 IPC_BEGIN_MESSAGE_MAP_EX(RenderFrameImpl, msg, msg_is_ok) |
| 536 IPC_MESSAGE_HANDLER(FrameMsg_Navigate, OnNavigate) | 538 IPC_MESSAGE_HANDLER(FrameMsg_Navigate, OnNavigate) |
| 537 IPC_MESSAGE_HANDLER(FrameMsg_SwapOut, OnSwapOut) | 539 IPC_MESSAGE_HANDLER(FrameMsg_SwapOut, OnSwapOut) |
| 538 IPC_MESSAGE_HANDLER(FrameMsg_BuffersSwapped, OnBuffersSwapped) | 540 IPC_MESSAGE_HANDLER(FrameMsg_BuffersSwapped, OnBuffersSwapped) |
| 539 IPC_MESSAGE_HANDLER_GENERIC(FrameMsg_CompositorFrameSwapped, | 541 IPC_MESSAGE_HANDLER_GENERIC(FrameMsg_CompositorFrameSwapped, |
| 540 OnCompositorFrameSwapped(msg)) | 542 OnCompositorFrameSwapped(msg)) |
| 541 IPC_MESSAGE_HANDLER(FrameMsg_ChildFrameProcessGone, OnChildFrameProcessGone) | 543 IPC_MESSAGE_HANDLER(FrameMsg_ChildFrameProcessGone, OnChildFrameProcessGone) |
| 542 IPC_MESSAGE_HANDLER(FrameMsg_ContextMenuClosed, OnContextMenuClosed) | 544 IPC_MESSAGE_HANDLER(FrameMsg_ContextMenuClosed, OnContextMenuClosed) |
| 543 IPC_MESSAGE_HANDLER(FrameMsg_CustomContextMenuAction, | 545 IPC_MESSAGE_HANDLER(FrameMsg_CustomContextMenuAction, |
| 544 OnCustomContextMenuAction) | 546 OnCustomContextMenuAction) |
| 547 IPC_MESSAGE_HANDLER(InputMsg_Cut, OnCut) |
| 548 IPC_MESSAGE_HANDLER(InputMsg_Copy, OnCopy) |
| 549 IPC_MESSAGE_HANDLER(InputMsg_Paste, OnPaste) |
| 545 IPC_END_MESSAGE_MAP_EX() | 550 IPC_END_MESSAGE_MAP_EX() |
| 546 | 551 |
| 547 if (!msg_is_ok) { | 552 if (!msg_is_ok) { |
| 548 // The message had a handler, but its deserialization failed. | 553 // The message had a handler, but its deserialization failed. |
| 549 // Kill the renderer to avoid potential spoofing attacks. | 554 // Kill the renderer to avoid potential spoofing attacks. |
| 550 CHECK(false) << "Unable to deserialize message in RenderFrameImpl."; | 555 CHECK(false) << "Unable to deserialize message in RenderFrameImpl."; |
| 551 } | 556 } |
| 552 | 557 |
| 553 return handled; | 558 return handled; |
| 554 } | 559 } |
| (...skipping 278 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 833 ContextMenuClient* client = | 838 ContextMenuClient* client = |
| 834 pending_context_menus_.Lookup(custom_context.request_id); | 839 pending_context_menus_.Lookup(custom_context.request_id); |
| 835 if (client) | 840 if (client) |
| 836 client->OnMenuAction(custom_context.request_id, action); | 841 client->OnMenuAction(custom_context.request_id, action); |
| 837 } else { | 842 } else { |
| 838 // Internal request, forward to WebKit. | 843 // Internal request, forward to WebKit. |
| 839 render_view_->webview()->performCustomContextMenuAction(action); | 844 render_view_->webview()->performCustomContextMenuAction(action); |
| 840 } | 845 } |
| 841 } | 846 } |
| 842 | 847 |
| 848 void RenderFrameImpl::OnCut() { |
| 849 base::AutoReset<bool> handling_select_range( |
| 850 &render_view_->handling_select_range_, true); |
| 851 frame_->executeCommand(WebString::fromUTF8("Cut"), GetFocusedElement()); |
| 852 } |
| 853 |
| 854 void RenderFrameImpl::OnCopy() { |
| 855 base::AutoReset<bool> handling_select_range( |
| 856 &render_view_->handling_select_range_, true); |
| 857 WebNode current_node = render_view_->context_menu_node_.isNull() ? |
| 858 GetFocusedElement() : render_view_->context_menu_node_; |
| 859 frame_->executeCommand(WebString::fromUTF8("Copy"), current_node); |
| 860 } |
| 861 |
| 862 void RenderFrameImpl::OnPaste() { |
| 863 base::AutoReset<bool> handling_select_range( |
| 864 &render_view_->handling_select_range_, true); |
| 865 frame_->executeCommand(WebString::fromUTF8("Paste"), GetFocusedElement()); |
| 866 } |
| 867 |
| 843 bool RenderFrameImpl::ShouldUpdateSelectionTextFromContextMenuParams( | 868 bool RenderFrameImpl::ShouldUpdateSelectionTextFromContextMenuParams( |
| 844 const base::string16& selection_text, | 869 const base::string16& selection_text, |
| 845 size_t selection_text_offset, | 870 size_t selection_text_offset, |
| 846 const gfx::Range& selection_range, | 871 const gfx::Range& selection_range, |
| 847 const ContextMenuParams& params) { | 872 const ContextMenuParams& params) { |
| 848 base::string16 trimmed_selection_text; | 873 base::string16 trimmed_selection_text; |
| 849 if (!selection_text.empty() && !selection_range.is_empty()) { | 874 if (!selection_text.empty() && !selection_range.is_empty()) { |
| 850 const int start = selection_range.GetMin() - selection_text_offset; | 875 const int start = selection_range.GetMin() - selection_text_offset; |
| 851 const size_t length = selection_range.length(); | 876 const size_t length = selection_range.length(); |
| 852 if (start >= 0 && start + length <= selection_text.length()) { | 877 if (start >= 0 && start + length <= selection_text.length()) { |
| (...skipping 242 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1095 | 1120 |
| 1096 // |frame| is invalid after here. | 1121 // |frame| is invalid after here. |
| 1097 frame->close(); | 1122 frame->close(); |
| 1098 | 1123 |
| 1099 if (is_subframe) { | 1124 if (is_subframe) { |
| 1100 delete this; | 1125 delete this; |
| 1101 // Object is invalid after this point. | 1126 // Object is invalid after this point. |
| 1102 } | 1127 } |
| 1103 } | 1128 } |
| 1104 | 1129 |
| 1130 void RenderFrameImpl::frameFocused() { |
| 1131 Send(new FrameHostMsg_FrameFocused(routing_id_)); |
| 1132 } |
| 1133 |
| 1105 void RenderFrameImpl::willClose(blink::WebFrame* frame) { | 1134 void RenderFrameImpl::willClose(blink::WebFrame* frame) { |
| 1106 DCHECK(!frame_ || frame_ == frame); | 1135 DCHECK(!frame_ || frame_ == frame); |
| 1107 // Call back to RenderViewImpl for observers to be notified. | 1136 // Call back to RenderViewImpl for observers to be notified. |
| 1108 // TODO(nasko): Remove once we have RenderFrameObserver. | 1137 // TODO(nasko): Remove once we have RenderFrameObserver. |
| 1109 render_view_->willClose(frame); | 1138 render_view_->willClose(frame); |
| 1110 } | 1139 } |
| 1111 | 1140 |
| 1112 void RenderFrameImpl::didChangeName(blink::WebFrame* frame, | 1141 void RenderFrameImpl::didChangeName(blink::WebFrame* frame, |
| 1113 const blink::WebString& name) { | 1142 const blink::WebString& name) { |
| 1114 DCHECK(!frame_ || frame_ == frame); | 1143 DCHECK(!frame_ || frame_ == frame); |
| (...skipping 1241 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2356 | 2385 |
| 2357 render_view_->last_page_id_sent_to_browser_ = | 2386 render_view_->last_page_id_sent_to_browser_ = |
| 2358 std::max(render_view_->last_page_id_sent_to_browser_, | 2387 std::max(render_view_->last_page_id_sent_to_browser_, |
| 2359 render_view_->page_id_); | 2388 render_view_->page_id_); |
| 2360 | 2389 |
| 2361 // If we end up reusing this WebRequest (for example, due to a #ref click), | 2390 // If we end up reusing this WebRequest (for example, due to a #ref click), |
| 2362 // we don't want the transition type to persist. Just clear it. | 2391 // we don't want the transition type to persist. Just clear it. |
| 2363 navigation_state->set_transition_type(PAGE_TRANSITION_LINK); | 2392 navigation_state->set_transition_type(PAGE_TRANSITION_LINK); |
| 2364 } | 2393 } |
| 2365 | 2394 |
| 2395 WebElement RenderFrameImpl::GetFocusedElement() { |
| 2396 WebDocument doc = frame_->document(); |
| 2397 if (!doc.isNull()) |
| 2398 return doc.focusedElement(); |
| 2399 |
| 2400 return WebElement(); |
| 2401 } |
| 2402 |
| 2366 void RenderFrameImpl::didStartLoading() { | 2403 void RenderFrameImpl::didStartLoading() { |
| 2367 Send(new FrameHostMsg_DidStartLoading(routing_id_)); | 2404 Send(new FrameHostMsg_DidStartLoading(routing_id_)); |
| 2368 } | 2405 } |
| 2369 | 2406 |
| 2370 void RenderFrameImpl::didStopLoading() { | 2407 void RenderFrameImpl::didStopLoading() { |
| 2371 Send(new FrameHostMsg_DidStopLoading(routing_id_)); | 2408 Send(new FrameHostMsg_DidStopLoading(routing_id_)); |
| 2372 } | 2409 } |
| 2373 | 2410 |
| 2374 WebNavigationPolicy RenderFrameImpl::DecidePolicyForNavigation( | 2411 WebNavigationPolicy RenderFrameImpl::DecidePolicyForNavigation( |
| 2375 RenderFrame* render_frame, | 2412 RenderFrame* render_frame, |
| (...skipping 247 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2623 policy == blink::WebNavigationPolicyNewForegroundTab || | 2660 policy == blink::WebNavigationPolicyNewForegroundTab || |
| 2624 policy == blink::WebNavigationPolicyNewWindow || | 2661 policy == blink::WebNavigationPolicyNewWindow || |
| 2625 policy == blink::WebNavigationPolicyNewPopup) { | 2662 policy == blink::WebNavigationPolicyNewPopup) { |
| 2626 WebUserGestureIndicator::consumeUserGesture(); | 2663 WebUserGestureIndicator::consumeUserGesture(); |
| 2627 } | 2664 } |
| 2628 | 2665 |
| 2629 Send(new FrameHostMsg_OpenURL(routing_id_, params)); | 2666 Send(new FrameHostMsg_OpenURL(routing_id_, params)); |
| 2630 } | 2667 } |
| 2631 | 2668 |
| 2632 } // namespace content | 2669 } // namespace content |
| OLD | NEW |