diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 00:47:55 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 00:47:55 +0000 |
commit | 26a029d407be480d791972afb5975cf62c9360a6 (patch) | |
tree | f435a8308119effd964b339f76abb83a57c29483 /browser/base/content/test/tabs/browser_window_open_modifiers.js | |
parent | Initial commit. (diff) | |
download | firefox-26a029d407be480d791972afb5975cf62c9360a6.tar.xz firefox-26a029d407be480d791972afb5975cf62c9360a6.zip |
Adding upstream version 124.0.1.upstream/124.0.1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to '')
-rw-r--r-- | browser/base/content/test/tabs/browser_window_open_modifiers.js | 175 |
1 files changed, 175 insertions, 0 deletions
diff --git a/browser/base/content/test/tabs/browser_window_open_modifiers.js b/browser/base/content/test/tabs/browser_window_open_modifiers.js new file mode 100644 index 0000000000..b4376d6824 --- /dev/null +++ b/browser/base/content/test/tabs/browser_window_open_modifiers.js @@ -0,0 +1,175 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +"use strict"; + +// Opening many windows take long time on some configuration. +requestLongerTimeout(4); + +add_task(async function () { + await BrowserTestUtils.withNewTab( + "https://example.com/browser/browser/base/content/test/tabs/file_window_open.html", + async function (browser) { + const metaKey = AppConstants.platform == "macosx" ? "metaKey" : "ctrlKey"; + const normalEvent = {}; + const shiftEvent = { shiftKey: true }; + const metaEvent = { [metaKey]: true }; + const metaShiftEvent = { [metaKey]: true, shiftKey: true }; + + const tests = [ + // type, id, options, result + ["mouse", "#instant", normalEvent, "tab"], + ["mouse", "#instant", shiftEvent, "window"], + ["mouse", "#instant", metaEvent, "tab-bg"], + ["mouse", "#instant", metaShiftEvent, "tab"], + + ["mouse", "#instant-popup", normalEvent, "popup"], + ["mouse", "#instant-popup", shiftEvent, "window"], + ["mouse", "#instant-popup", metaEvent, "tab-bg"], + ["mouse", "#instant-popup", metaShiftEvent, "tab"], + + ["mouse", "#delayed", normalEvent, "tab"], + ["mouse", "#delayed", shiftEvent, "window"], + ["mouse", "#delayed", metaEvent, "tab-bg"], + ["mouse", "#delayed", metaShiftEvent, "tab"], + + ["mouse", "#delayed-popup", normalEvent, "popup"], + ["mouse", "#delayed-popup", shiftEvent, "window"], + ["mouse", "#delayed-popup", metaEvent, "tab-bg"], + ["mouse", "#delayed-popup", metaShiftEvent, "tab"], + + // NOTE: meta+keyboard doesn't activate. + + ["VK_SPACE", "#instant", normalEvent, "tab"], + ["VK_SPACE", "#instant", shiftEvent, "window"], + + ["VK_SPACE", "#instant-popup", normalEvent, "popup"], + ["VK_SPACE", "#instant-popup", shiftEvent, "window"], + + ["VK_SPACE", "#delayed", normalEvent, "tab"], + ["VK_SPACE", "#delayed", shiftEvent, "window"], + + ["VK_SPACE", "#delayed-popup", normalEvent, "popup"], + ["VK_SPACE", "#delayed-popup", shiftEvent, "window"], + + ["KEY_Enter", "#link-instant", normalEvent, "tab"], + ["KEY_Enter", "#link-instant", shiftEvent, "window"], + + ["KEY_Enter", "#link-instant-popup", normalEvent, "popup"], + ["KEY_Enter", "#link-instant-popup", shiftEvent, "window"], + + ["KEY_Enter", "#link-delayed", normalEvent, "tab"], + ["KEY_Enter", "#link-delayed", shiftEvent, "window"], + + ["KEY_Enter", "#link-delayed-popup", normalEvent, "popup"], + ["KEY_Enter", "#link-delayed-popup", shiftEvent, "window"], + + // Trigger user-defined shortcut key, where modifiers shouldn't affect. + + ["x", "#instant", normalEvent, "tab"], + ["x", "#instant", shiftEvent, "tab"], + ["x", "#instant", metaEvent, "tab"], + ["x", "#instant", metaShiftEvent, "tab"], + + ["y", "#instant", normalEvent, "popup"], + ["y", "#instant", shiftEvent, "popup"], + ["y", "#instant", metaEvent, "popup"], + ["y", "#instant", metaShiftEvent, "popup"], + ]; + for (const [type, id, event, result] of tests) { + const eventStr = JSON.stringify(event); + + let openPromise; + if (result == "tab" || result == "tab-bg") { + openPromise = BrowserTestUtils.waitForNewTab( + gBrowser, + "about:blank", + true + ); + } else { + openPromise = BrowserTestUtils.waitForNewWindow({ + url: "about:blank", + }); + } + + if (type == "mouse") { + BrowserTestUtils.synthesizeMouseAtCenter(id, { ...event }, browser); + } else { + // Make sure the keyboard activates a simple button on the page. + await ContentTask.spawn(browser, id, elementId => { + content.document.querySelector("#focus-result").value = ""; + content.document.querySelector("#focus-check").focus(); + }); + BrowserTestUtils.synthesizeKey("VK_SPACE", {}, browser); + await ContentTask.spawn(browser, {}, async () => { + await ContentTaskUtils.waitForCondition( + () => + content.document.querySelector("#focus-result").value === "ok" + ); + }); + + // Once confirmed the keyboard event works, send the actual event + // that calls window.open. + await ContentTask.spawn(browser, id, elementId => { + content.document.querySelector(elementId).focus(); + }); + BrowserTestUtils.synthesizeKey(type, { ...event }, browser); + } + + const openedThing = await openPromise; + + if (result == "tab" || result == "tab-bg") { + const newTab = openedThing; + + if (result == "tab") { + Assert.equal( + gBrowser.selectedTab, + newTab, + `${id} with ${type} and ${eventStr} opened a foreground tab` + ); + } else { + Assert.notEqual( + gBrowser.selectedTab, + newTab, + `${id} with ${type} and ${eventStr} opened a background tab` + ); + } + + gBrowser.removeTab(newTab); + } else { + const newWindow = openedThing; + + const tabs = newWindow.document.getElementById("TabsToolbar"); + if (result == "window") { + ok( + !tabs.collapsed, + `${id} with ${type} and ${eventStr} opened a regular window` + ); + } else { + ok( + tabs.collapsed, + `${id} with ${type} and ${eventStr} opened a popup window` + ); + } + + const closedPopupPromise = BrowserTestUtils.windowClosed(newWindow); + newWindow.close(); + await closedPopupPromise; + + // Make sure the focus comes back to this window before proceeding + // to the next test. + if (Services.focus.focusedWindow != window) { + const focusBack = BrowserTestUtils.waitForEvent( + window, + "focus", + true + ); + window.focus(); + await focusBack; + } + } + } + } + ); +}); |