blob: df385138c49100ce60f5e484c9ce5b20879c5726 [file] [log] [blame]
// Copyright 2021 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/test/base/ui_test_utils.h"
#include "base/containers/contains.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/ui/browser_window/public/browser_window_interface.h"
#include "chrome/test/base/in_process_browser_test.h"
#include "content/public/test/browser_test.h"
#include "net/dns/mock_host_resolver.h"
class UITestUtilsBrowserTest : public InProcessBrowserTest {
public:
UITestUtilsBrowserTest() = default;
void SetUpOnMainThread() override {
InProcessBrowserTest::SetUpOnMainThread();
host_resolver()->AddRule("*", "127.0.0.1");
}
};
// This is a regression test for crbug.com/1187241, where
// NavigateToURLWithDisposition incorrectly inferred the index in the tab strip
// of the second background tab and waited for the wrong tab to finish loading
// (which never happened).
IN_PROC_BROWSER_TEST_F(UITestUtilsBrowserTest, OpenTwoTabsInBackground) {
ASSERT_TRUE(embedded_test_server()->Start());
const GURL url1 = embedded_test_server()->GetURL("a.com", "/title1.html");
const GURL url2 = embedded_test_server()->GetURL("a.com", "/title2.html");
const GURL url3 = embedded_test_server()->GetURL("a.com", "/title3.html");
NavigateToURLWithDisposition(browser(), url1,
WindowOpenDisposition::CURRENT_TAB,
ui_test_utils::BROWSER_TEST_WAIT_FOR_LOAD_STOP);
NavigateToURLWithDisposition(browser(), url2,
WindowOpenDisposition::NEW_BACKGROUND_TAB,
ui_test_utils::BROWSER_TEST_WAIT_FOR_LOAD_STOP);
// This test will pass if this call does not time out, which requires
// // NavigateToURLWithDisposition to pick correct tab to wait for.
NavigateToURLWithDisposition(browser(), url3,
WindowOpenDisposition::NEW_BACKGROUND_TAB,
ui_test_utils::BROWSER_TEST_WAIT_FOR_LOAD_STOP);
}
IN_PROC_BROWSER_TEST_F(UITestUtilsBrowserTest, FindMatchingBrowsers) {
BrowserWindowInterface* const regular_browser1 = browser();
BrowserWindowInterface* const regular_browser2 =
CreateBrowser(browser()->profile());
BrowserWindowInterface* const incognito_browser = CreateIncognitoBrowser();
// All browsers.
auto all_browsers = ui_test_utils::FindMatchingBrowsers(
[](BrowserWindowInterface*) { return true; });
EXPECT_EQ(3u, all_browsers.size());
EXPECT_TRUE(base::Contains(all_browsers, regular_browser1));
EXPECT_TRUE(base::Contains(all_browsers, regular_browser2));
EXPECT_TRUE(base::Contains(all_browsers, incognito_browser));
// No browsers.
auto no_browsers = ui_test_utils::FindMatchingBrowsers(
[](BrowserWindowInterface*) { return false; });
EXPECT_TRUE(no_browsers.empty());
// Incognito browsers.
auto incognito_browsers =
ui_test_utils::FindMatchingBrowsers([](BrowserWindowInterface* browser) {
return browser->GetProfile()->IsIncognitoProfile();
});
EXPECT_EQ(1u, incognito_browsers.size());
EXPECT_EQ(incognito_browser, incognito_browsers[0]);
// Regular browsers.
auto regular_browsers =
ui_test_utils::FindMatchingBrowsers([](BrowserWindowInterface* browser) {
return !browser->GetProfile()->IsIncognitoProfile();
});
EXPECT_EQ(2u, regular_browsers.size());
EXPECT_TRUE(base::Contains(regular_browsers, regular_browser1));
EXPECT_TRUE(base::Contains(regular_browsers, regular_browser2));
}