fune/toolkit/components/extensions/test/browser/browser_ext_management_themes.js
Kris Maglione 59e59c3803 Bug 1461062: Refactor bootstrap lifecycle management to be somewhat maintainable. r=aswan
MozReview-Commit-ID: 8OQhjqxzKYP

--HG--
extra : rebase_source : 6e900c95edc6f9b18f88eaaf83fea1176cb928ba
2018-05-11 20:40:31 -07:00

154 lines
5.5 KiB
JavaScript

/* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */
/* vim: set sts=2 sw=2 et tw=80: */
"use strict";
const {LightweightThemeManager} = ChromeUtils.import("resource://gre/modules/LightweightThemeManager.jsm", {});
const {PromiseTestUtils} = ChromeUtils.import("resource://testing-common/PromiseTestUtils.jsm", null);
PromiseTestUtils.whitelistRejectionsGlobally(/Message manager disconnected/);
add_task(async function setup() {
await SpecialPowers.pushPrefEnv({
set: [["extensions.webextensions.themes.enabled", true]],
});
});
add_task(async function test_management_themes() {
const TEST_ID = "test_management_themes@tests.mozilla.com";
let theme = ExtensionTestUtils.loadExtension({
manifest: {
"name": "Simple theme test",
"version": "1.0",
"description": "test theme",
"theme": {
"images": {
"headerURL": "image1.png",
},
},
},
files: {
"image1.png": BACKGROUND,
},
useAddonManager: "temporary",
});
async function background(TEST_ID) {
browser.management.onInstalled.addListener(info => {
if (info.name == TEST_ID) {
return;
}
browser.test.log(`${info.name} was installed`);
browser.test.assertEq(info.type, "theme", "addon is theme");
browser.test.sendMessage("onInstalled", info.name);
});
browser.management.onDisabled.addListener(info => {
browser.test.log(`${info.name} was disabled`);
browser.test.assertEq(info.type, "theme", "addon is theme");
browser.test.sendMessage("onDisabled", info.name);
});
browser.management.onEnabled.addListener(info => {
browser.test.log(`${info.name} was enabled`);
browser.test.assertEq(info.type, "theme", "addon is theme");
browser.test.sendMessage("onEnabled", info.name);
});
browser.management.onUninstalled.addListener(info => {
browser.test.log(`${info.name} was uninstalled`);
browser.test.assertEq(info.type, "theme", "addon is theme");
browser.test.sendMessage("onUninstalled", info.name);
});
async function getAddon(type) {
let addons = await browser.management.getAll();
let themes = addons.filter(addon => addon.type === "theme");
// We get the 3 built-in themes plus the lwt and our addon.
browser.test.assertEq(5, themes.length, "got expected addons");
// We should also get our test extension.
let testExtension = addons.find(addon => { return addon.id === TEST_ID; });
browser.test.assertTrue(!!testExtension,
`The extension with id ${TEST_ID} was returned by getAll.`);
let found;
for (let addon of themes) {
browser.test.assertEq(addon.type, "theme", "addon is theme");
if (type == "theme" && addon.id.includes("temporary-addon")) {
found = addon;
} else if (type == "enabled" && addon.enabled) {
found = addon;
}
}
return found;
}
browser.test.onMessage.addListener(async (msg) => {
let theme = await getAddon("theme");
browser.test.assertEq(theme.description, "test theme", "description is correct");
browser.test.assertTrue(theme.enabled, "theme is enabled");
await browser.management.setEnabled(theme.id, false);
theme = await getAddon("theme");
browser.test.assertTrue(!theme.enabled, "theme is disabled");
let addon = getAddon("enabled");
browser.test.assertTrue(addon, "another theme was enabled");
await browser.management.setEnabled(theme.id, true);
theme = await getAddon("theme");
addon = await getAddon("enabled");
browser.test.assertEq(theme.id, addon.id, "theme is enabled");
browser.test.sendMessage("done");
});
}
let extension = ExtensionTestUtils.loadExtension({
manifest: {
applications: {
gecko: {
id: TEST_ID,
},
},
name: TEST_ID,
permissions: ["management"],
},
background: `(${background})("${TEST_ID}")`,
useAddonManager: "temporary",
});
await extension.startup();
// Test LWT
LightweightThemeManager.currentTheme = {
id: "lwt@personas.mozilla.org",
version: "1",
name: "Bling",
description: "SO MUCH BLING!",
author: "Pixel Pusher",
homepageURL: "http://mochi.test:8888/data/index.html",
headerURL: "http://mochi.test:8888/data/header.png",
previewURL: "http://mochi.test:8888/data/preview.png",
iconURL: "http://mochi.test:8888/data/icon.png",
textcolor: Math.random().toString(),
accentcolor: Math.random().toString(),
};
is(await extension.awaitMessage("onInstalled"), "Bling", "LWT installed");
is(await extension.awaitMessage("onEnabled"), "Bling", "LWT enabled");
await theme.startup();
is(await extension.awaitMessage("onInstalled"), "Simple theme test", "webextension theme installed");
is(await extension.awaitMessage("onDisabled"), "Bling", "LWT disabled");
// no enabled event when installed.
extension.sendMessage("test");
is(await extension.awaitMessage("onEnabled"), "Default", "default enabled");
is(await extension.awaitMessage("onDisabled"), "Simple theme test", "addon disabled");
is(await extension.awaitMessage("onEnabled"), "Simple theme test", "addon enabled");
is(await extension.awaitMessage("onDisabled"), "Default", "default disabled");
await extension.awaitMessage("done");
await Promise.all([
theme.unload(),
extension.awaitMessage("onUninstalled"),
]);
is(await extension.awaitMessage("onEnabled"), "Default", "default enabled");
await extension.unload();
});