From 6bf0a5cb5034a7e684dcc3500e841785237ce2dd Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 19:32:43 +0200 Subject: Adding upstream version 1:115.7.0. Signed-off-by: Daniel Baumann --- .../test/browser/browser_ext_currentWindow.js | 177 +++++++++++++++++++++ 1 file changed, 177 insertions(+) create mode 100644 browser/components/extensions/test/browser/browser_ext_currentWindow.js (limited to 'browser/components/extensions/test/browser/browser_ext_currentWindow.js') diff --git a/browser/components/extensions/test/browser/browser_ext_currentWindow.js b/browser/components/extensions/test/browser/browser_ext_currentWindow.js new file mode 100644 index 0000000000..1ea7fc6eae --- /dev/null +++ b/browser/components/extensions/test/browser/browser_ext_currentWindow.js @@ -0,0 +1,177 @@ +/* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* vim: set sts=2 sw=2 et tw=80: */ +"use strict"; + +function genericChecker() { + let kind = "background"; + let path = window.location.pathname; + if (path.includes("/popup.html")) { + kind = "popup"; + } else if (path.includes("/page.html")) { + kind = "page"; + } + + browser.test.onMessage.addListener((msg, ...args) => { + if (msg == kind + "-check-current1") { + browser.tabs.query( + { + currentWindow: true, + }, + function (tabs) { + browser.test.sendMessage("result", tabs[0].windowId); + } + ); + } else if (msg == kind + "-check-current2") { + browser.tabs.query( + { + windowId: browser.windows.WINDOW_ID_CURRENT, + }, + function (tabs) { + browser.test.sendMessage("result", tabs[0].windowId); + } + ); + } else if (msg == kind + "-check-current3") { + browser.windows.getCurrent(function (window) { + browser.test.sendMessage("result", window.id); + }); + } else if (msg == kind + "-open-page") { + browser.tabs.create({ + windowId: args[0], + url: browser.runtime.getURL("page.html"), + }); + } else if (msg == kind + "-close-page") { + browser.tabs.query( + { + windowId: args[0], + }, + tabs => { + let tab = tabs.find(tab => tab.url.includes("/page.html")); + browser.tabs.remove(tab.id, () => { + browser.test.sendMessage("closed"); + }); + } + ); + } + }); + browser.test.sendMessage(kind + "-ready"); +} + +add_task(async function () { + let win1 = await BrowserTestUtils.openNewBrowserWindow(); + let win2 = await BrowserTestUtils.openNewBrowserWindow(); + + await focusWindow(win2); + + BrowserTestUtils.loadURIString(win1.gBrowser.selectedBrowser, "about:robots"); + await BrowserTestUtils.browserLoaded(win1.gBrowser.selectedBrowser); + + BrowserTestUtils.loadURIString(win2.gBrowser.selectedBrowser, "about:config"); + await BrowserTestUtils.browserLoaded(win2.gBrowser.selectedBrowser); + + let extension = ExtensionTestUtils.loadExtension({ + manifest: { + permissions: ["tabs"], + + browser_action: { + default_popup: "popup.html", + default_area: "navbar", + }, + }, + + files: { + "page.html": ` + + + + + `, + + "page.js": genericChecker, + + "popup.html": ` + + + + + `, + + "popup.js": genericChecker, + }, + + background: genericChecker, + }); + + await Promise.all([ + extension.startup(), + extension.awaitMessage("background-ready"), + ]); + + const { + Management: { + global: { windowTracker }, + }, + } = ChromeUtils.importESModule("resource://gre/modules/Extension.sys.mjs"); + + let winId1 = windowTracker.getId(win1); + let winId2 = windowTracker.getId(win2); + + async function checkWindow(kind, winId, name) { + extension.sendMessage(kind + "-check-current1"); + is( + await extension.awaitMessage("result"), + winId, + `${name} is on top (check 1) [${kind}]` + ); + extension.sendMessage(kind + "-check-current2"); + is( + await extension.awaitMessage("result"), + winId, + `${name} is on top (check 2) [${kind}]` + ); + extension.sendMessage(kind + "-check-current3"); + is( + await extension.awaitMessage("result"), + winId, + `${name} is on top (check 3) [${kind}]` + ); + } + + async function triggerPopup(win, callback) { + await clickBrowserAction(extension, win); + await awaitExtensionPanel(extension, win); + + await extension.awaitMessage("popup-ready"); + + await callback(); + + closeBrowserAction(extension, win); + } + + await focusWindow(win1); + await checkWindow("background", winId1, "win1"); + await triggerPopup(win1, async function () { + await checkWindow("popup", winId1, "win1"); + }); + + await focusWindow(win2); + await checkWindow("background", winId2, "win2"); + await triggerPopup(win2, async function () { + await checkWindow("popup", winId2, "win2"); + }); + + async function triggerPage(winId, name) { + extension.sendMessage("background-open-page", winId); + await extension.awaitMessage("page-ready"); + await checkWindow("page", winId, name); + extension.sendMessage("background-close-page", winId); + await extension.awaitMessage("closed"); + } + + await triggerPage(winId1, "win1"); + await triggerPage(winId2, "win2"); + + await extension.unload(); + + await BrowserTestUtils.closeWindow(win1); + await BrowserTestUtils.closeWindow(win2); +}); -- cgit v1.2.3