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 --- .../browser/browser_ext_request_permissions.js | 121 +++++++++++++++++++++ 1 file changed, 121 insertions(+) create mode 100644 browser/components/extensions/test/browser/browser_ext_request_permissions.js (limited to 'browser/components/extensions/test/browser/browser_ext_request_permissions.js') diff --git a/browser/components/extensions/test/browser/browser_ext_request_permissions.js b/browser/components/extensions/test/browser/browser_ext_request_permissions.js new file mode 100644 index 0000000000..3ba58bccd5 --- /dev/null +++ b/browser/components/extensions/test/browser/browser_ext_request_permissions.js @@ -0,0 +1,121 @@ +"use strict"; + +// This test case verifies that `permissions.request()` resolves in the +// expected order. +add_task(async function test_permissions_prompt() { + let extension = ExtensionTestUtils.loadExtension({ + manifest: { + optional_permissions: ["history", "bookmarks"], + }, + background: async () => { + let hiddenTab = await browser.tabs.create({ + url: browser.runtime.getURL("hidden.html"), + active: false, + }); + + await browser.tabs.create({ + url: browser.runtime.getURL("active.html"), + active: true, + }); + + browser.test.onMessage.addListener(async msg => { + if (msg === "activate-hiddenTab") { + await browser.tabs.update(hiddenTab.id, { active: true }); + + browser.test.sendMessage("activate-hiddenTab-ok"); + } + }); + }, + files: { + "active.html": ``, + "active.js": async () => { + browser.test.onMessage.addListener(async msg => { + if (msg === "request-perms-activeTab") { + let granted = await new Promise(resolve => { + browser.test.withHandlingUserInput(() => { + resolve( + browser.permissions.request({ permissions: ["history"] }) + ); + }); + }); + browser.test.assertTrue(granted, "permission request succeeded"); + + browser.test.sendMessage("request-perms-activeTab-ok"); + } + }); + + browser.test.sendMessage("activeTab-ready"); + }, + "hidden.html": ``, + "hidden.js": async () => { + let resolved = false; + + browser.test.onMessage.addListener(async msg => { + if (msg === "request-perms-hiddenTab") { + let granted = await new Promise(resolve => { + browser.test.withHandlingUserInput(() => { + resolve( + browser.permissions.request({ permissions: ["bookmarks"] }) + ); + }); + }); + browser.test.assertTrue(granted, "permission request succeeded"); + + resolved = true; + + browser.test.sendMessage("request-perms-hiddenTab-ok"); + } else if (msg === "hiddenTab-read-state") { + browser.test.sendMessage("hiddenTab-state-value", resolved); + } + }); + + browser.test.sendMessage("hiddenTab-ready"); + }, + }, + }); + await extension.startup(); + + await extension.awaitMessage("activeTab-ready"); + await extension.awaitMessage("hiddenTab-ready"); + + // Call request() on a hidden window. + extension.sendMessage("request-perms-hiddenTab"); + + let requestPromptForActiveTab = promisePopupNotificationShown( + "addon-webext-permissions" + ).then(panel => { + panel.button.click(); + }); + + // Call request() in the current window. + extension.sendMessage("request-perms-activeTab"); + await requestPromptForActiveTab; + await extension.awaitMessage("request-perms-activeTab-ok"); + + // Check that initial request() is still pending. + extension.sendMessage("hiddenTab-read-state"); + ok( + !(await extension.awaitMessage("hiddenTab-state-value")), + "initial request is pending" + ); + + let requestPromptForHiddenTab = promisePopupNotificationShown( + "addon-webext-permissions" + ).then(panel => { + panel.button.click(); + }); + + extension.sendMessage("activate-hiddenTab"); + await extension.awaitMessage("activate-hiddenTab-ok"); + await requestPromptForHiddenTab; + await extension.awaitMessage("request-perms-hiddenTab-ok"); + + extension.sendMessage("hiddenTab-read-state"); + ok( + await extension.awaitMessage("hiddenTab-state-value"), + "initial request is resolved" + ); + + // The extension tabs are automatically closed upon unload. + await extension.unload(); +}); -- cgit v1.2.3