Chromium Code Reviews| Index: content/browser/renderer_host/render_view_host_impl.cc |
| diff --git a/content/browser/renderer_host/render_view_host_impl.cc b/content/browser/renderer_host/render_view_host_impl.cc |
| index 4e81849d222a27d2e458cb6ff239ea2f4f4749de..fc7ee9ca8fa3163f5c91d2bf16ab071daa0eff90 100644 |
| --- a/content/browser/renderer_host/render_view_host_impl.cc |
| +++ b/content/browser/renderer_host/render_view_host_impl.cc |
| @@ -278,6 +278,7 @@ bool RenderViewHostImpl::CreateRenderView( |
| int opener_route_id, |
| int proxy_route_id, |
| int32 max_page_id, |
| + const FrameReplicationState& replicated_frame_state, |
| bool window_was_created_with_opener) { |
| TRACE_EVENT0("renderer_host,navigation", |
| "RenderViewHostImpl::CreateRenderView"); |
| @@ -319,6 +320,7 @@ bool RenderViewHostImpl::CreateRenderView( |
| // Ensure the RenderView sets its opener correctly. |
| params.opener_route_id = opener_route_id; |
| params.swapped_out = !is_active_; |
| + params.replicated_frame_state = replicated_frame_state; |
| params.proxy_routing_id = proxy_route_id; |
| params.hidden = is_hidden(); |
| params.never_visible = delegate_->IsNeverVisible(); |
| @@ -328,11 +330,6 @@ bool RenderViewHostImpl::CreateRenderView( |
| params.min_size = min_size_for_auto_resize(); |
| params.max_size = max_size_for_auto_resize(); |
| GetResizeParams(¶ms.initial_size); |
| - if (!is_active_) { |
| - params.replicated_frame_state = |
| - static_cast<RenderFrameHostImpl*>(GetMainFrame())->frame_tree_node() |
| - ->current_replication_state(); |
| - } |
| if (!Send(new ViewMsg_New(params))) |
| return false; |
| @@ -353,10 +350,12 @@ bool RenderViewHostImpl::CreateRenderView( |
| // Let our delegate know that we created a RenderView. |
| delegate_->RenderViewCreated(this); |
| - // Since this method creates the main RenderFrame in the renderer process, |
| + // Since this method can create the main RenderFrame in the renderer process, |
| // set the proper state on its corresponding RenderFrameHost. |
| - RenderFrameHostImpl::FromID(GetProcess()->GetID(), main_frame_routing_id_) |
| - ->SetRenderFrameCreated(true); |
| + if (main_frame_routing_id_ != MSG_ROUTING_NONE) { |
| + RenderFrameHostImpl::FromID(GetProcess()->GetID(), main_frame_routing_id_) |
| + ->SetRenderFrameCreated(true); |
| + } |
| return true; |
| } |
| @@ -879,7 +878,7 @@ bool RenderViewHostImpl::OnMessageReceived(const IPC::Message& msg) { |
| // Filter out most IPC messages if this renderer is swapped out. |
| // We still want to handle certain ACKs to keep our state consistent. |
| - if (is_swapped_out_) { |
| + if (is_swapped_out_ || main_frame_routing_id_ == MSG_ROUTING_NONE) { |
|
Charlie Reis
2015/06/04 22:27:31
This means subframes can't send (most) IPCs throug
nasko
2015/06/04 23:38:36
Ah, good catch! I was trying to be more defensive
Charlie Reis
2015/06/05 18:28:45
Acknowledged.
|
| if (!SwappedOutMessages::CanHandleWhileSwappedOut(msg)) { |
| // If this is a synchronous message and we decided not to handle it, |
| // we must send an error reply, or else the renderer will be stuck |