Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Errors

/* Any copyright is dedicated to the Public Domain.
"use strict";
const kDark = 0;
const kLight = 1;
const kSystem = 2;
// The above tests should be enough to make sure that the prefs behave as
// expected, the following ones test various edge cases in a simpler way.
async function testTheme(description, toolbar, content, themeManifestData) {
info(description);
let extension = ExtensionTestUtils.loadExtension({
manifest: {
browser_specific_settings: {
gecko: {
id: "dummy@mochi.test",
},
},
...themeManifestData,
},
});
await Promise.all([
TestUtils.topicObserved("lightweight-theme-styling-update"),
extension.startup(),
]);
is(
SpecialPowers.getIntPref("browser.theme.toolbar-theme"),
toolbar,
"Toolbar theme expected"
);
is(
SpecialPowers.getIntPref("browser.theme.content-theme"),
content,
"Content theme expected"
);
await Promise.all([
TestUtils.topicObserved("lightweight-theme-styling-update"),
extension.unload(),
]);
}
add_task(async function test_dark_toolbar_dark_text() {
await testTheme(
"Dark toolbar color, dark toolbar background",
kDark,
kSystem,
{
theme: {
colors: {
toolbar: "rgb(20, 17, 26)",
toolbar_text: "rgb(251, 29, 78)",
},
},
}
);
// Dark frame text is ignored as it might be overlaid with an image,
// see bug 1741931.
await testTheme("Dark frame is ignored", kLight, kSystem, {
theme: {
colors: {
frame: "#000000",
tab_background_text: "#000000",
},
},
});
await testTheme(
"Semi-transparent toolbar backgrounds are ignored.",
kLight,
kSystem,
{
theme: {
colors: {
toolbar: "rgba(0, 0, 0, .2)",
toolbar_text: "#000",
},
},
}
);
});
add_task(async function dark_theme_presence_overrides_heuristics() {
const systemScheme = window.matchMedia("(-moz-system-dark-theme)").matches
? kDark
: kLight;
await testTheme(
"darkTheme presence overrides heuristics",
systemScheme,
kSystem,
{
theme: {
colors: {
toolbar: "#000",
toolbar_text: "#fff",
},
},
dark_theme: {
colors: {
toolbar: "#000",
toolbar_text: "#fff",
},
},
}
);
});
add_task(async function color_scheme_override() {
await testTheme(
"color_scheme overrides toolbar / toolbar_text pair (dark)",
kDark,
kDark,
{
theme: {
colors: {
toolbar: "#fff",
toolbar_text: "#000",
},
properties: {
color_scheme: "dark",
},
},
}
);
await testTheme(
"color_scheme overrides toolbar / toolbar_text pair (light)",
kLight,
kLight,
{
theme: {
colors: {
toolbar: "#000",
toolbar_text: "#fff",
},
properties: {
color_scheme: "light",
},
},
}
);
await testTheme(
"content_color_scheme overrides ntp_text / ntp_background (dark)",
kLight,
kDark,
{
theme: {
colors: {
toolbar: "#fff",
toolbar_text: "#000",
ntp_background: "#fff",
ntp_text: "#000",
},
properties: {
content_color_scheme: "dark",
},
},
}
);
await testTheme(
"content_color_scheme overrides ntp_text / ntp_background (light)",
kLight,
kLight,
{
theme: {
colors: {
toolbar: "#fff",
toolbar_text: "#000",
ntp_background: "#000",
ntp_text: "#fff",
},
properties: {
content_color_scheme: "light",
},
},
}
);
await testTheme(
"content_color_scheme overrides color_scheme only for content",
kLight,
kDark,
{
theme: {
colors: {
toolbar: "#fff",
toolbar_text: "#000",
ntp_background: "#fff",
ntp_text: "#000",
},
properties: {
content_color_scheme: "dark",
},
},
}
);
await testTheme(
"content_color_scheme sytem overrides color_scheme only for content",
kLight,
kSystem,
{
theme: {
colors: {
toolbar: "#fff",
toolbar_text: "#000",
ntp_background: "#fff",
ntp_text: "#000",
},
properties: {
content_color_scheme: "system",
},
},
}
);
await testTheme("color_scheme: sytem override", kSystem, kSystem, {
theme: {
colors: {
toolbar: "#fff",
toolbar_text: "#000",
ntp_background: "#fff",
ntp_text: "#000",
},
properties: {
color_scheme: "system",
content_color_scheme: "system",
},
},
});
});
add_task(async function unified_theme() {
await SpecialPowers.pushPrefEnv({
set: [["browser.theme.unified-color-scheme", true]],
});
await testTheme("Dark toolbar color", kDark, kDark, {
theme: {
colors: {
toolbar: "rgb(20, 17, 26)",
toolbar_text: "rgb(251, 29, 78)",
},
},
});
await testTheme("Light toolbar color", kLight, kLight, {
theme: {
colors: {
toolbar: "white",
toolbar_text: "black",
},
},
});
await SpecialPowers.popPrefEnv();
});