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