summaryrefslogtreecommitdiffstats
path: root/browser/components/extensions/test/browser/browser_ext_management.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/components/extensions/test/browser/browser_ext_management.js')
-rw-r--r--browser/components/extensions/test/browser/browser_ext_management.js151
1 files changed, 151 insertions, 0 deletions
diff --git a/browser/components/extensions/test/browser/browser_ext_management.js b/browser/components/extensions/test/browser/browser_ext_management.js
new file mode 100644
index 0000000000..94d518b70c
--- /dev/null
+++ b/browser/components/extensions/test/browser/browser_ext_management.js
@@ -0,0 +1,151 @@
+"use strict";
+
+const { AddonTestUtils } = ChromeUtils.importESModule(
+ "resource://testing-common/AddonTestUtils.sys.mjs"
+);
+
+AddonTestUtils.initMochitest(this);
+
+const testServer = AddonTestUtils.createHttpServer();
+
+add_task(async function test_management_install() {
+ await SpecialPowers.pushPrefEnv({
+ set: [["xpinstall.signatures.required", false]],
+ });
+
+ registerCleanupFunction(async () => {
+ await SpecialPowers.popPrefEnv();
+ });
+
+ let extension = ExtensionTestUtils.loadExtension({
+ manifest: {
+ browser_action: {
+ browser_style: false,
+ default_area: "navbar",
+ },
+ permissions: ["management"],
+ },
+ background() {
+ let addons;
+ browser.test.onMessage.addListener((msg, init) => {
+ addons = init;
+ browser.test.sendMessage("ready");
+ });
+ browser.browserAction.onClicked.addListener(async () => {
+ try {
+ let { url, hash } = addons.shift();
+ browser.test.log(
+ `Installing XPI from ${url} with hash ${hash || "missing"}`
+ );
+ let { id } = await browser.management.install({ url, hash });
+ let { type } = await browser.management.get(id);
+ browser.test.sendMessage("installed", { id, type });
+ } catch (e) {
+ browser.test.log(`management.install() throws ${e}`);
+ browser.test.sendMessage("failed", e.message);
+ }
+ });
+ },
+ });
+
+ const themeXPIFile = AddonTestUtils.createTempWebExtensionFile({
+ manifest: {
+ manifest_version: 2,
+ name: "Tigers Matter",
+ version: "1.0",
+ browser_specific_settings: {
+ gecko: {
+ id: "tiger@persona.beard",
+ },
+ },
+ theme: {
+ colors: {
+ frame: "orange",
+ },
+ },
+ },
+ });
+
+ let themeXPIFileHash = await IOUtils.computeHexDigest(
+ themeXPIFile.path,
+ "sha256"
+ );
+
+ const otherXPIFile = AddonTestUtils.createTempWebExtensionFile({
+ manifest: {
+ manifest_version: 2,
+ name: "Tigers Don't Matter",
+ version: "1.0",
+ browser_specific_settings: {
+ gecko: {
+ id: "other@web.extension",
+ },
+ },
+ },
+ });
+
+ testServer.registerFile("/install_theme-1.0-fx.xpi", themeXPIFile);
+ testServer.registerFile("/install_other-1.0-fx.xpi", otherXPIFile);
+
+ const { primaryHost, primaryPort } = testServer.identity;
+ const baseURL = `http://${primaryHost}:${primaryPort}`;
+
+ let addons = [
+ {
+ url: `${baseURL}/install_theme-1.0-fx.xpi`,
+ hash: `sha256:${themeXPIFileHash}`,
+ },
+ {
+ url: `${baseURL}/install_other-1.0-fx.xpi`,
+ },
+ ];
+
+ await extension.startup();
+ extension.sendMessage("addons", addons);
+ await extension.awaitMessage("ready");
+
+ // Test installing a static WE theme.
+ clickBrowserAction(extension);
+
+ let { id, type } = await extension.awaitMessage("installed");
+ is(id, "tiger@persona.beard", "Static web extension theme installed");
+ is(type, "theme", "Extension type is correct");
+
+ if (backgroundColorSetOnRoot()) {
+ let rootCS = window.getComputedStyle(document.documentElement);
+ is(
+ rootCS.backgroundColor,
+ "rgb(255, 165, 0)",
+ "Background is the new black"
+ );
+ } else {
+ let toolboxCS = window.getComputedStyle(
+ document.documentElement.querySelector("#navigator-toolbox")
+ );
+ is(
+ toolboxCS.backgroundColor,
+ "rgb(255, 165, 0)",
+ "Background is the new black"
+ );
+ }
+
+ let addon = await AddonManager.getAddonByID("tiger@persona.beard");
+
+ Assert.deepEqual(
+ addon.installTelemetryInfo,
+ {
+ source: "extension",
+ method: "management-webext-api",
+ },
+ "Got the expected telemetry info on the installed webext theme"
+ );
+
+ await addon.uninstall();
+
+ // Test installing a standard WE.
+ clickBrowserAction(extension);
+ let error = await extension.awaitMessage("failed");
+ is(error, "Incompatible addon", "Standard web extension rejected");
+
+ await extension.unload();
+});