| 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 11c3c8a27041ecb08bc3e54363a4f5ecc5b2f8ed..0cd86597305c6b344c23b4ff274eece3ed7f79d0 100644
|
| --- a/content/browser/frame_host/render_frame_host_manager_unittest.cc
|
| +++ b/content/browser/frame_host/render_frame_host_manager_unittest.cc
|
| @@ -901,7 +901,7 @@ TEST_F(RenderFrameHostManagerTest, Navigate) {
|
| EXPECT_FALSE(manager->pending_frame_host());
|
|
|
| // Commit.
|
| - manager->DidNavigateFrame(host);
|
| + manager->DidNavigateFrame(host, true);
|
| // Commit to SiteInstance should be delayed until RenderView commit.
|
| EXPECT_TRUE(host == manager->current_frame_host());
|
| ASSERT_TRUE(host);
|
| @@ -922,7 +922,7 @@ TEST_F(RenderFrameHostManagerTest, Navigate) {
|
| EXPECT_FALSE(manager->pending_frame_host());
|
|
|
| // Commit.
|
| - manager->DidNavigateFrame(host);
|
| + manager->DidNavigateFrame(host, true);
|
| EXPECT_TRUE(host == manager->current_frame_host());
|
| ASSERT_TRUE(host);
|
| EXPECT_TRUE(host->GetSiteInstance()->HasSite());
|
| @@ -943,7 +943,7 @@ TEST_F(RenderFrameHostManagerTest, Navigate) {
|
| notifications.Reset();
|
|
|
| // Commit.
|
| - manager->DidNavigateFrame(manager->pending_frame_host());
|
| + manager->DidNavigateFrame(manager->pending_frame_host(), true);
|
| EXPECT_TRUE(host == manager->current_frame_host());
|
| ASSERT_TRUE(host);
|
| EXPECT_TRUE(host->GetSiteInstance()->HasSite());
|
| @@ -993,7 +993,7 @@ TEST_F(RenderFrameHostManagerTest, WebUI) {
|
| EXPECT_TRUE(manager->web_ui());
|
|
|
| // Commit.
|
| - manager->DidNavigateFrame(host);
|
| + manager->DidNavigateFrame(host, true);
|
| EXPECT_TRUE(
|
| host->render_view_host()->GetEnabledBindings() & BINDINGS_POLICY_WEB_UI);
|
| }
|
| @@ -1031,7 +1031,7 @@ TEST_F(RenderFrameHostManagerTest, WebUIInNewTab) {
|
| host1->render_view_host()->GetEnabledBindings() & BINDINGS_POLICY_WEB_UI);
|
|
|
| // Commit and ensure we still have bindings.
|
| - manager1->DidNavigateFrame(host1);
|
| + manager1->DidNavigateFrame(host1, true);
|
| SiteInstance* webui_instance = host1->GetSiteInstance();
|
| EXPECT_EQ(host1, manager1->current_frame_host());
|
| EXPECT_TRUE(
|
| @@ -1060,11 +1060,13 @@ TEST_F(RenderFrameHostManagerTest, WebUIInNewTab) {
|
| EXPECT_TRUE(
|
| host2->render_view_host()->GetEnabledBindings() & BINDINGS_POLICY_WEB_UI);
|
|
|
| - manager2->DidNavigateFrame(host2);
|
| + manager2->DidNavigateFrame(host2, true);
|
| }
|
|
|
| // Tests that we don't end up in an inconsistent state if a page does a back and
|
| // then reload. http://crbug.com/51680
|
| +// Also tests that only user-gesture navigations can interrupt cross-process
|
| +// navigations. http://crbug.com/75195
|
| TEST_F(RenderFrameHostManagerTest, PageDoesBackAndReload) {
|
| const GURL kUrl1("http://www.google.com/");
|
| const GURL kUrl2("http://www.evil-site.com/");
|
| @@ -1100,8 +1102,30 @@ TEST_F(RenderFrameHostManagerTest, PageDoesBackAndReload) {
|
| contents()->GetFrameTree()->root()->navigator()->DidNavigate(evil_rfh,
|
| params);
|
|
|
| - // That should have cancelled the pending RFH, and the evil RFH should be the
|
| - // current one.
|
| + // That should NOT have cancelled the pending RFH, because the reload did
|
| + // not have a user gesture. Thus, the pending back navigation will still
|
| + // eventually commit.
|
| + EXPECT_TRUE(contents()->GetRenderManagerForTesting()->
|
| + pending_render_view_host() != NULL);
|
| + EXPECT_TRUE(contents()->GetRenderManagerForTesting()->pending_frame_host() !=
|
| + NULL);
|
| + EXPECT_EQ(evil_rfh,
|
| + contents()->GetRenderManagerForTesting()->current_frame_host());
|
| + EXPECT_EQ(evil_rfh->GetRenderViewHost(),
|
| + contents()->GetRenderManagerForTesting()->current_host());
|
| +
|
| + // Also we should not have a pending navigation entry.
|
| + EXPECT_TRUE(contents()->GetController().GetPendingEntry() == NULL);
|
| + NavigationEntry* entry = contents()->GetController().GetVisibleEntry();
|
| + ASSERT_TRUE(entry != NULL);
|
| + EXPECT_EQ(kUrl2, entry->GetURL());
|
| +
|
| + // Now do the same but as a user gesture.
|
| + params.gesture = NavigationGestureUser;
|
| + contents()->GetFrameTree()->root()->navigator()->DidNavigate(evil_rfh,
|
| + params);
|
| +
|
| + // User navigation should have cancelled the pending RFH.
|
| EXPECT_TRUE(contents()->GetRenderManagerForTesting()->
|
| pending_render_view_host() == NULL);
|
| EXPECT_TRUE(contents()->GetRenderManagerForTesting()->pending_frame_host() ==
|
| @@ -1113,7 +1137,7 @@ TEST_F(RenderFrameHostManagerTest, PageDoesBackAndReload) {
|
|
|
| // Also we should not have a pending navigation entry.
|
| EXPECT_TRUE(contents()->GetController().GetPendingEntry() == NULL);
|
| - NavigationEntry* entry = contents()->GetController().GetVisibleEntry();
|
| + entry = contents()->GetController().GetVisibleEntry();
|
| ASSERT_TRUE(entry != NULL);
|
| EXPECT_EQ(kUrl2, entry->GetURL());
|
| }
|
| @@ -1500,7 +1524,7 @@ TEST_F(RenderFrameHostManagerTest, NoSwapOnGuestNavigations) {
|
| EXPECT_EQ(manager->current_frame_host()->GetSiteInstance(), instance);
|
|
|
| // Commit.
|
| - manager->DidNavigateFrame(host);
|
| + manager->DidNavigateFrame(host, true);
|
| // Commit to SiteInstance should be delayed until RenderView commit.
|
| EXPECT_EQ(host, manager->current_frame_host());
|
| ASSERT_TRUE(host);
|
| @@ -1521,7 +1545,7 @@ TEST_F(RenderFrameHostManagerTest, NoSwapOnGuestNavigations) {
|
| EXPECT_FALSE(manager->pending_frame_host());
|
|
|
| // Commit.
|
| - manager->DidNavigateFrame(host);
|
| + manager->DidNavigateFrame(host, true);
|
| EXPECT_EQ(host, manager->current_frame_host());
|
| ASSERT_TRUE(host);
|
| EXPECT_EQ(host->GetSiteInstance(), instance);
|
| @@ -1561,7 +1585,7 @@ TEST_F(RenderFrameHostManagerTest, NavigateWithEarlyClose) {
|
| notifications.Reset();
|
|
|
| // Commit.
|
| - manager->DidNavigateFrame(host);
|
| + manager->DidNavigateFrame(host, true);
|
|
|
| // Commit to SiteInstance should be delayed until RenderFrame commits.
|
| EXPECT_EQ(host, manager->current_frame_host());
|
|
|