| OLD | NEW |
| 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 <algorithm> | 7 #include <algorithm> |
| 8 #include <utility> | 8 #include <utility> |
| 9 | 9 |
| 10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
| (...skipping 400 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 411 // occur before initializing the RenderView; the flow of creating the | 411 // occur before initializing the RenderView; the flow of creating the |
| 412 // RenderView can cause browser-side code to execute that expects the this | 412 // RenderView can cause browser-side code to execute that expects the this |
| 413 // RFH's ServiceRegistry to be initialized (e.g., if the site is a WebUI | 413 // RFH's ServiceRegistry to be initialized (e.g., if the site is a WebUI |
| 414 // site that is handled via Mojo, then Mojo WebUI code in //chrome will | 414 // site that is handled via Mojo, then Mojo WebUI code in //chrome will |
| 415 // add a service to this RFH's ServiceRegistry). | 415 // add a service to this RFH's ServiceRegistry). |
| 416 dest_render_frame_host->SetUpMojoIfNeeded(); | 416 dest_render_frame_host->SetUpMojoIfNeeded(); |
| 417 | 417 |
| 418 // Recreate the opener chain. | 418 // Recreate the opener chain. |
| 419 CreateOpenerProxies(dest_render_frame_host->GetSiteInstance(), | 419 CreateOpenerProxies(dest_render_frame_host->GetSiteInstance(), |
| 420 frame_tree_node_); | 420 frame_tree_node_); |
| 421 if (!InitRenderView(dest_render_frame_host->render_view_host(), | 421 if (!InitRenderView(dest_render_frame_host->render_view_host(), nullptr)) |
| 422 MSG_ROUTING_NONE)) | |
| 423 return nullptr; | 422 return nullptr; |
| 424 | 423 |
| 425 // Now that we've created a new renderer, be sure to hide it if it isn't | 424 // Now that we've created a new renderer, be sure to hide it if it isn't |
| 426 // our primary one. Otherwise, we might crash if we try to call Show() | 425 // our primary one. Otherwise, we might crash if we try to call Show() |
| 427 // on it later. | 426 // on it later. |
| 428 if (dest_render_frame_host != render_frame_host_) { | 427 if (dest_render_frame_host != render_frame_host_) { |
| 429 if (dest_render_frame_host->GetView()) | 428 if (dest_render_frame_host->GetView()) |
| 430 dest_render_frame_host->GetView()->Hide(); | 429 dest_render_frame_host->GetView()->Hide(); |
| 431 } else { | 430 } else { |
| 432 // After a renderer crash we'd have marked the host as invisible, so we | 431 // After a renderer crash we'd have marked the host as invisible, so we |
| (...skipping 637 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1070 } | 1069 } |
| 1071 DCHECK(navigation_rfh && | 1070 DCHECK(navigation_rfh && |
| 1072 (navigation_rfh == render_frame_host_.get() || | 1071 (navigation_rfh == render_frame_host_.get() || |
| 1073 navigation_rfh == speculative_render_frame_host_.get())); | 1072 navigation_rfh == speculative_render_frame_host_.get())); |
| 1074 | 1073 |
| 1075 // If the RenderFrame that needs to navigate is not live (its process was just | 1074 // If the RenderFrame that needs to navigate is not live (its process was just |
| 1076 // created or has crashed), initialize it. | 1075 // created or has crashed), initialize it. |
| 1077 if (!navigation_rfh->IsRenderFrameLive()) { | 1076 if (!navigation_rfh->IsRenderFrameLive()) { |
| 1078 // Recreate the opener chain. | 1077 // Recreate the opener chain. |
| 1079 CreateOpenerProxies(navigation_rfh->GetSiteInstance(), frame_tree_node_); | 1078 CreateOpenerProxies(navigation_rfh->GetSiteInstance(), frame_tree_node_); |
| 1080 if (!InitRenderView(navigation_rfh->render_view_host(), MSG_ROUTING_NONE)) { | 1079 if (!InitRenderView(navigation_rfh->render_view_host(), nullptr)) { |
| 1081 return nullptr; | 1080 return nullptr; |
| 1082 } | 1081 } |
| 1083 | 1082 |
| 1084 if (navigation_rfh == render_frame_host_) { | 1083 if (navigation_rfh == render_frame_host_) { |
| 1085 // TODO(nasko): This is a very ugly hack. The Chrome extensions process | 1084 // TODO(nasko): This is a very ugly hack. The Chrome extensions process |
| 1086 // manager still uses NotificationService and expects to see a | 1085 // manager still uses NotificationService and expects to see a |
| 1087 // RenderViewHost changed notification after WebContents and | 1086 // RenderViewHost changed notification after WebContents and |
| 1088 // RenderFrameHostManager are completely initialized. This should be | 1087 // RenderFrameHostManager are completely initialized. This should be |
| 1089 // removed once the process manager moves away from NotificationService. | 1088 // removed once the process manager moves away from NotificationService. |
| 1090 // See https://crbug.com/462682. | 1089 // See https://crbug.com/462682. |
| (...skipping 696 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1787 // Prevent the process from exiting while we're trying to use it. | 1786 // Prevent the process from exiting while we're trying to use it. |
| 1788 if (!swapped_out) { | 1787 if (!swapped_out) { |
| 1789 new_render_frame_host = proxy->PassFrameHostOwnership(); | 1788 new_render_frame_host = proxy->PassFrameHostOwnership(); |
| 1790 new_render_frame_host->GetProcess()->AddPendingView(); | 1789 new_render_frame_host->GetProcess()->AddPendingView(); |
| 1791 | 1790 |
| 1792 proxy_hosts_->Remove(instance->GetId()); | 1791 proxy_hosts_->Remove(instance->GetId()); |
| 1793 // NB |proxy| is deleted at this point. | 1792 // NB |proxy| is deleted at this point. |
| 1794 | 1793 |
| 1795 // If we are reusing the RenderViewHost and it doesn't already have a | 1794 // If we are reusing the RenderViewHost and it doesn't already have a |
| 1796 // RenderWidgetHostView, we need to create one if this is the main frame. | 1795 // RenderWidgetHostView, we need to create one if this is the main frame. |
| 1797 if (!render_view_host->GetWidget()->GetView() && | 1796 if (render_view_host->IsRenderViewLive() && |
| 1797 !render_view_host->GetWidget()->GetView() && |
| 1798 frame_tree_node_->IsMainFrame()) { | 1798 frame_tree_node_->IsMainFrame()) { |
| 1799 delegate_->CreateRenderWidgetHostViewForRenderManager(render_view_host); | 1799 delegate_->CreateRenderWidgetHostViewForRenderManager(render_view_host); |
| 1800 } | 1800 } |
| 1801 } | 1801 } |
| 1802 } else { | 1802 } else { |
| 1803 // Create a new RenderFrameHost if we don't find an existing one. | 1803 // Create a new RenderFrameHost if we don't find an existing one. |
| 1804 | 1804 |
| 1805 int32 widget_routing_id = MSG_ROUTING_NONE; | 1805 int32 widget_routing_id = MSG_ROUTING_NONE; |
| 1806 // A RenderFrame in a different process from its parent RenderFrame | 1806 // A RenderFrame in a different process from its parent RenderFrame |
| 1807 // requires a RenderWidget for input/layout/painting. | 1807 // requires a RenderWidget for input/layout/painting. |
| 1808 if (frame_tree_node_->parent() && | 1808 if (frame_tree_node_->parent() && |
| 1809 frame_tree_node_->parent()->current_frame_host()->GetSiteInstance() != | 1809 frame_tree_node_->parent()->current_frame_host()->GetSiteInstance() != |
| 1810 instance) { | 1810 instance) { |
| 1811 CHECK(SiteIsolationPolicy::AreCrossProcessFramesPossible()); | 1811 CHECK(SiteIsolationPolicy::AreCrossProcessFramesPossible()); |
| 1812 widget_routing_id = instance->GetProcess()->GetNextRoutingID(); | 1812 widget_routing_id = instance->GetProcess()->GetNextRoutingID(); |
| 1813 } | 1813 } |
| 1814 | 1814 |
| 1815 new_render_frame_host = CreateRenderFrameHost( | 1815 new_render_frame_host = CreateRenderFrameHost( |
| 1816 instance, MSG_ROUTING_NONE, MSG_ROUTING_NONE, widget_routing_id, flags); | 1816 instance, MSG_ROUTING_NONE, MSG_ROUTING_NONE, widget_routing_id, flags); |
| 1817 RenderViewHostImpl* render_view_host = | 1817 RenderViewHostImpl* render_view_host = |
| 1818 new_render_frame_host->render_view_host(); | 1818 new_render_frame_host->render_view_host(); |
| 1819 int proxy_routing_id = MSG_ROUTING_NONE; | |
| 1820 | 1819 |
| 1821 // Prevent the process from exiting while we're trying to navigate in it. | 1820 // Prevent the process from exiting while we're trying to navigate in it. |
| 1822 // Otherwise, if the new RFH is swapped out already, store it. | 1821 // Otherwise, if the new RFH is swapped out already, store it. |
| 1823 if (!swapped_out) { | 1822 if (!swapped_out) { |
| 1824 new_render_frame_host->GetProcess()->AddPendingView(); | 1823 new_render_frame_host->GetProcess()->AddPendingView(); |
| 1825 } else { | 1824 } else { |
| 1826 proxy = new RenderFrameProxyHost( | 1825 proxy = new RenderFrameProxyHost( |
| 1827 new_render_frame_host->GetSiteInstance(), | 1826 new_render_frame_host->GetSiteInstance(), |
| 1828 new_render_frame_host->render_view_host(), frame_tree_node_); | 1827 new_render_frame_host->render_view_host(), frame_tree_node_); |
| 1829 proxy_hosts_->Add(instance->GetId(), make_scoped_ptr(proxy)); | 1828 proxy_hosts_->Add(instance->GetId(), make_scoped_ptr(proxy)); |
| 1830 proxy_routing_id = proxy->GetRoutingID(); | |
| 1831 proxy->TakeFrameHostOwnership(new_render_frame_host.Pass()); | 1829 proxy->TakeFrameHostOwnership(new_render_frame_host.Pass()); |
| 1832 } | 1830 } |
| 1833 | 1831 |
| 1834 if (frame_tree_node_->IsMainFrame()) { | 1832 if (frame_tree_node_->IsMainFrame()) { |
| 1835 success = InitRenderView(render_view_host, proxy_routing_id); | 1833 success = InitRenderView(render_view_host, proxy); |
| 1836 | 1834 |
| 1837 // If we are reusing the RenderViewHost and it doesn't already have a | 1835 // If we are reusing the RenderViewHost and it doesn't already have a |
| 1838 // RenderWidgetHostView, we need to create one if this is the main frame. | 1836 // RenderWidgetHostView, we need to create one if this is the main frame. |
| 1839 if (!swapped_out && !render_view_host->GetWidget()->GetView()) | 1837 if (!swapped_out && !render_view_host->GetWidget()->GetView()) |
| 1840 delegate_->CreateRenderWidgetHostViewForRenderManager(render_view_host); | 1838 delegate_->CreateRenderWidgetHostViewForRenderManager(render_view_host); |
| 1841 } else { | 1839 } else { |
| 1842 DCHECK(render_view_host->IsRenderViewLive()); | 1840 DCHECK(render_view_host->IsRenderViewLive()); |
| 1843 } | 1841 } |
| 1844 | 1842 |
| 1845 if (success) { | 1843 if (success) { |
| 1846 // Remember that InitRenderView also created the RenderFrameProxy. | |
| 1847 if (swapped_out) | |
| 1848 proxy->set_render_frame_proxy_created(true); | |
| 1849 if (frame_tree_node_->IsMainFrame()) { | 1844 if (frame_tree_node_->IsMainFrame()) { |
| 1850 // Don't show the main frame's view until we get a DidNavigate from it. | 1845 // Don't show the main frame's view until we get a DidNavigate from it. |
| 1851 // Only the RenderViewHost for the top-level RenderFrameHost has a | 1846 // Only the RenderViewHost for the top-level RenderFrameHost has a |
| 1852 // RenderWidgetHostView; RenderWidgetHosts for out-of-process iframes | 1847 // RenderWidgetHostView; RenderWidgetHosts for out-of-process iframes |
| 1853 // will be created later and hidden. | 1848 // will be created later and hidden. |
| 1854 if (render_view_host->GetWidget()->GetView()) | 1849 if (render_view_host->GetWidget()->GetView()) |
| 1855 render_view_host->GetWidget()->GetView()->Hide(); | 1850 render_view_host->GetWidget()->GetView()->Hide(); |
| 1856 } | 1851 } |
| 1857 // RenderViewHost for |instance| might exist prior to calling | 1852 // RenderViewHost for |instance| might exist prior to calling |
| 1858 // CreateRenderFrame. In such a case, InitRenderView will not create the | 1853 // CreateRenderFrame. In such a case, InitRenderView will not create the |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1919 return proxy->GetRoutingID(); | 1914 return proxy->GetRoutingID(); |
| 1920 | 1915 |
| 1921 if (!proxy) { | 1916 if (!proxy) { |
| 1922 proxy = | 1917 proxy = |
| 1923 new RenderFrameProxyHost(instance, render_view_host, frame_tree_node_); | 1918 new RenderFrameProxyHost(instance, render_view_host, frame_tree_node_); |
| 1924 proxy_hosts_->Add(instance->GetId(), make_scoped_ptr(proxy)); | 1919 proxy_hosts_->Add(instance->GetId(), make_scoped_ptr(proxy)); |
| 1925 } | 1920 } |
| 1926 | 1921 |
| 1927 if (SiteIsolationPolicy::IsSwappedOutStateForbidden() && | 1922 if (SiteIsolationPolicy::IsSwappedOutStateForbidden() && |
| 1928 frame_tree_node_->IsMainFrame()) { | 1923 frame_tree_node_->IsMainFrame()) { |
| 1929 InitRenderView(render_view_host, proxy->GetRoutingID()); | 1924 InitRenderView(render_view_host, proxy); |
| 1930 proxy->set_render_frame_proxy_created(true); | |
| 1931 } else { | 1925 } else { |
| 1932 proxy->InitRenderFrameProxy(); | 1926 proxy->InitRenderFrameProxy(); |
| 1933 } | 1927 } |
| 1934 | 1928 |
| 1935 return proxy->GetRoutingID(); | 1929 return proxy->GetRoutingID(); |
| 1936 } | 1930 } |
| 1937 | 1931 |
| 1938 void RenderFrameHostManager::CreateProxiesForChildFrame(FrameTreeNode* child) { | 1932 void RenderFrameHostManager::CreateProxiesForChildFrame(FrameTreeNode* child) { |
| 1939 for (const auto& pair : *proxy_hosts_) { | 1933 for (const auto& pair : *proxy_hosts_) { |
| 1940 // Do not create proxies for subframes in the outer delegate's process, | 1934 // Do not create proxies for subframes in the outer delegate's process, |
| (...skipping 13 matching lines...) Expand all Loading... |
| 1954 | 1948 |
| 1955 if (render_view_host->IsRenderViewLive()) | 1949 if (render_view_host->IsRenderViewLive()) |
| 1956 return; | 1950 return; |
| 1957 | 1951 |
| 1958 // If the proxy in |instance| doesn't exist, this RenderView is not swapped | 1952 // If the proxy in |instance| doesn't exist, this RenderView is not swapped |
| 1959 // out and shouldn't be reinitialized here. | 1953 // out and shouldn't be reinitialized here. |
| 1960 RenderFrameProxyHost* proxy = GetRenderFrameProxyHost(instance); | 1954 RenderFrameProxyHost* proxy = GetRenderFrameProxyHost(instance); |
| 1961 if (!proxy) | 1955 if (!proxy) |
| 1962 return; | 1956 return; |
| 1963 | 1957 |
| 1964 InitRenderView(render_view_host, proxy->GetRoutingID()); | 1958 InitRenderView(render_view_host, proxy); |
| 1965 proxy->set_render_frame_proxy_created(true); | |
| 1966 } | 1959 } |
| 1967 | 1960 |
| 1968 void RenderFrameHostManager::CreateOuterDelegateProxy( | 1961 void RenderFrameHostManager::CreateOuterDelegateProxy( |
| 1969 SiteInstance* outer_contents_site_instance, | 1962 SiteInstance* outer_contents_site_instance, |
| 1970 RenderFrameHostImpl* render_frame_host) { | 1963 RenderFrameHostImpl* render_frame_host) { |
| 1971 CHECK(BrowserPluginGuestMode::UseCrossProcessFramesForGuests()); | 1964 CHECK(BrowserPluginGuestMode::UseCrossProcessFramesForGuests()); |
| 1972 RenderFrameProxyHost* proxy = new RenderFrameProxyHost( | 1965 RenderFrameProxyHost* proxy = new RenderFrameProxyHost( |
| 1973 outer_contents_site_instance, nullptr, frame_tree_node_); | 1966 outer_contents_site_instance, nullptr, frame_tree_node_); |
| 1974 proxy_hosts_->Add(outer_contents_site_instance->GetId(), | 1967 proxy_hosts_->Add(outer_contents_site_instance->GetId(), |
| 1975 make_scoped_ptr(proxy)); | 1968 make_scoped_ptr(proxy)); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 1989 } | 1982 } |
| 1990 | 1983 |
| 1991 void RenderFrameHostManager::SetRWHViewForInnerContents( | 1984 void RenderFrameHostManager::SetRWHViewForInnerContents( |
| 1992 RenderWidgetHostView* child_rwhv) { | 1985 RenderWidgetHostView* child_rwhv) { |
| 1993 DCHECK(ForInnerDelegate() && frame_tree_node_->IsMainFrame()); | 1986 DCHECK(ForInnerDelegate() && frame_tree_node_->IsMainFrame()); |
| 1994 GetProxyToOuterDelegate()->SetChildRWHView(child_rwhv); | 1987 GetProxyToOuterDelegate()->SetChildRWHView(child_rwhv); |
| 1995 } | 1988 } |
| 1996 | 1989 |
| 1997 bool RenderFrameHostManager::InitRenderView( | 1990 bool RenderFrameHostManager::InitRenderView( |
| 1998 RenderViewHostImpl* render_view_host, | 1991 RenderViewHostImpl* render_view_host, |
| 1999 int proxy_routing_id) { | 1992 RenderFrameProxyHost* proxy) { |
| 2000 // Ensure the renderer process is initialized before creating the | 1993 // Ensure the renderer process is initialized before creating the |
| 2001 // RenderView. | 1994 // RenderView. |
| 2002 if (!render_view_host->GetProcess()->Init()) | 1995 if (!render_view_host->GetProcess()->Init()) |
| 2003 return false; | 1996 return false; |
| 2004 | 1997 |
| 2005 // We may have initialized this RenderViewHost for another RenderFrameHost. | 1998 // We may have initialized this RenderViewHost for another RenderFrameHost. |
| 2006 if (render_view_host->IsRenderViewLive()) | 1999 if (render_view_host->IsRenderViewLive()) |
| 2007 return true; | 2000 return true; |
| 2008 | 2001 |
| 2009 // If |render_view_host| is not for a proxy and the navigation is to a WebUI, | 2002 // If |render_view_host| is not for a proxy and the navigation is to a WebUI, |
| 2010 // and if the RenderView is not in a guest process, tell |render_view_host| | 2003 // and if the RenderView is not in a guest process, tell |render_view_host| |
| 2011 // about any bindings it will need enabled. | 2004 // about any bindings it will need enabled. |
| 2012 // TODO(carlosk): Move WebUI to RenderFrameHost in https://crbug.com/508850. | 2005 // TODO(carlosk): Move WebUI to RenderFrameHost in https://crbug.com/508850. |
| 2013 WebUIImpl* dest_web_ui = nullptr; | 2006 WebUIImpl* dest_web_ui = nullptr; |
| 2014 DCHECK_EQ(render_view_host->is_active(), | 2007 if (!proxy) { |
| 2015 proxy_routing_id == MSG_ROUTING_NONE); | |
| 2016 if (proxy_routing_id == MSG_ROUTING_NONE) { | |
| 2017 if (base::CommandLine::ForCurrentProcess()->HasSwitch( | 2008 if (base::CommandLine::ForCurrentProcess()->HasSwitch( |
| 2018 switches::kEnableBrowserSideNavigation)) { | 2009 switches::kEnableBrowserSideNavigation)) { |
| 2019 dest_web_ui = | 2010 dest_web_ui = |
| 2020 should_reuse_web_ui_ ? web_ui_.get() : speculative_web_ui_.get(); | 2011 should_reuse_web_ui_ ? web_ui_.get() : speculative_web_ui_.get(); |
| 2021 } else { | 2012 } else { |
| 2022 dest_web_ui = pending_web_ui(); | 2013 dest_web_ui = pending_web_ui(); |
| 2023 } | 2014 } |
| 2024 } | 2015 } |
| 2025 if (dest_web_ui && !render_view_host->GetProcess()->IsForGuestsOnly()) { | 2016 if (dest_web_ui && !render_view_host->GetProcess()->IsForGuestsOnly()) { |
| 2026 render_view_host->AllowBindings(dest_web_ui->GetBindings()); | 2017 render_view_host->AllowBindings(dest_web_ui->GetBindings()); |
| 2027 } else { | 2018 } else { |
| 2028 // Ensure that we don't create an unprivileged RenderView in a WebUI-enabled | 2019 // Ensure that we don't create an unprivileged RenderView in a WebUI-enabled |
| 2029 // process unless it's swapped out. | 2020 // process unless it's swapped out. |
| 2030 if (render_view_host->is_active()) { | 2021 if (render_view_host->is_active()) { |
| 2031 CHECK(!ChildProcessSecurityPolicyImpl::GetInstance()->HasWebUIBindings( | 2022 CHECK(!ChildProcessSecurityPolicyImpl::GetInstance()->HasWebUIBindings( |
| 2032 render_view_host->GetProcess()->GetID())); | 2023 render_view_host->GetProcess()->GetID())); |
| 2033 } | 2024 } |
| 2034 } | 2025 } |
| 2035 | 2026 |
| 2036 int opener_frame_routing_id = | 2027 int opener_frame_routing_id = |
| 2037 GetOpenerRoutingID(render_view_host->GetSiteInstance()); | 2028 GetOpenerRoutingID(render_view_host->GetSiteInstance()); |
| 2038 | 2029 |
| 2039 return delegate_->CreateRenderViewForRenderManager( | 2030 bool created = delegate_->CreateRenderViewForRenderManager( |
| 2040 render_view_host, opener_frame_routing_id, proxy_routing_id, | 2031 render_view_host, opener_frame_routing_id, |
| 2032 proxy ? proxy->GetRoutingID() : MSG_ROUTING_NONE, |
| 2041 frame_tree_node_->current_replication_state()); | 2033 frame_tree_node_->current_replication_state()); |
| 2034 |
| 2035 if (created && proxy) |
| 2036 proxy->set_render_frame_proxy_created(true); |
| 2037 |
| 2038 return created; |
| 2042 } | 2039 } |
| 2043 | 2040 |
| 2044 bool RenderFrameHostManager::InitRenderFrame( | 2041 bool RenderFrameHostManager::InitRenderFrame( |
| 2045 RenderFrameHostImpl* render_frame_host) { | 2042 RenderFrameHostImpl* render_frame_host) { |
| 2046 if (render_frame_host->IsRenderFrameLive()) | 2043 if (render_frame_host->IsRenderFrameLive()) |
| 2047 return true; | 2044 return true; |
| 2048 | 2045 |
| 2049 SiteInstance* site_instance = render_frame_host->GetSiteInstance(); | 2046 SiteInstance* site_instance = render_frame_host->GetSiteInstance(); |
| 2050 | 2047 |
| 2051 int opener_routing_id = MSG_ROUTING_NONE; | 2048 int opener_routing_id = MSG_ROUTING_NONE; |
| (...skipping 598 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2650 int RenderFrameHostManager::GetOpenerRoutingID(SiteInstance* instance) { | 2647 int RenderFrameHostManager::GetOpenerRoutingID(SiteInstance* instance) { |
| 2651 if (!frame_tree_node_->opener()) | 2648 if (!frame_tree_node_->opener()) |
| 2652 return MSG_ROUTING_NONE; | 2649 return MSG_ROUTING_NONE; |
| 2653 | 2650 |
| 2654 return frame_tree_node_->opener() | 2651 return frame_tree_node_->opener() |
| 2655 ->render_manager() | 2652 ->render_manager() |
| 2656 ->GetRoutingIdForSiteInstance(instance); | 2653 ->GetRoutingIdForSiteInstance(instance); |
| 2657 } | 2654 } |
| 2658 | 2655 |
| 2659 } // namespace content | 2656 } // namespace content |
| OLD | NEW |