OLD | NEW |
---|---|
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "content/browser/frame_host/render_frame_host_manager.h" | 5 #include "content/browser/frame_host/render_frame_host_manager.h" |
6 | 6 |
7 #include <utility> | 7 #include <utility> |
8 | 8 |
9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
10 #include "base/logging.h" | 10 #include "base/logging.h" |
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
153 ->render_manager() | 153 ->render_manager() |
154 ->current_frame_host() | 154 ->current_frame_host() |
155 ->GetSiteInstance() | 155 ->GetSiteInstance() |
156 ->GetId()); | 156 ->GetId()); |
157 if (iter == proxy_hosts_.end()) | 157 if (iter == proxy_hosts_.end()) |
158 return NULL; | 158 return NULL; |
159 | 159 |
160 return iter->second; | 160 return iter->second; |
161 } | 161 } |
162 | 162 |
163 RenderFrameProxyHost* RenderFrameHostManager::GetProxyToEmbedder() { | |
164 int64 embedder_frame_tree_node_id = delegate_->GetEmbedderFrameTreeNodeID(); | |
Charlie Reis
2015/05/19 07:12:31
nit: We've recently changed FTN IDs to be ints rat
lazyboy
2015/05/21 23:23:46
Done.
| |
165 FrameTreeNode* embedder_frame_tree_node = | |
166 FrameTreeNode::GloballyFindByID(embedder_frame_tree_node_id); | |
167 if (!embedder_frame_tree_node) | |
168 return nullptr; | |
169 | |
170 return GetRenderFrameProxyHost( | |
171 embedder_frame_tree_node->current_frame_host()->GetSiteInstance()); | |
172 } | |
173 | |
174 bool RenderFrameHostManager::IsGuest() { | |
175 return frame_tree_node_->IsMainFrame() && | |
Charlie Reis
2015/05/19 07:12:31
Why is this line needed? Is it important not to t
lazyboy
2015/05/21 23:23:46
I haven't started running subframes inside guest y
| |
176 delegate_->GetEmbedderFrameTreeNodeID() != -1; | |
177 } | |
178 | |
163 void RenderFrameHostManager::SetPendingWebUI(const GURL& url, int bindings) { | 179 void RenderFrameHostManager::SetPendingWebUI(const GURL& url, int bindings) { |
164 pending_web_ui_ = CreateWebUI(url, bindings); | 180 pending_web_ui_ = CreateWebUI(url, bindings); |
165 pending_and_current_web_ui_.reset(); | 181 pending_and_current_web_ui_.reset(); |
166 } | 182 } |
167 | 183 |
168 scoped_ptr<WebUIImpl> RenderFrameHostManager::CreateWebUI(const GURL& url, | 184 scoped_ptr<WebUIImpl> RenderFrameHostManager::CreateWebUI(const GURL& url, |
169 int bindings) { | 185 int bindings) { |
170 scoped_ptr<WebUIImpl> new_web_ui(delegate_->CreateWebUIForRenderManager(url)); | 186 scoped_ptr<WebUIImpl> new_web_ui(delegate_->CreateWebUIForRenderManager(url)); |
171 | 187 |
172 // If we have assigned (zero or more) bindings to this NavigationEntry in the | 188 // If we have assigned (zero or more) bindings to this NavigationEntry in the |
(...skipping 280 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
453 CommitPendingIfNecessary(render_frame_host, was_caused_by_user_gesture); | 469 CommitPendingIfNecessary(render_frame_host, was_caused_by_user_gesture); |
454 | 470 |
455 // Make sure any dynamic changes to this frame's sandbox flags that were made | 471 // Make sure any dynamic changes to this frame's sandbox flags that were made |
456 // prior to navigation take effect. | 472 // prior to navigation take effect. |
457 CommitPendingSandboxFlags(); | 473 CommitPendingSandboxFlags(); |
458 } | 474 } |
459 | 475 |
460 void RenderFrameHostManager::CommitPendingIfNecessary( | 476 void RenderFrameHostManager::CommitPendingIfNecessary( |
461 RenderFrameHostImpl* render_frame_host, | 477 RenderFrameHostImpl* render_frame_host, |
462 bool was_caused_by_user_gesture) { | 478 bool was_caused_by_user_gesture) { |
479 RenderFrameProxyHost* proxy_to_embedder = GetProxyToEmbedder(); | |
480 if (proxy_to_embedder) { | |
481 DCHECK(render_frame_host->GetSiteInstance()->GetSiteURL().SchemeIs( | |
482 "chrome-guest")); | |
483 // TODO(lazyboy): This probably breaks guest visibility. | |
484 current_host()->GetView()->Show(); | |
Charlie Reis
2015/05/19 07:12:31
Any thoughts yet on where this belongs? I don't t
lazyboy
2015/05/21 23:23:47
Not entirely yet, I've moved this outside of conte
| |
485 } | |
486 | |
463 if (!pending_render_frame_host_ && !speculative_render_frame_host_) { | 487 if (!pending_render_frame_host_ && !speculative_render_frame_host_) { |
464 DCHECK_IMPLIES(should_reuse_web_ui_, web_ui_); | 488 DCHECK_IMPLIES(should_reuse_web_ui_, web_ui_); |
465 | 489 |
466 // We should only hear this from our current renderer. | 490 // We should only hear this from our current renderer. |
467 DCHECK_EQ(render_frame_host_, render_frame_host); | 491 DCHECK_EQ(render_frame_host_, render_frame_host); |
468 | 492 |
469 // Even when there is no pending RVH, there may be a pending Web UI. | 493 // Even when there is no pending RVH, there may be a pending Web UI. |
470 if (pending_web_ui() || speculative_web_ui_) | 494 if (pending_web_ui() || speculative_web_ui_) |
471 CommitPending(); | 495 CommitPending(); |
472 return; | 496 return; |
(...skipping 1143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1616 | 1640 |
1617 // Recreate the opener chain. | 1641 // Recreate the opener chain. |
1618 int opener_route_id = | 1642 int opener_route_id = |
1619 delegate_->CreateOpenerRenderViewsForRenderManager(instance); | 1643 delegate_->CreateOpenerRenderViewsForRenderManager(instance); |
1620 RenderFrameProxyHost* proxy = GetRenderFrameProxyHost(instance); | 1644 RenderFrameProxyHost* proxy = GetRenderFrameProxyHost(instance); |
1621 InitRenderView(render_view_host, opener_route_id, proxy->GetRoutingID(), | 1645 InitRenderView(render_view_host, opener_route_id, proxy->GetRoutingID(), |
1622 source->IsMainFrame()); | 1646 source->IsMainFrame()); |
1623 proxy->set_render_frame_proxy_created(true); | 1647 proxy->set_render_frame_proxy_created(true); |
1624 } | 1648 } |
1625 | 1649 |
1650 int RenderFrameHostManager::CreateEmbedderProxy( | |
1651 SiteInstance* embedder_site_instance) { | |
1652 CHECK(base::CommandLine::ForCurrentProcess()->HasSwitch( | |
1653 switches::kSitePerProcess)); | |
1654 int embedder_proxy_flags = CREATE_RF_HIDDEN | CREATE_RF_SWAPPED_OUT | | |
1655 CREATE_RF_FOR_MAIN_FRAME_NAVIGATION; | |
1656 int swapped_out_render_view_routing_id; // Unused. | |
1657 scoped_ptr<RenderFrameHostImpl> swapped_out_embedder_rfh = CreateRenderFrame( | |
1658 embedder_site_instance, nullptr, | |
1659 MSG_ROUTING_NONE, // opener_route_id | |
1660 embedder_proxy_flags, &swapped_out_render_view_routing_id); | |
1661 | |
1662 RenderFrameProxyHost* rfph_in_embedder = | |
1663 GetRenderFrameProxyHost(embedder_site_instance); | |
1664 CHECK(rfph_in_embedder); | |
Charlie Reis
2015/05/19 07:12:31
DCHECK is sufficient if you want to document the i
lazyboy
2015/05/21 23:23:47
Done.
| |
1665 return rfph_in_embedder->GetRoutingID(); | |
1666 } | |
1667 | |
1668 void RenderFrameHostManager::ReplaceWithGuestProxy( | |
1669 int proxy_to_embedder_routing_id) { | |
1670 current_frame_host()->Send(new FrameMsg_SwapOut( | |
1671 current_frame_host()->GetRoutingID(), proxy_to_embedder_routing_id, | |
1672 false /* is_loading */, content::FrameReplicationState())); | |
1673 } | |
1674 | |
1675 void RenderFrameHostManager::SetGuestRWHView(RenderWidgetHostView* child_rwhv) { | |
1676 GetProxyToEmbedder()->SetChildRWHView(child_rwhv); | |
1677 } | |
1678 | |
1626 bool RenderFrameHostManager::InitRenderView( | 1679 bool RenderFrameHostManager::InitRenderView( |
1627 RenderViewHostImpl* render_view_host, | 1680 RenderViewHostImpl* render_view_host, |
1628 int opener_route_id, | 1681 int opener_route_id, |
1629 int proxy_routing_id, | 1682 int proxy_routing_id, |
1630 bool for_main_frame_navigation) { | 1683 bool for_main_frame_navigation) { |
1631 // We may have initialized this RenderViewHost for another RenderFrameHost. | 1684 // We may have initialized this RenderViewHost for another RenderFrameHost. |
1632 if (render_view_host->IsRenderViewLive()) | 1685 if (render_view_host->IsRenderViewLive()) |
1633 return true; | 1686 return true; |
1634 | 1687 |
1635 // If the ongoing navigation is to a WebUI and the RenderView is not in a | 1688 // If the ongoing navigation is to a WebUI and the RenderView is not in a |
(...skipping 497 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2133 void RenderFrameHostManager::DeleteRenderFrameProxyHost( | 2186 void RenderFrameHostManager::DeleteRenderFrameProxyHost( |
2134 SiteInstance* instance) { | 2187 SiteInstance* instance) { |
2135 RenderFrameProxyHostMap::iterator iter = proxy_hosts_.find(instance->GetId()); | 2188 RenderFrameProxyHostMap::iterator iter = proxy_hosts_.find(instance->GetId()); |
2136 if (iter != proxy_hosts_.end()) { | 2189 if (iter != proxy_hosts_.end()) { |
2137 delete iter->second; | 2190 delete iter->second; |
2138 proxy_hosts_.erase(iter); | 2191 proxy_hosts_.erase(iter); |
2139 } | 2192 } |
2140 } | 2193 } |
2141 | 2194 |
2142 } // namespace content | 2195 } // namespace content |
OLD | NEW |