| 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 150 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 161 RenderWidgetHostDelegate* widget_delegate, | 161 RenderWidgetHostDelegate* widget_delegate, |
| 162 int routing_id, | 162 int routing_id, |
| 163 int main_frame_routing_id, | 163 int main_frame_routing_id, |
| 164 bool swapped_out, | 164 bool swapped_out, |
| 165 SessionStorageNamespace* session_storage) | 165 SessionStorageNamespace* session_storage) |
| 166 : RenderWidgetHostImpl(widget_delegate, instance->GetProcess(), routing_id), | 166 : RenderWidgetHostImpl(widget_delegate, instance->GetProcess(), routing_id), |
| 167 delegate_(delegate), | 167 delegate_(delegate), |
| 168 instance_(static_cast<SiteInstanceImpl*>(instance)), | 168 instance_(static_cast<SiteInstanceImpl*>(instance)), |
| 169 waiting_for_drag_context_response_(false), | 169 waiting_for_drag_context_response_(false), |
| 170 enabled_bindings_(0), | 170 enabled_bindings_(0), |
| 171 pending_request_id_(-1), | |
| 172 navigations_suspended_(false), | 171 navigations_suspended_(false), |
| 173 suspended_nav_params_(NULL), | 172 suspended_nav_params_(NULL), |
| 174 has_accessed_initial_document_(false), | 173 has_accessed_initial_document_(false), |
| 175 is_swapped_out_(swapped_out), | 174 is_swapped_out_(swapped_out), |
| 176 is_subframe_(false), | 175 is_subframe_(false), |
| 177 main_frame_id_(-1), | 176 main_frame_id_(-1), |
| 178 run_modal_reply_msg_(NULL), | 177 run_modal_reply_msg_(NULL), |
| 179 run_modal_opener_id_(MSG_ROUTING_NONE), | 178 run_modal_opener_id_(MSG_ROUTING_NONE), |
| 180 is_waiting_for_beforeunload_ack_(false), | 179 is_waiting_for_beforeunload_ack_(false), |
| 181 is_waiting_for_unload_ack_(false), | 180 is_waiting_for_unload_ack_(false), |
| (...skipping 242 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 424 unload_ack_is_for_cross_site_transition_ = for_cross_site_transition; | 423 unload_ack_is_for_cross_site_transition_ = for_cross_site_transition; |
| 425 // Increment the in-flight event count, to ensure that input events won't | 424 // Increment the in-flight event count, to ensure that input events won't |
| 426 // cancel the timeout timer. | 425 // cancel the timeout timer. |
| 427 increment_in_flight_event_count(); | 426 increment_in_flight_event_count(); |
| 428 StartHangMonitorTimeout(TimeDelta::FromMilliseconds(kUnloadTimeoutMS)); | 427 StartHangMonitorTimeout(TimeDelta::FromMilliseconds(kUnloadTimeoutMS)); |
| 429 send_should_close_start_time_ = base::TimeTicks::Now(); | 428 send_should_close_start_time_ = base::TimeTicks::Now(); |
| 430 Send(new ViewMsg_ShouldClose(GetRoutingID())); | 429 Send(new ViewMsg_ShouldClose(GetRoutingID())); |
| 431 } | 430 } |
| 432 } | 431 } |
| 433 | 432 |
| 434 void RenderViewHostImpl::SwapOut(int new_render_process_host_id, | 433 void RenderViewHostImpl::SwapOut() { |
| 435 int new_request_id) { | |
| 436 // This will be set back to false in OnSwapOutACK, just before we replace | 434 // This will be set back to false in OnSwapOutACK, just before we replace |
| 437 // this RVH with the pending RVH. | 435 // this RVH with the pending RVH. |
| 438 is_waiting_for_unload_ack_ = true; | 436 is_waiting_for_unload_ack_ = true; |
| 439 // Start the hang monitor in case the renderer hangs in the unload handler. | 437 // Start the hang monitor in case the renderer hangs in the unload handler. |
| 440 // Increment the in-flight event count, to ensure that input events won't | 438 // Increment the in-flight event count, to ensure that input events won't |
| 441 // cancel the timeout timer. | 439 // cancel the timeout timer. |
| 442 increment_in_flight_event_count(); | 440 increment_in_flight_event_count(); |
| 443 StartHangMonitorTimeout(TimeDelta::FromMilliseconds(kUnloadTimeoutMS)); | 441 StartHangMonitorTimeout(TimeDelta::FromMilliseconds(kUnloadTimeoutMS)); |
| 444 | 442 |
| 445 ViewMsg_SwapOut_Params params; | |
| 446 params.closing_process_id = GetProcess()->GetID(); | |
| 447 params.closing_route_id = GetRoutingID(); | |
| 448 params.new_render_process_host_id = new_render_process_host_id; | |
| 449 params.new_request_id = new_request_id; | |
| 450 if (IsRenderViewLive()) { | 443 if (IsRenderViewLive()) { |
| 451 Send(new ViewMsg_SwapOut(GetRoutingID(), params)); | 444 Send(new ViewMsg_SwapOut(GetRoutingID())); |
| 452 } else { | 445 } else { |
| 453 // This RenderViewHost doesn't have a live renderer, so just skip the unload | 446 // This RenderViewHost doesn't have a live renderer, so just skip the unload |
| 454 // event. We must notify the ResourceDispatcherHost on the IO thread, | 447 // event. |
| 455 // which we will do through the RenderProcessHost's widget helper. | 448 OnSwappedOut(true); |
| 456 GetProcess()->SimulateSwapOutACK(params); | |
| 457 } | 449 } |
| 458 } | 450 } |
| 459 | 451 |
| 460 void RenderViewHostImpl::OnSwapOutACK(bool timed_out) { | 452 void RenderViewHostImpl::OnSwapOutACK() { |
| 453 OnSwappedOut(false); |
| 454 } |
| 455 |
| 456 void RenderViewHostImpl::OnSwappedOut(bool timed_out) { |
| 461 // Stop the hang monitor now that the unload handler has finished. | 457 // Stop the hang monitor now that the unload handler has finished. |
| 462 decrement_in_flight_event_count(); | 458 decrement_in_flight_event_count(); |
| 463 StopHangMonitorTimeout(); | 459 StopHangMonitorTimeout(); |
| 464 is_waiting_for_unload_ack_ = false; | 460 is_waiting_for_unload_ack_ = false; |
| 465 has_timed_out_on_unload_ = timed_out; | 461 has_timed_out_on_unload_ = timed_out; |
| 466 delegate_->SwappedOut(this); | 462 delegate_->SwappedOut(this); |
| 467 } | 463 } |
| 468 | 464 |
| 469 void RenderViewHostImpl::WasSwappedOut() { | 465 void RenderViewHostImpl::WasSwappedOut() { |
| 470 // Don't bother reporting hung state anymore. | 466 // Don't bother reporting hung state anymore. |
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 554 | 550 |
| 555 void RenderViewHostImpl::ClosePageIgnoringUnloadEvents() { | 551 void RenderViewHostImpl::ClosePageIgnoringUnloadEvents() { |
| 556 StopHangMonitorTimeout(); | 552 StopHangMonitorTimeout(); |
| 557 is_waiting_for_beforeunload_ack_ = false; | 553 is_waiting_for_beforeunload_ack_ = false; |
| 558 is_waiting_for_unload_ack_ = false; | 554 is_waiting_for_unload_ack_ = false; |
| 559 | 555 |
| 560 sudden_termination_allowed_ = true; | 556 sudden_termination_allowed_ = true; |
| 561 delegate_->Close(this); | 557 delegate_->Close(this); |
| 562 } | 558 } |
| 563 | 559 |
| 564 void RenderViewHostImpl::SetHasPendingCrossSiteRequest(bool has_pending_request, | 560 bool RenderViewHostImpl::HasPendingCrossSiteRequest() { |
| 565 int request_id) { | 561 return CrossSiteRequestManager::GetInstance()->HasPendingCrossSiteRequest( |
| 562 GetProcess()->GetID(), GetRoutingID()); |
| 563 } |
| 564 |
| 565 void RenderViewHostImpl::SetHasPendingCrossSiteRequest( |
| 566 bool has_pending_request) { |
| 566 CrossSiteRequestManager::GetInstance()->SetHasPendingCrossSiteRequest( | 567 CrossSiteRequestManager::GetInstance()->SetHasPendingCrossSiteRequest( |
| 567 GetProcess()->GetID(), GetRoutingID(), has_pending_request); | 568 GetProcess()->GetID(), GetRoutingID(), has_pending_request); |
| 568 pending_request_id_ = request_id; | |
| 569 } | |
| 570 | |
| 571 int RenderViewHostImpl::GetPendingRequestId() { | |
| 572 return pending_request_id_; | |
| 573 } | 569 } |
| 574 | 570 |
| 575 #if defined(OS_ANDROID) | 571 #if defined(OS_ANDROID) |
| 576 void RenderViewHostImpl::ActivateNearestFindResult(int request_id, | 572 void RenderViewHostImpl::ActivateNearestFindResult(int request_id, |
| 577 float x, | 573 float x, |
| 578 float y) { | 574 float y) { |
| 579 Send(new InputMsg_ActivateNearestFindResult(GetRoutingID(), | 575 Send(new InputMsg_ActivateNearestFindResult(GetRoutingID(), |
| 580 request_id, x, y)); | 576 request_id, x, y)); |
| 581 } | 577 } |
| 582 | 578 |
| (...skipping 396 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 979 IPC_MESSAGE_HANDLER_DELAY_REPLY(ViewHostMsg_RunBeforeUnloadConfirm, | 975 IPC_MESSAGE_HANDLER_DELAY_REPLY(ViewHostMsg_RunBeforeUnloadConfirm, |
| 980 OnRunBeforeUnloadConfirm) | 976 OnRunBeforeUnloadConfirm) |
| 981 IPC_MESSAGE_HANDLER(DragHostMsg_StartDragging, OnStartDragging) | 977 IPC_MESSAGE_HANDLER(DragHostMsg_StartDragging, OnStartDragging) |
| 982 IPC_MESSAGE_HANDLER(DragHostMsg_UpdateDragCursor, OnUpdateDragCursor) | 978 IPC_MESSAGE_HANDLER(DragHostMsg_UpdateDragCursor, OnUpdateDragCursor) |
| 983 IPC_MESSAGE_HANDLER(DragHostMsg_TargetDrop_ACK, OnTargetDropACK) | 979 IPC_MESSAGE_HANDLER(DragHostMsg_TargetDrop_ACK, OnTargetDropACK) |
| 984 IPC_MESSAGE_HANDLER(ViewHostMsg_TakeFocus, OnTakeFocus) | 980 IPC_MESSAGE_HANDLER(ViewHostMsg_TakeFocus, OnTakeFocus) |
| 985 IPC_MESSAGE_HANDLER(ViewHostMsg_FocusedNodeChanged, OnFocusedNodeChanged) | 981 IPC_MESSAGE_HANDLER(ViewHostMsg_FocusedNodeChanged, OnFocusedNodeChanged) |
| 986 IPC_MESSAGE_HANDLER(ViewHostMsg_AddMessageToConsole, OnAddMessageToConsole) | 982 IPC_MESSAGE_HANDLER(ViewHostMsg_AddMessageToConsole, OnAddMessageToConsole) |
| 987 IPC_MESSAGE_HANDLER(ViewHostMsg_ShouldClose_ACK, OnShouldCloseACK) | 983 IPC_MESSAGE_HANDLER(ViewHostMsg_ShouldClose_ACK, OnShouldCloseACK) |
| 988 IPC_MESSAGE_HANDLER(ViewHostMsg_ClosePage_ACK, OnClosePageACK) | 984 IPC_MESSAGE_HANDLER(ViewHostMsg_ClosePage_ACK, OnClosePageACK) |
| 985 IPC_MESSAGE_HANDLER(ViewHostMsg_SwapOut_ACK, OnSwapOutACK) |
| 989 IPC_MESSAGE_HANDLER(ViewHostMsg_SelectionChanged, OnSelectionChanged) | 986 IPC_MESSAGE_HANDLER(ViewHostMsg_SelectionChanged, OnSelectionChanged) |
| 990 IPC_MESSAGE_HANDLER(ViewHostMsg_SelectionBoundsChanged, | 987 IPC_MESSAGE_HANDLER(ViewHostMsg_SelectionBoundsChanged, |
| 991 OnSelectionBoundsChanged) | 988 OnSelectionBoundsChanged) |
| 992 IPC_MESSAGE_HANDLER(ViewHostMsg_ScriptEvalResponse, OnScriptEvalResponse) | 989 IPC_MESSAGE_HANDLER(ViewHostMsg_ScriptEvalResponse, OnScriptEvalResponse) |
| 993 IPC_MESSAGE_HANDLER(ViewHostMsg_DidZoomURL, OnDidZoomURL) | 990 IPC_MESSAGE_HANDLER(ViewHostMsg_DidZoomURL, OnDidZoomURL) |
| 994 IPC_MESSAGE_HANDLER(ViewHostMsg_MediaNotification, OnMediaNotification) | 991 IPC_MESSAGE_HANDLER(ViewHostMsg_MediaNotification, OnMediaNotification) |
| 995 IPC_MESSAGE_HANDLER(ViewHostMsg_GetWindowSnapshot, OnGetWindowSnapshot) | 992 IPC_MESSAGE_HANDLER(ViewHostMsg_GetWindowSnapshot, OnGetWindowSnapshot) |
| 996 IPC_MESSAGE_HANDLER(DesktopNotificationHostMsg_RequestPermission, | 993 IPC_MESSAGE_HANDLER(DesktopNotificationHostMsg_RequestPermission, |
| 997 OnRequestDesktopNotificationPermission) | 994 OnRequestDesktopNotificationPermission) |
| 998 IPC_MESSAGE_HANDLER(DesktopNotificationHostMsg_Show, | 995 IPC_MESSAGE_HANDLER(DesktopNotificationHostMsg_Show, |
| (...skipping 1105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2104 const std::vector<base::FilePath>& file_paths = state.GetReferencedFiles(); | 2101 const std::vector<base::FilePath>& file_paths = state.GetReferencedFiles(); |
| 2105 for (std::vector<base::FilePath>::const_iterator file = file_paths.begin(); | 2102 for (std::vector<base::FilePath>::const_iterator file = file_paths.begin(); |
| 2106 file != file_paths.end(); ++file) { | 2103 file != file_paths.end(); ++file) { |
| 2107 if (!policy->CanReadFile(GetProcess()->GetID(), *file)) | 2104 if (!policy->CanReadFile(GetProcess()->GetID(), *file)) |
| 2108 return false; | 2105 return false; |
| 2109 } | 2106 } |
| 2110 return true; | 2107 return true; |
| 2111 } | 2108 } |
| 2112 | 2109 |
| 2113 } // namespace content | 2110 } // namespace content |
| OLD | NEW |