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

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: some review comments addressed Created 5 years, 8 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 143 matching lines...) Expand 10 before | Expand all | Expand 10 after
154 ->render_manager() 154 ->render_manager()
155 ->current_frame_host() 155 ->current_frame_host()
156 ->GetSiteInstance() 156 ->GetSiteInstance()
157 ->GetId()); 157 ->GetId());
158 if (iter == proxy_hosts_.end()) 158 if (iter == proxy_hosts_.end())
159 return NULL; 159 return NULL;
160 160
161 return iter->second; 161 return iter->second;
162 } 162 }
163 163
164 RenderFrameProxyHost* RenderFrameHostManager::GetProxyToEmbedder() {
165 int64 embedder_frame_tree_node_id = delegate_->GetParentFrameTreeNodeID();
166 FrameTreeNode* embedder_frame_tree_node =
167 FrameTreeNode::GloballyFindByID(embedder_frame_tree_node_id);
168 if (!embedder_frame_tree_node)
169 return NULL;
170 RenderFrameProxyHostMap::iterator iter =
Charlie Reis 2015/04/08 23:42:11 Just use RenderFrameHostManager::GetRenderFramePro
lazyboy 2015/04/14 01:38:03 Done.
171 proxy_hosts_.find(embedder_frame_tree_node->render_manager()
Charlie Reis 2015/04/08 23:42:10 Use FrameTreeNode::current_frame_host(), skipping
lazyboy 2015/04/14 01:38:03 Done.
172 ->current_frame_host()->GetSiteInstance()
173 ->GetId());
174 if (iter == proxy_hosts_.end())
175 return NULL;
176 return iter->second;
177 }
178
164 void RenderFrameHostManager::SetPendingWebUI(const GURL& url, int bindings) { 179 void RenderFrameHostManager::SetPendingWebUI(const GURL& url, int bindings) {
165 pending_web_ui_ = CreateWebUI(url, bindings); 180 pending_web_ui_ = CreateWebUI(url, bindings);
166 pending_and_current_web_ui_.reset(); 181 pending_and_current_web_ui_.reset();
167 } 182 }
168 183
169 scoped_ptr<WebUIImpl> RenderFrameHostManager::CreateWebUI(const GURL& url, 184 scoped_ptr<WebUIImpl> RenderFrameHostManager::CreateWebUI(const GURL& url,
170 int bindings) { 185 int bindings) {
171 scoped_ptr<WebUIImpl> new_web_ui(delegate_->CreateWebUIForRenderManager(url)); 186 scoped_ptr<WebUIImpl> new_web_ui(delegate_->CreateWebUIForRenderManager(url));
172 187
173 // 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 274 matching lines...) Expand 10 before | Expand all | Expand 10 after
448 CommitPendingIfNecessary(render_frame_host, was_caused_by_user_gesture); 463 CommitPendingIfNecessary(render_frame_host, was_caused_by_user_gesture);
449 464
450 // Make sure any dynamic changes to this frame's sandbox flags that were made 465 // Make sure any dynamic changes to this frame's sandbox flags that were made
451 // prior to navigation take effect. 466 // prior to navigation take effect.
452 CommitPendingSandboxFlags(); 467 CommitPendingSandboxFlags();
453 } 468 }
454 469
455 void RenderFrameHostManager::CommitPendingIfNecessary( 470 void RenderFrameHostManager::CommitPendingIfNecessary(
456 RenderFrameHostImpl* render_frame_host, 471 RenderFrameHostImpl* render_frame_host,
457 bool was_caused_by_user_gesture) { 472 bool was_caused_by_user_gesture) {
473 RenderFrameProxyHost* proxy_to_embedder = GetProxyToEmbedder();
474 if (proxy_to_embedder) {
475 DCHECK(render_frame_host->GetSiteInstance()
476 ->GetSiteURL().SchemeIs("chrome-guest"));
477 proxy_to_embedder->SetChildRWHView(current_host()->GetView());
Charlie Reis 2015/04/08 23:42:10 Do you have to do this for every commit in the gue
lazyboy 2015/04/14 01:38:03 No, only the first time. I've moved this to WebCon
478 // TODO(lazyboy): This probably breaks guest visibility.
479 current_host()->GetView()->Show();
480 }
481
458 if (base::CommandLine::ForCurrentProcess()->HasSwitch( 482 if (base::CommandLine::ForCurrentProcess()->HasSwitch(
459 switches::kEnableBrowserSideNavigation)) { 483 switches::kEnableBrowserSideNavigation)) {
460 if (render_frame_host == speculative_render_frame_host_.get()) { 484 if (render_frame_host == speculative_render_frame_host_.get()) {
461 CommitPending(); 485 CommitPending();
462 } else if (render_frame_host == render_frame_host_.get()) { 486 } else if (render_frame_host == render_frame_host_.get()) {
463 // TODO(carlosk): this code doesn't properly handle in-page navigation or 487 // TODO(carlosk): this code doesn't properly handle in-page navigation or
464 // interwoven navigation requests. 488 // interwoven navigation requests.
465 DCHECK(!speculative_render_frame_host_); 489 DCHECK(!speculative_render_frame_host_);
466 } else { 490 } else {
467 // No one else should be sending us a DidNavigate in this state. 491 // No one else should be sending us a DidNavigate in this state.
(...skipping 1052 matching lines...) Expand 10 before | Expand all | Expand 10 after
1520 return; 1544 return;
1521 1545
1522 // Recreate the opener chain. 1546 // Recreate the opener chain.
1523 int opener_route_id = 1547 int opener_route_id =
1524 delegate_->CreateOpenerRenderViewsForRenderManager(instance); 1548 delegate_->CreateOpenerRenderViewsForRenderManager(instance);
1525 RenderFrameProxyHost* proxy = GetRenderFrameProxyHost(instance); 1549 RenderFrameProxyHost* proxy = GetRenderFrameProxyHost(instance);
1526 InitRenderView(render_view_host, opener_route_id, proxy->GetRoutingID(), 1550 InitRenderView(render_view_host, opener_route_id, proxy->GetRoutingID(),
1527 source->IsMainFrame()); 1551 source->IsMainFrame());
1528 } 1552 }
1529 1553
1554 int RenderFrameHostManager::CreateEmbedderProxy(
1555 SiteInstance* embedder_site_instance,
1556 int* swapped_out_render_view_routing_id) {
1557 int embedder_proxy_flags =
1558 CREATE_RF_HIDDEN |
1559 CREATE_RF_SWAPPED_OUT |
1560 CREATE_RF_FOR_MAIN_FRAME_NAVIGATION; // TODO(lazyboy): Do we need this?
1561 scoped_ptr<RenderFrameHostImpl> so_rfh_in_embedder =
1562 CreateRenderFrame(
1563 embedder_site_instance,
1564 nullptr,
1565 MSG_ROUTING_NONE, // opener_route_id
1566 embedder_proxy_flags,
1567 swapped_out_render_view_routing_id);
1568
1569 RenderFrameProxyHost* rfph_in_embedder = GetRenderFrameProxyHost(
1570 embedder_site_instance);
1571 DCHECK(rfph_in_embedder);
1572 return rfph_in_embedder->GetRoutingID();
1573 }
1574
1575 void RenderFrameHostManager::ReplaceWithGuestProxy(
1576 int proxy_to_embedder_routing_id) {
1577 current_frame_host()->Send(
1578 new FrameMsg_ReplaceLocalFrameWithProxy(
1579 current_frame_host()->GetRoutingID(),
1580 proxy_to_embedder_routing_id));
1581 }
1582
1530 bool RenderFrameHostManager::InitRenderView( 1583 bool RenderFrameHostManager::InitRenderView(
1531 RenderViewHostImpl* render_view_host, 1584 RenderViewHostImpl* render_view_host,
1532 int opener_route_id, 1585 int opener_route_id,
1533 int proxy_routing_id, 1586 int proxy_routing_id,
1534 bool for_main_frame_navigation) { 1587 bool for_main_frame_navigation) {
1535 // We may have initialized this RenderViewHost for another RenderFrameHost. 1588 // We may have initialized this RenderViewHost for another RenderFrameHost.
1536 if (render_view_host->IsRenderViewLive()) 1589 if (render_view_host->IsRenderViewLive())
1537 return true; 1590 return true;
1538 1591
1539 // If the ongoing navigation is to a WebUI and the RenderView is not in a 1592 // If the ongoing navigation is to a WebUI and the RenderView is not in a
(...skipping 479 matching lines...) Expand 10 before | Expand all | Expand 10 after
2019 void RenderFrameHostManager::DeleteRenderFrameProxyHost( 2072 void RenderFrameHostManager::DeleteRenderFrameProxyHost(
2020 SiteInstance* instance) { 2073 SiteInstance* instance) {
2021 RenderFrameProxyHostMap::iterator iter = proxy_hosts_.find(instance->GetId()); 2074 RenderFrameProxyHostMap::iterator iter = proxy_hosts_.find(instance->GetId());
2022 if (iter != proxy_hosts_.end()) { 2075 if (iter != proxy_hosts_.end()) {
2023 delete iter->second; 2076 delete iter->second;
2024 proxy_hosts_.erase(iter); 2077 proxy_hosts_.erase(iter);
2025 } 2078 }
2026 } 2079 }
2027 2080
2028 } // namespace content 2081 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698