diff options
author | jam@chromium.org <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-04-11 17:32:50 +0000 |
---|---|---|
committer | jam@chromium.org <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-04-11 17:32:50 +0000 |
commit | e18b9c2762c2a863e3737a75647500b252d143d1 (patch) | |
tree | 021f5683fefd810b05d53531a3773d3f73faf9cb | |
parent | 711bafc45ac608401c49d75bc940c22a6012ad8a (diff) | |
download | chromium_src-e18b9c2762c2a863e3737a75647500b252d143d1.zip chromium_src-e18b9c2762c2a863e3737a75647500b252d143d1.tar.gz chromium_src-e18b9c2762c2a863e3737a75647500b252d143d1.tar.bz2 |
Convert the TabRestore ui_tests to browser_tests.
BUG=121574,14774
Review URL: https://chromiumcodereview.appspot.com/10034003
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@131794 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | chrome/browser/tab_restore_browsertest.cc | 542 | ||||
-rw-r--r-- | chrome/browser/tab_restore_uitest.cc | 674 | ||||
-rw-r--r-- | chrome/chrome_tests.gypi | 2 |
3 files changed, 543 insertions, 675 deletions
diff --git a/chrome/browser/tab_restore_browsertest.cc b/chrome/browser/tab_restore_browsertest.cc new file mode 100644 index 0000000..5042720 --- /dev/null +++ b/chrome/browser/tab_restore_browsertest.cc @@ -0,0 +1,542 @@ +// Copyright (c) 2012 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "base/basictypes.h" +#include "base/command_line.h" +#include "base/file_path.h" +#include "base/test/test_timeouts.h" +#include "base/utf_string_conversions.h" +#include "chrome/app/chrome_command_ids.h" +#include "chrome/browser/ui/browser.h" +#include "chrome/browser/ui/browser_list.h" +#include "chrome/browser/ui/find_bar/find_notification_details.h" +#include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h" +#include "chrome/common/chrome_notification_types.h" +#include "chrome/common/chrome_paths.h" +#include "chrome/common/url_constants.h" +#include "chrome/test/base/in_process_browser_test.h" +#include "chrome/test/base/ui_test_utils.h" +#include "content/public/browser/navigation_controller.h" +#include "content/public/browser/notification_service.h" +#include "content/public/browser/notification_source.h" +#include "content/public/browser/notification_types.h" +#include "content/public/browser/page_navigator.h" +#include "content/public/browser/render_view_host.h" +#include "content/public/browser/web_contents.h" +#include "googleurl/src/gurl.h" +#include "net/base/net_util.h" +#include "net/test/test_server.h" +#include "third_party/WebKit/Source/WebKit/chromium/public/WebFindOptions.h" + +class TabRestoreTest : public InProcessBrowserTest { + public: + TabRestoreTest() : InProcessBrowserTest() { + url1_ = ui_test_utils::GetTestUrl( + FilePath().AppendASCII("session_history"), + FilePath().AppendASCII("bot1.html")); + url2_ = ui_test_utils::GetTestUrl( + FilePath().AppendASCII("session_history"), + FilePath().AppendASCII("bot2.html")); + } + + protected: + Browser* GetBrowser(int index) { + CHECK(static_cast<int>(BrowserList::size()) > index); + return *(BrowserList::begin() + index); + } + + // Adds tabs to the given browser, all navigated to url1_. Returns + // the final number of tabs. + int AddSomeTabs(Browser* browser, int how_many) { + int starting_tab_count = browser->tab_count(); + + for (int i = 0; i < how_many; ++i) { + ui_test_utils::NavigateToURLWithDisposition( + browser, url1_, NEW_FOREGROUND_TAB, + ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); + } + int tab_count = browser->tab_count(); + EXPECT_EQ(starting_tab_count + how_many, tab_count); + return tab_count; + } + + void CloseTab(int index) { + content::WebContents* new_tab = browser()->GetWebContentsAt(index); + ui_test_utils::WindowedNotificationObserver tab_close_observer( + content::NOTIFICATION_TAB_CLOSED, + content::NotificationService::AllSources()); + browser()->CloseTabContents(new_tab); + tab_close_observer.Wait(); + } + + // Uses the undo-close-tab accelerator to undo a close-tab or close-window + // operation. The newly restored tab is expected to appear in the + // window at index |expected_window_index|, at the |expected_tabstrip_index|, + // and to be active. If |expected_window_index| is equal to the number of + // current windows, the restored tab is expected to be created in a new + // window (since the index is 0-based). + void RestoreTab(int expected_window_index, + int expected_tabstrip_index) { + int window_count = static_cast<int>(BrowserList::size()); + ASSERT_GT(window_count, 0); + + bool expect_new_window = (expected_window_index == window_count); + + Browser* browser; + if (expect_new_window) { + browser = *(BrowserList::begin()); + } else { + browser = GetBrowser(expected_window_index); + } + int tab_count = browser->tab_count(); + ASSERT_GT(tab_count, 0); + + // Restore the tab. + ui_test_utils::WindowedNotificationObserver tab_added_observer( + content::NOTIFICATION_TAB_PARENTED, + content::NotificationService::AllSources()); + ui_test_utils::WindowedNotificationObserver tab_loaded_observer( + content::NOTIFICATION_LOAD_STOP, + content::NotificationService::AllSources()); + browser->RestoreTab(); + tab_added_observer.Wait(); + tab_loaded_observer.Wait(); + + if (expect_new_window) { + int new_window_count = static_cast<int>(BrowserList::size()); + EXPECT_EQ(++window_count, new_window_count); + browser = GetBrowser(expected_window_index); + } else { + EXPECT_EQ(++tab_count, browser->tab_count()); + } + + // Get a handle to the restored tab. + ASSERT_GT(browser->tab_count(), expected_tabstrip_index); + + // Ensure that the tab and window are active. + EXPECT_EQ(expected_tabstrip_index, browser->active_index()); + } + + void GoBack(Browser* browser) { + ui_test_utils::WindowedNotificationObserver observer( + content::NOTIFICATION_LOAD_STOP, + content::NotificationService::AllSources()); + browser->GoBack(CURRENT_TAB); + observer.Wait(); + } + + void EnsureTabFinishedRestoring(content::WebContents* tab) { + content::NavigationController* controller = &tab->GetController(); + if (!controller->NeedsReload() && !controller->GetPendingEntry() && + !controller->GetWebContents()->IsLoading()) + return; + + ui_test_utils::WindowedNotificationObserver observer( + content::NOTIFICATION_LOAD_STOP, + content::Source<content::NavigationController>(controller)); + observer.Wait(); + } + + GURL url1_; + GURL url2_; + + private: + DISALLOW_COPY_AND_ASSIGN(TabRestoreTest); +}; + +// Close the end tab in the current window, then restore it. The tab should be +// in its original position, and active. +IN_PROC_BROWSER_TEST_F(TabRestoreTest, Basic) { + int starting_tab_count = browser()->tab_count(); + int tab_count = AddSomeTabs(browser(), 1); + + int closed_tab_index = tab_count - 1; + CloseTab(closed_tab_index); + EXPECT_EQ(starting_tab_count, browser()->tab_count()); + + ASSERT_NO_FATAL_FAILURE(RestoreTab(0, closed_tab_index)); + + // And make sure everything looks right. + EXPECT_EQ(starting_tab_count + 1, browser()->tab_count()); + EXPECT_EQ(closed_tab_index, browser()->active_index()); + EXPECT_EQ(url1_, browser()->GetSelectedWebContents()->GetURL()); +} + +// Close a tab not at the end of the current window, then restore it. The tab +// should be in its original position, and active. +IN_PROC_BROWSER_TEST_F(TabRestoreTest, MiddleTab) { + int starting_tab_count = browser()->tab_count(); + AddSomeTabs(browser(), 3); + + // Close one in the middle + int closed_tab_index = starting_tab_count + 1; + CloseTab(closed_tab_index); + EXPECT_EQ(starting_tab_count + 2, browser()->tab_count()); + + ASSERT_NO_FATAL_FAILURE(RestoreTab(0, closed_tab_index)); + + // And make sure everything looks right. + EXPECT_EQ(starting_tab_count + 3, browser()->tab_count()); + EXPECT_EQ(closed_tab_index, browser()->active_index()); + EXPECT_EQ(url1_, browser()->GetSelectedWebContents()->GetURL()); +} + +// Close a tab, switch windows, then restore the tab. The tab should be in its +// original window and position, and active. +IN_PROC_BROWSER_TEST_F(TabRestoreTest, RestoreToDifferentWindow) { + int starting_tab_count = browser()->tab_count(); + AddSomeTabs(browser(), 3); + + // Close one in the middle + int closed_tab_index = starting_tab_count + 1; + CloseTab(closed_tab_index); + EXPECT_EQ(starting_tab_count + 2, browser()->tab_count()); + + // Create a new browser. + ui_test_utils::NavigateToURLWithDisposition( + browser(), GURL(chrome::kChromeUINewTabURL), NEW_WINDOW, + ui_test_utils::BROWSER_TEST_WAIT_FOR_BROWSER); + EXPECT_EQ(2u, BrowserList::size()); + + // Restore tab into original browser. + ASSERT_NO_FATAL_FAILURE(RestoreTab(0, closed_tab_index)); + + // And make sure everything looks right. + EXPECT_EQ(starting_tab_count + 3, browser()->tab_count()); + EXPECT_EQ(closed_tab_index, browser()->active_index()); + EXPECT_EQ(url1_, browser()->GetSelectedWebContents()->GetURL()); +} + +// Close a tab, open a new window, close the first window, then restore the +// tab. It should be in a new window. +// If this becomes flaky, use http://crbug.com/14774 +IN_PROC_BROWSER_TEST_F(TabRestoreTest, BasicRestoreFromClosedWindow) { + // Navigate to url1 then url2. + ui_test_utils::NavigateToURL(browser(), url1_); + ui_test_utils::NavigateToURL(browser(), url2_); + + // Create a new browser. + ui_test_utils::NavigateToURLWithDisposition( + browser(), GURL(chrome::kChromeUINewTabURL), NEW_WINDOW, + ui_test_utils::BROWSER_TEST_WAIT_FOR_BROWSER); + EXPECT_EQ(2u, BrowserList::size()); + + // Close the final tab in the first browser. + ui_test_utils::WindowedNotificationObserver window_observer( + chrome::NOTIFICATION_BROWSER_CLOSED, + content::NotificationService::AllSources()); + CloseTab(0); + window_observer.Wait(); + + ASSERT_NO_FATAL_FAILURE(RestoreTab(1, 0)); + + // Tab should be in a new window. + Browser* browser = GetBrowser(1); + content::WebContents* web_contents = browser->GetSelectedWebContents(); + // And make sure the URLs matches. + EXPECT_EQ(url2_, web_contents->GetURL()); + GoBack(browser); + EXPECT_EQ(url1_, web_contents->GetURL()); +} + +// Restore a tab then make sure it doesn't restore again. +IN_PROC_BROWSER_TEST_F(TabRestoreTest, DontLoadRestoredTab) { + // Add two tabs + int starting_tab_count = browser()->tab_count(); + AddSomeTabs(browser(), 2); + ASSERT_EQ(browser()->tab_count(), starting_tab_count + 2); + + // Close one of them. + CloseTab(0); + ASSERT_EQ(browser()->tab_count(), starting_tab_count + 1); + + // Restore it. + ASSERT_NO_FATAL_FAILURE(RestoreTab(0, 0)); + ASSERT_EQ(browser()->tab_count(), starting_tab_count + 2); + + // Make sure that there's nothing else to restore. + ASSERT_FALSE(browser()->command_updater()->IsCommandEnabled(IDC_RESTORE_TAB)); +} + +// Open a window with multiple tabs, close a tab, then close the window. +// Restore both and make sure the tab goes back into the window. +IN_PROC_BROWSER_TEST_F(TabRestoreTest, RestoreWindowAndTab) { + int starting_tab_count = browser()->tab_count(); + AddSomeTabs(browser(), 3); + + // Close one in the middle + int closed_tab_index = starting_tab_count + 1; + CloseTab(closed_tab_index); + EXPECT_EQ(starting_tab_count + 2, browser()->tab_count()); + + // Create a new browser. + ui_test_utils::NavigateToURLWithDisposition( + browser(), GURL(chrome::kChromeUINewTabURL), NEW_WINDOW, + ui_test_utils::BROWSER_TEST_WAIT_FOR_BROWSER); + EXPECT_EQ(2u, BrowserList::size()); + + // Close the first browser. + ui_test_utils::WindowedNotificationObserver observer( + chrome::NOTIFICATION_BROWSER_CLOSED, + content::NotificationService::AllSources()); + browser()->CloseWindow(); + observer.Wait(); + EXPECT_EQ(1u, BrowserList::size()); + + // Restore the first window. The expected_tabstrip_index (second argument) + // indicates the expected active tab. + ASSERT_NO_FATAL_FAILURE(RestoreTab(1, starting_tab_count + 1)); + Browser* browser = GetBrowser(1); + EXPECT_EQ(starting_tab_count + 2, browser->tab_count()); + + // Restore the closed tab. + ASSERT_NO_FATAL_FAILURE(RestoreTab(1, closed_tab_index)); + EXPECT_EQ(starting_tab_count + 3, browser->tab_count()); + EXPECT_EQ(url1_, browser->GetSelectedWebContents()->GetURL()); +} + +// Open a window with two tabs, close both (closing the window), then restore +// both. Make sure both restored tabs are in the same window. +IN_PROC_BROWSER_TEST_F(TabRestoreTest, RestoreIntoSameWindow) { + ui_test_utils::NavigateToURLWithDisposition( + browser(), url1_, NEW_FOREGROUND_TAB, + ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); + // Navigate the rightmost one to url2_ for easier identification. + ui_test_utils::NavigateToURLWithDisposition( + browser(), url2_, NEW_FOREGROUND_TAB, + ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); + + // Create a new browser. + ui_test_utils::NavigateToURLWithDisposition( + browser(), GURL(chrome::kChromeUINewTabURL), NEW_WINDOW, + ui_test_utils::BROWSER_TEST_WAIT_FOR_BROWSER); + EXPECT_EQ(2u, BrowserList::size()); + + // Close all but one tab in the first browser, left to right. + while (browser()->tab_count() > 1) + CloseTab(0); + + // Close the last tab, closing the browser. + ui_test_utils::WindowedNotificationObserver observer( + chrome::NOTIFICATION_BROWSER_CLOSED, + content::NotificationService::AllSources()); + CloseTab(0); + observer.Wait(); + EXPECT_EQ(1u, BrowserList::size()); + + // Restore the last-closed tab into a new window. + ASSERT_NO_FATAL_FAILURE(RestoreTab(1, 0)); + Browser* browser = GetBrowser(1); + EXPECT_EQ(1, browser->tab_count()); + EXPECT_EQ(url2_, browser->GetSelectedWebContents()->GetURL()); + + // Restore the next-to-last-closed tab into the same window. + ASSERT_NO_FATAL_FAILURE(RestoreTab(1, 0)); + EXPECT_EQ(2, browser->tab_count()); + EXPECT_EQ(url1_, browser->GetSelectedWebContents()->GetURL()); +} + +// Tests that a duplicate history entry is not created when we restore a page +// to an existing SiteInstance. (Bug 1230446) +IN_PROC_BROWSER_TEST_F(TabRestoreTest, RestoreWithExistingSiteInstance) { + ASSERT_TRUE(test_server()->Start()); + + GURL http_url1(test_server()->GetURL("files/title1.html")); + GURL http_url2(test_server()->GetURL("files/title2.html")); + int tab_count = browser()->tab_count(); + + // Add a tab + ui_test_utils::NavigateToURLWithDisposition( + browser(), http_url1, NEW_FOREGROUND_TAB, + ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); + EXPECT_EQ(++tab_count, browser()->tab_count()); + + // Navigate to another same-site URL. + content::WebContents* tab = browser()->GetWebContentsAt(tab_count - 1); + ui_test_utils::WindowedNotificationObserver observer( + content::NOTIFICATION_LOAD_STOP, + content::NotificationService::AllSources()); + static_cast<content::WebContentsDelegate*>(browser())->OpenURLFromTab( + tab, + content::OpenURLParams(http_url2, content::Referrer(), CURRENT_TAB, + content::PAGE_TRANSITION_TYPED, false)); + observer.Wait(); + + // Close the tab. + CloseTab(1); + + // Create a new tab to the original site. Assuming process-per-site is + // enabled, this will ensure that the SiteInstance used by the restored tab + // will already exist when the restore happens. + ui_test_utils::NavigateToURLWithDisposition( + browser(), http_url2, NEW_FOREGROUND_TAB, + ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); + + // Restore the closed tab. + ASSERT_NO_FATAL_FAILURE(RestoreTab(0, tab_count - 1)); + + // And make sure the URLs match. + EXPECT_EQ(http_url2, browser()->GetSelectedWebContents()->GetURL()); + GoBack(browser()); + EXPECT_EQ(http_url1, browser()->GetSelectedWebContents()->GetURL()); +} + +// Tests that the SiteInstances used for entries in a restored tab's history +// are given appropriate max page IDs, even if the renderer for the entry +// already exists. (Bug 1204135) +IN_PROC_BROWSER_TEST_F(TabRestoreTest, + RestoreCrossSiteWithExistingSiteInstance) { + ASSERT_TRUE(test_server()->Start()); + + GURL http_url1(test_server()->GetURL("files/title1.html")); + GURL http_url2(test_server()->GetURL("files/title2.html")); + + int tab_count = browser()->tab_count(); + + // Add a tab + ui_test_utils::NavigateToURLWithDisposition( + browser(), http_url1, NEW_FOREGROUND_TAB, + ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); + EXPECT_EQ(++tab_count, browser()->tab_count()); + + // Navigate to more URLs, then a cross-site URL. + ui_test_utils::NavigateToURLWithDisposition( + browser(), http_url2, CURRENT_TAB, + ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); + ui_test_utils::NavigateToURLWithDisposition( + browser(), http_url1, CURRENT_TAB, + ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); + ui_test_utils::NavigateToURLWithDisposition( + browser(), url1_, CURRENT_TAB, + ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); + + // Close the tab. + CloseTab(1); + + // Create a new tab to the original site. Assuming process-per-site is + // enabled, this will ensure that the SiteInstance will already exist when + // the user clicks Back in the restored tab. + ui_test_utils::NavigateToURLWithDisposition( + browser(), http_url2, NEW_FOREGROUND_TAB, + ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); + + // Restore the closed tab. + ASSERT_NO_FATAL_FAILURE(RestoreTab(0, tab_count - 1)); + + // And make sure the URLs match. + EXPECT_EQ(url1_, browser()->GetSelectedWebContents()->GetURL()); + GoBack(browser()); + EXPECT_EQ(http_url1, browser()->GetSelectedWebContents()->GetURL()); + + // Navigating to a new URL should clear the forward list, because the max + // page ID of the renderer should have been updated when we restored the tab. + ui_test_utils::NavigateToURLWithDisposition( + browser(), http_url2, CURRENT_TAB, + ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); + EXPECT_FALSE(browser()->CanGoForward()); + EXPECT_EQ(http_url2, browser()->GetSelectedWebContents()->GetURL()); +} + +IN_PROC_BROWSER_TEST_F(TabRestoreTest, RestoreWindow) { + // Create a new window. + size_t window_count = BrowserList::size(); + ui_test_utils::NavigateToURLWithDisposition( + browser(), GURL(chrome::kChromeUINewTabURL), NEW_WINDOW, + ui_test_utils::BROWSER_TEST_WAIT_FOR_BROWSER); + EXPECT_EQ(++window_count, BrowserList::size()); + + // Create two more tabs, one with url1, the other url2. + int initial_tab_count = browser()->tab_count(); + ui_test_utils::NavigateToURLWithDisposition( + browser(), url1_, NEW_FOREGROUND_TAB, + ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); + ui_test_utils::NavigateToURLWithDisposition( + browser(), url2_, NEW_FOREGROUND_TAB, + ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); + + // Close the window. + ui_test_utils::WindowedNotificationObserver close_window_observer( + chrome::NOTIFICATION_BROWSER_CLOSED, + content::NotificationService::AllSources()); + browser()->CloseWindow(); + close_window_observer.Wait(); + EXPECT_EQ(window_count - 1, BrowserList::size()); + + // Restore the window. + ui_test_utils::WindowedNotificationObserver open_window_observer( + chrome::NOTIFICATION_BROWSER_OPENED, + content::NotificationService::AllSources()); + ui_test_utils::WindowedNotificationObserver load_stop_observer( + content::NOTIFICATION_LOAD_STOP, + content::NotificationService::AllSources()); + (*BrowserList::begin())->RestoreTab(); + open_window_observer.Wait(); + EXPECT_EQ(window_count, BrowserList::size()); + + Browser* browser = GetBrowser(1); + EXPECT_EQ(initial_tab_count + 2, browser->tab_count()); + load_stop_observer.Wait(); + + content::WebContents* restored_tab = + browser->GetWebContentsAt(initial_tab_count); + EnsureTabFinishedRestoring(restored_tab); + EXPECT_EQ(url1_, restored_tab->GetURL()); + + restored_tab = browser->GetWebContentsAt(initial_tab_count + 1); + EnsureTabFinishedRestoring(restored_tab); + EXPECT_EQ(url2_, restored_tab->GetURL()); +} + +// Restore tab with special URL chrome://credits/ and make sure the page loads +// properly after restore. See http://crbug.com/31905. +IN_PROC_BROWSER_TEST_F(TabRestoreTest, RestoreTabWithSpecialURL) { + // Navigate new tab to a special URL. + ui_test_utils::NavigateToURLWithDisposition( + browser(), GURL(chrome::kChromeUICreditsURL), NEW_FOREGROUND_TAB, + ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); + + // Close the tab. + CloseTab(1); + + // Restore the closed tab. + ASSERT_NO_FATAL_FAILURE(RestoreTab(0, 1)); + TabContentsWrapper* tab = browser()->GetTabContentsWrapperAt(1); + EnsureTabFinishedRestoring(tab->web_contents()); + + // See if content is as expected. + EXPECT_GT( + ui_test_utils::FindInPage(tab, ASCIIToUTF16("webkit"), true, false, NULL), + 0); +} + +// Restore tab with special URL in its navigation history, go back to that +// entry and see that it loads properly. See http://crbug.com/31905 +IN_PROC_BROWSER_TEST_F(TabRestoreTest, RestoreTabWithSpecialURLOnBack) { + ASSERT_TRUE(test_server()->Start()); + + const GURL http_url(test_server()->GetURL("files/title1.html")); + + // Navigate new tab to a special URL. + ui_test_utils::NavigateToURLWithDisposition( + browser(), GURL(chrome::kChromeUICreditsURL), NEW_FOREGROUND_TAB, + ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); + + // Then navigate to a normal URL. + ui_test_utils::NavigateToURL(browser(), http_url); + + // Close the tab. + CloseTab(1); + + // Restore the closed tab. + ASSERT_NO_FATAL_FAILURE(RestoreTab(0, 1)); + TabContentsWrapper* tab = browser()->GetTabContentsWrapperAt(1); + EnsureTabFinishedRestoring(tab->web_contents()); + ASSERT_EQ(http_url, tab->web_contents()->GetURL()); + + // Go back, and see if content is as expected. + GoBack(browser()); + EXPECT_GT( + ui_test_utils::FindInPage(tab, ASCIIToUTF16("webkit"), true, false, NULL), + 0); +} diff --git a/chrome/browser/tab_restore_uitest.cc b/chrome/browser/tab_restore_uitest.cc deleted file mode 100644 index 8afd742..0000000 --- a/chrome/browser/tab_restore_uitest.cc +++ /dev/null @@ -1,674 +0,0 @@ -// Copyright (c) 2012 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "base/basictypes.h" -#include "base/command_line.h" -#include "base/file_path.h" -#include "base/test/test_timeouts.h" -#include "chrome/app/chrome_command_ids.h" -#include "chrome/common/chrome_paths.h" -#include "chrome/common/url_constants.h" -#include "chrome/test/automation/automation_proxy.h" -#include "chrome/test/automation/browser_proxy.h" -#include "chrome/test/automation/tab_proxy.h" -#include "chrome/test/automation/window_proxy.h" -#include "chrome/test/ui/ui_test.h" -#include "googleurl/src/gurl.h" -#include "net/base/net_util.h" -#include "net/test/test_server.h" - -// http://code.google.com/p/chromium/issues/detail?id=14774 -#if (defined(OS_WIN) || defined(OS_CHROMEOS)) && !defined(NDEBUG) -#define MAYBE_BasicRestoreFromClosedWindow DISABLED_BasicRestoreFromClosedWindow -#else -#define MAYBE_BasicRestoreFromClosedWindow BasicRestoreFromClosedWindow -#endif - -class TabRestoreUITest : public UITest { - public: - TabRestoreUITest() : UITest() { - FilePath path_prefix(test_data_directory_); - path_prefix = path_prefix.AppendASCII("session_history"); - url1_ = net::FilePathToFileURL(path_prefix.AppendASCII("bot1.html")); - url2_ = net::FilePathToFileURL(path_prefix.AppendASCII("bot2.html")); - } - - protected: - // Uses the undo-close-tab accelerator to undo a close-tab or close-window - // operation. The newly restored tab is expected to appear in the - // window at index |expected_window_index|, at the |expected_tabstrip_index|, - // and to be active. If |expected_window_index| is equal to the number of - // current windows, the restored tab is expected to be created in a new - // window (since the index is 0-based). - void RestoreTab(int expected_window_index, - int expected_tabstrip_index) { - int tab_count = 0; - int window_count = 0; - - ASSERT_TRUE(automation()->GetBrowserWindowCount(&window_count)); - ASSERT_GT(window_count, 0); - - bool expect_new_window = (expected_window_index == window_count); - scoped_refptr<BrowserProxy> browser_proxy; - if (expect_new_window) { - browser_proxy = automation()->GetBrowserWindow(0); - } else { - ASSERT_GT(window_count, expected_window_index); - browser_proxy = automation()->GetBrowserWindow(expected_window_index); - } - ASSERT_TRUE(browser_proxy.get()); - ASSERT_TRUE(browser_proxy->GetTabCount(&tab_count)); - ASSERT_GT(tab_count, 0); - - // Restore the tab. - ASSERT_TRUE(browser_proxy->RunCommand(IDC_RESTORE_TAB)); - - if (expect_new_window) { - int new_window_count = 0; - ASSERT_TRUE(automation()->GetBrowserWindowCount(&new_window_count)); - EXPECT_EQ(++window_count, new_window_count); - browser_proxy = automation()->GetBrowserWindow(expected_window_index); - ASSERT_TRUE(browser_proxy.get()); - } else { - int new_tab_count = 0; - ASSERT_TRUE(browser_proxy->GetTabCount(&new_tab_count)); - EXPECT_EQ(++tab_count, new_tab_count); - } - - // Get a handle to the restored tab. - ASSERT_TRUE(browser_proxy->GetTabCount(&tab_count)); - ASSERT_GT(tab_count, expected_tabstrip_index); - scoped_refptr<TabProxy> restored_tab_proxy( - browser_proxy->GetTab(expected_tabstrip_index)); - ASSERT_TRUE(restored_tab_proxy.get()); - // Wait for the restored tab to finish loading. - ASSERT_TRUE(restored_tab_proxy->WaitForTabToBeRestored( - TestTimeouts::action_max_timeout_ms())); - - // Ensure that the tab and window are active. - CheckActiveWindow(browser_proxy.get()); - EXPECT_EQ(expected_tabstrip_index, - GetActiveTabIndex(expected_window_index)); - } - - // Adds tabs to the given browser, all navigated to url1_. Returns - // the final number of tabs. - int AddSomeTabs(BrowserProxy* browser, int how_many) { - int starting_tab_count = -1; - EXPECT_TRUE(browser->GetTabCount(&starting_tab_count)); - - for (int i = 0; i < how_many; ++i) { - EXPECT_TRUE(browser->AppendTab(url1_)); - } - int tab_count; - EXPECT_TRUE(browser->GetTabCount(&tab_count)); - EXPECT_EQ(starting_tab_count + how_many, tab_count); - return tab_count; - } - - // Ensure that the given browser occupies the currently active window. - void CheckActiveWindow(const BrowserProxy* browser) { - // This entire check is disabled because even the IsActive() call - // sporadically fails to complete successfully. See http://crbug.com/10916. - // TODO(pamg): Investigate and re-enable. Also find a way to have the - // calling location reported in the gtest error, by inlining this again if - // nothing else. - return; - - bool is_active = false; - scoped_refptr<WindowProxy> window_proxy(browser->GetWindow()); - ASSERT_TRUE(window_proxy.get()); - ASSERT_TRUE(window_proxy->IsActive(&is_active)); - // The check for is_active may fail if other apps are active while running - // the tests, because Chromium won't be the foremost application at all. - // So we'll have it log an error, but not report one through gtest, to - // keep the test result deterministic and the buildbots happy. - if (!is_active) - LOG(ERROR) << "WARNING: is_active was false, expected true. (This may " - "be simply because Chromium isn't the front application.)"; - } - - GURL url1_; - GURL url2_; - - private: - DISALLOW_COPY_AND_ASSIGN(TabRestoreUITest); -}; - -// Close the end tab in the current window, then restore it. The tab should be -// in its original position, and active. -TEST_F(TabRestoreUITest, Basic) { - scoped_refptr<BrowserProxy> browser_proxy(automation()->GetBrowserWindow(0)); - ASSERT_TRUE(browser_proxy.get()); - - int starting_tab_count; - ASSERT_TRUE(browser_proxy->GetTabCount(&starting_tab_count)); - int tab_count = AddSomeTabs(browser_proxy.get(), 1); - - int closed_tab_index = tab_count - 1; - scoped_refptr<TabProxy> new_tab(browser_proxy->GetTab(closed_tab_index)); - ASSERT_TRUE(new_tab.get()); - // Make sure we're at url. - ASSERT_EQ(AUTOMATION_MSG_NAVIGATION_SUCCESS, new_tab->NavigateToURL(url1_)); - // Close the tab. - ASSERT_TRUE(new_tab->Close(true)); - new_tab = NULL; - ASSERT_TRUE(browser_proxy->GetTabCount(&tab_count)); - EXPECT_EQ(starting_tab_count, tab_count); - - RestoreTab(0, closed_tab_index); - - // And make sure everything looks right. - ASSERT_TRUE(browser_proxy->GetTabCount(&tab_count)); - EXPECT_EQ(starting_tab_count + 1, tab_count); - EXPECT_EQ(closed_tab_index, GetActiveTabIndex()); - EXPECT_EQ(url1_, GetActiveTabURL()); -} - -// Close a tab not at the end of the current window, then restore it. The tab -// should be in its original position, and active. -TEST_F(TabRestoreUITest, MiddleTab) { - scoped_refptr<BrowserProxy> browser_proxy(automation()->GetBrowserWindow(0)); - ASSERT_TRUE(browser_proxy.get()); - - int starting_tab_count; - ASSERT_TRUE(browser_proxy->GetTabCount(&starting_tab_count)); - int tab_count = AddSomeTabs(browser_proxy.get(), 3); - - // Close one in the middle - int closed_tab_index = starting_tab_count + 1; - scoped_refptr<TabProxy> new_tab(browser_proxy->GetTab(closed_tab_index)); - ASSERT_TRUE(new_tab.get()); - // Make sure we're at url. - ASSERT_EQ(AUTOMATION_MSG_NAVIGATION_SUCCESS, new_tab->NavigateToURL(url1_)); - // Close the tab. - ASSERT_TRUE(new_tab->Close(true)); - new_tab = NULL; - ASSERT_TRUE(browser_proxy->GetTabCount(&tab_count)); - EXPECT_EQ(starting_tab_count + 2, tab_count); - - RestoreTab(0, closed_tab_index); - - // And make sure everything looks right. - ASSERT_TRUE(browser_proxy->GetTabCount(&tab_count)); - EXPECT_EQ(starting_tab_count + 3, tab_count); - EXPECT_EQ(closed_tab_index, GetActiveTabIndex()); - EXPECT_EQ(url1_, GetActiveTabURL()); -} - -// Close a tab, switch windows, then restore the tab. The tab should be in its -// original window and position, and active. -TEST_F(TabRestoreUITest, RestoreToDifferentWindow) { - scoped_refptr<BrowserProxy> browser_proxy(automation()->GetBrowserWindow(0)); - ASSERT_TRUE(browser_proxy.get()); - - // This call is virtually guaranteed to pass, assuming that Chromium is the - // active application, which will establish a baseline for later calls to - // CheckActiveWindow(). See comments in that function. - CheckActiveWindow(browser_proxy.get()); - - int starting_tab_count; - ASSERT_TRUE(browser_proxy->GetTabCount(&starting_tab_count)); - int tab_count = AddSomeTabs(browser_proxy.get(), 3); - - // Close one in the middle - int closed_tab_index = starting_tab_count + 1; - scoped_refptr<TabProxy> new_tab(browser_proxy->GetTab(closed_tab_index)); - ASSERT_TRUE(new_tab.get()); - // Make sure we're at url. - ASSERT_EQ(AUTOMATION_MSG_NAVIGATION_SUCCESS, new_tab->NavigateToURL(url1_)); - // Close the tab. - ASSERT_TRUE(new_tab->Close(true)); - new_tab = NULL; - ASSERT_TRUE(browser_proxy->GetTabCount(&tab_count)); - EXPECT_EQ(starting_tab_count + 2, tab_count); - - // Create a new browser. - ASSERT_TRUE(automation()->OpenNewBrowserWindow(Browser::TYPE_TABBED, false)); - int window_count; - ASSERT_TRUE(automation()->GetBrowserWindowCount(&window_count)); - EXPECT_EQ(2, window_count); - - CheckActiveWindow(automation()->GetBrowserWindow(1)); - - // Restore tab into original browser. - RestoreTab(0, closed_tab_index); - - // And make sure everything looks right. - CheckActiveWindow(browser_proxy.get()); - ASSERT_TRUE(browser_proxy->GetTabCount(&tab_count)); - EXPECT_EQ(starting_tab_count + 3, tab_count); - EXPECT_EQ(closed_tab_index, GetActiveTabIndex(0)); - EXPECT_EQ(url1_, GetActiveTabURL(0)); -} - -// Close a tab, open a new window, close the first window, then restore the -// tab. It should be in a new window. -TEST_F(TabRestoreUITest, MAYBE_BasicRestoreFromClosedWindow) { - scoped_refptr<BrowserProxy> browser_proxy(automation()->GetBrowserWindow(0)); - ASSERT_TRUE(browser_proxy.get()); - CheckActiveWindow(browser_proxy.get()); - - int tab_count; - ASSERT_TRUE(browser_proxy->GetTabCount(&tab_count)); - - // Close tabs until we only have one open. - while (tab_count > 1) { - scoped_refptr<TabProxy> tab_to_close(browser_proxy->GetTab(0)); - ASSERT_TRUE(tab_to_close.get()); - ASSERT_TRUE(tab_to_close->Close(true)); - ASSERT_TRUE(browser_proxy->GetTabCount(&tab_count)); - } - - // Navigate to url1 then url2. - scoped_refptr<TabProxy> tab_proxy(browser_proxy->GetTab(0)); - ASSERT_TRUE(tab_proxy.get()); - ASSERT_EQ(AUTOMATION_MSG_NAVIGATION_SUCCESS, tab_proxy->NavigateToURL(url1_)); - ASSERT_EQ(AUTOMATION_MSG_NAVIGATION_SUCCESS, tab_proxy->NavigateToURL(url2_)); - - // Create a new browser. - ASSERT_TRUE(automation()->OpenNewBrowserWindow(Browser::TYPE_TABBED, false)); - int window_count; - ASSERT_TRUE(automation()->GetBrowserWindowCount(&window_count)); - EXPECT_EQ(2, window_count); - CheckActiveWindow(automation()->GetBrowserWindow(1)); - - // Close the final tab in the first browser. - EXPECT_TRUE(tab_proxy->Close(true)); - ASSERT_TRUE(automation()->WaitForWindowCountToBecome(1)); - - // Tab and browser are no longer valid. - tab_proxy = NULL; - browser_proxy = NULL; - - RestoreTab(1, 0); - - // Tab should be in a new window. - browser_proxy = automation()->GetBrowserWindow(1); - ASSERT_TRUE(browser_proxy.get()); - CheckActiveWindow(browser_proxy.get()); - tab_proxy = browser_proxy->GetActiveTab(); - ASSERT_TRUE(tab_proxy.get()); - // And make sure the URLs matches. - EXPECT_EQ(url2_, GetActiveTabURL(1)); - EXPECT_TRUE(tab_proxy->GoBack()); - EXPECT_EQ(url1_, GetActiveTabURL(1)); -} - -// Restore a tab then make sure it doesn't restore again. -TEST_F(TabRestoreUITest, DontLoadRestoredTab) { - scoped_refptr<BrowserProxy> browser_proxy(automation()->GetBrowserWindow(0)); - ASSERT_TRUE(browser_proxy.get()); - CheckActiveWindow(browser_proxy.get()); - - // Add two tabs - int starting_tab_count = 0; - ASSERT_TRUE(browser_proxy->GetTabCount(&starting_tab_count)); - AddSomeTabs(browser_proxy.get(), 2); - int current_tab_count = 0; - ASSERT_TRUE(browser_proxy->GetTabCount(¤t_tab_count)); - ASSERT_EQ(current_tab_count, starting_tab_count + 2); - - // Close one of them. - scoped_refptr<TabProxy> tab_to_close(browser_proxy->GetTab(0)); - ASSERT_TRUE(tab_to_close.get()); - ASSERT_TRUE(tab_to_close->Close(true)); - ASSERT_TRUE(browser_proxy->GetTabCount(¤t_tab_count)); - ASSERT_EQ(current_tab_count, starting_tab_count + 1); - - // Restore it. - RestoreTab(0, 0); - ASSERT_TRUE(browser_proxy->GetTabCount(¤t_tab_count)); - ASSERT_EQ(current_tab_count, starting_tab_count + 2); - - // Make sure that there's nothing else to restore. - bool enabled; - ASSERT_TRUE(browser_proxy->IsMenuCommandEnabled(IDC_RESTORE_TAB, &enabled)); - EXPECT_FALSE(enabled); -} - -// Open a window with multiple tabs, close a tab, then close the window. -// Restore both and make sure the tab goes back into the window. -TEST_F(TabRestoreUITest, RestoreWindowAndTab) { - scoped_refptr<BrowserProxy> browser_proxy(automation()->GetBrowserWindow(0)); - ASSERT_TRUE(browser_proxy.get()); - CheckActiveWindow(browser_proxy.get()); - - int starting_tab_count; - ASSERT_TRUE(browser_proxy->GetTabCount(&starting_tab_count)); - int tab_count = AddSomeTabs(browser_proxy.get(), 3); - - // Close one in the middle - int closed_tab_index = starting_tab_count + 1; - scoped_refptr<TabProxy> new_tab(browser_proxy->GetTab(closed_tab_index)); - ASSERT_TRUE(new_tab.get()); - // Make sure we're at url. - ASSERT_EQ(AUTOMATION_MSG_NAVIGATION_SUCCESS, new_tab->NavigateToURL(url1_)); - // Close the tab. - ASSERT_TRUE(new_tab->Close(true)); - new_tab = NULL; - ASSERT_TRUE(browser_proxy->GetTabCount(&tab_count)); - EXPECT_EQ(starting_tab_count + 2, tab_count); - - // Create a new browser. - ASSERT_TRUE(automation()->OpenNewBrowserWindow(Browser::TYPE_TABBED, false)); - int window_count; - ASSERT_TRUE(automation()->GetBrowserWindowCount(&window_count)); - EXPECT_EQ(2, window_count); - CheckActiveWindow(automation()->GetBrowserWindow(1)); - - // Close the first browser. - bool application_closing; - EXPECT_TRUE(CloseBrowser(browser_proxy.get(), &application_closing)); - EXPECT_FALSE(application_closing); - ASSERT_TRUE(automation()->GetBrowserWindowCount(&window_count)); - EXPECT_EQ(1, window_count); - - // Browser is no longer valid. - browser_proxy = NULL; - - // Restore the first window. The expected_tabstrip_index (second argument) - // indicates the expected active tab. - RestoreTab(1, starting_tab_count + 1); - browser_proxy = automation()->GetBrowserWindow(1); - ASSERT_TRUE(browser_proxy.get()); - CheckActiveWindow(browser_proxy.get()); - ASSERT_TRUE(browser_proxy->GetTabCount(&tab_count)); - EXPECT_EQ(starting_tab_count + 2, tab_count); - - // Restore the closed tab. - RestoreTab(1, closed_tab_index); - CheckActiveWindow(browser_proxy.get()); - ASSERT_TRUE(browser_proxy->GetTabCount(&tab_count)); - EXPECT_EQ(starting_tab_count + 3, tab_count); - EXPECT_EQ(url1_, GetActiveTabURL(1)); -} - -// Open a window with two tabs, close both (closing the window), then restore -// both. Make sure both restored tabs are in the same window. -TEST_F(TabRestoreUITest, RestoreIntoSameWindow) { - scoped_refptr<BrowserProxy> browser_proxy(automation()->GetBrowserWindow(0)); - ASSERT_TRUE(browser_proxy.get()); - CheckActiveWindow(browser_proxy.get()); - - int starting_tab_count; - ASSERT_TRUE(browser_proxy->GetTabCount(&starting_tab_count)); - int tab_count = AddSomeTabs(browser_proxy.get(), 2); - - // Navigate the rightmost one to url2_ for easier identification. - scoped_refptr<TabProxy> tab_proxy(browser_proxy->GetTab(tab_count - 1)); - ASSERT_TRUE(tab_proxy.get()); - ASSERT_EQ(AUTOMATION_MSG_NAVIGATION_SUCCESS, tab_proxy->NavigateToURL(url2_)); - - // Create a new browser. - ASSERT_TRUE(automation()->OpenNewBrowserWindow(Browser::TYPE_TABBED, false)); - int window_count; - ASSERT_TRUE(automation()->GetBrowserWindowCount(&window_count)); - EXPECT_EQ(2, window_count); - CheckActiveWindow(automation()->GetBrowserWindow(1)); - - // Close all but one tab in the first browser, left to right. - while (tab_count > 1) { - scoped_refptr<TabProxy> tab_to_close(browser_proxy->GetTab(0)); - ASSERT_TRUE(tab_to_close.get()); - ASSERT_TRUE(tab_to_close->Close(true)); - ASSERT_TRUE(browser_proxy->GetTabCount(&tab_count)); - } - - // Close the last tab, closing the browser. - tab_proxy = browser_proxy->GetTab(0); - ASSERT_TRUE(tab_proxy.get()); - EXPECT_TRUE(tab_proxy->Close(true)); - ASSERT_TRUE(automation()->WaitForWindowCountToBecome(1)); - browser_proxy = NULL; - tab_proxy = NULL; - - // Restore the last-closed tab into a new window. - RestoreTab(1, 0); - browser_proxy = automation()->GetBrowserWindow(1); - ASSERT_TRUE(browser_proxy.get()); - CheckActiveWindow(browser_proxy.get()); - ASSERT_TRUE(browser_proxy->GetTabCount(&tab_count)); - EXPECT_EQ(1, tab_count); - EXPECT_EQ(url2_, GetActiveTabURL(1)); - - // Restore the next-to-last-closed tab into the same window. - RestoreTab(1, 0); - CheckActiveWindow(browser_proxy.get()); - ASSERT_TRUE(browser_proxy->GetTabCount(&tab_count)); - EXPECT_EQ(2, tab_count); - EXPECT_EQ(url1_, GetActiveTabURL(1)); -} - -// Tests that a duplicate history entry is not created when we restore a page -// to an existing SiteInstance. (Bug 1230446) -TEST_F(TabRestoreUITest, RestoreWithExistingSiteInstance) { - net::TestServer test_server(net::TestServer::TYPE_HTTP, - net::TestServer::kLocalhost, - FilePath(FILE_PATH_LITERAL("chrome/test/data"))); - ASSERT_TRUE(test_server.Start()); - - GURL http_url1(test_server.GetURL("files/title1.html")); - GURL http_url2(test_server.GetURL("files/title2.html")); - - scoped_refptr<BrowserProxy> browser_proxy(automation()->GetBrowserWindow(0)); - ASSERT_TRUE(browser_proxy.get()); - int tab_count; - ASSERT_TRUE(browser_proxy->GetTabCount(&tab_count)); - - // Add a tab - ASSERT_TRUE(browser_proxy->AppendTab(http_url1)); - int new_tab_count; - ASSERT_TRUE(browser_proxy->GetTabCount(&new_tab_count)); - EXPECT_EQ(++tab_count, new_tab_count); - scoped_refptr<TabProxy> tab(browser_proxy->GetTab(tab_count - 1)); - ASSERT_TRUE(tab.get()); - - // Navigate to another same-site URL. - ASSERT_EQ(AUTOMATION_MSG_NAVIGATION_SUCCESS, tab->NavigateToURL(http_url2)); - - // Close the tab. - ASSERT_TRUE(tab->Close(true)); - tab = NULL; - - // Create a new tab to the original site. Assuming process-per-site is - // enabled, this will ensure that the SiteInstance used by the restored tab - // will already exist when the restore happens. - ASSERT_TRUE(browser_proxy->AppendTab(http_url2)); - - // Restore the closed tab. - RestoreTab(0, tab_count - 1); - tab = browser_proxy->GetActiveTab(); - ASSERT_TRUE(tab.get()); - - // And make sure the URLs match. - EXPECT_EQ(http_url2, GetActiveTabURL()); - EXPECT_TRUE(tab->GoBack()); - EXPECT_EQ(http_url1, GetActiveTabURL()); -} - -// Tests that the SiteInstances used for entries in a restored tab's history -// are given appropriate max page IDs, even if the renderer for the entry -// already exists. (Bug 1204135) -TEST_F(TabRestoreUITest, RestoreCrossSiteWithExistingSiteInstance) { - net::TestServer test_server(net::TestServer::TYPE_HTTP, - net::TestServer::kLocalhost, - FilePath(FILE_PATH_LITERAL("chrome/test/data"))); - ASSERT_TRUE(test_server.Start()); - - GURL http_url1(test_server.GetURL("files/title1.html")); - GURL http_url2(test_server.GetURL("files/title2.html")); - - scoped_refptr<BrowserProxy> browser_proxy(automation()->GetBrowserWindow(0)); - ASSERT_TRUE(browser_proxy.get()); - int tab_count; - ASSERT_TRUE(browser_proxy->GetTabCount(&tab_count)); - - // Add a tab - ASSERT_TRUE(browser_proxy->AppendTab(http_url1)); - int new_tab_count; - ASSERT_TRUE(browser_proxy->GetTabCount(&new_tab_count)); - EXPECT_EQ(++tab_count, new_tab_count); - scoped_refptr<TabProxy> tab(browser_proxy->GetTab(tab_count - 1)); - ASSERT_TRUE(tab.get()); - - // Navigate to more URLs, then a cross-site URL. - ASSERT_EQ(AUTOMATION_MSG_NAVIGATION_SUCCESS, tab->NavigateToURL(http_url2)); - ASSERT_EQ(AUTOMATION_MSG_NAVIGATION_SUCCESS, tab->NavigateToURL(http_url1)); - ASSERT_EQ(AUTOMATION_MSG_NAVIGATION_SUCCESS, tab->NavigateToURL(url1_)); - - // Close the tab. - ASSERT_TRUE(tab->Close(true)); - tab = NULL; - - // Create a new tab to the original site. Assuming process-per-site is - // enabled, this will ensure that the SiteInstance will already exist when - // the user clicks Back in the restored tab. - ASSERT_TRUE(browser_proxy->AppendTab(http_url2)); - - // Restore the closed tab. - RestoreTab(0, tab_count - 1); - tab = browser_proxy->GetActiveTab(); - ASSERT_TRUE(tab.get()); - - // And make sure the URLs match. - EXPECT_EQ(url1_, GetActiveTabURL()); - EXPECT_TRUE(tab->GoBack()); - EXPECT_EQ(http_url1, GetActiveTabURL()); - - // Navigating to a new URL should clear the forward list, because the max - // page ID of the renderer should have been updated when we restored the tab. - ASSERT_EQ(AUTOMATION_MSG_NAVIGATION_SUCCESS, tab->NavigateToURL(http_url2)); - EXPECT_FALSE(tab->GoForward()); - EXPECT_EQ(http_url2, GetActiveTabURL()); -} - -TEST_F(TabRestoreUITest, RestoreWindow) { - // Create a new window. - int window_count; - ASSERT_TRUE(automation()->GetBrowserWindowCount(&window_count)); - ASSERT_TRUE(automation()->OpenNewBrowserWindow(Browser::TYPE_TABBED, false)); - int new_window_count = 0; - ASSERT_TRUE(automation()->GetBrowserWindowCount(&new_window_count)); - EXPECT_EQ(++window_count, new_window_count); - - // Create two more tabs, one with url1, the other url2. - scoped_refptr<BrowserProxy> browser_proxy(automation()->GetBrowserWindow(0)); - ASSERT_TRUE(browser_proxy.get()); - int initial_tab_count; - ASSERT_TRUE(browser_proxy->GetTabCount(&initial_tab_count)); - ASSERT_TRUE(browser_proxy->AppendTab(url1_)); - ASSERT_TRUE(browser_proxy->WaitForTabCountToBecome(initial_tab_count + 1)); - scoped_refptr<TabProxy> new_tab(browser_proxy->GetTab(initial_tab_count)); - ASSERT_TRUE(new_tab.get()); - ASSERT_EQ(AUTOMATION_MSG_NAVIGATION_SUCCESS, new_tab->NavigateToURL(url1_)); - ASSERT_TRUE(browser_proxy->AppendTab(url2_)); - ASSERT_TRUE(browser_proxy->WaitForTabCountToBecome(initial_tab_count + 2)); - new_tab = browser_proxy->GetTab(initial_tab_count + 1); - ASSERT_TRUE(new_tab.get()); - ASSERT_EQ(AUTOMATION_MSG_NAVIGATION_SUCCESS, new_tab->NavigateToURL(url2_)); - - // Close the window. - ASSERT_TRUE(browser_proxy->RunCommand(IDC_CLOSE_WINDOW)); - browser_proxy = NULL; - new_tab = NULL; - ASSERT_TRUE(automation()->GetBrowserWindowCount(&new_window_count)); - EXPECT_EQ(window_count - 1, new_window_count); - - // Restore the window. - browser_proxy = automation()->GetBrowserWindow(0); - ASSERT_TRUE(browser_proxy.get()); - ASSERT_TRUE(browser_proxy->RunCommand(IDC_RESTORE_TAB)); - ASSERT_TRUE(automation()->GetBrowserWindowCount(&new_window_count)); - EXPECT_EQ(window_count, new_window_count); - - browser_proxy = automation()->GetBrowserWindow(1); - int tab_count; - EXPECT_TRUE(browser_proxy->GetTabCount(&tab_count)); - EXPECT_EQ(initial_tab_count + 2, tab_count); - - scoped_refptr<TabProxy> restored_tab_proxy( - browser_proxy->GetTab(initial_tab_count)); - ASSERT_TRUE(restored_tab_proxy.get()); - ASSERT_TRUE(restored_tab_proxy->WaitForTabToBeRestored( - TestTimeouts::action_timeout_ms())); - GURL url; - ASSERT_TRUE(restored_tab_proxy->GetCurrentURL(&url)); - EXPECT_TRUE(url == url1_); - - restored_tab_proxy = browser_proxy->GetTab(initial_tab_count + 1); - ASSERT_TRUE(restored_tab_proxy.get()); - ASSERT_TRUE(restored_tab_proxy->WaitForTabToBeRestored( - TestTimeouts::action_timeout_ms())); - ASSERT_TRUE(restored_tab_proxy->GetCurrentURL(&url)); - EXPECT_TRUE(url == url2_); -} - -// Restore tab with special URL chrome://credits/ and make sure the page loads -// properly after restore. See http://crbug.com/31905. -TEST_F(TabRestoreUITest, RestoreTabWithSpecialURL) { - scoped_refptr<BrowserProxy> browser(automation()->GetBrowserWindow(0)); - ASSERT_TRUE(browser.get()); - CheckActiveWindow(browser.get()); - - // Navigate new tab to a special URL. - const GURL special_url(chrome::kChromeUICreditsURL); - ASSERT_TRUE(browser->AppendTab(special_url)); - scoped_refptr<TabProxy> tab(browser->GetActiveTab()); - ASSERT_TRUE(tab.get()); - - // Close the tab. - ASSERT_TRUE(tab->Close(true)); - - // Restore the closed tab. - RestoreTab(0, 1); - tab = browser->GetTab(1); - ASSERT_TRUE(tab.get()); - ASSERT_TRUE(tab->WaitForTabToBeRestored(TestTimeouts::action_timeout_ms())); - - // See if content is as expected. - EXPECT_TRUE(tab->FindInPage(std::wstring(L"webkit"), FWD, IGNORE_CASE, false, - NULL)); -} - -// Restore tab with special URL in its navigation history, go back to that -// entry and see that it loads properly. See http://crbug.com/31905 -TEST_F(TabRestoreUITest, RestoreTabWithSpecialURLOnBack) { - net::TestServer test_server(net::TestServer::TYPE_HTTP, - net::TestServer::kLocalhost, - FilePath(FILE_PATH_LITERAL("chrome/test/data"))); - ASSERT_TRUE(test_server.Start()); - - const GURL http_url(test_server.GetURL("files/title1.html")); - - scoped_refptr<BrowserProxy> browser(automation()->GetBrowserWindow(0)); - ASSERT_TRUE(browser.get()); - CheckActiveWindow(browser.get()); - - // Navigate new tab to a special URL. - const GURL special_url(chrome::kChromeUICreditsURL); - ASSERT_TRUE(browser->AppendTab(special_url)); - scoped_refptr<TabProxy> tab(browser->GetActiveTab()); - ASSERT_TRUE(tab.get()); - - // Then navigate to a normal URL. - ASSERT_TRUE(tab->NavigateToURL(http_url)); - - // Close the tab. - ASSERT_TRUE(tab->Close(true)); - - // Restore the closed tab. - RestoreTab(0, 1); - tab = browser->GetTab(1); - ASSERT_TRUE(tab.get()); - ASSERT_TRUE(tab->WaitForTabToBeRestored(TestTimeouts::action_timeout_ms())); - GURL url; - ASSERT_TRUE(tab->GetCurrentURL(&url)); - ASSERT_EQ(http_url, url); - - // Go back, and see if content is as expected. - ASSERT_TRUE(tab->GoBack()); - EXPECT_TRUE(tab->FindInPage(std::wstring(L"webkit"), FWD, IGNORE_CASE, false, - NULL)); -} diff --git a/chrome/chrome_tests.gypi b/chrome/chrome_tests.gypi index 789456f..ae7dfdd 100644 --- a/chrome/chrome_tests.gypi +++ b/chrome/chrome_tests.gypi @@ -762,7 +762,6 @@ 'browser/process_singleton_uitest.cc', 'browser/session_history_uitest.cc', 'browser/sessions/session_restore_uitest.cc', - 'browser/tab_restore_uitest.cc', 'browser/unload_uitest.cc', 'browser/ui/login/login_prompt_uitest.cc', 'browser/ui/tests/browser_uitest.cc', @@ -2895,6 +2894,7 @@ 'browser/tab_contents/spelling_menu_observer_browsertest.cc', 'browser/tab_contents/view_source_browsertest.cc', 'browser/tab_render_watcher_browsertest.cc', + 'browser/tab_restore_browsertest.cc', 'browser/task_manager/task_manager_browsertest.cc', 'browser/task_manager/task_manager_browsertest_util.cc', 'browser/task_manager/task_manager_browsertest_util.h', |