Commit 48f80206 authored by Kevin Bailey's avatar Kevin Bailey Committed by Commit Bot

[omnibox browser test] Split up test and narrow waiting

I suspect that a test wasn't timing out due to slowness, but in fact
because a SINGLETON navigation was switching instead, and not waking up
waiting observers. This CL adds an explicit 'wait' parameter for
choosing (instead of relying on disposition).

It also splits up the respective test into SINGLETON and SWITCH_TO_TAB
versions (they're orthogonal) and cleans up some comments.

Bug: 822071
Change-Id: I241478b7a566b0e843f92b091d8f090ffbf9011c
Reviewed-on: https://chromium-review.googlesource.com/964386
Commit-Queue: Kevin Bailey <krb@chromium.org>
Reviewed-by: default avatarPeter Kasting <pkasting@chromium.org>
Cr-Commit-Position: refs/heads/master@{#543695}
parent eb319ef3
...@@ -250,10 +250,10 @@ class TestNavigationUIDataObserver : public content::TestNavigationObserver { ...@@ -250,10 +250,10 @@ class TestNavigationUIDataObserver : public content::TestNavigationObserver {
std::unique_ptr<content::NavigationUIData> last_navigation_ui_data_ = nullptr; std::unique_ptr<content::NavigationUIData> last_navigation_ui_data_ = nullptr;
}; };
Browser* BrowserNavigatorTest::NavigateHelper( Browser* BrowserNavigatorTest::NavigateHelper(const GURL& url,
const GURL& url,
Browser* browser, Browser* browser,
WindowOpenDisposition disposition) { WindowOpenDisposition disposition,
bool wait_for_navigation) {
content::WindowedNotificationObserver observer( content::WindowedNotificationObserver observer(
content::NOTIFICATION_LOAD_STOP, content::NOTIFICATION_LOAD_STOP,
content::NotificationService::AllSources()); content::NotificationService::AllSources());
...@@ -264,7 +264,7 @@ Browser* BrowserNavigatorTest::NavigateHelper( ...@@ -264,7 +264,7 @@ Browser* BrowserNavigatorTest::NavigateHelper(
params.window_action = NavigateParams::SHOW_WINDOW; params.window_action = NavigateParams::SHOW_WINDOW;
Navigate(&params); Navigate(&params);
if (params.disposition != WindowOpenDisposition::SWITCH_TO_TAB) if (wait_for_navigation)
observer.Wait(); observer.Wait();
return params.browser; return params.browser;
...@@ -642,12 +642,12 @@ IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, OutOfOrderTabSwitchTest) { ...@@ -642,12 +642,12 @@ IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, OutOfOrderTabSwitchTest) {
GURL singleton_url("http://maps.google.com/"); GURL singleton_url("http://maps.google.com/");
NavigateHelper(singleton_url, browser(), NavigateHelper(singleton_url, browser(),
WindowOpenDisposition::NEW_FOREGROUND_TAB); WindowOpenDisposition::NEW_FOREGROUND_TAB, true);
browser()->tab_strip_model()->ActivateTabAt(0, true); browser()->tab_strip_model()->ActivateTabAt(0, true);
NavigateHelper(singleton_url, browser(), NavigateHelper(singleton_url, browser(), WindowOpenDisposition::SWITCH_TO_TAB,
WindowOpenDisposition::SWITCH_TO_TAB); false);
} }
// This test verifies that IsTabOpenWithURL() and GetIndexOfExistingTab() // This test verifies that IsTabOpenWithURL() and GetIndexOfExistingTab()
...@@ -658,10 +658,10 @@ IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, SchemeMismatchTabSwitchTest) { ...@@ -658,10 +658,10 @@ IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, SchemeMismatchTabSwitchTest) {
// Generate history so the tab isn't closed. // Generate history so the tab isn't closed.
NavigateHelper(GURL("chrome://dino/"), browser(), NavigateHelper(GURL("chrome://dino/"), browser(),
WindowOpenDisposition::CURRENT_TAB); WindowOpenDisposition::CURRENT_TAB, true);
NavigateHelper(navigate_url, browser(), NavigateHelper(navigate_url, browser(),
WindowOpenDisposition::NEW_BACKGROUND_TAB); WindowOpenDisposition::NEW_BACKGROUND_TAB, true);
// We must be on another tab than the target for it to be found and // We must be on another tab than the target for it to be found and
// switched to. // switched to.
...@@ -670,7 +670,8 @@ IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, SchemeMismatchTabSwitchTest) { ...@@ -670,7 +670,8 @@ IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, SchemeMismatchTabSwitchTest) {
ChromeAutocompleteProviderClient client(browser()->profile()); ChromeAutocompleteProviderClient client(browser()->profile());
EXPECT_TRUE(client.IsTabOpenWithURL(search_url, nullptr)); EXPECT_TRUE(client.IsTabOpenWithURL(search_url, nullptr));
NavigateHelper(search_url, browser(), WindowOpenDisposition::SWITCH_TO_TAB); NavigateHelper(search_url, browser(), WindowOpenDisposition::SWITCH_TO_TAB,
false);
EXPECT_EQ(1, browser()->tab_strip_model()->active_index()); EXPECT_EQ(1, browser()->tab_strip_model()->active_index());
} }
...@@ -682,13 +683,13 @@ IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, SwitchToTabCorrectWindow) { ...@@ -682,13 +683,13 @@ IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, SwitchToTabCorrectWindow) {
GURL singleton_url("http://maps.google.com/"); GURL singleton_url("http://maps.google.com/");
// Make singleton tab. // Make singleton tab.
Browser* orig_browser = NavigateHelper(singleton_url, browser(), Browser* orig_browser = NavigateHelper(
WindowOpenDisposition::CURRENT_TAB); singleton_url, browser(), WindowOpenDisposition::CURRENT_TAB, true);
// Make a new window with different URL. // Make a new window with different URL.
Browser* middle_browser = Browser* middle_browser =
NavigateHelper(GURL("http://www.google.com/"), orig_browser, NavigateHelper(GURL("http://www.google.com/"), orig_browser,
WindowOpenDisposition::NEW_WINDOW); WindowOpenDisposition::NEW_WINDOW, true);
EXPECT_NE(orig_browser, middle_browser); EXPECT_NE(orig_browser, middle_browser);
ChromeAutocompleteProviderClient client(browser()->profile()); ChromeAutocompleteProviderClient client(browser()->profile());
...@@ -699,8 +700,9 @@ IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, SwitchToTabCorrectWindow) { ...@@ -699,8 +700,9 @@ IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, SwitchToTabCorrectWindow) {
EXPECT_TRUE(client.IsTabOpenWithURL(singleton_url, nullptr)); EXPECT_TRUE(client.IsTabOpenWithURL(singleton_url, nullptr));
// Navigate to the singleton again. // Navigate to the singleton again.
Browser* test_browser = NavigateHelper(singleton_url, middle_browser, Browser* test_browser =
WindowOpenDisposition::SWITCH_TO_TAB); NavigateHelper(singleton_url, middle_browser,
WindowOpenDisposition::SWITCH_TO_TAB, false);
// Make sure we chose the browser with the tab, not simply the current // Make sure we chose the browser with the tab, not simply the current
// browser. // browser.
...@@ -715,21 +717,21 @@ IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, SwitchToTabCorrectWindow) { ...@@ -715,21 +717,21 @@ IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, SwitchToTabCorrectWindow) {
IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, SwitchToTabLatestWindow) { IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, SwitchToTabLatestWindow) {
// Navigate to a site. // Navigate to a site.
NavigateHelper(GURL("http://maps.google.com/"), browser(), NavigateHelper(GURL("http://maps.google.com/"), browser(),
WindowOpenDisposition::CURRENT_TAB); WindowOpenDisposition::CURRENT_TAB, true);
// Navigate to a new window. // Navigate to a new window.
Browser* browser1 = NavigateHelper(GURL("http://maps.google.com/"), browser(), Browser* browser1 = NavigateHelper(GURL("http://maps.google.com/"), browser(),
WindowOpenDisposition::NEW_WINDOW); WindowOpenDisposition::NEW_WINDOW, true);
// Make yet another window. // Make yet another window.
Browser* browser2 = NavigateHelper(GURL("http://maps.google.com/"), browser(), Browser* browser2 = NavigateHelper(GURL("http://maps.google.com/"), browser(),
WindowOpenDisposition::NEW_WINDOW); WindowOpenDisposition::NEW_WINDOW, true);
// Navigate to the latest copy of the URL, in spite of specifying // Navigate to the latest copy of the URL, in spite of specifying
// the previous browser. // the previous browser.
Browser* test_browser = Browser* test_browser =
NavigateHelper(GURL("http://maps.google.com/"), browser1, NavigateHelper(GURL("http://maps.google.com/"), browser1,
WindowOpenDisposition::SWITCH_TO_TAB); WindowOpenDisposition::SWITCH_TO_TAB, false);
EXPECT_EQ(browser2, test_browser); EXPECT_EQ(browser2, test_browser);
} }
...@@ -741,49 +743,88 @@ IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, SingletonWindowLeak) { ...@@ -741,49 +743,88 @@ IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, SingletonWindowLeak) {
// Navigate to a site. // Navigate to a site.
browser1 = NavigateHelper(GURL("chrome://dino"), browser(), browser1 = NavigateHelper(GURL("chrome://dino"), browser(),
WindowOpenDisposition::CURRENT_TAB); WindowOpenDisposition::CURRENT_TAB, true);
// Navigate to a new window. // Navigate to a new window.
Browser* browser2 = NavigateHelper(GURL("chrome://about"), browser(), Browser* browser2 = NavigateHelper(GURL("chrome://about"), browser(),
WindowOpenDisposition::NEW_WINDOW); WindowOpenDisposition::NEW_WINDOW, true);
// Make sure we open non-special URL here. // Make sure we open non-special URL here.
Browser* test_browser = Browser* test_browser =
NavigateHelper(GURL("chrome://dino"), browser2, NavigateHelper(GURL("chrome://dino"), browser2,
WindowOpenDisposition::NEW_FOREGROUND_TAB); WindowOpenDisposition::NEW_FOREGROUND_TAB, true);
EXPECT_EQ(browser2, test_browser); EXPECT_EQ(browser2, test_browser);
} }
// Tests that a disposition of SINGLETON_TAB cannot see outside its // Tests that a disposition of SINGLETON_TAB cannot see across anonymity,
// window, and that a disposition of SWITCH_TO_TAB can't see outside // except for certain non-incognito affinity URLs (e.g. settings).
// its profile, except for certain non-incognito affinity URLs. IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, SingletonIncognitoLeak) {
#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
// https://crbug.com/822033
#define MAYBE_SingletonProfileLeak DISABLED_SingletonProfileLeak
#else
#define MAYBE_SingletonProfileLeak SingletonProfileLeak
#endif
IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, MAYBE_SingletonProfileLeak) {
Browser* orig_browser; Browser* orig_browser;
// Navigate to a site. // Navigate to a site.
orig_browser = NavigateHelper(GURL("http://maps.google.com/"), browser(), orig_browser = NavigateHelper(GURL("http://maps.google.com/"), browser(),
WindowOpenDisposition::CURRENT_TAB); WindowOpenDisposition::CURRENT_TAB, true);
// Open about for (not) finding later.
NavigateHelper(GURL("chrome://about"), orig_browser,
WindowOpenDisposition::NEW_FOREGROUND_TAB, true);
// Also open settings for finding later.
NavigateHelper(GURL("chrome://settings"), orig_browser,
WindowOpenDisposition::NEW_FOREGROUND_TAB, true);
EXPECT_EQ(3, browser()->tab_strip_model()->count());
Browser* test_browser;
{
Browser* incognito_browser = CreateIncognitoBrowser();
test_browser = NavigateHelper(GURL("chrome://downloads"), incognito_browser,
WindowOpenDisposition::OFF_THE_RECORD, true);
// Sanity check where OTR tab landed.
EXPECT_EQ(incognito_browser, test_browser);
// Sanity check that browser() always returns original.
EXPECT_EQ(orig_browser, browser());
// Open about singleton. Should not find in regular browser and
// open locally.
test_browser = NavigateHelper(GURL("chrome://about"), incognito_browser,
WindowOpenDisposition::SINGLETON_TAB, true);
EXPECT_NE(orig_browser, test_browser);
// Open settings. Should switch to non-incognito profile to do so.
test_browser = NavigateHelper(GURL("chrome://settings"), incognito_browser,
WindowOpenDisposition::SINGLETON_TAB, false);
EXPECT_EQ(orig_browser, test_browser);
}
// Open downloads singleton. Should not search OTR browser and
// should open in regular browser.
test_browser = NavigateHelper(GURL("chrome://downloads"), orig_browser,
WindowOpenDisposition::SINGLETON_TAB, true);
EXPECT_EQ(browser(), test_browser);
}
// Open dino for finding later. // Tests that a disposition of SWITCH_TAB cannot see across anonymity,
NavigateHelper(GURL("chrome://dino"), orig_browser, // except for certain non-incognito affinity URLs (e.g. settings).
WindowOpenDisposition::NEW_FOREGROUND_TAB); IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, SwitchToTabIncognitoLeak) {
Browser* orig_browser;
// Navigate to a site.
orig_browser = NavigateHelper(GURL("http://maps.google.com/"), browser(),
WindowOpenDisposition::CURRENT_TAB, true);
// Also open settings for finding later. // Also open settings for finding later.
NavigateHelper(GURL("chrome://settings"), orig_browser, NavigateHelper(GURL("chrome://settings"), orig_browser,
WindowOpenDisposition::NEW_FOREGROUND_TAB); WindowOpenDisposition::NEW_FOREGROUND_TAB, true);
// Also open about for searching too. // Also open about for searching too.
NavigateHelper(GURL("chrome://about"), orig_browser, NavigateHelper(GURL("chrome://about"), orig_browser,
WindowOpenDisposition::NEW_FOREGROUND_TAB); WindowOpenDisposition::NEW_FOREGROUND_TAB, true);
// Sanity check that the above created 4 separate tabs. EXPECT_EQ(3, browser()->tab_strip_model()->count());
EXPECT_EQ(4, browser()->tab_strip_model()->count());
Browser* test_browser; Browser* test_browser;
...@@ -791,45 +832,29 @@ IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, MAYBE_SingletonProfileLeak) { ...@@ -791,45 +832,29 @@ IN_PROC_BROWSER_TEST_F(BrowserNavigatorTest, MAYBE_SingletonProfileLeak) {
Browser* incognito_browser = CreateIncognitoBrowser(); Browser* incognito_browser = CreateIncognitoBrowser();
test_browser = NavigateHelper(GURL("chrome://downloads"), incognito_browser, test_browser = NavigateHelper(GURL("chrome://downloads"), incognito_browser,
WindowOpenDisposition::OFF_THE_RECORD); WindowOpenDisposition::OFF_THE_RECORD, true);
// Sanity check where OTR tab landed. // Sanity check where OTR tab landed.
EXPECT_EQ(incognito_browser, test_browser); EXPECT_EQ(incognito_browser, test_browser);
// Sanity check that browser() always returns original. // Sanity check that browser() always returns original.
EXPECT_EQ(orig_browser, browser()); EXPECT_EQ(orig_browser, browser());
// Make another for switch-to-tab to try and find.
NavigateHelper(GURL("chrome://history"), incognito_browser,
WindowOpenDisposition::NEW_FOREGROUND_TAB);
// Try to open the original chrome://about via switch-to-tab. Should not // Try to open the original chrome://about via switch-to-tab. Should not
// find copy in regular browser, and open new tab in incognito. // find copy in regular browser, and open new tab in incognito.
test_browser = NavigateHelper(GURL("chrome://about"), incognito_browser, test_browser = NavigateHelper(GURL("chrome://about"), incognito_browser,
WindowOpenDisposition::SWITCH_TO_TAB); WindowOpenDisposition::SWITCH_TO_TAB, true);
EXPECT_EQ(incognito_browser, test_browser); EXPECT_EQ(incognito_browser, test_browser);
// Open dino singleton. Should not find in regular browser and
// open locally.
test_browser = NavigateHelper(GURL("chrome://dino"), incognito_browser,
WindowOpenDisposition::SINGLETON_TAB);
EXPECT_NE(orig_browser, test_browser);
// Open settings. Should switch to non-incognito profile to do so. // Open settings. Should switch to non-incognito profile to do so.
test_browser = NavigateHelper(GURL("chrome://settings"), incognito_browser, test_browser = NavigateHelper(GURL("chrome://settings"), incognito_browser,
WindowOpenDisposition::SINGLETON_TAB); WindowOpenDisposition::SWITCH_TO_TAB, false);
EXPECT_EQ(orig_browser, test_browser); EXPECT_EQ(orig_browser, test_browser);
} }
// Open downloads singleton. Should not search OTR browser and // Switch-to-tab shouldn't find the incognito tab, and open new one in
// should open in regular browser. // current browser.
test_browser = NavigateHelper(GURL("chrome://downloads"), orig_browser, test_browser = NavigateHelper(GURL("chrome://downloads"), orig_browser,
WindowOpenDisposition::SINGLETON_TAB); WindowOpenDisposition::SWITCH_TO_TAB, true);
EXPECT_EQ(browser(), test_browser);
// Likewise, switch-to-tab shouldn't find the incognito tab either,
// and open new one in current browser.
test_browser = NavigateHelper(GURL("chrome://history"), orig_browser,
WindowOpenDisposition::SWITCH_TO_TAB);
EXPECT_EQ(browser(), test_browser); EXPECT_EQ(browser(), test_browser);
} }
......
...@@ -50,7 +50,8 @@ class BrowserNavigatorTest : public InProcessBrowserTest, ...@@ -50,7 +50,8 @@ class BrowserNavigatorTest : public InProcessBrowserTest,
Browser* NavigateHelper(const GURL& url, Browser* NavigateHelper(const GURL& url,
Browser* browser, Browser* browser,
WindowOpenDisposition disposition); WindowOpenDisposition disposition,
bool wait_for_navigation);
size_t created_tab_contents_count_; size_t created_tab_contents_count_;
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment