Chromium Code Reviews| 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 4389f931e5d9565f5b36c93f4cd104517d65d28d..1368dd80b9d61d47d4cea372e7ab617153cb9c89 100644 | 
| --- a/content/browser/frame_host/render_frame_host_manager.cc | 
| +++ b/content/browser/frame_host/render_frame_host_manager.cc | 
| @@ -144,6 +144,20 @@ RenderWidgetHostView* RenderFrameHostManager::GetRenderWidgetHostView() const { | 
| return nullptr; | 
| } | 
| +RenderViewHostImpl* | 
| +RenderFrameHostManager::GetOuterRenderViewHostForKeyboardInput() { | 
| + if (!ForInnerDelegate()) | 
| + return nullptr; | 
| + | 
| + FrameTreeNode* outer_contents_frame_tree_node = | 
| + FrameTreeNode::GloballyFindByID( | 
| + delegate_->GetOuterDelegateFrameTreeNodeID()); | 
| + return outer_contents_frame_tree_node->frame_tree()->GetRenderViewHost( | 
| + outer_contents_frame_tree_node->render_manager() | 
| + ->current_frame_host() | 
| + ->GetSiteInstance()); | 
| 
 
lfg
2015/05/26 19:18:15
Can this be done with ftn->current_frame_host()->r
 
nasko
2015/05/28 22:13:46
I think it can. Is there a reason why we don't use
 
lazyboy
2015/05/29 00:02:24
Done.
 
 | 
| +} | 
| + | 
| RenderFrameProxyHost* RenderFrameHostManager::GetProxyToParent() { | 
| if (frame_tree_node_->IsMainFrame()) | 
| return NULL; | 
| @@ -160,6 +174,26 @@ RenderFrameProxyHost* RenderFrameHostManager::GetProxyToParent() { | 
| return iter->second; | 
| } | 
| +RenderFrameProxyHost* RenderFrameHostManager::GetProxyToOuterDelegate() { | 
| + int outer_contents_frame_tree_node_id = | 
| + delegate_->GetOuterDelegateFrameTreeNodeID(); | 
| + FrameTreeNode* outer_contents_frame_tree_node = | 
| + FrameTreeNode::GloballyFindByID(outer_contents_frame_tree_node_id); | 
| + if (!outer_contents_frame_tree_node) | 
| + return nullptr; | 
| + | 
| + return GetRenderFrameProxyHost( | 
| + outer_contents_frame_tree_node->current_frame_host()->GetSiteInstance()); | 
| +} | 
| + | 
| +bool RenderFrameHostManager::ForInnerDelegate() { | 
| + // TODO(lazyboy): We should remove IsMainFrame() check below since any frames | 
| 
 
nasko
2015/05/28 22:13:46
What prevents us from removing it now?
 
lazyboy
2015/05/29 00:02:23
I haven't started testing frame inside <webview> y
 
 | 
| + // in the inner WebContents should be treated as a part of inner | 
| + // WebContents/Delegate. | 
| + return frame_tree_node_->IsMainFrame() && | 
| + delegate_->GetOuterDelegateFrameTreeNodeID() != -1; | 
| +} | 
| + | 
| void RenderFrameHostManager::SetPendingWebUI(const GURL& url, int bindings) { | 
| pending_web_ui_ = CreateWebUI(url, bindings); | 
| pending_and_current_web_ui_.reset(); | 
| @@ -1604,6 +1638,38 @@ void RenderFrameHostManager::EnsureRenderViewInitialized( | 
| proxy->set_render_frame_proxy_created(true); | 
| } | 
| +int RenderFrameHostManager::CreateOuterDelegateProxy( | 
| + SiteInstance* outer_contents_site_instance) { | 
| + CHECK(base::CommandLine::ForCurrentProcess()->HasSwitch( | 
| + switches::kSitePerProcess)); | 
| + int outer_contents_proxy_flags = CREATE_RF_HIDDEN | CREATE_RF_SWAPPED_OUT | | 
| + CREATE_RF_FOR_MAIN_FRAME_NAVIGATION; | 
| + int swapped_out_render_view_routing_id; // Unused. | 
| + scoped_ptr<RenderFrameHostImpl> swapped_out_rfh_in_outer_contents = | 
| + CreateRenderFrame(outer_contents_site_instance, nullptr, | 
| + MSG_ROUTING_NONE, // opener_route_id | 
| + outer_contents_proxy_flags, | 
| + &swapped_out_render_view_routing_id); | 
| + | 
| + RenderFrameProxyHost* rfph_in_outer_contents = | 
| + GetRenderFrameProxyHost(outer_contents_site_instance); | 
| + DCHECK(rfph_in_outer_contents); | 
| + return rfph_in_outer_contents->GetRoutingID(); | 
| +} | 
| + | 
| +void RenderFrameHostManager::SwapFrameWithProxy( | 
| + int proxy_to_outer_delegate_routing_id) { | 
| + // TODO(lazyboy): Setting |is_loading| to false is probably wrong, fix. | 
| + current_frame_host()->Send(new FrameMsg_SwapOut( | 
| + current_frame_host()->GetRoutingID(), proxy_to_outer_delegate_routing_id, | 
| + false /* is_loading */, FrameReplicationState())); | 
| +} | 
| + | 
| +void RenderFrameHostManager::SetRWHViewForInnerContents( | 
| + RenderWidgetHostView* child_rwhv) { | 
| + GetProxyToOuterDelegate()->SetChildRWHView(child_rwhv); | 
| +} | 
| + | 
| bool RenderFrameHostManager::InitRenderView( | 
| RenderViewHostImpl* render_view_host, | 
| int opener_route_id, |