237 lines
5.5 KiB
JavaScript
237 lines
5.5 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
* http://creativecommons.org/publicdomain/zero/1.0/
|
|
*/
|
|
|
|
// Checks that we rebuild something sensible from a database with a bad schema
|
|
|
|
var testserver = AddonTestUtils.createHttpServer({ hosts: ["example.com"] });
|
|
|
|
// register files with server
|
|
testserver.registerDirectory("/data/", do_get_file("data"));
|
|
|
|
// The test extension uses an insecure update url.
|
|
Services.prefs.setBoolPref(PREF_EM_CHECK_UPDATE_SECURITY, false);
|
|
|
|
const ADDONS = {
|
|
"addon1@tests.mozilla.org": {
|
|
manifest: {
|
|
name: "Test 1",
|
|
browser_specific_settings: {
|
|
gecko: {
|
|
id: "addon1@tests.mozilla.org",
|
|
strict_min_version: "2",
|
|
strict_max_version: "2",
|
|
},
|
|
},
|
|
},
|
|
desiredValues: {
|
|
isActive: true,
|
|
userDisabled: false,
|
|
appDisabled: false,
|
|
pendingOperations: 0,
|
|
},
|
|
},
|
|
|
|
"addon2@tests.mozilla.org": {
|
|
manifest: {
|
|
name: "Test 2",
|
|
version: "1.0",
|
|
browser_specific_settings: {
|
|
gecko: {
|
|
id: "addon2@tests.mozilla.org",
|
|
},
|
|
},
|
|
},
|
|
initialState: {
|
|
userDisabled: true,
|
|
},
|
|
desiredValues: {
|
|
isActive: false,
|
|
userDisabled: true,
|
|
appDisabled: false,
|
|
pendingOperations: 0,
|
|
},
|
|
},
|
|
|
|
"addon3@tests.mozilla.org": {
|
|
manifest: {
|
|
name: "Test 3",
|
|
version: "1.0",
|
|
browser_specific_settings: {
|
|
gecko: {
|
|
id: "addon3@tests.mozilla.org",
|
|
update_url: "http://example.com/data/test_corrupt.json",
|
|
strict_min_version: "1",
|
|
strict_max_version: "1",
|
|
},
|
|
},
|
|
},
|
|
findUpdates: true,
|
|
desiredValues: {
|
|
isActive: true,
|
|
userDisabled: false,
|
|
appDisabled: false,
|
|
pendingOperations: 0,
|
|
},
|
|
},
|
|
|
|
"addon4@tests.mozilla.org": {
|
|
manifest: {
|
|
name: "Test 4",
|
|
version: "1.0",
|
|
browser_specific_settings: {
|
|
gecko: {
|
|
id: "addon4@tests.mozilla.org",
|
|
update_url: "http://example.com/data/test_corrupt.json",
|
|
strict_min_version: "1",
|
|
strict_max_version: "1",
|
|
},
|
|
},
|
|
},
|
|
initialState: {
|
|
userDisabled: true,
|
|
},
|
|
findUpdates: true,
|
|
desiredValues: {
|
|
isActive: false,
|
|
userDisabled: true,
|
|
appDisabled: false,
|
|
pendingOperations: 0,
|
|
},
|
|
},
|
|
|
|
"addon5@tests.mozilla.org": {
|
|
manifest: {
|
|
name: "Test 5",
|
|
version: "1.0",
|
|
browser_specific_settings: {
|
|
gecko: {
|
|
id: "addon5@tests.mozilla.org",
|
|
strict_min_version: "1",
|
|
strict_max_version: "1",
|
|
},
|
|
},
|
|
},
|
|
desiredValues: {
|
|
isActive: false,
|
|
userDisabled: false,
|
|
appDisabled: true,
|
|
pendingOperations: 0,
|
|
},
|
|
},
|
|
|
|
"theme1@tests.mozilla.org": {
|
|
manifest: {
|
|
manifest_version: 2,
|
|
name: "Theme 1",
|
|
version: "1.0",
|
|
theme: { images: { theme_frame: "example.png" } },
|
|
browser_specific_settings: {
|
|
gecko: {
|
|
id: "theme1@tests.mozilla.org",
|
|
},
|
|
},
|
|
},
|
|
desiredValues: {
|
|
isActive: false,
|
|
userDisabled: true,
|
|
appDisabled: false,
|
|
pendingOperations: 0,
|
|
},
|
|
},
|
|
|
|
"theme2@tests.mozilla.org": {
|
|
manifest: {
|
|
manifest_version: 2,
|
|
name: "Theme 2",
|
|
version: "1.0",
|
|
theme: { images: { theme_frame: "example.png" } },
|
|
browser_specific_settings: {
|
|
gecko: {
|
|
id: "theme2@tests.mozilla.org",
|
|
},
|
|
},
|
|
},
|
|
initialState: {
|
|
userDisabled: false,
|
|
},
|
|
desiredValues: {
|
|
isActive: true,
|
|
userDisabled: false,
|
|
appDisabled: false,
|
|
pendingOperations: 0,
|
|
},
|
|
},
|
|
};
|
|
|
|
const IDS = Object.keys(ADDONS);
|
|
|
|
function promiseUpdates(addon) {
|
|
return new Promise(resolve => {
|
|
addon.findUpdates(
|
|
{ onUpdateFinished: resolve },
|
|
AddonManager.UPDATE_WHEN_PERIODIC_UPDATE
|
|
);
|
|
});
|
|
}
|
|
|
|
add_task(async function setup() {
|
|
createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "2", "2");
|
|
|
|
for (let addon of Object.values(ADDONS)) {
|
|
let webext = createTempWebExtensionFile({ manifest: addon.manifest });
|
|
await AddonTestUtils.manuallyInstall(webext);
|
|
}
|
|
|
|
await promiseStartupManager();
|
|
|
|
let addons = await getAddons(IDS);
|
|
for (let [id, addon] of Object.entries(ADDONS)) {
|
|
if (addon.initialState) {
|
|
await setInitialState(addons.get(id), addon.initialState);
|
|
}
|
|
if (addon.findUpdates) {
|
|
await promiseUpdates(addons.get(id));
|
|
}
|
|
}
|
|
});
|
|
|
|
add_task(async function test_after_restart() {
|
|
await promiseRestartManager();
|
|
|
|
info("Test add-on state after restart");
|
|
let addons = await getAddons(IDS);
|
|
for (let [id, addon] of Object.entries(ADDONS)) {
|
|
checkAddon(id, addons.get(id), addon.desiredValues);
|
|
}
|
|
|
|
await promiseShutdownManager();
|
|
});
|
|
|
|
add_task(async function test_after_schema_version_change() {
|
|
// After restarting the database won't be open so we can alter
|
|
// the schema
|
|
await changeXPIDBVersion(100);
|
|
|
|
await promiseStartupManager();
|
|
|
|
info("Test add-on state after schema version change");
|
|
let addons = await getAddons(IDS);
|
|
for (let [id, addon] of Object.entries(ADDONS)) {
|
|
checkAddon(id, addons.get(id), addon.desiredValues);
|
|
}
|
|
|
|
await promiseShutdownManager();
|
|
});
|
|
|
|
add_task(async function test_after_second_restart() {
|
|
await promiseStartupManager();
|
|
|
|
info("Test add-on state after second restart");
|
|
let addons = await getAddons(IDS);
|
|
for (let [id, addon] of Object.entries(ADDONS)) {
|
|
checkAddon(id, addons.get(id), addon.desiredValues);
|
|
}
|
|
|
|
await promiseShutdownManager();
|
|
});
|