summaryrefslogtreecommitdiffstats
path: root/browser/components/urlbar/tests/browser/browser_middleClick.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/components/urlbar/tests/browser/browser_middleClick.js')
-rw-r--r--browser/components/urlbar/tests/browser/browser_middleClick.js255
1 files changed, 255 insertions, 0 deletions
diff --git a/browser/components/urlbar/tests/browser/browser_middleClick.js b/browser/components/urlbar/tests/browser/browser_middleClick.js
new file mode 100644
index 0000000000..1a5088f827
--- /dev/null
+++ b/browser/components/urlbar/tests/browser/browser_middleClick.js
@@ -0,0 +1,255 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+/**
+ * Test for middle click behavior.
+ */
+
+add_task(async function test_setup() {
+ CustomizableUI.addWidgetToArea("home-button", "nav-bar");
+ await SpecialPowers.pushPrefEnv({
+ set: [["browser.tabs.searchclipboardfor.middleclick", false]],
+ });
+
+ registerCleanupFunction(() => {
+ Services.prefs.clearUserPref("middlemouse.paste");
+ Services.prefs.clearUserPref("middlemouse.openNewWindow");
+ Services.prefs.clearUserPref("browser.tabs.opentabfor.middleclick");
+ Services.prefs.clearUserPref("browser.startup.homepage");
+ Services.prefs.clearUserPref("browser.tabs.loadBookmarksInBackground");
+ SpecialPowers.clipboardCopyString("");
+
+ CustomizableUI.removeWidgetFromArea("home-button");
+ });
+});
+
+add_task(async function test_middleClickOnTab() {
+ await testMiddleClickOnTab(false);
+ await testMiddleClickOnTab(true);
+});
+
+add_task(async function test_middleClickToOpenNewTab() {
+ await testMiddleClickToOpenNewTab(false, "#tabs-newtab-button");
+ await testMiddleClickToOpenNewTab(true, "#tabs-newtab-button");
+ await testMiddleClickToOpenNewTab(false, "#TabsToolbar");
+ await testMiddleClickToOpenNewTab(true, "#TabsToolbar");
+});
+
+add_task(async function test_middleClickOnURLBar() {
+ await testMiddleClickOnURLBar(false);
+ await testMiddleClickOnURLBar(true);
+});
+
+add_task(async function test_middleClickOnHomeButton() {
+ const TEST_DATA = [
+ {
+ isMiddleMousePastePrefOn: false,
+ isLoadInBackground: false,
+ startPagePref: "about:home",
+ expectedURLBarFocus: true,
+ expectedURLBarValue: "",
+ },
+ {
+ isMiddleMousePastePrefOn: false,
+ isLoadInBackground: false,
+ startPagePref: "about:blank",
+ expectedURLBarFocus: true,
+ expectedURLBarValue: "",
+ },
+ {
+ isMiddleMousePastePrefOn: false,
+ isLoadInBackground: false,
+ startPagePref: "https://example.com",
+ expectedURLBarFocus: false,
+ expectedURLBarValue: "https://example.com",
+ },
+ {
+ isMiddleMousePastePrefOn: true,
+ isLoadInBackground: false,
+ startPagePref: "about:home",
+ expectedURLBarFocus: true,
+ expectedURLBarValue: "",
+ },
+ {
+ isMiddleMousePastePrefOn: true,
+ isLoadInBackground: false,
+ startPagePref: "https://example.com",
+ expectedURLBarFocus: false,
+ expectedURLBarValue: "https://example.com",
+ },
+ {
+ isMiddleMousePastePrefOn: false,
+ isLoadInBackground: true,
+ startPagePref: "about:home",
+ expectedURLBarFocus: true,
+ expectedURLBarValue: "",
+ },
+ {
+ isMiddleMousePastePrefOn: false,
+ isLoadInBackground: true,
+ startPagePref: "https://example.com",
+ expectedURLBarFocus: true,
+ expectedURLBarValue: "",
+ },
+ {
+ isMiddleMousePastePrefOn: true,
+ isLoadInBackground: true,
+ startPagePref: "about:home",
+ expectedURLBarFocus: true,
+ expectedURLBarValue: "",
+ },
+ {
+ isMiddleMousePastePrefOn: true,
+ isLoadInBackground: true,
+ startPagePref: "https://example.com",
+ expectedURLBarFocus: true,
+ expectedURLBarValue: "",
+ },
+ ];
+
+ for (const testData of TEST_DATA) {
+ await testMiddleClickOnHomeButton(testData);
+ }
+});
+
+add_task(async function test_middleClickOnHomeButtonWithNewWindow() {
+ await testMiddleClickOnHomeButtonWithNewWindow(false);
+ await testMiddleClickOnHomeButtonWithNewWindow(true);
+});
+
+async function testMiddleClickOnTab(isMiddleMousePastePrefOn) {
+ info(`Set middlemouse.paste [${isMiddleMousePastePrefOn}]`);
+ Services.prefs.setBoolPref("middlemouse.paste", isMiddleMousePastePrefOn);
+
+ info("Set initial value");
+ SpecialPowers.clipboardCopyString("test\nsample");
+ gURLBar.value = "";
+ gURLBar.focus();
+
+ info("Open two tabs");
+ const tab1 = await BrowserTestUtils.openNewForegroundTab(gBrowser);
+ const tab2 = await BrowserTestUtils.openNewForegroundTab(gBrowser);
+
+ info("Middle click on tab2 to remove it");
+ EventUtils.synthesizeMouseAtCenter(tab2, { button: 1 });
+
+ info("Wait until the tab1 is selected");
+ await TestUtils.waitForCondition(() => gBrowser.selectedTab === tab1);
+
+ Assert.equal(gURLBar.value, "", "URLBar has no pasted value");
+
+ BrowserTestUtils.removeTab(tab1);
+}
+
+async function testMiddleClickToOpenNewTab(isMiddleMousePastePrefOn, selector) {
+ info(`Set middlemouse.paste [${isMiddleMousePastePrefOn}]`);
+ Services.prefs.setBoolPref("middlemouse.paste", isMiddleMousePastePrefOn);
+
+ info("Set initial value");
+ SpecialPowers.clipboardCopyString("test\nsample");
+ gURLBar.value = "";
+ gURLBar.focus();
+
+ info(`Click on ${selector}`);
+ const originalTab = gBrowser.selectedTab;
+ const element = document.querySelector(selector);
+ EventUtils.synthesizeMouseAtCenter(element, { button: 1 });
+
+ info("Wait until the new tab is opened");
+ await TestUtils.waitForCondition(() => gBrowser.selectedTab !== originalTab);
+
+ Assert.equal(gURLBar.value, "", "URLBar has no pasted value");
+
+ BrowserTestUtils.removeTab(gBrowser.selectedTab);
+}
+
+async function testMiddleClickOnURLBar(isMiddleMousePastePrefOn) {
+ info(`Set middlemouse.paste [${isMiddleMousePastePrefOn}]`);
+ Services.prefs.setBoolPref("middlemouse.paste", isMiddleMousePastePrefOn);
+
+ info("Set initial value");
+ SpecialPowers.clipboardCopyString("test\nsample");
+ gURLBar.value = "";
+ gURLBar.focus();
+
+ info("Middle click on the urlbar");
+ EventUtils.synthesizeMouseAtCenter(gURLBar.inputField, { button: 1 });
+
+ if (isMiddleMousePastePrefOn) {
+ Assert.equal(gURLBar.value, "test sample", "URLBar has pasted value");
+ } else {
+ Assert.equal(gURLBar.value, "", "URLBar has no pasted value");
+ }
+}
+
+async function testMiddleClickOnHomeButton({
+ isMiddleMousePastePrefOn,
+ isLoadInBackground,
+ startPagePref,
+ expectedURLBarFocus,
+ expectedURLBarValue,
+}) {
+ info(`middlemouse.paste [${isMiddleMousePastePrefOn}]`);
+ info(`browser.startup.homepage [${startPagePref}]`);
+ info(`browser.tabs.loadBookmarksInBackground [${isLoadInBackground}]`);
+
+ info("Set initial value");
+ Services.prefs.setCharPref("browser.startup.homepage", startPagePref);
+ Services.prefs.setBoolPref(
+ "browser.tabs.loadBookmarksInBackground",
+ isLoadInBackground
+ );
+ Services.prefs.setBoolPref("middlemouse.paste", isMiddleMousePastePrefOn);
+ SpecialPowers.clipboardCopyString("test\nsample");
+ gURLBar.value = "";
+ gURLBar.focus();
+
+ info("Middle click on the home button");
+ const currentTab = gBrowser.selectedTab;
+ const homeButton = document.getElementById("home-button");
+ EventUtils.synthesizeMouseAtCenter(homeButton, { button: 1 });
+
+ if (!isLoadInBackground) {
+ info("Wait until the a new tab is selected");
+ await TestUtils.waitForCondition(() => gBrowser.selectedTab !== currentTab);
+ }
+
+ info("Wait until the focus moves");
+ await TestUtils.waitForCondition(
+ () =>
+ (document.activeElement === gURLBar.inputField) === expectedURLBarFocus
+ );
+
+ Assert.ok(true, "The focus is correct");
+ Assert.equal(gURLBar.value, expectedURLBarValue, "URLBar value is correct");
+
+ BrowserTestUtils.removeTab(gBrowser.selectedTab);
+}
+
+async function testMiddleClickOnHomeButtonWithNewWindow(
+ isMiddleMousePastePrefOn
+) {
+ info(`Set middlemouse.paste [${isMiddleMousePastePrefOn}]`);
+ Services.prefs.setBoolPref("middlemouse.paste", isMiddleMousePastePrefOn);
+
+ info("Set prefs to open in a new window");
+ Services.prefs.setBoolPref("middlemouse.openNewWindow", true);
+ Services.prefs.setBoolPref("browser.tabs.opentabfor.middleclick", false);
+
+ info("Set initial value");
+ SpecialPowers.clipboardCopyString("test\nsample");
+ gURLBar.value = "";
+ gURLBar.focus();
+
+ info("Middle click on the home button");
+ const homeButton = document.getElementById("home-button");
+ const onNewWindowOpened = BrowserTestUtils.waitForNewWindow();
+ EventUtils.synthesizeMouseAtCenter(homeButton, { button: 1 });
+
+ const newWindow = await onNewWindowOpened;
+ Assert.equal(newWindow.gURLBar.value, "", "URLBar value is correct");
+
+ await BrowserTestUtils.closeWindow(newWindow);
+}