Bug 1330337 - Add basic theme framework hidden behind pref r?mikedeboer
MozReview-Commit-ID: 1kje3tc7y9O
--- a/browser/app/profile/firefox.js
+++ b/browser/app/profile/firefox.js
@@ -60,16 +60,19 @@ pref("extensions.hotfix.certs.2.sha1Fing
// Check AUS for system add-on updates.
pref("extensions.systemAddon.update.url", "https://aus5.mozilla.org/update/3/SystemAddons/%VERSION%/%BUILD_ID%/%BUILD_TARGET%/%LOCALE%/%CHANNEL%/%OS_VERSION%/%DISTRIBUTION%/%DISTRIBUTION_VERSION%/update.xml");
// Disable add-ons that are not installed by the user in all scopes by default.
// See the SCOPE constants in AddonManager.jsm for values to use here.
pref("extensions.autoDisableScopes", 15);
+// Whether or not webextension themes are supported.
+pref("extensions.webextensions.themes.enabled", false);
+
// Add-on content security policies.
pref("extensions.webextensions.base-content-security-policy", "script-src 'self' https://* moz-extension: blob: filesystem: 'unsafe-eval' 'unsafe-inline'; object-src 'self' https://* moz-extension: blob: filesystem:;");
pref("extensions.webextensions.default-content-security-policy", "script-src 'self'; object-src 'self';");
// Require signed add-ons by default
pref("xpinstall.signatures.required", true);
pref("xpinstall.signatures.devInfoURL", "https://wiki.mozilla.org/Addons/Extension_Signing");
new file mode 100644
--- /dev/null
+++ b/browser/components/extensions/ext-theme.js
@@ -0,0 +1,19 @@
+"use strict";
+
+XPCOMUtils.defineLazyModuleGetter(this, "Preferences",
+ "resource://gre/modules/Preferences.jsm");
+
+/* eslint-disable mozilla/balanced-listeners */
+extensions.on("manifest_theme", (type, directive, extension, manifest) => {
+ let enabled = Preferences.get("extensions.webextensions.themes.enabled");
+ extension.emit("test-message", "themes-enabled", enabled);
+
+ if (enabled) {
+ // Apply theme only if themes are enabled.
+ }
+});
+
+extensions.on("shutdown", (type, extension) => {
+ // Remove theme only if it has been applied.
+});
+/* eslint-enable mozilla/balanced-listeners */
--- a/browser/components/extensions/extensions-browser.manifest
+++ b/browser/components/extensions/extensions-browser.manifest
@@ -5,16 +5,17 @@ category webextension-scripts browsingDa
category webextension-scripts commands chrome://browser/content/ext-commands.js
category webextension-scripts contextMenus chrome://browser/content/ext-contextMenus.js
category webextension-scripts desktop-runtime chrome://browser/content/ext-desktop-runtime.js
category webextension-scripts history chrome://browser/content/ext-history.js
category webextension-scripts omnibox chrome://browser/content/ext-omnibox.js
category webextension-scripts pageAction chrome://browser/content/ext-pageAction.js
category webextension-scripts sessions chrome://browser/content/ext-sessions.js
category webextension-scripts tabs chrome://browser/content/ext-tabs.js
+category webextension-scripts theme chrome://browser/content/ext-theme.js
category webextension-scripts utils chrome://browser/content/ext-utils.js
category webextension-scripts windows chrome://browser/content/ext-windows.js
# scripts that must run in the same process as addon code.
category webextension-scripts-addon contextMenus chrome://browser/content/ext-c-contextMenus.js
category webextension-scripts-addon omnibox chrome://browser/content/ext-c-omnibox.js
category webextension-scripts-addon tabs chrome://browser/content/ext-c-tabs.js
@@ -25,9 +26,10 @@ category webextension-schemas browsing_d
category webextension-schemas commands chrome://browser/content/schemas/commands.json
category webextension-schemas context_menus chrome://browser/content/schemas/context_menus.json
category webextension-schemas context_menus_internal chrome://browser/content/schemas/context_menus_internal.json
category webextension-schemas history chrome://browser/content/schemas/history.json
category webextension-schemas omnibox chrome://browser/content/schemas/omnibox.json
category webextension-schemas page_action chrome://browser/content/schemas/page_action.json
category webextension-schemas sessions chrome://browser/content/schemas/sessions.json
category webextension-schemas tabs chrome://browser/content/schemas/tabs.json
+category webextension-schemas theme chrome://browser/content/schemas/theme.json
category webextension-schemas windows chrome://browser/content/schemas/windows.json
--- a/browser/components/extensions/jar.mn
+++ b/browser/components/extensions/jar.mn
@@ -18,13 +18,14 @@ browser.jar:
content/browser/ext-commands.js
content/browser/ext-contextMenus.js
content/browser/ext-desktop-runtime.js
content/browser/ext-history.js
content/browser/ext-omnibox.js
content/browser/ext-pageAction.js
content/browser/ext-sessions.js
content/browser/ext-tabs.js
+ content/browser/ext-theme.js
content/browser/ext-utils.js
content/browser/ext-windows.js
content/browser/ext-c-contextMenus.js
content/browser/ext-c-omnibox.js
content/browser/ext-c-tabs.js
--- a/browser/components/extensions/schemas/jar.mn
+++ b/browser/components/extensions/schemas/jar.mn
@@ -9,9 +9,10 @@ browser.jar:
content/browser/schemas/commands.json
content/browser/schemas/context_menus.json
content/browser/schemas/context_menus_internal.json
content/browser/schemas/history.json
content/browser/schemas/omnibox.json
content/browser/schemas/page_action.json
content/browser/schemas/sessions.json
content/browser/schemas/tabs.json
+ content/browser/schemas/theme.json
content/browser/schemas/windows.json
new file mode 100644
--- /dev/null
+++ b/browser/components/extensions/schemas/theme.json
@@ -0,0 +1,24 @@
+// This Source Code Form is subject to the terms of the Mozilla Public
+// License, v. 2.0. If a copy of the MPL was not distributed with this
+// file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+[
+ {
+ "namespace": "manifest",
+ "types": [
+ {
+ "id": "ThemeType",
+ "type": "object"
+ },
+ {
+ "$extend": "WebExtensionManifest",
+ "properties": {
+ "theme": {
+ "optional": true,
+ "$ref": "ThemeType"
+ }
+ }
+ }
+ ]
+ }
+]
--- a/browser/components/extensions/test/browser/browser-common.ini
+++ b/browser/components/extensions/test/browser/browser-common.ini
@@ -90,16 +90,17 @@ support-files =
[browser_ext_tabs_query.js]
[browser_ext_tabs_reload.js]
[browser_ext_tabs_reload_bypass_cache.js]
[browser_ext_tabs_sendMessage.js]
[browser_ext_tabs_cookieStoreId.js]
[browser_ext_tabs_update.js]
[browser_ext_tabs_zoom.js]
[browser_ext_tabs_update_url.js]
+[browser_ext_themes.js]
[browser_ext_topwindowid.js]
[browser_ext_webRequest.js]
[browser_ext_webNavigation_frameId0.js]
[browser_ext_webNavigation_getFrames.js]
[browser_ext_webNavigation_urlbar_transitions.js]
[browser_ext_windows.js]
[browser_ext_windows_create.js]
tags = fullscreen
new file mode 100644
--- /dev/null
+++ b/browser/components/extensions/test/browser/browser_ext_themes.js
@@ -0,0 +1,23 @@
+"use strict";
+
+add_task(function* test_themes_disabled_by_default() {
+ let manifest = {"theme": {}};
+ let extension = ExtensionTestUtils.loadExtension({manifest});
+
+ yield extension.startup();
+ let enabled = yield extension.awaitMessage("themes-enabled");
+ is(enabled, false, "Themes should be disabled");
+ yield extension.unload();
+});
+
+add_task(function* test_themes_enabled_with_preference() {
+ Services.prefs.setBoolPref("extensions.webextensions.themes.enabled", true);
+
+ let manifest = {"theme": {}};
+ let extension = ExtensionTestUtils.loadExtension({manifest});
+
+ yield extension.startup();
+ let enabled = yield extension.awaitMessage("themes-enabled");
+ is(enabled, true, "Themes should be enabled");
+ yield extension.unload();
+});