Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Warnings

/* Any copyright is dedicated to the Public Domain.
*/
// 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",
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",
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();
});