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

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: add basic postMessage test 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();
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698