77 lines
2 KiB
JavaScript
77 lines
2 KiB
JavaScript
/* 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/. */
|
|
|
|
const lazy = {};
|
|
|
|
ChromeUtils.defineESModuleGetters(lazy, {
|
|
AddonManager: "resource://gre/modules/AddonManager.sys.mjs",
|
|
BuiltInThemeConfig: "resource:///modules/BuiltInThemeConfig.sys.mjs",
|
|
});
|
|
|
|
const kActiveThemePref = "extensions.activeThemeID";
|
|
|
|
class _BuiltInThemes {
|
|
/**
|
|
* The list of themes to be installed. This is exposed on the class so tests
|
|
* can set custom config files.
|
|
*/
|
|
builtInThemeMap = lazy.BuiltInThemeConfig;
|
|
|
|
/**
|
|
* @param {string} id An addon's id string.
|
|
* @returns {string}
|
|
* If `id` refers to a built-in theme, returns a path pointing to the
|
|
* theme's preview image. Null otherwise.
|
|
*/
|
|
previewForBuiltInThemeId(id) {
|
|
let theme = this.builtInThemeMap.get(id);
|
|
if (theme) {
|
|
return `${theme.path}preview.svg`;
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
/**
|
|
* If the active theme is built-in, this function calls
|
|
* AddonManager.maybeInstallBuiltinAddon for that theme.
|
|
*/
|
|
maybeInstallActiveBuiltInTheme() {
|
|
const activeThemeID = Services.prefs.getStringPref(
|
|
kActiveThemePref,
|
|
"default-theme@mozilla.org"
|
|
);
|
|
let activeBuiltInTheme = this.builtInThemeMap.get(activeThemeID);
|
|
|
|
if (activeBuiltInTheme) {
|
|
lazy.AddonManager.maybeInstallBuiltinAddon(
|
|
activeThemeID,
|
|
activeBuiltInTheme.version,
|
|
activeBuiltInTheme.path
|
|
);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Ensures that all built-in themes are installed and expired themes are
|
|
* uninstalled.
|
|
*/
|
|
async ensureBuiltInThemes() {
|
|
let installPromises = [];
|
|
|
|
for (let [id, themeInfo] of this.builtInThemeMap.entries()) {
|
|
installPromises.push(
|
|
lazy.AddonManager.maybeInstallBuiltinAddon(
|
|
id,
|
|
themeInfo.version,
|
|
themeInfo.path
|
|
)
|
|
);
|
|
}
|
|
|
|
await Promise.all(installPromises);
|
|
}
|
|
}
|
|
|
|
export var BuiltInThemes = new _BuiltInThemes();
|