| Index: content/browser/frame_host/render_frame_host_impl.cc
|
| diff --git a/content/browser/frame_host/render_frame_host_impl.cc b/content/browser/frame_host/render_frame_host_impl.cc
|
| index 0aa458ba934e4d5096c913a0b0da40af03042d9a..6108d5a32bef2093a6a2fffa49d22f5c3e19db85 100644
|
| --- a/content/browser/frame_host/render_frame_host_impl.cc
|
| +++ b/content/browser/frame_host/render_frame_host_impl.cc
|
| @@ -14,6 +14,7 @@
|
| #include "content/browser/frame_host/frame_tree_node.h"
|
| #include "content/browser/frame_host/navigator.h"
|
| #include "content/browser/frame_host/render_frame_host_delegate.h"
|
| +#include "content/browser/renderer_host/input/timeout_monitor.h"
|
| #include "content/browser/renderer_host/render_view_host_impl.h"
|
| #include "content/common/frame_messages.h"
|
| #include "content/common/input_messages.h"
|
| @@ -452,13 +453,24 @@ void RenderFrameHostImpl::OnCrossSiteResponse(
|
| }
|
|
|
| void RenderFrameHostImpl::SwapOut() {
|
| - if (render_view_host_->IsRenderViewLive()) {
|
| - Send(new FrameMsg_SwapOut(routing_id_));
|
| - } else {
|
| - // Our RenderViewHost doesn't have a live renderer, so just skip the unload
|
| - // event.
|
| - OnSwappedOut(true);
|
| + // TODO(creis): Move swapped out state to RFH. Until then, only update it
|
| + // when swapping out the main frame.
|
| + if (!GetParent()) {
|
| + render_view_host_->SetState(
|
| + RenderViewHostImpl::STATE_WAITING_FOR_UNLOAD_ACK);
|
| + render_view_host_->unload_event_monitor_timeout_->Start(
|
| + base::TimeDelta::FromMilliseconds(
|
| + RenderViewHostImpl::kUnloadTimeoutMS));
|
| }
|
| +
|
| + if (render_view_host_->IsRenderViewLive())
|
| + Send(new FrameMsg_SwapOut(routing_id_));
|
| +
|
| + if (!GetParent())
|
| + delegate_->SwappedOut(this);
|
| +
|
| + // Allow the navigation to proceed.
|
| + frame_tree_node_->render_manager()->SwappedOut(this);
|
| }
|
|
|
| void RenderFrameHostImpl::OnDidStartLoading() {
|
| @@ -523,7 +535,12 @@ void RenderFrameHostImpl::OnSwapOutACK() {
|
| }
|
|
|
| void RenderFrameHostImpl::OnSwappedOut(bool timed_out) {
|
| - frame_tree_node_->render_manager()->SwappedOutFrame(this);
|
| + // For now, we only need to update the RVH state machine for top-level swaps.
|
| + // Subframe swaps (in --site-per-process) can just continue via RFHM.
|
| + if (!GetParent())
|
| + render_view_host_->OnSwappedOut(timed_out);
|
| + else
|
| + frame_tree_node_->render_manager()->SwappedOut(this);
|
| }
|
|
|
| void RenderFrameHostImpl::OnContextMenu(const ContextMenuParams& params) {
|
|
|