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 f0f5808f74fecacce8b0224e4fb4b311ec91de8d..b78fb2002143db5a7c72ff5b19dbe6139af96544 100644 |
--- a/content/browser/frame_host/render_frame_proxy_host.cc |
+++ b/content/browser/frame_host/render_frame_proxy_host.cc |
@@ -60,11 +60,17 @@ RenderFrameProxyHost::RenderFrameProxyHost(SiteInstance* site_instance, |
CHECK(render_view_host_); |
frame_tree_node_->frame_tree()->AddRenderViewHostRef(render_view_host_); |
- if (!frame_tree_node_->IsMainFrame() && |
- frame_tree_node_->parent() |
- ->render_manager() |
- ->current_frame_host() |
- ->GetSiteInstance() == site_instance) { |
+ bool is_proxy_to_parent = !frame_tree_node_->IsMainFrame() && |
+ frame_tree_node_->parent() |
+ ->render_manager() |
+ ->current_frame_host() |
+ ->GetSiteInstance() == site_instance; |
+ |
+ // If this is a proxy to parent frame or this proxy is for the inner |
+ // WebContents's FrameTreeNode in outer WebContents's process, then we need a |
+ // CrossProcessFrameConnector. |
+ if (is_proxy_to_parent || |
+ frame_tree_node_->render_manager()->ForInnerDelegate()) { |
// 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 |