Chromium Code Reviews| 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(); | |
| 165 FrameTreeNode* embedder_frame_tree_node = | |
| 166 FrameTreeNode::GloballyFindByID(embedder_frame_tree_node_id); | |
| 167 if (!embedder_frame_tree_node) | |
| 168 return NULL; | |
|
Charlie Reis
2015/04/30 23:06:46
nullptr
lazyboy
2015/05/05 07:28:13
Done.
| |
| 169 | |
| 170 return GetRenderFrameProxyHost( | |
| 171 embedder_frame_tree_node->current_frame_host()->GetSiteInstance()); | |
| 172 } | |
| 173 | |
| 163 void RenderFrameHostManager::SetPendingWebUI(const GURL& url, int bindings) { | 174 void RenderFrameHostManager::SetPendingWebUI(const GURL& url, int bindings) { |
| 164 pending_web_ui_ = CreateWebUI(url, bindings); | 175 pending_web_ui_ = CreateWebUI(url, bindings); |
| 165 pending_and_current_web_ui_.reset(); | 176 pending_and_current_web_ui_.reset(); |
| 166 } | 177 } |
| 167 | 178 |
| 168 scoped_ptr<WebUIImpl> RenderFrameHostManager::CreateWebUI(const GURL& url, | 179 scoped_ptr<WebUIImpl> RenderFrameHostManager::CreateWebUI(const GURL& url, |
| 169 int bindings) { | 180 int bindings) { |
| 170 scoped_ptr<WebUIImpl> new_web_ui(delegate_->CreateWebUIForRenderManager(url)); | 181 scoped_ptr<WebUIImpl> new_web_ui(delegate_->CreateWebUIForRenderManager(url)); |
| 171 | 182 |
| 172 // If we have assigned (zero or more) bindings to this NavigationEntry in the | 183 // 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); | 464 CommitPendingIfNecessary(render_frame_host, was_caused_by_user_gesture); |
| 454 | 465 |
| 455 // Make sure any dynamic changes to this frame's sandbox flags that were made | 466 // Make sure any dynamic changes to this frame's sandbox flags that were made |
| 456 // prior to navigation take effect. | 467 // prior to navigation take effect. |
| 457 CommitPendingSandboxFlags(); | 468 CommitPendingSandboxFlags(); |
| 458 } | 469 } |
| 459 | 470 |
| 460 void RenderFrameHostManager::CommitPendingIfNecessary( | 471 void RenderFrameHostManager::CommitPendingIfNecessary( |
| 461 RenderFrameHostImpl* render_frame_host, | 472 RenderFrameHostImpl* render_frame_host, |
| 462 bool was_caused_by_user_gesture) { | 473 bool was_caused_by_user_gesture) { |
| 474 RenderFrameProxyHost* proxy_to_embedder = GetProxyToEmbedder(); | |
| 475 if (proxy_to_embedder) { | |
| 476 DCHECK(render_frame_host->GetSiteInstance() | |
| 477 ->GetSiteURL().SchemeIs("chrome-guest")); | |
| 478 // TODO(lazyboy): This probably breaks guest visibility. | |
| 479 current_host()->GetView()->Show(); | |
|
Charlie Reis
2015/04/30 23:06:46
This is not the right place to call Show. Please
lazyboy
2015/05/05 07:28:13
There's no CommitPending() pending call as swappin
| |
| 480 } | |
| 481 | |
| 463 if (!pending_render_frame_host_ && !speculative_render_frame_host_) { | 482 if (!pending_render_frame_host_ && !speculative_render_frame_host_) { |
| 464 DCHECK_IMPLIES(should_reuse_web_ui_, web_ui_); | 483 DCHECK_IMPLIES(should_reuse_web_ui_, web_ui_); |
| 465 | 484 |
| 466 // We should only hear this from our current renderer. | 485 // We should only hear this from our current renderer. |
| 467 DCHECK_EQ(render_frame_host_, render_frame_host); | 486 DCHECK_EQ(render_frame_host_, render_frame_host); |
| 468 | 487 |
| 469 // Even when there is no pending RVH, there may be a pending Web UI. | 488 // Even when there is no pending RVH, there may be a pending Web UI. |
| 470 if (pending_web_ui() || speculative_web_ui_) | 489 if (pending_web_ui() || speculative_web_ui_) |
| 471 CommitPending(); | 490 CommitPending(); |
| 472 return; | 491 return; |
| (...skipping 1111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1584 return; | 1603 return; |
| 1585 | 1604 |
| 1586 // Recreate the opener chain. | 1605 // Recreate the opener chain. |
| 1587 int opener_route_id = | 1606 int opener_route_id = |
| 1588 delegate_->CreateOpenerRenderViewsForRenderManager(instance); | 1607 delegate_->CreateOpenerRenderViewsForRenderManager(instance); |
| 1589 RenderFrameProxyHost* proxy = GetRenderFrameProxyHost(instance); | 1608 RenderFrameProxyHost* proxy = GetRenderFrameProxyHost(instance); |
| 1590 InitRenderView(render_view_host, opener_route_id, proxy->GetRoutingID(), | 1609 InitRenderView(render_view_host, opener_route_id, proxy->GetRoutingID(), |
| 1591 source->IsMainFrame()); | 1610 source->IsMainFrame()); |
| 1592 } | 1611 } |
| 1593 | 1612 |
| 1613 void RenderFrameHostManager::CreateEmbedderProxy( | |
| 1614 SiteInstance* embedder_site_instance, | |
| 1615 int* swapped_out_render_view_routing_id, | |
| 1616 int* proxy_routing_id) { | |
| 1617 DCHECK(base::CommandLine::ForCurrentProcess()->HasSwitch( | |
| 1618 switches::kSitePerProcess)); | |
| 1619 int embedder_proxy_flags = | |
| 1620 CREATE_RF_HIDDEN | | |
| 1621 CREATE_RF_SWAPPED_OUT | | |
| 1622 CREATE_RF_FOR_MAIN_FRAME_NAVIGATION; // TODO(lazyboy): Do we need this? | |
|
Charlie Reis
2015/04/30 23:06:46
This affects |for_main_frame_navigation| in WebCon
lazyboy
2015/05/05 07:28:13
Keeping FOR_MAIN_FRAME_NAVIGATION.
(there's also a
| |
| 1623 scoped_ptr<RenderFrameHostImpl> so_rfh_in_embedder = | |
|
Charlie Reis
2015/04/30 23:06:45
swapped_out_embedder_rfh
lazyboy
2015/05/05 07:28:13
Done.
| |
| 1624 CreateRenderFrame( | |
| 1625 embedder_site_instance, | |
| 1626 nullptr, | |
| 1627 MSG_ROUTING_NONE, // opener_route_id | |
| 1628 embedder_proxy_flags, | |
| 1629 swapped_out_render_view_routing_id); | |
| 1630 | |
| 1631 RenderFrameProxyHost* rfph_in_embedder = GetRenderFrameProxyHost( | |
| 1632 embedder_site_instance); | |
| 1633 DCHECK(rfph_in_embedder); | |
| 1634 *proxy_routing_id = rfph_in_embedder->GetRoutingID(); | |
| 1635 } | |
| 1636 | |
| 1637 void RenderFrameHostManager::ReplaceWithGuestProxy( | |
| 1638 int proxy_to_embedder_routing_id) { | |
| 1639 current_frame_host()->Send( | |
| 1640 new FrameMsg_ReplaceLocalFrameWithProxy( | |
|
Charlie Reis
2015/04/30 23:06:45
(I'm wondering if we should find a way to unify th
lazyboy
2015/05/05 07:28:13
Done as I got rid of the new IPC, using SwapOut IP
| |
| 1641 current_frame_host()->GetRoutingID(), | |
| 1642 proxy_to_embedder_routing_id)); | |
| 1643 } | |
| 1644 | |
| 1645 void RenderFrameHostManager::UpdateGuestRWHView( | |
| 1646 RenderWidgetHostView* child_rwhv) { | |
| 1647 GetProxyToEmbedder()->SetChildRWHView(child_rwhv); | |
| 1648 } | |
| 1649 | |
| 1594 bool RenderFrameHostManager::InitRenderView( | 1650 bool RenderFrameHostManager::InitRenderView( |
| 1595 RenderViewHostImpl* render_view_host, | 1651 RenderViewHostImpl* render_view_host, |
| 1596 int opener_route_id, | 1652 int opener_route_id, |
| 1597 int proxy_routing_id, | 1653 int proxy_routing_id, |
| 1598 bool for_main_frame_navigation) { | 1654 bool for_main_frame_navigation) { |
| 1599 // We may have initialized this RenderViewHost for another RenderFrameHost. | 1655 // We may have initialized this RenderViewHost for another RenderFrameHost. |
| 1600 if (render_view_host->IsRenderViewLive()) | 1656 if (render_view_host->IsRenderViewLive()) |
| 1601 return true; | 1657 return true; |
| 1602 | 1658 |
| 1603 // If the ongoing navigation is to a WebUI and the RenderView is not in a | 1659 // If the ongoing navigation is to a WebUI and the RenderView is not in a |
| (...skipping 481 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2085 void RenderFrameHostManager::DeleteRenderFrameProxyHost( | 2141 void RenderFrameHostManager::DeleteRenderFrameProxyHost( |
| 2086 SiteInstance* instance) { | 2142 SiteInstance* instance) { |
| 2087 RenderFrameProxyHostMap::iterator iter = proxy_hosts_.find(instance->GetId()); | 2143 RenderFrameProxyHostMap::iterator iter = proxy_hosts_.find(instance->GetId()); |
| 2088 if (iter != proxy_hosts_.end()) { | 2144 if (iter != proxy_hosts_.end()) { |
| 2089 delete iter->second; | 2145 delete iter->second; |
| 2090 proxy_hosts_.erase(iter); | 2146 proxy_hosts_.erase(iter); |
| 2091 } | 2147 } |
| 2092 } | 2148 } |
| 2093 | 2149 |
| 2094 } // namespace content | 2150 } // namespace content |
| OLD | NEW |