| 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 13a03b3afc722f900c0028b9db4e88776a54c6ea..9133c74137a2fc81327b9b2cedd4aea67bd2e901 100644
|
| --- a/content/browser/frame_host/render_frame_host_manager.cc
|
| +++ b/content/browser/frame_host/render_frame_host_manager.cc
|
| @@ -91,7 +91,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.
|
| STLDeleteValues(&proxy_hosts_);
|
| @@ -107,11 +107,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.
|
| @@ -1024,8 +1024,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();
|
|
|
| @@ -1356,6 +1355,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 top-level frames using this SiteInstance. All
|
| + // subframes are in the same BrowsingInstance as the main frame, so we only
|
| + // count top-level ones. 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();
|
| +}
|
| +
|
| bool RenderFrameHostManager::IsRVHOnSwappedOutList(
|
| RenderViewHostImpl* rvh) const {
|
| RenderFrameProxyHost* proxy = GetRenderFrameProxyHost(
|
|
|