Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1)

Side by Side Diff: content/browser/frame_host/render_frame_host_manager.cc

Issue 972313002: Make <webview> use out-of-process iframe architecture. (Closed) Base URL: ssh://saopaulo.wat/mnt/dev/shared/src@testoopif2z-better-chrome
Patch Set: Make <webview> work without --site-per-process as well Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698