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 f9e2bf976fcbe85f71d53b78f7fbd8fe5bcf37f9..b9328a40b2539c35bda23a47ff0299f2e67c4949 100644 |
--- a/content/browser/frame_host/render_frame_host_manager.cc |
+++ b/content/browser/frame_host/render_frame_host_manager.cc |
@@ -109,6 +109,14 @@ void RenderFrameHostManager::Init(BrowserContext* browser_context, |
SetRenderFrameHost(CreateRenderFrameHost(site_instance, view_routing_id, |
frame_routing_id, flags)); |
+ // Notify the delegate of the creation of the current RenderFrameHost. |
+ // Do this only for subframes, as the main frame case is taken care of by |
+ // WebContentsImpl::Init. |
+ if (!frame_tree_node_->IsMainFrame()) { |
+ delegate_->NotifySwappedFromRenderManager( |
+ nullptr, render_frame_host_.get(), false); |
+ } |
+ |
// Keep track of renderer processes as they start to shut down or are |
// crashed/killed. |
registrar_.Add(this, NOTIFICATION_RENDERER_PROCESS_CLOSED, |
@@ -224,14 +232,18 @@ RenderFrameHostImpl* RenderFrameHostManager::Navigate( |
// Now that we've created a new renderer, be sure to hide it if it isn't |
// our primary one. Otherwise, we might crash if we try to call Show() |
// on it later. |
- if (dest_render_frame_host != render_frame_host_ && |
- dest_render_frame_host->GetView()) { |
- dest_render_frame_host->GetView()->Hide(); |
+ if (dest_render_frame_host != render_frame_host_) { |
+ if (dest_render_frame_host->GetView()) |
+ dest_render_frame_host->GetView()->Hide(); |
} else { |
- // Notify here as we won't be calling CommitPending (which does the |
- // notify). |
- delegate_->NotifySwappedFromRenderManager( |
- NULL, render_frame_host_.get(), frame_tree_node_->IsMainFrame()); |
+ // TODO(nasko): This is a very ugly hack. The Chrome extensions process |
+ // manager still uses NotificationService and expects to see a |
+ // RenderViewHost changed notification after WebContents and |
+ // RenderFrameHostManager are completely initialized. This should be |
+ // removed once the process manager moves away from NotificationService. |
+ // See https://crbug.com/462682. |
+ delegate_->NotifyMainFrameSwappedFromRenderManager( |
+ nullptr, render_frame_host_->render_view_host()); |
} |
} |