| Index: chrome/browser/browser_commands_unittest.cc
|
| ===================================================================
|
| --- chrome/browser/browser_commands_unittest.cc (revision 14577)
|
| +++ chrome/browser/browser_commands_unittest.cc (working copy)
|
| @@ -99,3 +99,69 @@
|
| EXPECT_EQ(profile(), browser()->profile());
|
| EXPECT_TRUE(browser()->profile()->GetBookmarkModel()->IsBookmarked(url1));
|
| }
|
| +
|
| +// Tests back/forward in new tab (Control + Back/Forward button in the UI).
|
| +TEST_F(BrowserCommandsTest, BackForwardInNewTab) {
|
| + GURL url1("http://foo/1");
|
| + GURL url2("http://foo/2");
|
| +
|
| + // Make a tab with the two pages navigated in it.
|
| + AddTab(browser(), url1);
|
| + NavigateAndCommitActiveTab(url2);
|
| +
|
| + // Go back in a new background tab.
|
| + browser()->GoBack(NEW_BACKGROUND_TAB);
|
| + EXPECT_EQ(0, browser()->selected_index());
|
| + ASSERT_EQ(2, browser()->tab_count());
|
| +
|
| + // The original tab should be unchanged.
|
| + TabContents* zeroth = browser()->GetTabContentsAt(0);
|
| + EXPECT_EQ(url2, zeroth->GetURL());
|
| + EXPECT_TRUE(zeroth->controller().CanGoBack());
|
| + EXPECT_FALSE(zeroth->controller().CanGoForward());
|
| +
|
| + // The new tab should be like the first one but navigated back.
|
| + TabContents* first = browser()->GetTabContentsAt(1);
|
| + EXPECT_EQ(url1, browser()->GetTabContentsAt(1)->GetURL());
|
| + EXPECT_FALSE(first->controller().CanGoBack());
|
| + EXPECT_TRUE(first->controller().CanGoForward());
|
| +
|
| + // Select the second tab and make it go forward in a new background tab.
|
| + browser()->SelectTabContentsAt(1, true);
|
| + // TODO(brettw) bug 11055: It should not be necessary to commit the load here,
|
| + // but because of this bug, it will assert later if we don't. When the bug is
|
| + // fixed, one of the three commits here related to this bug should be removed
|
| + // (to test both codepaths).
|
| + CommitPendingLoad(&first->controller());
|
| + EXPECT_EQ(1, browser()->selected_index());
|
| + browser()->GoForward(NEW_BACKGROUND_TAB);
|
| +
|
| + // The previous tab should be unchanged and still in the foreground.
|
| + EXPECT_EQ(url1, first->GetURL());
|
| + EXPECT_FALSE(first->controller().CanGoBack());
|
| + EXPECT_TRUE(first->controller().CanGoForward());
|
| + EXPECT_EQ(1, browser()->selected_index());
|
| +
|
| + // There should be a new tab navigated forward.
|
| + ASSERT_EQ(3, browser()->tab_count());
|
| + TabContents* second = browser()->GetTabContentsAt(2);
|
| + EXPECT_EQ(url2, second->GetURL());
|
| + EXPECT_TRUE(second->controller().CanGoBack());
|
| + EXPECT_FALSE(second->controller().CanGoForward());
|
| +
|
| + // Now do back in a new foreground tab. Don't bother re-checking every sngle
|
| + // thing above, just validate that it's opening properly.
|
| + browser()->SelectTabContentsAt(2, true);
|
| + // TODO(brettw) bug 11055: see the comment above about why we need this.
|
| + CommitPendingLoad(&second->controller());
|
| + browser()->GoBack(NEW_FOREGROUND_TAB);
|
| + ASSERT_EQ(3, browser()->selected_index());
|
| + ASSERT_EQ(url1, browser()->GetSelectedTabContents()->GetURL());
|
| +
|
| + // Same thing again for forward.
|
| + // TODO(brettw) bug 11055: see the comment above about why we need this.
|
| + CommitPendingLoad(&browser()->GetSelectedTabContents()->controller());
|
| + browser()->GoForward(NEW_FOREGROUND_TAB);
|
| + ASSERT_EQ(4, browser()->selected_index());
|
| + ASSERT_EQ(url2, browser()->GetSelectedTabContents()->GetURL());
|
| +}
|
|
|