Chromium Code Reviews| Index: content/browser/frame_host/render_frame_host_manager_unittest.cc |
| diff --git a/content/browser/frame_host/render_frame_host_manager_unittest.cc b/content/browser/frame_host/render_frame_host_manager_unittest.cc |
| index 4f38c49ac48b8eed92aea0ccdf7ad560cc8c2ae5..b1e9873d750ea7bff6011a1cf865dd33fbf58da0 100644 |
| --- a/content/browser/frame_host/render_frame_host_manager_unittest.cc |
| +++ b/content/browser/frame_host/render_frame_host_manager_unittest.cc |
| @@ -261,17 +261,16 @@ class RenderFrameHostManagerTest : public RenderViewHostImplTestHarness { |
| // for us. |
| controller().LoadURL( |
| url, Referrer(), ui::PAGE_TRANSITION_LINK, std::string()); |
| + |
| + // Simulate the BeforeUnload_ACK that is received from the current renderer |
| + // for a cross-site navigation. |
| + contents()->GetMainFrame()->PrepareForCommit(url); |
|
clamy
2015/01/13 12:41:59
It was necessary to move this above the part where
nasko
2015/01/17 00:22:01
Can you put some of this explanation in the actual
clamy
2015/01/19 17:29:20
Done.
|
| + |
| TestRenderFrameHost* old_rfh = contents()->GetMainFrame(); |
| TestRenderFrameHost* active_rfh = contents()->GetPendingMainFrame() |
| ? contents()->GetPendingMainFrame() |
| : old_rfh; |
| - |
| - // Simulate the BeforeUnload_ACK that is received from the current renderer |
| - // for a cross-site navigation. |
| - if (old_rfh != active_rfh) { |
| - old_rfh->SendBeforeUnloadACK(true); |
| - EXPECT_EQ(RenderFrameHostImpl::STATE_DEFAULT, old_rfh->rfh_state()); |
| - } |
| + EXPECT_EQ(RenderFrameHostImpl::STATE_DEFAULT, old_rfh->rfh_state()); |
| // Commit the navigation with a new page ID. |
| int32 max_page_id = contents()->GetMaxPageIDForSiteInstance( |
| @@ -344,6 +343,7 @@ class RenderFrameHostManagerTest : public RenderViewHostImplTestHarness { |
| // Navigate to a cross-site URL. |
| contents()->GetController().LoadURL( |
| kDestUrl, Referrer(), ui::PAGE_TRANSITION_LINK, std::string()); |
| + contents()->GetMainFrame()->PrepareForCommit(kDestUrl); |
| EXPECT_TRUE(contents()->cross_navigation_pending()); |
| // Manually increase the number of active frames in the |
| @@ -395,6 +395,7 @@ TEST_F(RenderFrameHostManagerTest, NewTabPageProcesses) { |
| // we use the committed one. |
| contents2->GetController().LoadURL( |
| kChromeUrl, Referrer(), ui::PAGE_TRANSITION_LINK, std::string()); |
| + contents2->GetMainFrame()->PrepareForCommit(kChromeUrl); |
| TestRenderFrameHost* ntp_rfh2 = contents2->GetMainFrame(); |
| EXPECT_FALSE(contents2->cross_navigation_pending()); |
| ntp_rfh2->SendNavigate(100, kChromeUrl); |
| @@ -403,11 +404,11 @@ TEST_F(RenderFrameHostManagerTest, NewTabPageProcesses) { |
| // requiring a beforeunload ack. |
| contents2->GetController().LoadURL( |
| kDestUrl, Referrer(), ui::PAGE_TRANSITION_LINK, std::string()); |
| + contents2->GetMainFrame()->PrepareForCommit(kDestUrl); |
| EXPECT_TRUE(contents2->cross_navigation_pending()); |
| TestRenderFrameHost* dest_rfh2 = contents2->GetPendingMainFrame(); |
| ASSERT_TRUE(dest_rfh2); |
| - ntp_rfh2->SendBeforeUnloadACK(true); |
| dest_rfh2->SendNavigate(101, kDestUrl); |
| // The two RFH's should be different in every way. |
| @@ -424,7 +425,7 @@ TEST_F(RenderFrameHostManagerTest, NewTabPageProcesses) { |
| contents2->GetController().LoadURL( |
| kChromeUrl, Referrer(), ui::PAGE_TRANSITION_LINK, std::string()); |
| - dest_rfh2->SendBeforeUnloadACK(true); |
| + contents2->GetMainFrame()->PrepareForCommit(kChromeUrl); |
| contents2->GetPendingMainFrame()->SendNavigate(102, kChromeUrl); |
| EXPECT_NE(contents()->GetMainFrame()->GetSiteInstance(), |
| @@ -757,9 +758,7 @@ TEST_F(RenderFrameHostManagerTest, AlwaysSendEnableViewSourceMode) { |
| controller().LoadURL( |
| kUrl, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string()); |
| // Simulate response from RenderFrame for DispatchBeforeUnload. |
| - base::TimeTicks now = base::TimeTicks::Now(); |
| - contents()->GetMainFrame()->OnMessageReceived(FrameHostMsg_BeforeUnload_ACK( |
| - contents()->GetMainFrame()->GetRoutingID(), true, now, now)); |
| + contents()->GetMainFrame()->PrepareForCommit(kUrl); |
| ASSERT_TRUE(contents()->GetPendingMainFrame()) |
| << "Expected new pending RenderFrameHost to be created."; |
| RenderFrameHost* last_rfh = contents()->GetPendingMainFrame(); |
| @@ -779,6 +778,7 @@ TEST_F(RenderFrameHostManagerTest, AlwaysSendEnableViewSourceMode) { |
| // Navigate, again. |
| controller().LoadURL( |
| kUrl, Referrer(), ui::PAGE_TRANSITION_TYPED, std::string()); |
| + contents()->GetMainFrame()->PrepareForCommit(kUrl); |
| // The same RenderViewHost should be reused. |
| EXPECT_FALSE(contents()->GetPendingMainFrame()); |
| EXPECT_TRUE(last_rfh == contents()->GetMainFrame()); |
| @@ -1022,6 +1022,7 @@ TEST_F(RenderFrameHostManagerTest, PageDoesBackAndReload) { |
| // Now let's simulate the evil page calling history.back(). |
| contents()->OnGoToEntryAtOffset(-1); |
| + contents()->GetMainFrame()->PrepareForCommit(kUrl1); |
| // We should have a new pending RFH. |
| // Note that in this case, the navigation has not committed, so evil_rfh will |
| // not be deleted yet. |
| @@ -1105,9 +1106,9 @@ TEST_F(RenderFrameHostManagerTest, NavigateAfterMissingSwapOutACK) { |
| // happen, but we have seen it when going back quickly across many entries |
| // (http://crbug.com/93427). |
| contents()->GetController().GoBack(); |
| - EXPECT_TRUE(rfh2->is_waiting_for_beforeunload_ack()); |
| - contents()->ProceedWithCrossSiteNavigation(); |
| - EXPECT_FALSE(rfh2->is_waiting_for_beforeunload_ack()); |
| + EXPECT_TRUE(rfh2->IsWaitingForBeforeUnloadACK()); |
| + contents()->GetMainFrame()->PrepareForCommit(kUrl1); |
| + EXPECT_FALSE(rfh2->IsWaitingForBeforeUnloadACK()); |
| // The back navigation commits. |
| const NavigationEntry* entry1 = contents()->GetController().GetPendingEntry(); |
| @@ -1117,7 +1118,7 @@ TEST_F(RenderFrameHostManagerTest, NavigateAfterMissingSwapOutACK) { |
| // We should be able to navigate forward. |
| contents()->GetController().GoForward(); |
| - contents()->ProceedWithCrossSiteNavigation(); |
| + contents()->GetMainFrame()->PrepareForCommit(kUrl2); |
| const NavigationEntry* entry2 = contents()->GetController().GetPendingEntry(); |
| rfh2->SendNavigate(entry2->GetPageID(), entry2->GetURL()); |
| EXPECT_EQ(rfh2, main_test_rfh()); |
| @@ -1288,7 +1289,7 @@ TEST_F(RenderFrameHostManagerTest, DisownOpenerDuringNavigation) { |
| // Start a back navigation so that rfh1 becomes the pending RFH. |
| contents()->GetController().GoBack(); |
| - contents()->ProceedWithCrossSiteNavigation(); |
| + contents()->GetMainFrame()->PrepareForCommit(kUrl1); |
| // Disown the opener from rfh2. |
| rfh2->DidDisownOpener(); |
| @@ -1329,7 +1330,7 @@ TEST_F(RenderFrameHostManagerTest, DisownOpenerAfterNavigation) { |
| // Commit a back navigation before the DidDisownOpener message arrives. |
| // rfh1 will be kept alive because of the opener tab. |
| contents()->GetController().GoBack(); |
| - contents()->ProceedWithCrossSiteNavigation(); |
| + contents()->GetMainFrame()->PrepareForCommit(kUrl1); |
| const NavigationEntry* entry1 = contents()->GetController().GetPendingEntry(); |
| rfh1->SendNavigate(entry1->GetPageID(), entry1->GetURL()); |
| @@ -1385,6 +1386,7 @@ TEST_F(RenderFrameHostManagerTest, CleanUpSwappedOutRVHOnProcessCrash) { |
| // Reload the initial tab. This should recreate the opener's swapped out RVH |
| // in the original SiteInstance. |
| contents()->GetController().Reload(true); |
| + contents()->GetMainFrame()->PrepareForCommit(kUrl1); |
| EXPECT_EQ(opener1_manager->GetSwappedOutRenderViewHost( |
| rvh1->GetSiteInstance())->GetRoutingID(), |
| test_rvh()->opener_route_id()); |
| @@ -1577,6 +1579,10 @@ TEST_F(RenderFrameHostManagerTest, CloseWithPendingWhileUnresponsive) { |
| // Start a navigation to a new site. |
| controller().LoadURL( |
| kUrl2, Referrer(), ui::PAGE_TRANSITION_LINK, std::string()); |
| + if (base::CommandLine::ForCurrentProcess()->HasSwitch( |
| + switches::kEnableBrowserSideNavigation)) { |
| + rfh1->PrepareForCommit(kUrl2); |
| + } |
| EXPECT_TRUE(contents()->cross_navigation_pending()); |
| // Simulate the unresponsiveness timer. The tab should close. |
| @@ -1600,9 +1606,7 @@ TEST_F(RenderFrameHostManagerTest, DeleteFrameAfterSwapOutACK) { |
| // Navigate to new site, simulating onbeforeunload approval. |
| controller().LoadURL( |
| kUrl2, Referrer(), ui::PAGE_TRANSITION_LINK, std::string()); |
| - base::TimeTicks now = base::TimeTicks::Now(); |
| - contents()->GetMainFrame()->OnMessageReceived( |
| - FrameHostMsg_BeforeUnload_ACK(0, true, now, now)); |
| + contents()->GetMainFrame()->PrepareForCommit(kUrl2); |
| EXPECT_TRUE(contents()->cross_navigation_pending()); |
| EXPECT_EQ(RenderFrameHostImpl::STATE_DEFAULT, rfh1->rfh_state()); |
| TestRenderFrameHost* rfh2 = contents()->GetPendingMainFrame(); |
| @@ -1650,9 +1654,7 @@ TEST_F(RenderFrameHostManagerTest, SwapOutFrameAfterSwapOutACK) { |
| // Navigate to new site, simulating onbeforeunload approval. |
| controller().LoadURL( |
| kUrl2, Referrer(), ui::PAGE_TRANSITION_LINK, std::string()); |
| - base::TimeTicks now = base::TimeTicks::Now(); |
| - contents()->GetMainFrame()->OnMessageReceived( |
| - FrameHostMsg_BeforeUnload_ACK(0, true, now, now)); |
| + contents()->GetMainFrame()->PrepareForCommit(kUrl2); |
| EXPECT_TRUE(contents()->cross_navigation_pending()); |
| EXPECT_EQ(RenderFrameHostImpl::STATE_DEFAULT, rfh1->rfh_state()); |
| TestRenderFrameHost* rfh2 = contents()->GetPendingMainFrame(); |
| @@ -1695,9 +1697,7 @@ TEST_F(RenderFrameHostManagerTest, |
| // Navigate to new site, simulating onbeforeunload approval. |
| controller().LoadURL( |
| kUrl2, Referrer(), ui::PAGE_TRANSITION_LINK, std::string()); |
| - base::TimeTicks now = base::TimeTicks::Now(); |
| - rfh1->OnMessageReceived( |
| - FrameHostMsg_BeforeUnload_ACK(0, true, now, now)); |
| + rfh1->PrepareForCommit(kUrl2); |
| EXPECT_TRUE(contents()->cross_navigation_pending()); |
| TestRenderFrameHost* rfh2 = contents()->GetPendingMainFrame(); |