Source code
Revision control
Copy as Markdown
Other Tools
Test Info:
"use strict";
const { AddonSettings } = ChromeUtils.importESModule(
"resource://gre/modules/addons/AddonSettings.sys.mjs"
);
// This test checks that theme warnings are properly emitted.
function waitForConsole(task, message) {
// eslint-disable-next-line no-async-promise-executor
return new Promise(async resolve => {
SimpleTest.monitorConsole(resolve, [
{
message: new RegExp(message),
},
]);
await task();
SimpleTest.endMonitorConsole();
});
}
add_setup(async function () {
SimpleTest.waitForExplicitFinish();
});
add_task(async function test_static_theme() {
for (const property of ["colors", "images", "properties"]) {
const extension = ExtensionTestUtils.loadExtension({
manifest: {
theme: {
[property]: {
such_property: "much_wow",
},
},
},
});
await waitForConsole(
extension.startup,
`Unrecognized theme property found: ${property}.such_property`
);
await extension.unload();
}
});
add_task(async function test_dynamic_theme() {
let extension = ExtensionTestUtils.loadExtension({
manifest: {
permissions: ["theme"],
},
background() {
browser.test.onMessage.addListener((msg, details) => {
if (msg === "update-theme") {
browser.theme.update(details).then(() => {
browser.test.sendMessage("theme-updated");
});
} else {
browser.theme.reset().then(() => {
browser.test.sendMessage("theme-reset");
});
}
});
},
});
await extension.startup();
for (const property of ["colors", "images", "properties"]) {
extension.sendMessage("update-theme", {
[property]: {
such_property: "much_wow",
},
});
await waitForConsole(
() => extension.awaitMessage("theme-updated"),
`Unrecognized theme property found: ${property}.such_property`
);
}
await extension.unload();
});
add_task(async function test_experiments_enabled() {
info("Testing that experiments are handled correctly on nightly and deved");
const extension = ExtensionTestUtils.loadExtension({
useAddonManager: "temporary",
manifest: {
theme: {
properties: {
such_property: "much_wow",
unknown_property: "very_unknown",
},
},
theme_experiment: {
properties: {
such_property: "--such-property",
},
},
},
});
if (!AddonSettings.EXPERIMENTS_ENABLED) {
await waitForConsole(
extension.startup,
"This extension is not allowed to run theme experiments"
);
} else {
await waitForConsole(
extension.startup,
"Unrecognized theme property found: properties.unknown_property"
);
}
await extension.unload();
});
add_task(async function test_experiments_disabled() {
await SpecialPowers.pushPrefEnv({
set: [["extensions.experiments.enabled", false]],
});
info(
"Testing that experiments are handled correctly when experiements pref is disabled"
);
const extension = ExtensionTestUtils.loadExtension({
manifest: {
theme: {
properties: {
such_property: "much_wow",
},
},
theme_experiment: {
properties: {
such_property: "--such-property",
},
},
},
});
await waitForConsole(
extension.startup,
"This extension is not allowed to run theme experiments"
);
await extension.unload();
await SpecialPowers.popPrefEnv();
});