From e66ace8456a1b3164ab11c6e70ecd9dce0573d9b Mon Sep 17 00:00:00 2001 From: Manvel Saroyan Date: Sun, 9 Feb 2020 04:10:49 +0000 Subject: [PATCH] Bug 1432083 - Fixed browser.permissions.request doesn't work in WebExtension popup r=robwu Differential Revision: https://phabricator.services.mozilla.com/D61411 --HG-- extra : moz-landing-system : lando --- .../extensions/test/browser/browser.ini | 1 + .../browser_ext_popup_requestPermission.js | 43 +++++++++++++++++++ browser/modules/ExtensionsUI.jsm | 3 ++ 3 files changed, 47 insertions(+) create mode 100644 browser/components/extensions/test/browser/browser_ext_popup_requestPermission.js diff --git a/browser/components/extensions/test/browser/browser.ini b/browser/components/extensions/test/browser/browser.ini index 760fd60c9b8d..76a8a846b568 100644 --- a/browser/components/extensions/test/browser/browser.ini +++ b/browser/components/extensions/test/browser/browser.ini @@ -175,6 +175,7 @@ skip-if = (verify && debug && (os == 'mac')) [browser_ext_popup_corners.js] [browser_ext_popup_focus.js] disabled = bug 1438663 +[browser_ext_popup_requestPermission.js] [browser_ext_popup_select.js] skip-if = debug || os != 'win' # FIXME: re-enable on debug build (bug 1442822) [browser_ext_popup_sendMessage.js] diff --git a/browser/components/extensions/test/browser/browser_ext_popup_requestPermission.js b/browser/components/extensions/test/browser/browser_ext_popup_requestPermission.js new file mode 100644 index 000000000000..1cd20a932814 --- /dev/null +++ b/browser/components/extensions/test/browser/browser_ext_popup_requestPermission.js @@ -0,0 +1,43 @@ +"use strict"; + +add_task(async function test_popup_requestPermission_resolve() { + let extension = ExtensionTestUtils.loadExtension({ + manifest: { + browser_action: { + default_popup: "popup.html", + }, + optional_permissions: [""], + }, + + files: { + "popup.html": ``, + "popup.js": async () => { + const success = await new Promise(resolve => { + browser.test.withHandlingUserInput(() => { + resolve( + browser.permissions.request({ + origins: [""], + }) + ); + }); + }); + browser.test.assertTrue( + success, + "browser.permissions.request promise resolves" + ); + browser.test.sendMessage("done"); + }, + }, + }); + + const requestPrompt = promisePopupNotificationShown( + "addon-webext-permissions" + ).then(panel => { + panel.button.click(); + }); + await extension.startup(); + await clickBrowserAction(extension); + await requestPrompt; + await extension.awaitMessage("done"); + await extension.unload(); +}); diff --git a/browser/modules/ExtensionsUI.jsm b/browser/modules/ExtensionsUI.jsm index e0289cfadf2e..d6448a47241e 100644 --- a/browser/modules/ExtensionsUI.jsm +++ b/browser/modules/ExtensionsUI.jsm @@ -41,6 +41,9 @@ function getTabBrowser(browser) { while (browser.ownerGlobal.docShell.itemType !== Ci.nsIDocShell.typeChrome) { browser = browser.ownerGlobal.docShell.chromeEventHandler; } + if (browser.getAttribute("webextension-view-type") == "popup") { + browser = browser.ownerGlobal.gBrowser.selectedBrowser; + } return { browser, window: browser.ownerGlobal }; }