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

Unified Diff: chrome/browser/tab_contents/web_contents_unittest.cc

Issue 6319001: Support window.opener after a process swap. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Update comments. Created 9 years, 8 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/tab_contents/web_contents_unittest.cc
diff --git a/chrome/browser/tab_contents/web_contents_unittest.cc b/chrome/browser/tab_contents/web_contents_unittest.cc
index cc26c776306b5b2904ef7725ce9a860c7cf2895d..928a62d5bd0c8bde5eb2775b8bb8da302096bbe0 100644
--- a/chrome/browser/tab_contents/web_contents_unittest.cc
+++ b/chrome/browser/tab_contents/web_contents_unittest.cc
@@ -317,6 +317,11 @@ TEST_F(TabContentsTest, CrossSiteBoundaries) {
int pending_rvh_delete_count = 0;
pending_rvh->set_delete_counter(&pending_rvh_delete_count);
+ // Navigations should be suspended in pending_rvh until ShouldCloseACK.
+ EXPECT_TRUE(pending_rvh->are_navigations_suspended());
+ orig_rvh->SendShouldCloseACK(true);
+ EXPECT_FALSE(pending_rvh->are_navigations_suspended());
+
// DidNavigate from the pending page
ViewHostMsg_FrameNavigate_Params params2;
InitNavigateParams(&params2, 1, url2);
@@ -327,20 +332,36 @@ TEST_F(TabContentsTest, CrossSiteBoundaries) {
EXPECT_EQ(pending_rvh, contents()->render_view_host());
EXPECT_NE(instance1, instance2);
EXPECT_TRUE(contents()->pending_rvh() == NULL);
- EXPECT_EQ(orig_rvh_delete_count, 1);
+ // We keep the original RVH around, swapped out.
+ EXPECT_TRUE(contents()->render_manager()->IsSwappedOut(orig_rvh));
+ EXPECT_EQ(orig_rvh_delete_count, 0);
// Going back should switch SiteInstances again. The first SiteInstance is
// stored in the NavigationEntry, so it should be the same as at the start.
+ // We should use the same RVH as before, swapping it back in.
controller().GoBack();
TestRenderViewHost* goback_rvh = contents()->pending_rvh();
+ EXPECT_EQ(orig_rvh, goback_rvh);
EXPECT_TRUE(contents()->cross_navigation_pending());
+ // Navigations should be suspended in goback_rvh until ShouldCloseACK.
+ EXPECT_TRUE(goback_rvh->are_navigations_suspended());
+ pending_rvh->SendShouldCloseACK(true);
+ EXPECT_FALSE(goback_rvh->are_navigations_suspended());
+
// DidNavigate from the back action
contents()->TestDidNavigate(goback_rvh, params1);
EXPECT_FALSE(contents()->cross_navigation_pending());
EXPECT_EQ(goback_rvh, contents()->render_view_host());
- EXPECT_EQ(pending_rvh_delete_count, 1);
EXPECT_EQ(instance1, contents()->GetSiteInstance());
+ // The pending RVH should now be swapped out, not deleted.
+ EXPECT_TRUE(contents()->render_manager()->IsSwappedOut(pending_rvh));
+ EXPECT_EQ(pending_rvh_delete_count, 0);
+
+ // Close tab and ensure RVHs are deleted.
+ DeleteContents();
+ EXPECT_EQ(orig_rvh_delete_count, 1);
+ EXPECT_EQ(pending_rvh_delete_count, 1);
}
// Test that navigating across a site boundary after a crash creates a new
@@ -372,7 +393,8 @@ TEST_F(TabContentsTest, CrossSiteBoundariesAfterCrash) {
EXPECT_FALSE(contents()->cross_navigation_pending());
EXPECT_TRUE(contents()->pending_rvh() == NULL);
EXPECT_NE(orig_rvh, new_rvh);
- EXPECT_EQ(orig_rvh_delete_count, 1);
+ EXPECT_TRUE(contents()->render_manager()->IsSwappedOut(orig_rvh));
+ EXPECT_EQ(orig_rvh_delete_count, 0);
// DidNavigate from the new page
ViewHostMsg_FrameNavigate_Params params2;
@@ -384,6 +406,10 @@ TEST_F(TabContentsTest, CrossSiteBoundariesAfterCrash) {
EXPECT_EQ(new_rvh, rvh());
EXPECT_NE(instance1, instance2);
EXPECT_TRUE(contents()->pending_rvh() == NULL);
+
+ // Close tab and ensure RVHs are deleted.
+ DeleteContents();
+ EXPECT_EQ(orig_rvh_delete_count, 1);
}
// Test that opening a new tab in the same SiteInstance and then navigating
@@ -412,6 +438,7 @@ TEST_F(TabContentsTest, NavigateTwoTabsCrossSite) {
// Navigate first tab to a new site
const GURL url2a("http://www.yahoo.com");
controller().LoadURL(url2a, GURL(), PageTransition::TYPED);
+ orig_rvh->SendShouldCloseACK(true);
TestRenderViewHost* pending_rvh_a = contents()->pending_rvh();
ViewHostMsg_FrameNavigate_Params params2a;
InitNavigateParams(&params2a, 1, url2a);
@@ -422,6 +449,9 @@ TEST_F(TabContentsTest, NavigateTwoTabsCrossSite) {
// Navigate second tab to the same site as the first tab
const GURL url2b("http://mail.yahoo.com");
contents2.controller().LoadURL(url2b, GURL(), PageTransition::TYPED);
+ TestRenderViewHost* rvh2 =
+ static_cast<TestRenderViewHost*>(contents2.render_view_host());
+ rvh2->SendShouldCloseACK(true);
TestRenderViewHost* pending_rvh_b = contents2.pending_rvh();
EXPECT_TRUE(pending_rvh_b != NULL);
EXPECT_TRUE(contents2.cross_navigation_pending());

Powered by Google App Engine
This is Rietveld 408576698