Index: content/browser/frame_host/render_frame_host_manager.cc |
diff --git a/content/browser/frame_host/render_frame_host_manager.cc b/content/browser/frame_host/render_frame_host_manager.cc |
index 9d071d5a75c280e8adb29c3ea3ee96a0d4343445..bf29aa4aa6394beaab9008b6c32cd0314a910f59 100644 |
--- a/content/browser/frame_host/render_frame_host_manager.cc |
+++ b/content/browser/frame_host/render_frame_host_manager.cc |
@@ -704,14 +704,6 @@ void RenderFrameHostManager::DiscardUnusedFrame( |
void RenderFrameHostManager::MoveToPendingDeleteHosts( |
scoped_ptr<RenderFrameHostImpl> render_frame_host) { |
- // If this is the main frame going away and there are no more references to |
- // its RenderViewHost, mark it for deletion as well so that we don't try to |
- // reuse it. |
- if (render_frame_host->frame_tree_node()->IsMainFrame() && |
- render_frame_host->render_view_host()->ref_count() <= 1) { |
- render_frame_host->render_view_host()->set_pending_deletion(); |
- } |
- |
// |render_frame_host| will be deleted when its SwapOut ACK is received, or |
// when the timer times out, or when the RFHM itself is deleted (whichever |
// comes first). |
@@ -727,6 +719,25 @@ bool RenderFrameHostManager::IsPendingDeletion( |
return false; |
} |
+bool RenderFrameHostManager::IsViewPendingDeletion( |
+ RenderViewHostImpl* render_view_host) { |
+ // Only safe to call this on the main frame. |
+ CHECK(frame_tree_node_->IsMainFrame()); |
+ |
+ // The view is not pending deletion if more than one frame or proxy references |
+ // it. |
+ if (render_view_host->ref_count() > 1) |
+ return false; |
+ |
+ // If the only thing referencing it is a frame on the pending deletion list, |
+ // then this view will go away when the frame goes away. |
+ for (const auto& rfh : pending_delete_hosts_) { |
+ if (rfh->GetRenderViewHost() == render_view_host) |
+ return true; |
+ } |
+ return false; |
+} |
+ |
bool RenderFrameHostManager::DeleteFromPendingList( |
RenderFrameHostImpl* render_frame_host) { |
for (RFHPendingDeleteList::iterator iter = pending_delete_hosts_.begin(); |