Depends on D179819 Differential Revision: https://phabricator.services.mozilla.com/D179820
110 lines
3.4 KiB
JavaScript
110 lines
3.4 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
|
const { sinon } = ChromeUtils.importESModule(
|
|
"resource://testing-common/Sinon.sys.mjs"
|
|
);
|
|
|
|
const { AddonTestUtils } = ChromeUtils.importESModule(
|
|
"resource://testing-common/AddonTestUtils.sys.mjs"
|
|
);
|
|
|
|
ChromeUtils.defineESModuleGetters(this, {
|
|
BuiltInThemes: "resource:///modules/BuiltInThemes.sys.mjs",
|
|
});
|
|
|
|
XPCOMUtils.defineLazyModuleGetters(this, {
|
|
AddonManager: "resource://gre/modules/AddonManager.jsm",
|
|
});
|
|
|
|
const kLushSoftID = "lush-soft-colorway@mozilla.org";
|
|
const kLushBoldID = "lush-bold-colorway@mozilla.org";
|
|
const kRetainedThemesPref = "browser.theme.retainedExpiredThemes";
|
|
|
|
add_task(async function retainExpiredActiveTheme() {
|
|
let today = new Date().toISOString().split("T")[0];
|
|
let tomorrow = new Date();
|
|
tomorrow.setDate(tomorrow.getDate() + 1);
|
|
tomorrow = tomorrow.toISOString().split("T")[0];
|
|
let config = new Map([
|
|
[
|
|
kLushSoftID,
|
|
{
|
|
version: "1.1",
|
|
path: "resource://builtin-themes/colorways/2021lush/soft/",
|
|
expiry: tomorrow,
|
|
},
|
|
],
|
|
[
|
|
kLushBoldID,
|
|
{
|
|
version: "1.1",
|
|
path: "resource://builtin-themes/colorways/2021lush/bold/",
|
|
expiry: tomorrow,
|
|
},
|
|
],
|
|
]);
|
|
const oldBuiltInThemeMap = BuiltInThemes.builtInThemeMap;
|
|
BuiltInThemes.builtInThemeMap = config;
|
|
Assert.equal(
|
|
Services.prefs.getStringPref(kRetainedThemesPref, "[]"),
|
|
"[]",
|
|
"There are no retained themes."
|
|
);
|
|
|
|
AddonTestUtils.initMochitest(this);
|
|
registerCleanupFunction(async function () {
|
|
Services.prefs.clearUserPref(kRetainedThemesPref);
|
|
BuiltInThemes.builtInThemeMap = oldBuiltInThemeMap;
|
|
await BuiltInThemes.ensureBuiltInThemes();
|
|
});
|
|
|
|
// Install our test themes and enable Lush (Soft).
|
|
await BuiltInThemes.ensureBuiltInThemes();
|
|
let lushSoft = await AddonManager.getAddonByID(kLushSoftID);
|
|
let lushBold = await AddonManager.getAddonByID(kLushBoldID);
|
|
await lushSoft.enable();
|
|
Assert.ok(
|
|
lushSoft && lushSoft.isActive,
|
|
"Sanity check: Lush Soft is the active theme."
|
|
);
|
|
Assert.ok(
|
|
lushBold && !lushBold.isActive,
|
|
"Lush Bold is installed but inactive."
|
|
);
|
|
|
|
// Now, change the expiry dates on the themes to simulate the expiry date
|
|
// passing.
|
|
BuiltInThemes.builtInThemeMap.forEach(
|
|
themeInfo => (themeInfo.expiry = today)
|
|
);
|
|
// Normally, ensureBuiltInThemes uninstalls expired themes. We
|
|
// expect it will not uninstall Lush (Soft) since it is the active theme.
|
|
await BuiltInThemes.ensureBuiltInThemes();
|
|
lushSoft = await AddonManager.getAddonByID(kLushSoftID);
|
|
lushBold = await AddonManager.getAddonByID(kLushBoldID);
|
|
Assert.ok(
|
|
lushSoft && lushSoft.isActive,
|
|
"Lush Soft is still the active theme."
|
|
);
|
|
Assert.ok(!lushBold, "Lush Bold has been uninstalled.");
|
|
Assert.equal(
|
|
Services.prefs.getStringPref(kRetainedThemesPref, "[]"),
|
|
JSON.stringify([kLushSoftID]),
|
|
"Lush Soft is set as a retained theme."
|
|
);
|
|
|
|
// Disable Lush (Soft) and re-run ensureBuiltInThemes. We're checking that
|
|
// Lush Soft is not uninstalled despite being inactive and expired, since it
|
|
// is a retained theme.
|
|
await lushSoft.disable();
|
|
await BuiltInThemes.ensureBuiltInThemes();
|
|
lushSoft = await AddonManager.getAddonByID(kLushSoftID);
|
|
Assert.ok(
|
|
lushSoft && !lushSoft.isActive,
|
|
"Lush Soft is installed but inactive."
|
|
);
|
|
|
|
await lushSoft.uninstall();
|
|
});
|