| OLD | NEW |
| 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/browser/renderer_host/render_view_host_impl.h" | 5 #include "content/browser/renderer_host/render_view_host_impl.h" |
| 6 | 6 |
| 7 #include <set> | 7 #include <set> |
| 8 #include <string> | 8 #include <string> |
| 9 #include <utility> | 9 #include <utility> |
| 10 #include <vector> | 10 #include <vector> |
| (...skipping 192 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 203 instance_(static_cast<SiteInstanceImpl*>(instance)), | 203 instance_(static_cast<SiteInstanceImpl*>(instance)), |
| 204 waiting_for_drag_context_response_(false), | 204 waiting_for_drag_context_response_(false), |
| 205 enabled_bindings_(0), | 205 enabled_bindings_(0), |
| 206 navigations_suspended_(false), | 206 navigations_suspended_(false), |
| 207 has_accessed_initial_document_(false), | 207 has_accessed_initial_document_(false), |
| 208 main_frame_routing_id_(main_frame_routing_id), | 208 main_frame_routing_id_(main_frame_routing_id), |
| 209 run_modal_reply_msg_(NULL), | 209 run_modal_reply_msg_(NULL), |
| 210 run_modal_opener_id_(MSG_ROUTING_NONE), | 210 run_modal_opener_id_(MSG_ROUTING_NONE), |
| 211 is_waiting_for_beforeunload_ack_(false), | 211 is_waiting_for_beforeunload_ack_(false), |
| 212 unload_ack_is_for_cross_site_transition_(false), | 212 unload_ack_is_for_cross_site_transition_(false), |
| 213 are_javascript_messages_suppressed_(false), | |
| 214 sudden_termination_allowed_(false), | 213 sudden_termination_allowed_(false), |
| 215 render_view_termination_status_(base::TERMINATION_STATUS_STILL_RUNNING), | 214 render_view_termination_status_(base::TERMINATION_STATUS_STILL_RUNNING), |
| 216 virtual_keyboard_requested_(false), | 215 virtual_keyboard_requested_(false), |
| 217 weak_factory_(this) { | 216 weak_factory_(this) { |
| 218 DCHECK(instance_.get()); | 217 DCHECK(instance_.get()); |
| 219 CHECK(delegate_); // http://crbug.com/82827 | 218 CHECK(delegate_); // http://crbug.com/82827 |
| 220 | 219 |
| 221 GetProcess()->EnableSendQueue(); | 220 GetProcess()->EnableSendQueue(); |
| 222 | 221 |
| 223 if (swapped_out) { | 222 if (swapped_out) { |
| (...skipping 619 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 843 void RenderViewHostImpl::DesktopNotificationPostClose(int notification_id, | 842 void RenderViewHostImpl::DesktopNotificationPostClose(int notification_id, |
| 844 bool by_user) { | 843 bool by_user) { |
| 845 Send(new DesktopNotificationMsg_PostClose( | 844 Send(new DesktopNotificationMsg_PostClose( |
| 846 GetRoutingID(), notification_id, by_user)); | 845 GetRoutingID(), notification_id, by_user)); |
| 847 } | 846 } |
| 848 | 847 |
| 849 void RenderViewHostImpl::DesktopNotificationPostClick(int notification_id) { | 848 void RenderViewHostImpl::DesktopNotificationPostClick(int notification_id) { |
| 850 Send(new DesktopNotificationMsg_PostClick(GetRoutingID(), notification_id)); | 849 Send(new DesktopNotificationMsg_PostClick(GetRoutingID(), notification_id)); |
| 851 } | 850 } |
| 852 | 851 |
| 853 void RenderViewHostImpl::JavaScriptDialogClosed( | |
| 854 IPC::Message* reply_msg, | |
| 855 bool success, | |
| 856 const base::string16& user_input) { | |
| 857 GetProcess()->SetIgnoreInputEvents(false); | |
| 858 bool is_waiting = is_waiting_for_beforeunload_ack_ || IsWaitingForUnloadACK(); | |
| 859 | |
| 860 // If we are executing as part of (before)unload event handling, we don't | |
| 861 // want to use the regular hung_renderer_delay_ms_ if the user has agreed to | |
| 862 // leave the current page. In this case, use the regular timeout value used | |
| 863 // during the (before)unload handling. | |
| 864 if (is_waiting) { | |
| 865 StartHangMonitorTimeout(TimeDelta::FromMilliseconds( | |
| 866 success ? kUnloadTimeoutMS : hung_renderer_delay_ms_)); | |
| 867 } | |
| 868 | |
| 869 ViewHostMsg_RunJavaScriptMessage::WriteReplyParams(reply_msg, | |
| 870 success, user_input); | |
| 871 Send(reply_msg); | |
| 872 | |
| 873 // If we are waiting for an unload or beforeunload ack and the user has | |
| 874 // suppressed messages, kill the tab immediately; a page that's spamming | |
| 875 // alerts in onbeforeunload is presumably malicious, so there's no point in | |
| 876 // continuing to run its script and dragging out the process. | |
| 877 // This must be done after sending the reply since RenderView can't close | |
| 878 // correctly while waiting for a response. | |
| 879 if (is_waiting && are_javascript_messages_suppressed_) | |
| 880 delegate_->RendererUnresponsive( | |
| 881 this, is_waiting_for_beforeunload_ack_, IsWaitingForUnloadACK()); | |
| 882 } | |
| 883 | |
| 884 void RenderViewHostImpl::DragSourceEndedAt( | 852 void RenderViewHostImpl::DragSourceEndedAt( |
| 885 int client_x, int client_y, int screen_x, int screen_y, | 853 int client_x, int client_y, int screen_x, int screen_y, |
| 886 WebDragOperation operation) { | 854 WebDragOperation operation) { |
| 887 Send(new DragMsg_SourceEnded(GetRoutingID(), | 855 Send(new DragMsg_SourceEnded(GetRoutingID(), |
| 888 gfx::Point(client_x, client_y), | 856 gfx::Point(client_x, client_y), |
| 889 gfx::Point(screen_x, screen_y), | 857 gfx::Point(screen_x, screen_y), |
| 890 operation)); | 858 operation)); |
| 891 } | 859 } |
| 892 | 860 |
| 893 void RenderViewHostImpl::DragSourceSystemDragEnded() { | 861 void RenderViewHostImpl::DragSourceSystemDragEnded() { |
| (...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1074 OnDidChangeScrollOffset) | 1042 OnDidChangeScrollOffset) |
| 1075 IPC_MESSAGE_HANDLER(ViewHostMsg_DidChangeScrollbarsForMainFrame, | 1043 IPC_MESSAGE_HANDLER(ViewHostMsg_DidChangeScrollbarsForMainFrame, |
| 1076 OnDidChangeScrollbarsForMainFrame) | 1044 OnDidChangeScrollbarsForMainFrame) |
| 1077 IPC_MESSAGE_HANDLER(ViewHostMsg_DidChangeScrollOffsetPinningForMainFrame, | 1045 IPC_MESSAGE_HANDLER(ViewHostMsg_DidChangeScrollOffsetPinningForMainFrame, |
| 1078 OnDidChangeScrollOffsetPinningForMainFrame) | 1046 OnDidChangeScrollOffsetPinningForMainFrame) |
| 1079 IPC_MESSAGE_HANDLER(ViewHostMsg_DidChangeNumWheelEvents, | 1047 IPC_MESSAGE_HANDLER(ViewHostMsg_DidChangeNumWheelEvents, |
| 1080 OnDidChangeNumWheelEvents) | 1048 OnDidChangeNumWheelEvents) |
| 1081 IPC_MESSAGE_HANDLER(ViewHostMsg_RouteCloseEvent, | 1049 IPC_MESSAGE_HANDLER(ViewHostMsg_RouteCloseEvent, |
| 1082 OnRouteCloseEvent) | 1050 OnRouteCloseEvent) |
| 1083 IPC_MESSAGE_HANDLER(ViewHostMsg_RouteMessageEvent, OnRouteMessageEvent) | 1051 IPC_MESSAGE_HANDLER(ViewHostMsg_RouteMessageEvent, OnRouteMessageEvent) |
| 1084 IPC_MESSAGE_HANDLER_DELAY_REPLY(ViewHostMsg_RunJavaScriptMessage, | |
| 1085 OnRunJavaScriptMessage) | |
| 1086 IPC_MESSAGE_HANDLER_DELAY_REPLY(ViewHostMsg_RunBeforeUnloadConfirm, | |
| 1087 OnRunBeforeUnloadConfirm) | |
| 1088 IPC_MESSAGE_HANDLER(DragHostMsg_StartDragging, OnStartDragging) | 1052 IPC_MESSAGE_HANDLER(DragHostMsg_StartDragging, OnStartDragging) |
| 1089 IPC_MESSAGE_HANDLER(DragHostMsg_UpdateDragCursor, OnUpdateDragCursor) | 1053 IPC_MESSAGE_HANDLER(DragHostMsg_UpdateDragCursor, OnUpdateDragCursor) |
| 1090 IPC_MESSAGE_HANDLER(DragHostMsg_TargetDrop_ACK, OnTargetDropACK) | 1054 IPC_MESSAGE_HANDLER(DragHostMsg_TargetDrop_ACK, OnTargetDropACK) |
| 1091 IPC_MESSAGE_HANDLER(ViewHostMsg_TakeFocus, OnTakeFocus) | 1055 IPC_MESSAGE_HANDLER(ViewHostMsg_TakeFocus, OnTakeFocus) |
| 1092 IPC_MESSAGE_HANDLER(ViewHostMsg_FocusedNodeChanged, OnFocusedNodeChanged) | 1056 IPC_MESSAGE_HANDLER(ViewHostMsg_FocusedNodeChanged, OnFocusedNodeChanged) |
| 1093 IPC_MESSAGE_HANDLER(ViewHostMsg_ClosePage_ACK, OnClosePageACK) | 1057 IPC_MESSAGE_HANDLER(ViewHostMsg_ClosePage_ACK, OnClosePageACK) |
| 1094 #if defined(OS_ANDROID) | 1058 #if defined(OS_ANDROID) |
| 1095 IPC_MESSAGE_HANDLER(ViewHostMsg_SelectionRootBoundsChanged, | 1059 IPC_MESSAGE_HANDLER(ViewHostMsg_SelectionRootBoundsChanged, |
| 1096 OnSelectionRootBoundsChanged) | 1060 OnSelectionRootBoundsChanged) |
| 1097 #endif | 1061 #endif |
| (...skipping 272 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1370 // Have the delegate route this to the active RenderViewHost. | 1334 // Have the delegate route this to the active RenderViewHost. |
| 1371 delegate_->RouteCloseEvent(this); | 1335 delegate_->RouteCloseEvent(this); |
| 1372 } | 1336 } |
| 1373 | 1337 |
| 1374 void RenderViewHostImpl::OnRouteMessageEvent( | 1338 void RenderViewHostImpl::OnRouteMessageEvent( |
| 1375 const ViewMsg_PostMessage_Params& params) { | 1339 const ViewMsg_PostMessage_Params& params) { |
| 1376 // Give to the delegate to route to the active RenderViewHost. | 1340 // Give to the delegate to route to the active RenderViewHost. |
| 1377 delegate_->RouteMessageEvent(this, params); | 1341 delegate_->RouteMessageEvent(this, params); |
| 1378 } | 1342 } |
| 1379 | 1343 |
| 1380 void RenderViewHostImpl::OnRunJavaScriptMessage( | |
| 1381 const base::string16& message, | |
| 1382 const base::string16& default_prompt, | |
| 1383 const GURL& frame_url, | |
| 1384 JavaScriptMessageType type, | |
| 1385 IPC::Message* reply_msg) { | |
| 1386 // While a JS message dialog is showing, tabs in the same process shouldn't | |
| 1387 // process input events. | |
| 1388 GetProcess()->SetIgnoreInputEvents(true); | |
| 1389 StopHangMonitorTimeout(); | |
| 1390 delegate_->RunJavaScriptMessage(this, message, default_prompt, frame_url, | |
| 1391 type, reply_msg, | |
| 1392 &are_javascript_messages_suppressed_); | |
| 1393 } | |
| 1394 | |
| 1395 void RenderViewHostImpl::OnRunBeforeUnloadConfirm(const GURL& frame_url, | |
| 1396 const base::string16& message, | |
| 1397 bool is_reload, | |
| 1398 IPC::Message* reply_msg) { | |
| 1399 // While a JS before unload dialog is showing, tabs in the same process | |
| 1400 // shouldn't process input events. | |
| 1401 GetProcess()->SetIgnoreInputEvents(true); | |
| 1402 StopHangMonitorTimeout(); | |
| 1403 delegate_->RunBeforeUnloadConfirm(this, message, is_reload, reply_msg); | |
| 1404 } | |
| 1405 | |
| 1406 void RenderViewHostImpl::OnStartDragging( | 1344 void RenderViewHostImpl::OnStartDragging( |
| 1407 const DropData& drop_data, | 1345 const DropData& drop_data, |
| 1408 WebDragOperationsMask drag_operations_mask, | 1346 WebDragOperationsMask drag_operations_mask, |
| 1409 const SkBitmap& bitmap, | 1347 const SkBitmap& bitmap, |
| 1410 const gfx::Vector2d& bitmap_offset_in_dip, | 1348 const gfx::Vector2d& bitmap_offset_in_dip, |
| 1411 const DragEventSourceInfo& event_info) { | 1349 const DragEventSourceInfo& event_info) { |
| 1412 RenderViewHostDelegateView* view = delegate_->GetDelegateView(); | 1350 RenderViewHostDelegateView* view = delegate_->GetDelegateView(); |
| 1413 if (!view) | 1351 if (!view) |
| 1414 return; | 1352 return; |
| 1415 | 1353 |
| (...skipping 434 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1850 return true; | 1788 return true; |
| 1851 } | 1789 } |
| 1852 | 1790 |
| 1853 void RenderViewHostImpl::AttachToFrameTree() { | 1791 void RenderViewHostImpl::AttachToFrameTree() { |
| 1854 FrameTree* frame_tree = delegate_->GetFrameTree(); | 1792 FrameTree* frame_tree = delegate_->GetFrameTree(); |
| 1855 | 1793 |
| 1856 frame_tree->ResetForMainFrameSwap(); | 1794 frame_tree->ResetForMainFrameSwap(); |
| 1857 } | 1795 } |
| 1858 | 1796 |
| 1859 } // namespace content | 1797 } // namespace content |
| OLD | NEW |