Index: content/renderer/render_frame_proxy.cc |
diff --git a/content/renderer/render_frame_proxy.cc b/content/renderer/render_frame_proxy.cc |
index 3fc8a180007207fa345bd5c06ca833c3606dd7ed..6b0020a27d80aab383a7351c161c540f590ca33e 100644 |
--- a/content/renderer/render_frame_proxy.cc |
+++ b/content/renderer/render_frame_proxy.cc |
@@ -111,6 +111,14 @@ RenderFrameProxy* RenderFrameProxy::CreateFrameProxy( |
proxy.get(), opener); |
render_view->webview()->setMainFrame(web_frame); |
render_widget = render_view->GetWidget(); |
+ |
+ // If the RenderView is reused by this proxy after having been used for a |
+ // pending RenderFrame that was discarded, its swapped out state needs to |
+ // be updated, as the OnSwapOut flow which normally does this won't happen |
+ // in that case. See https://crbug.com/653746 and |
+ // https://crbug.com/651980. |
+ if (!render_view->is_swapped_out()) |
+ render_view->SetSwappedOut(true); |
} else { |
// Create a frame under an existing parent. The parent is always expected |
// to be a RenderFrameProxy, because navigations initiated by local frames |