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

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

Issue 1833243002: Remove CreateRenderFrameFlags enum. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 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 <stddef.h> 7 #include <stddef.h>
8 8
9 #include <algorithm> 9 #include <algorithm>
10 #include <utility> 10 #include <utility>
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
87 void RenderFrameHostManager::Init(SiteInstance* site_instance, 87 void RenderFrameHostManager::Init(SiteInstance* site_instance,
88 int32_t view_routing_id, 88 int32_t view_routing_id,
89 int32_t frame_routing_id, 89 int32_t frame_routing_id,
90 int32_t widget_routing_id) { 90 int32_t widget_routing_id) {
91 DCHECK(site_instance); 91 DCHECK(site_instance);
92 // TODO(avi): While RenderViewHostImpl is-a RenderWidgetHostImpl, this must 92 // TODO(avi): While RenderViewHostImpl is-a RenderWidgetHostImpl, this must
93 // hold true to avoid having two RenderWidgetHosts for the top-level frame. 93 // hold true to avoid having two RenderWidgetHosts for the top-level frame.
94 // https://crbug.com/545684 94 // https://crbug.com/545684
95 DCHECK(!frame_tree_node_->IsMainFrame() || 95 DCHECK(!frame_tree_node_->IsMainFrame() ||
96 view_routing_id == widget_routing_id); 96 view_routing_id == widget_routing_id);
97 int flags = delegate_->IsHidden() ? CREATE_RF_HIDDEN : 0;
98 SetRenderFrameHost(CreateRenderFrameHost(site_instance, view_routing_id, 97 SetRenderFrameHost(CreateRenderFrameHost(site_instance, view_routing_id,
99 frame_routing_id, widget_routing_id, 98 frame_routing_id, widget_routing_id,
100 flags)); 99 delegate_->IsHidden()));
101 100
102 // Notify the delegate of the creation of the current RenderFrameHost. 101 // Notify the delegate of the creation of the current RenderFrameHost.
103 // Do this only for subframes, as the main frame case is taken care of by 102 // Do this only for subframes, as the main frame case is taken care of by
104 // WebContentsImpl::Init. 103 // WebContentsImpl::Init.
105 if (!frame_tree_node_->IsMainFrame()) { 104 if (!frame_tree_node_->IsMainFrame()) {
106 delegate_->NotifySwappedFromRenderManager( 105 delegate_->NotifySwappedFromRenderManager(
107 nullptr, render_frame_host_.get(), false); 106 nullptr, render_frame_host_.get(), false);
108 } 107 }
109 } 108 }
110 109
(...skipping 1324 matching lines...) Expand 10 before | Expand all | Expand 10 after
1435 return render_frame_host_->last_successful_url(); 1434 return render_frame_host_->last_successful_url();
1436 1435
1437 // Fall back to the SiteInstance's Site URL if the FrameTreeNode doen't have a 1436 // Fall back to the SiteInstance's Site URL if the FrameTreeNode doen't have a
1438 // current URL. 1437 // current URL.
1439 return current_instance->GetSiteURL(); 1438 return current_instance->GetSiteURL();
1440 } 1439 }
1441 1440
1442 void RenderFrameHostManager::CreatePendingRenderFrameHost( 1441 void RenderFrameHostManager::CreatePendingRenderFrameHost(
1443 SiteInstance* old_instance, 1442 SiteInstance* old_instance,
1444 SiteInstance* new_instance) { 1443 SiteInstance* new_instance) {
1445 int create_render_frame_flags = 0;
1446 if (delegate_->IsHidden())
1447 create_render_frame_flags |= CREATE_RF_HIDDEN;
1448
1449 if (pending_render_frame_host_) 1444 if (pending_render_frame_host_)
1450 CancelPending(); 1445 CancelPending();
1451 1446
1452 // The process for the new SiteInstance may (if we're sharing a process with 1447 // The process for the new SiteInstance may (if we're sharing a process with
1453 // another host that already initialized it) or may not (we have our own 1448 // another host that already initialized it) or may not (we have our own
1454 // process or the existing process crashed) have been initialized. Calling 1449 // process or the existing process crashed) have been initialized. Calling
1455 // Init multiple times will be ignored, so this is safe. 1450 // Init multiple times will be ignored, so this is safe.
1456 if (!new_instance->GetProcess()->Init()) 1451 if (!new_instance->GetProcess()->Init())
1457 return; 1452 return;
1458 1453
1459 CreateProxiesForNewRenderFrameHost(old_instance, new_instance); 1454 CreateProxiesForNewRenderFrameHost(old_instance, new_instance);
1460 1455
1461 // Create a non-swapped-out RFH with the given opener. 1456 // Create a non-swapped-out RFH with the given opener.
1462 pending_render_frame_host_ = 1457 pending_render_frame_host_ =
1463 CreateRenderFrame(new_instance, create_render_frame_flags, nullptr); 1458 CreateRenderFrame(new_instance, delegate_->IsHidden(), nullptr);
1464 } 1459 }
1465 1460
1466 void RenderFrameHostManager::CreateProxiesForNewRenderFrameHost( 1461 void RenderFrameHostManager::CreateProxiesForNewRenderFrameHost(
1467 SiteInstance* old_instance, 1462 SiteInstance* old_instance,
1468 SiteInstance* new_instance) { 1463 SiteInstance* new_instance) {
1469 // Only create opener proxies if they are in the same BrowsingInstance. 1464 // Only create opener proxies if they are in the same BrowsingInstance.
1470 if (new_instance->IsRelatedSiteInstance(old_instance)) { 1465 if (new_instance->IsRelatedSiteInstance(old_instance)) {
1471 CreateOpenerProxies(new_instance, frame_tree_node_); 1466 CreateOpenerProxies(new_instance, frame_tree_node_);
1472 } else if (SiteIsolationPolicy::AreCrossProcessFramesPossible()) { 1467 } else if (SiteIsolationPolicy::AreCrossProcessFramesPossible()) {
1473 // Ensure that the frame tree has RenderFrameProxyHosts for the 1468 // Ensure that the frame tree has RenderFrameProxyHosts for the
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
1509 if (ancestor_rfh->GetSiteInstance() != current_instance) 1504 if (ancestor_rfh->GetSiteInstance() != current_instance)
1510 CreateRenderFrameProxy(ancestor_rfh->GetSiteInstance()); 1505 CreateRenderFrameProxy(ancestor_rfh->GetSiteInstance());
1511 } 1506 }
1512 } 1507 }
1513 1508
1514 scoped_ptr<RenderFrameHostImpl> RenderFrameHostManager::CreateRenderFrameHost( 1509 scoped_ptr<RenderFrameHostImpl> RenderFrameHostManager::CreateRenderFrameHost(
1515 SiteInstance* site_instance, 1510 SiteInstance* site_instance,
1516 int32_t view_routing_id, 1511 int32_t view_routing_id,
1517 int32_t frame_routing_id, 1512 int32_t frame_routing_id,
1518 int32_t widget_routing_id, 1513 int32_t widget_routing_id,
1519 int flags) { 1514 bool hidden) {
1520 if (frame_routing_id == MSG_ROUTING_NONE) 1515 if (frame_routing_id == MSG_ROUTING_NONE)
1521 frame_routing_id = site_instance->GetProcess()->GetNextRoutingID(); 1516 frame_routing_id = site_instance->GetProcess()->GetNextRoutingID();
1522 1517
1523 bool hidden = !!(flags & CREATE_RF_HIDDEN);
1524
1525 // Create a RVH for main frames, or find the existing one for subframes. 1518 // Create a RVH for main frames, or find the existing one for subframes.
1526 FrameTree* frame_tree = frame_tree_node_->frame_tree(); 1519 FrameTree* frame_tree = frame_tree_node_->frame_tree();
1527 RenderViewHostImpl* render_view_host = nullptr; 1520 RenderViewHostImpl* render_view_host = nullptr;
1528 if (frame_tree_node_->IsMainFrame()) { 1521 if (frame_tree_node_->IsMainFrame()) {
1529 render_view_host = frame_tree->CreateRenderViewHost( 1522 render_view_host = frame_tree->CreateRenderViewHost(
1530 site_instance, view_routing_id, frame_routing_id, false, hidden); 1523 site_instance, view_routing_id, frame_routing_id, false, hidden);
1531 // TODO(avi): It's a bit bizarre that this logic lives here instead of in 1524 // TODO(avi): It's a bit bizarre that this logic lives here instead of in
1532 // CreateRenderFrame(). It turns out that FrameTree::CreateRenderViewHost 1525 // CreateRenderFrame(). It turns out that FrameTree::CreateRenderViewHost
1533 // doesn't /always/ create a new RenderViewHost. It first tries to find an 1526 // doesn't /always/ create a new RenderViewHost. It first tries to find an
1534 // already existing one to reuse by a SiteInstance lookup. If it finds one, 1527 // already existing one to reuse by a SiteInstance lookup. If it finds one,
1535 // then the supplied routing IDs are completely ignored. 1528 // then the supplied routing IDs are completely ignored.
1536 // CreateRenderFrame() could do this lookup too, but it seems redundant to 1529 // CreateRenderFrame() could do this lookup too, but it seems redundant to
1537 // do this lookup in two places. This is a good yak shave to clean up, or, 1530 // do this lookup in two places. This is a good yak shave to clean up, or,
1538 // if just ignored, should be an easy cleanup once RenderViewHostImpl has-a 1531 // if just ignored, should be an easy cleanup once RenderViewHostImpl has-a
1539 // RenderWidgetHostImpl. https://crbug.com/545684 1532 // RenderWidgetHostImpl. https://crbug.com/545684
1540 if (view_routing_id == MSG_ROUTING_NONE) { 1533 if (view_routing_id == MSG_ROUTING_NONE) {
1541 widget_routing_id = render_view_host->GetRoutingID(); 1534 widget_routing_id = render_view_host->GetRoutingID();
1542 } else { 1535 } else {
1543 DCHECK_EQ(view_routing_id, render_view_host->GetRoutingID()); 1536 DCHECK_EQ(view_routing_id, render_view_host->GetRoutingID());
1544 } 1537 }
1545 } else { 1538 } else {
1546 render_view_host = frame_tree->GetRenderViewHost(site_instance); 1539 render_view_host = frame_tree->GetRenderViewHost(site_instance);
1547 CHECK(render_view_host); 1540 CHECK(render_view_host);
1548 } 1541 }
1549 1542
1550 return RenderFrameHostFactory::Create( 1543 return RenderFrameHostFactory::Create(
1551 site_instance, render_view_host, render_frame_delegate_, 1544 site_instance, render_view_host, render_frame_delegate_,
1552 render_widget_delegate_, frame_tree, frame_tree_node_, frame_routing_id, 1545 render_widget_delegate_, frame_tree, frame_tree_node_, frame_routing_id,
1553 widget_routing_id, flags); 1546 widget_routing_id, hidden);
1554 } 1547 }
1555 1548
1556 // PlzNavigate 1549 // PlzNavigate
1557 bool RenderFrameHostManager::CreateSpeculativeRenderFrameHost( 1550 bool RenderFrameHostManager::CreateSpeculativeRenderFrameHost(
1558 SiteInstance* old_instance, 1551 SiteInstance* old_instance,
1559 SiteInstance* new_instance) { 1552 SiteInstance* new_instance) {
1560 CHECK(new_instance); 1553 CHECK(new_instance);
1561 CHECK_NE(old_instance, new_instance); 1554 CHECK_NE(old_instance, new_instance);
1562 1555
1563 // The process for the new SiteInstance may (if we're sharing a process with 1556 // The process for the new SiteInstance may (if we're sharing a process with
1564 // another host that already initialized it) or may not (we have our own 1557 // another host that already initialized it) or may not (we have our own
1565 // process or the existing process crashed) have been initialized. Calling 1558 // process or the existing process crashed) have been initialized. Calling
1566 // Init multiple times will be ignored, so this is safe. 1559 // Init multiple times will be ignored, so this is safe.
1567 if (!new_instance->GetProcess()->Init()) 1560 if (!new_instance->GetProcess()->Init())
1568 return false; 1561 return false;
1569 1562
1570 CreateProxiesForNewRenderFrameHost(old_instance, new_instance); 1563 CreateProxiesForNewRenderFrameHost(old_instance, new_instance);
1571 1564
1572 int create_render_frame_flags = 0;
1573 if (delegate_->IsHidden())
1574 create_render_frame_flags |= CREATE_RF_HIDDEN;
1575 speculative_render_frame_host_ = 1565 speculative_render_frame_host_ =
1576 CreateRenderFrame(new_instance, create_render_frame_flags, nullptr); 1566 CreateRenderFrame(new_instance, delegate_->IsHidden(), nullptr);
1577 1567
1578 return !!speculative_render_frame_host_; 1568 return !!speculative_render_frame_host_;
1579 } 1569 }
1580 1570
1581 scoped_ptr<RenderFrameHostImpl> RenderFrameHostManager::CreateRenderFrame( 1571 scoped_ptr<RenderFrameHostImpl> RenderFrameHostManager::CreateRenderFrame(
1582 SiteInstance* instance, 1572 SiteInstance* instance,
1583 int flags, 1573 bool hidden,
1584 int* view_routing_id_ptr) { 1574 int* view_routing_id_ptr) {
1585 int32_t widget_routing_id = MSG_ROUTING_NONE; 1575 int32_t widget_routing_id = MSG_ROUTING_NONE;
1586 RenderFrameProxyHost* proxy = GetRenderFrameProxyHost(instance); 1576 RenderFrameProxyHost* proxy = GetRenderFrameProxyHost(instance);
1587 1577
1588 CHECK(instance); 1578 CHECK(instance);
1589 CHECK(SiteIsolationPolicy::AreCrossProcessFramesPossible() || 1579 CHECK(SiteIsolationPolicy::AreCrossProcessFramesPossible() ||
1590 frame_tree_node_->IsMainFrame()); 1580 frame_tree_node_->IsMainFrame());
1591 1581
1592 scoped_ptr<RenderFrameHostImpl> new_render_frame_host; 1582 scoped_ptr<RenderFrameHostImpl> new_render_frame_host;
1593 bool success = true; 1583 bool success = true;
1594 if (view_routing_id_ptr) 1584 if (view_routing_id_ptr)
1595 *view_routing_id_ptr = MSG_ROUTING_NONE; 1585 *view_routing_id_ptr = MSG_ROUTING_NONE;
1596 1586
1597 // We are creating a pending, speculative or swapped out RFH here. We should 1587 // We are creating a pending, speculative or swapped out RFH here. We should
1598 // never create it in the same SiteInstance as our current RFH. 1588 // never create it in the same SiteInstance as our current RFH.
1599 CHECK_NE(render_frame_host_->GetSiteInstance(), instance); 1589 CHECK_NE(render_frame_host_->GetSiteInstance(), instance);
1600 1590
1601 // A RenderFrame in a different process from its parent RenderFrame 1591 // A RenderFrame in a different process from its parent RenderFrame
1602 // requires a RenderWidget for input/layout/painting. 1592 // requires a RenderWidget for input/layout/painting.
1603 if (frame_tree_node_->parent() && 1593 if (frame_tree_node_->parent() &&
1604 frame_tree_node_->parent()->current_frame_host()->GetSiteInstance() != 1594 frame_tree_node_->parent()->current_frame_host()->GetSiteInstance() !=
1605 instance) { 1595 instance) {
1606 CHECK(SiteIsolationPolicy::AreCrossProcessFramesPossible()); 1596 CHECK(SiteIsolationPolicy::AreCrossProcessFramesPossible());
1607 widget_routing_id = instance->GetProcess()->GetNextRoutingID(); 1597 widget_routing_id = instance->GetProcess()->GetNextRoutingID();
1608 } 1598 }
1609 1599
1610 new_render_frame_host = CreateRenderFrameHost( 1600 new_render_frame_host = CreateRenderFrameHost(
1611 instance, MSG_ROUTING_NONE, MSG_ROUTING_NONE, widget_routing_id, flags); 1601 instance, MSG_ROUTING_NONE, MSG_ROUTING_NONE, widget_routing_id, hidden);
1612 RenderViewHostImpl* render_view_host = 1602 RenderViewHostImpl* render_view_host =
1613 new_render_frame_host->render_view_host(); 1603 new_render_frame_host->render_view_host();
1614 1604
1615 // Prevent the process from exiting while we're trying to navigate in it. 1605 // Prevent the process from exiting while we're trying to navigate in it.
1616 new_render_frame_host->GetProcess()->AddPendingView(); 1606 new_render_frame_host->GetProcess()->AddPendingView();
1617 1607
1618 if (frame_tree_node_->IsMainFrame()) { 1608 if (frame_tree_node_->IsMainFrame()) {
1619 success = InitRenderView(render_view_host, proxy); 1609 success = InitRenderView(render_view_host, proxy);
1620 1610
1621 // If we are reusing the RenderViewHost and it doesn't already have a 1611 // If we are reusing the RenderViewHost and it doesn't already have a
(...skipping 839 matching lines...) Expand 10 before | Expand all | Expand 10 after
2461 } else if (pending_render_frame_host_) { 2451 } else if (pending_render_frame_host_) {
2462 send_msg(pending_render_frame_host_.get(), 2452 send_msg(pending_render_frame_host_.get(),
2463 pending_render_frame_host_->GetRoutingID(), msg); 2453 pending_render_frame_host_->GetRoutingID(), msg);
2464 } 2454 }
2465 2455
2466 msg->set_routing_id(render_frame_host_->GetRoutingID()); 2456 msg->set_routing_id(render_frame_host_->GetRoutingID());
2467 render_frame_host_->Send(msg); 2457 render_frame_host_->Send(msg);
2468 } 2458 }
2469 2459
2470 } // namespace content 2460 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/frame_host/render_frame_host_manager.h ('k') | content/test/test_render_frame_host_factory.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698