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 eac088a9e7d94491d6f055654b1240125556fde4..c026ab82643c7fd4fc5d3d1498a6a5d471d7cab0 100644 |
| --- a/content/browser/frame_host/render_frame_host_manager_unittest.cc |
| +++ b/content/browser/frame_host/render_frame_host_manager_unittest.cc |
| @@ -269,20 +269,8 @@ class RenderFrameHostManagerTest |
| factory_.set_should_create_webui(should_create_webui); |
| } |
| - void StartCrossSiteTransition(TestWebContents* contents) { |
| - std::vector<GURL> url_chain; |
| - contents->GetRenderManagerForTesting()->OnCrossSiteResponse( |
| - contents->GetRenderManagerForTesting()->pending_frame_host(), |
| - GlobalRequestID(0, 0), scoped_ptr<CrossSiteTransferringRequest>(), |
| - url_chain, Referrer(), PAGE_TRANSITION_TYPED, false); |
| - EXPECT_TRUE(contents->cross_navigation_pending()); |
| - RenderViewHostImpl* rvh = contents->GetRenderViewHost(); |
| - EXPECT_EQ(RenderViewHostImpl::STATE_WAITING_FOR_UNLOAD_ACK, |
| - rvh->rvh_state()); |
| - } |
| - |
| void NavigateActiveAndCommit(const GURL& url) { |
| - // Note: we navigate the active RenderViewHost because previous navigations |
| + // Note: we navigate the active RenderFrameHost because previous navigations |
| // won't have committed yet, so NavigateAndCommit does the wrong thing |
| // for us. |
| controller().LoadURL(url, Referrer(), PAGE_TRANSITION_LINK, std::string()); |
| @@ -299,25 +287,36 @@ class RenderFrameHostManagerTest |
| int32 max_page_id = contents()->GetMaxPageIDForSiteInstance( |
| active_rvh()->GetSiteInstance()); |
| - // Simulate the response coming from the pending renderer. |
| - if (old_rvh != active_rvh()) |
| - StartCrossSiteTransition(contents()); |
| - |
| - // Simulate the SwapOut_ACK that fires if you commit a cross-site |
| - // navigation. |
| - if (old_rvh != active_rvh()) { |
| - old_rvh->OnSwappedOut(false); |
| - EXPECT_EQ(RenderViewHostImpl::STATE_WAITING_FOR_COMMIT, |
| - old_rvh->rvh_state()); |
| - } |
| - |
| // Use an observer to avoid accessing a deleted renderer later on when the |
| // state is being checked. |
| RenderViewHostDeletedObserver rvh_observer(old_rvh); |
| active_test_rvh()->SendNavigate(max_page_id + 1, url); |
| - if (old_rvh != active_rvh() && !rvh_observer.deleted()) |
| - EXPECT_TRUE(old_rvh->IsSwappedOut()); |
| + // Make sure that we start to run the unload handler at the time of commit. |
| + bool expecting_rvh_shutdown = false; |
| + if (old_rvh != active_rvh() && !rvh_observer.deleted()) { |
| + if (!static_cast<SiteInstanceImpl*>( |
| + old_rvh->GetSiteInstance())->active_view_count()) { |
| + expecting_rvh_shutdown = true; |
| + EXPECT_EQ(RenderViewHostImpl::STATE_PENDING_SHUTDOWN, |
| + old_rvh->rvh_state()); |
| + } else { |
| + EXPECT_EQ(RenderViewHostImpl::STATE_PENDING_SWAP_OUT, |
| + old_rvh->rvh_state()); |
| + } |
| + } |
| + |
| + // Simulate the swap out ACK coming from the pending renderer. This should |
| + // either shut down the old RVH or leave it in a swapped out state. |
| + if (old_rvh != active_rvh()) { |
| + old_rvh->OnSwappedOut(false); |
| + if (expecting_rvh_shutdown) { |
| + EXPECT_TRUE(rvh_observer.deleted()); |
| + } else { |
| + EXPECT_EQ(RenderViewHostImpl::STATE_SWAPPED_OUT, |
| + old_rvh->rvh_state()); |
| + } |
| + } |
| } |
| bool ShouldSwapProcesses(RenderFrameHostManager* manager, |
| @@ -423,7 +422,6 @@ TEST_F(RenderFrameHostManagerTest, NewTabPageProcesses) { |
| ASSERT_TRUE(dest_rfh2); |
| ntp_rfh2->GetRenderViewHost()->SendBeforeUnloadACK(true); |
| - StartCrossSiteTransition(contents2.get()); |
| dest_rfh2->SendNavigate(101, kDestUrl); |
| // The two RFH's should be different in every way. |
| @@ -441,7 +439,6 @@ TEST_F(RenderFrameHostManagerTest, NewTabPageProcesses) { |
| contents2->GetController().LoadURL( |
| kChromeUrl, Referrer(), PAGE_TRANSITION_LINK, std::string()); |
| dest_rfh2->GetRenderViewHost()->SendBeforeUnloadACK(true); |
| - StartCrossSiteTransition(contents2.get()); |
| contents2->GetPendingMainFrame()->SendNavigate(102, kChromeUrl); |
| EXPECT_NE(contents()->GetMainFrame()->GetSiteInstance(), |
| @@ -877,193 +874,6 @@ TEST_F(RenderFrameHostManagerTest, Navigate) { |
| notifications.Check1AndReset(NOTIFICATION_RENDER_VIEW_HOST_CHANGED)); |
| } |
| -// Tests the Navigate function. In this unit test we verify that the Navigate |
| -// function can handle a new navigation event before the previous navigation |
| -// has been committed. This is also a regression test for |
| -// http://crbug.com/104600. |
| -TEST_F(RenderFrameHostManagerTest, NavigateWithEarlyReNavigation) { |
|
nasko
2014/08/19 16:45:22
Just to make sure I understand it right, we don't
Charlie Reis
2014/08/19 21:20:31
Correct. This was exercising a bug that happened
|
| - TestNotificationTracker notifications; |
| - |
| - SiteInstance* instance = SiteInstance::Create(browser_context()); |
| - |
| - scoped_ptr<TestWebContents> web_contents( |
| - TestWebContents::Create(browser_context(), instance)); |
| - notifications.ListenFor(NOTIFICATION_RENDER_VIEW_HOST_CHANGED, |
| - Source<WebContents>(web_contents.get())); |
| - |
| - RenderFrameHostManager* manager = web_contents->GetRenderManagerForTesting(); |
| - |
| - // 1) The first navigation. -------------------------- |
| - const GURL kUrl1("http://www.google.com/"); |
| - NavigationEntryImpl entry1(NULL /* instance */, -1 /* page_id */, kUrl1, |
| - Referrer(), base::string16() /* title */, |
| - PAGE_TRANSITION_TYPED, |
| - false /* is_renderer_init */); |
| - RenderFrameHostImpl* host = manager->Navigate(entry1); |
| - |
| - // The RenderFrameHost created in Init will be reused. |
| - EXPECT_TRUE(host == manager->current_frame_host()); |
| - EXPECT_FALSE(manager->pending_frame_host()); |
| - |
| - // We should observe a notification. |
| - EXPECT_TRUE( |
| - notifications.Check1AndReset(NOTIFICATION_RENDER_VIEW_HOST_CHANGED)); |
| - notifications.Reset(); |
| - |
| - // Commit. |
| - manager->DidNavigateFrame(host); |
| - |
| - // Commit to SiteInstance should be delayed until RenderView commit. |
| - EXPECT_TRUE(host == manager->current_frame_host()); |
| - ASSERT_TRUE(host); |
| - EXPECT_FALSE(static_cast<SiteInstanceImpl*>(host->GetSiteInstance())-> |
| - HasSite()); |
| - static_cast<SiteInstanceImpl*>(host->GetSiteInstance())->SetSite(kUrl1); |
| - |
| - // 2) Cross-site navigate to next site. ------------------------- |
| - const GURL kUrl2("http://www.example.com"); |
| - NavigationEntryImpl entry2( |
| - NULL /* instance */, -1 /* page_id */, kUrl2, Referrer(), |
| - base::string16() /* title */, PAGE_TRANSITION_TYPED, |
| - false /* is_renderer_init */); |
| - RenderFrameHostImpl* host2 = manager->Navigate(entry2); |
| - int host2_process_id = host2->GetProcess()->GetID(); |
| - |
| - // A new RenderFrameHost should be created. |
| - EXPECT_TRUE(manager->pending_frame_host()); |
| - ASSERT_EQ(host2, manager->pending_frame_host()); |
| - EXPECT_NE(host2, host); |
| - |
| - // Check that the navigation is still suspended because the old RVH |
| - // is not swapped out, yet. |
| - EXPECT_TRUE(host2->are_navigations_suspended()); |
| - MockRenderProcessHost* test_process_host2 = |
| - static_cast<MockRenderProcessHost*>(host2->GetProcess()); |
| - test_process_host2->sink().ClearMessages(); |
| - host2->render_view_host()->NavigateToURL(kUrl2); |
| - EXPECT_FALSE(test_process_host2->sink().GetUniqueMessageMatching( |
| - FrameMsg_Navigate::ID)); |
| - |
| - // Allow closing the current Render View (precondition for swapping out |
| - // the RVH): Simulate response from RenderFrame for FrameMsg_BeforeUnload sent |
| - // by DispatchBeforeUnload. |
| - TestRenderViewHost* test_host = |
| - static_cast<TestRenderViewHost*>(host->render_view_host()); |
| - MockRenderProcessHost* test_process_host = |
| - static_cast<MockRenderProcessHost*>(test_host->GetProcess()); |
| - EXPECT_TRUE(test_process_host->sink().GetUniqueMessageMatching( |
| - FrameMsg_BeforeUnload::ID)); |
| - test_host->SendBeforeUnloadACK(true); |
| - |
| - // CrossSiteResourceHandler::StartCrossSiteTransition triggers a |
| - // call of RenderFrameHostManager::SwapOutOldPage before |
| - // RenderFrameHostManager::DidNavigateFrame is called. |
| - // The RVH is swapped out after receiving the unload ack. |
| - manager->SwapOutOldPage(); |
| - EXPECT_TRUE(test_process_host->sink().GetUniqueMessageMatching( |
| - FrameMsg_SwapOut::ID)); |
| - test_host->OnSwappedOut(false); |
| - |
| - EXPECT_EQ(host, manager->current_frame_host()); |
| - EXPECT_FALSE(manager->current_frame_host()->is_swapped_out()); |
| - EXPECT_EQ(host2, manager->pending_frame_host()); |
| - // There should be still no navigation messages being sent. |
| - EXPECT_FALSE(test_process_host2->sink().GetUniqueMessageMatching( |
| - FrameMsg_Navigate::ID)); |
| - |
| - // 3) Cross-site navigate to next site before 2) has committed. -------------- |
| - const GURL kUrl3("http://webkit.org/"); |
| - NavigationEntryImpl entry3(NULL /* instance */, -1 /* page_id */, kUrl3, |
| - Referrer(), base::string16() /* title */, |
| - PAGE_TRANSITION_TYPED, |
| - false /* is_renderer_init */); |
| - test_process_host->sink().ClearMessages(); |
| - RenderFrameHostImpl* host3 = manager->Navigate(entry3); |
| - |
| - // A new RenderFrameHost should be created. host2 is now deleted. |
| - EXPECT_TRUE(manager->pending_frame_host()); |
| - ASSERT_EQ(host3, manager->pending_frame_host()); |
| - EXPECT_NE(host3, host); |
| - EXPECT_NE(host3->GetProcess()->GetID(), host2_process_id); |
| - |
| - // Navigations in the new RFH should be suspended. |
| - EXPECT_TRUE(host3->are_navigations_suspended()); |
| - EXPECT_EQ(host, manager->current_frame_host()); |
| - EXPECT_FALSE(manager->current_frame_host()->is_swapped_out()); |
| - |
| - // Simulate a response to the second beforeunload request. |
| - EXPECT_TRUE(test_process_host->sink().GetUniqueMessageMatching( |
| - FrameMsg_BeforeUnload::ID)); |
| - test_host->SendBeforeUnloadACK(true); |
| - |
| - // CrossSiteResourceHandler::StartCrossSiteTransition triggers a |
| - // call of RenderFrameHostManager::SwapOutOldPage before |
| - // RenderFrameHostManager::DidNavigateFrame is called. Since the previous |
| - // navigation has already caused the renderer to start swapping out, there |
| - // will be no more SwapOut messages being sent. |
| - manager->SwapOutOldPage(); |
| - EXPECT_FALSE(test_process_host->sink().GetUniqueMessageMatching( |
| - FrameMsg_SwapOut::ID)); |
| - test_host->OnSwappedOut(false); |
| - |
| - // Commit. |
| - manager->DidNavigateFrame(host3); |
| - EXPECT_TRUE(host3 == manager->current_frame_host()); |
| - ASSERT_TRUE(host3); |
| - EXPECT_TRUE(static_cast<SiteInstanceImpl*>(host3->GetSiteInstance())-> |
| - HasSite()); |
| - // Check the pending RenderFrameHost has been committed. |
| - EXPECT_FALSE(manager->pending_frame_host()); |
| - |
| - // We should observe a notification. |
| - EXPECT_TRUE( |
| - notifications.Check1AndReset(NOTIFICATION_RENDER_VIEW_HOST_CHANGED)); |
| -} |
| - |
| -// Test that navigation is not blocked when we make new navigation before |
| -// previous one has been committed. This is also a regression test for |
| -// http://crbug.com/104600. |
| -TEST_F(RenderFrameHostManagerTest, NewCrossNavigationBetweenSwapOutAndCommit) { |
| - const GURL kUrl1("http://www.google.com/"); |
| - const GURL kUrl2("http://www.chromium.org/"); |
| - const GURL kUrl3("http://www.youtube.com/"); |
| - |
| - contents()->NavigateAndCommit(kUrl1); |
| - TestRenderViewHost* rvh1 = test_rvh(); |
| - |
| - // Keep active_view_count nonzero so that no swapped out views in |
| - // this SiteInstance get forcefully deleted. |
| - static_cast<SiteInstanceImpl*>(rvh1->GetSiteInstance())-> |
| - increment_active_view_count(); |
| - |
| - // Navigate but don't commit. |
| - contents()->GetController().LoadURL( |
| - kUrl2, Referrer(), PAGE_TRANSITION_LINK, std::string()); |
| - EXPECT_TRUE(rvh1->is_waiting_for_beforeunload_ack()); |
| - contents()->ProceedWithCrossSiteNavigation(); |
| - EXPECT_FALSE(rvh1->is_waiting_for_beforeunload_ack()); |
| - StartCrossSiteTransition(contents()); |
| - EXPECT_TRUE(rvh1->IsWaitingForUnloadACK()); |
| - |
| - rvh1->OnSwappedOut(false); |
| - EXPECT_EQ(RenderViewHostImpl::STATE_WAITING_FOR_COMMIT, rvh1->rvh_state()); |
| - |
| - TestRenderViewHost* rvh2 = pending_test_rvh(); |
| - EXPECT_TRUE(rvh2); |
| - static_cast<SiteInstanceImpl*>(rvh2->GetSiteInstance())-> |
| - increment_active_view_count(); |
| - |
| - contents()->GetController().LoadURL( |
| - kUrl3, Referrer(), PAGE_TRANSITION_LINK, std::string()); |
| - // Pending rvh2 is already deleted. |
| - contents()->ProceedWithCrossSiteNavigation(); |
| - |
| - TestRenderFrameHost* rfh3 = contents()->GetPendingMainFrame(); |
| - EXPECT_TRUE(rfh3); |
| - // Navigation should be already unblocked by rvh1. |
| - EXPECT_FALSE(rfh3->are_navigations_suspended()); |
| -} |
| - |
| // Tests WebUI creation. |
| TEST_F(RenderFrameHostManagerTest, WebUI) { |
| set_should_create_webui(true); |
| @@ -1253,18 +1063,16 @@ TEST_F(RenderFrameHostManagerTest, NavigateAfterMissingSwapOutACK) { |
| EXPECT_TRUE(rvh2->is_waiting_for_beforeunload_ack()); |
| contents()->ProceedWithCrossSiteNavigation(); |
| EXPECT_FALSE(rvh2->is_waiting_for_beforeunload_ack()); |
| - StartCrossSiteTransition(contents()); |
| - EXPECT_TRUE(rvh2->IsWaitingForUnloadACK()); |
| // The back navigation commits. |
| const NavigationEntry* entry1 = contents()->GetController().GetPendingEntry(); |
| rvh1->SendNavigate(entry1->GetPageID(), entry1->GetURL()); |
| + EXPECT_TRUE(rvh2->IsWaitingForUnloadACK()); |
| EXPECT_EQ(RenderViewHostImpl::STATE_PENDING_SWAP_OUT, rvh2->rvh_state()); |
| // We should be able to navigate forward. |
| contents()->GetController().GoForward(); |
| contents()->ProceedWithCrossSiteNavigation(); |
| - StartCrossSiteTransition(contents()); |
| const NavigationEntry* entry2 = contents()->GetController().GetPendingEntry(); |
| rvh2->SendNavigate(entry2->GetPageID(), entry2->GetURL()); |
| EXPECT_EQ(rvh2, rvh()); |
| @@ -1272,6 +1080,7 @@ TEST_F(RenderFrameHostManagerTest, NavigateAfterMissingSwapOutACK) { |
| EXPECT_EQ(RenderViewHostImpl::STATE_PENDING_SWAP_OUT, rvh1->rvh_state()); |
| rvh1->OnSwappedOut(false); |
| EXPECT_TRUE(rvh1->IsSwappedOut()); |
| + EXPECT_EQ(RenderViewHostImpl::STATE_SWAPPED_OUT, rvh1->rvh_state()); |
| } |
| // Test that we create swapped out RVHs for the opener chain when navigating an |
| @@ -1559,118 +1368,9 @@ TEST_F(RenderFrameHostManagerTest, NavigateWithEarlyClose) { |
| EXPECT_EQ(host, manager->current_frame_host()); |
| } |
| -// Tests that the RenderViewHost is properly deleted when the SwapOutACK is |
| -// received before the new page commits. |
| -TEST_F(RenderFrameHostManagerTest, |
| - SwapOutACKBeforeNewPageCommitsLeadsToDeletion) { |
| - const GURL kUrl1("http://www.google.com/"); |
| - const GURL kUrl2("http://www.chromium.org/"); |
| - |
| - // Navigate to the first page. |
| - contents()->NavigateAndCommit(kUrl1); |
| - TestRenderFrameHost* rfh1 = contents()->GetMainFrame(); |
| - RenderViewHostDeletedObserver rvh_deleted_observer(rfh1->GetRenderViewHost()); |
| - EXPECT_EQ(RenderViewHostImpl::STATE_DEFAULT, |
| - rfh1->GetRenderViewHost()->rvh_state()); |
| - |
| - // Navigate to new site, simulating onbeforeunload approval. |
| - controller().LoadURL(kUrl2, Referrer(), PAGE_TRANSITION_LINK, std::string()); |
| - base::TimeTicks now = base::TimeTicks::Now(); |
| - rfh1->OnMessageReceived(FrameHostMsg_BeforeUnload_ACK(0, true, now, now)); |
| - EXPECT_TRUE(contents()->cross_navigation_pending()); |
| - TestRenderFrameHost* rfh2 = contents()->GetPendingMainFrame(); |
| - |
| - // Simulate rfh2's response, which leads to an unload request being sent to |
| - // rfh1. |
| - std::vector<GURL> url_chain; |
| - url_chain.push_back(GURL()); |
| - contents()->GetRenderManagerForTesting()->OnCrossSiteResponse( |
| - rfh2, |
| - GlobalRequestID(0, 0), scoped_ptr<CrossSiteTransferringRequest>(), |
| - url_chain, Referrer(), PAGE_TRANSITION_TYPED, false); |
| - EXPECT_TRUE(contents()->cross_navigation_pending()); |
| - EXPECT_EQ(RenderViewHostImpl::STATE_WAITING_FOR_UNLOAD_ACK, |
| - rfh1->GetRenderViewHost()->rvh_state()); |
| - |
| - // Simulate the swap out ack. |
| - rfh1->OnSwappedOut(false); |
| - EXPECT_EQ(RenderViewHostImpl::STATE_WAITING_FOR_COMMIT, |
| - rfh1->GetRenderViewHost()->rvh_state()); |
| - |
| - // The new page commits. |
| - contents()->TestDidNavigate(rfh2, 1, kUrl2, PAGE_TRANSITION_TYPED); |
| - EXPECT_FALSE(contents()->cross_navigation_pending()); |
| - EXPECT_EQ(rfh2, contents()->GetMainFrame()); |
| - EXPECT_TRUE(contents()->GetPendingMainFrame() == NULL); |
| - EXPECT_EQ(RenderViewHostImpl::STATE_DEFAULT, |
| - rfh2->GetRenderViewHost()->rvh_state()); |
| - |
| - // rfh1's rvh should have been deleted. |
| - EXPECT_TRUE(rvh_deleted_observer.deleted()); |
| - rfh1 = NULL; |
| -} |
| - |
| -// Tests that the RenderViewHost is properly swapped out when the SwapOutACK is |
| -// received before the new page commits. |
| -TEST_F(RenderFrameHostManagerTest, |
| - SwapOutACKBeforeNewPageCommitsLeadsToSwapOut) { |
| - const GURL kUrl1("http://www.google.com/"); |
| - const GURL kUrl2("http://www.chromium.org/"); |
| - |
| - // Navigate to the first page. |
| - contents()->NavigateAndCommit(kUrl1); |
| - TestRenderFrameHost* rfh1 = contents()->GetMainFrame(); |
| - RenderViewHostDeletedObserver rvh_deleted_observer(rfh1->GetRenderViewHost()); |
| - EXPECT_EQ(RenderViewHostImpl::STATE_DEFAULT, |
| - rfh1->GetRenderViewHost()->rvh_state()); |
| - |
| - // Increment the number of active views in SiteInstanceImpl so that rfh2 is |
| - // not deleted on swap out. |
| - static_cast<SiteInstanceImpl*>( |
| - rfh1->GetSiteInstance())->increment_active_view_count(); |
| - |
| - // Navigate to new site, simulating onbeforeunload approval. |
| - controller().LoadURL(kUrl2, Referrer(), PAGE_TRANSITION_LINK, std::string()); |
| - base::TimeTicks now = base::TimeTicks::Now(); |
| - contents()->GetMainFrame()->OnMessageReceived( |
| - FrameHostMsg_BeforeUnload_ACK(0, true, now, now)); |
| - EXPECT_TRUE(contents()->cross_navigation_pending()); |
| - TestRenderFrameHost* rfh2 = contents()->GetPendingMainFrame(); |
| - |
| - // Simulate rfh2's response, which leads to an unload request being sent to |
| - // rfh1. |
| - std::vector<GURL> url_chain; |
| - url_chain.push_back(GURL()); |
| - contents()->GetRenderManagerForTesting()->OnCrossSiteResponse( |
| - rfh2, |
| - GlobalRequestID(0, 0), scoped_ptr<CrossSiteTransferringRequest>(), |
| - url_chain, Referrer(), PAGE_TRANSITION_TYPED, false); |
| - EXPECT_TRUE(contents()->cross_navigation_pending()); |
| - EXPECT_EQ(RenderViewHostImpl::STATE_WAITING_FOR_UNLOAD_ACK, |
| - rfh1->GetRenderViewHost()->rvh_state()); |
| - |
| - // Simulate the swap out ack. |
| - rfh1->OnSwappedOut(false); |
| - EXPECT_EQ(RenderViewHostImpl::STATE_WAITING_FOR_COMMIT, |
| - rfh1->GetRenderViewHost()->rvh_state()); |
| - |
| - // The new page commits. |
| - contents()->TestDidNavigate(rfh2, 1, kUrl2, PAGE_TRANSITION_TYPED); |
| - EXPECT_FALSE(contents()->cross_navigation_pending()); |
| - EXPECT_EQ(rfh2, contents()->GetMainFrame()); |
| - EXPECT_TRUE(contents()->GetPendingMainFrame() == NULL); |
| - EXPECT_EQ(RenderViewHostImpl::STATE_DEFAULT, |
| - rfh2->GetRenderViewHost()->rvh_state()); |
| - |
| - // rfh1 should be swapped out. |
| - EXPECT_FALSE(rvh_deleted_observer.deleted()); |
| - EXPECT_TRUE(rfh1->GetRenderViewHost()->IsSwappedOut()); |
| -} |
| - |
| -// Tests that the RenderViewHost is properly deleted when the new |
| -// page commits before the swap out ack is received. |
| -TEST_F(RenderFrameHostManagerTest, |
| - NewPageCommitsBeforeSwapOutACKLeadsToDeletion) { |
| +// Tests that the RenderFrameHost is properly deleted when the swap out ack is |
| +// received (after commit). |
|
nasko
2014/08/19 16:45:23
nit: I read "(after commit)" as a test case variat
Charlie Reis
2014/08/19 21:20:31
Done.
|
| +TEST_F(RenderFrameHostManagerTest, DeleteFrameAfterSwapOutACK) { |
| const GURL kUrl1("http://www.google.com/"); |
| const GURL kUrl2("http://www.chromium.org/"); |
| @@ -1689,18 +1389,6 @@ TEST_F(RenderFrameHostManagerTest, |
| EXPECT_TRUE(contents()->cross_navigation_pending()); |
| TestRenderFrameHost* rfh2 = contents()->GetPendingMainFrame(); |
| - // Simulate rfh2's response, which leads to an unload request being sent to |
| - // rfh1. |
| - std::vector<GURL> url_chain; |
| - url_chain.push_back(GURL()); |
| - contents()->GetRenderManagerForTesting()->OnCrossSiteResponse( |
| - rfh2, |
| - GlobalRequestID(0, 0), scoped_ptr<CrossSiteTransferringRequest>(), |
| - url_chain, Referrer(), PAGE_TRANSITION_TYPED, false); |
| - EXPECT_TRUE(contents()->cross_navigation_pending()); |
| - EXPECT_EQ(RenderViewHostImpl::STATE_WAITING_FOR_UNLOAD_ACK, |
|
nasko
2014/08/19 16:45:22
I'd keep the state expectation, just change the va
Charlie Reis
2014/08/19 21:20:31
Done.
|
| - rfh1->GetRenderViewHost()->rvh_state()); |
| - |
| // The new page commits. |
| contents()->TestDidNavigate(rfh2, 1, kUrl2, PAGE_TRANSITION_TYPED); |
| EXPECT_FALSE(contents()->cross_navigation_pending()); |
| @@ -1719,10 +1407,9 @@ TEST_F(RenderFrameHostManagerTest, |
| rfh1 = NULL; |
| } |
| -// Tests that the RenderViewHost is properly swapped out when the new page |
| -// commits before the swap out ack is received. |
| -TEST_F(RenderFrameHostManagerTest, |
| - NewPageCommitsBeforeSwapOutACKLeadsToSwapOut) { |
| +// Tests that the RenderFrameHost is properly swapped out when the swap out ack |
| +// is received (after commit). |
| +TEST_F(RenderFrameHostManagerTest, SwapOutFrameAfterSwapOutACK) { |
| const GURL kUrl1("http://www.google.com/"); |
| const GURL kUrl2("http://www.chromium.org/"); |
| @@ -1746,18 +1433,6 @@ TEST_F(RenderFrameHostManagerTest, |
| EXPECT_TRUE(contents()->cross_navigation_pending()); |
| TestRenderFrameHost* rfh2 = contents()->GetPendingMainFrame(); |
| - // Simulate rfh2's response, which leads to an unload request being sent to |
| - // rfh1. |
| - std::vector<GURL> url_chain; |
| - url_chain.push_back(GURL()); |
| - contents()->GetRenderManagerForTesting()->OnCrossSiteResponse( |
| - rfh2, |
| - GlobalRequestID(0, 0), scoped_ptr<CrossSiteTransferringRequest>(), |
| - url_chain, Referrer(), PAGE_TRANSITION_TYPED, false); |
| - EXPECT_TRUE(contents()->cross_navigation_pending()); |
| - EXPECT_EQ(RenderViewHostImpl::STATE_WAITING_FOR_UNLOAD_ACK, |
| - rfh1->GetRenderViewHost()->rvh_state()); |
| - |
| // The new page commits. |
| contents()->TestDidNavigate(rfh2, 1, kUrl2, PAGE_TRANSITION_TYPED); |
| EXPECT_FALSE(contents()->cross_navigation_pending()); |