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

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

Issue 1262563003: Subframes in inner WebContents should not create proxies in process of outer WebContents. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: address comments from lfg@ Created 5 years, 4 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 <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 245 matching lines...) Expand 10 before | Expand all | Expand 10 after
256 256
257 RenderWidgetHostView* RenderFrameHostManager::GetRenderWidgetHostView() const { 257 RenderWidgetHostView* RenderFrameHostManager::GetRenderWidgetHostView() const {
258 if (interstitial_page_) 258 if (interstitial_page_)
259 return interstitial_page_->GetView(); 259 return interstitial_page_->GetView();
260 if (render_frame_host_) 260 if (render_frame_host_)
261 return render_frame_host_->GetView(); 261 return render_frame_host_->GetView();
262 return nullptr; 262 return nullptr;
263 } 263 }
264 264
265 bool RenderFrameHostManager::ForInnerDelegate() { 265 bool RenderFrameHostManager::ForInnerDelegate() {
266 // TODO(lazyboy): Subframes inside inner WebContents needs to be tested and 266 return delegate_->GetOuterDelegateFrameTreeNodeID() !=
267 // we have to make sure that IsMainFrame() check below is appropriate. See 267 FrameTreeNode::kFrameTreeNodeInvalidID;
268 // http://crbug.com/500957.
269 return frame_tree_node_->IsMainFrame() &&
270 delegate_->GetOuterDelegateFrameTreeNodeID() !=
271 FrameTreeNode::kFrameTreeNodeInvalidID;
272 } 268 }
273 269
274 RenderWidgetHostImpl* 270 RenderWidgetHostImpl*
275 RenderFrameHostManager::GetOuterRenderWidgetHostForKeyboardInput() { 271 RenderFrameHostManager::GetOuterRenderWidgetHostForKeyboardInput() {
276 if (!ForInnerDelegate()) 272 if (!ForInnerDelegate() || !frame_tree_node_->IsMainFrame())
277 return nullptr; 273 return nullptr;
278 274
279 FrameTreeNode* outer_contents_frame_tree_node = 275 FrameTreeNode* outer_contents_frame_tree_node =
280 FrameTreeNode::GloballyFindByID( 276 FrameTreeNode::GloballyFindByID(
281 delegate_->GetOuterDelegateFrameTreeNodeID()); 277 delegate_->GetOuterDelegateFrameTreeNodeID());
282 return outer_contents_frame_tree_node->parent() 278 return outer_contents_frame_tree_node->parent()
283 ->current_frame_host() 279 ->current_frame_host()
284 ->render_view_host(); 280 ->render_view_host();
285 } 281 }
286 282
(...skipping 1493 matching lines...) Expand 10 before | Expand all | Expand 10 after
1780 proxy->set_render_frame_proxy_created(true); 1776 proxy->set_render_frame_proxy_created(true);
1781 } else { 1777 } else {
1782 proxy->InitRenderFrameProxy(); 1778 proxy->InitRenderFrameProxy();
1783 } 1779 }
1784 1780
1785 return proxy->GetRoutingID(); 1781 return proxy->GetRoutingID();
1786 } 1782 }
1787 1783
1788 void RenderFrameHostManager::CreateProxiesForChildFrame(FrameTreeNode* child) { 1784 void RenderFrameHostManager::CreateProxiesForChildFrame(FrameTreeNode* child) {
1789 for (const auto& pair : *proxy_hosts_) { 1785 for (const auto& pair : *proxy_hosts_) {
1786 // Do not create proxies for subframes in the outer delegate's process,
1787 // since the outer delegate does not need to interact with them.
1788 if (ForInnerDelegate() && pair.second == GetProxyToOuterDelegate())
1789 continue;
1790
1790 child->render_manager()->CreateRenderFrameProxy( 1791 child->render_manager()->CreateRenderFrameProxy(
1791 pair.second->GetSiteInstance()); 1792 pair.second->GetSiteInstance());
1792 } 1793 }
1793 } 1794 }
1794 1795
1795 void RenderFrameHostManager::EnsureRenderViewInitialized( 1796 void RenderFrameHostManager::EnsureRenderViewInitialized(
1796 RenderViewHostImpl* render_view_host, 1797 RenderViewHostImpl* render_view_host,
1797 SiteInstance* instance) { 1798 SiteInstance* instance) {
1798 DCHECK(frame_tree_node_->IsMainFrame()); 1799 DCHECK(frame_tree_node_->IsMainFrame());
1799 1800
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
1831 // TODO(lazyboy): This |is_loading| behavior might not be what we want, 1832 // TODO(lazyboy): This |is_loading| behavior might not be what we want,
1832 // investigate and fix. 1833 // investigate and fix.
1833 render_frame_host->Send(new FrameMsg_SwapOut( 1834 render_frame_host->Send(new FrameMsg_SwapOut(
1834 render_frame_host->GetRoutingID(), proxy->GetRoutingID(), 1835 render_frame_host->GetRoutingID(), proxy->GetRoutingID(),
1835 false /* is_loading */, FrameReplicationState())); 1836 false /* is_loading */, FrameReplicationState()));
1836 proxy->set_render_frame_proxy_created(true); 1837 proxy->set_render_frame_proxy_created(true);
1837 } 1838 }
1838 1839
1839 void RenderFrameHostManager::SetRWHViewForInnerContents( 1840 void RenderFrameHostManager::SetRWHViewForInnerContents(
1840 RenderWidgetHostView* child_rwhv) { 1841 RenderWidgetHostView* child_rwhv) {
1841 DCHECK(ForInnerDelegate()); 1842 DCHECK(ForInnerDelegate() && frame_tree_node_->IsMainFrame());
1842 GetProxyToOuterDelegate()->SetChildRWHView(child_rwhv); 1843 GetProxyToOuterDelegate()->SetChildRWHView(child_rwhv);
1843 } 1844 }
1844 1845
1845 bool RenderFrameHostManager::InitRenderView( 1846 bool RenderFrameHostManager::InitRenderView(
1846 RenderViewHostImpl* render_view_host, 1847 RenderViewHostImpl* render_view_host,
1847 int proxy_routing_id, 1848 int proxy_routing_id,
1848 bool for_main_frame_navigation) { 1849 bool for_main_frame_navigation) {
1849 // Ensure the renderer process is initialized before creating the 1850 // Ensure the renderer process is initialized before creating the
1850 // RenderView. 1851 // RenderView.
1851 if (!render_view_host->GetProcess()->Init()) 1852 if (!render_view_host->GetProcess()->Init())
(...skipping 584 matching lines...) Expand 10 before | Expand all | Expand 10 after
2436 int RenderFrameHostManager::GetOpenerRoutingID(SiteInstance* instance) { 2437 int RenderFrameHostManager::GetOpenerRoutingID(SiteInstance* instance) {
2437 if (!frame_tree_node_->opener()) 2438 if (!frame_tree_node_->opener())
2438 return MSG_ROUTING_NONE; 2439 return MSG_ROUTING_NONE;
2439 2440
2440 return frame_tree_node_->opener() 2441 return frame_tree_node_->opener()
2441 ->render_manager() 2442 ->render_manager()
2442 ->GetRoutingIdForSiteInstance(instance); 2443 ->GetRoutingIdForSiteInstance(instance);
2443 } 2444 }
2444 2445
2445 } // namespace content 2446 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/frame_host/render_frame_host_manager.h ('k') | content/browser/frame_host/render_frame_proxy_host.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698