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

Side by Side Diff: content/browser/web_contents/web_contents_impl_unittest.cc

Issue 88503002: Have the unload event execute in background on cross-site navigations (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase + addressed some of Nasko's comments Created 6 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/logging.h" 5 #include "base/logging.h"
6 #include "base/strings/utf_string_conversions.h" 6 #include "base/strings/utf_string_conversions.h"
7 #include "content/browser/frame_host/interstitial_page_impl.h" 7 #include "content/browser/frame_host/interstitial_page_impl.h"
8 #include "content/browser/frame_host/navigation_entry_impl.h" 8 #include "content/browser/frame_host/navigation_entry_impl.h"
9 #include "content/browser/renderer_host/render_view_host_impl.h" 9 #include "content/browser/renderer_host/render_view_host_impl.h"
10 #include "content/browser/site_instance_impl.h" 10 #include "content/browser/site_instance_impl.h"
(...skipping 494 matching lines...) Expand 10 before | Expand all | Expand 10 after
505 // DidNavigate from the back action 505 // DidNavigate from the back action
506 contents()->TestDidNavigate( 506 contents()->TestDidNavigate(
507 goback_rvh, 1, url2, PAGE_TRANSITION_TYPED); 507 goback_rvh, 1, url2, PAGE_TRANSITION_TYPED);
508 EXPECT_FALSE(contents()->cross_navigation_pending()); 508 EXPECT_FALSE(contents()->cross_navigation_pending());
509 EXPECT_EQ(goback_rvh, contents()->GetRenderViewHost()); 509 EXPECT_EQ(goback_rvh, contents()->GetRenderViewHost());
510 EXPECT_EQ(instance1, contents()->GetSiteInstance()); 510 EXPECT_EQ(instance1, contents()->GetSiteInstance());
511 // The pending RFH should now be swapped out, not deleted. 511 // The pending RFH should now be swapped out, not deleted.
512 EXPECT_TRUE(contents()->GetRenderManagerForTesting()-> 512 EXPECT_TRUE(contents()->GetRenderManagerForTesting()->
513 IsOnSwappedOutList(pending_rfh)); 513 IsOnSwappedOutList(pending_rfh));
514 EXPECT_EQ(pending_rvh_delete_count, 0); 514 EXPECT_EQ(pending_rvh_delete_count, 0);
515 pending_rvh->OnSwappedOut(false);
515 516
516 // Close contents and ensure RVHs are deleted. 517 // Close contents and ensure RVHs are deleted.
517 DeleteContents(); 518 DeleteContents();
518 EXPECT_EQ(orig_rvh_delete_count, 1); 519 EXPECT_EQ(orig_rvh_delete_count, 1);
519 EXPECT_EQ(pending_rvh_delete_count, 1); 520 EXPECT_EQ(pending_rvh_delete_count, 1);
520 } 521 }
521 522
522 // Test that navigating across a site boundary after a crash creates a new 523 // Test that navigating across a site boundary after a crash creates a new
523 // RVH without requiring a cross-site transition (i.e., PENDING state). 524 // RVH without requiring a cross-site transition (i.e., PENDING state).
524 TEST_F(WebContentsImplTest, CrossSiteBoundariesAfterCrash) { 525 TEST_F(WebContentsImplTest, CrossSiteBoundariesAfterCrash) {
(...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after
702 EXPECT_FALSE(contents()->cross_navigation_pending()); 703 EXPECT_FALSE(contents()->cross_navigation_pending());
703 EXPECT_EQ(pending_rvh, contents()->GetRenderViewHost()); 704 EXPECT_EQ(pending_rvh, contents()->GetRenderViewHost());
704 EXPECT_EQ(url2, contents()->GetLastCommittedURL()); 705 EXPECT_EQ(url2, contents()->GetLastCommittedURL());
705 EXPECT_EQ(url2, contents()->GetVisibleURL()); 706 EXPECT_EQ(url2, contents()->GetVisibleURL());
706 EXPECT_NE(new_instance, orig_instance); 707 EXPECT_NE(new_instance, orig_instance);
707 EXPECT_FALSE(contents()->GetPendingRenderViewHost()); 708 EXPECT_FALSE(contents()->GetPendingRenderViewHost());
708 // We keep the original RFH around, swapped out. 709 // We keep the original RFH around, swapped out.
709 EXPECT_TRUE(contents()->GetRenderManagerForTesting()->IsOnSwappedOutList( 710 EXPECT_TRUE(contents()->GetRenderManagerForTesting()->IsOnSwappedOutList(
710 orig_rfh)); 711 orig_rfh));
711 EXPECT_EQ(orig_rvh_delete_count, 0); 712 EXPECT_EQ(orig_rvh_delete_count, 0);
713 orig_rvh->OnSwappedOut(false);
712 714
713 // Close contents and ensure RVHs are deleted. 715 // Close contents and ensure RVHs are deleted.
714 DeleteContents(); 716 DeleteContents();
715 EXPECT_EQ(orig_rvh_delete_count, 1); 717 EXPECT_EQ(orig_rvh_delete_count, 1);
716 EXPECT_EQ(pending_rvh_delete_count, 1); 718 EXPECT_EQ(pending_rvh_delete_count, 1);
717 } 719 }
718 720
719 // Test that we can find an opener RVH even if it's pending. 721 // Test that we can find an opener RVH even if it's pending.
720 // http://crbug.com/176252. 722 // http://crbug.com/176252.
721 TEST_F(WebContentsImplTest, FindOpenerRVHWhenPending) { 723 TEST_F(WebContentsImplTest, FindOpenerRVHWhenPending) {
(...skipping 407 matching lines...) Expand 10 before | Expand all | Expand 10 after
1129 1131
1130 // Navigate to new site, simulating an onbeforeunload approval. 1132 // Navigate to new site, simulating an onbeforeunload approval.
1131 const GURL url2("http://www.yahoo.com"); 1133 const GURL url2("http://www.yahoo.com");
1132 controller().LoadURL(url2, Referrer(), PAGE_TRANSITION_TYPED, std::string()); 1134 controller().LoadURL(url2, Referrer(), PAGE_TRANSITION_TYPED, std::string());
1133 EXPECT_TRUE(orig_rvh->is_waiting_for_beforeunload_ack()); 1135 EXPECT_TRUE(orig_rvh->is_waiting_for_beforeunload_ack());
1134 base::TimeTicks now = base::TimeTicks::Now(); 1136 base::TimeTicks now = base::TimeTicks::Now();
1135 orig_rvh->OnMessageReceived(ViewHostMsg_ShouldClose_ACK(0, true, now, now)); 1137 orig_rvh->OnMessageReceived(ViewHostMsg_ShouldClose_ACK(0, true, now, now));
1136 EXPECT_TRUE(contents()->cross_navigation_pending()); 1138 EXPECT_TRUE(contents()->cross_navigation_pending());
1137 1139
1138 // Simulate swap out message when the response arrives. 1140 // Simulate swap out message when the response arrives.
1139 orig_rvh->set_is_swapped_out(true); 1141 orig_rvh->OnSwappedOut(false);
1140 1142
1141 // Suppose the navigation doesn't get a chance to commit, and the user 1143 // Suppose the navigation doesn't get a chance to commit, and the user
1142 // navigates in the current RVH's SiteInstance. 1144 // navigates in the current RVH's SiteInstance.
1143 controller().LoadURL(url, Referrer(), PAGE_TRANSITION_TYPED, std::string()); 1145 controller().LoadURL(url, Referrer(), PAGE_TRANSITION_TYPED, std::string());
1144 1146
1145 // Verify that the pending navigation is cancelled and the renderer is no 1147 // Verify that the pending navigation is cancelled and the renderer is no
1146 // longer swapped out. 1148 // longer swapped out.
1147 EXPECT_FALSE(orig_rvh->is_waiting_for_beforeunload_ack()); 1149 EXPECT_FALSE(orig_rvh->is_waiting_for_beforeunload_ack());
1148 SiteInstance* instance2 = contents()->GetSiteInstance(); 1150 SiteInstance* instance2 = contents()->GetSiteInstance();
1149 EXPECT_FALSE(contents()->cross_navigation_pending()); 1151 EXPECT_FALSE(contents()->cross_navigation_pending());
1150 EXPECT_EQ(orig_rvh, rvh()); 1152 EXPECT_EQ(orig_rvh, rvh());
1151 EXPECT_FALSE(orig_rvh->is_swapped_out()); 1153 EXPECT_EQ(RenderViewHostImpl::STATE_LIVE, orig_rvh->rvh_state());
1152 EXPECT_EQ(instance1, instance2); 1154 EXPECT_EQ(instance1, instance2);
1153 EXPECT_TRUE(contents()->GetPendingRenderViewHost() == NULL); 1155 EXPECT_TRUE(contents()->GetPendingRenderViewHost() == NULL);
1154 } 1156 }
1155 1157
1156 // Test that NavigationEntries have the correct page state after going 1158 // Test that NavigationEntries have the correct page state after going
1157 // forward and back. Prevents regression for bug 1116137. 1159 // forward and back. Prevents regression for bug 1116137.
1158 TEST_F(WebContentsImplTest, NavigationEntryContentState) { 1160 TEST_F(WebContentsImplTest, NavigationEntryContentState) {
1159 TestRenderViewHost* orig_rvh = test_rvh(); 1161 TestRenderViewHost* orig_rvh = test_rvh();
1160 1162
1161 // Navigate to URL. There should be no committed entry yet. 1163 // Navigate to URL. There should be no committed entry yet.
(...skipping 1002 matching lines...) Expand 10 before | Expand all | Expand 10 after
2164 TEST_F(WebContentsImplTest, PendingContents) { 2166 TEST_F(WebContentsImplTest, PendingContents) {
2165 scoped_ptr<TestWebContents> other_contents( 2167 scoped_ptr<TestWebContents> other_contents(
2166 static_cast<TestWebContents*>(CreateTestWebContents())); 2168 static_cast<TestWebContents*>(CreateTestWebContents()));
2167 contents()->AddPendingContents(other_contents.get()); 2169 contents()->AddPendingContents(other_contents.get());
2168 int route_id = other_contents->GetRenderViewHost()->GetRoutingID(); 2170 int route_id = other_contents->GetRenderViewHost()->GetRoutingID();
2169 other_contents.reset(); 2171 other_contents.reset();
2170 EXPECT_EQ(NULL, contents()->GetCreatedWindow(route_id)); 2172 EXPECT_EQ(NULL, contents()->GetCreatedWindow(route_id));
2171 } 2173 }
2172 2174
2173 } // namespace content 2175 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698