mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-08-30 11:18:39 +09:00
421 lines
12 KiB
JavaScript
421 lines
12 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
* http://creativecommons.org/publicdomain/zero/1.0/
|
|
*/
|
|
|
|
// This verifies that forcing undo for uninstall works for themes
|
|
Components.utils.import("resource://gre/modules/LightweightThemeManager.jsm");
|
|
|
|
const PREF_GENERAL_SKINS_SELECTEDSKIN = "general.skins.selectedSkin";
|
|
|
|
var defaultTheme = {
|
|
id: "default@tests.mozilla.org",
|
|
version: "1.0",
|
|
name: "Test 1",
|
|
internalName: "classic/1.0",
|
|
targetApplications: [{
|
|
id: "xpcshell@tests.mozilla.org",
|
|
minVersion: "1",
|
|
maxVersion: "1"
|
|
}]
|
|
};
|
|
|
|
var theme1 = {
|
|
id: "theme1@tests.mozilla.org",
|
|
version: "1.0",
|
|
name: "Test 1",
|
|
internalName: "theme1",
|
|
targetApplications: [{
|
|
id: "xpcshell@tests.mozilla.org",
|
|
minVersion: "1",
|
|
maxVersion: "1"
|
|
}]
|
|
};
|
|
|
|
const profileDir = gProfD.clone();
|
|
profileDir.append("extensions");
|
|
|
|
function dummyLWTheme(id) {
|
|
return {
|
|
id: id || Math.random().toString(),
|
|
name: Math.random().toString(),
|
|
headerURL: "http://lwttest.invalid/a.png",
|
|
footerURL: "http://lwttest.invalid/b.png",
|
|
textcolor: Math.random().toString(),
|
|
accentcolor: Math.random().toString()
|
|
};
|
|
}
|
|
|
|
// Sets up the profile by installing an add-on.
|
|
function run_test() {
|
|
createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "1", "1.9.2");
|
|
|
|
startupManager();
|
|
do_register_cleanup(promiseShutdownManager);
|
|
|
|
run_next_test();
|
|
}
|
|
|
|
add_task(function* checkDefault() {
|
|
writeInstallRDFForExtension(defaultTheme, profileDir);
|
|
yield promiseRestartManager();
|
|
|
|
let d = yield promiseAddonByID("default@tests.mozilla.org");
|
|
|
|
do_check_neq(d, null);
|
|
do_check_true(d.isActive);
|
|
do_check_false(d.userDisabled);
|
|
do_check_eq(Services.prefs.getCharPref(PREF_GENERAL_SKINS_SELECTEDSKIN), "classic/1.0");
|
|
});
|
|
|
|
// Tests that uninstalling an enabled theme offers the option to undo
|
|
add_task(function* uninstallEnabledOffersUndo() {
|
|
writeInstallRDFForExtension(theme1, profileDir);
|
|
|
|
yield promiseRestartManager();
|
|
|
|
let t1 = yield promiseAddonByID("theme1@tests.mozilla.org");
|
|
|
|
do_check_neq(t1, null);
|
|
do_check_true(t1.userDisabled);
|
|
|
|
t1.userDisabled = false;
|
|
|
|
yield promiseRestartManager();
|
|
|
|
let d = null;
|
|
[ t1, d ] = yield promiseAddonsByIDs(["theme1@tests.mozilla.org",
|
|
"default@tests.mozilla.org"]);
|
|
do_check_neq(d, null);
|
|
do_check_false(d.isActive);
|
|
do_check_true(d.userDisabled);
|
|
do_check_eq(d.pendingOperations, AddonManager.PENDING_NONE);
|
|
|
|
do_check_neq(t1, null);
|
|
do_check_true(t1.isActive);
|
|
do_check_false(t1.userDisabled);
|
|
do_check_eq(t1.pendingOperations, AddonManager.PENDING_NONE);
|
|
|
|
do_check_eq(Services.prefs.getCharPref(PREF_GENERAL_SKINS_SELECTEDSKIN), "theme1");
|
|
|
|
prepare_test({
|
|
"default@tests.mozilla.org": [
|
|
"onEnabling"
|
|
],
|
|
"theme1@tests.mozilla.org": [
|
|
"onUninstalling"
|
|
]
|
|
});
|
|
t1.uninstall(true);
|
|
ensure_test_completed();
|
|
|
|
do_check_neq(d, null);
|
|
do_check_false(d.isActive);
|
|
do_check_false(d.userDisabled);
|
|
do_check_eq(d.pendingOperations, AddonManager.PENDING_ENABLE);
|
|
|
|
do_check_true(t1.isActive);
|
|
do_check_false(t1.userDisabled);
|
|
do_check_true(hasFlag(t1.pendingOperations, AddonManager.PENDING_UNINSTALL));
|
|
|
|
do_check_eq(Services.prefs.getCharPref(PREF_GENERAL_SKINS_SELECTEDSKIN), "theme1");
|
|
|
|
yield promiseRestartManager();
|
|
|
|
[ t1, d ] = yield promiseAddonsByIDs(["theme1@tests.mozilla.org",
|
|
"default@tests.mozilla.org"]);
|
|
do_check_neq(d, null);
|
|
do_check_true(d.isActive);
|
|
do_check_false(d.userDisabled);
|
|
do_check_eq(d.pendingOperations, AddonManager.PENDING_NONE);
|
|
|
|
do_check_eq(t1, null);
|
|
|
|
do_check_eq(Services.prefs.getCharPref(PREF_GENERAL_SKINS_SELECTEDSKIN), "classic/1.0");
|
|
});
|
|
|
|
//Tests that uninstalling an enabled theme can be undone
|
|
add_task(function* canUndoUninstallEnabled() {
|
|
writeInstallRDFForExtension(theme1, profileDir);
|
|
|
|
yield promiseRestartManager();
|
|
|
|
let t1 = yield promiseAddonByID("theme1@tests.mozilla.org");
|
|
|
|
do_check_neq(t1, null);
|
|
do_check_true(t1.userDisabled);
|
|
|
|
t1.userDisabled = false;
|
|
|
|
yield promiseRestartManager();
|
|
|
|
let d = null;
|
|
[ t1, d ] = yield promiseAddonsByIDs(["theme1@tests.mozilla.org",
|
|
"default@tests.mozilla.org"]);
|
|
|
|
do_check_neq(d, null);
|
|
do_check_false(d.isActive);
|
|
do_check_true(d.userDisabled);
|
|
do_check_eq(d.pendingOperations, AddonManager.PENDING_NONE);
|
|
|
|
do_check_neq(t1, null);
|
|
do_check_true(t1.isActive);
|
|
do_check_false(t1.userDisabled);
|
|
do_check_eq(t1.pendingOperations, AddonManager.PENDING_NONE);
|
|
|
|
do_check_eq(Services.prefs.getCharPref(PREF_GENERAL_SKINS_SELECTEDSKIN), "theme1");
|
|
|
|
prepare_test({
|
|
"default@tests.mozilla.org": [
|
|
"onEnabling"
|
|
],
|
|
"theme1@tests.mozilla.org": [
|
|
"onUninstalling"
|
|
]
|
|
});
|
|
t1.uninstall(true);
|
|
ensure_test_completed();
|
|
|
|
do_check_neq(d, null);
|
|
do_check_false(d.isActive);
|
|
do_check_false(d.userDisabled);
|
|
do_check_eq(d.pendingOperations, AddonManager.PENDING_ENABLE);
|
|
|
|
do_check_true(t1.isActive);
|
|
do_check_false(t1.userDisabled);
|
|
do_check_true(hasFlag(t1.pendingOperations, AddonManager.PENDING_UNINSTALL));
|
|
|
|
do_check_eq(Services.prefs.getCharPref(PREF_GENERAL_SKINS_SELECTEDSKIN), "theme1");
|
|
|
|
prepare_test({
|
|
"default@tests.mozilla.org": [
|
|
"onOperationCancelled"
|
|
],
|
|
"theme1@tests.mozilla.org": [
|
|
"onOperationCancelled"
|
|
]
|
|
});
|
|
t1.cancelUninstall();
|
|
ensure_test_completed();
|
|
|
|
do_check_neq(d, null);
|
|
do_check_false(d.isActive);
|
|
do_check_true(d.userDisabled);
|
|
do_check_eq(d.pendingOperations, AddonManager.PENDING_NONE);
|
|
|
|
do_check_neq(t1, null);
|
|
do_check_true(t1.isActive);
|
|
do_check_false(t1.userDisabled);
|
|
do_check_eq(t1.pendingOperations, AddonManager.PENDING_NONE);
|
|
|
|
yield promiseRestartManager();
|
|
|
|
[ t1, d ] = yield promiseAddonsByIDs(["theme1@tests.mozilla.org",
|
|
"default@tests.mozilla.org"]);
|
|
|
|
do_check_neq(d, null);
|
|
do_check_false(d.isActive);
|
|
do_check_true(d.userDisabled);
|
|
do_check_eq(d.pendingOperations, AddonManager.PENDING_NONE);
|
|
|
|
do_check_neq(t1, null);
|
|
do_check_true(t1.isActive);
|
|
do_check_false(t1.userDisabled);
|
|
do_check_eq(t1.pendingOperations, AddonManager.PENDING_NONE);
|
|
|
|
do_check_eq(Services.prefs.getCharPref(PREF_GENERAL_SKINS_SELECTEDSKIN), "theme1");
|
|
|
|
t1.uninstall();
|
|
yield promiseRestartManager();
|
|
});
|
|
|
|
//Tests that uninstalling a disabled theme offers the option to undo
|
|
add_task(function* uninstallDisabledOffersUndo() {
|
|
writeInstallRDFForExtension(theme1, profileDir);
|
|
|
|
yield promiseRestartManager();
|
|
|
|
let [ t1, d ] = yield promiseAddonsByIDs(["theme1@tests.mozilla.org",
|
|
"default@tests.mozilla.org"]);
|
|
|
|
do_check_neq(d, null);
|
|
do_check_true(d.isActive);
|
|
do_check_false(d.userDisabled);
|
|
do_check_eq(d.pendingOperations, AddonManager.PENDING_NONE);
|
|
|
|
do_check_neq(t1, null);
|
|
do_check_false(t1.isActive);
|
|
do_check_true(t1.userDisabled);
|
|
do_check_eq(t1.pendingOperations, AddonManager.PENDING_NONE);
|
|
|
|
do_check_eq(Services.prefs.getCharPref(PREF_GENERAL_SKINS_SELECTEDSKIN), "classic/1.0");
|
|
|
|
prepare_test({
|
|
"theme1@tests.mozilla.org": [
|
|
"onUninstalling"
|
|
]
|
|
});
|
|
t1.uninstall(true);
|
|
ensure_test_completed();
|
|
|
|
do_check_neq(d, null);
|
|
do_check_true(d.isActive);
|
|
do_check_false(d.userDisabled);
|
|
do_check_eq(d.pendingOperations, AddonManager.PENDING_NONE);
|
|
|
|
do_check_false(t1.isActive);
|
|
do_check_true(t1.userDisabled);
|
|
do_check_true(hasFlag(t1.pendingOperations, AddonManager.PENDING_UNINSTALL));
|
|
|
|
do_check_eq(Services.prefs.getCharPref(PREF_GENERAL_SKINS_SELECTEDSKIN), "classic/1.0");
|
|
|
|
yield promiseRestartManager();
|
|
|
|
[ t1, d ] = yield promiseAddonsByIDs(["theme1@tests.mozilla.org",
|
|
"default@tests.mozilla.org"]);
|
|
|
|
do_check_neq(d, null);
|
|
do_check_true(d.isActive);
|
|
do_check_false(d.userDisabled);
|
|
do_check_eq(d.pendingOperations, AddonManager.PENDING_NONE);
|
|
|
|
do_check_eq(t1, null);
|
|
|
|
do_check_eq(Services.prefs.getCharPref(PREF_GENERAL_SKINS_SELECTEDSKIN), "classic/1.0");
|
|
});
|
|
|
|
//Tests that uninstalling a disabled theme can be undone
|
|
add_task(function* canUndoUninstallDisabled() {
|
|
writeInstallRDFForExtension(theme1, profileDir);
|
|
|
|
yield promiseRestartManager();
|
|
|
|
let [ t1, d ] = yield promiseAddonsByIDs(["theme1@tests.mozilla.org",
|
|
"default@tests.mozilla.org"]);
|
|
|
|
do_check_neq(d, null);
|
|
do_check_true(d.isActive);
|
|
do_check_false(d.userDisabled);
|
|
do_check_eq(d.pendingOperations, AddonManager.PENDING_NONE);
|
|
|
|
do_check_neq(t1, null);
|
|
do_check_false(t1.isActive);
|
|
do_check_true(t1.userDisabled);
|
|
do_check_eq(t1.pendingOperations, AddonManager.PENDING_NONE);
|
|
|
|
do_check_eq(Services.prefs.getCharPref(PREF_GENERAL_SKINS_SELECTEDSKIN), "classic/1.0");
|
|
|
|
prepare_test({
|
|
"theme1@tests.mozilla.org": [
|
|
"onUninstalling"
|
|
]
|
|
});
|
|
t1.uninstall(true);
|
|
ensure_test_completed();
|
|
|
|
do_check_neq(d, null);
|
|
do_check_true(d.isActive);
|
|
do_check_false(d.userDisabled);
|
|
do_check_eq(d.pendingOperations, AddonManager.PENDING_NONE);
|
|
|
|
do_check_false(t1.isActive);
|
|
do_check_true(t1.userDisabled);
|
|
do_check_true(hasFlag(t1.pendingOperations, AddonManager.PENDING_UNINSTALL));
|
|
|
|
do_check_eq(Services.prefs.getCharPref(PREF_GENERAL_SKINS_SELECTEDSKIN), "classic/1.0");
|
|
|
|
prepare_test({
|
|
"theme1@tests.mozilla.org": [
|
|
"onOperationCancelled"
|
|
]
|
|
});
|
|
t1.cancelUninstall();
|
|
ensure_test_completed();
|
|
|
|
do_check_neq(d, null);
|
|
do_check_true(d.isActive);
|
|
do_check_false(d.userDisabled);
|
|
do_check_eq(d.pendingOperations, AddonManager.PENDING_NONE);
|
|
|
|
do_check_neq(t1, null);
|
|
do_check_false(t1.isActive);
|
|
do_check_true(t1.userDisabled);
|
|
do_check_eq(t1.pendingOperations, AddonManager.PENDING_NONE);
|
|
|
|
yield promiseRestartManager();
|
|
|
|
[ t1, d ] = yield promiseAddonsByIDs(["theme1@tests.mozilla.org",
|
|
"default@tests.mozilla.org"]);
|
|
|
|
do_check_neq(d, null);
|
|
do_check_true(d.isActive);
|
|
do_check_false(d.userDisabled);
|
|
do_check_eq(d.pendingOperations, AddonManager.PENDING_NONE);
|
|
|
|
do_check_neq(t1, null);
|
|
do_check_false(t1.isActive);
|
|
do_check_true(t1.userDisabled);
|
|
do_check_eq(t1.pendingOperations, AddonManager.PENDING_NONE);
|
|
|
|
do_check_eq(Services.prefs.getCharPref(PREF_GENERAL_SKINS_SELECTEDSKIN), "classic/1.0");
|
|
|
|
t1.uninstall();
|
|
yield promiseRestartManager();
|
|
});
|
|
|
|
//Tests that uninstalling an enabled lightweight theme offers the option to undo
|
|
add_task(function* uninstallLWTOffersUndo() {
|
|
// skipped since lightweight themes don't support undoable uninstall yet
|
|
return;
|
|
LightweightThemeManager.currentTheme = dummyLWTheme("theme1");
|
|
|
|
let [ t1, d ] = yield promiseAddonsByIDs(["theme1@personas.mozilla.org",
|
|
"default@tests.mozilla.org"]);
|
|
|
|
do_check_neq(d, null);
|
|
do_check_false(d.isActive);
|
|
do_check_true(d.userDisabled);
|
|
do_check_eq(d.pendingOperations, AddonManager.PENDING_NONE);
|
|
|
|
do_check_neq(t1, null);
|
|
do_check_true(t1.isActive);
|
|
do_check_false(t1.userDisabled);
|
|
do_check_eq(t1.pendingOperations, AddonManager.PENDING_NONE);
|
|
|
|
do_check_eq(Services.prefs.getCharPref(PREF_GENERAL_SKINS_SELECTEDSKIN), "classic/1.0");
|
|
|
|
prepare_test({
|
|
"default@tests.mozilla.org": [
|
|
"onEnabling"
|
|
],
|
|
"theme1@personas.mozilla.org": [
|
|
"onUninstalling"
|
|
]
|
|
});
|
|
t1.uninstall(true);
|
|
ensure_test_completed();
|
|
|
|
do_check_neq(d, null);
|
|
do_check_false(d.isActive);
|
|
do_check_false(d.userDisabled);
|
|
do_check_eq(d.pendingOperations, AddonManager.PENDING_ENABLE);
|
|
|
|
do_check_true(t1.isActive);
|
|
do_check_false(t1.userDisabled);
|
|
do_check_true(hasFlag(t1.pendingOperations, AddonManager.PENDING_UNINSTALL));
|
|
|
|
do_check_eq(Services.prefs.getCharPref(PREF_GENERAL_SKINS_SELECTEDSKIN), "classic/1.0");
|
|
|
|
yield promiseRestartManager();
|
|
|
|
[ t1, d ] = yield promiseAddonsByIDs(["theme1@personas.mozilla.org",
|
|
"default@tests.mozilla.org"]);
|
|
|
|
do_check_neq(d, null);
|
|
do_check_true(d.isActive);
|
|
do_check_false(d.userDisabled);
|
|
do_check_eq(d.pendingOperations, AddonManager.PENDING_NONE);
|
|
|
|
do_check_eq(t1, null);
|
|
|
|
do_check_eq(Services.prefs.getCharPref(PREF_GENERAL_SKINS_SELECTEDSKIN), "classic/1.0");
|
|
});
|