Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(301)

Unified Diff: content/browser/frame_host/render_frame_host_manager.cc

Issue 505443002: Move DisownOpener to RenderFrameHost / RenderFrameProxyHost. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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 986327751e78c559f7efbac1b789a3ca7490bf5a..733ecdedea6664fbca34a8ca0fbbe85e3defc865 100644
--- a/content/browser/frame_host/render_frame_host_manager.cc
+++ b/content/browser/frame_host/render_frame_host_manager.cc
@@ -454,15 +454,24 @@ void RenderFrameHostManager::DidNavigateFrame(
}
}
-// TODO(creis): Take in RenderFrameHost instead, since frames can have openers.
-void RenderFrameHostManager::DidDisownOpener(RenderViewHost* render_view_host) {
- // Notify all swapped out hosts, including the pending RVH.
+void RenderFrameHostManager::DidDisownOpener(
+ RenderFrameHost* render_frame_host) {
+ // Notify all RenderFrameHosts but the one that notified us. This is necessary
+ // in case a process swap has occurred while the message was in flight.
for (RenderFrameProxyHostMap::iterator iter = proxy_hosts_.begin();
iter != proxy_hosts_.end();
++iter) {
DCHECK_NE(iter->second->GetSiteInstance(),
current_frame_host()->GetSiteInstance());
- iter->second->GetRenderViewHost()->DisownOpener();
+ iter->second->DisownOpener();
+ }
+
+ if (render_frame_host_.get() != render_frame_host)
+ render_frame_host_->DisownOpener();
+
+ if (pending_render_frame_host_ &&
+ pending_render_frame_host_.get() != render_frame_host) {
+ pending_render_frame_host_->DisownOpener();
}
}
@@ -1052,7 +1061,7 @@ int RenderFrameHostManager::CreateRenderFrame(SiteInstance* instance,
// Check if we've already created an RFH for this SiteInstance. If so, try
// to re-use the existing one, which has already been initialized. We'll
- // remove it from the list of swapped out hosts if it commits.
+ // remove it from the list of proxy hosts below if it will be active.
RenderFrameProxyHost* proxy = GetRenderFrameProxyHost(instance);
if (proxy) {

Powered by Google App Engine
This is Rietveld 408576698