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

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

Issue 1359163005: Remove surface_id from RenderWidget/RenderWidgetHost and friends (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@channel_creation_preempt
Patch Set: fix more tests Created 5 years, 2 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 <algorithm> 7 #include <algorithm>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/command_line.h" 10 #include "base/command_line.h"
11 #include "base/logging.h" 11 #include "base/logging.h"
12 #include "base/stl_util.h" 12 #include "base/stl_util.h"
13 #include "base/trace_event/trace_event.h" 13 #include "base/trace_event/trace_event.h"
14 #include "content/browser/child_process_security_policy_impl.h" 14 #include "content/browser/child_process_security_policy_impl.h"
15 #include "content/browser/devtools/render_frame_devtools_agent_host.h" 15 #include "content/browser/devtools/render_frame_devtools_agent_host.h"
16 #include "content/browser/frame_host/cross_site_transferring_request.h" 16 #include "content/browser/frame_host/cross_site_transferring_request.h"
17 #include "content/browser/frame_host/debug_urls.h" 17 #include "content/browser/frame_host/debug_urls.h"
18 #include "content/browser/frame_host/frame_navigation_entry.h" 18 #include "content/browser/frame_host/frame_navigation_entry.h"
19 #include "content/browser/frame_host/interstitial_page_impl.h" 19 #include "content/browser/frame_host/interstitial_page_impl.h"
20 #include "content/browser/frame_host/navigation_controller_impl.h" 20 #include "content/browser/frame_host/navigation_controller_impl.h"
21 #include "content/browser/frame_host/navigation_entry_impl.h" 21 #include "content/browser/frame_host/navigation_entry_impl.h"
22 #include "content/browser/frame_host/navigation_handle_impl.h" 22 #include "content/browser/frame_host/navigation_handle_impl.h"
23 #include "content/browser/frame_host/navigation_request.h" 23 #include "content/browser/frame_host/navigation_request.h"
24 #include "content/browser/frame_host/navigator.h" 24 #include "content/browser/frame_host/navigator.h"
25 #include "content/browser/frame_host/render_frame_host_factory.h" 25 #include "content/browser/frame_host/render_frame_host_factory.h"
26 #include "content/browser/frame_host/render_frame_host_impl.h" 26 #include "content/browser/frame_host/render_frame_host_impl.h"
27 #include "content/browser/frame_host/render_frame_proxy_host.h" 27 #include "content/browser/frame_host/render_frame_proxy_host.h"
28 #include "content/browser/gpu/gpu_surface_tracker.h"
29 #include "content/browser/renderer_host/render_process_host_impl.h" 28 #include "content/browser/renderer_host/render_process_host_impl.h"
30 #include "content/browser/renderer_host/render_view_host_factory.h" 29 #include "content/browser/renderer_host/render_view_host_factory.h"
31 #include "content/browser/renderer_host/render_view_host_impl.h" 30 #include "content/browser/renderer_host/render_view_host_impl.h"
32 #include "content/browser/site_instance_impl.h" 31 #include "content/browser/site_instance_impl.h"
33 #include "content/browser/webui/web_ui_controller_factory_registry.h" 32 #include "content/browser/webui/web_ui_controller_factory_registry.h"
34 #include "content/browser/webui/web_ui_impl.h" 33 #include "content/browser/webui/web_ui_impl.h"
35 #include "content/common/frame_messages.h" 34 #include "content/common/frame_messages.h"
36 #include "content/common/site_isolation_policy.h" 35 #include "content/common/site_isolation_policy.h"
37 #include "content/common/view_messages.h" 36 #include "content/common/view_messages.h"
38 #include "content/public/browser/content_browser_client.h" 37 #include "content/public/browser/content_browser_client.h"
(...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after
251 web_ui_.reset(); 250 web_ui_.reset();
252 251
253 // We should always have a current RenderFrameHost except in some tests. 252 // We should always have a current RenderFrameHost except in some tests.
254 SetRenderFrameHost(scoped_ptr<RenderFrameHostImpl>()); 253 SetRenderFrameHost(scoped_ptr<RenderFrameHostImpl>());
255 } 254 }
256 255
257 void RenderFrameHostManager::Init(BrowserContext* browser_context, 256 void RenderFrameHostManager::Init(BrowserContext* browser_context,
258 SiteInstance* site_instance, 257 SiteInstance* site_instance,
259 int32 view_routing_id, 258 int32 view_routing_id,
260 int32 frame_routing_id, 259 int32 frame_routing_id,
261 int32 widget_routing_id, 260 int32 widget_routing_id) {
262 int32 surface_id) {
263 // Create a RenderViewHost and RenderFrameHost, once we have an instance. It 261 // Create a RenderViewHost and RenderFrameHost, once we have an instance. It
264 // is important to immediately give this SiteInstance to a RenderViewHost so 262 // is important to immediately give this SiteInstance to a RenderViewHost so
265 // that the SiteInstance is ref counted. 263 // that the SiteInstance is ref counted.
266 if (!site_instance) 264 if (!site_instance)
267 site_instance = SiteInstance::Create(browser_context); 265 site_instance = SiteInstance::Create(browser_context);
268 266
269 int flags = delegate_->IsHidden() ? CREATE_RF_HIDDEN : 0; 267 int flags = delegate_->IsHidden() ? CREATE_RF_HIDDEN : 0;
270 SetRenderFrameHost(CreateRenderFrameHost(site_instance, view_routing_id, 268 SetRenderFrameHost(CreateRenderFrameHost(site_instance, view_routing_id,
271 frame_routing_id, widget_routing_id, 269 frame_routing_id, widget_routing_id,
272 surface_id, flags)); 270 flags));
273 271
274 // Notify the delegate of the creation of the current RenderFrameHost. 272 // Notify the delegate of the creation of the current RenderFrameHost.
275 // Do this only for subframes, as the main frame case is taken care of by 273 // Do this only for subframes, as the main frame case is taken care of by
276 // WebContentsImpl::Init. 274 // WebContentsImpl::Init.
277 if (!frame_tree_node_->IsMainFrame()) { 275 if (!frame_tree_node_->IsMainFrame()) {
278 delegate_->NotifySwappedFromRenderManager( 276 delegate_->NotifySwappedFromRenderManager(
279 nullptr, render_frame_host_.get(), false); 277 nullptr, render_frame_host_.get(), false);
280 } 278 }
281 } 279 }
282 280
(...skipping 1349 matching lines...) Expand 10 before | Expand all | Expand 10 after
1632 if (ancestor_rfh->GetSiteInstance() != current_instance) 1630 if (ancestor_rfh->GetSiteInstance() != current_instance)
1633 CreateRenderFrameProxy(ancestor_rfh->GetSiteInstance()); 1631 CreateRenderFrameProxy(ancestor_rfh->GetSiteInstance());
1634 } 1632 }
1635 } 1633 }
1636 1634
1637 scoped_ptr<RenderFrameHostImpl> RenderFrameHostManager::CreateRenderFrameHost( 1635 scoped_ptr<RenderFrameHostImpl> RenderFrameHostManager::CreateRenderFrameHost(
1638 SiteInstance* site_instance, 1636 SiteInstance* site_instance,
1639 int32 view_routing_id, 1637 int32 view_routing_id,
1640 int32 frame_routing_id, 1638 int32 frame_routing_id,
1641 int32 widget_routing_id, 1639 int32 widget_routing_id,
1642 int32 surface_id,
1643 int flags) { 1640 int flags) {
1644 if (frame_routing_id == MSG_ROUTING_NONE) 1641 if (frame_routing_id == MSG_ROUTING_NONE)
1645 frame_routing_id = site_instance->GetProcess()->GetNextRoutingID(); 1642 frame_routing_id = site_instance->GetProcess()->GetNextRoutingID();
1646 1643
1647 bool swapped_out = !!(flags & CREATE_RF_SWAPPED_OUT); 1644 bool swapped_out = !!(flags & CREATE_RF_SWAPPED_OUT);
1648 bool hidden = !!(flags & CREATE_RF_HIDDEN); 1645 bool hidden = !!(flags & CREATE_RF_HIDDEN);
1649 1646
1650 // Create a RVH for main frames, or find the existing one for subframes. 1647 // Create a RVH for main frames, or find the existing one for subframes.
1651 FrameTree* frame_tree = frame_tree_node_->frame_tree(); 1648 FrameTree* frame_tree = frame_tree_node_->frame_tree();
1652 RenderViewHostImpl* render_view_host = nullptr; 1649 RenderViewHostImpl* render_view_host = nullptr;
1653 if (frame_tree_node_->IsMainFrame()) { 1650 if (frame_tree_node_->IsMainFrame()) {
1654 render_view_host = frame_tree->CreateRenderViewHost( 1651 render_view_host = frame_tree->CreateRenderViewHost(
1655 site_instance, view_routing_id, frame_routing_id, swapped_out, hidden); 1652 site_instance, view_routing_id, frame_routing_id, swapped_out, hidden);
1656 } else { 1653 } else {
1657 render_view_host = frame_tree->GetRenderViewHost(site_instance); 1654 render_view_host = frame_tree->GetRenderViewHost(site_instance);
1658 CHECK(render_view_host); 1655 CHECK(render_view_host);
1659 } 1656 }
1660 1657
1661 return RenderFrameHostFactory::Create( 1658 return RenderFrameHostFactory::Create(
1662 site_instance, render_view_host, render_frame_delegate_, 1659 site_instance, render_view_host, render_frame_delegate_,
1663 render_widget_delegate_, frame_tree, frame_tree_node_, frame_routing_id, 1660 render_widget_delegate_, frame_tree, frame_tree_node_, frame_routing_id,
1664 widget_routing_id, surface_id, flags); 1661 widget_routing_id, flags);
1665 } 1662 }
1666 1663
1667 // PlzNavigate 1664 // PlzNavigate
1668 bool RenderFrameHostManager::CreateSpeculativeRenderFrameHost( 1665 bool RenderFrameHostManager::CreateSpeculativeRenderFrameHost(
1669 const GURL& url, 1666 const GURL& url,
1670 SiteInstance* old_instance, 1667 SiteInstance* old_instance,
1671 SiteInstance* new_instance, 1668 SiteInstance* new_instance,
1672 int bindings) { 1669 int bindings) {
1673 CHECK(new_instance); 1670 CHECK(new_instance);
1674 CHECK_NE(old_instance, new_instance); 1671 CHECK_NE(old_instance, new_instance);
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
1748 1745
1749 // If we are reusing the RenderViewHost and it doesn't already have a 1746 // If we are reusing the RenderViewHost and it doesn't already have a
1750 // RenderWidgetHostView, we need to create one if this is the main frame. 1747 // RenderWidgetHostView, we need to create one if this is the main frame.
1751 if (!render_view_host->GetView() && frame_tree_node_->IsMainFrame()) 1748 if (!render_view_host->GetView() && frame_tree_node_->IsMainFrame())
1752 delegate_->CreateRenderWidgetHostViewForRenderManager(render_view_host); 1749 delegate_->CreateRenderWidgetHostViewForRenderManager(render_view_host);
1753 } 1750 }
1754 } else { 1751 } else {
1755 // Create a new RenderFrameHost if we don't find an existing one. 1752 // Create a new RenderFrameHost if we don't find an existing one.
1756 1753
1757 int32 widget_routing_id = MSG_ROUTING_NONE; 1754 int32 widget_routing_id = MSG_ROUTING_NONE;
1758 int32 surface_id = 0;
1759 // A RenderFrame in a different process from its parent RenderFrame 1755 // A RenderFrame in a different process from its parent RenderFrame
1760 // requires a RenderWidget for input/layout/painting. 1756 // requires a RenderWidget for input/layout/painting.
1761 if (frame_tree_node_->parent() && 1757 if (frame_tree_node_->parent() &&
1762 frame_tree_node_->parent()->current_frame_host()->GetSiteInstance() != 1758 frame_tree_node_->parent()->current_frame_host()->GetSiteInstance() !=
1763 instance) { 1759 instance) {
1764 CHECK(SiteIsolationPolicy::AreCrossProcessFramesPossible()); 1760 CHECK(SiteIsolationPolicy::AreCrossProcessFramesPossible());
1765 widget_routing_id = instance->GetProcess()->GetNextRoutingID(); 1761 widget_routing_id = instance->GetProcess()->GetNextRoutingID();
1766 surface_id = GpuSurfaceTracker::Get()->AddSurfaceForRenderer(
1767 instance->GetProcess()->GetID(), widget_routing_id);
1768 } 1762 }
1769 1763
1770 new_render_frame_host = 1764 new_render_frame_host = CreateRenderFrameHost(
1771 CreateRenderFrameHost(instance, MSG_ROUTING_NONE, MSG_ROUTING_NONE, 1765 instance, MSG_ROUTING_NONE, MSG_ROUTING_NONE, widget_routing_id, flags);
1772 widget_routing_id, surface_id, flags);
1773 RenderViewHostImpl* render_view_host = 1766 RenderViewHostImpl* render_view_host =
1774 new_render_frame_host->render_view_host(); 1767 new_render_frame_host->render_view_host();
1775 int proxy_routing_id = MSG_ROUTING_NONE; 1768 int proxy_routing_id = MSG_ROUTING_NONE;
1776 1769
1777 // Prevent the process from exiting while we're trying to navigate in it. 1770 // Prevent the process from exiting while we're trying to navigate in it.
1778 // Otherwise, if the new RFH is swapped out already, store it. 1771 // Otherwise, if the new RFH is swapped out already, store it.
1779 if (!swapped_out) { 1772 if (!swapped_out) {
1780 new_render_frame_host->GetProcess()->AddPendingView(); 1773 new_render_frame_host->GetProcess()->AddPendingView();
1781 } else { 1774 } else {
1782 proxy = new RenderFrameProxyHost( 1775 proxy = new RenderFrameProxyHost(
(...skipping 816 matching lines...) Expand 10 before | Expand all | Expand 10 after
2599 int RenderFrameHostManager::GetOpenerRoutingID(SiteInstance* instance) { 2592 int RenderFrameHostManager::GetOpenerRoutingID(SiteInstance* instance) {
2600 if (!frame_tree_node_->opener()) 2593 if (!frame_tree_node_->opener())
2601 return MSG_ROUTING_NONE; 2594 return MSG_ROUTING_NONE;
2602 2595
2603 return frame_tree_node_->opener() 2596 return frame_tree_node_->opener()
2604 ->render_manager() 2597 ->render_manager()
2605 ->GetRoutingIdForSiteInstance(instance); 2598 ->GetRoutingIdForSiteInstance(instance);
2606 } 2599 }
2607 2600
2608 } // namespace content 2601 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698