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_incognito_popup.js | 209 +++++++++++++++++++++ 1 file changed, 209 insertions(+) create mode 100644 browser/components/extensions/test/browser/browser_ext_incognito_popup.js (limited to 'browser/components/extensions/test/browser/browser_ext_incognito_popup.js') diff --git a/browser/components/extensions/test/browser/browser_ext_incognito_popup.js b/browser/components/extensions/test/browser/browser_ext_incognito_popup.js new file mode 100644 index 0000000000..cbe6e68cdc --- /dev/null +++ b/browser/components/extensions/test/browser/browser_ext_incognito_popup.js @@ -0,0 +1,209 @@ +/* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* vim: set sts=2 sw=2 et tw=80: */ +"use strict"; + +add_task(async function testIncognitoPopup() { + let extension = ExtensionTestUtils.loadExtension({ + incognitoOverride: "spanning", + manifest: { + permissions: ["tabs"], + browser_action: { + default_popup: "popup.html", + default_area: "navbar", + }, + page_action: { + default_popup: "popup.html", + }, + }, + + background: async function () { + let resolveMessage; + browser.runtime.onMessage.addListener(msg => { + if (resolveMessage && msg.message == "popup-details") { + resolveMessage(msg); + } + }); + + const awaitPopup = windowId => { + return new Promise(resolve => { + resolveMessage = resolve; + }).then(msg => { + browser.test.assertEq( + windowId, + msg.windowId, + "Got popup message from correct window" + ); + return msg; + }); + }; + + const testWindow = async window => { + const [tab] = await browser.tabs.query({ + active: true, + windowId: window.id, + }); + + await browser.pageAction.show(tab.id); + browser.test.sendMessage("click-pageAction"); + + let msg = await awaitPopup(window.id); + browser.test.assertEq( + window.incognito, + msg.incognito, + "Correct incognito status in pageAction popup" + ); + + browser.test.sendMessage("click-browserAction"); + + msg = await awaitPopup(window.id); + browser.test.assertEq( + window.incognito, + msg.incognito, + "Correct incognito status in browserAction popup" + ); + }; + + const testNonPrivateWindow = async () => { + const window = await browser.windows.getCurrent(); + await testWindow(window); + }; + + const testPrivateWindow = async () => { + const URL = "https://example.com/incognito"; + const windowReady = new Promise(resolve => { + browser.tabs.onUpdated.addListener(function listener( + tabId, + changed, + tab + ) { + if (changed.status == "complete" && tab.url == URL) { + browser.tabs.onUpdated.removeListener(listener); + resolve(); + } + }); + }); + + const window = await browser.windows.create({ + incognito: true, + url: URL, + }); + await windowReady; + + await testWindow(window); + }; + + browser.test.onMessage.addListener(async msg => { + switch (msg) { + case "test-nonprivate-window": + await testNonPrivateWindow(); + break; + case "test-private-window": + await testPrivateWindow(); + break; + default: + browser.test.fail( + `Unexpected test message: ${JSON.stringify(msg)}` + ); + } + + browser.test.sendMessage(`${msg}:done`); + }); + + browser.test.sendMessage("bgscript:ready"); + }, + + files: { + "popup.html": + '', + + "popup.js": async function () { + let win = await browser.windows.getCurrent(); + browser.runtime.sendMessage({ + message: "popup-details", + windowId: win.id, + incognito: browser.extension.inIncognitoContext, + }); + window.close(); + }, + }, + }); + + await extension.startup(); + await extension.awaitMessage("bgscript:ready"); + + info("Run test on non private window"); + extension.sendMessage("test-nonprivate-window"); + await extension.awaitMessage("click-pageAction"); + const win = Services.wm.getMostRecentWindow("navigator:browser"); + ok(!PrivateBrowsingUtils.isWindowPrivate(win), "Got a nonprivate window"); + await clickPageAction(extension, win); + + await extension.awaitMessage("click-browserAction"); + await clickBrowserAction(extension, win); + + await extension.awaitMessage("test-nonprivate-window:done"); + await closeBrowserAction(extension, win); + await closePageAction(extension, win); + + info("Run test on private window"); + extension.sendMessage("test-private-window"); + await extension.awaitMessage("click-pageAction"); + const privateWin = Services.wm.getMostRecentWindow("navigator:browser"); + ok(PrivateBrowsingUtils.isWindowPrivate(privateWin), "Got a private window"); + await clickPageAction(extension, privateWin); + + await extension.awaitMessage("click-browserAction"); + await clickBrowserAction(extension, privateWin); + + await extension.awaitMessage("test-private-window:done"); + // Wait for the private window chrome document to be flushed before + // closing the browserACtion, pageAction and the entire private window, + // to prevent intermittent failures. + await privateWin.promiseDocumentFlushed(() => {}); + + await closeBrowserAction(extension, privateWin); + await closePageAction(extension, privateWin); + await BrowserTestUtils.closeWindow(privateWin); + + await extension.unload(); +}); + +add_task(async function test_pageAction_incognito_not_allowed() { + const URL = "https://example.com/"; + let extension = ExtensionTestUtils.loadExtension({ + manifest: { + permissions: ["*://example.com/*"], + page_action: { + show_matches: [""], + pinned: true, + }, + }, + }); + + await extension.startup(); + let tab = await BrowserTestUtils.openNewForegroundTab( + gBrowser, + URL, + true, + true + ); + let privateWindow = await BrowserTestUtils.openNewBrowserWindow({ + private: true, + }); + await BrowserTestUtils.openNewForegroundTab( + privateWindow.gBrowser, + URL, + true, + true + ); + + let elem = await getPageActionButton(extension, window); + ok(elem, "pageAction button state correct in non-PB"); + + elem = await getPageActionButton(extension, privateWindow); + ok(!elem, "pageAction button state correct in private window"); + + BrowserTestUtils.removeTab(tab); + await BrowserTestUtils.closeWindow(privateWindow); + await extension.unload(); +}); -- cgit v1.2.3