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

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

Issue 1208143002: Move existing kSitePerProcess checks to a policy-oracle object (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@swapped_out_cmdline_checks
Patch Set: Fix some includes Created 5 years, 5 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 12 matching lines...) Expand all
23 #include "content/browser/frame_host/render_frame_host_factory.h" 23 #include "content/browser/frame_host/render_frame_host_factory.h"
24 #include "content/browser/frame_host/render_frame_host_impl.h" 24 #include "content/browser/frame_host/render_frame_host_impl.h"
25 #include "content/browser/frame_host/render_frame_proxy_host.h" 25 #include "content/browser/frame_host/render_frame_proxy_host.h"
26 #include "content/browser/renderer_host/render_process_host_impl.h" 26 #include "content/browser/renderer_host/render_process_host_impl.h"
27 #include "content/browser/renderer_host/render_view_host_factory.h" 27 #include "content/browser/renderer_host/render_view_host_factory.h"
28 #include "content/browser/renderer_host/render_view_host_impl.h" 28 #include "content/browser/renderer_host/render_view_host_impl.h"
29 #include "content/browser/site_instance_impl.h" 29 #include "content/browser/site_instance_impl.h"
30 #include "content/browser/webui/web_ui_controller_factory_registry.h" 30 #include "content/browser/webui/web_ui_controller_factory_registry.h"
31 #include "content/browser/webui/web_ui_impl.h" 31 #include "content/browser/webui/web_ui_impl.h"
32 #include "content/common/frame_messages.h" 32 #include "content/common/frame_messages.h"
33 #include "content/common/site_isolation_policy.h"
33 #include "content/common/view_messages.h" 34 #include "content/common/view_messages.h"
34 #include "content/public/browser/content_browser_client.h" 35 #include "content/public/browser/content_browser_client.h"
35 #include "content/public/browser/notification_service.h" 36 #include "content/public/browser/notification_service.h"
36 #include "content/public/browser/notification_types.h" 37 #include "content/public/browser/notification_types.h"
37 #include "content/public/browser/render_widget_host_iterator.h" 38 #include "content/public/browser/render_widget_host_iterator.h"
38 #include "content/public/browser/render_widget_host_view.h" 39 #include "content/public/browser/render_widget_host_view.h"
39 #include "content/public/browser/user_metrics.h" 40 #include "content/public/browser/user_metrics.h"
40 #include "content/public/browser/web_ui_controller.h" 41 #include "content/public/browser/web_ui_controller.h"
42 #include "content/public/common/browser_plugin_guest_mode.h"
41 #include "content/public/common/content_switches.h" 43 #include "content/public/common/content_switches.h"
42 #include "content/public/common/referrer.h" 44 #include "content/public/common/referrer.h"
43 #include "content/public/common/url_constants.h" 45 #include "content/public/common/url_constants.h"
44 46
45 namespace content { 47 namespace content {
46 48
47 // static 49 // static
48 bool RenderFrameHostManager::ClearRFHsPendingShutdown(FrameTreeNode* node) { 50 bool RenderFrameHostManager::ClearRFHsPendingShutdown(FrameTreeNode* node) {
49 node->render_manager()->pending_delete_hosts_.clear(); 51 node->render_manager()->pending_delete_hosts_.clear();
50 return true; 52 return true;
51 } 53 }
52 54
53 // static 55 // static
54 bool RenderFrameHostManager::IsSwappedOutStateForbidden() { 56 bool RenderFrameHostManager::IsSwappedOutStateForbidden() {
55 return base::CommandLine::ForCurrentProcess()->HasSwitch( 57 return SiteIsolationPolicy::AreCrossProcessFramesPossible();
56 switches::kSitePerProcess);
57 } 58 }
58 59
59 RenderFrameHostManager::RenderFrameHostManager( 60 RenderFrameHostManager::RenderFrameHostManager(
60 FrameTreeNode* frame_tree_node, 61 FrameTreeNode* frame_tree_node,
61 RenderFrameHostDelegate* render_frame_delegate, 62 RenderFrameHostDelegate* render_frame_delegate,
62 RenderViewHostDelegate* render_view_delegate, 63 RenderViewHostDelegate* render_view_delegate,
63 RenderWidgetHostDelegate* render_widget_delegate, 64 RenderWidgetHostDelegate* render_widget_delegate,
64 Delegate* delegate) 65 Delegate* delegate)
65 : frame_tree_node_(frame_tree_node), 66 : frame_tree_node_(frame_tree_node),
66 delegate_(delegate), 67 delegate_(delegate),
(...skipping 737 matching lines...) Expand 10 before | Expand all | Expand 10 after
804 // swap are sent to the browser via the OpenURL IPC and are afterwards treated 805 // swap are sent to the browser via the OpenURL IPC and are afterwards treated
805 // as browser-initiated navigations. NavigationRequests marked as 806 // as browser-initiated navigations. NavigationRequests marked as
806 // renderer-initiated are created by receiving a BeginNavigation IPC, and will 807 // renderer-initiated are created by receiving a BeginNavigation IPC, and will
807 // then proceed in the same renderer that sent the IPC due to the condition 808 // then proceed in the same renderer that sent the IPC due to the condition
808 // below. 809 // below.
809 // Subframe navigations will use the current renderer, unless 810 // Subframe navigations will use the current renderer, unless
810 // --site-per-process is enabled. 811 // --site-per-process is enabled.
811 // TODO(carlosk): Have renderer-initated main frame navigations swap processes 812 // TODO(carlosk): Have renderer-initated main frame navigations swap processes
812 // if needed when it no longer breaks OAuth popups (see 813 // if needed when it no longer breaks OAuth popups (see
813 // https://crbug.com/440266). 814 // https://crbug.com/440266).
814 bool site_per_process = base::CommandLine::ForCurrentProcess()->HasSwitch(
815 switches::kSitePerProcess);
816 bool is_main_frame = frame_tree_node_->IsMainFrame(); 815 bool is_main_frame = frame_tree_node_->IsMainFrame();
817 if (current_site_instance == dest_site_instance.get() || 816 if (current_site_instance == dest_site_instance.get() ||
818 (!request.browser_initiated() && is_main_frame) || 817 (!request.browser_initiated() && is_main_frame) ||
819 (!is_main_frame && !site_per_process)) { 818 (!is_main_frame && !dest_site_instance->RequiresDedicatedProcess() &&
819 !current_site_instance->RequiresDedicatedProcess())) {
820 // Reuse the current RFH if its SiteInstance matches the the navigation's 820 // Reuse the current RFH if its SiteInstance matches the the navigation's
821 // or if this is a subframe navigation. We only swap RFHs for subframes when 821 // or if this is a subframe navigation. We only swap RFHs for subframes when
822 // --site-per-process is enabled. 822 // --site-per-process is enabled.
823 CleanUpNavigation(); 823 CleanUpNavigation();
824 navigation_rfh = render_frame_host_.get(); 824 navigation_rfh = render_frame_host_.get();
825 825
826 // As SiteInstances are the same, check if the WebUI should be reused. 826 // As SiteInstances are the same, check if the WebUI should be reused.
827 const NavigationEntry* current_navigation_entry = 827 const NavigationEntry* current_navigation_entry =
828 delegate_->GetLastCommittedNavigationEntryForRenderManager(); 828 delegate_->GetLastCommittedNavigationEntryForRenderManager();
829 should_reuse_web_ui_ = ShouldReuseWebUI(current_navigation_entry, 829 should_reuse_web_ui_ = ShouldReuseWebUI(current_navigation_entry,
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
922 void RenderFrameHostManager::OnDidStopLoading() { 922 void RenderFrameHostManager::OnDidStopLoading() {
923 for (const auto& pair : proxy_hosts_) { 923 for (const auto& pair : proxy_hosts_) {
924 pair.second->Send(new FrameMsg_DidStopLoading(pair.second->GetRoutingID())); 924 pair.second->Send(new FrameMsg_DidStopLoading(pair.second->GetRoutingID()));
925 } 925 }
926 } 926 }
927 927
928 void RenderFrameHostManager::OnDidUpdateName(const std::string& name) { 928 void RenderFrameHostManager::OnDidUpdateName(const std::string& name) {
929 // The window.name message may be sent outside of --site-per-process when 929 // The window.name message may be sent outside of --site-per-process when
930 // report_frame_name_changes renderer preference is set (used by 930 // report_frame_name_changes renderer preference is set (used by
931 // WebView). Don't send the update to proxies in those cases. 931 // WebView). Don't send the update to proxies in those cases.
932 if (!base::CommandLine::ForCurrentProcess()->HasSwitch( 932 // TODO(nick,nasko): Should this be IsSwappedOutStateForbidden, to match
933 switches::kSitePerProcess)) 933 // OnDidUpdateOrigin?
934 if (!SiteIsolationPolicy::AreCrossProcessFramesPossible())
934 return; 935 return;
935 936
936 for (const auto& pair : proxy_hosts_) { 937 for (const auto& pair : proxy_hosts_) {
937 pair.second->Send( 938 pair.second->Send(
938 new FrameMsg_DidUpdateName(pair.second->GetRoutingID(), name)); 939 new FrameMsg_DidUpdateName(pair.second->GetRoutingID(), name));
939 } 940 }
940 } 941 }
941 942
942 void RenderFrameHostManager::OnDidUpdateOrigin( 943 void RenderFrameHostManager::OnDidUpdateOrigin(
943 const url::DeprecatedSerializedOrigin& origin) { 944 const url::DeprecatedSerializedOrigin& origin) {
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
1007 FrameTreeNode* node) { 1008 FrameTreeNode* node) {
1008 RenderFrameProxyHostMap::iterator iter = 1009 RenderFrameProxyHostMap::iterator iter =
1009 node->render_manager()->proxy_hosts_.find(site_instance_id); 1010 node->render_manager()->proxy_hosts_.find(site_instance_id);
1010 if (iter != node->render_manager()->proxy_hosts_.end()) 1011 if (iter != node->render_manager()->proxy_hosts_.end())
1011 iter->second->set_render_frame_proxy_created(false); 1012 iter->second->set_render_frame_proxy_created(false);
1012 1013
1013 return true; 1014 return true;
1014 } 1015 }
1015 1016
1016 bool RenderFrameHostManager::ShouldTransitionCrossSite() { 1017 bool RenderFrameHostManager::ShouldTransitionCrossSite() {
1017 // True for --site-per-process, which overrides both kSingleProcess and 1018 // The logic below is weaker than "are all sites isolated" -- it asks instead,
1018 // kProcessPerTab. 1019 // "is any site isolated". That's appropriate here since we're just trying to
1019 if (base::CommandLine::ForCurrentProcess()->HasSwitch( 1020 // figure out if we're in any kind of site isolated mode, and in which case,
1020 switches::kSitePerProcess)) 1021 // we ignore the kSingleProcess and kProcessPerTab settings.
1022 //
1023 // TODO(nick): Move all handling of kSingleProcess/kProcessPerTab into
1024 // SiteIsolationPolicy so we have a consistent behavior around the interaction
1025 // of the process model flags.
1026 if (SiteIsolationPolicy::AreCrossProcessFramesPossible())
1021 return true; 1027 return true;
1022 1028
1023 // False in the single-process mode, as it makes RVHs to accumulate 1029 // False in the single-process mode, as it makes RVHs to accumulate
1024 // in swapped_out_hosts_. 1030 // in swapped_out_hosts_.
1025 // True if we are using process-per-site-instance (default) or 1031 // True if we are using process-per-site-instance (default) or
1026 // process-per-site (kProcessPerSite). 1032 // process-per-site (kProcessPerSite).
1033 // TODO(nick): Move handling of kSingleProcess and kProcessPerTab into
1034 // SiteIsolationPolicy.
1027 return !base::CommandLine::ForCurrentProcess()->HasSwitch( 1035 return !base::CommandLine::ForCurrentProcess()->HasSwitch(
1028 switches::kSingleProcess) && 1036 switches::kSingleProcess) &&
1029 !base::CommandLine::ForCurrentProcess()->HasSwitch( 1037 !base::CommandLine::ForCurrentProcess()->HasSwitch(
1030 switches::kProcessPerTab); 1038 switches::kProcessPerTab);
1031 } 1039 }
1032 1040
1033 bool RenderFrameHostManager::ShouldSwapBrowsingInstancesForNavigation( 1041 bool RenderFrameHostManager::ShouldSwapBrowsingInstancesForNavigation(
1034 const GURL& current_effective_url, 1042 const GURL& current_effective_url,
1035 bool current_is_view_source_mode, 1043 bool current_is_view_source_mode,
1036 SiteInstance* new_site_instance, 1044 SiteInstance* new_site_instance,
(...skipping 324 matching lines...) Expand 10 before | Expand all | Expand 10 after
1361 1369
1362 const GURL& RenderFrameHostManager::GetCurrentURLForSiteInstance( 1370 const GURL& RenderFrameHostManager::GetCurrentURLForSiteInstance(
1363 SiteInstance* current_instance, NavigationEntry* current_entry) { 1371 SiteInstance* current_instance, NavigationEntry* current_entry) {
1364 // If this is a subframe that is potentially out of process from its parent, 1372 // If this is a subframe that is potentially out of process from its parent,
1365 // don't consider using current_entry's url for SiteInstance selection, since 1373 // don't consider using current_entry's url for SiteInstance selection, since
1366 // current_entry's url is for the main frame and may be in a different site 1374 // current_entry's url is for the main frame and may be in a different site
1367 // than this frame. 1375 // than this frame.
1368 // TODO(creis): Remove this when we can check the FrameNavigationEntry's url. 1376 // TODO(creis): Remove this when we can check the FrameNavigationEntry's url.
1369 // See http://crbug.com/369654 1377 // See http://crbug.com/369654
1370 if (!frame_tree_node_->IsMainFrame() && 1378 if (!frame_tree_node_->IsMainFrame() &&
1371 base::CommandLine::ForCurrentProcess()->HasSwitch( 1379 SiteIsolationPolicy::AreCrossProcessFramesPossible())
1372 switches::kSitePerProcess))
1373 return frame_tree_node_->current_url(); 1380 return frame_tree_node_->current_url();
1374 1381
1375 // If there is no last non-interstitial entry (and current_instance already 1382 // If there is no last non-interstitial entry (and current_instance already
1376 // has a site), then we must have been opened from another tab. We want 1383 // has a site), then we must have been opened from another tab. We want
1377 // to compare against the URL of the page that opened us, but we can't 1384 // to compare against the URL of the page that opened us, but we can't
1378 // get to it directly. The best we can do is check against the site of 1385 // get to it directly. The best we can do is check against the site of
1379 // the SiteInstance. This will be correct when we intercept links and 1386 // the SiteInstance. This will be correct when we intercept links and
1380 // script-based navigations, but for now, it could place some pages in a 1387 // script-based navigations, but for now, it could place some pages in a
1381 // new process unnecessarily. We should only hit this case if a page tries 1388 // new process unnecessarily. We should only hit this case if a page tries
1382 // to open a new tab to an interstitial-inducing URL, and then navigates 1389 // to open a new tab to an interstitial-inducing URL, and then navigates
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
1416 new_instance, pending_web_ui(), create_render_frame_flags, nullptr); 1423 new_instance, pending_web_ui(), create_render_frame_flags, nullptr);
1417 } 1424 }
1418 1425
1419 void RenderFrameHostManager::CreateProxiesForNewRenderFrameHost( 1426 void RenderFrameHostManager::CreateProxiesForNewRenderFrameHost(
1420 SiteInstance* old_instance, 1427 SiteInstance* old_instance,
1421 SiteInstance* new_instance, 1428 SiteInstance* new_instance,
1422 int* create_render_frame_flags) { 1429 int* create_render_frame_flags) {
1423 // Only create opener proxies if they are in the same BrowsingInstance. 1430 // Only create opener proxies if they are in the same BrowsingInstance.
1424 if (new_instance->IsRelatedSiteInstance(old_instance)) 1431 if (new_instance->IsRelatedSiteInstance(old_instance))
1425 CreateOpenerProxiesIfNeeded(new_instance); 1432 CreateOpenerProxiesIfNeeded(new_instance);
1426 if (base::CommandLine::ForCurrentProcess()->HasSwitch( 1433 if (SiteIsolationPolicy::AreCrossProcessFramesPossible()) {
1427 switches::kSitePerProcess)) {
1428 // Ensure that the frame tree has RenderFrameProxyHosts for the new 1434 // Ensure that the frame tree has RenderFrameProxyHosts for the new
1429 // SiteInstance in all nodes except the current one. We do this for all 1435 // SiteInstance in all nodes except the current one. We do this for all
1430 // frames in the tree, whether they are in the same BrowsingInstance or not. 1436 // frames in the tree, whether they are in the same BrowsingInstance or not.
1431 // We will still check whether two frames are in the same BrowsingInstance 1437 // We will still check whether two frames are in the same BrowsingInstance
1432 // before we allow them to interact (e.g., postMessage). 1438 // before we allow them to interact (e.g., postMessage).
1433 frame_tree_node_->frame_tree()->CreateProxiesForSiteInstance( 1439 frame_tree_node_->frame_tree()->CreateProxiesForSiteInstance(
1434 frame_tree_node_, new_instance); 1440 frame_tree_node_, new_instance);
1435 // RenderFrames in different processes from their parent RenderFrames 1441 // RenderFrames in different processes from their parent RenderFrames
1436 // in the frame tree require RenderWidgets for rendering and processing 1442 // in the frame tree require RenderWidgets for rendering and processing
1437 // input events. 1443 // input events.
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
1515 return true; 1521 return true;
1516 } 1522 }
1517 1523
1518 scoped_ptr<RenderFrameHostImpl> RenderFrameHostManager::CreateRenderFrame( 1524 scoped_ptr<RenderFrameHostImpl> RenderFrameHostManager::CreateRenderFrame(
1519 SiteInstance* instance, 1525 SiteInstance* instance,
1520 WebUIImpl* web_ui, 1526 WebUIImpl* web_ui,
1521 int flags, 1527 int flags,
1522 int* view_routing_id_ptr) { 1528 int* view_routing_id_ptr) {
1523 bool swapped_out = !!(flags & CREATE_RF_SWAPPED_OUT); 1529 bool swapped_out = !!(flags & CREATE_RF_SWAPPED_OUT);
1524 bool swapped_out_forbidden = IsSwappedOutStateForbidden(); 1530 bool swapped_out_forbidden = IsSwappedOutStateForbidden();
1525 bool is_site_per_process = base::CommandLine::ForCurrentProcess()->HasSwitch(
1526 switches::kSitePerProcess);
1527 1531
1528 CHECK(instance); 1532 CHECK(instance);
1529 CHECK_IMPLIES(swapped_out_forbidden, !swapped_out); 1533 CHECK_IMPLIES(swapped_out_forbidden, !swapped_out);
1530 CHECK_IMPLIES(!is_site_per_process, frame_tree_node_->IsMainFrame()); 1534 CHECK_IMPLIES(!SiteIsolationPolicy::AreCrossProcessFramesPossible(),
1535 frame_tree_node_->IsMainFrame());
1531 1536
1532 // Swapped out views should always be hidden. 1537 // Swapped out views should always be hidden.
1533 DCHECK_IMPLIES(swapped_out, (flags & CREATE_RF_HIDDEN)); 1538 DCHECK_IMPLIES(swapped_out, (flags & CREATE_RF_HIDDEN));
1534 1539
1535 scoped_ptr<RenderFrameHostImpl> new_render_frame_host; 1540 scoped_ptr<RenderFrameHostImpl> new_render_frame_host;
1536 bool success = true; 1541 bool success = true;
1537 if (view_routing_id_ptr) 1542 if (view_routing_id_ptr)
1538 *view_routing_id_ptr = MSG_ROUTING_NONE; 1543 *view_routing_id_ptr = MSG_ROUTING_NONE;
1539 1544
1540 // We are creating a pending, speculative or swapped out RFH here. We should 1545 // We are creating a pending, speculative or swapped out RFH here. We should
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after
1698 if (!proxy) 1703 if (!proxy)
1699 return; 1704 return;
1700 1705
1701 InitRenderView(render_view_host, proxy->GetRoutingID(), false); 1706 InitRenderView(render_view_host, proxy->GetRoutingID(), false);
1702 proxy->set_render_frame_proxy_created(true); 1707 proxy->set_render_frame_proxy_created(true);
1703 } 1708 }
1704 1709
1705 void RenderFrameHostManager::CreateOuterDelegateProxy( 1710 void RenderFrameHostManager::CreateOuterDelegateProxy(
1706 SiteInstance* outer_contents_site_instance, 1711 SiteInstance* outer_contents_site_instance,
1707 RenderFrameHostImpl* render_frame_host) { 1712 RenderFrameHostImpl* render_frame_host) {
1708 CHECK(base::CommandLine::ForCurrentProcess()->HasSwitch( 1713 CHECK(BrowserPluginGuestMode::UseCrossProcessFramesForGuests());
1709 switches::kSitePerProcess));
1710 RenderFrameProxyHost* proxy = new RenderFrameProxyHost( 1714 RenderFrameProxyHost* proxy = new RenderFrameProxyHost(
1711 outer_contents_site_instance, nullptr, frame_tree_node_); 1715 outer_contents_site_instance, nullptr, frame_tree_node_);
1712 proxy_hosts_[outer_contents_site_instance->GetId()] = proxy; 1716 proxy_hosts_[outer_contents_site_instance->GetId()] = proxy;
1713 1717
1714 // Swap the outer WebContents's frame with the proxy to inner WebContents. 1718 // Swap the outer WebContents's frame with the proxy to inner WebContents.
1715 // 1719 //
1716 // We are in the outer WebContents, and its FrameTree would never see 1720 // We are in the outer WebContents, and its FrameTree would never see
1717 // a load start for any of its inner WebContents. Eventually, that also makes 1721 // a load start for any of its inner WebContents. Eventually, that also makes
1718 // the FrameTree never see the matching load stop. Therefore, we always pass 1722 // the FrameTree never see the matching load stop. Therefore, we always pass
1719 // false to |is_loading| below. 1723 // false to |is_loading| below.
(...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after
1973 // Since the new RenderFrameHost is now committed, there must be no proxies 1977 // Since the new RenderFrameHost is now committed, there must be no proxies
1974 // for its SiteInstance. Delete any existing ones. 1978 // for its SiteInstance. Delete any existing ones.
1975 RenderFrameProxyHostMap::iterator iter = 1979 RenderFrameProxyHostMap::iterator iter =
1976 proxy_hosts_.find(render_frame_host_->GetSiteInstance()->GetId()); 1980 proxy_hosts_.find(render_frame_host_->GetSiteInstance()->GetId());
1977 if (iter != proxy_hosts_.end()) { 1981 if (iter != proxy_hosts_.end()) {
1978 delete iter->second; 1982 delete iter->second;
1979 proxy_hosts_.erase(iter); 1983 proxy_hosts_.erase(iter);
1980 } 1984 }
1981 } 1985 }
1982 1986
1983 if (base::CommandLine::ForCurrentProcess()->HasSwitch( 1987 // If this is a subframe, it should have a CrossProcessFrameConnector
1984 switches::kSitePerProcess)) { 1988 // created already. Use it to link the new RFH's view to the proxy that
1985 // If this is a subframe, it should have a CrossProcessFrameConnector 1989 // belongs to the parent frame's SiteInstance. If this navigation causes
1986 // created already. Use it to link the new RFH's view to the proxy that 1990 // an out-of-process frame to return to the same process as its parent, the
1987 // belongs to the parent frame's SiteInstance. If this navigation causes 1991 // proxy would have been removed from proxy_hosts_ above.
1988 // an out-of-process frame to return to the same process as its parent, the 1992 // Note: We do this after swapping out the old RFH because that may create
1989 // proxy would have been removed from proxy_hosts_ above. 1993 // the proxy we're looking for.
1990 // Note: We do this after swapping out the old RFH because that may create 1994 RenderFrameProxyHost* proxy_to_parent = GetProxyToParent();
1991 // the proxy we're looking for. 1995 if (proxy_to_parent) {
1992 RenderFrameProxyHost* proxy_to_parent = GetProxyToParent(); 1996 CHECK(SiteIsolationPolicy::AreCrossProcessFramesPossible());
1993 if (proxy_to_parent) 1997 proxy_to_parent->SetChildRWHView(render_frame_host_->GetView());
1994 proxy_to_parent->SetChildRWHView(render_frame_host_->GetView());
1995 } 1998 }
1996 1999
1997 // After all is done, there must never be a proxy in the list which has the 2000 // After all is done, there must never be a proxy in the list which has the
1998 // same SiteInstance as the current RenderFrameHost. 2001 // same SiteInstance as the current RenderFrameHost.
1999 CHECK(proxy_hosts_.find(render_frame_host_->GetSiteInstance()->GetId()) == 2002 CHECK(proxy_hosts_.find(render_frame_host_->GetSiteInstance()->GetId()) ==
2000 proxy_hosts_.end()); 2003 proxy_hosts_.end());
2001 } 2004 }
2002 2005
2003 void RenderFrameHostManager::ShutdownProxiesIfLastActiveFrameInSiteInstance( 2006 void RenderFrameHostManager::ShutdownProxiesIfLastActiveFrameInSiteInstance(
2004 RenderFrameHostImpl* render_frame_host) { 2007 RenderFrameHostImpl* render_frame_host) {
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
2045 SiteInstance* source_instance, 2048 SiteInstance* source_instance,
2046 SiteInstance* dest_instance, 2049 SiteInstance* dest_instance,
2047 ui::PageTransition transition, 2050 ui::PageTransition transition,
2048 bool dest_is_restore, 2051 bool dest_is_restore,
2049 bool dest_is_view_source_mode, 2052 bool dest_is_view_source_mode,
2050 const GlobalRequestID& transferred_request_id, 2053 const GlobalRequestID& transferred_request_id,
2051 int bindings) { 2054 int bindings) {
2052 // Don't swap for subframes unless we are in --site-per-process. We can get 2055 // Don't swap for subframes unless we are in --site-per-process. We can get
2053 // here in tests for subframes (e.g., NavigateFrameToURL). 2056 // here in tests for subframes (e.g., NavigateFrameToURL).
2054 if (!frame_tree_node_->IsMainFrame() && 2057 if (!frame_tree_node_->IsMainFrame() &&
2055 !base::CommandLine::ForCurrentProcess()->HasSwitch( 2058 !SiteIsolationPolicy::AreCrossProcessFramesPossible()) {
2056 switches::kSitePerProcess))
2057 return render_frame_host_.get(); 2059 return render_frame_host_.get();
2060 }
2058 2061
2059 // If we are currently navigating cross-process, we want to get back to normal 2062 // If we are currently navigating cross-process, we want to get back to normal
2060 // and then navigate as usual. 2063 // and then navigate as usual.
2061 if (pending_render_frame_host_) 2064 if (pending_render_frame_host_)
2062 CancelPending(); 2065 CancelPending();
2063 2066
2064 SiteInstance* current_instance = render_frame_host_->GetSiteInstance(); 2067 SiteInstance* current_instance = render_frame_host_->GetSiteInstance();
2065 scoped_refptr<SiteInstance> new_instance = GetSiteInstanceForNavigation( 2068 scoped_refptr<SiteInstance> new_instance = GetSiteInstanceForNavigation(
2066 dest_url, source_instance, dest_instance, nullptr, transition, 2069 dest_url, source_instance, dest_instance, nullptr, transition,
2067 dest_is_restore, dest_is_view_source_mode); 2070 dest_is_restore, dest_is_view_source_mode);
(...skipping 271 matching lines...) Expand 10 before | Expand all | Expand 10 after
2339 int RenderFrameHostManager::GetOpenerRoutingID(SiteInstance* instance) { 2342 int RenderFrameHostManager::GetOpenerRoutingID(SiteInstance* instance) {
2340 if (!frame_tree_node_->opener()) 2343 if (!frame_tree_node_->opener())
2341 return MSG_ROUTING_NONE; 2344 return MSG_ROUTING_NONE;
2342 2345
2343 return frame_tree_node_->opener() 2346 return frame_tree_node_->opener()
2344 ->render_manager() 2347 ->render_manager()
2345 ->GetRoutingIdForSiteInstance(instance); 2348 ->GetRoutingIdForSiteInstance(instance);
2346 } 2349 }
2347 2350
2348 } // namespace content 2351 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698