summaryrefslogtreecommitdiffstats
path: root/browser/components/urlbar/tests/browser/browser_top_sites_switchtab.js
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-19 01:14:29 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-19 01:14:29 +0000
commitfbaf0bb26397aa498eb9156f06d5a6fe34dd7dd8 (patch)
tree4c1ccaf5486d4f2009f9a338a98a83e886e29c97 /browser/components/urlbar/tests/browser/browser_top_sites_switchtab.js
parentReleasing progress-linux version 124.0.1-1~progress7.99u1. (diff)
downloadfirefox-fbaf0bb26397aa498eb9156f06d5a6fe34dd7dd8.tar.xz
firefox-fbaf0bb26397aa498eb9156f06d5a6fe34dd7dd8.zip
Merging upstream version 125.0.1.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'browser/components/urlbar/tests/browser/browser_top_sites_switchtab.js')
-rw-r--r--browser/components/urlbar/tests/browser/browser_top_sites_switchtab.js209
1 files changed, 209 insertions, 0 deletions
diff --git a/browser/components/urlbar/tests/browser/browser_top_sites_switchtab.js b/browser/components/urlbar/tests/browser/browser_top_sites_switchtab.js
new file mode 100644
index 0000000000..d4edce0f11
--- /dev/null
+++ b/browser/components/urlbar/tests/browser/browser_top_sites_switchtab.js
@@ -0,0 +1,209 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+/**
+ * Test that TopSites are showing an appropriate Switch-tab status, depending
+ * on the state of the `browser.urlbar.switchTabs.searchAllContainers` pref.
+ * When the feature is enabled, in a normal window they should show the
+ * tab container, otherwise it's only possible to switch to a tab in the same
+ * container.
+ * In private windows it's only possible to switch to private tabs in the
+ * private container. Similarly non-private windows don't see private tabs.
+ * This test is not checking that switching to the appropriate tab works as that
+ * is already covered by other tests.
+ */
+
+ChromeUtils.defineESModuleGetters(this, {
+ AboutNewTab: "resource:///modules/AboutNewTab.sys.mjs",
+ NewTabUtils: "resource://gre/modules/NewTabUtils.sys.mjs",
+});
+
+const EN_US_TOPSITES =
+ "https://www.youtube.com/,https://www.facebook.com/,https://www.amazon.com/,https://www.reddit.com/";
+const OUR_TOPSITE_URL = "https://example.com/";
+const REF_TOPSITE_URL = OUR_TOPSITE_URL + "#someref";
+const TOPSITES_COUNT = EN_US_TOPSITES.split(",").length + 1;
+
+add_setup(async function () {
+ await SpecialPowers.pushPrefEnv({
+ set: [
+ ["browser.urlbar.suggest.topsites", true],
+ ["browser.urlbar.suggest.quickactions", false],
+ ["browser.newtabpage.activity-stream.default.sites", EN_US_TOPSITES],
+ ],
+ });
+ registerCleanupFunction(PlacesUtils.history.clear);
+});
+
+add_task(async function test_ignoreRef() {
+ info("Add some visits to a URL.");
+ await addAsFirstTopSite(REF_TOPSITE_URL);
+
+ for (let val of [true, false]) {
+ await SpecialPowers.pushPrefEnv({
+ set: [["browser.urlbar.switchTabs.searchAllContainers", val]],
+ });
+ info("Test with searchAllContainer set to " + val.toString());
+ let tab = await BrowserTestUtils.openNewForegroundTab(
+ gBrowser,
+ REF_TOPSITE_URL
+ );
+ // Switch back to the originating tab, to check for switch to the current tab.
+ await BrowserTestUtils.switchTab(gBrowser, gBrowser.tabs[0]);
+ await openAddressBarAndCheckResults(window, TOPSITES_COUNT, new Set([0]));
+ await BrowserTestUtils.removeTab(tab);
+ await SpecialPowers.popPrefEnv();
+ }
+ await PlacesUtils.history.remove(REF_TOPSITE_URL);
+});
+
+add_task(async function test_topSitesTabSwitch() {
+ await addAsFirstTopSite(OUR_TOPSITE_URL);
+
+ for (let val of [true, false]) {
+ await SpecialPowers.pushPrefEnv({
+ set: [["browser.urlbar.switchTabs.searchAllContainers", val]],
+ });
+ info("Test with searchAllContainer set to " + val.toString());
+ await doTest();
+ await SpecialPowers.popPrefEnv();
+ }
+ await PlacesUtils.history.remove(OUR_TOPSITE_URL);
+});
+
+async function doTest() {
+ info("Non-private window");
+ // Add a normal tab and a container tab.
+ let tab = await BrowserTestUtils.openNewForegroundTab(
+ gBrowser,
+ OUR_TOPSITE_URL
+ );
+ let containerTab = await loadNewForegroundContainerTab(OUR_TOPSITE_URL, 1);
+ // Switch back to the originating tab, to check for switch to the current tab.
+ await BrowserTestUtils.switchTab(gBrowser, gBrowser.tabs[0]);
+ let expectedUserContextIds = UrlbarPrefs.get("switchTabs.searchAllContainers")
+ ? new Set([0, 1])
+ : new Set([0]);
+ await openAddressBarAndCheckResults(
+ window,
+ TOPSITES_COUNT + expectedUserContextIds.size - 1,
+ expectedUserContextIds
+ );
+
+ info("Private window");
+ let pbWin = await BrowserTestUtils.openNewBrowserWindow({
+ private: true,
+ });
+ await openAddressBarAndCheckResults(pbWin, TOPSITES_COUNT, new Set());
+
+ info("Close the original tab and open the url in the private window instead");
+ await BrowserTestUtils.removeTab(tab);
+ await BrowserTestUtils.openNewForegroundTab(pbWin.gBrowser, OUR_TOPSITE_URL);
+ // Switch back to the originating tab, to check for switch to the current tab.
+ await BrowserTestUtils.switchTab(pbWin.gBrowser, pbWin.gBrowser.tabs[0]);
+ await openAddressBarAndCheckResults(
+ window,
+ TOPSITES_COUNT,
+ UrlbarPrefs.get("switchTabs.searchAllContainers") ? new Set([1]) : new Set()
+ );
+ await openAddressBarAndCheckResults(pbWin, TOPSITES_COUNT, new Set([-1]));
+
+ // We're done with the private window.
+ await BrowserTestUtils.closeWindow(pbWin);
+
+ info("Check Top sites in the same container tab");
+ let blankSameContainerTab = await loadNewForegroundContainerTab(
+ "about:blank",
+ 1
+ );
+ await openAddressBarAndCheckResults(window, TOPSITES_COUNT, new Set([1]));
+ await BrowserTestUtils.removeTab(blankSameContainerTab);
+
+ info("Check Top sites in a different container tab");
+ let blankDiffContainerTab = await loadNewForegroundContainerTab(
+ "about:blank",
+ 2
+ );
+ await openAddressBarAndCheckResults(
+ window,
+ TOPSITES_COUNT,
+ UrlbarPrefs.get("switchTabs.searchAllContainers") ? new Set([1]) : new Set()
+ );
+ await BrowserTestUtils.removeTab(blankDiffContainerTab);
+
+ await BrowserTestUtils.removeTab(containerTab);
+}
+
+async function openAddressBarAndCheckResults(
+ win,
+ expectedResultCount,
+ expectedTabSwitchUserContextIds
+) {
+ info("Open zero-prefix results.");
+ await UrlbarTestUtils.promisePopupOpen(win, () => {
+ win.gURLBar.blur();
+ if (win.gURLBar.getAttribute("pageproxystate") == "invalid") {
+ win.gURLBar.handleRevert();
+ }
+ EventUtils.synthesizeMouseAtCenter(win.gURLBar.inputField, {}, win);
+ });
+ await UrlbarTestUtils.promiseSearchComplete(win);
+ let resultCount = UrlbarTestUtils.getResultCount(win);
+ Assert.equal(expectedResultCount, resultCount, "Check number of results.");
+
+ for (let i = 0; i < resultCount; ++i) {
+ let result = await UrlbarTestUtils.getDetailsOfResultAt(win, i);
+
+ if (result.url != "https://example.com/") {
+ // We don't care about other top sites.
+ continue;
+ }
+
+ if (!expectedTabSwitchUserContextIds.size) {
+ // No more tab switch results expected.
+ Assert.notEqual(
+ UrlbarUtils.RESULT_TYPE.TAB_SWITCH,
+ result.type,
+ "Should not be a tab switch result."
+ );
+ continue;
+ }
+
+ // Must be a tab switch result with an expected userContextId.
+ Assert.equal(
+ UrlbarUtils.RESULT_TYPE.TAB_SWITCH,
+ result.type,
+ "Should be a tab switch result."
+ );
+ let hasUserContextId = expectedTabSwitchUserContextIds.delete(
+ result.userContextId
+ );
+ Assert.ok(
+ hasUserContextId,
+ `UserContextId ${result.userContextId} tab switch was expected in
+ ${expectedTabSwitchUserContextIds}`
+ );
+ }
+}
+
+async function addAsFirstTopSite(url) {
+ info("Add some visits to a URL.");
+ await PlacesTestUtils.addVisits(Array(10).fill(url));
+ info("Add top sites and await for our page to be the first");
+ await updateTopSites(sites => {
+ return sites && sites.length == TOPSITES_COUNT && sites[0].url == url;
+ });
+}
+
+async function loadNewForegroundContainerTab(url, userContextId, win = window) {
+ let tab = BrowserTestUtils.addTab(win.gBrowser, url, {
+ userContextId,
+ });
+ await Promise.all([
+ BrowserTestUtils.browserLoaded(tab.linkedBrowser),
+ BrowserTestUtils.switchTab(win.gBrowser, tab),
+ ]);
+ return tab;
+}