summaryrefslogtreecommitdiffstats
path: root/toolkit/components/extensions/test/browser/browser_ext_themes_getCurrent_differentExt.js
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/components/extensions/test/browser/browser_ext_themes_getCurrent_differentExt.js')
-rw-r--r--toolkit/components/extensions/test/browser/browser_ext_themes_getCurrent_differentExt.js151
1 files changed, 151 insertions, 0 deletions
diff --git a/toolkit/components/extensions/test/browser/browser_ext_themes_getCurrent_differentExt.js b/toolkit/components/extensions/test/browser/browser_ext_themes_getCurrent_differentExt.js
new file mode 100644
index 0000000000..587c5d4efe
--- /dev/null
+++ b/toolkit/components/extensions/test/browser/browser_ext_themes_getCurrent_differentExt.js
@@ -0,0 +1,151 @@
+"use strict";
+
+// This test checks whether browser.theme.getCurrent() works correctly when theme
+// does not originate from extension querying the theme.
+const THEME = {
+ manifest: {
+ theme: {
+ images: {
+ theme_frame: "image1.png",
+ },
+ colors: {
+ frame: ACCENT_COLOR,
+ tab_background_text: TEXT_COLOR,
+ },
+ },
+ },
+ files: {
+ "image1.png": BACKGROUND,
+ },
+};
+
+add_task(async function test_getcurrent() {
+ const theme = ExtensionTestUtils.loadExtension(THEME);
+ const extension = ExtensionTestUtils.loadExtension({
+ background() {
+ browser.theme.onUpdated.addListener(() => {
+ browser.theme.getCurrent().then(theme => {
+ browser.test.sendMessage("theme-updated", theme);
+ if (!theme?.images) {
+ return;
+ }
+
+ // Try to access the theme_frame image
+ fetch(theme.images.theme_frame)
+ .then(() => {
+ browser.test.sendMessage("theme-image", { success: true });
+ })
+ .catch(e => {
+ browser.test.sendMessage("theme-image", {
+ success: false,
+ error: e.message,
+ });
+ });
+ });
+ });
+ },
+ });
+
+ await extension.startup();
+
+ info("Testing getCurrent after static theme startup");
+ let updatedPromise = extension.awaitMessage("theme-updated");
+ let imageLoaded = extension.awaitMessage("theme-image");
+ await theme.startup();
+ let receivedTheme = await updatedPromise;
+ Assert.ok(
+ receivedTheme.images.theme_frame.includes("image1.png"),
+ "getCurrent returns correct theme_frame image"
+ );
+ Assert.equal(
+ receivedTheme.colors.frame,
+ ACCENT_COLOR,
+ "getCurrent returns correct frame color"
+ );
+ Assert.equal(
+ receivedTheme.colors.tab_background_text,
+ TEXT_COLOR,
+ "getCurrent returns correct tab_background_text color"
+ );
+ Assert.deepEqual(await imageLoaded, { success: true }, "theme image loaded");
+
+ info("Testing getCurrent after static theme unload");
+ updatedPromise = extension.awaitMessage("theme-updated");
+ await theme.unload();
+ receivedTheme = await updatedPromise;
+ Assert.equal(
+ JSON.stringify({ colors: null, images: null, properties: null }),
+ JSON.stringify(receivedTheme),
+ "getCurrent returns empty theme"
+ );
+
+ await extension.unload();
+});
+
+add_task(async function test_getcurrent_privateBrowsing() {
+ const theme = ExtensionTestUtils.loadExtension(THEME);
+
+ const extension = ExtensionTestUtils.loadExtension({
+ incognitoOverride: "spanning",
+ manifest: {
+ sidebar_action: {
+ default_panel: "sidebar.html",
+ },
+ },
+ // We don't want the sidebar to automatically open on extension startup.
+ startupReason: "APP_STARTUP",
+ files: {
+ "sidebar.html": `<!DOCTYPE html>
+ <html>
+ <body>
+ Test Extension Sidebar
+ <script src="sidebar.js"></script>
+ </body>
+ </html>
+ `,
+ "sidebar.js": function () {
+ browser.theme.getCurrent().then(theme => {
+ if (!theme?.images) {
+ browser.test.fail(
+ `Missing expected images from theme.getCurrent result`
+ );
+ return;
+ }
+
+ // Try to access the theme_frame image
+ fetch(theme.images.theme_frame)
+ .then(() => {
+ browser.test.sendMessage("theme-image", { success: true });
+ })
+ .catch(e => {
+ browser.test.sendMessage("theme-image", {
+ success: false,
+ error: e.message,
+ });
+ });
+ });
+ },
+ },
+ });
+
+ await extension.startup();
+ await theme.startup();
+
+ const privateWin = await BrowserTestUtils.openNewBrowserWindow({
+ private: true,
+ });
+
+ const { ExtensionCommon } = ChromeUtils.importESModule(
+ "resource://gre/modules/ExtensionCommon.sys.mjs"
+ );
+ const { makeWidgetId } = ExtensionCommon;
+ privateWin.SidebarUI.show(`${makeWidgetId(extension.id)}-sidebar-action`);
+
+ let imageLoaded = extension.awaitMessage("theme-image");
+ Assert.deepEqual(await imageLoaded, { success: true }, "theme image loaded");
+
+ await extension.unload();
+ await theme.unload();
+
+ await BrowserTestUtils.closeWindow(privateWin);
+});