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

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: not using NPAPI bindings anymore, yay! 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 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() &&
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
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();
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 1122 matching lines...) Expand 10 before | Expand all | Expand 10 after
1595 return; 1619 return;
1596 1620
1597 // Recreate the opener chain. 1621 // Recreate the opener chain.
1598 int opener_route_id = 1622 int opener_route_id =
1599 delegate_->CreateOpenerRenderViewsForRenderManager(instance); 1623 delegate_->CreateOpenerRenderViewsForRenderManager(instance);
1600 RenderFrameProxyHost* proxy = GetRenderFrameProxyHost(instance); 1624 RenderFrameProxyHost* proxy = GetRenderFrameProxyHost(instance);
1601 InitRenderView(render_view_host, opener_route_id, proxy->GetRoutingID(), 1625 InitRenderView(render_view_host, opener_route_id, proxy->GetRoutingID(),
1602 source->IsMainFrame()); 1626 source->IsMainFrame());
1603 } 1627 }
1604 1628
1629 int RenderFrameHostManager::CreateEmbedderProxy(
1630 SiteInstance* embedder_site_instance) {
1631 DCHECK(base::CommandLine::ForCurrentProcess()->HasSwitch(
nasko 2015/05/05 21:34:49 nit: CHECK is fine too : )
lazyboy 2015/05/05 22:33:53 Done.
1632 switches::kSitePerProcess));
1633 int embedder_proxy_flags = CREATE_RF_HIDDEN | CREATE_RF_SWAPPED_OUT |
1634 CREATE_RF_FOR_MAIN_FRAME_NAVIGATION;
1635 int swapped_out_render_view_routing_id; // Unused.
1636 scoped_ptr<RenderFrameHostImpl> swapped_out_embedder_rfh = CreateRenderFrame(
1637 embedder_site_instance, nullptr,
1638 MSG_ROUTING_NONE, // opener_route_id
1639 embedder_proxy_flags, &swapped_out_render_view_routing_id);
1640
1641 RenderFrameProxyHost* rfph_in_embedder =
1642 GetRenderFrameProxyHost(embedder_site_instance);
1643 DCHECK(rfph_in_embedder);
nasko 2015/05/05 21:34:49 nit: CHECK
lazyboy 2015/05/05 22:33:53 Done.
1644 return rfph_in_embedder->GetRoutingID();
1645 }
1646
1647 void RenderFrameHostManager::ReplaceWithGuestProxy(
1648 int proxy_to_embedder_routing_id) {
1649 current_frame_host()->Send(new FrameMsg_SwapOut(
1650 current_frame_host()->GetRoutingID(), proxy_to_embedder_routing_id,
1651 false /* is_loading */, content::FrameReplicationState()));
1652 }
1653
1654 void RenderFrameHostManager::SetGuestRWHView(RenderWidgetHostView* child_rwhv) {
1655 GetProxyToEmbedder()->SetChildRWHView(child_rwhv);
1656 }
1657
1605 bool RenderFrameHostManager::InitRenderView( 1658 bool RenderFrameHostManager::InitRenderView(
1606 RenderViewHostImpl* render_view_host, 1659 RenderViewHostImpl* render_view_host,
1607 int opener_route_id, 1660 int opener_route_id,
1608 int proxy_routing_id, 1661 int proxy_routing_id,
1609 bool for_main_frame_navigation) { 1662 bool for_main_frame_navigation) {
1610 // We may have initialized this RenderViewHost for another RenderFrameHost. 1663 // We may have initialized this RenderViewHost for another RenderFrameHost.
1611 if (render_view_host->IsRenderViewLive()) 1664 if (render_view_host->IsRenderViewLive())
1612 return true; 1665 return true;
1613 1666
1614 // If the ongoing navigation is to a WebUI and the RenderView is not in a 1667 // 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
2096 void RenderFrameHostManager::DeleteRenderFrameProxyHost( 2149 void RenderFrameHostManager::DeleteRenderFrameProxyHost(
2097 SiteInstance* instance) { 2150 SiteInstance* instance) {
2098 RenderFrameProxyHostMap::iterator iter = proxy_hosts_.find(instance->GetId()); 2151 RenderFrameProxyHostMap::iterator iter = proxy_hosts_.find(instance->GetId());
2099 if (iter != proxy_hosts_.end()) { 2152 if (iter != proxy_hosts_.end()) {
2100 delete iter->second; 2153 delete iter->second;
2101 proxy_hosts_.erase(iter); 2154 proxy_hosts_.erase(iter);
2102 } 2155 }
2103 } 2156 }
2104 2157
2105 } // namespace content 2158 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698