mirror of
https://github.com/ManchildProductions/UXP-Fixed.git
synced 2026-07-02 21:18:32 +00:00
318 lines
7.6 KiB
JavaScript
318 lines
7.6 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
* http://creativecommons.org/publicdomain/zero/1.0/
|
|
*/
|
|
|
|
BootstrapMonitor.init();
|
|
|
|
const PREF_DB_SCHEMA = "extensions.databaseSchema";
|
|
|
|
const profileDir = gProfD.clone();
|
|
profileDir.append("extensions");
|
|
|
|
createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "1", "49");
|
|
startupManager();
|
|
|
|
/**
|
|
* Schema change with no application update reloads metadata.
|
|
*/
|
|
add_task(function* schema_change() {
|
|
const ID = "schema-change@tests.mozilla.org";
|
|
|
|
let xpiFile = createTempXPIFile({
|
|
id: ID,
|
|
name: "Test Add-on",
|
|
version: "1.0",
|
|
bootstrap: true,
|
|
targetApplications: [{
|
|
id: "xpcshell@tests.mozilla.org",
|
|
minVersion: "1",
|
|
maxVersion: "1.9.2"
|
|
}]
|
|
});
|
|
|
|
yield promiseInstallAllFiles([xpiFile]);
|
|
|
|
let addon = yield promiseAddonByID(ID);
|
|
|
|
notEqual(addon, null, "Got an addon object as expected");
|
|
equal(addon.version, "1.0", "Got the expected version");
|
|
|
|
yield shutdownManager();
|
|
|
|
xpiFile = createTempXPIFile({
|
|
id: ID,
|
|
name: "Test Add-on 2",
|
|
version: "2.0",
|
|
bootstrap: true,
|
|
targetApplications: [{
|
|
id: "xpcshell@tests.mozilla.org",
|
|
minVersion: "1",
|
|
maxVersion: "1.9.2"
|
|
}]
|
|
});
|
|
|
|
Services.prefs.setIntPref(PREF_DB_SCHEMA, 0);
|
|
|
|
let file = profileDir.clone();
|
|
file.append(`${ID}.xpi`);
|
|
|
|
// Make sure the timestamp is unchanged, so it is not re-scanned for that reason.
|
|
let timestamp = file.lastModifiedTime;
|
|
xpiFile.moveTo(profileDir, `${ID}.xpi`);
|
|
|
|
file.lastModifiedTime = timestamp;
|
|
|
|
yield startupManager();
|
|
|
|
addon = yield promiseAddonByID(ID);
|
|
notEqual(addon, null, "Got an addon object as expected");
|
|
equal(addon.version, "2.0", "Got the expected version");
|
|
|
|
let waitUninstall = promiseAddonEvent("onUninstalled");
|
|
addon.uninstall();
|
|
yield waitUninstall;
|
|
});
|
|
|
|
/**
|
|
* Application update with no schema change does not reload metadata.
|
|
*/
|
|
add_task(function* schema_change() {
|
|
const ID = "schema-change@tests.mozilla.org";
|
|
|
|
let xpiFile = createTempXPIFile({
|
|
id: ID,
|
|
name: "Test Add-on",
|
|
version: "1.0",
|
|
bootstrap: true,
|
|
targetApplications: [{
|
|
id: "xpcshell@tests.mozilla.org",
|
|
minVersion: "1",
|
|
maxVersion: "2"
|
|
}]
|
|
});
|
|
|
|
yield promiseInstallAllFiles([xpiFile]);
|
|
|
|
let addon = yield promiseAddonByID(ID);
|
|
|
|
notEqual(addon, null, "Got an addon object as expected");
|
|
equal(addon.version, "1.0", "Got the expected version");
|
|
|
|
yield shutdownManager();
|
|
|
|
xpiFile = createTempXPIFile({
|
|
id: ID,
|
|
name: "Test Add-on 2",
|
|
version: "2.0",
|
|
bootstrap: true,
|
|
targetApplications: [{
|
|
id: "xpcshell@tests.mozilla.org",
|
|
minVersion: "1",
|
|
maxVersion: "2"
|
|
}]
|
|
});
|
|
|
|
gAppInfo.version = "2";
|
|
let file = profileDir.clone();
|
|
file.append(`${ID}.xpi`);
|
|
|
|
// Make sure the timestamp is unchanged, so it is not re-scanned for that reason.
|
|
let timestamp = file.lastModifiedTime;
|
|
xpiFile.moveTo(profileDir, `${ID}.xpi`);
|
|
|
|
file.lastModifiedTime = timestamp;
|
|
|
|
yield startupManager();
|
|
|
|
addon = yield promiseAddonByID(ID);
|
|
notEqual(addon, null, "Got an addon object as expected");
|
|
equal(addon.version, "1.0", "Got the expected version");
|
|
|
|
let waitUninstall = promiseAddonEvent("onUninstalled");
|
|
addon.uninstall();
|
|
yield waitUninstall;
|
|
});
|
|
|
|
/**
|
|
* App update and a schema change causes a reload of the manifest.
|
|
*/
|
|
add_task(function* schema_change_app_update() {
|
|
const ID = "schema-change@tests.mozilla.org";
|
|
|
|
let xpiFile = createTempXPIFile({
|
|
id: ID,
|
|
name: "Test Add-on",
|
|
version: "1.0",
|
|
bootstrap: true,
|
|
targetApplications: [{
|
|
id: "xpcshell@tests.mozilla.org",
|
|
minVersion: "1",
|
|
maxVersion: "3"
|
|
}]
|
|
});
|
|
|
|
yield promiseInstallAllFiles([xpiFile]);
|
|
|
|
let addon = yield promiseAddonByID(ID);
|
|
|
|
notEqual(addon, null, "Got an addon object as expected");
|
|
equal(addon.version, "1.0", "Got the expected version");
|
|
|
|
yield shutdownManager();
|
|
|
|
xpiFile = createTempXPIFile({
|
|
id: ID,
|
|
name: "Test Add-on 2",
|
|
version: "2.0",
|
|
bootstrap: true,
|
|
targetApplications: [{
|
|
id: "xpcshell@tests.mozilla.org",
|
|
minVersion: "1",
|
|
maxVersion: "3"
|
|
}]
|
|
});
|
|
|
|
gAppInfo.version = "3";
|
|
Services.prefs.setIntPref(PREF_DB_SCHEMA, 0);
|
|
|
|
let file = profileDir.clone();
|
|
file.append(`${ID}.xpi`);
|
|
|
|
// Make sure the timestamp is unchanged, so it is not re-scanned for that reason.
|
|
let timestamp = file.lastModifiedTime;
|
|
xpiFile.moveTo(profileDir, `${ID}.xpi`);
|
|
|
|
file.lastModifiedTime = timestamp;
|
|
|
|
yield startupManager();
|
|
|
|
addon = yield promiseAddonByID(ID);
|
|
notEqual(addon, null, "Got an addon object as expected");
|
|
equal(addon.appDisabled, false);
|
|
equal(addon.version, "2.0", "Got the expected version");
|
|
|
|
let waitUninstall = promiseAddonEvent("onUninstalled");
|
|
addon.uninstall();
|
|
yield waitUninstall;
|
|
});
|
|
|
|
/**
|
|
* No schema change, no manifest reload.
|
|
*/
|
|
add_task(function* schema_change() {
|
|
const ID = "schema-change@tests.mozilla.org";
|
|
|
|
let xpiFile = createTempXPIFile({
|
|
id: ID,
|
|
name: "Test Add-on",
|
|
version: "1.0",
|
|
bootstrap: true,
|
|
targetApplications: [{
|
|
id: "xpcshell@tests.mozilla.org",
|
|
minVersion: "1",
|
|
maxVersion: "1.9.2"
|
|
}]
|
|
});
|
|
|
|
yield promiseInstallAllFiles([xpiFile]);
|
|
|
|
let addon = yield promiseAddonByID(ID);
|
|
|
|
notEqual(addon, null, "Got an addon object as expected");
|
|
equal(addon.version, "1.0", "Got the expected version");
|
|
|
|
yield shutdownManager();
|
|
|
|
xpiFile = createTempXPIFile({
|
|
id: ID,
|
|
name: "Test Add-on 2",
|
|
version: "2.0",
|
|
bootstrap: true,
|
|
targetApplications: [{
|
|
id: "xpcshell@tests.mozilla.org",
|
|
minVersion: "1",
|
|
maxVersion: "1.9.2"
|
|
}]
|
|
});
|
|
|
|
let file = profileDir.clone();
|
|
file.append(`${ID}.xpi`);
|
|
|
|
// Make sure the timestamp is unchanged, so it is not re-scanned for that reason.
|
|
let timestamp = file.lastModifiedTime;
|
|
xpiFile.moveTo(profileDir, `${ID}.xpi`);
|
|
|
|
file.lastModifiedTime = timestamp;
|
|
|
|
yield startupManager();
|
|
|
|
addon = yield promiseAddonByID(ID);
|
|
notEqual(addon, null, "Got an addon object as expected");
|
|
equal(addon.version, "1.0", "Got the expected version");
|
|
|
|
let waitUninstall = promiseAddonEvent("onUninstalled");
|
|
addon.uninstall();
|
|
yield waitUninstall;
|
|
});
|
|
|
|
/**
|
|
* Modified timestamp on the XPI causes a reload of the manifest.
|
|
*/
|
|
add_task(function* schema_change() {
|
|
const ID = "schema-change@tests.mozilla.org";
|
|
|
|
let xpiFile = createTempXPIFile({
|
|
id: ID,
|
|
name: "Test Add-on",
|
|
version: "1.0",
|
|
bootstrap: true,
|
|
targetApplications: [{
|
|
id: "xpcshell@tests.mozilla.org",
|
|
minVersion: "1",
|
|
maxVersion: "1.9.2"
|
|
}]
|
|
});
|
|
|
|
yield promiseInstallAllFiles([xpiFile]);
|
|
|
|
let addon = yield promiseAddonByID(ID);
|
|
|
|
notEqual(addon, null, "Got an addon object as expected");
|
|
equal(addon.version, "1.0", "Got the expected version");
|
|
|
|
yield shutdownManager();
|
|
|
|
xpiFile = createTempXPIFile({
|
|
id: ID,
|
|
name: "Test Add-on 2",
|
|
version: "2.0",
|
|
bootstrap: true,
|
|
targetApplications: [{
|
|
id: "xpcshell@tests.mozilla.org",
|
|
minVersion: "1",
|
|
maxVersion: "1.9.2"
|
|
}]
|
|
});
|
|
|
|
xpiFile.moveTo(profileDir, `${ID}.xpi`);
|
|
|
|
let file = profileDir.clone();
|
|
file.append(`${ID}.xpi`);
|
|
|
|
// Set timestamp in the future so manifest is re-scanned.
|
|
let timestamp = new Date(Date.now() + 60000);
|
|
xpiFile.moveTo(profileDir, `${ID}.xpi`);
|
|
|
|
file.lastModifiedTime = timestamp;
|
|
|
|
yield startupManager();
|
|
|
|
addon = yield promiseAddonByID(ID);
|
|
notEqual(addon, null, "Got an addon object as expected");
|
|
equal(addon.version, "2.0", "Got the expected version");
|
|
|
|
let waitUninstall = promiseAddonEvent("onUninstalled");
|
|
addon.uninstall();
|
|
yield waitUninstall;
|
|
});
|