summaryrefslogtreecommitdiffstats
path: root/browser/components/urlbar/tests/browser/browser_quickactions_tab_refocus.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/components/urlbar/tests/browser/browser_quickactions_tab_refocus.js')
-rw-r--r--browser/components/urlbar/tests/browser/browser_quickactions_tab_refocus.js194
1 files changed, 194 insertions, 0 deletions
diff --git a/browser/components/urlbar/tests/browser/browser_quickactions_tab_refocus.js b/browser/components/urlbar/tests/browser/browser_quickactions_tab_refocus.js
new file mode 100644
index 0000000000..f969528806
--- /dev/null
+++ b/browser/components/urlbar/tests/browser/browser_quickactions_tab_refocus.js
@@ -0,0 +1,194 @@
+/* Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/ */
+
+/**
+ * Tests for QuickActions that re-focus tab..
+ */
+
+"use strict";
+
+requestLongerTimeout(3);
+
+add_setup(async function setup() {
+ await SpecialPowers.pushPrefEnv({
+ set: [
+ ["browser.urlbar.quickactions.enabled", true],
+ ["browser.urlbar.suggest.quickactions", true],
+ ["browser.urlbar.shortcuts.quickactions", true],
+ ],
+ });
+});
+
+let isSelected = async selector =>
+ SpecialPowers.spawn(gBrowser.selectedBrowser, [selector], arg => {
+ return ContentTaskUtils.waitForCondition(() =>
+ content.document.querySelector(arg)?.hasAttribute("selected")
+ );
+ });
+
+add_task(async function test_about_pages() {
+ const testData = [
+ {
+ firstInput: "downloads",
+ uri: "about:downloads",
+ },
+ {
+ firstInput: "logins",
+ uri: "about:logins",
+ },
+ {
+ firstInput: "settings",
+ uri: "about:preferences",
+ },
+ {
+ firstInput: "add-ons",
+ uri: "about:addons",
+ component: "button[name=discover]",
+ },
+ {
+ firstInput: "extensions",
+ uri: "about:addons",
+ component: "button[name=extension]",
+ },
+ {
+ firstInput: "plugins",
+ uri: "about:addons",
+ component: "button[name=plugin]",
+ },
+ {
+ firstInput: "themes",
+ uri: "about:addons",
+ component: "button[name=theme]",
+ },
+ {
+ firstLoad: "about:preferences#home",
+ secondInput: "settings",
+ uri: "about:preferences#home",
+ },
+ ];
+
+ for (const {
+ firstInput,
+ firstLoad,
+ secondInput,
+ uri,
+ component,
+ } of testData) {
+ info("Setup initial state");
+ let firstTab = await BrowserTestUtils.openNewForegroundTab(gBrowser);
+ let onLoad = BrowserTestUtils.browserLoaded(
+ gBrowser.selectedBrowser,
+ false,
+ uri
+ );
+ if (firstLoad) {
+ info("Load initial URI");
+ BrowserTestUtils.loadURIString(gBrowser.selectedBrowser, uri);
+ } else {
+ info("Open about page by quick action");
+ await UrlbarTestUtils.promiseAutocompleteResultPopup({
+ window,
+ value: firstInput,
+ });
+ EventUtils.synthesizeKey("KEY_ArrowDown", {}, window);
+ EventUtils.synthesizeKey("KEY_Enter", {}, window);
+ }
+ await onLoad;
+
+ if (component) {
+ info("Check whether the component is in the page");
+ Assert.ok(await isSelected(component), "There is expected component");
+ }
+
+ info("Do the second quick action in second tab");
+ let secondTab = await BrowserTestUtils.openNewForegroundTab(gBrowser);
+ await UrlbarTestUtils.promiseAutocompleteResultPopup({
+ window,
+ value: secondInput || firstInput,
+ });
+ EventUtils.synthesizeKey("KEY_ArrowDown", {}, window);
+ EventUtils.synthesizeKey("KEY_Enter", {}, window);
+ Assert.equal(
+ gBrowser.selectedTab,
+ firstTab,
+ "Switched to the tab that is opening the about page"
+ );
+ Assert.equal(
+ gBrowser.selectedBrowser.currentURI.spec,
+ uri,
+ "URI is not changed"
+ );
+ Assert.equal(gBrowser.tabs.length, 3, "Not opened a new tab");
+
+ if (component) {
+ info("Check whether the component is still in the page");
+ Assert.ok(await isSelected(component), "There is expected component");
+ }
+
+ BrowserTestUtils.removeTab(secondTab);
+ BrowserTestUtils.removeTab(firstTab);
+ }
+});
+
+add_task(async function test_about_addons_pages() {
+ let testData = [
+ {
+ cmd: "add-ons",
+ testFun: async () => isSelected("button[name=discover]"),
+ },
+ {
+ cmd: "plugins",
+ testFun: async () => isSelected("button[name=plugin]"),
+ },
+ {
+ cmd: "extensions",
+ testFun: async () => isSelected("button[name=extension]"),
+ },
+ {
+ cmd: "themes",
+ testFun: async () => isSelected("button[name=theme]"),
+ },
+ ];
+
+ info("Pick all actions related about:addons");
+ let originalTab = gBrowser.selectedTab;
+ for (const { cmd, testFun } of testData) {
+ await BrowserTestUtils.openNewForegroundTab(gBrowser);
+ await UrlbarTestUtils.promiseAutocompleteResultPopup({
+ window,
+ value: cmd,
+ });
+ EventUtils.synthesizeKey("KEY_ArrowDown", {}, window);
+ EventUtils.synthesizeKey("KEY_Enter", {}, window);
+ await BrowserTestUtils.browserLoaded(gBrowser.selectedBrowser);
+ Assert.ok(await testFun(), "The page content is correct");
+ }
+ Assert.equal(
+ gBrowser.tabs.length,
+ testData.length + 1,
+ "Tab length is correct"
+ );
+
+ info("Pick all again");
+ for (const { cmd, testFun } of testData) {
+ await UrlbarTestUtils.promiseAutocompleteResultPopup({
+ window,
+ value: cmd,
+ });
+ EventUtils.synthesizeKey("KEY_ArrowDown", {}, window);
+ EventUtils.synthesizeKey("KEY_Enter", {}, window);
+ await BrowserTestUtils.waitForCondition(() => testFun());
+ Assert.ok(true, "The tab correspondent action is selected");
+ }
+ Assert.equal(
+ gBrowser.tabs.length,
+ testData.length + 1,
+ "Tab length is not changed"
+ );
+
+ for (const tab of gBrowser.tabs) {
+ if (tab !== originalTab) {
+ BrowserTestUtils.removeTab(tab);
+ }
+ }
+});