diff options
author | gbillock@chromium.org <gbillock@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-07-14 23:19:39 +0000 |
---|---|---|
committer | gbillock@chromium.org <gbillock@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-07-14 23:19:39 +0000 |
commit | ddddfda8583100f3cb9dbba4ee1bc5ca5e87a770 (patch) | |
tree | d60bd03b926882020583f7feefc0026cd0697b03 | |
parent | d252e84a8be5a8e373e7dc860c10eb841e6bfbb7 (diff) | |
download | chromium_src-ddddfda8583100f3cb9dbba4ee1bc5ca5e87a770.zip chromium_src-ddddfda8583100f3cb9dbba4ee1bc5ca5e87a770.tar.gz chromium_src-ddddfda8583100f3cb9dbba4ee1bc5ca5e87a770.tar.bz2 |
Change history, downloads, bookmarks to also load over NTP.
Change tests away from racy code.
R=jhawkins@chromium.org,phajdan.jr@chromium.org
BUG=22951
TEST=BrowserNavigatorTest
Committed: http://src.chromium.org/viewvc/chrome?view=rev&revision=92289
Review URL: http://codereview.chromium.org/7233021
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@92621 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | chrome/browser/app_controller_mac.mm | 2 | ||||
-rw-r--r-- | chrome/browser/ui/browser.cc | 38 | ||||
-rw-r--r-- | chrome/browser/ui/browser.h | 12 | ||||
-rw-r--r-- | chrome/browser/ui/browser_navigator_browsertest.cc | 268 | ||||
-rw-r--r-- | chrome/browser/ui/browser_navigator_browsertest.h | 2 | ||||
-rw-r--r-- | chrome/browser/ui/browser_navigator_browsertest_chromeos.cc | 4 | ||||
-rw-r--r-- | chrome/browser/ui/toolbar/back_forward_menu_model.cc | 4 | ||||
-rw-r--r-- | chrome/browser/ui/webui/bookmarks_ui_uitest.cc | 5 | ||||
-rw-r--r-- | chrome/test/ui_test_utils.cc | 83 | ||||
-rw-r--r-- | chrome/test/ui_test_utils.h | 24 |
10 files changed, 321 insertions, 121 deletions
diff --git a/chrome/browser/app_controller_mac.mm b/chrome/browser/app_controller_mac.mm index 9aefd50..d0abfce 100644 --- a/chrome/browser/app_controller_mac.mm +++ b/chrome/browser/app_controller_mac.mm @@ -785,7 +785,7 @@ void RecordLastRunAppBundlePath() { if (Browser* browser = ActivateBrowser(lastProfile)) { browser->OpenClearBrowsingDataDialog(); } else { - Browser::OpenClearBrowingDataDialogWindow(lastProfile); + Browser::OpenClearBrowsingDataDialogWindow(lastProfile); } break; } diff --git a/chrome/browser/ui/browser.cc b/chrome/browser/ui/browser.cc index d2b131a..f21df63 100644 --- a/chrome/browser/ui/browser.cc +++ b/chrome/browser/ui/browser.cc @@ -781,7 +781,7 @@ void Browser::OpenOptionsWindow(Profile* profile) { } // static -void Browser::OpenClearBrowingDataDialogWindow(Profile* profile) { +void Browser::OpenClearBrowsingDataDialogWindow(Profile* profile) { Browser* browser = Browser::Create(profile); browser->OpenClearBrowsingDataDialog(); browser->window()->Show(); @@ -1244,6 +1244,21 @@ void Browser::ShowSingletonTab(const GURL& url) { browser::Navigate(¶ms); } +void Browser::ShowSingletonTabOverwritingNTP( + const browser::NavigateParams& params) { + browser::NavigateParams local_params(params); + TabContents* contents = GetSelectedTabContents(); + const GURL& contents_url = contents->GetURL(); + if (contents != NULL && + (contents_url == GURL(chrome::kChromeUINewTabURL) || + contents_url == GURL(chrome::kAboutBlankURL)) && + browser::GetIndexOfSingletonTab(&local_params) < 0) { + local_params.disposition = CURRENT_TAB; + } + + browser::Navigate(&local_params); +} + void Browser::WindowFullscreenStateChanged() { UpdateCommandsForFullscreenMode(window_->IsFullscreen()); UpdateBookmarkBarState(BOOKMARK_BAR_STATE_CHANGE_TOGGLE_FULLSCREEN); @@ -1921,12 +1936,14 @@ void Browser::ShowAppMenu() { void Browser::ShowBookmarkManagerTab() { UserMetrics::RecordAction(UserMetricsAction("ShowBookmarks")); - ShowSingletonTab(GURL(chrome::kChromeUIBookmarksURL)); + ShowSingletonTabOverwritingNTP( + GetSingletonTabNavigateParams(GURL(chrome::kChromeUIBookmarksURL))); } void Browser::ShowHistoryTab() { UserMetrics::RecordAction(UserMetricsAction("ShowHistory")); - ShowSingletonTab(GURL(chrome::kChromeUIHistoryURL)); + ShowSingletonTabOverwritingNTP( + GetSingletonTabNavigateParams(GURL(chrome::kChromeUIHistoryURL))); } void Browser::ShowDownloadsTab() { @@ -1939,12 +1956,14 @@ void Browser::ShowDownloadsTab() { shelf->Close(); } #endif - ShowSingletonTab(GURL(chrome::kChromeUIDownloadsURL)); + ShowSingletonTabOverwritingNTP( + GetSingletonTabNavigateParams(GURL(chrome::kChromeUIDownloadsURL))); } void Browser::ShowExtensionsTab() { UserMetrics::RecordAction(UserMetricsAction("ShowExtensions")); - ShowSingletonTab(GURL(chrome::kChromeUIExtensionsURL)); + ShowSingletonTabOverwritingNTP( + GetSingletonTabNavigateParams(GURL(chrome::kChromeUIExtensionsURL))); } void Browser::ShowAboutConflictsTab() { @@ -1972,14 +1991,7 @@ void Browser::ShowOptionsTab(const std::string& sub_page) { GURL(chrome::kChromeUISettingsURL + sub_page))); params.path_behavior = browser::NavigateParams::IGNORE_AND_NAVIGATE; - if (GetSelectedTabContents() != NULL && - (GetSelectedTabContents()->GetURL() == GURL(chrome::kChromeUINewTabURL) || - GetSelectedTabContents()->GetURL() == GURL(chrome::kAboutBlankURL)) && - browser::GetIndexOfSingletonTab(¶ms) < 0) { - params.disposition = CURRENT_TAB; - } - - browser::Navigate(¶ms); + ShowSingletonTabOverwritingNTP(params); } void Browser::OpenClearBrowsingDataDialog() { diff --git a/chrome/browser/ui/browser.h b/chrome/browser/ui/browser.h index 4d07864..c432a73 100644 --- a/chrome/browser/ui/browser.h +++ b/chrome/browser/ui/browser.h @@ -291,7 +291,7 @@ class Browser : public TabHandlerDelegate, static void OpenDownloadsWindow(Profile* profile); static void OpenHelpWindow(Profile* profile); static void OpenOptionsWindow(Profile* profile); - static void OpenClearBrowingDataDialogWindow(Profile* profile); + static void OpenClearBrowsingDataDialogWindow(Profile* profile); static void OpenImportSettingsDialogWindow(Profile* profile); static void OpenInstantConfirmDialogWindow(Profile* profile); #endif @@ -460,6 +460,13 @@ class Browser : public TabHandlerDelegate, // is created. void ShowSingletonTab(const GURL& url); + // As ShowSingletonTab, but if the current tab is the new tab page or + // about:blank, then overwrite it with the passed contents. + void ShowSingletonTabOverwritingNTP(const browser::NavigateParams& params); + + // Creates a NavigateParams struct for a singleton tab navigation. + browser::NavigateParams GetSingletonTabNavigateParams(const GURL& url); + // Invoked when the fullscreen state of the window changes. // BrowserWindow::SetFullscreen invokes this after the window has become // fullscreen. @@ -1109,9 +1116,6 @@ class Browser : public TabHandlerDelegate, // Opens view-source tab for given tab contents. void ViewSource(TabContentsWrapper* tab); - // Creates a NavigateParams struct for a singleton tab navigation. - browser::NavigateParams GetSingletonTabNavigateParams(const GURL& url); - // Opens view-source tab for any frame within given tab contents. void ViewSource(TabContentsWrapper* tab, const GURL& url, diff --git a/chrome/browser/ui/browser_navigator_browsertest.cc b/chrome/browser/ui/browser_navigator_browsertest.cc index 71a9249..9de8886 100644 --- a/chrome/browser/ui/browser_navigator_browsertest.cc +++ b/chrome/browser/ui/browser_navigator_browsertest.cc @@ -16,14 +16,40 @@ #include "chrome/browser/ui/omnibox/omnibox_view.h" #include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h" #include "chrome/common/chrome_switches.h" +#include "chrome/common/url_constants.h" #include "chrome/test/ui_test_utils.h" #include "content/browser/tab_contents/tab_contents.h" -#include "content/browser/tab_contents/tab_contents_view.h"\ +#include "content/browser/tab_contents/tab_contents_view.h" +#include "content/common/content_notification_types.h" -GURL BrowserNavigatorTest::GetGoogleURL() const { +namespace { + +GURL GetGoogleURL() { return GURL("http://www.google.com/"); } +GURL GetSettingsURL() { + return GURL(chrome::kChromeUISettingsURL); +} + +GURL GetSettingsAdvancedURL() { + return GURL(chrome::kChromeUISettingsURL).Resolve( + chrome::kAdvancedOptionsSubPage); +} + +GURL GetSettingsBrowserURL() { + return GURL(chrome::kChromeUISettingsURL).Resolve( + chrome::kBrowserOptionsSubPage); +} + +GURL GetSettingsPersonalURL() { + return GURL(chrome::kChromeUISettingsURL).Resolve( + chrome::kPersonalOptionsSubPage); +} + +} // namespace + + browser::NavigateParams BrowserNavigatorTest::MakeNavigateParams() const { return MakeNavigateParams(browser()); } @@ -85,14 +111,13 @@ void BrowserNavigatorTest::Observe(int type, } } + namespace { // This test verifies that when a navigation occurs within a tab, the tab count // of the Browser remains the same and the current tab bears the loaded URL. IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, Disposition_CurrentTab) { - browser::NavigateParams p(MakeNavigateParams()); - browser::Navigate(&p); - ui_test_utils::WaitForNavigationInCurrentTab(browser()); + ui_test_utils::NavigateToURL(browser(), GetGoogleURL()); EXPECT_EQ(GetGoogleURL(), browser()->GetSelectedTabContents()->GetURL()); // We should have one window with one tab. EXPECT_EQ(1u, BrowserList::size()); @@ -102,7 +127,6 @@ IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, Disposition_CurrentTab) { // This test verifies that a singleton tab is refocused if one is already opened // in another or an existing window, or added if it is not. IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, Disposition_SingletonTabExisting) { - GURL url("http://www.google.com/"); GURL singleton_url1("http://maps.google.com/"); // Register for a notification if an additional tab_contents was instantiated. @@ -115,7 +139,7 @@ IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, Disposition_SingletonTabExisting) { NotificationService::AllSources()); browser()->AddSelectedTabWithURL(singleton_url1, PageTransition::LINK); - browser()->AddSelectedTabWithURL(url, PageTransition::LINK); + browser()->AddSelectedTabWithURL(GetGoogleURL(), PageTransition::LINK); // We should have one browser with 3 tabs, the 3rd selected. EXPECT_EQ(1u, BrowserList::size()); @@ -141,7 +165,6 @@ IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, Disposition_SingletonTabExisting) { IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, Disposition_SingletonTabNoneExisting) { - GURL url("http://www.google.com/"); GURL singleton_url1("http://maps.google.com/"); // We should have one browser with 1 tab. @@ -258,9 +281,8 @@ IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, Disposition_NewPopup) { browser::NavigateParams p(MakeNavigateParams()); p.disposition = NEW_POPUP; p.window_bounds = gfx::Rect(0, 0, 200, 200); - browser::Navigate(&p); // Wait for new popup to to load and gain focus. - ui_test_utils::WaitForNavigationInCurrentTab(p.browser); + ui_test_utils::NavigateToURL(&p); // Navigate() should have opened a new, focused popup window. EXPECT_NE(browser(), p.browser); @@ -285,9 +307,8 @@ IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, Disposition_NewPopup_ExtensionId) { p.disposition = NEW_POPUP; p.extension_app_id = "extensionappid"; p.window_bounds = gfx::Rect(0, 0, 200, 200); - browser::Navigate(&p); // Wait for new popup to to load and gain focus. - ui_test_utils::WaitForNavigationInCurrentTab(p.browser); + ui_test_utils::NavigateToURL(&p); // Navigate() should have opened a new, focused popup window. EXPECT_NE(browser(), p.browser); @@ -399,9 +420,8 @@ IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, Disposition_NewPopupUnfocused) { p.disposition = NEW_POPUP; p.window_bounds = gfx::Rect(0, 0, 200, 200); p.window_action = browser::NavigateParams::SHOW_WINDOW_INACTIVE; - browser::Navigate(&p); // Wait for new popup to load (and gain focus if the test fails). - ui_test_utils::WaitForNavigationInCurrentTab(p.browser); + ui_test_utils::NavigateToURL(&p); // Navigate() should have opened a new, unfocused, popup window. EXPECT_NE(browser(), p.browser); @@ -631,8 +651,7 @@ IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, NullBrowser_NewWindow) { // no previous tab with that URL (minus the path) exists. IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, Disposition_SingletonTabNew_IgnorePath) { - GURL url("http://www.google.com/"); - browser()->AddSelectedTabWithURL(url, PageTransition::LINK); + browser()->AddSelectedTabWithURL(GetGoogleURL(), PageTransition::LINK); // We should have one browser with 2 tabs, the 2nd selected. EXPECT_EQ(1u, BrowserList::size()); @@ -642,7 +661,7 @@ IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, // Navigate to a new singleton tab with a sub-page. browser::NavigateParams p(MakeNavigateParams()); p.disposition = SINGLETON_TAB; - p.url = GURL("chrome://settings/advanced"); + p.url = GetSettingsAdvancedURL(); p.window_action = browser::NavigateParams::SHOW_WINDOW; p.path_behavior = browser::NavigateParams::IGNORE_AND_NAVIGATE; browser::Navigate(&p); @@ -652,7 +671,7 @@ IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, EXPECT_EQ(browser(), p.browser); EXPECT_EQ(3, browser()->tab_count()); EXPECT_EQ(2, browser()->active_index()); - EXPECT_EQ(GURL("chrome://settings/advanced"), + EXPECT_EQ(GetSettingsAdvancedURL(), browser()->GetSelectedTabContents()->GetURL()); } @@ -661,10 +680,9 @@ IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, // the path) which is navigated to the specified URL. IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, Disposition_SingletonTabExisting_IgnorePath) { - GURL singleton_url1("chrome://settings"); - GURL url("http://www.google.com/"); + GURL singleton_url1(GetSettingsURL()); browser()->AddSelectedTabWithURL(singleton_url1, PageTransition::LINK); - browser()->AddSelectedTabWithURL(url, PageTransition::LINK); + browser()->AddSelectedTabWithURL(GetGoogleURL(), PageTransition::LINK); // We should have one browser with 3 tabs, the 3rd selected. EXPECT_EQ(1u, BrowserList::size()); @@ -674,7 +692,7 @@ IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, // Navigate to singleton_url1. browser::NavigateParams p(MakeNavigateParams()); p.disposition = SINGLETON_TAB; - p.url = GURL("chrome://settings/advanced"); + p.url = GetSettingsAdvancedURL(); p.window_action = browser::NavigateParams::SHOW_WINDOW; p.path_behavior = browser::NavigateParams::IGNORE_AND_NAVIGATE; browser::Navigate(&p); @@ -684,7 +702,7 @@ IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, EXPECT_EQ(browser(), p.browser); EXPECT_EQ(3, browser()->tab_count()); EXPECT_EQ(1, browser()->active_index()); - EXPECT_EQ(GURL("chrome://settings/advanced"), + EXPECT_EQ(GetSettingsAdvancedURL(), browser()->GetSelectedTabContents()->GetURL()); } @@ -693,10 +711,9 @@ IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, // the path) which is navigated to the specified URL. IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, Disposition_SingletonTabExistingSubPath_IgnorePath) { - GURL singleton_url1("chrome://settings/advanced"); - GURL url("http://www.google.com/"); + GURL singleton_url1(GetSettingsAdvancedURL()); browser()->AddSelectedTabWithURL(singleton_url1, PageTransition::LINK); - browser()->AddSelectedTabWithURL(url, PageTransition::LINK); + browser()->AddSelectedTabWithURL(GetGoogleURL(), PageTransition::LINK); // We should have one browser with 3 tabs, the 3rd selected. EXPECT_EQ(1u, BrowserList::size()); @@ -706,7 +723,7 @@ IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, // Navigate to singleton_url1. browser::NavigateParams p(MakeNavigateParams()); p.disposition = SINGLETON_TAB; - p.url = GURL("chrome://settings/personal"); + p.url = GetSettingsPersonalURL(); p.window_action = browser::NavigateParams::SHOW_WINDOW; p.path_behavior = browser::NavigateParams::IGNORE_AND_NAVIGATE; browser::Navigate(&p); @@ -716,7 +733,7 @@ IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, EXPECT_EQ(browser(), p.browser); EXPECT_EQ(3, browser()->tab_count()); EXPECT_EQ(1, browser()->active_index()); - EXPECT_EQ(GURL("chrome://settings/personal"), + EXPECT_EQ(GetSettingsPersonalURL(), browser()->GetSelectedTabContents()->GetURL()); } @@ -725,10 +742,9 @@ IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, // the path). IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, Disposition_SingletonTabExistingSubPath_IgnorePath2) { - GURL singleton_url1("chrome://settings/advanced"); - GURL url("http://www.google.com/"); + GURL singleton_url1(GetSettingsAdvancedURL()); browser()->AddSelectedTabWithURL(singleton_url1, PageTransition::LINK); - browser()->AddSelectedTabWithURL(url, PageTransition::LINK); + browser()->AddSelectedTabWithURL(GetGoogleURL(), PageTransition::LINK); // We should have one browser with 3 tabs, the 3rd selected. EXPECT_EQ(1u, BrowserList::size()); @@ -738,7 +754,7 @@ IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, // Navigate to singleton_url1. browser::NavigateParams p(MakeNavigateParams()); p.disposition = SINGLETON_TAB; - p.url = GURL("chrome://settings/personal"); + p.url = GetSettingsPersonalURL(); p.window_action = browser::NavigateParams::SHOW_WINDOW; p.path_behavior = browser::NavigateParams::IGNORE_AND_STAY_PUT; browser::Navigate(&p); @@ -756,8 +772,7 @@ IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, // selected tab is a match but has a different path. IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, Disposition_SingletonTabFocused_IgnorePath) { - GURL singleton_url_current("chrome://settings/advanced"); - GURL url("http://www.google.com/"); + GURL singleton_url_current(GetSettingsAdvancedURL()); browser()->AddSelectedTabWithURL(singleton_url_current, PageTransition::LINK); // We should have one browser with 2 tabs, the 2nd selected. @@ -766,7 +781,7 @@ IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, EXPECT_EQ(1, browser()->active_index()); // Navigate to a different settings path. - GURL singleton_url_target("chrome://settings/personal"); + GURL singleton_url_target(GetSettingsPersonalURL()); browser::NavigateParams p(MakeNavigateParams()); p.disposition = SINGLETON_TAB; p.url = singleton_url_target; @@ -824,7 +839,7 @@ IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, // Navigate to the settings page. browser::NavigateParams p(MakeNavigateParams(incognito_browser)); p.disposition = SINGLETON_TAB; - p.url = GURL("chrome://settings"); + p.url = GetSettingsURL(); p.window_action = browser::NavigateParams::SHOW_WINDOW; browser::Navigate(&p); @@ -832,7 +847,7 @@ IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, EXPECT_NE(incognito_browser, p.browser); EXPECT_EQ(browser(), p.browser); EXPECT_EQ(2, browser()->tab_count()); - EXPECT_EQ(GURL("chrome://settings"), + EXPECT_EQ(GetSettingsURL(), browser()->GetSelectedTabContents()->GetURL()); } @@ -868,7 +883,7 @@ IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, // Navigate to the settings page. browser::NavigateParams p(MakeNavigateParams(incognito_browser)); p.disposition = SINGLETON_TAB; - p.url = GURL("chrome://bookmarks"); + p.url = GURL(chrome::kChromeUIBookmarksURL); p.window_action = browser::NavigateParams::SHOW_WINDOW; browser::Navigate(&p); @@ -876,14 +891,14 @@ IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, EXPECT_NE(incognito_browser, p.browser); EXPECT_EQ(browser(), p.browser); EXPECT_EQ(2, browser()->tab_count()); - EXPECT_EQ(GURL("chrome://bookmarks"), + EXPECT_EQ(GURL(chrome::kChromeUIBookmarksURL), browser()->GetSelectedTabContents()->GetURL()); } // This test makes sure a crashed singleton tab reloads from a new navigation. IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, NavigateToCrashedSingletonTab) { - GURL singleton_url("chrome://settings/advanced"); + GURL singleton_url(GetSettingsAdvancedURL()); TabContentsWrapper* wrapper = browser()->AddSelectedTabWithURL(singleton_url, PageTransition::LINK); TabContents* tab_contents = wrapper->tab_contents(); @@ -902,8 +917,7 @@ IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, p.url = singleton_url; p.window_action = browser::NavigateParams::SHOW_WINDOW; p.path_behavior = browser::NavigateParams::IGNORE_AND_NAVIGATE; - browser::Navigate(&p); - ui_test_utils::WaitForNavigationInCurrentTab(browser()); + ui_test_utils::NavigateToURL(&p); // The tab should not be sad anymore. EXPECT_FALSE(tab_contents->is_crashed()); @@ -911,104 +925,147 @@ IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, NavigateFromDefaultToOptionsInSameTab) { - browser()->OpenOptionsDialog(); - ui_test_utils::WaitForNavigationInCurrentTab(browser()); + { + ui_test_utils::WindowedNotificationObserver observer( + content::NOTIFICATION_LOAD_STOP, NotificationService::AllSources()); + browser()->OpenOptionsDialog(); + observer.Wait(); + } EXPECT_EQ(1, browser()->tab_count()); - EXPECT_EQ(GURL("chrome://settings/browser"), - browser()->GetSelectedTabContents()->GetURL()); + EXPECT_EQ(GetSettingsURL(), + browser()->GetSelectedTabContents()->GetURL().GetOrigin()); } IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, NavigateFromBlankToOptionsInSameTab) { browser::NavigateParams p(MakeNavigateParams()); - p.url = GURL("about:blank"); - browser::Navigate(&p); - ui_test_utils::WaitForNavigationInCurrentTab(browser()); + p.url = GURL(chrome::kAboutBlankURL); + ui_test_utils::NavigateToURL(&p); - browser()->OpenOptionsDialog(); - ui_test_utils::WaitForNavigationInCurrentTab(browser()); + { + ui_test_utils::WindowedNotificationObserver observer( + content::NOTIFICATION_LOAD_STOP, NotificationService::AllSources()); + browser()->OpenOptionsDialog(); + observer.Wait(); + } EXPECT_EQ(1, browser()->tab_count()); - EXPECT_EQ(GURL("chrome://settings/browser"), - browser()->GetSelectedTabContents()->GetURL()); + EXPECT_EQ(GetSettingsURL(), + browser()->GetSelectedTabContents()->GetURL().GetOrigin()); } IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, NavigateFromNTPToOptionsInSameTab) { browser::NavigateParams p(MakeNavigateParams()); - p.url = GURL("chrome://newtab"); - browser::Navigate(&p); - ui_test_utils::WaitForNavigationInCurrentTab(browser()); + p.url = GURL(chrome::kChromeUINewTabURL); + ui_test_utils::NavigateToURL(&p); EXPECT_EQ(1, browser()->tab_count()); - EXPECT_EQ(GURL("chrome://newtab"), + EXPECT_EQ(GURL(chrome::kChromeUINewTabURL), browser()->GetSelectedTabContents()->GetURL()); - browser()->OpenOptionsDialog(); - ui_test_utils::WaitForNavigationInCurrentTab(browser()); + { + ui_test_utils::WindowedNotificationObserver observer( + content::NOTIFICATION_LOAD_STOP, NotificationService::AllSources()); + browser()->OpenOptionsDialog(); + observer.Wait(); + } EXPECT_EQ(1, browser()->tab_count()); - EXPECT_EQ(GURL("chrome://settings/browser"), - browser()->GetSelectedTabContents()->GetURL()); + EXPECT_EQ(GetSettingsURL(), + browser()->GetSelectedTabContents()->GetURL().GetOrigin()); } IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, NavigateFromPageToOptionsInNewTab) { browser::NavigateParams p(MakeNavigateParams()); - browser::Navigate(&p); - ui_test_utils::WaitForNavigationInCurrentTab(browser()); + ui_test_utils::NavigateToURL(&p); EXPECT_EQ(GetGoogleURL(), browser()->GetSelectedTabContents()->GetURL()); EXPECT_EQ(1u, BrowserList::size()); EXPECT_EQ(1, browser()->tab_count()); - browser()->OpenOptionsDialog(); - ui_test_utils::WaitForNavigationInCurrentTab(browser()); + { + ui_test_utils::WindowedNotificationObserver observer( + content::NOTIFICATION_LOAD_STOP, NotificationService::AllSources()); + browser()->OpenOptionsDialog(); + observer.Wait(); + } EXPECT_EQ(2, browser()->tab_count()); - EXPECT_EQ(GURL("chrome://settings/browser"), - browser()->GetSelectedTabContents()->GetURL()); + EXPECT_EQ(GetSettingsURL(), + browser()->GetSelectedTabContents()->GetURL().GetOrigin()); } IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, NavigateFromNTPToOptionsSingleton) { - browser()->OpenOptionsDialog(); - ui_test_utils::WaitForNavigationInCurrentTab(browser()); + { + ui_test_utils::WindowedNotificationObserver observer( + content::NOTIFICATION_LOAD_STOP, NotificationService::AllSources()); + browser()->OpenOptionsDialog(); + observer.Wait(); + } EXPECT_EQ(1, browser()->tab_count()); browser()->NewTab(); EXPECT_EQ(2, browser()->tab_count()); - browser()->OpenOptionsDialog(); + { + ui_test_utils::WindowedNotificationObserver observer( + content::NOTIFICATION_LOAD_STOP, NotificationService::AllSources()); + browser()->OpenOptionsDialog(); + observer.Wait(); + } EXPECT_EQ(2, browser()->tab_count()); - EXPECT_EQ(GURL("chrome://settings"), - browser()->GetSelectedTabContents()->GetURL()); + EXPECT_EQ(GetSettingsURL(), + browser()->GetSelectedTabContents()->GetURL().GetOrigin()); } IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, NavigateFromNTPToOptionsPageInSameTab) { - browser()->ShowOptionsTab("personal"); - ui_test_utils::WaitForNavigationInCurrentTab(browser()); + { + ui_test_utils::WindowedNotificationObserver observer( + content::NOTIFICATION_LOAD_STOP, NotificationService::AllSources()); + browser()->ShowOptionsTab(chrome::kPersonalOptionsSubPage); + observer.Wait(); + } EXPECT_EQ(1, browser()->tab_count()); - EXPECT_EQ(GURL("chrome://settings/personal"), + EXPECT_EQ(GetSettingsPersonalURL(), browser()->GetSelectedTabContents()->GetURL()); browser()->NewTab(); EXPECT_EQ(2, browser()->tab_count()); - browser()->ShowOptionsTab("personal"); + { + ui_test_utils::WindowedNotificationObserver observer( + content::NOTIFICATION_LOAD_STOP, NotificationService::AllSources()); + browser()->ShowOptionsTab(chrome::kPersonalOptionsSubPage); + observer.Wait(); + } EXPECT_EQ(2, browser()->tab_count()); - EXPECT_EQ(GURL("chrome://settings/personal"), + EXPECT_EQ(GetSettingsPersonalURL(), browser()->GetSelectedTabContents()->GetURL()); } IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, NavigateFromOtherTabToSingletonOptions) { - browser()->OpenOptionsDialog(); - ui_test_utils::WaitForNavigationInCurrentTab(browser()); - browser()->AddSelectedTabWithURL(GetGoogleURL(), PageTransition::LINK); - ui_test_utils::WaitForNavigationInCurrentTab(browser()); + { + ui_test_utils::WindowedNotificationObserver observer( + content::NOTIFICATION_LOAD_STOP, NotificationService::AllSources()); + browser()->OpenOptionsDialog(); + observer.Wait(); + } + { + ui_test_utils::WindowedNotificationObserver observer( + content::NOTIFICATION_LOAD_STOP, NotificationService::AllSources()); + browser()->AddSelectedTabWithURL(GetGoogleURL(), PageTransition::LINK); + observer.Wait(); + } - browser()->OpenOptionsDialog(); - ui_test_utils::WaitForNavigationInCurrentTab(browser()); + { + ui_test_utils::WindowedNotificationObserver observer( + content::NOTIFICATION_LOAD_STOP, NotificationService::AllSources()); + browser()->OpenOptionsDialog(); + observer.Wait(); + } EXPECT_EQ(2, browser()->tab_count()); - EXPECT_EQ(GURL("chrome://settings/browser"), - browser()->GetSelectedTabContents()->GetURL()); + EXPECT_EQ(GetSettingsURL(), + browser()->GetSelectedTabContents()->GetURL().GetOrigin()); } // Tests that when a new tab is opened from the omnibox, the focus is moved from @@ -1049,4 +1106,43 @@ IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, VIEW_ID_LOCATION_BAR)); } -} // namespace +IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, + NavigateFromDefaultToHistoryInSameTab) { + { + ui_test_utils::WindowedNotificationObserver observer( + content::NOTIFICATION_LOAD_STOP, NotificationService::AllSources()); + browser()->ShowHistoryTab(); + observer.Wait(); + } + EXPECT_EQ(1, browser()->tab_count()); + EXPECT_EQ(GURL(chrome::kChromeUIHistoryURL), + browser()->GetSelectedTabContents()->GetURL()); +} + +IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, + NavigateFromDefaultToBookmarksInSameTab) { + { + ui_test_utils::WindowedNotificationObserver observer( + content::NOTIFICATION_LOAD_STOP, NotificationService::AllSources()); + browser()->ShowBookmarkManagerTab(); + observer.Wait(); + } + EXPECT_EQ(1, browser()->tab_count()); + EXPECT_EQ(GURL(chrome::kChromeUIBookmarksURL), + browser()->GetSelectedTabContents()->GetURL()); +} + +IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, + NavigateFromDefaultToDownloadsInSameTab) { + { + ui_test_utils::WindowedNotificationObserver observer( + content::NOTIFICATION_LOAD_STOP, NotificationService::AllSources()); + browser()->ShowDownloadsTab(); + observer.Wait(); + } + EXPECT_EQ(1, browser()->tab_count()); + EXPECT_EQ(GURL(chrome::kChromeUIDownloadsURL), + browser()->GetSelectedTabContents()->GetURL()); +} + +} // namespace diff --git a/chrome/browser/ui/browser_navigator_browsertest.h b/chrome/browser/ui/browser_navigator_browsertest.h index 4a35639..e2027ea 100644 --- a/chrome/browser/ui/browser_navigator_browsertest.h +++ b/chrome/browser/ui/browser_navigator_browsertest.h @@ -25,8 +25,6 @@ struct NavigateParams; class BrowserNavigatorTest : public InProcessBrowserTest, public NotificationObserver { protected: - GURL GetGoogleURL() const; - browser::NavigateParams MakeNavigateParams() const; browser::NavigateParams MakeNavigateParams(Browser* browser) const; diff --git a/chrome/browser/ui/browser_navigator_browsertest_chromeos.cc b/chrome/browser/ui/browser_navigator_browsertest_chromeos.cc index 22d99c6..f9a4eaf 100644 --- a/chrome/browser/ui/browser_navigator_browsertest_chromeos.cc +++ b/chrome/browser/ui/browser_navigator_browsertest_chromeos.cc @@ -15,6 +15,10 @@ namespace { +GURL GetGoogleURL() { + return GURL("http://www.google.com/"); +} + // Subclass that tests navigation while in the Guest session. class BrowserGuestSessionNavigatorTest: public BrowserNavigatorTest { protected: diff --git a/chrome/browser/ui/toolbar/back_forward_menu_model.cc b/chrome/browser/ui/toolbar/back_forward_menu_model.cc index 1ee555c..1ba37e0 100644 --- a/chrome/browser/ui/toolbar/back_forward_menu_model.cc +++ b/chrome/browser/ui/toolbar/back_forward_menu_model.cc @@ -164,7 +164,9 @@ void BackForwardMenuModel::ActivatedAtWithDisposition( // Execute the command for the last item: "Show Full History". if (index == GetItemCount() - 1) { UserMetrics::RecordComputedAction(BuildActionName("ShowFullHistory", -1)); - browser_->ShowSingletonTab(GURL(chrome::kChromeUIHistoryURL)); + browser_->ShowSingletonTabOverwritingNTP( + browser_->GetSingletonTabNavigateParams( + GURL(chrome::kChromeUIHistoryURL))); return; } diff --git a/chrome/browser/ui/webui/bookmarks_ui_uitest.cc b/chrome/browser/ui/webui/bookmarks_ui_uitest.cc index a89e35aa..26a16bb 100644 --- a/chrome/browser/ui/webui/bookmarks_ui_uitest.cc +++ b/chrome/browser/ui/webui/bookmarks_ui_uitest.cc @@ -92,7 +92,7 @@ TEST_F(BookmarksUITest, CommandOpensBookmarksTab) { // Bring up the bookmarks manager tab. ASSERT_TRUE(browser->RunCommand(IDC_SHOW_BOOKMARK_MANAGER)); ASSERT_TRUE(browser->GetTabCount(&tab_count)); - ASSERT_EQ(2, tab_count); + ASSERT_EQ(1, tab_count); scoped_refptr<TabProxy> tab = browser->GetActiveTab(); ASSERT_TRUE(tab.get()); @@ -108,6 +108,7 @@ TEST_F(BookmarksUITest, CommandAgainGoesBackToBookmarksTab) { int tab_count = -1; ASSERT_TRUE(browser->GetTabCount(&tab_count)); + NavigateToURL(GURL("http://www.google.com/")); ASSERT_EQ(1, tab_count); // Bring up the bookmarks manager tab. @@ -146,7 +147,7 @@ TEST_F(BookmarksUITest, TwoCommandsOneTab) { ASSERT_TRUE(browser->RunCommand(IDC_SHOW_BOOKMARK_MANAGER)); ASSERT_TRUE(browser->RunCommand(IDC_SHOW_BOOKMARK_MANAGER)); ASSERT_TRUE(browser->GetTabCount(&tab_count)); - ASSERT_EQ(2, tab_count); + ASSERT_EQ(1, tab_count); } TEST_F(BookmarksUITest, BookmarksLoaded) { diff --git a/chrome/test/ui_test_utils.cc b/chrome/test/ui_test_utils.cc index 1fb3d3e..bc6733d 100644 --- a/chrome/test/ui_test_utils.cc +++ b/chrome/test/ui_test_utils.cc @@ -26,6 +26,7 @@ #include "chrome/browser/tab_contents/thumbnail_generator.h" #include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/browser_list.h" +#include "chrome/browser/ui/browser_navigator.h" #include "chrome/browser/ui/browser_window.h" #include "chrome/browser/ui/find_bar/find_notification_details.h" #include "chrome/browser/ui/find_bar/find_tab_helper.h" @@ -35,7 +36,6 @@ #include "chrome/common/extensions/extension_action.h" #include "chrome/test/automation/javascript_execution_controller.h" #include "chrome/test/bookmark_load_observer.h" -#include "chrome/test/test_navigation_observer.h" #include "content/browser/renderer_host/render_process_host.h" #include "content/browser/renderer_host/render_view_host.h" #include "content/browser/tab_contents/navigation_controller.h" @@ -56,6 +56,67 @@ namespace ui_test_utils { namespace { +// Used to block until a navigation completes. +class NavigationNotificationObserver : public NotificationObserver { + public: + NavigationNotificationObserver(const NotificationSource& source, + int number_of_navigations) + : navigation_started_(false), + navigations_completed_(0), + number_of_navigations_(number_of_navigations), + running_(false), + done_(false) { + registrar_.Add(this, content::NOTIFICATION_NAV_ENTRY_COMMITTED, source); + registrar_.Add(this, content::NOTIFICATION_LOAD_START, source); + registrar_.Add(this, content::NOTIFICATION_LOAD_STOP, source); + } + + void Run() { + if (!done_) { + running_ = true; + RunMessageLoop(); + } + } + + virtual void Observe(int type, + const NotificationSource& source, + const NotificationDetails& details) { + if (type == content::NOTIFICATION_NAV_ENTRY_COMMITTED || + type == content::NOTIFICATION_LOAD_START) { + navigation_started_ = true; + } else if (type == content::NOTIFICATION_LOAD_STOP) { + if (navigation_started_ && + ++navigations_completed_ == number_of_navigations_) { + navigation_started_ = false; + done_ = true; + if (running_) + MessageLoopForUI::current()->Quit(); + } + } + } + + private: + NotificationRegistrar registrar_; + + // If true the navigation has started. + bool navigation_started_; + + // The number of navigations that have been completed. + int navigations_completed_; + + // The number of navigations to wait for. + int number_of_navigations_; + + // Calls to Observe() can happen early, before the user calls Run(), or + // after. When we've seen all the navigations we're looking for, we set + // done_ to true; then when Run() is called we'll never need to run the + // event loop. Also, we don't need to quit the event loop when we're + // done if we never had to start an event loop. + bool running_; + bool done_; + DISALLOW_COPY_AND_ASSIGN(NavigationNotificationObserver); +}; + class DOMOperationObserver : public NotificationObserver { public: explicit DOMOperationObserver(RenderViewHost* render_view_host) @@ -274,8 +335,9 @@ void WaitForNavigation(NavigationController* controller) { void WaitForNavigations(NavigationController* controller, int number_of_navigations) { - TestNavigationObserver observer(controller, NULL, number_of_navigations); - observer.WaitForObservation(); + NavigationNotificationObserver observer( + Source<NavigationController>(controller), number_of_navigations); + observer.Run(); } void WaitForNewTab(Browser* browser) { @@ -326,6 +388,12 @@ void OpenURLOffTheRecord(Profile* profile, const GURL& url) { WaitForNavigations(&browser->GetSelectedTabContents()->controller(), 1); } +void NavigateToURL(browser::NavigateParams* params) { + NavigationNotificationObserver observer(NotificationService::AllSources(), 1); + browser::Navigate(params); + observer.Run(); +} + void NavigateToURL(Browser* browser, const GURL& url) { NavigateToURLWithDisposition(browser, url, CURRENT_TAB, BROWSER_TEST_WAIT_FOR_NAVIGATION); @@ -341,9 +409,10 @@ static void NavigateToURLWithDispositionBlockUntilNavigationsComplete( int number_of_navigations, WindowOpenDisposition disposition, int browser_test_flags) { - TestNavigationObserver - same_tab_observer(&browser->GetSelectedTabContents()->controller(), - NULL, number_of_navigations); + NavigationNotificationObserver same_tab_observer( + Source<NavigationController>( + &browser->GetSelectedTabContents()->controller()), + number_of_navigations); std::set<Browser*> initial_browsers; for (std::vector<Browser*>::const_iterator iter = BrowserList::begin(); @@ -375,7 +444,7 @@ static void NavigateToURLWithDispositionBlockUntilNavigationsComplete( tab_contents = browser->GetSelectedTabContents(); } if (disposition == CURRENT_TAB) { - same_tab_observer.WaitForObservation(); + same_tab_observer.Run(); return; } else if (tab_contents) { NavigationController* controller = &tab_contents->controller(); diff --git a/chrome/test/ui_test_utils.h b/chrome/test/ui_test_utils.h index f89f392..893c160 100644 --- a/chrome/test/ui_test_utils.h +++ b/chrome/test/ui_test_utils.h @@ -45,6 +45,10 @@ class SkBitmap; class TabContents; class TabContentsWrapper; +namespace browser { +struct NavigateParams; +} + namespace gfx { class Size; } @@ -84,20 +88,25 @@ void RunAllPendingInMessageLoop(); bool GetCurrentTabTitle(const Browser* browser, string16* title); // Waits for the current tab to complete the navigation. Returns true on -// success. +// success. TODO(gbillock): remove this race hazard. +// Use WindowedNotificationObserver instead. bool WaitForNavigationInCurrentTab(Browser* browser); // Waits for the current tab to complete the specified number of navigations. -// Returns true on success. +// Returns true on success. TODO(gbillock): remove this race hazard. +// Use WindowedNotificationObserver instead. bool WaitForNavigationsInCurrentTab(Browser* browser, int number_of_navigations); // Waits for |controller| to complete a navigation. This blocks until -// the navigation finishes. +// the navigation finishes. TODO(gbillock): remove this race hazard. +// Use WindowedNotificationObserver instead. void WaitForNavigation(NavigationController* controller); // Waits for |controller| to complete a navigation. This blocks until -// the specified number of navigations complete. +// the specified number of navigations complete. TODO(gbillock): remove this +// race hazard. +// Use WindowedNotificationObserver instead. void WaitForNavigations(NavigationController* controller, int number_of_navigations); @@ -119,8 +128,13 @@ Browser* WaitForNewBrowser(); // browser if a browser with the incognito profile does not exist. void OpenURLOffTheRecord(Profile* profile, const GURL& url); +// Performs the provided navigation process, blocking until the navigation +// finishes. May change the params in some cases (i.e. if the navigation +// opens a new browser window). Uses browser::Navigate. +void NavigateToURL(browser::NavigateParams* params); + // Navigates the selected tab of |browser| to |url|, blocking until the -// navigation finishes. +// navigation finishes. Uses Browser::OpenURL --> browser::Navigate. void NavigateToURL(Browser* browser, const GURL& url); // Navigates the specified tab of |browser| to |url|, blocking until the |