| 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 18890339a74b76ed4f2293c1bc742e6372f42fb6..a9e3021b2696e02b0cb0cf5db5758da1b84b855c 100644 | 
| --- a/content/browser/frame_host/render_frame_host_manager.cc | 
| +++ b/content/browser/frame_host/render_frame_host_manager.cc | 
| @@ -263,17 +263,13 @@ RenderWidgetHostView* RenderFrameHostManager::GetRenderWidgetHostView() const { | 
| } | 
|  | 
| bool RenderFrameHostManager::ForInnerDelegate() { | 
| -  // TODO(lazyboy): Subframes inside inner WebContents needs to be tested and | 
| -  // we have to make sure that IsMainFrame() check below is appropriate. See | 
| -  // http://crbug.com/500957. | 
| -  return frame_tree_node_->IsMainFrame() && | 
| -         delegate_->GetOuterDelegateFrameTreeNodeID() != | 
| -             FrameTreeNode::kFrameTreeNodeInvalidID; | 
| +  return delegate_->GetOuterDelegateFrameTreeNodeID() != | 
| +      FrameTreeNode::kFrameTreeNodeInvalidID; | 
| } | 
|  | 
| RenderWidgetHostImpl* | 
| RenderFrameHostManager::GetOuterRenderWidgetHostForKeyboardInput() { | 
| -  if (!ForInnerDelegate()) | 
| +  if (!ForInnerDelegate() || !frame_tree_node_->IsMainFrame()) | 
| return nullptr; | 
|  | 
| FrameTreeNode* outer_contents_frame_tree_node = | 
| @@ -1787,6 +1783,11 @@ int RenderFrameHostManager::CreateRenderFrameProxy(SiteInstance* instance) { | 
|  | 
| void RenderFrameHostManager::CreateProxiesForChildFrame(FrameTreeNode* child) { | 
| for (const auto& pair : *proxy_hosts_) { | 
| +    // Do not create proxies for subframes in the outer delegate's process, | 
| +    // since the outer delegate does not need to interact with them. | 
| +    if (ForInnerDelegate() && pair.second == GetProxyToOuterDelegate()) | 
| +      continue; | 
| + | 
| child->render_manager()->CreateRenderFrameProxy( | 
| pair.second->GetSiteInstance()); | 
| } | 
| @@ -1838,7 +1839,7 @@ void RenderFrameHostManager::CreateOuterDelegateProxy( | 
|  | 
| void RenderFrameHostManager::SetRWHViewForInnerContents( | 
| RenderWidgetHostView* child_rwhv) { | 
| -  DCHECK(ForInnerDelegate()); | 
| +  DCHECK(ForInnerDelegate() && frame_tree_node_->IsMainFrame()); | 
| GetProxyToOuterDelegate()->SetChildRWHView(child_rwhv); | 
| } | 
|  | 
|  |