| OLD | NEW |
| 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 "base/command_line.h" | 5 #include "base/command_line.h" |
| 6 #include "base/files/file_path.h" | 6 #include "base/files/file_path.h" |
| 7 #include "base/strings/utf_string_conversions.h" | 7 #include "base/strings/utf_string_conversions.h" |
| 8 #include "base/test/histogram_tester.h" | 8 #include "base/test/histogram_tester.h" |
| 9 #include "base/time/time.h" | 9 #include "base/time/time.h" |
| 10 #include "content/browser/frame_host/cross_site_transferring_request.h" | 10 #include "content/browser/frame_host/cross_site_transferring_request.h" |
| (...skipping 362 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 373 return ntp_rfh; | 373 return ntp_rfh; |
| 374 } | 374 } |
| 375 | 375 |
| 376 // Returns the RenderFrameHost that should be used in the navigation to | 376 // Returns the RenderFrameHost that should be used in the navigation to |
| 377 // |entry|. | 377 // |entry|. |
| 378 RenderFrameHostImpl* GetFrameHostForNavigation( | 378 RenderFrameHostImpl* GetFrameHostForNavigation( |
| 379 RenderFrameHostManager* manager, | 379 RenderFrameHostManager* manager, |
| 380 const NavigationEntryImpl& entry) { | 380 const NavigationEntryImpl& entry) { |
| 381 if (base::CommandLine::ForCurrentProcess()->HasSwitch( | 381 if (base::CommandLine::ForCurrentProcess()->HasSwitch( |
| 382 switches::kEnableBrowserSideNavigation)) { | 382 switches::kEnableBrowserSideNavigation)) { |
| 383 // TODO(creis): Navigate the entry's main frame. |
| 383 scoped_ptr<NavigationRequest> navigation_request = | 384 scoped_ptr<NavigationRequest> navigation_request = |
| 384 NavigationRequest::CreateBrowserInitiated( | 385 NavigationRequest::CreateBrowserInitiated( |
| 385 manager->frame_tree_node_, entry, FrameMsg_Navigate_Type::NORMAL, | 386 manager->frame_tree_node_, entry, FrameMsg_Navigate_Type::NORMAL, |
| 386 base::TimeTicks::Now(), | 387 base::TimeTicks::Now(), |
| 387 static_cast<NavigationControllerImpl*>(&controller())); | 388 static_cast<NavigationControllerImpl*>(&controller())); |
| 388 return manager->GetFrameHostForNavigation(*navigation_request); | 389 return manager->GetFrameHostForNavigation(*navigation_request); |
| 389 } | 390 } |
| 390 return manager->Navigate(entry); | 391 return manager->NavigateMainFrame(entry); |
| 391 } | 392 } |
| 392 | 393 |
| 393 // Returns the pending RenderFrameHost. | 394 // Returns the pending RenderFrameHost. |
| 394 // PlzNavigate: returns the speculative RenderFrameHost. | 395 // PlzNavigate: returns the speculative RenderFrameHost. |
| 395 RenderFrameHostImpl* GetPendingFrameHost( | 396 RenderFrameHostImpl* GetPendingFrameHost( |
| 396 RenderFrameHostManager* manager) { | 397 RenderFrameHostManager* manager) { |
| 397 if (base::CommandLine::ForCurrentProcess()->HasSwitch( | 398 if (base::CommandLine::ForCurrentProcess()->HasSwitch( |
| 398 switches::kEnableBrowserSideNavigation)) { | 399 switches::kEnableBrowserSideNavigation)) { |
| 399 return manager->speculative_render_frame_host_.get(); | 400 return manager->speculative_render_frame_host_.get(); |
| 400 } | 401 } |
| (...skipping 1114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1515 RenderFrameHostManager* manager = web_contents->GetRenderManagerForTesting(); | 1516 RenderFrameHostManager* manager = web_contents->GetRenderManagerForTesting(); |
| 1516 | 1517 |
| 1517 RenderFrameHostImpl* host = NULL; | 1518 RenderFrameHostImpl* host = NULL; |
| 1518 | 1519 |
| 1519 // 1) The first navigation. -------------------------- | 1520 // 1) The first navigation. -------------------------- |
| 1520 const GURL kUrl1("http://www.google.com/"); | 1521 const GURL kUrl1("http://www.google.com/"); |
| 1521 NavigationEntryImpl entry1( | 1522 NavigationEntryImpl entry1( |
| 1522 NULL /* instance */, -1 /* page_id */, kUrl1, Referrer(), | 1523 NULL /* instance */, -1 /* page_id */, kUrl1, Referrer(), |
| 1523 base::string16() /* title */, ui::PAGE_TRANSITION_TYPED, | 1524 base::string16() /* title */, ui::PAGE_TRANSITION_TYPED, |
| 1524 false /* is_renderer_init */); | 1525 false /* is_renderer_init */); |
| 1525 host = manager->Navigate(entry1); | 1526 host = manager->NavigateMainFrame(entry1); |
| 1526 | 1527 |
| 1527 // The RenderFrameHost created in Init will be reused. | 1528 // The RenderFrameHost created in Init will be reused. |
| 1528 EXPECT_TRUE(host == manager->current_frame_host()); | 1529 EXPECT_TRUE(host == manager->current_frame_host()); |
| 1529 EXPECT_FALSE(manager->pending_frame_host()); | 1530 EXPECT_FALSE(manager->pending_frame_host()); |
| 1530 EXPECT_EQ(manager->current_frame_host()->GetSiteInstance(), instance); | 1531 EXPECT_EQ(manager->current_frame_host()->GetSiteInstance(), instance); |
| 1531 | 1532 |
| 1532 // Commit. | 1533 // Commit. |
| 1533 manager->DidNavigateFrame(host, true); | 1534 manager->DidNavigateFrame(host, true); |
| 1534 // Commit to SiteInstance should be delayed until RenderFrame commit. | 1535 // Commit to SiteInstance should be delayed until RenderFrame commit. |
| 1535 EXPECT_EQ(host, manager->current_frame_host()); | 1536 EXPECT_EQ(host, manager->current_frame_host()); |
| 1536 ASSERT_TRUE(host); | 1537 ASSERT_TRUE(host); |
| 1537 EXPECT_TRUE(host->GetSiteInstance()->HasSite()); | 1538 EXPECT_TRUE(host->GetSiteInstance()->HasSite()); |
| 1538 | 1539 |
| 1539 // 2) Navigate to a different domain. ------------------------- | 1540 // 2) Navigate to a different domain. ------------------------- |
| 1540 // Guests stay in the same process on navigation. | 1541 // Guests stay in the same process on navigation. |
| 1541 const GURL kUrl2("http://www.chromium.org"); | 1542 const GURL kUrl2("http://www.chromium.org"); |
| 1542 NavigationEntryImpl entry2( | 1543 NavigationEntryImpl entry2( |
| 1543 NULL /* instance */, -1 /* page_id */, kUrl2, | 1544 NULL /* instance */, -1 /* page_id */, kUrl2, |
| 1544 Referrer(kUrl1, blink::WebReferrerPolicyDefault), | 1545 Referrer(kUrl1, blink::WebReferrerPolicyDefault), |
| 1545 base::string16() /* title */, ui::PAGE_TRANSITION_LINK, | 1546 base::string16() /* title */, ui::PAGE_TRANSITION_LINK, |
| 1546 true /* is_renderer_init */); | 1547 true /* is_renderer_init */); |
| 1547 host = manager->Navigate(entry2); | 1548 host = manager->NavigateMainFrame(entry2); |
| 1548 | 1549 |
| 1549 // The RenderFrameHost created in Init will be reused. | 1550 // The RenderFrameHost created in Init will be reused. |
| 1550 EXPECT_EQ(host, manager->current_frame_host()); | 1551 EXPECT_EQ(host, manager->current_frame_host()); |
| 1551 EXPECT_FALSE(manager->pending_frame_host()); | 1552 EXPECT_FALSE(manager->pending_frame_host()); |
| 1552 | 1553 |
| 1553 // Commit. | 1554 // Commit. |
| 1554 manager->DidNavigateFrame(host, true); | 1555 manager->DidNavigateFrame(host, true); |
| 1555 EXPECT_EQ(host, manager->current_frame_host()); | 1556 EXPECT_EQ(host, manager->current_frame_host()); |
| 1556 ASSERT_TRUE(host); | 1557 ASSERT_TRUE(host); |
| 1557 EXPECT_EQ(host->GetSiteInstance(), instance); | 1558 EXPECT_EQ(host->GetSiteInstance(), instance); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 1572 Source<WebContents>(web_contents.get())); | 1573 Source<WebContents>(web_contents.get())); |
| 1573 | 1574 |
| 1574 RenderFrameHostManager* manager = web_contents->GetRenderManagerForTesting(); | 1575 RenderFrameHostManager* manager = web_contents->GetRenderManagerForTesting(); |
| 1575 | 1576 |
| 1576 // 1) The first navigation. -------------------------- | 1577 // 1) The first navigation. -------------------------- |
| 1577 const GURL kUrl1("http://www.google.com/"); | 1578 const GURL kUrl1("http://www.google.com/"); |
| 1578 NavigationEntryImpl entry1(NULL /* instance */, -1 /* page_id */, kUrl1, | 1579 NavigationEntryImpl entry1(NULL /* instance */, -1 /* page_id */, kUrl1, |
| 1579 Referrer(), base::string16() /* title */, | 1580 Referrer(), base::string16() /* title */, |
| 1580 ui::PAGE_TRANSITION_TYPED, | 1581 ui::PAGE_TRANSITION_TYPED, |
| 1581 false /* is_renderer_init */); | 1582 false /* is_renderer_init */); |
| 1582 RenderFrameHostImpl* host = manager->Navigate(entry1); | 1583 RenderFrameHostImpl* host = manager->NavigateMainFrame(entry1); |
| 1583 | 1584 |
| 1584 // The RenderFrameHost created in Init will be reused. | 1585 // The RenderFrameHost created in Init will be reused. |
| 1585 EXPECT_EQ(host, manager->current_frame_host()); | 1586 EXPECT_EQ(host, manager->current_frame_host()); |
| 1586 EXPECT_FALSE(manager->pending_frame_host()); | 1587 EXPECT_FALSE(manager->pending_frame_host()); |
| 1587 | 1588 |
| 1588 // We should observe a notification. | 1589 // We should observe a notification. |
| 1589 EXPECT_TRUE( | 1590 EXPECT_TRUE( |
| 1590 notifications.Check1AndReset(NOTIFICATION_RENDER_VIEW_HOST_CHANGED)); | 1591 notifications.Check1AndReset(NOTIFICATION_RENDER_VIEW_HOST_CHANGED)); |
| 1591 notifications.Reset(); | 1592 notifications.Reset(); |
| 1592 | 1593 |
| 1593 // Commit. | 1594 // Commit. |
| 1594 manager->DidNavigateFrame(host, true); | 1595 manager->DidNavigateFrame(host, true); |
| 1595 | 1596 |
| 1596 // Commit to SiteInstance should be delayed until RenderFrame commits. | 1597 // Commit to SiteInstance should be delayed until RenderFrame commits. |
| 1597 EXPECT_EQ(host, manager->current_frame_host()); | 1598 EXPECT_EQ(host, manager->current_frame_host()); |
| 1598 EXPECT_FALSE(host->GetSiteInstance()->HasSite()); | 1599 EXPECT_FALSE(host->GetSiteInstance()->HasSite()); |
| 1599 host->GetSiteInstance()->SetSite(kUrl1); | 1600 host->GetSiteInstance()->SetSite(kUrl1); |
| 1600 | 1601 |
| 1601 // 2) Cross-site navigate to next site. ------------------------- | 1602 // 2) Cross-site navigate to next site. ------------------------- |
| 1602 const GURL kUrl2("http://www.example.com"); | 1603 const GURL kUrl2("http://www.example.com"); |
| 1603 NavigationEntryImpl entry2( | 1604 NavigationEntryImpl entry2( |
| 1604 NULL /* instance */, -1 /* page_id */, kUrl2, Referrer(), | 1605 NULL /* instance */, -1 /* page_id */, kUrl2, Referrer(), |
| 1605 base::string16() /* title */, ui::PAGE_TRANSITION_TYPED, | 1606 base::string16() /* title */, ui::PAGE_TRANSITION_TYPED, |
| 1606 false /* is_renderer_init */); | 1607 false /* is_renderer_init */); |
| 1607 RenderFrameHostImpl* host2 = manager->Navigate(entry2); | 1608 RenderFrameHostImpl* host2 = manager->NavigateMainFrame(entry2); |
| 1608 | 1609 |
| 1609 // A new RenderFrameHost should be created. | 1610 // A new RenderFrameHost should be created. |
| 1610 ASSERT_EQ(host2, manager->pending_frame_host()); | 1611 ASSERT_EQ(host2, manager->pending_frame_host()); |
| 1611 EXPECT_NE(host2, host); | 1612 EXPECT_NE(host2, host); |
| 1612 | 1613 |
| 1613 EXPECT_EQ(host, manager->current_frame_host()); | 1614 EXPECT_EQ(host, manager->current_frame_host()); |
| 1614 EXPECT_FALSE(manager->current_frame_host()->is_swapped_out()); | 1615 EXPECT_FALSE(manager->current_frame_host()->is_swapped_out()); |
| 1615 EXPECT_EQ(host2, manager->pending_frame_host()); | 1616 EXPECT_EQ(host2, manager->pending_frame_host()); |
| 1616 | 1617 |
| 1617 // 3) Close the tab. ------------------------- | 1618 // 3) Close the tab. ------------------------- |
| (...skipping 290 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1908 #if 0 | 1909 #if 0 |
| 1909 // TODO(nick): Currently a proxy to the removed frame lingers in the parent. | 1910 // TODO(nick): Currently a proxy to the removed frame lingers in the parent. |
| 1910 // Enable this assert below once the proxies to the subframe are correctly | 1911 // Enable this assert below once the proxies to the subframe are correctly |
| 1911 // cleaned up after detach. http://crbug.com/444955. | 1912 // cleaned up after detach. http://crbug.com/444955. |
| 1912 ASSERT_TRUE(site_instance->HasOneRef()) | 1913 ASSERT_TRUE(site_instance->HasOneRef()) |
| 1913 << "This SiteInstance should be destroyable now."; | 1914 << "This SiteInstance should be destroyable now."; |
| 1914 #endif | 1915 #endif |
| 1915 } | 1916 } |
| 1916 | 1917 |
| 1917 } // namespace content | 1918 } // namespace content |
| OLD | NEW |