| Index: content/browser/frame_host/render_frame_proxy_host.cc | 
| diff --git a/content/browser/frame_host/render_frame_proxy_host.cc b/content/browser/frame_host/render_frame_proxy_host.cc | 
| index 988f9e876b4bdc989331f534aed27ff9014d36f5..115e2a5b4fccd42f0bee46989afed8c31b486836 100644 | 
| --- a/content/browser/frame_host/render_frame_proxy_host.cc | 
| +++ b/content/browser/frame_host/render_frame_proxy_host.cc | 
| @@ -53,11 +53,18 @@ RenderFrameProxyHost::RenderFrameProxyHost(SiteInstance* site_instance, | 
| RenderFrameProxyHostID(GetProcess()->GetID(), routing_id_), | 
| this)).second); | 
|  | 
| -  if (!frame_tree_node_->IsMainFrame() && | 
| +  // If this is a proxy to embedder created in the guest's FTN, then we | 
| +  // need a CrossProcessFrameConnector. | 
| +  bool is_proxy_to_embedder_for_guest = | 
| +      frame_tree_node_->IsMainFrame() && | 
| +      frame_tree_node_->render_manager()->current_frame_host() | 
| +          ->GetSiteInstance()->GetSiteURL().SchemeIs("chrome-guest"); | 
| +  if ((!frame_tree_node_->IsMainFrame() && | 
| frame_tree_node_->parent() | 
| ->render_manager() | 
| ->current_frame_host() | 
| -              ->GetSiteInstance() == site_instance) { | 
| +              ->GetSiteInstance() == site_instance) || | 
| +      is_proxy_to_embedder_for_guest) { | 
| // The RenderFrameHost navigating cross-process is destroyed and a proxy for | 
| // it is created in the parent's process. CrossProcessFrameConnector | 
| // initialization only needs to happen on an initial cross-process | 
| @@ -89,9 +96,17 @@ void RenderFrameProxyHost::SetChildRWHView(RenderWidgetHostView* view) { | 
| static_cast<RenderWidgetHostViewChildFrame*>(view)); | 
| } | 
|  | 
| +// TODO(lazyboy): We can probably cache a pointer to RVH in this class | 
| +// as we do in RenderFrameHostImpl. | 
| RenderViewHostImpl* RenderFrameProxyHost::GetRenderViewHost() { | 
| -  return frame_tree_node_->frame_tree()->GetRenderViewHost( | 
| -      site_instance_.get()); | 
| +  // RVH of embedder site instance does not live in the guest RFHM, we need | 
| +  // to look it up in the embedder's FrameTree. | 
| +  RenderFrameProxyHost* proxy_to_embedder = | 
| +      frame_tree_node_->render_manager()->GetProxyToEmbedder(); | 
| +  FrameTree* frame_tree = proxy_to_embedder ? | 
| +      proxy_to_embedder->frame_tree_node_->frame_tree() : | 
| +      frame_tree_node_->frame_tree(); | 
| +  return frame_tree->GetRenderViewHost(site_instance_.get()); | 
| } | 
|  | 
| void RenderFrameProxyHost::TakeFrameHostOwnership( | 
|  |