| Index: content/renderer/render_frame_impl.cc
|
| diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc
|
| index 5fadcf6837e27d97df027ba2cdd3a5ca5f575121..2a3286255ecf8695f69373e22f444a64c98ea72a 100644
|
| --- a/content/renderer/render_frame_impl.cc
|
| +++ b/content/renderer/render_frame_impl.cc
|
| @@ -1541,12 +1541,11 @@ void RenderFrameImpl::OnSwapOut(
|
| else
|
| render_view_->SendUpdateState();
|
|
|
| - // If we need a proxy to replace this, create it now so its routing id is
|
| - // registered for receiving IPC messages.
|
| - if (proxy_routing_id != MSG_ROUTING_NONE) {
|
| - proxy = RenderFrameProxy::CreateProxyToReplaceFrame(
|
| - this, proxy_routing_id, replicated_frame_state.scope);
|
| - }
|
| + // There should always be a proxy to replace this RenderFrame. Create it now
|
| + // so its routing id is registered for receiving IPC messages.
|
| + CHECK_NE(proxy_routing_id, MSG_ROUTING_NONE);
|
| + proxy = RenderFrameProxy::CreateProxyToReplaceFrame(
|
| + this, proxy_routing_id, replicated_frame_state.scope);
|
|
|
| // Synchronously run the unload handler before sending the ACK.
|
| // TODO(creis): Call dispatchUnloadEvent unconditionally here to support
|
| @@ -1561,12 +1560,11 @@ void RenderFrameImpl::OnSwapOut(
|
| // Set the proxy here, since OnStop() below could cause an onload event
|
| // handler to execute, which could trigger code such as
|
| // willCheckAndDispatchMessageEvent() that needs the proxy.
|
| - if (proxy)
|
| - set_render_frame_proxy(proxy);
|
| + set_render_frame_proxy(proxy);
|
|
|
| // Transfer settings such as initial drawing parameters to the remote frame,
|
| // if one is created, that will replace this frame.
|
| - if (!is_main_frame_ && proxy)
|
| + if (!is_main_frame_)
|
| proxy->web_frame()->initializeFromFrame(frame_);
|
|
|
| // Let WebKit know that this view is hidden so it can drop resources and
|
| @@ -1584,37 +1582,36 @@ void RenderFrameImpl::OnSwapOut(
|
| int routing_id = GetRoutingID();
|
|
|
| // Now that all of the cleanup is complete and the browser side is notified,
|
| - // start using the RenderFrameProxy, if one is created.
|
| - if (proxy) {
|
| - // The swap call deletes this RenderFrame via frameDetached. Do not access
|
| - // any members after this call.
|
| - // TODO(creis): WebFrame::swap() can return false. Most of those cases
|
| - // should be due to the frame being detached during unload (in which case
|
| - // the necessary cleanup has happened anyway), but it might be possible for
|
| - // it to return false without detaching. Catch those cases below to track
|
| - // down https://crbug.com/575245.
|
| - frame_->swap(proxy->web_frame());
|
| -
|
| - // For main frames, the swap should have cleared the RenderView's pointer to
|
| - // this frame.
|
| - if (is_main_frame) {
|
| - base::debug::SetCrashKeyValue("swapout_frame_id",
|
| - base::IntToString(routing_id));
|
| - base::debug::SetCrashKeyValue("swapout_proxy_id",
|
| - base::IntToString(proxy->routing_id()));
|
| - base::debug::SetCrashKeyValue(
|
| - "swapout_view_id", base::IntToString(render_view->GetRoutingID()));
|
| - CHECK(!render_view->main_render_frame_);
|
| - }
|
| -
|
| - if (is_loading)
|
| - proxy->OnDidStartLoading();
|
| - }
|
| + // start using the RenderFrameProxy.
|
| + //
|
| + // The swap call deletes this RenderFrame via frameDetached. Do not access
|
| + // any members after this call.
|
| + //
|
| + // TODO(creis): WebFrame::swap() can return false. Most of those cases
|
| + // should be due to the frame being detached during unload (in which case
|
| + // the necessary cleanup has happened anyway), but it might be possible for
|
| + // it to return false without detaching. Catch those cases below to track
|
| + // down https://crbug.com/575245.
|
| + frame_->swap(proxy->web_frame());
|
| +
|
| + // For main frames, the swap should have cleared the RenderView's pointer to
|
| + // this frame.
|
| + if (is_main_frame) {
|
| + base::debug::SetCrashKeyValue("swapout_frame_id",
|
| + base::IntToString(routing_id));
|
| + base::debug::SetCrashKeyValue("swapout_proxy_id",
|
| + base::IntToString(proxy->routing_id()));
|
| + base::debug::SetCrashKeyValue(
|
| + "swapout_view_id", base::IntToString(render_view->GetRoutingID()));
|
| + CHECK(!render_view->main_render_frame_);
|
| + }
|
| +
|
| + if (is_loading)
|
| + proxy->OnDidStartLoading();
|
|
|
| // Initialize the WebRemoteFrame with the replication state passed by the
|
| // process that is now rendering the frame.
|
| - if (proxy)
|
| - proxy->SetReplicatedState(replicated_frame_state);
|
| + proxy->SetReplicatedState(replicated_frame_state);
|
|
|
| // Safe to exit if no one else is using the process.
|
| // TODO(nasko): Remove the dependency on RenderViewImpl here and ref count
|
|
|