| 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 2dfc2218b3e1e47ee2cfc82be509192a4b15e1b9..c12ed45cb9c2fa0d49861dab9e74514f5c2492c1 100644
|
| --- a/content/browser/frame_host/render_frame_host_manager.cc
|
| +++ b/content/browser/frame_host/render_frame_host_manager.cc
|
| @@ -88,7 +88,7 @@ RenderFrameHostManager::~RenderFrameHostManager() {
|
| delete cross_process_frame_connector_;
|
|
|
| // We should always have a current RenderFrameHost except in some tests.
|
| - render_frame_host_.reset();
|
| + SetRenderFrameHost(scoped_ptr<RenderFrameHostImpl>());
|
|
|
| // Delete any swapped out RenderFrameHosts.
|
| for (RenderFrameProxyHostMap::iterator iter = proxy_hosts_.begin();
|
| @@ -108,11 +108,11 @@ void RenderFrameHostManager::Init(BrowserContext* browser_context,
|
| if (!site_instance)
|
| site_instance = SiteInstance::Create(browser_context);
|
|
|
| - render_frame_host_ = CreateRenderFrameHost(site_instance,
|
| - view_routing_id,
|
| - frame_routing_id,
|
| - false,
|
| - delegate_->IsHidden());
|
| + SetRenderFrameHost(CreateRenderFrameHost(site_instance,
|
| + view_routing_id,
|
| + frame_routing_id,
|
| + false,
|
| + delegate_->IsHidden()));
|
|
|
| // Keep track of renderer processes as they start to shut down or are
|
| // crashed/killed.
|
| @@ -1028,8 +1028,7 @@ void RenderFrameHostManager::CommitPending() {
|
| // Swap in the pending frame and make it active. Also ensure the FrameTree
|
| // stays in sync.
|
| scoped_ptr<RenderFrameHostImpl> old_render_frame_host =
|
| - render_frame_host_.Pass();
|
| - render_frame_host_ = pending_render_frame_host_.Pass();
|
| + SetRenderFrameHost(pending_render_frame_host_.Pass());
|
| if (is_main_frame)
|
| render_frame_host_->render_view_host()->AttachToFrameTree();
|
|
|
| @@ -1361,6 +1360,31 @@ void RenderFrameHostManager::CancelPending() {
|
| pending_and_current_web_ui_.reset();
|
| }
|
|
|
| +scoped_ptr<RenderFrameHostImpl> RenderFrameHostManager::SetRenderFrameHost(
|
| + scoped_ptr<RenderFrameHostImpl> render_frame_host) {
|
| + // Swap the two.
|
| + scoped_ptr<RenderFrameHostImpl> old_render_frame_host =
|
| + render_frame_host_.Pass();
|
| + render_frame_host_ = render_frame_host.Pass();
|
| +
|
| + if (frame_tree_node_->IsMainFrame()) {
|
| + // Update the count of WebContents objects using this SiteInstance. All
|
| + // subframes are in the same BrowsingInstance as the main frame, so we only
|
| + // do this for the top-level frame. This makes the value easier for
|
| + // consumers to interpret.
|
| + if (render_frame_host_) {
|
| + static_cast<SiteInstanceImpl*>(render_frame_host_->GetSiteInstance())->
|
| + IncrementRelatedActiveContentsCount();
|
| + }
|
| + if (old_render_frame_host) {
|
| + static_cast<SiteInstanceImpl*>(old_render_frame_host->GetSiteInstance())->
|
| + DecrementRelatedActiveContentsCount();
|
| + }
|
| + }
|
| +
|
| + return old_render_frame_host.Pass();
|
| +}
|
| +
|
| void RenderFrameHostManager::RenderViewDeleted(RenderViewHost* rvh) {
|
| // We are doing this in order to work around and to track a crasher
|
| // (http://crbug.com/23411) where it seems that pending_render_frame_host_ is
|
|
|