Chromium Code Reviews| 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 5b74b1ed4afbf9be778ef147587d70dad5fb9b3a..e0cd2b7230a2da0e21495ab490d8b064bc4a69b0 100644 |
| --- a/content/browser/frame_host/render_frame_proxy_host.cc |
| +++ b/content/browser/frame_host/render_frame_proxy_host.cc |
| @@ -46,18 +46,24 @@ RenderFrameProxyHost::RenderFrameProxyHost(SiteInstance* site_instance, |
| site_instance_(site_instance), |
| process_(site_instance->GetProcess()), |
| frame_tree_node_(frame_tree_node), |
| - render_frame_proxy_created_(false) { |
| + render_frame_proxy_created_(false), |
| + pseudo_parent_frame_tree_node_id_(-1) { |
| GetProcess()->AddRoute(routing_id_, this); |
| CHECK(g_routing_id_frame_proxy_map.Get().insert( |
| std::make_pair( |
| RenderFrameProxyHostID(GetProcess()->GetID(), routing_id_), |
| this)).second); |
| - if (!frame_tree_node_->IsMainFrame() && |
| + bool is_proxy_to_embedder_for_guest = |
| + frame_tree_node_->IsMainFrame() && |
| + frame_tree_node_->render_manager()->current_frame_host() |
| + ->GetSiteInstance()->GetSiteURL().SchemeIs("chrome-guest"); |
|
Fady Samuel
2015/03/04 22:21:06
This is not feasible for guests that are not isola
Charlie Reis
2015/03/10 04:09:44
Tangent: what does "not isolated" mean here?
|
| + 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 +95,21 @@ void RenderFrameProxyHost::SetChildRWHView(RenderWidgetHostView* view) { |
| static_cast<RenderWidgetHostViewChildFrame*>(view)); |
| } |
| +void RenderFrameProxyHost::SetOverriddenParentFTNID( |
| + int64 pseudo_parent_frame_tree_node_id) { |
| + pseudo_parent_frame_tree_node_id_ = |
|
Charlie Reis
2015/03/10 04:09:44
embedder_frame_tree_node_id_
lazyboy
2015/04/01 21:47:57
Obsolete now.
|
| + pseudo_parent_frame_tree_node_id; |
| +} |
| + |
| RenderViewHostImpl* RenderFrameProxyHost::GetRenderViewHost() { |
|
Charlie Reis
2015/03/10 04:09:44
Note: We could probably just cache a pointer to th
lazyboy
2015/04/01 21:47:57
Added a TODO since we're not tracking embedder's F
|
| - return frame_tree_node_->frame_tree()->GetRenderViewHost( |
| - site_instance_.get()); |
| + FrameTree* ft = NULL; |
|
Charlie Reis
2015/03/10 04:09:44
embedder_frame_tree = nullptr;
|
| + if (pseudo_parent_frame_tree_node_id_ >= 0) { |
| + ft = FrameTree::GloballyFindByID( |
| + pseudo_parent_frame_tree_node_id_)->frame_tree(); |
| + } else { |
| + ft = frame_tree_node_->frame_tree(); |
| + } |
| + return ft->GetRenderViewHost(site_instance_.get()); |
| } |
| void RenderFrameProxyHost::TakeFrameHostOwnership( |