diff options
Diffstat (limited to 'comm/mail/base/test/webextensions/browser_extension_install_experiment.js')
-rw-r--r-- | comm/mail/base/test/webextensions/browser_extension_install_experiment.js | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/comm/mail/base/test/webextensions/browser_extension_install_experiment.js b/comm/mail/base/test/webextensions/browser_extension_install_experiment.js new file mode 100644 index 0000000000..d21d8bebce --- /dev/null +++ b/comm/mail/base/test/webextensions/browser_extension_install_experiment.js @@ -0,0 +1,82 @@ +"use strict"; + +async function installFile(filename) { + const ChromeRegistry = Cc["@mozilla.org/chrome/chrome-registry;1"].getService( + Ci.nsIChromeRegistry + ); + let chromeUrl = Services.io.newURI(gTestPath); + let fileUrl = ChromeRegistry.convertChromeURL(chromeUrl); + let file = fileUrl.QueryInterface(Ci.nsIFileURL).file; + file.leafName = filename; + + let MockFilePicker = SpecialPowers.MockFilePicker; + MockFilePicker.init(window); + MockFilePicker.setFiles([file]); + MockFilePicker.afterOpenCallback = MockFilePicker.cleanup; + + let { document } = await openAddonsMgr("addons://list/extension"); + + // Do the install... + await waitAboutAddonsViewLoaded(document); + let installButton = document.querySelector('[action="install-from-file"]'); + installButton.click(); +} + +async function testExperimentPrompt(filename) { + let installPromise = new Promise(resolve => { + let listener = { + onDownloadCancelled() { + AddonManager.removeInstallListener(listener); + resolve(false); + }, + + onDownloadFailed() { + AddonManager.removeInstallListener(listener); + resolve(false); + }, + + onInstallCancelled() { + AddonManager.removeInstallListener(listener); + resolve(false); + }, + + onInstallEnded() { + AddonManager.removeInstallListener(listener); + resolve(true); + }, + + onInstallFailed() { + AddonManager.removeInstallListener(listener); + resolve(false); + }, + }; + AddonManager.addInstallListener(listener); + }); + + await installFile(filename); + + let panel = await promisePopupNotificationShown("addon-webext-permissions"); + await checkNotification( + panel, + isDefaultIcon, + [["webext-perms-description-experiment"]], + false, + true + ); + panel.secondaryButton.click(); + + let result = await installPromise; + ok(!result, "Installation was cancelled"); + let addon = await AddonManager.getAddonByID( + "experiment_test@tests.mozilla.org" + ); + is(addon, null, "Extension is not installed"); + + let tabmail = document.getElementById("tabmail"); + tabmail.closeTab(tabmail.currentTabInfo); +} + +add_task(async () => { + await testExperimentPrompt("browser_webext_experiment.xpi"); + await testExperimentPrompt("browser_webext_experiment_permissions.xpi"); +}); |