summaryrefslogtreecommitdiffstats
path: root/browser/components/extensions/test/browser/browser_toolbar_prefers_color_scheme.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/components/extensions/test/browser/browser_toolbar_prefers_color_scheme.js')
-rw-r--r--browser/components/extensions/test/browser/browser_toolbar_prefers_color_scheme.js266
1 files changed, 266 insertions, 0 deletions
diff --git a/browser/components/extensions/test/browser/browser_toolbar_prefers_color_scheme.js b/browser/components/extensions/test/browser/browser_toolbar_prefers_color_scheme.js
new file mode 100644
index 0000000000..ae7f488f0a
--- /dev/null
+++ b/browser/components/extensions/test/browser/browser_toolbar_prefers_color_scheme.js
@@ -0,0 +1,266 @@
+/* Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/ */
+
+"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() {
+ // Bug 1743010
+ 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();
+});