mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-10-09 16:57:30 +09:00
Move WebExtensions enabled Add-ons Manager
This commit is contained in:
parent
d7d16e7fbb
commit
358cd0404a
1100 changed files with 133 additions and 106 deletions
260
toolkit/mozapps/webextensions/test/xpcshell/test_delay_update.js
Normal file
260
toolkit/mozapps/webextensions/test/xpcshell/test_delay_update.js
Normal file
|
|
@ -0,0 +1,260 @@
|
|||
/* Any copyright is dedicated to the Public Domain.
|
||||
* http://creativecommons.org/publicdomain/zero/1.0/
|
||||
*/
|
||||
|
||||
// This verifies that delaying an update works
|
||||
|
||||
// The test extension uses an insecure update url.
|
||||
Services.prefs.setBoolPref("extensions.checkUpdateSecurity", false);
|
||||
|
||||
Components.utils.import("resource://testing-common/httpd.js");
|
||||
const profileDir = gProfD.clone();
|
||||
profileDir.append("extensions");
|
||||
const tempdir = gTmpD.clone();
|
||||
|
||||
const IGNORE_ID = "test_delay_update_ignore@tests.mozilla.org";
|
||||
const COMPLETE_ID = "test_delay_update_complete@tests.mozilla.org";
|
||||
const DEFER_ID = "test_delay_update_defer@tests.mozilla.org";
|
||||
|
||||
const TEST_IGNORE_PREF = "delaytest.ignore";
|
||||
|
||||
// Note that we would normally use BootstrapMonitor but it currently requires
|
||||
// the objects in `data` to be serializable, and we need a real reference to the
|
||||
// `instanceID` symbol to test.
|
||||
|
||||
createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "1", "42");
|
||||
|
||||
// Create and configure the HTTP server.
|
||||
let testserver = createHttpServer();
|
||||
gPort = testserver.identity.primaryPort;
|
||||
mapFile("/data/test_delay_updates_complete.rdf", testserver);
|
||||
mapFile("/data/test_delay_updates_ignore.rdf", testserver);
|
||||
mapFile("/data/test_delay_updates_defer.rdf", testserver);
|
||||
testserver.registerDirectory("/addons/", do_get_file("addons"));
|
||||
|
||||
function* createIgnoreAddon() {
|
||||
writeInstallRDFToDir({
|
||||
id: IGNORE_ID,
|
||||
version: "1.0",
|
||||
bootstrap: true,
|
||||
unpack: true,
|
||||
updateURL: `http://localhost:${gPort}/data/test_delay_updates_ignore.rdf`,
|
||||
targetApplications: [{
|
||||
id: "xpcshell@tests.mozilla.org",
|
||||
minVersion: "1",
|
||||
maxVersion: "1"
|
||||
}],
|
||||
name: "Test Delay Update Ignore",
|
||||
}, profileDir, IGNORE_ID, "bootstrap.js");
|
||||
|
||||
let unpacked_addon = profileDir.clone();
|
||||
unpacked_addon.append(IGNORE_ID);
|
||||
do_get_file("data/test_delay_update_ignore/bootstrap.js")
|
||||
.copyTo(unpacked_addon, "bootstrap.js");
|
||||
}
|
||||
|
||||
function* createCompleteAddon() {
|
||||
writeInstallRDFToDir({
|
||||
id: COMPLETE_ID,
|
||||
version: "1.0",
|
||||
bootstrap: true,
|
||||
unpack: true,
|
||||
updateURL: `http://localhost:${gPort}/data/test_delay_updates_complete.rdf`,
|
||||
targetApplications: [{
|
||||
id: "xpcshell@tests.mozilla.org",
|
||||
minVersion: "1",
|
||||
maxVersion: "1"
|
||||
}],
|
||||
name: "Test Delay Update Complete",
|
||||
}, profileDir, COMPLETE_ID, "bootstrap.js");
|
||||
|
||||
let unpacked_addon = profileDir.clone();
|
||||
unpacked_addon.append(COMPLETE_ID);
|
||||
do_get_file("data/test_delay_update_complete/bootstrap.js")
|
||||
.copyTo(unpacked_addon, "bootstrap.js");
|
||||
}
|
||||
|
||||
function* createDeferAddon() {
|
||||
writeInstallRDFToDir({
|
||||
id: DEFER_ID,
|
||||
version: "1.0",
|
||||
bootstrap: true,
|
||||
unpack: true,
|
||||
updateURL: `http://localhost:${gPort}/data/test_delay_updates_defer.rdf`,
|
||||
targetApplications: [{
|
||||
id: "xpcshell@tests.mozilla.org",
|
||||
minVersion: "1",
|
||||
maxVersion: "1"
|
||||
}],
|
||||
name: "Test Delay Update Defer",
|
||||
}, profileDir, DEFER_ID, "bootstrap.js");
|
||||
|
||||
let unpacked_addon = profileDir.clone();
|
||||
unpacked_addon.append(DEFER_ID);
|
||||
do_get_file("data/test_delay_update_defer/bootstrap.js")
|
||||
.copyTo(unpacked_addon, "bootstrap.js");
|
||||
}
|
||||
|
||||
// add-on registers upgrade listener, and ignores update.
|
||||
add_task(function*() {
|
||||
|
||||
yield createIgnoreAddon();
|
||||
|
||||
startupManager();
|
||||
|
||||
let addon = yield promiseAddonByID(IGNORE_ID);
|
||||
do_check_neq(addon, null);
|
||||
do_check_eq(addon.version, "1.0");
|
||||
do_check_eq(addon.name, "Test Delay Update Ignore");
|
||||
do_check_true(addon.isCompatible);
|
||||
do_check_false(addon.appDisabled);
|
||||
do_check_true(addon.isActive);
|
||||
do_check_eq(addon.type, "extension");
|
||||
|
||||
let update = yield promiseFindAddonUpdates(addon);
|
||||
let install = update.updateAvailable;
|
||||
|
||||
yield promiseCompleteAllInstalls([install]);
|
||||
|
||||
do_check_eq(install.state, AddonManager.STATE_POSTPONED);
|
||||
|
||||
// addon upgrade has been delayed
|
||||
let addon_postponed = yield promiseAddonByID(IGNORE_ID);
|
||||
do_check_neq(addon_postponed, null);
|
||||
do_check_eq(addon_postponed.version, "1.0");
|
||||
do_check_eq(addon_postponed.name, "Test Delay Update Ignore");
|
||||
do_check_true(addon_postponed.isCompatible);
|
||||
do_check_false(addon_postponed.appDisabled);
|
||||
do_check_true(addon_postponed.isActive);
|
||||
do_check_eq(addon_postponed.type, "extension");
|
||||
do_check_true(Services.prefs.getBoolPref(TEST_IGNORE_PREF));
|
||||
|
||||
// restarting allows upgrade to proceed
|
||||
yield promiseRestartManager();
|
||||
|
||||
let addon_upgraded = yield promiseAddonByID(IGNORE_ID);
|
||||
do_check_neq(addon_upgraded, null);
|
||||
do_check_eq(addon_upgraded.version, "2.0");
|
||||
do_check_eq(addon_upgraded.name, "Test Delay Update Ignore");
|
||||
do_check_true(addon_upgraded.isCompatible);
|
||||
do_check_false(addon_upgraded.appDisabled);
|
||||
do_check_true(addon_upgraded.isActive);
|
||||
do_check_eq(addon_upgraded.type, "extension");
|
||||
|
||||
yield shutdownManager();
|
||||
});
|
||||
|
||||
// add-on registers upgrade listener, and allows update.
|
||||
add_task(function*() {
|
||||
|
||||
yield createCompleteAddon();
|
||||
|
||||
startupManager();
|
||||
|
||||
let addon = yield promiseAddonByID(COMPLETE_ID);
|
||||
do_check_neq(addon, null);
|
||||
do_check_eq(addon.version, "1.0");
|
||||
do_check_eq(addon.name, "Test Delay Update Complete");
|
||||
do_check_true(addon.isCompatible);
|
||||
do_check_false(addon.appDisabled);
|
||||
do_check_true(addon.isActive);
|
||||
do_check_eq(addon.type, "extension");
|
||||
|
||||
let update = yield promiseFindAddonUpdates(addon);
|
||||
let install = update.updateAvailable;
|
||||
|
||||
yield promiseCompleteAllInstalls([install]);
|
||||
|
||||
// upgrade is initially postponed
|
||||
let addon_postponed = yield promiseAddonByID(COMPLETE_ID);
|
||||
do_check_neq(addon_postponed, null);
|
||||
do_check_eq(addon_postponed.version, "1.0");
|
||||
do_check_eq(addon_postponed.name, "Test Delay Update Complete");
|
||||
do_check_true(addon_postponed.isCompatible);
|
||||
do_check_false(addon_postponed.appDisabled);
|
||||
do_check_true(addon_postponed.isActive);
|
||||
do_check_eq(addon_postponed.type, "extension");
|
||||
|
||||
// addon upgrade has been allowed
|
||||
let [addon_allowed] = yield promiseAddonEvent("onInstalled");
|
||||
do_check_neq(addon_allowed, null);
|
||||
do_check_eq(addon_allowed.version, "2.0");
|
||||
do_check_eq(addon_allowed.name, "Test Delay Update Complete");
|
||||
do_check_true(addon_allowed.isCompatible);
|
||||
do_check_false(addon_allowed.appDisabled);
|
||||
do_check_true(addon_allowed.isActive);
|
||||
do_check_eq(addon_allowed.type, "extension");
|
||||
|
||||
// restarting changes nothing
|
||||
yield promiseRestartManager();
|
||||
|
||||
let addon_upgraded = yield promiseAddonByID(COMPLETE_ID);
|
||||
do_check_neq(addon_upgraded, null);
|
||||
do_check_eq(addon_upgraded.version, "2.0");
|
||||
do_check_eq(addon_upgraded.name, "Test Delay Update Complete");
|
||||
do_check_true(addon_upgraded.isCompatible);
|
||||
do_check_false(addon_upgraded.appDisabled);
|
||||
do_check_true(addon_upgraded.isActive);
|
||||
do_check_eq(addon_upgraded.type, "extension");
|
||||
|
||||
yield shutdownManager();
|
||||
});
|
||||
|
||||
// add-on registers upgrade listener, initially defers update then allows upgrade
|
||||
add_task(function*() {
|
||||
|
||||
yield createDeferAddon();
|
||||
|
||||
startupManager();
|
||||
|
||||
let addon = yield promiseAddonByID(DEFER_ID);
|
||||
do_check_neq(addon, null);
|
||||
do_check_eq(addon.version, "1.0");
|
||||
do_check_eq(addon.name, "Test Delay Update Defer");
|
||||
do_check_true(addon.isCompatible);
|
||||
do_check_false(addon.appDisabled);
|
||||
do_check_true(addon.isActive);
|
||||
do_check_eq(addon.type, "extension");
|
||||
|
||||
let update = yield promiseFindAddonUpdates(addon);
|
||||
let install = update.updateAvailable;
|
||||
|
||||
yield promiseCompleteAllInstalls([install]);
|
||||
|
||||
// upgrade is initially postponed
|
||||
let addon_postponed = yield promiseAddonByID(DEFER_ID);
|
||||
do_check_neq(addon_postponed, null);
|
||||
do_check_eq(addon_postponed.version, "1.0");
|
||||
do_check_eq(addon_postponed.name, "Test Delay Update Defer");
|
||||
do_check_true(addon_postponed.isCompatible);
|
||||
do_check_false(addon_postponed.appDisabled);
|
||||
do_check_true(addon_postponed.isActive);
|
||||
do_check_eq(addon_postponed.type, "extension");
|
||||
|
||||
// add-on will not allow upgrade until fake event fires
|
||||
AddonManagerPrivate.callAddonListeners("onFakeEvent");
|
||||
|
||||
// addon upgrade has been allowed
|
||||
let [addon_allowed] = yield promiseAddonEvent("onInstalled");
|
||||
do_check_neq(addon_allowed, null);
|
||||
do_check_eq(addon_allowed.version, "2.0");
|
||||
do_check_eq(addon_allowed.name, "Test Delay Update Defer");
|
||||
do_check_true(addon_allowed.isCompatible);
|
||||
do_check_false(addon_allowed.appDisabled);
|
||||
do_check_true(addon_allowed.isActive);
|
||||
do_check_eq(addon_allowed.type, "extension");
|
||||
|
||||
// restarting changes nothing
|
||||
yield promiseRestartManager();
|
||||
|
||||
let addon_upgraded = yield promiseAddonByID(DEFER_ID);
|
||||
do_check_neq(addon_upgraded, null);
|
||||
do_check_eq(addon_upgraded.version, "2.0");
|
||||
do_check_eq(addon_upgraded.name, "Test Delay Update Defer");
|
||||
do_check_true(addon_upgraded.isCompatible);
|
||||
do_check_false(addon_upgraded.appDisabled);
|
||||
do_check_true(addon_upgraded.isActive);
|
||||
do_check_eq(addon_upgraded.type, "extension");
|
||||
|
||||
yield shutdownManager();
|
||||
});
|
||||
Loading…
Add table
Add a link
Reference in a new issue