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

Side by Side Diff: content/browser/frame_host/render_frame_host_manager.cc

Issue 1157563002: Revert of Add ref-count on RenderViewHost for each new RenderFrameProxyHost. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 7 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 unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/frame_host/render_frame_host_manager.h" 5 #include "content/browser/frame_host/render_frame_host_manager.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 580 matching lines...) Expand 10 before | Expand all | Expand 10 after
591 // Tell the old RenderFrameHost to swap out, with no proxy to replace it. 591 // Tell the old RenderFrameHost to swap out, with no proxy to replace it.
592 old_render_frame_host->SwapOut(NULL, true); 592 old_render_frame_host->SwapOut(NULL, true);
593 MoveToPendingDeleteHosts(old_render_frame_host.Pass()); 593 MoveToPendingDeleteHosts(old_render_frame_host.Pass());
594 return; 594 return;
595 } 595 }
596 596
597 // Otherwise there are active views and we need a proxy for the old RFH. 597 // Otherwise there are active views and we need a proxy for the old RFH.
598 // (There should not be one yet.) 598 // (There should not be one yet.)
599 CHECK(!GetRenderFrameProxyHost(old_render_frame_host->GetSiteInstance())); 599 CHECK(!GetRenderFrameProxyHost(old_render_frame_host->GetSiteInstance()));
600 RenderFrameProxyHost* proxy = new RenderFrameProxyHost( 600 RenderFrameProxyHost* proxy = new RenderFrameProxyHost(
601 old_render_frame_host->GetSiteInstance(), 601 old_render_frame_host->GetSiteInstance(), frame_tree_node_);
602 old_render_frame_host->render_view_host(),
603 frame_tree_node_);
604 CHECK(proxy_hosts_.insert(std::make_pair(old_site_instance_id, proxy)).second) 602 CHECK(proxy_hosts_.insert(std::make_pair(old_site_instance_id, proxy)).second)
605 << "Inserting a duplicate item."; 603 << "Inserting a duplicate item.";
606 604
607 // Tell the old RenderFrameHost to swap out and be replaced by the proxy. 605 // Tell the old RenderFrameHost to swap out and be replaced by the proxy.
608 old_render_frame_host->SwapOut(proxy, true); 606 old_render_frame_host->SwapOut(proxy, true);
609 607
610 // SwapOut creates a RenderFrameProxy, so set the proxy to be initialized. 608 // SwapOut creates a RenderFrameProxy, so set the proxy to be initialized.
611 proxy->set_render_frame_proxy_created(true); 609 proxy->set_render_frame_proxy_created(true);
612 610
613 bool is_main_frame = frame_tree_node_->IsMainFrame(); 611 bool is_main_frame = frame_tree_node_->IsMainFrame();
(...skipping 22 matching lines...) Expand all
636 634
637 // If the SiteInstance for the pending RFH is being used by others don't 635 // If the SiteInstance for the pending RFH is being used by others don't
638 // delete the RFH. Just swap it out and it can be reused at a later point. 636 // delete the RFH. Just swap it out and it can be reused at a later point.
639 SiteInstanceImpl* site_instance = render_frame_host->GetSiteInstance(); 637 SiteInstanceImpl* site_instance = render_frame_host->GetSiteInstance();
640 if (site_instance->HasSite() && site_instance->active_frame_count() > 1) { 638 if (site_instance->HasSite() && site_instance->active_frame_count() > 1) {
641 // Any currently suspended navigations are no longer needed. 639 // Any currently suspended navigations are no longer needed.
642 render_frame_host->CancelSuspendedNavigations(); 640 render_frame_host->CancelSuspendedNavigations();
643 641
644 CHECK(!GetRenderFrameProxyHost(site_instance)); 642 CHECK(!GetRenderFrameProxyHost(site_instance));
645 RenderFrameProxyHost* proxy = 643 RenderFrameProxyHost* proxy =
646 new RenderFrameProxyHost(site_instance, 644 new RenderFrameProxyHost(site_instance, frame_tree_node_);
647 render_frame_host->render_view_host(),
648 frame_tree_node_);
649 proxy_hosts_[site_instance->GetId()] = proxy; 645 proxy_hosts_[site_instance->GetId()] = proxy;
650 646
651 // Check if the RenderFrameHost is already swapped out, to avoid swapping it 647 // Check if the RenderFrameHost is already swapped out, to avoid swapping it
652 // out again. 648 // out again.
653 if (!render_frame_host->is_swapped_out()) 649 if (!render_frame_host->is_swapped_out())
654 render_frame_host->SwapOut(proxy, false); 650 render_frame_host->SwapOut(proxy, false);
655 651
656 if (frame_tree_node_->IsMainFrame()) 652 if (frame_tree_node_->IsMainFrame())
657 proxy->TakeFrameHostOwnership(render_frame_host.Pass()); 653 proxy->TakeFrameHostOwnership(render_frame_host.Pass());
658 } else { 654 } else {
(...skipping 853 matching lines...) Expand 10 before | Expand all | Expand 10 after
1512 RenderViewHostImpl* render_view_host = 1508 RenderViewHostImpl* render_view_host =
1513 new_render_frame_host->render_view_host(); 1509 new_render_frame_host->render_view_host();
1514 int proxy_routing_id = MSG_ROUTING_NONE; 1510 int proxy_routing_id = MSG_ROUTING_NONE;
1515 1511
1516 // Prevent the process from exiting while we're trying to navigate in it. 1512 // Prevent the process from exiting while we're trying to navigate in it.
1517 // Otherwise, if the new RFH is swapped out already, store it. 1513 // Otherwise, if the new RFH is swapped out already, store it.
1518 if (!swapped_out) { 1514 if (!swapped_out) {
1519 new_render_frame_host->GetProcess()->AddPendingView(); 1515 new_render_frame_host->GetProcess()->AddPendingView();
1520 } else { 1516 } else {
1521 proxy = new RenderFrameProxyHost( 1517 proxy = new RenderFrameProxyHost(
1522 new_render_frame_host->GetSiteInstance(), 1518 new_render_frame_host->GetSiteInstance(), frame_tree_node_);
1523 new_render_frame_host->render_view_host(), frame_tree_node_);
1524 proxy_hosts_[instance->GetId()] = proxy; 1519 proxy_hosts_[instance->GetId()] = proxy;
1525 proxy_routing_id = proxy->GetRoutingID(); 1520 proxy_routing_id = proxy->GetRoutingID();
1526 proxy->TakeFrameHostOwnership(new_render_frame_host.Pass()); 1521 proxy->TakeFrameHostOwnership(new_render_frame_host.Pass());
1527 } 1522 }
1528 1523
1529 success = 1524 success =
1530 InitRenderView(render_view_host, opener_route_id, proxy_routing_id, 1525 InitRenderView(render_view_host, opener_route_id, proxy_routing_id,
1531 !!(flags & CREATE_RF_FOR_MAIN_FRAME_NAVIGATION)); 1526 !!(flags & CREATE_RF_FOR_MAIN_FRAME_NAVIGATION));
1532 if (success) { 1527 if (success) {
1533 // Remember that InitRenderView also created the RenderFrameProxy. 1528 // Remember that InitRenderView also created the RenderFrameProxy.
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
1565 // A RenderFrameProxyHost should never be created in the same SiteInstance as 1560 // A RenderFrameProxyHost should never be created in the same SiteInstance as
1566 // the current RFH. 1561 // the current RFH.
1567 CHECK(instance); 1562 CHECK(instance);
1568 CHECK_NE(instance, render_frame_host_->GetSiteInstance()); 1563 CHECK_NE(instance, render_frame_host_->GetSiteInstance());
1569 1564
1570 RenderFrameProxyHost* proxy = GetRenderFrameProxyHost(instance); 1565 RenderFrameProxyHost* proxy = GetRenderFrameProxyHost(instance);
1571 if (proxy && proxy->is_render_frame_proxy_live()) 1566 if (proxy && proxy->is_render_frame_proxy_live())
1572 return proxy->GetRoutingID(); 1567 return proxy->GetRoutingID();
1573 1568
1574 if (!proxy) { 1569 if (!proxy) {
1575 proxy = new RenderFrameProxyHost( 1570 proxy = new RenderFrameProxyHost(instance, frame_tree_node_);
1576 instance, frame_tree_node_->frame_tree()->GetRenderViewHost(instance),
1577 frame_tree_node_);
1578 proxy_hosts_[instance->GetId()] = proxy; 1571 proxy_hosts_[instance->GetId()] = proxy;
1579 } 1572 }
1580 proxy->InitRenderFrameProxy(); 1573 proxy->InitRenderFrameProxy();
1581 return proxy->GetRoutingID(); 1574 return proxy->GetRoutingID();
1582 } 1575 }
1583 1576
1584 void RenderFrameHostManager::CreateProxiesForChildFrame(FrameTreeNode* child) { 1577 void RenderFrameHostManager::CreateProxiesForChildFrame(FrameTreeNode* child) {
1585 for (const auto& pair : proxy_hosts_) { 1578 for (const auto& pair : proxy_hosts_) {
1586 child->render_manager()->CreateRenderFrameProxy( 1579 child->render_manager()->CreateRenderFrameProxy(
1587 pair.second->GetSiteInstance()); 1580 pair.second->GetSiteInstance());
(...skipping 528 matching lines...) Expand 10 before | Expand all | Expand 10 after
2116 void RenderFrameHostManager::DeleteRenderFrameProxyHost( 2109 void RenderFrameHostManager::DeleteRenderFrameProxyHost(
2117 SiteInstance* instance) { 2110 SiteInstance* instance) {
2118 RenderFrameProxyHostMap::iterator iter = proxy_hosts_.find(instance->GetId()); 2111 RenderFrameProxyHostMap::iterator iter = proxy_hosts_.find(instance->GetId());
2119 if (iter != proxy_hosts_.end()) { 2112 if (iter != proxy_hosts_.end()) {
2120 delete iter->second; 2113 delete iter->second;
2121 proxy_hosts_.erase(iter); 2114 proxy_hosts_.erase(iter);
2122 } 2115 }
2123 } 2116 }
2124 2117
2125 } // namespace content 2118 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698