| Index: content/browser/web_contents/web_contents_impl_unittest.cc
|
| diff --git a/content/browser/web_contents/web_contents_impl_unittest.cc b/content/browser/web_contents/web_contents_impl_unittest.cc
|
| index dfba4445ce83e7aaca117e2f6ce2bbef99f9b330..917867b07bc852d6e381b29fe9ea7171ad56a96f 100644
|
| --- a/content/browser/web_contents/web_contents_impl_unittest.cc
|
| +++ b/content/browser/web_contents/web_contents_impl_unittest.cc
|
| @@ -159,9 +159,13 @@ class TestInterstitialPage : public InterstitialPageImpl {
|
| CommandReceived();
|
| }
|
|
|
| - void TestDidNavigate(int page_id, const GURL& url) {
|
| + void TestDidNavigate(int page_id,
|
| + int nav_entry_id,
|
| + bool did_create_new_entry,
|
| + const GURL& url) {
|
| FrameHostMsg_DidCommitProvisionalLoad_Params params;
|
| - InitNavigateParams(¶ms, page_id, url, ui::PAGE_TRANSITION_TYPED);
|
| + InitNavigateParams(¶ms, page_id, nav_entry_id, did_create_new_entry,
|
| + url, ui::PAGE_TRANSITION_TYPED);
|
| DidNavigate(GetMainFrame()->GetRenderViewHost(), params);
|
| }
|
|
|
| @@ -351,7 +355,8 @@ TEST_F(WebContentsImplTest, UpdateTitle) {
|
| static_cast<NavigationControllerImpl&>(controller());
|
| FrameHostMsg_DidCommitProvisionalLoad_Params params;
|
| InitNavigateParams(
|
| - ¶ms, 0, GURL(url::kAboutBlankURL), ui::PAGE_TRANSITION_TYPED);
|
| + ¶ms, 0, 0, true, GURL(url::kAboutBlankURL),
|
| + ui::PAGE_TRANSITION_TYPED);
|
|
|
| LoadCommittedDetails details;
|
| cont.RendererDidNavigate(contents()->GetMainFrame(), params, &details);
|
| @@ -393,13 +398,15 @@ TEST_F(WebContentsImplTest, NTPViewSource) {
|
|
|
| cont.LoadURL(
|
| kGURL, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
|
| + NavigationEntry* entry = cont.GetPendingEntry();
|
| rvh()->GetDelegate()->RenderViewCreated(rvh());
|
| // Did we get the expected message?
|
| EXPECT_TRUE(process()->sink().GetFirstMessageMatching(
|
| ViewMsg_EnableViewSourceMode::ID));
|
|
|
| FrameHostMsg_DidCommitProvisionalLoad_Params params;
|
| - InitNavigateParams(¶ms, 0, kGURL, ui::PAGE_TRANSITION_TYPED);
|
| + InitNavigateParams(¶ms, 0, entry->GetUniqueID(), true, kGURL,
|
| + ui::PAGE_TRANSITION_TYPED);
|
| LoadCommittedDetails details;
|
| cont.RendererDidNavigate(contents()->GetMainFrame(), params, &details);
|
| // Also check title and url.
|
| @@ -433,22 +440,25 @@ TEST_F(WebContentsImplTest, UpdateMaxPageID) {
|
| TEST_F(WebContentsImplTest, SimpleNavigation) {
|
| TestRenderFrameHost* orig_rfh = contents()->GetMainFrame();
|
| SiteInstance* instance1 = contents()->GetSiteInstance();
|
| - EXPECT_TRUE(contents()->GetPendingMainFrame() == NULL);
|
| + EXPECT_EQ(nullptr, contents()->GetPendingMainFrame());
|
|
|
| // Navigate to URL
|
| const GURL url("http://www.google.com");
|
| controller().LoadURL(
|
| url, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
|
| + NavigationEntry* entry = controller().GetPendingEntry();
|
| EXPECT_FALSE(contents()->cross_navigation_pending());
|
| EXPECT_EQ(instance1, orig_rfh->GetSiteInstance());
|
| // Controller's pending entry will have a NULL site instance until we assign
|
| // it in DidNavigate.
|
| - EXPECT_TRUE(
|
| + EXPECT_EQ(
|
| + nullptr,
|
| NavigationEntryImpl::FromNavigationEntry(controller().GetVisibleEntry())->
|
| - site_instance() == NULL);
|
| + site_instance());
|
|
|
| // DidNavigate from the page
|
| - contents()->TestDidNavigate(orig_rfh, 1, url, ui::PAGE_TRANSITION_TYPED);
|
| + contents()->TestDidNavigate(orig_rfh, 1, entry->GetUniqueID(), true, url,
|
| + ui::PAGE_TRANSITION_TYPED);
|
| EXPECT_FALSE(contents()->cross_navigation_pending());
|
| EXPECT_EQ(orig_rfh, contents()->GetMainFrame());
|
| EXPECT_EQ(instance1, orig_rfh->GetSiteInstance());
|
| @@ -468,7 +478,7 @@ TEST_F(WebContentsImplTest, NavigateToExcessivelyLongURL) {
|
|
|
| controller().LoadURL(
|
| url, Referrer(), ui::PAGE_TRANSITION_GENERATED, std::string());
|
| - EXPECT_TRUE(controller().GetVisibleEntry() == NULL);
|
| + EXPECT_EQ(nullptr, controller().GetVisibleEntry());
|
| }
|
|
|
| // Test that navigating across a site boundary creates a new RenderViewHost
|
| @@ -483,8 +493,10 @@ TEST_F(WebContentsImplTest, CrossSiteBoundaries) {
|
| const GURL url("http://www.google.com");
|
| controller().LoadURL(
|
| url, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
|
| + NavigationEntry* entry = controller().GetPendingEntry();
|
| orig_rfh->PrepareForCommit();
|
| - contents()->TestDidNavigate(orig_rfh, 1, url, ui::PAGE_TRANSITION_TYPED);
|
| + contents()->TestDidNavigate(orig_rfh, 1, entry->GetUniqueID(), true, url,
|
| + ui::PAGE_TRANSITION_TYPED);
|
|
|
| // Keep the number of active frames in orig_rfh's SiteInstance non-zero so
|
| // that orig_rfh doesn't get deleted when it gets swapped out.
|
| @@ -499,6 +511,7 @@ TEST_F(WebContentsImplTest, CrossSiteBoundaries) {
|
| const GURL url2("http://www.yahoo.com");
|
| controller().LoadURL(
|
| url2, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
|
| + entry = controller().GetPendingEntry();
|
| if (base::CommandLine::ForCurrentProcess()->HasSwitch(
|
| switches::kEnableBrowserSideNavigation)) {
|
| orig_rfh->PrepareForCommit();
|
| @@ -520,8 +533,8 @@ TEST_F(WebContentsImplTest, CrossSiteBoundaries) {
|
| }
|
|
|
| // DidNavigate from the pending page
|
| - contents()->TestDidNavigate(
|
| - pending_rfh, 1, url2, ui::PAGE_TRANSITION_TYPED);
|
| + contents()->TestDidNavigate(pending_rfh, 1, entry->GetUniqueID(), true, url2,
|
| + ui::PAGE_TRANSITION_TYPED);
|
| SiteInstance* instance2 = contents()->GetSiteInstance();
|
|
|
| // Keep the number of active frames in pending_rfh's SiteInstance
|
| @@ -534,7 +547,7 @@ TEST_F(WebContentsImplTest, CrossSiteBoundaries) {
|
| EXPECT_EQ(url2, contents()->GetLastCommittedURL());
|
| EXPECT_EQ(url2, contents()->GetVisibleURL());
|
| EXPECT_NE(instance1, instance2);
|
| - EXPECT_TRUE(contents()->GetPendingMainFrame() == NULL);
|
| + EXPECT_EQ(nullptr, contents()->GetPendingMainFrame());
|
| // We keep the original RFH around, swapped out.
|
| EXPECT_TRUE(contents()->GetRenderManagerForTesting()->IsOnSwappedOutList(
|
| orig_rfh));
|
| @@ -544,6 +557,7 @@ TEST_F(WebContentsImplTest, CrossSiteBoundaries) {
|
| // stored in the NavigationEntry, so it should be the same as at the start.
|
| // We should use the same RFH as before, swapping it back in.
|
| controller().GoBack();
|
| + entry = controller().GetPendingEntry();
|
| if (base::CommandLine::ForCurrentProcess()->HasSwitch(
|
| switches::kEnableBrowserSideNavigation)) {
|
| contents()->GetMainFrame()->PrepareForCommit();
|
| @@ -561,7 +575,8 @@ TEST_F(WebContentsImplTest, CrossSiteBoundaries) {
|
| }
|
|
|
| // DidNavigate from the back action
|
| - contents()->TestDidNavigate(goback_rfh, 1, url2, ui::PAGE_TRANSITION_TYPED);
|
| + contents()->TestDidNavigate(goback_rfh, 1, entry->GetUniqueID(), false, url2,
|
| + ui::PAGE_TRANSITION_TYPED);
|
| EXPECT_FALSE(contents()->cross_navigation_pending());
|
| EXPECT_EQ(goback_rfh, contents()->GetMainFrame());
|
| EXPECT_EQ(instance1, contents()->GetSiteInstance());
|
| @@ -590,8 +605,10 @@ TEST_F(WebContentsImplTest, CrossSiteBoundariesAfterCrash) {
|
| const GURL url("http://www.google.com");
|
| controller().LoadURL(
|
| url, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
|
| + NavigationEntry* entry = controller().GetPendingEntry();
|
| contents()->GetMainFrame()->PrepareForCommit();
|
| - contents()->TestDidNavigate(orig_rfh, 1, url, ui::PAGE_TRANSITION_TYPED);
|
| + contents()->TestDidNavigate(orig_rfh, 1, entry->GetUniqueID(), true, url,
|
| + ui::PAGE_TRANSITION_TYPED);
|
|
|
| EXPECT_FALSE(contents()->cross_navigation_pending());
|
| EXPECT_EQ(orig_rfh->GetRenderViewHost(), contents()->GetRenderViewHost());
|
| @@ -604,21 +621,23 @@ TEST_F(WebContentsImplTest, CrossSiteBoundariesAfterCrash) {
|
| const GURL url2("http://www.yahoo.com");
|
| controller().LoadURL(
|
| url2, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
|
| + entry = controller().GetPendingEntry();
|
| contents()->GetMainFrame()->PrepareForCommit();
|
| TestRenderFrameHost* new_rfh = contents()->GetMainFrame();
|
| EXPECT_FALSE(contents()->cross_navigation_pending());
|
| - EXPECT_TRUE(contents()->GetPendingMainFrame() == NULL);
|
| + EXPECT_EQ(nullptr, contents()->GetPendingMainFrame());
|
| EXPECT_NE(orig_rfh, new_rfh);
|
| EXPECT_EQ(orig_rvh_delete_count, 1);
|
|
|
| // DidNavigate from the new page
|
| - contents()->TestDidNavigate(new_rfh, 1, url2, ui::PAGE_TRANSITION_TYPED);
|
| + contents()->TestDidNavigate(new_rfh, 1, entry->GetUniqueID(), true, url2,
|
| + ui::PAGE_TRANSITION_TYPED);
|
| SiteInstance* instance2 = contents()->GetSiteInstance();
|
|
|
| EXPECT_FALSE(contents()->cross_navigation_pending());
|
| EXPECT_EQ(new_rfh, main_rfh());
|
| EXPECT_NE(instance1, instance2);
|
| - EXPECT_TRUE(contents()->GetPendingMainFrame() == NULL);
|
| + EXPECT_EQ(nullptr, contents()->GetPendingMainFrame());
|
|
|
| // Close contents and ensure RVHs are deleted.
|
| DeleteContents();
|
| @@ -636,8 +655,10 @@ TEST_F(WebContentsImplTest, NavigateTwoTabsCrossSite) {
|
| const GURL url("http://www.google.com");
|
| controller().LoadURL(
|
| url, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
|
| + NavigationEntry* entry = controller().GetPendingEntry();
|
| contents()->GetMainFrame()->PrepareForCommit();
|
| - contents()->TestDidNavigate(orig_rfh, 1, url, ui::PAGE_TRANSITION_TYPED);
|
| + contents()->TestDidNavigate(orig_rfh, 1, entry->GetUniqueID(), true, url,
|
| + ui::PAGE_TRANSITION_TYPED);
|
|
|
| // Open a new contents with the same SiteInstance, navigated to the same site.
|
| scoped_ptr<TestWebContents> contents2(
|
| @@ -645,20 +666,22 @@ TEST_F(WebContentsImplTest, NavigateTwoTabsCrossSite) {
|
| contents2->GetController().LoadURL(url, Referrer(),
|
| ui::PAGE_TRANSITION_TYPED,
|
| std::string());
|
| + entry = contents2->GetController().GetPendingEntry();
|
| contents2->GetMainFrame()->PrepareForCommit();
|
| // Need this page id to be 2 since the site instance is the same (which is the
|
| // scope of page IDs) and we want to consider this a new page.
|
| - contents2->TestDidNavigate(
|
| - contents2->GetMainFrame(), 2, url, ui::PAGE_TRANSITION_TYPED);
|
| + contents2->TestDidNavigate(contents2->GetMainFrame(), 2, entry->GetUniqueID(),
|
| + true, url, ui::PAGE_TRANSITION_TYPED);
|
|
|
| // Navigate first contents to a new site.
|
| const GURL url2a("http://www.yahoo.com");
|
| controller().LoadURL(
|
| url2a, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
|
| + entry = controller().GetPendingEntry();
|
| orig_rfh->PrepareForCommit();
|
| TestRenderFrameHost* pending_rfh_a = contents()->GetPendingMainFrame();
|
| - contents()->TestDidNavigate(
|
| - pending_rfh_a, 1, url2a, ui::PAGE_TRANSITION_TYPED);
|
| + contents()->TestDidNavigate(pending_rfh_a, 1, entry->GetUniqueID(), true,
|
| + url2a, ui::PAGE_TRANSITION_TYPED);
|
| SiteInstance* instance2a = contents()->GetSiteInstance();
|
| EXPECT_NE(instance1, instance2a);
|
|
|
| @@ -667,17 +690,18 @@ TEST_F(WebContentsImplTest, NavigateTwoTabsCrossSite) {
|
| contents2->GetController().LoadURL(url2b, Referrer(),
|
| ui::PAGE_TRANSITION_TYPED,
|
| std::string());
|
| + entry = contents2->GetController().GetPendingEntry();
|
| TestRenderFrameHost* rfh2 = contents2->GetMainFrame();
|
| rfh2->PrepareForCommit();
|
| TestRenderFrameHost* pending_rfh_b = contents2->GetPendingMainFrame();
|
| - EXPECT_TRUE(pending_rfh_b != NULL);
|
| + EXPECT_NE(nullptr, pending_rfh_b);
|
| EXPECT_TRUE(contents2->cross_navigation_pending());
|
|
|
| // NOTE(creis): We used to be in danger of showing a crash page here if the
|
| // second contents hadn't navigated somewhere first (bug 1145430). That case
|
| // is now covered by the CrossSiteBoundariesAfterCrash test.
|
| - contents2->TestDidNavigate(
|
| - pending_rfh_b, 2, url2b, ui::PAGE_TRANSITION_TYPED);
|
| + contents2->TestDidNavigate(pending_rfh_b, 2, entry->GetUniqueID(), true,
|
| + url2b, ui::PAGE_TRANSITION_TYPED);
|
| SiteInstance* instance2b = contents2->GetSiteInstance();
|
| EXPECT_NE(instance1, instance2b);
|
|
|
| @@ -703,9 +727,10 @@ TEST_F(WebContentsImplTest, NavigateFromSitelessUrl) {
|
| const GURL native_url("non-site-url://stuffandthings");
|
| controller().LoadURL(
|
| native_url, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
|
| + NavigationEntry* entry = controller().GetPendingEntry();
|
| contents()->GetMainFrame()->PrepareForCommit();
|
| - contents()->TestDidNavigate(
|
| - orig_rfh, 1, native_url, ui::PAGE_TRANSITION_TYPED);
|
| + contents()->TestDidNavigate(orig_rfh, 1, entry->GetUniqueID(), true,
|
| + native_url, ui::PAGE_TRANSITION_TYPED);
|
|
|
| EXPECT_FALSE(contents()->cross_navigation_pending());
|
| EXPECT_EQ(orig_rfh, contents()->GetMainFrame());
|
| @@ -720,12 +745,14 @@ TEST_F(WebContentsImplTest, NavigateFromSitelessUrl) {
|
| const GURL url("http://www.google.com");
|
| controller().LoadURL(
|
| url, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
|
| + entry = controller().GetPendingEntry();
|
| contents()->GetMainFrame()->PrepareForCommit();
|
| EXPECT_FALSE(contents()->cross_navigation_pending());
|
| EXPECT_EQ(native_url, contents()->GetLastCommittedURL());
|
| EXPECT_EQ(url, contents()->GetVisibleURL());
|
| EXPECT_FALSE(contents()->GetPendingMainFrame());
|
| - contents()->TestDidNavigate(orig_rfh, 1, url, ui::PAGE_TRANSITION_TYPED);
|
| + contents()->TestDidNavigate(orig_rfh, 1, entry->GetUniqueID(), true, url,
|
| + ui::PAGE_TRANSITION_TYPED);
|
|
|
| // Keep the number of active frames in orig_rfh's SiteInstance
|
| // non-zero so that orig_rfh doesn't get deleted when it gets
|
| @@ -741,6 +768,7 @@ TEST_F(WebContentsImplTest, NavigateFromSitelessUrl) {
|
| const GURL url2("http://www.yahoo.com");
|
| controller().LoadURL(
|
| url2, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
|
| + entry = controller().GetPendingEntry();
|
| if (base::CommandLine::ForCurrentProcess()->HasSwitch(
|
| switches::kEnableBrowserSideNavigation)) {
|
| orig_rfh->PrepareForCommit();
|
| @@ -762,8 +790,8 @@ TEST_F(WebContentsImplTest, NavigateFromSitelessUrl) {
|
| }
|
|
|
| // DidNavigate from the pending page.
|
| - contents()->TestDidNavigate(
|
| - pending_rfh, 1, url2, ui::PAGE_TRANSITION_TYPED);
|
| + contents()->TestDidNavigate(pending_rfh, 1, entry->GetUniqueID(), true, url2,
|
| + ui::PAGE_TRANSITION_TYPED);
|
| SiteInstance* new_instance = contents()->GetSiteInstance();
|
|
|
| EXPECT_FALSE(contents()->cross_navigation_pending());
|
| @@ -810,8 +838,9 @@ TEST_F(WebContentsImplTest, NavigateFromRestoredSitelessUrl) {
|
| ASSERT_EQ(0u, entries.size());
|
| ASSERT_EQ(1, controller().GetEntryCount());
|
| controller().GoToIndex(0);
|
| - contents()->TestDidNavigate(
|
| - orig_rfh, 0, native_url, ui::PAGE_TRANSITION_RELOAD);
|
| + entry = controller().GetPendingEntry();
|
| + contents()->TestDidNavigate(orig_rfh, 0, entry->GetUniqueID(), false,
|
| + native_url, ui::PAGE_TRANSITION_RELOAD);
|
| EXPECT_EQ(orig_instance, contents()->GetSiteInstance());
|
| EXPECT_EQ(GURL(), contents()->GetSiteInstance()->GetSiteURL());
|
| EXPECT_FALSE(orig_instance->HasSite());
|
| @@ -821,7 +850,9 @@ TEST_F(WebContentsImplTest, NavigateFromRestoredSitelessUrl) {
|
| const GURL url("http://www.google.com");
|
| controller().LoadURL(
|
| url, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
|
| - contents()->TestDidNavigate(orig_rfh, 2, url, ui::PAGE_TRANSITION_TYPED);
|
| + entry = controller().GetPendingEntry();
|
| + contents()->TestDidNavigate(orig_rfh, 2, entry->GetUniqueID(), true, url,
|
| + ui::PAGE_TRANSITION_TYPED);
|
| EXPECT_EQ(orig_instance, contents()->GetSiteInstance());
|
|
|
| // Cleanup.
|
| @@ -853,9 +884,10 @@ TEST_F(WebContentsImplTest, NavigateFromRestoredRegularUrl) {
|
| ASSERT_EQ(0u, entries.size());
|
| ASSERT_EQ(1, controller().GetEntryCount());
|
| controller().GoToIndex(0);
|
| + entry = controller().GetPendingEntry();
|
| orig_rfh->PrepareForCommit();
|
| - contents()->TestDidNavigate(
|
| - orig_rfh, 0, regular_url, ui::PAGE_TRANSITION_RELOAD);
|
| + contents()->TestDidNavigate(orig_rfh, 0, entry->GetUniqueID(), false,
|
| + regular_url, ui::PAGE_TRANSITION_RELOAD);
|
| EXPECT_EQ(orig_instance, contents()->GetSiteInstance());
|
| EXPECT_TRUE(orig_instance->HasSite());
|
|
|
| @@ -863,9 +895,11 @@ TEST_F(WebContentsImplTest, NavigateFromRestoredRegularUrl) {
|
| const GURL url("http://www.google.com");
|
| controller().LoadURL(
|
| url, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
|
| + entry = controller().GetPendingEntry();
|
| orig_rfh->PrepareForCommit();
|
| - contents()->TestDidNavigate(
|
| - contents()->GetPendingMainFrame(), 2, url, ui::PAGE_TRANSITION_TYPED);
|
| + contents()->TestDidNavigate(contents()->GetPendingMainFrame(), 2,
|
| + entry->GetUniqueID(), true, url,
|
| + ui::PAGE_TRANSITION_TYPED);
|
| EXPECT_NE(orig_instance, contents()->GetSiteInstance());
|
|
|
| // Cleanup.
|
| @@ -881,8 +915,10 @@ TEST_F(WebContentsImplTest, FindOpenerRVHWhenPending) {
|
| const GURL url("http://www.google.com");
|
| controller().LoadURL(
|
| url, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
|
| + NavigationEntry* entry = controller().GetPendingEntry();
|
| orig_rfh->PrepareForCommit();
|
| - contents()->TestDidNavigate(orig_rfh, 1, url, ui::PAGE_TRANSITION_TYPED);
|
| + contents()->TestDidNavigate(orig_rfh, 1, entry->GetUniqueID(), true, url,
|
| + ui::PAGE_TRANSITION_TYPED);
|
|
|
| // Start to navigate first tab to a new site, so that it has a pending RVH.
|
| const GURL url2("http://www.yahoo.com");
|
| @@ -912,9 +948,10 @@ TEST_F(WebContentsImplTest, CrossSiteComparesAgainstCurrentPage) {
|
| const GURL url("http://www.google.com");
|
| controller().LoadURL(
|
| url, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
|
| + NavigationEntry* entry = controller().GetPendingEntry();
|
| contents()->GetMainFrame()->PrepareForCommit();
|
| - contents()->TestDidNavigate(
|
| - orig_rfh, 1, url, ui::PAGE_TRANSITION_TYPED);
|
| + contents()->TestDidNavigate(orig_rfh, 1, entry->GetUniqueID(), true, url,
|
| + ui::PAGE_TRANSITION_TYPED);
|
|
|
| // Open a related contents to a second site.
|
| scoped_ptr<TestWebContents> contents2(
|
| @@ -923,20 +960,23 @@ TEST_F(WebContentsImplTest, CrossSiteComparesAgainstCurrentPage) {
|
| contents2->GetController().LoadURL(url2, Referrer(),
|
| ui::PAGE_TRANSITION_TYPED,
|
| std::string());
|
| + entry = contents2->GetController().GetPendingEntry();
|
| contents2->GetMainFrame()->PrepareForCommit();
|
| +
|
| // The first RVH in contents2 isn't live yet, so we shortcut the cross site
|
| // pending.
|
| TestRenderFrameHost* rfh2 = contents2->GetMainFrame();
|
| EXPECT_FALSE(contents2->cross_navigation_pending());
|
| - contents2->TestDidNavigate(rfh2, 2, url2, ui::PAGE_TRANSITION_TYPED);
|
| + contents2->TestDidNavigate(rfh2, 2, entry->GetUniqueID(), true, url2,
|
| + ui::PAGE_TRANSITION_TYPED);
|
| SiteInstance* instance2 = contents2->GetSiteInstance();
|
| EXPECT_NE(instance1, instance2);
|
| EXPECT_FALSE(contents2->cross_navigation_pending());
|
|
|
| // Simulate a link click in first contents to second site. Doesn't switch
|
| - // SiteInstances, because we don't intercept WebKit navigations.
|
| + // SiteInstances, because we don't intercept Blink navigations.
|
| contents()->TestDidNavigate(
|
| - orig_rfh, 2, url2, ui::PAGE_TRANSITION_TYPED);
|
| + orig_rfh, 2, 0, true, url2, ui::PAGE_TRANSITION_TYPED);
|
| SiteInstance* instance3 = contents()->GetSiteInstance();
|
| EXPECT_EQ(instance1, instance3);
|
| EXPECT_FALSE(contents()->cross_navigation_pending());
|
| @@ -946,10 +986,11 @@ TEST_F(WebContentsImplTest, CrossSiteComparesAgainstCurrentPage) {
|
| const GURL url3("http://mail.yahoo.com");
|
| controller().LoadURL(
|
| url3, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
|
| + entry = controller().GetPendingEntry();
|
| EXPECT_FALSE(contents()->cross_navigation_pending());
|
| contents()->GetMainFrame()->PrepareForCommit();
|
| - contents()->TestDidNavigate(
|
| - orig_rfh, 3, url3, ui::PAGE_TRANSITION_TYPED);
|
| + contents()->TestDidNavigate(orig_rfh, 3, entry->GetUniqueID(), true, url3,
|
| + ui::PAGE_TRANSITION_TYPED);
|
| SiteInstance* instance4 = contents()->GetSiteInstance();
|
| EXPECT_EQ(instance1, instance4);
|
| }
|
| @@ -964,8 +1005,10 @@ TEST_F(WebContentsImplTest, CrossSiteUnloadHandlers) {
|
| const GURL url("http://www.google.com");
|
| controller().LoadURL(
|
| url, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
|
| + NavigationEntry* entry = controller().GetPendingEntry();
|
| contents()->GetMainFrame()->PrepareForCommit();
|
| - contents()->TestDidNavigate(orig_rfh, 1, url, ui::PAGE_TRANSITION_TYPED);
|
| + contents()->TestDidNavigate(orig_rfh, 1, entry->GetUniqueID(), true, url,
|
| + ui::PAGE_TRANSITION_TYPED);
|
| EXPECT_FALSE(contents()->cross_navigation_pending());
|
| EXPECT_EQ(orig_rfh, contents()->GetMainFrame());
|
|
|
| @@ -984,6 +1027,7 @@ TEST_F(WebContentsImplTest, CrossSiteUnloadHandlers) {
|
| // Navigate again, but simulate an onbeforeunload approval.
|
| controller().LoadURL(
|
| url2, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
|
| + entry = controller().GetPendingEntry();
|
| EXPECT_TRUE(orig_rfh->IsWaitingForBeforeUnloadACK());
|
| now = base::TimeTicks::Now();
|
| orig_rfh->PrepareForCommit();
|
| @@ -994,13 +1038,13 @@ TEST_F(WebContentsImplTest, CrossSiteUnloadHandlers) {
|
| // We won't hear DidNavigate until the onunload handler has finished running.
|
|
|
| // DidNavigate from the pending page.
|
| - contents()->TestDidNavigate(
|
| - pending_rfh, 1, url2, ui::PAGE_TRANSITION_TYPED);
|
| + contents()->TestDidNavigate(pending_rfh, 1, entry->GetUniqueID(), true, url2,
|
| + ui::PAGE_TRANSITION_TYPED);
|
| SiteInstance* instance2 = contents()->GetSiteInstance();
|
| EXPECT_FALSE(contents()->cross_navigation_pending());
|
| EXPECT_EQ(pending_rfh, contents()->GetMainFrame());
|
| EXPECT_NE(instance1, instance2);
|
| - EXPECT_TRUE(contents()->GetPendingMainFrame() == NULL);
|
| + EXPECT_EQ(nullptr, contents()->GetPendingMainFrame());
|
| }
|
|
|
| // Test that during a slow cross-site navigation, the original renderer can
|
| @@ -1014,8 +1058,10 @@ TEST_F(WebContentsImplTest, CrossSiteNavigationPreempted) {
|
| const GURL url("http://www.google.com");
|
| controller().LoadURL(
|
| url, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
|
| + NavigationEntry* entry = controller().GetPendingEntry();
|
| contents()->GetMainFrame()->PrepareForCommit();
|
| - contents()->TestDidNavigate(orig_rfh, 1, url, ui::PAGE_TRANSITION_TYPED);
|
| + contents()->TestDidNavigate(orig_rfh, 1, entry->GetUniqueID(), true, url,
|
| + ui::PAGE_TRANSITION_TYPED);
|
| EXPECT_FALSE(contents()->cross_navigation_pending());
|
| EXPECT_EQ(orig_rfh, contents()->GetMainFrame());
|
|
|
| @@ -1028,7 +1074,7 @@ TEST_F(WebContentsImplTest, CrossSiteNavigationPreempted) {
|
| EXPECT_TRUE(contents()->cross_navigation_pending());
|
|
|
| // Suppose the original renderer navigates before the new one is ready.
|
| - orig_rfh->SendNavigate(2, GURL("http://www.google.com/foo"));
|
| + orig_rfh->SendNavigate(2, 0, true, GURL("http://www.google.com/foo"));
|
|
|
| // Verify that the pending navigation is cancelled.
|
| EXPECT_FALSE(orig_rfh->IsWaitingForBeforeUnloadACK());
|
| @@ -1036,7 +1082,7 @@ TEST_F(WebContentsImplTest, CrossSiteNavigationPreempted) {
|
| EXPECT_FALSE(contents()->cross_navigation_pending());
|
| EXPECT_EQ(orig_rfh, contents()->GetMainFrame());
|
| EXPECT_EQ(instance1, instance2);
|
| - EXPECT_TRUE(contents()->GetPendingMainFrame() == NULL);
|
| + EXPECT_EQ(nullptr, contents()->GetPendingMainFrame());
|
| }
|
|
|
| TEST_F(WebContentsImplTest, CrossSiteNavigationBackPreempted) {
|
| @@ -1044,9 +1090,11 @@ TEST_F(WebContentsImplTest, CrossSiteNavigationBackPreempted) {
|
| const GURL url1("chrome://blah");
|
| controller().LoadURL(
|
| url1, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
|
| + NavigationEntry* entry = controller().GetPendingEntry();
|
| TestRenderFrameHost* ntp_rfh = contents()->GetMainFrame();
|
| ntp_rfh->PrepareForCommit();
|
| - contents()->TestDidNavigate(ntp_rfh, 1, url1, ui::PAGE_TRANSITION_TYPED);
|
| + contents()->TestDidNavigate(ntp_rfh, 1, entry->GetUniqueID(), true, url1,
|
| + ui::PAGE_TRANSITION_TYPED);
|
| NavigationEntry* entry1 = controller().GetLastCommittedEntry();
|
| SiteInstance* instance1 = contents()->GetSiteInstance();
|
|
|
| @@ -1062,6 +1110,7 @@ TEST_F(WebContentsImplTest, CrossSiteNavigationBackPreempted) {
|
| const GURL url2("http://www.google.com");
|
| controller().LoadURL(
|
| url2, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
|
| + entry = controller().GetPendingEntry();
|
| EXPECT_TRUE(contents()->cross_navigation_pending());
|
| TestRenderFrameHost* google_rfh = contents()->GetPendingMainFrame();
|
|
|
| @@ -1071,8 +1120,8 @@ TEST_F(WebContentsImplTest, CrossSiteNavigationBackPreempted) {
|
| ntp_rfh->PrepareForCommit();
|
|
|
| // DidNavigate from the pending page.
|
| - contents()->TestDidNavigate(
|
| - google_rfh, 1, url2, ui::PAGE_TRANSITION_TYPED);
|
| + contents()->TestDidNavigate(google_rfh, 1, entry->GetUniqueID(), true, url2,
|
| + ui::PAGE_TRANSITION_TYPED);
|
| NavigationEntry* entry2 = controller().GetLastCommittedEntry();
|
| SiteInstance* instance2 = contents()->GetSiteInstance();
|
|
|
| @@ -1090,10 +1139,11 @@ TEST_F(WebContentsImplTest, CrossSiteNavigationBackPreempted) {
|
| const GURL url3("http://news.google.com");
|
| controller().LoadURL(
|
| url3, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
|
| + entry = controller().GetPendingEntry();
|
| EXPECT_FALSE(contents()->cross_navigation_pending());
|
| contents()->GetMainFrame()->PrepareForCommit();
|
| - contents()->TestDidNavigate(
|
| - google_rfh, 2, url3, ui::PAGE_TRANSITION_TYPED);
|
| + contents()->TestDidNavigate(google_rfh, 2, entry->GetUniqueID(), true, url3,
|
| + ui::PAGE_TRANSITION_TYPED);
|
| NavigationEntry* entry3 = controller().GetLastCommittedEntry();
|
| SiteInstance* instance3 = contents()->GetSiteInstance();
|
|
|
| @@ -1107,6 +1157,7 @@ TEST_F(WebContentsImplTest, CrossSiteNavigationBackPreempted) {
|
|
|
| // Go back within the site.
|
| controller().GoBack();
|
| + NavigationEntry* goback_entry = controller().GetPendingEntry();
|
| EXPECT_FALSE(contents()->cross_navigation_pending());
|
| EXPECT_EQ(entry2, controller().GetPendingEntry());
|
|
|
| @@ -1124,7 +1175,8 @@ TEST_F(WebContentsImplTest, CrossSiteNavigationBackPreempted) {
|
| FrameHostMsg_BeforeUnload_ACK(0, true, now, now));
|
|
|
| // DidNavigate from the first back. This aborts the second back's pending RFH.
|
| - contents()->TestDidNavigate(google_rfh, 1, url2, ui::PAGE_TRANSITION_TYPED);
|
| + contents()->TestDidNavigate(google_rfh, 1, goback_entry->GetUniqueID(), false,
|
| + url2, ui::PAGE_TRANSITION_TYPED);
|
|
|
| // We should commit this page and forget about the second back.
|
| EXPECT_FALSE(contents()->cross_navigation_pending());
|
| @@ -1151,8 +1203,10 @@ TEST_F(WebContentsImplTest, CrossSiteNavigationNotPreemptedByFrame) {
|
| const GURL url("http://www.google.com");
|
| controller().LoadURL(
|
| url, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
|
| + NavigationEntry* entry = controller().GetPendingEntry();
|
| contents()->GetMainFrame()->PrepareForCommit();
|
| - contents()->TestDidNavigate(orig_rfh, 1, url, ui::PAGE_TRANSITION_TYPED);
|
| + contents()->TestDidNavigate(orig_rfh, 1, entry->GetUniqueID(), true, url,
|
| + ui::PAGE_TRANSITION_TYPED);
|
| EXPECT_FALSE(contents()->cross_navigation_pending());
|
| EXPECT_EQ(orig_rfh, contents()->GetMainFrame());
|
|
|
| @@ -1165,7 +1219,8 @@ TEST_F(WebContentsImplTest, CrossSiteNavigationNotPreemptedByFrame) {
|
| // waiting for a before unload response.
|
| TestRenderFrameHost* child_rfh = orig_rfh->AppendChild("subframe");
|
| child_rfh->SendNavigateWithTransition(
|
| - 1, GURL("http://google.com/frame"), ui::PAGE_TRANSITION_AUTO_SUBFRAME);
|
| + 1, 0, false, GURL("http://google.com/frame"),
|
| + ui::PAGE_TRANSITION_AUTO_SUBFRAME);
|
| EXPECT_TRUE(orig_rfh->IsWaitingForBeforeUnloadACK());
|
|
|
| // Now simulate the onbeforeunload approval and verify the navigation is
|
| @@ -1184,6 +1239,7 @@ TEST_F(WebContentsImplTest, CrossSiteNotPreemptedDuringBeforeUnload) {
|
| const GURL url("chrome://blah");
|
| controller().LoadURL(
|
| url, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
|
| + int entry1_id = controller().GetPendingEntry()->GetUniqueID();
|
| TestRenderFrameHost* orig_rfh = contents()->GetMainFrame();
|
| EXPECT_FALSE(contents()->cross_navigation_pending());
|
|
|
| @@ -1191,6 +1247,7 @@ TEST_F(WebContentsImplTest, CrossSiteNotPreemptedDuringBeforeUnload) {
|
| const GURL url2("http://www.yahoo.com");
|
| controller().LoadURL(
|
| url2, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
|
| + int entry2_id = controller().GetPendingEntry()->GetUniqueID();
|
| TestRenderFrameHost* pending_rfh = contents()->GetPendingMainFrame();
|
| EXPECT_TRUE(contents()->cross_navigation_pending());
|
| EXPECT_TRUE(orig_rfh->IsWaitingForBeforeUnloadACK());
|
| @@ -1198,13 +1255,14 @@ TEST_F(WebContentsImplTest, CrossSiteNotPreemptedDuringBeforeUnload) {
|
| // Suppose the first navigation tries to commit now, with a
|
| // FrameMsg_Stop in flight. This should not cancel the pending navigation,
|
| // but it should act as if the beforeunload ack arrived.
|
| - orig_rfh->SendNavigate(1, GURL("chrome://blah"));
|
| + orig_rfh->SendNavigate(1, entry1_id, true, GURL("chrome://blah"));
|
| EXPECT_TRUE(contents()->cross_navigation_pending());
|
| EXPECT_EQ(orig_rfh, contents()->GetMainFrame());
|
| EXPECT_FALSE(orig_rfh->IsWaitingForBeforeUnloadACK());
|
|
|
| // The pending navigation should be able to commit successfully.
|
| - contents()->TestDidNavigate(pending_rfh, 1, url2, ui::PAGE_TRANSITION_TYPED);
|
| + contents()->TestDidNavigate(pending_rfh, 1, entry2_id, true, url2,
|
| + ui::PAGE_TRANSITION_TYPED);
|
| EXPECT_FALSE(contents()->cross_navigation_pending());
|
| EXPECT_EQ(pending_rfh, contents()->GetMainFrame());
|
| }
|
| @@ -1219,8 +1277,10 @@ TEST_F(WebContentsImplTest, CrossSiteNavigationCanceled) {
|
| const GURL url("http://www.google.com");
|
| controller().LoadURL(
|
| url, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
|
| + NavigationEntry* entry = controller().GetPendingEntry();
|
| contents()->GetMainFrame()->PrepareForCommit();
|
| - contents()->TestDidNavigate(orig_rfh, 1, url, ui::PAGE_TRANSITION_TYPED);
|
| + contents()->TestDidNavigate(orig_rfh, 1, entry->GetUniqueID(), true, url,
|
| + ui::PAGE_TRANSITION_TYPED);
|
| EXPECT_FALSE(contents()->cross_navigation_pending());
|
| EXPECT_EQ(orig_rfh, contents()->GetMainFrame());
|
|
|
| @@ -1248,7 +1308,7 @@ TEST_F(WebContentsImplTest, CrossSiteNavigationCanceled) {
|
| EXPECT_EQ(orig_rfh, contents()->GetMainFrame());
|
| EXPECT_EQ(RenderFrameHostImpl::STATE_DEFAULT, orig_rfh->rfh_state());
|
| EXPECT_EQ(instance1, instance2);
|
| - EXPECT_TRUE(contents()->GetPendingMainFrame() == NULL);
|
| + EXPECT_EQ(nullptr, contents()->GetPendingMainFrame());
|
| }
|
|
|
| // Test that NavigationEntries have the correct page state after going
|
| @@ -1260,31 +1320,37 @@ TEST_F(WebContentsImplTest, NavigationEntryContentState) {
|
| const GURL url("http://www.google.com");
|
| controller().LoadURL(
|
| url, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
|
| - NavigationEntry* entry = controller().GetLastCommittedEntry();
|
| - EXPECT_TRUE(entry == NULL);
|
| + NavigationEntry* pending_entry = controller().GetPendingEntry();
|
| + NavigationEntry* last_entry = controller().GetLastCommittedEntry();
|
| + EXPECT_EQ(nullptr, last_entry);
|
|
|
| // Committed entry should have page state after DidNavigate.
|
| - contents()->TestDidNavigate(orig_rfh, 1, url, ui::PAGE_TRANSITION_TYPED);
|
| - entry = controller().GetLastCommittedEntry();
|
| - EXPECT_TRUE(entry->GetPageState().IsValid());
|
| + contents()->TestDidNavigate(orig_rfh, 1, pending_entry->GetUniqueID(), true,
|
| + url, ui::PAGE_TRANSITION_TYPED);
|
| + last_entry = controller().GetLastCommittedEntry();
|
| + EXPECT_TRUE(last_entry->GetPageState().IsValid());
|
|
|
| // Navigate to same site.
|
| const GURL url2("http://images.google.com");
|
| controller().LoadURL(
|
| url2, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
|
| - entry = controller().GetLastCommittedEntry();
|
| - EXPECT_TRUE(entry->GetPageState().IsValid());
|
| + pending_entry = controller().GetPendingEntry();
|
| + last_entry = controller().GetLastCommittedEntry();
|
| + EXPECT_TRUE(last_entry->GetPageState().IsValid());
|
|
|
| // Committed entry should have page state after DidNavigate.
|
| - contents()->TestDidNavigate(orig_rfh, 2, url2, ui::PAGE_TRANSITION_TYPED);
|
| - entry = controller().GetLastCommittedEntry();
|
| - EXPECT_TRUE(entry->GetPageState().IsValid());
|
| + contents()->TestDidNavigate(orig_rfh, 2, pending_entry->GetUniqueID(), true,
|
| + url2, ui::PAGE_TRANSITION_TYPED);
|
| + last_entry = controller().GetLastCommittedEntry();
|
| + EXPECT_TRUE(last_entry->GetPageState().IsValid());
|
|
|
| // Now go back. Committed entry should still have page state.
|
| controller().GoBack();
|
| - contents()->TestDidNavigate(orig_rfh, 1, url, ui::PAGE_TRANSITION_TYPED);
|
| - entry = controller().GetLastCommittedEntry();
|
| - EXPECT_TRUE(entry->GetPageState().IsValid());
|
| + pending_entry = controller().GetPendingEntry();
|
| + contents()->TestDidNavigate(orig_rfh, 1, pending_entry->GetUniqueID(), false,
|
| + url, ui::PAGE_TRANSITION_TYPED);
|
| + last_entry = controller().GetLastCommittedEntry();
|
| + EXPECT_TRUE(last_entry->GetPageState().IsValid());
|
| }
|
|
|
| // Test that NavigationEntries have the correct page state and SiteInstance
|
| @@ -1293,11 +1359,10 @@ TEST_F(WebContentsImplTest, NavigationEntryContentState) {
|
| TEST_F(WebContentsImplTest, NavigationEntryContentStateNewWindow) {
|
| TestRenderFrameHost* orig_rfh = contents()->GetMainFrame();
|
|
|
| - // When opening a new window, it is navigated to about:blank internally.
|
| - // Currently, this results in two DidNavigate events.
|
| + // Navigate to about:blank.
|
| const GURL url(url::kAboutBlankURL);
|
| - contents()->TestDidNavigate(orig_rfh, 1, url, ui::PAGE_TRANSITION_TYPED);
|
| - contents()->TestDidNavigate(orig_rfh, 1, url, ui::PAGE_TRANSITION_TYPED);
|
| + contents()->TestDidNavigate(orig_rfh, 1, 0, true, url,
|
| + ui::PAGE_TRANSITION_TYPED);
|
|
|
| // Should have a page state here.
|
| NavigationEntry* entry = controller().GetLastCommittedEntry();
|
| @@ -1313,9 +1378,11 @@ TEST_F(WebContentsImplTest, NavigationEntryContentStateNewWindow) {
|
| const GURL new_url("http://www.google.com");
|
| controller().LoadURL(new_url, Referrer(),
|
| ui::PAGE_TRANSITION_TYPED, std::string());
|
| + entry = controller().GetPendingEntry();
|
| EXPECT_FALSE(contents()->cross_navigation_pending());
|
| EXPECT_EQ(orig_rfh, contents()->GetMainFrame());
|
| - contents()->TestDidNavigate(orig_rfh, 1, new_url, ui::PAGE_TRANSITION_TYPED);
|
| + contents()->TestDidNavigate(orig_rfh, 1, entry->GetUniqueID(), true, new_url,
|
| + ui::PAGE_TRANSITION_TYPED);
|
| NavigationEntryImpl* entry_impl2 = NavigationEntryImpl::FromNavigationEntry(
|
| controller().GetLastCommittedEntry());
|
| EXPECT_EQ(site_instance_id, entry_impl2->site_instance()->GetId());
|
| @@ -1334,8 +1401,10 @@ TEST_F(WebContentsImplTest, NavigationExitsFullscreen) {
|
| const GURL url("http://www.google.com");
|
| controller().LoadURL(
|
| url, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
|
| + NavigationEntry* entry = controller().GetPendingEntry();
|
| contents()->GetMainFrame()->PrepareForCommit();
|
| - contents()->TestDidNavigate(orig_rfh, 1, url, ui::PAGE_TRANSITION_TYPED);
|
| + contents()->TestDidNavigate(orig_rfh, 1, entry->GetUniqueID(), true, url,
|
| + ui::PAGE_TRANSITION_TYPED);
|
| EXPECT_EQ(orig_rfh, contents()->GetMainFrame());
|
|
|
| // Toggle fullscreen mode on (as if initiated via IPC from renderer).
|
| @@ -1352,17 +1421,18 @@ TEST_F(WebContentsImplTest, NavigationExitsFullscreen) {
|
| const GURL url2("http://www.yahoo.com");
|
| controller().LoadURL(
|
| url2, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
|
| + entry = controller().GetPendingEntry();
|
| contents()->GetMainFrame()->PrepareForCommit();
|
| TestRenderFrameHost* const pending_rfh = contents()->GetPendingMainFrame();
|
| - contents()->TestDidNavigate(
|
| - pending_rfh, 1, url2, ui::PAGE_TRANSITION_TYPED);
|
| + contents()->TestDidNavigate(pending_rfh, 1, entry->GetUniqueID(), true, url2,
|
| + ui::PAGE_TRANSITION_TYPED);
|
|
|
| // Confirm fullscreen has exited.
|
| EXPECT_FALSE(orig_rvh->IsFullscreen());
|
| EXPECT_FALSE(contents()->IsFullscreenForCurrentTab());
|
| EXPECT_FALSE(fake_delegate.IsFullscreenForTabOrPending(contents()));
|
|
|
| - contents()->SetDelegate(NULL);
|
| + contents()->SetDelegate(nullptr);
|
| }
|
|
|
| // Tests that fullscreen is exited throughout the object hierarchy when
|
| @@ -1377,15 +1447,19 @@ TEST_F(WebContentsImplTest, HistoryNavigationExitsFullscreen) {
|
| const GURL url("http://www.google.com");
|
| controller().LoadURL(
|
| url, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
|
| - contents()->TestDidNavigate(orig_rfh, 1, url, ui::PAGE_TRANSITION_TYPED);
|
| + NavigationEntry* entry = controller().GetPendingEntry();
|
| + contents()->TestDidNavigate(orig_rfh, 1, entry->GetUniqueID(), true, url,
|
| + ui::PAGE_TRANSITION_TYPED);
|
| EXPECT_EQ(orig_rfh, contents()->GetMainFrame());
|
|
|
| // Now, navigate to another page on the same site.
|
| const GURL url2("http://www.google.com/search?q=kittens");
|
| controller().LoadURL(
|
| url2, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
|
| + entry = controller().GetPendingEntry();
|
| EXPECT_FALSE(contents()->cross_navigation_pending());
|
| - contents()->TestDidNavigate(orig_rfh, 2, url2, ui::PAGE_TRANSITION_TYPED);
|
| + contents()->TestDidNavigate(orig_rfh, 2, entry->GetUniqueID(), true, url2,
|
| + ui::PAGE_TRANSITION_TYPED);
|
| EXPECT_EQ(orig_rfh, contents()->GetMainFrame());
|
|
|
| // Sanity-check: Confirm we're not starting out in fullscreen mode.
|
| @@ -1406,10 +1480,11 @@ TEST_F(WebContentsImplTest, HistoryNavigationExitsFullscreen) {
|
| controller().GoBack();
|
| else
|
| controller().GoForward();
|
| + entry = controller().GetPendingEntry();
|
| EXPECT_FALSE(contents()->cross_navigation_pending());
|
| EXPECT_EQ(orig_rfh, contents()->GetMainFrame());
|
| - contents()->TestDidNavigate(
|
| - orig_rfh, i + 1, url, ui::PAGE_TRANSITION_FORWARD_BACK);
|
| + contents()->TestDidNavigate(orig_rfh, i + 1, entry->GetUniqueID(), false,
|
| + url, ui::PAGE_TRANSITION_FORWARD_BACK);
|
|
|
| // Confirm fullscreen has exited.
|
| EXPECT_FALSE(orig_rvh->IsFullscreen());
|
| @@ -1446,8 +1521,10 @@ TEST_F(WebContentsImplTest, CrashExitsFullscreen) {
|
| const GURL url("http://www.google.com");
|
| controller().LoadURL(
|
| url, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
|
| - contents()->TestDidNavigate(
|
| - contents()->GetMainFrame(), 1, url, ui::PAGE_TRANSITION_TYPED);
|
| + NavigationEntry* entry = controller().GetPendingEntry();
|
| + contents()->TestDidNavigate(contents()->GetMainFrame(), 1,
|
| + entry->GetUniqueID(), true, url,
|
| + ui::PAGE_TRANSITION_TYPED);
|
|
|
| // Toggle fullscreen mode on (as if initiated via IPC from renderer).
|
| EXPECT_FALSE(test_rvh()->IsFullscreen());
|
| @@ -1483,12 +1560,13 @@ TEST_F(WebContentsImplTest,
|
| ShowInterstitialFromBrowserWithNewNavigationDontProceed) {
|
| // Navigate to a page.
|
| GURL url1("http://www.google.com");
|
| - contents()->GetMainFrame()->SendNavigate(1, url1);
|
| + contents()->GetMainFrame()->SendNavigate(1, 0, true, url1);
|
| EXPECT_EQ(1, controller().GetEntryCount());
|
|
|
| - // Initiate a browser navigation that will trigger the interstitial
|
| + // Initiate a browser navigation that will trigger the interstitial.
|
| controller().LoadURL(GURL("http://www.evil.com"), Referrer(),
|
| ui::PAGE_TRANSITION_TYPED, std::string());
|
| + NavigationEntry* entry = controller().GetPendingEntry();
|
|
|
| // Show an interstitial.
|
| TestInterstitialPage::InterstitialState state =
|
| @@ -1499,26 +1577,28 @@ TEST_F(WebContentsImplTest,
|
| new TestInterstitialPage(contents(), true, url2, &state, &deleted);
|
| TestInterstitialPageStateGuard state_guard(interstitial);
|
| interstitial->Show();
|
| + NavigationEntry* interstitial_entry = controller().GetTransientEntry();
|
| // The interstitial should not show until its navigation has committed.
|
| EXPECT_FALSE(interstitial->is_showing());
|
| EXPECT_FALSE(contents()->ShowingInterstitialPage());
|
| - EXPECT_TRUE(contents()->GetInterstitialPage() == NULL);
|
| + EXPECT_EQ(nullptr, contents()->GetInterstitialPage());
|
| // Let's commit the interstitial navigation.
|
| - interstitial->TestDidNavigate(1, url2);
|
| + interstitial->TestDidNavigate(1, interstitial_entry->GetUniqueID(), true,
|
| + url2);
|
| EXPECT_TRUE(interstitial->is_showing());
|
| EXPECT_TRUE(contents()->ShowingInterstitialPage());
|
| EXPECT_TRUE(contents()->GetInterstitialPage() == interstitial);
|
| - NavigationEntry* entry = controller().GetVisibleEntry();
|
| - ASSERT_TRUE(entry != NULL);
|
| + entry = controller().GetVisibleEntry();
|
| + ASSERT_NE(nullptr, entry);
|
| EXPECT_TRUE(entry->GetURL() == url2);
|
|
|
| // Now don't proceed.
|
| interstitial->DontProceed();
|
| EXPECT_EQ(TestInterstitialPage::CANCELED, state);
|
| EXPECT_FALSE(contents()->ShowingInterstitialPage());
|
| - EXPECT_TRUE(contents()->GetInterstitialPage() == NULL);
|
| + EXPECT_EQ(nullptr, contents()->GetInterstitialPage());
|
| entry = controller().GetVisibleEntry();
|
| - ASSERT_TRUE(entry != NULL);
|
| + ASSERT_NE(nullptr, entry);
|
| EXPECT_TRUE(entry->GetURL() == url1);
|
| EXPECT_EQ(1, controller().GetEntryCount());
|
|
|
| @@ -1530,11 +1610,12 @@ TEST_F(WebContentsImplTest,
|
| // as when clicking on a link in the page) that shows an interstitial and
|
| // creates a new navigation entry, then hiding it without proceeding.
|
| TEST_F(WebContentsImplTest,
|
| - ShowInterstitiaFromRendererlWithNewNavigationDontProceed) {
|
| + ShowInterstitialFromRendererWithNewNavigationDontProceed) {
|
| // Navigate to a page.
|
| GURL url1("http://www.google.com");
|
| - contents()->GetMainFrame()->SendNavigate(1, url1);
|
| + contents()->GetMainFrame()->SendNavigate(1, 0, true, url1);
|
| EXPECT_EQ(1, controller().GetEntryCount());
|
| + NavigationEntry* entry = controller().GetPendingEntry();
|
|
|
| // Show an interstitial (no pending entry, the interstitial would have been
|
| // triggered by clicking on a link).
|
| @@ -1546,26 +1627,28 @@ TEST_F(WebContentsImplTest,
|
| new TestInterstitialPage(contents(), true, url2, &state, &deleted);
|
| TestInterstitialPageStateGuard state_guard(interstitial);
|
| interstitial->Show();
|
| + NavigationEntry* interstitial_entry = controller().GetTransientEntry();
|
| // The interstitial should not show until its navigation has committed.
|
| EXPECT_FALSE(interstitial->is_showing());
|
| EXPECT_FALSE(contents()->ShowingInterstitialPage());
|
| - EXPECT_TRUE(contents()->GetInterstitialPage() == NULL);
|
| + EXPECT_EQ(nullptr, contents()->GetInterstitialPage());
|
| // Let's commit the interstitial navigation.
|
| - interstitial->TestDidNavigate(1, url2);
|
| + interstitial->TestDidNavigate(1, interstitial_entry->GetUniqueID(), true,
|
| + url2);
|
| EXPECT_TRUE(interstitial->is_showing());
|
| EXPECT_TRUE(contents()->ShowingInterstitialPage());
|
| EXPECT_TRUE(contents()->GetInterstitialPage() == interstitial);
|
| - NavigationEntry* entry = controller().GetVisibleEntry();
|
| - ASSERT_TRUE(entry != NULL);
|
| + entry = controller().GetVisibleEntry();
|
| + ASSERT_NE(nullptr, entry);
|
| EXPECT_TRUE(entry->GetURL() == url2);
|
|
|
| // Now don't proceed.
|
| interstitial->DontProceed();
|
| EXPECT_EQ(TestInterstitialPage::CANCELED, state);
|
| EXPECT_FALSE(contents()->ShowingInterstitialPage());
|
| - EXPECT_TRUE(contents()->GetInterstitialPage() == NULL);
|
| + EXPECT_EQ(nullptr, contents()->GetInterstitialPage());
|
| entry = controller().GetVisibleEntry();
|
| - ASSERT_TRUE(entry != NULL);
|
| + ASSERT_NE(nullptr, entry);
|
| EXPECT_TRUE(entry->GetURL() == url1);
|
| EXPECT_EQ(1, controller().GetEntryCount());
|
|
|
| @@ -1579,8 +1662,9 @@ TEST_F(WebContentsImplTest,
|
| TEST_F(WebContentsImplTest, ShowInterstitialNoNewNavigationDontProceed) {
|
| // Navigate to a page.
|
| GURL url1("http://www.google.com");
|
| - contents()->GetMainFrame()->SendNavigate(1, url1);
|
| + contents()->GetMainFrame()->SendNavigate(1, 0, true, url1);
|
| EXPECT_EQ(1, controller().GetEntryCount());
|
| + NavigationEntry* entry = controller().GetPendingEntry();
|
|
|
| // Show an interstitial.
|
| TestInterstitialPage::InterstitialState state =
|
| @@ -1594,14 +1678,14 @@ TEST_F(WebContentsImplTest, ShowInterstitialNoNewNavigationDontProceed) {
|
| // The interstitial should not show until its navigation has committed.
|
| EXPECT_FALSE(interstitial->is_showing());
|
| EXPECT_FALSE(contents()->ShowingInterstitialPage());
|
| - EXPECT_TRUE(contents()->GetInterstitialPage() == NULL);
|
| + EXPECT_EQ(nullptr, contents()->GetInterstitialPage());
|
| // Let's commit the interstitial navigation.
|
| - interstitial->TestDidNavigate(1, url2);
|
| + interstitial->TestDidNavigate(1, 0, true, url2);
|
| EXPECT_TRUE(interstitial->is_showing());
|
| EXPECT_TRUE(contents()->ShowingInterstitialPage());
|
| EXPECT_TRUE(contents()->GetInterstitialPage() == interstitial);
|
| - NavigationEntry* entry = controller().GetVisibleEntry();
|
| - ASSERT_TRUE(entry != NULL);
|
| + entry = controller().GetVisibleEntry();
|
| + ASSERT_NE(nullptr, entry);
|
| // The URL specified to the interstitial should have been ignored.
|
| EXPECT_TRUE(entry->GetURL() == url1);
|
|
|
| @@ -1609,9 +1693,9 @@ TEST_F(WebContentsImplTest, ShowInterstitialNoNewNavigationDontProceed) {
|
| interstitial->DontProceed();
|
| EXPECT_EQ(TestInterstitialPage::CANCELED, state);
|
| EXPECT_FALSE(contents()->ShowingInterstitialPage());
|
| - EXPECT_TRUE(contents()->GetInterstitialPage() == NULL);
|
| + EXPECT_EQ(nullptr, contents()->GetInterstitialPage());
|
| entry = controller().GetVisibleEntry();
|
| - ASSERT_TRUE(entry != NULL);
|
| + ASSERT_NE(nullptr, entry);
|
| EXPECT_TRUE(entry->GetURL() == url1);
|
| EXPECT_EQ(1, controller().GetEntryCount());
|
|
|
| @@ -1626,12 +1710,13 @@ TEST_F(WebContentsImplTest,
|
| ShowInterstitialFromBrowserNewNavigationProceed) {
|
| // Navigate to a page.
|
| GURL url1("http://www.google.com");
|
| - contents()->GetMainFrame()->SendNavigate(1, url1);
|
| + contents()->GetMainFrame()->SendNavigate(1, 0, true, url1);
|
| EXPECT_EQ(1, controller().GetEntryCount());
|
|
|
| // Initiate a browser navigation that will trigger the interstitial
|
| controller().LoadURL(GURL("http://www.evil.com"), Referrer(),
|
| ui::PAGE_TRANSITION_TYPED, std::string());
|
| + NavigationEntry* entry = controller().GetPendingEntry();
|
|
|
| // Show an interstitial.
|
| TestInterstitialPage::InterstitialState state =
|
| @@ -1642,17 +1727,19 @@ TEST_F(WebContentsImplTest,
|
| new TestInterstitialPage(contents(), true, url2, &state, &deleted);
|
| TestInterstitialPageStateGuard state_guard(interstitial);
|
| interstitial->Show();
|
| + NavigationEntry* interstitial_entry = controller().GetTransientEntry();
|
| // The interstitial should not show until its navigation has committed.
|
| EXPECT_FALSE(interstitial->is_showing());
|
| EXPECT_FALSE(contents()->ShowingInterstitialPage());
|
| - EXPECT_TRUE(contents()->GetInterstitialPage() == NULL);
|
| + EXPECT_EQ(nullptr, contents()->GetInterstitialPage());
|
| // Let's commit the interstitial navigation.
|
| - interstitial->TestDidNavigate(1, url2);
|
| + interstitial->TestDidNavigate(1, interstitial_entry->GetUniqueID(), true,
|
| + url2);
|
| EXPECT_TRUE(interstitial->is_showing());
|
| EXPECT_TRUE(contents()->ShowingInterstitialPage());
|
| EXPECT_TRUE(contents()->GetInterstitialPage() == interstitial);
|
| - NavigationEntry* entry = controller().GetVisibleEntry();
|
| - ASSERT_TRUE(entry != NULL);
|
| + entry = controller().GetVisibleEntry();
|
| + ASSERT_NE(nullptr, entry);
|
| EXPECT_TRUE(entry->GetURL() == url2);
|
|
|
| // Then proceed.
|
| @@ -1667,12 +1754,12 @@ TEST_F(WebContentsImplTest,
|
| // Simulate the navigation to the page, that's when the interstitial gets
|
| // hidden.
|
| GURL url3("http://www.thepage.com");
|
| - contents()->GetMainFrame()->SendNavigate(2, url3);
|
| + contents()->GetMainFrame()->SendNavigate(2, 0, true, url3);
|
|
|
| EXPECT_FALSE(contents()->ShowingInterstitialPage());
|
| - EXPECT_TRUE(contents()->GetInterstitialPage() == NULL);
|
| + EXPECT_EQ(nullptr, contents()->GetInterstitialPage());
|
| entry = controller().GetVisibleEntry();
|
| - ASSERT_TRUE(entry != NULL);
|
| + ASSERT_NE(nullptr, entry);
|
| EXPECT_TRUE(entry->GetURL() == url3);
|
|
|
| EXPECT_EQ(2, controller().GetEntryCount());
|
| @@ -1688,8 +1775,9 @@ TEST_F(WebContentsImplTest,
|
| ShowInterstitialFromRendererNewNavigationProceed) {
|
| // Navigate to a page.
|
| GURL url1("http://www.google.com");
|
| - contents()->GetMainFrame()->SendNavigate(1, url1);
|
| + contents()->GetMainFrame()->SendNavigate(1, 0, true, url1);
|
| EXPECT_EQ(1, controller().GetEntryCount());
|
| + NavigationEntry* entry = controller().GetPendingEntry();
|
|
|
| // Show an interstitial.
|
| TestInterstitialPage::InterstitialState state =
|
| @@ -1700,17 +1788,19 @@ TEST_F(WebContentsImplTest,
|
| new TestInterstitialPage(contents(), true, url2, &state, &deleted);
|
| TestInterstitialPageStateGuard state_guard(interstitial);
|
| interstitial->Show();
|
| + NavigationEntry* interstitial_entry = controller().GetTransientEntry();
|
| // The interstitial should not show until its navigation has committed.
|
| EXPECT_FALSE(interstitial->is_showing());
|
| EXPECT_FALSE(contents()->ShowingInterstitialPage());
|
| - EXPECT_TRUE(contents()->GetInterstitialPage() == NULL);
|
| + EXPECT_EQ(nullptr, contents()->GetInterstitialPage());
|
| // Let's commit the interstitial navigation.
|
| - interstitial->TestDidNavigate(1, url2);
|
| + interstitial->TestDidNavigate(1, interstitial_entry->GetUniqueID(), true,
|
| + url2);
|
| EXPECT_TRUE(interstitial->is_showing());
|
| EXPECT_TRUE(contents()->ShowingInterstitialPage());
|
| EXPECT_TRUE(contents()->GetInterstitialPage() == interstitial);
|
| - NavigationEntry* entry = controller().GetVisibleEntry();
|
| - ASSERT_TRUE(entry != NULL);
|
| + entry = controller().GetVisibleEntry();
|
| + ASSERT_NE(nullptr, entry);
|
| EXPECT_TRUE(entry->GetURL() == url2);
|
|
|
| // Then proceed.
|
| @@ -1725,12 +1815,12 @@ TEST_F(WebContentsImplTest,
|
| // Simulate the navigation to the page, that's when the interstitial gets
|
| // hidden.
|
| GURL url3("http://www.thepage.com");
|
| - contents()->GetMainFrame()->SendNavigate(2, url3);
|
| + contents()->GetMainFrame()->SendNavigate(2, 0, true, url3);
|
|
|
| EXPECT_FALSE(contents()->ShowingInterstitialPage());
|
| - EXPECT_TRUE(contents()->GetInterstitialPage() == NULL);
|
| + EXPECT_EQ(nullptr, contents()->GetInterstitialPage());
|
| entry = controller().GetVisibleEntry();
|
| - ASSERT_TRUE(entry != NULL);
|
| + ASSERT_NE(nullptr, entry);
|
| EXPECT_TRUE(entry->GetURL() == url3);
|
|
|
| EXPECT_EQ(2, controller().GetEntryCount());
|
| @@ -1745,8 +1835,9 @@ TEST_F(WebContentsImplTest,
|
| TEST_F(WebContentsImplTest, ShowInterstitialNoNewNavigationProceed) {
|
| // Navigate to a page so we have a navigation entry in the controller.
|
| GURL url1("http://www.google.com");
|
| - contents()->GetMainFrame()->SendNavigate(1, url1);
|
| + contents()->GetMainFrame()->SendNavigate(1, 0, true, url1);
|
| EXPECT_EQ(1, controller().GetEntryCount());
|
| + NavigationEntry* entry = controller().GetPendingEntry();
|
|
|
| // Show an interstitial.
|
| TestInterstitialPage::InterstitialState state =
|
| @@ -1760,14 +1851,14 @@ TEST_F(WebContentsImplTest, ShowInterstitialNoNewNavigationProceed) {
|
| // The interstitial should not show until its navigation has committed.
|
| EXPECT_FALSE(interstitial->is_showing());
|
| EXPECT_FALSE(contents()->ShowingInterstitialPage());
|
| - EXPECT_TRUE(contents()->GetInterstitialPage() == NULL);
|
| + EXPECT_EQ(nullptr, contents()->GetInterstitialPage());
|
| // Let's commit the interstitial navigation.
|
| - interstitial->TestDidNavigate(1, url2);
|
| + interstitial->TestDidNavigate(1, 0, true, url2);
|
| EXPECT_TRUE(interstitial->is_showing());
|
| EXPECT_TRUE(contents()->ShowingInterstitialPage());
|
| EXPECT_TRUE(contents()->GetInterstitialPage() == interstitial);
|
| - NavigationEntry* entry = controller().GetVisibleEntry();
|
| - ASSERT_TRUE(entry != NULL);
|
| + entry = controller().GetVisibleEntry();
|
| + ASSERT_NE(nullptr, entry);
|
| // The URL specified to the interstitial should have been ignored.
|
| EXPECT_TRUE(entry->GetURL() == url1);
|
|
|
| @@ -1777,9 +1868,9 @@ TEST_F(WebContentsImplTest, ShowInterstitialNoNewNavigationProceed) {
|
| // away and shows the original page.
|
| EXPECT_EQ(TestInterstitialPage::OKED, state);
|
| EXPECT_FALSE(contents()->ShowingInterstitialPage());
|
| - EXPECT_TRUE(contents()->GetInterstitialPage() == NULL);
|
| + EXPECT_EQ(nullptr, contents()->GetInterstitialPage());
|
| entry = controller().GetVisibleEntry();
|
| - ASSERT_TRUE(entry != NULL);
|
| + ASSERT_NE(nullptr, entry);
|
| EXPECT_TRUE(entry->GetURL() == url1);
|
|
|
| EXPECT_EQ(1, controller().GetEntryCount());
|
| @@ -1799,11 +1890,13 @@ TEST_F(WebContentsImplTest, ShowInterstitialThenNavigate) {
|
| new TestInterstitialPage(contents(), true, url, &state, &deleted);
|
| TestInterstitialPageStateGuard state_guard(interstitial);
|
| interstitial->Show();
|
| - interstitial->TestDidNavigate(1, url);
|
| + NavigationEntry* interstitial_entry = controller().GetTransientEntry();
|
| + interstitial->TestDidNavigate(1, interstitial_entry->GetUniqueID(), true,
|
| + url);
|
|
|
| // While interstitial showing, navigate to a new URL.
|
| const GURL url2("http://www.yahoo.com");
|
| - contents()->GetMainFrame()->SendNavigate(1, url2);
|
| + contents()->GetMainFrame()->SendNavigate(1, 1, true, url2);
|
|
|
| EXPECT_EQ(TestInterstitialPage::CANCELED, state);
|
|
|
| @@ -1815,8 +1908,9 @@ TEST_F(WebContentsImplTest, ShowInterstitialThenNavigate) {
|
| TEST_F(WebContentsImplTest, ShowInterstitialThenGoBack) {
|
| // Navigate to a page so we have a navigation entry in the controller.
|
| GURL url1("http://www.google.com");
|
| - contents()->GetMainFrame()->SendNavigate(1, url1);
|
| + contents()->GetMainFrame()->SendNavigate(1, 0, true, url1);
|
| EXPECT_EQ(1, controller().GetEntryCount());
|
| + NavigationEntry* entry = controller().GetLastCommittedEntry();
|
|
|
| // Show interstitial.
|
| TestInterstitialPage::InterstitialState state =
|
| @@ -1828,16 +1922,19 @@ TEST_F(WebContentsImplTest, ShowInterstitialThenGoBack) {
|
| &state, &deleted);
|
| TestInterstitialPageStateGuard state_guard(interstitial);
|
| interstitial->Show();
|
| - interstitial->TestDidNavigate(2, interstitial_url);
|
| + NavigationEntry* interstitial_entry = controller().GetTransientEntry();
|
| + interstitial->TestDidNavigate(2, interstitial_entry->GetUniqueID(), true,
|
| + interstitial_url);
|
|
|
| // While the interstitial is showing, go back.
|
| controller().GoBack();
|
| - contents()->GetMainFrame()->SendNavigate(1, url1);
|
| + contents()->GetMainFrame()->SendNavigate(
|
| + 1, entry->GetUniqueID(), false, url1);
|
|
|
| // Make sure we are back to the original page and that the interstitial is
|
| // gone.
|
| EXPECT_EQ(TestInterstitialPage::CANCELED, state);
|
| - NavigationEntry* entry = controller().GetVisibleEntry();
|
| + entry = controller().GetVisibleEntry();
|
| ASSERT_TRUE(entry);
|
| EXPECT_EQ(url1.spec(), entry->GetURL().spec());
|
|
|
| @@ -1850,8 +1947,9 @@ TEST_F(WebContentsImplTest, ShowInterstitialThenGoBack) {
|
| TEST_F(WebContentsImplTest, ShowInterstitialCrashRendererThenGoBack) {
|
| // Navigate to a page so we have a navigation entry in the controller.
|
| GURL url1("http://www.google.com");
|
| - contents()->GetMainFrame()->SendNavigate(1, url1);
|
| + contents()->GetMainFrame()->SendNavigate(1, 0, true, url1);
|
| EXPECT_EQ(1, controller().GetEntryCount());
|
| + NavigationEntry* entry = controller().GetLastCommittedEntry();
|
|
|
| // Show interstitial.
|
| TestInterstitialPage::InterstitialState state =
|
| @@ -1863,7 +1961,9 @@ TEST_F(WebContentsImplTest, ShowInterstitialCrashRendererThenGoBack) {
|
| &state, &deleted);
|
| TestInterstitialPageStateGuard state_guard(interstitial);
|
| interstitial->Show();
|
| - interstitial->TestDidNavigate(2, interstitial_url);
|
| + NavigationEntry* interstitial_entry = controller().GetTransientEntry();
|
| + interstitial->TestDidNavigate(2, interstitial_entry->GetUniqueID(), true,
|
| + interstitial_url);
|
|
|
| // Crash the renderer
|
| main_rfh()->OnMessageReceived(
|
| @@ -1872,12 +1972,13 @@ TEST_F(WebContentsImplTest, ShowInterstitialCrashRendererThenGoBack) {
|
|
|
| // While the interstitial is showing, go back.
|
| controller().GoBack();
|
| - contents()->GetMainFrame()->SendNavigate(1, url1);
|
| + contents()->GetMainFrame()->SendNavigate(
|
| + 1, entry->GetUniqueID(), false, url1);
|
|
|
| // Make sure we are back to the original page and that the interstitial is
|
| // gone.
|
| EXPECT_EQ(TestInterstitialPage::CANCELED, state);
|
| - NavigationEntry* entry = controller().GetVisibleEntry();
|
| + entry = controller().GetVisibleEntry();
|
| ASSERT_TRUE(entry);
|
| EXPECT_EQ(url1.spec(), entry->GetURL().spec());
|
|
|
| @@ -1890,7 +1991,7 @@ TEST_F(WebContentsImplTest, ShowInterstitialCrashRendererThenGoBack) {
|
| TEST_F(WebContentsImplTest, ShowInterstitialCrashRendererThenNavigate) {
|
| // Navigate to a page so we have a navigation entry in the controller.
|
| GURL url1("http://www.google.com");
|
| - contents()->GetMainFrame()->SendNavigate(1, url1);
|
| + contents()->GetMainFrame()->SendNavigate(1, 0, true, url1);
|
| EXPECT_EQ(1, controller().GetEntryCount());
|
|
|
| // Show interstitial.
|
| @@ -1903,13 +2004,15 @@ TEST_F(WebContentsImplTest, ShowInterstitialCrashRendererThenNavigate) {
|
| &state, &deleted);
|
| TestInterstitialPageStateGuard state_guard(interstitial);
|
| interstitial->Show();
|
| + NavigationEntry* interstitial_entry = controller().GetTransientEntry();
|
|
|
| // Crash the renderer
|
| main_rfh()->OnMessageReceived(
|
| FrameHostMsg_RenderProcessGone(
|
| 0, base::TERMINATION_STATUS_PROCESS_CRASHED, -1));
|
|
|
| - interstitial->TestDidNavigate(2, interstitial_url);
|
| + interstitial->TestDidNavigate(2, interstitial_entry->GetUniqueID(), true,
|
| + interstitial_url);
|
| }
|
|
|
| // Test navigating to a page that shows an interstitial, then close the
|
| @@ -1924,7 +2027,9 @@ TEST_F(WebContentsImplTest, ShowInterstitialThenCloseTab) {
|
| new TestInterstitialPage(contents(), true, url, &state, &deleted);
|
| TestInterstitialPageStateGuard state_guard(interstitial);
|
| interstitial->Show();
|
| - interstitial->TestDidNavigate(1, url);
|
| + NavigationEntry* interstitial_entry = controller().GetTransientEntry();
|
| + interstitial->TestDidNavigate(1, interstitial_entry->GetUniqueID(), true,
|
| + url);
|
|
|
| // Now close the contents.
|
| DeleteContents();
|
| @@ -1946,7 +2051,9 @@ TEST_F(WebContentsImplTest, ShowInterstitialThenCloseAndShutdown) {
|
| new TestInterstitialPage(contents(), true, url, &state, &deleted);
|
| TestInterstitialPageStateGuard state_guard(interstitial);
|
| interstitial->Show();
|
| - interstitial->TestDidNavigate(1, url);
|
| + NavigationEntry* interstitial_entry = controller().GetTransientEntry();
|
| + interstitial->TestDidNavigate(1, interstitial_entry->GetUniqueID(), true,
|
| + url);
|
| RenderViewHostImpl* rvh = static_cast<RenderViewHostImpl*>(
|
| interstitial->GetMainFrame()->GetRenderViewHost());
|
|
|
| @@ -1969,7 +2076,7 @@ TEST_F(WebContentsImplTest, ShowInterstitialThenCloseAndShutdown) {
|
| TEST_F(WebContentsImplTest, ShowInterstitialProceedMultipleCommands) {
|
| // Navigate to a page so we have a navigation entry in the controller.
|
| GURL url1("http://www.google.com");
|
| - contents()->GetMainFrame()->SendNavigate(1, url1);
|
| + contents()->GetMainFrame()->SendNavigate(1, 0, true, url1);
|
| EXPECT_EQ(1, controller().GetEntryCount());
|
|
|
| // Show an interstitial.
|
| @@ -1981,7 +2088,9 @@ TEST_F(WebContentsImplTest, ShowInterstitialProceedMultipleCommands) {
|
| new TestInterstitialPage(contents(), true, url2, &state, &deleted);
|
| TestInterstitialPageStateGuard state_guard(interstitial);
|
| interstitial->Show();
|
| - interstitial->TestDidNavigate(1, url2);
|
| + NavigationEntry* interstitial_entry = controller().GetTransientEntry();
|
| + interstitial->TestDidNavigate(1, interstitial_entry->GetUniqueID(), true,
|
| + url2);
|
|
|
| // Run a command.
|
| EXPECT_EQ(0, interstitial->command_received_count());
|
| @@ -2004,7 +2113,7 @@ TEST_F(WebContentsImplTest, ShowInterstitialProceedMultipleCommands) {
|
| TEST_F(WebContentsImplTest, ShowInterstitialOnInterstitial) {
|
| // Navigate to a page so we have a navigation entry in the controller.
|
| GURL start_url("http://www.google.com");
|
| - contents()->GetMainFrame()->SendNavigate(1, start_url);
|
| + contents()->GetMainFrame()->SendNavigate(1, 0, true, start_url);
|
| EXPECT_EQ(1, controller().GetEntryCount());
|
|
|
| // Show an interstitial.
|
| @@ -2016,7 +2125,9 @@ TEST_F(WebContentsImplTest, ShowInterstitialOnInterstitial) {
|
| new TestInterstitialPage(contents(), true, url1, &state1, &deleted1);
|
| TestInterstitialPageStateGuard state_guard1(interstitial1);
|
| interstitial1->Show();
|
| - interstitial1->TestDidNavigate(1, url1);
|
| + NavigationEntry* interstitial_entry = controller().GetTransientEntry();
|
| + interstitial1->TestDidNavigate(1, interstitial_entry->GetUniqueID(), true,
|
| + url1);
|
|
|
| // Now show another interstitial.
|
| TestInterstitialPage::InterstitialState state2 =
|
| @@ -2027,7 +2138,9 @@ TEST_F(WebContentsImplTest, ShowInterstitialOnInterstitial) {
|
| new TestInterstitialPage(contents(), true, url2, &state2, &deleted2);
|
| TestInterstitialPageStateGuard state_guard2(interstitial2);
|
| interstitial2->Show();
|
| - interstitial2->TestDidNavigate(1, url2);
|
| + interstitial_entry = controller().GetTransientEntry();
|
| + interstitial2->TestDidNavigate(1, interstitial_entry->GetUniqueID(), true,
|
| + url2);
|
|
|
| // Showing interstitial2 should have caused interstitial1 to go away.
|
| EXPECT_EQ(TestInterstitialPage::CANCELED, state1);
|
| @@ -2040,12 +2153,12 @@ TEST_F(WebContentsImplTest, ShowInterstitialOnInterstitial) {
|
| // Let's make sure interstitial2 is working as intended.
|
| interstitial2->Proceed();
|
| GURL landing_url("http://www.thepage.com");
|
| - contents()->GetMainFrame()->SendNavigate(2, landing_url);
|
| + contents()->GetMainFrame()->SendNavigate(2, 0, true, landing_url);
|
|
|
| EXPECT_FALSE(contents()->ShowingInterstitialPage());
|
| - EXPECT_TRUE(contents()->GetInterstitialPage() == NULL);
|
| + EXPECT_EQ(nullptr, contents()->GetInterstitialPage());
|
| NavigationEntry* entry = controller().GetVisibleEntry();
|
| - ASSERT_TRUE(entry != NULL);
|
| + ASSERT_NE(nullptr, entry);
|
| EXPECT_TRUE(entry->GetURL() == landing_url);
|
| EXPECT_EQ(2, controller().GetEntryCount());
|
| RunAllPendingInMessageLoop();
|
| @@ -2057,7 +2170,7 @@ TEST_F(WebContentsImplTest, ShowInterstitialOnInterstitial) {
|
| TEST_F(WebContentsImplTest, ShowInterstitialProceedShowInterstitial) {
|
| // Navigate to a page so we have a navigation entry in the controller.
|
| GURL start_url("http://www.google.com");
|
| - contents()->GetMainFrame()->SendNavigate(1, start_url);
|
| + contents()->GetMainFrame()->SendNavigate(1, 0, true, start_url);
|
| EXPECT_EQ(1, controller().GetEntryCount());
|
|
|
| // Show an interstitial.
|
| @@ -2069,7 +2182,9 @@ TEST_F(WebContentsImplTest, ShowInterstitialProceedShowInterstitial) {
|
| new TestInterstitialPage(contents(), true, url1, &state1, &deleted1);
|
| TestInterstitialPageStateGuard state_guard1(interstitial1);
|
| interstitial1->Show();
|
| - interstitial1->TestDidNavigate(1, url1);
|
| + NavigationEntry* interstitial_entry = controller().GetTransientEntry();
|
| + interstitial1->TestDidNavigate(1, interstitial_entry->GetUniqueID(), true,
|
| + url1);
|
|
|
| // Take action. The interstitial won't be hidden until the navigation is
|
| // committed.
|
| @@ -2086,7 +2201,9 @@ TEST_F(WebContentsImplTest, ShowInterstitialProceedShowInterstitial) {
|
| new TestInterstitialPage(contents(), true, url2, &state2, &deleted2);
|
| TestInterstitialPageStateGuard state_guard2(interstitial2);
|
| interstitial2->Show();
|
| - interstitial2->TestDidNavigate(1, url2);
|
| + interstitial_entry = controller().GetTransientEntry();
|
| + interstitial2->TestDidNavigate(1, interstitial_entry->GetUniqueID(), true,
|
| + url2);
|
|
|
| // Showing interstitial2 should have caused interstitial1 to go away.
|
| EXPECT_EQ(TestInterstitialPage::UNDECIDED, state2);
|
| @@ -2097,14 +2214,14 @@ TEST_F(WebContentsImplTest, ShowInterstitialProceedShowInterstitial) {
|
| // Let's make sure interstitial2 is working as intended.
|
| interstitial2->Proceed();
|
| GURL landing_url("http://www.thepage.com");
|
| - contents()->GetMainFrame()->SendNavigate(2, landing_url);
|
| + contents()->GetMainFrame()->SendNavigate(2, 0, true, landing_url);
|
|
|
| RunAllPendingInMessageLoop();
|
| EXPECT_TRUE(deleted2);
|
| EXPECT_FALSE(contents()->ShowingInterstitialPage());
|
| - EXPECT_TRUE(contents()->GetInterstitialPage() == NULL);
|
| + EXPECT_EQ(nullptr, contents()->GetInterstitialPage());
|
| NavigationEntry* entry = controller().GetVisibleEntry();
|
| - ASSERT_TRUE(entry != NULL);
|
| + ASSERT_NE(nullptr, entry);
|
| EXPECT_TRUE(entry->GetURL() == landing_url);
|
| EXPECT_EQ(2, controller().GetEntryCount());
|
| }
|
| @@ -2122,6 +2239,7 @@ TEST_F(WebContentsImplTest, NavigateBeforeInterstitialShows) {
|
| &state, &deleted);
|
| TestInterstitialPageStateGuard state_guard(interstitial);
|
| interstitial->Show();
|
| + NavigationEntry* interstitial_entry = controller().GetTransientEntry();
|
|
|
| // Let's simulate a navigation initiated from the browser before the
|
| // interstitial finishes loading.
|
| @@ -2133,7 +2251,8 @@ TEST_F(WebContentsImplTest, NavigateBeforeInterstitialShows) {
|
| ASSERT_FALSE(deleted);
|
|
|
| // Now let's make the interstitial navigation commit.
|
| - interstitial->TestDidNavigate(1, interstitial_url);
|
| + interstitial->TestDidNavigate(1, interstitial_entry->GetUniqueID(), true,
|
| + interstitial_url);
|
|
|
| // After it loaded the interstitial should be gone.
|
| EXPECT_EQ(TestInterstitialPage::CANCELED, state);
|
| @@ -2167,6 +2286,7 @@ TEST_F(WebContentsImplTest, TwoQuickInterstitials) {
|
| &state2, &deleted2);
|
| TestInterstitialPageStateGuard state_guard2(interstitial2);
|
| interstitial2->Show();
|
| + NavigationEntry* interstitial_entry = controller().GetTransientEntry();
|
|
|
| // The first interstitial should have been closed and deleted.
|
| EXPECT_EQ(TestInterstitialPage::CANCELED, state1);
|
| @@ -2178,7 +2298,8 @@ TEST_F(WebContentsImplTest, TwoQuickInterstitials) {
|
| ASSERT_FALSE(deleted2);
|
|
|
| // Make the interstitial navigation commit it should be showing.
|
| - interstitial2->TestDidNavigate(1, interstitial_url);
|
| + interstitial2->TestDidNavigate(1, interstitial_entry->GetUniqueID(), true,
|
| + interstitial_url);
|
| EXPECT_EQ(interstitial2, contents()->GetInterstitialPage());
|
| }
|
|
|
| @@ -2205,7 +2326,9 @@ TEST_F(WebContentsImplTest, InterstitialCrasher) {
|
| interstitial =
|
| new TestInterstitialPage(contents(), true, url, &state, &deleted);
|
| interstitial->Show();
|
| - interstitial->TestDidNavigate(1, url);
|
| + NavigationEntry* interstitial_entry = controller().GetTransientEntry();
|
| + interstitial->TestDidNavigate(1, interstitial_entry->GetUniqueID(), true,
|
| + url);
|
| // Simulate a renderer crash.
|
| interstitial->TestRenderViewTerminated(
|
| base::TERMINATION_STATUS_PROCESS_CRASHED, -1);
|
| @@ -2234,7 +2357,9 @@ TEST_F(WebContentsImplTest, NewInterstitialDoesNotCancelPendingEntry) {
|
| new TestInterstitialPage(contents(), true, kGURL, &state, &deleted);
|
| TestInterstitialPageStateGuard state_guard(interstitial);
|
| interstitial->Show();
|
| - interstitial->TestDidNavigate(1, kGURL);
|
| + NavigationEntry* interstitial_entry = controller().GetTransientEntry();
|
| + interstitial->TestDidNavigate(1, interstitial_entry->GetUniqueID(), true,
|
| + kGURL);
|
|
|
| // Initiate a new navigation from the browser that also triggers an
|
| // interstitial.
|
| @@ -2247,7 +2372,9 @@ TEST_F(WebContentsImplTest, NewInterstitialDoesNotCancelPendingEntry) {
|
| new TestInterstitialPage(contents(), true, kGURL, &state2, &deleted2);
|
| TestInterstitialPageStateGuard state_guard2(interstitial2);
|
| interstitial2->Show();
|
| - interstitial2->TestDidNavigate(1, kGURL);
|
| + interstitial_entry = controller().GetTransientEntry();
|
| + interstitial2->TestDidNavigate(1, interstitial_entry->GetUniqueID(), true,
|
| + kGURL);
|
|
|
| // Make sure we still have an entry.
|
| NavigationEntry* entry = contents()->GetController().GetPendingEntry();
|
| @@ -2271,9 +2398,11 @@ TEST_F(WebContentsImplTest, NoJSMessageOnInterstitials) {
|
| // Start a navigation to a page
|
| contents()->GetController().LoadURL(
|
| kGURL, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
|
| + NavigationEntry* entry = controller().GetPendingEntry();
|
| // DidNavigate from the page
|
| - contents()->TestDidNavigate(
|
| - contents()->GetMainFrame(), 1, kGURL, ui::PAGE_TRANSITION_TYPED);
|
| + contents()->TestDidNavigate(contents()->GetMainFrame(), 1,
|
| + entry->GetUniqueID(), true, kGURL,
|
| + ui::PAGE_TRANSITION_TYPED);
|
|
|
| // Simulate showing an interstitial while the page is showing.
|
| TestInterstitialPage::InterstitialState state =
|
| @@ -2283,7 +2412,9 @@ TEST_F(WebContentsImplTest, NoJSMessageOnInterstitials) {
|
| new TestInterstitialPage(contents(), true, kGURL, &state, &deleted);
|
| TestInterstitialPageStateGuard state_guard(interstitial);
|
| interstitial->Show();
|
| - interstitial->TestDidNavigate(1, kGURL);
|
| + NavigationEntry* interstitial_entry = controller().GetTransientEntry();
|
| + interstitial->TestDidNavigate(1, interstitial_entry->GetUniqueID(), true,
|
| + kGURL);
|
|
|
| // While the interstitial is showing, let's simulate the hidden page
|
| // attempting to show a JS message.
|
| @@ -2300,7 +2431,7 @@ TEST_F(WebContentsImplTest, NoJSMessageOnInterstitials) {
|
| TEST_F(WebContentsImplTest, CopyStateFromAndPruneSourceInterstitial) {
|
| // Navigate to a page.
|
| GURL url1("http://www.google.com");
|
| - contents()->GetMainFrame()->SendNavigate(1, url1);
|
| + contents()->GetMainFrame()->SendNavigate(1, 0, true, url1);
|
| EXPECT_EQ(1, controller().GetEntryCount());
|
|
|
| // Initiate a browser navigation that will trigger the interstitial
|
| @@ -2316,7 +2447,9 @@ TEST_F(WebContentsImplTest, CopyStateFromAndPruneSourceInterstitial) {
|
| new TestInterstitialPage(contents(), true, url2, &state, &deleted);
|
| TestInterstitialPageStateGuard state_guard(interstitial);
|
| interstitial->Show();
|
| - interstitial->TestDidNavigate(1, url2);
|
| + NavigationEntry* interstitial_entry = controller().GetTransientEntry();
|
| + interstitial->TestDidNavigate(1, interstitial_entry->GetUniqueID(), true,
|
| + url2);
|
| EXPECT_TRUE(interstitial->is_showing());
|
| EXPECT_EQ(2, controller().GetEntryCount());
|
|
|
| @@ -2365,7 +2498,9 @@ TEST_F(WebContentsImplTest, CopyStateFromAndPruneTargetInterstitial) {
|
| &deleted);
|
| TestInterstitialPageStateGuard state_guard(interstitial);
|
| interstitial->Show();
|
| - interstitial->TestDidNavigate(1, url3);
|
| + NavigationEntry* interstitial_entry = controller().GetTransientEntry();
|
| + interstitial->TestDidNavigate(1, interstitial_entry->GetUniqueID(), true,
|
| + url3);
|
| EXPECT_TRUE(interstitial->is_showing());
|
| EXPECT_EQ(2, other_controller.GetEntryCount());
|
|
|
| @@ -2414,7 +2549,7 @@ TEST_F(WebContentsImplTest, PendingContents) {
|
| contents()->AddPendingContents(other_contents.get());
|
| int route_id = other_contents->GetRenderViewHost()->GetRoutingID();
|
| other_contents.reset();
|
| - EXPECT_EQ(NULL, contents()->GetCreatedWindow(route_id));
|
| + EXPECT_EQ(nullptr, contents()->GetCreatedWindow(route_id));
|
| }
|
|
|
| TEST_F(WebContentsImplTest, CapturerOverridesPreferredSize) {
|
| @@ -2806,9 +2941,11 @@ TEST_F(WebContentsImplTest, StartStopEventsBalance) {
|
| // The frame should still be loading.
|
| controller().LoadURL(
|
| main_url, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
|
| + NavigationEntry* entry = controller().GetPendingEntry();
|
| orig_rfh->OnMessageReceived(
|
| FrameHostMsg_DidStartLoading(orig_rfh->GetRoutingID(), false));
|
| - contents()->TestDidNavigate(orig_rfh, 1, main_url, ui::PAGE_TRANSITION_TYPED);
|
| + contents()->TestDidNavigate(orig_rfh, 1, entry->GetUniqueID(), true, main_url,
|
| + ui::PAGE_TRANSITION_TYPED);
|
| EXPECT_FALSE(contents()->cross_navigation_pending());
|
| EXPECT_EQ(orig_rfh, contents()->GetMainFrame());
|
| EXPECT_TRUE(contents()->IsLoading());
|
| @@ -2823,7 +2960,7 @@ TEST_F(WebContentsImplTest, StartStopEventsBalance) {
|
| subframe->OnMessageReceived(
|
| FrameHostMsg_DidStartLoading(subframe->GetRoutingID(), true));
|
| subframe->SendNavigateWithTransition(
|
| - 1, GURL("about:blank"), ui::PAGE_TRANSITION_AUTO_SUBFRAME);
|
| + 1, 0, false, GURL("about:blank"), ui::PAGE_TRANSITION_AUTO_SUBFRAME);
|
| subframe->OnMessageReceived(
|
| FrameHostMsg_DidStopLoading(subframe->GetRoutingID()));
|
| }
|
| @@ -2834,7 +2971,7 @@ TEST_F(WebContentsImplTest, StartStopEventsBalance) {
|
| subframe->OnMessageReceived(
|
| FrameHostMsg_DidStartLoading(subframe->GetRoutingID(), true));
|
| subframe->SendNavigateWithTransition(
|
| - 1, foo_url, ui::PAGE_TRANSITION_AUTO_SUBFRAME);
|
| + 1, 0, false, foo_url, ui::PAGE_TRANSITION_AUTO_SUBFRAME);
|
| subframe->OnMessageReceived(
|
| FrameHostMsg_DidStopLoading(subframe->GetRoutingID()));
|
| }
|
| @@ -2859,14 +2996,15 @@ TEST_F(WebContentsImplTest, StartStopEventsBalance) {
|
| load_params.frame_tree_node_id =
|
| subframe->frame_tree_node()->frame_tree_node_id();
|
| controller().LoadURLWithParams(load_params);
|
| + entry = controller().GetPendingEntry();
|
|
|
| subframe->OnMessageReceived(
|
| FrameHostMsg_DidStartLoading(subframe->GetRoutingID(), true));
|
|
|
| // Commit the navigation in the child frame and send the DidStopLoading
|
| // message.
|
| - contents()->TestDidNavigate(
|
| - subframe, 3, bar_url, ui::PAGE_TRANSITION_MANUAL_SUBFRAME);
|
| + contents()->TestDidNavigate(subframe, 3, entry->GetUniqueID(), true,
|
| + bar_url, ui::PAGE_TRANSITION_MANUAL_SUBFRAME);
|
| subframe->OnMessageReceived(
|
| FrameHostMsg_DidStopLoading(subframe->GetRoutingID()));
|
| }
|
| @@ -2902,6 +3040,7 @@ TEST_F(WebContentsImplTest, NoEarlyStop) {
|
| // be a pending RenderFrameHost and the WebContents should be loading.
|
| controller().LoadURL(
|
| kUrl2, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string());
|
| + NavigationEntry* entry = controller().GetPendingEntry();
|
| EXPECT_TRUE(contents()->cross_navigation_pending());
|
| TestRenderFrameHost* pending_rfh = contents()->GetPendingMainFrame();
|
| ASSERT_TRUE(pending_rfh);
|
| @@ -2925,7 +3064,7 @@ TEST_F(WebContentsImplTest, NoEarlyStop) {
|
| // Simulate the commit and DidStopLoading from the renderer-initiated
|
| // navigation in the current RenderFrameHost. There should still be a pending
|
| // RenderFrameHost and the WebContents should still be loading.
|
| - current_rfh->SendNavigate(1, kUrl3);
|
| + current_rfh->SendNavigate(1, 0, true, kUrl3);
|
| current_rfh->OnMessageReceived(
|
| FrameHostMsg_DidStopLoading(current_rfh->GetRoutingID()));
|
| EXPECT_EQ(contents()->GetPendingMainFrame(), pending_rfh);
|
| @@ -2933,7 +3072,7 @@ TEST_F(WebContentsImplTest, NoEarlyStop) {
|
|
|
| // Commit the navigation. The formerly pending RenderFrameHost should now be
|
| // the current RenderFrameHost and the WebContents should still be loading.
|
| - contents()->TestDidNavigate(pending_rfh, 1, kUrl2,
|
| + contents()->TestDidNavigate(pending_rfh, 1, entry->GetUniqueID(), true, kUrl2,
|
| ui::PAGE_TRANSITION_TYPED);
|
| EXPECT_FALSE(contents()->GetPendingMainFrame());
|
| TestRenderFrameHost* new_current_rfh = contents()->GetMainFrame();
|
|
|