summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorgbillock@chromium.org <gbillock@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-07-14 23:19:39 +0000
committergbillock@chromium.org <gbillock@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-07-14 23:19:39 +0000
commitddddfda8583100f3cb9dbba4ee1bc5ca5e87a770 (patch)
treed60bd03b926882020583f7feefc0026cd0697b03
parentd252e84a8be5a8e373e7dc860c10eb841e6bfbb7 (diff)
downloadchromium_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.mm2
-rw-r--r--chrome/browser/ui/browser.cc38
-rw-r--r--chrome/browser/ui/browser.h12
-rw-r--r--chrome/browser/ui/browser_navigator_browsertest.cc268
-rw-r--r--chrome/browser/ui/browser_navigator_browsertest.h2
-rw-r--r--chrome/browser/ui/browser_navigator_browsertest_chromeos.cc4
-rw-r--r--chrome/browser/ui/toolbar/back_forward_menu_model.cc4
-rw-r--r--chrome/browser/ui/webui/bookmarks_ui_uitest.cc5
-rw-r--r--chrome/test/ui_test_utils.cc83
-rw-r--r--chrome/test/ui_test_utils.h24
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(&params);
}
+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(&params) < 0) {
- params.disposition = CURRENT_TAB;
- }
-
- browser::Navigate(&params);
+ 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