diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 00:47:55 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 00:47:55 +0000 |
commit | 26a029d407be480d791972afb5975cf62c9360a6 (patch) | |
tree | f435a8308119effd964b339f76abb83a57c29483 /toolkit/mozapps/extensions/test/xpcshell/test_sideloads_after_rebuild.js | |
parent | Initial commit. (diff) | |
download | firefox-26a029d407be480d791972afb5975cf62c9360a6.tar.xz firefox-26a029d407be480d791972afb5975cf62c9360a6.zip |
Adding upstream version 124.0.1.upstream/124.0.1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'toolkit/mozapps/extensions/test/xpcshell/test_sideloads_after_rebuild.js')
-rw-r--r-- | toolkit/mozapps/extensions/test/xpcshell/test_sideloads_after_rebuild.js | 149 |
1 files changed, 149 insertions, 0 deletions
diff --git a/toolkit/mozapps/extensions/test/xpcshell/test_sideloads_after_rebuild.js b/toolkit/mozapps/extensions/test/xpcshell/test_sideloads_after_rebuild.js new file mode 100644 index 0000000000..24aa8b228a --- /dev/null +++ b/toolkit/mozapps/extensions/test/xpcshell/test_sideloads_after_rebuild.js @@ -0,0 +1,149 @@ +// Any copyright is dedicated to the Public Domain. +// http://creativecommons.org/publicdomain/zero/1.0/ + +"use strict"; + +// This test uses add-on versions that follow the toolkit version but we +// started to encourage the use of a simpler format in Bug 1793925. We disable +// the pref below to avoid install errors. +Services.prefs.setBoolPref( + "extensions.webextensions.warnings-as-errors", + false +); + +// IDs for scopes that should sideload when sideloading +// is not disabled. +let legacyIDs = [ + getID(`legacy-global`), + getID(`legacy-user`), + getID(`legacy-app`), + getID(`legacy-profile`), +]; + +// This tests that, on a rebuild after addonStartup.json and extensions.json +// are lost, we only sideload from the profile. +add_task(async function test_sideloads_after_rebuild() { + let IDs = []; + + // Create a sideloaded addon for each scope before the restriction is put + // in place (by updating the sideloadScopes preference). + for (let [name, dir] of Object.entries(scopeDirectories)) { + let id = getID(`legacy-${name}`); + IDs.push(id); + await createWebExtension(id, initialVersion(name), dir); + } + + await promiseStartupManager(); + + // SCOPE_APPLICATION will never sideload, so we expect 3 + let sideloaded = await AddonManagerPrivate.getNewSideloads(); + Assert.equal(sideloaded.length, 4, "four sideloaded addon"); + let sideloadedIds = sideloaded.map(a => a.id); + for (let id of legacyIDs) { + Assert.ok(sideloadedIds.includes(id)); + } + + // After a restart that causes a database rebuild, we should have + // the same addons available + await promiseShutdownManager(); + // Reset our scope pref so the scope limitation works. + Services.prefs.setIntPref( + "extensions.sideloadScopes", + AddonManager.SCOPE_PROFILE + ); + + // Try to sideload from a non-profile directory. + await createWebExtension( + getID(`sideload-global-1`), + initialVersion("sideload-global"), + globalDir + ); + + await promiseStartupManager("2"); + + // We should still only have 4 addons. + let addons = await AddonManager.getAddonsByTypes(["extension"]); + Assert.equal(addons.length, 4, "addons remain installed"); + + await promiseShutdownManager(); + + // Install a sideload that will not load because it is not in + // appStartup.json and is not in a sideloadScope. + await createWebExtension( + getID(`sideload-global-2`), + initialVersion("sideload-global"), + globalDir + ); + await createWebExtension( + getID(`sideload-app-2`), + initialVersion("sideload-global"), + globalDir + ); + // Install a sideload that will load. We cannot currently prevent + // this situation. + await createWebExtension( + getID(`sideload-profile`), + initialVersion("sideload-profile"), + profileDir + ); + + // Replace the extensions.json with something bogus so we lose our xpidatabase. + // On AOM startup, addons are restored with help from XPIState. Existing + // sideloads should all remain. One new sideloaded addon should be added from + // the profile. + await IOUtils.writeJSON(gExtensionsJSON.path, { + not: "what we expect to find", + }); + info(`**** restart AOM and rebuild XPI database`); + await promiseStartupManager(); + + addons = await AddonManager.getAddonsByTypes(["extension"]); + Assert.equal(addons.length, 5, "addons installed"); + + await promiseShutdownManager(); + + // Install a sideload that will not load. + await createWebExtension( + getID(`sideload-global-3`), + initialVersion("sideload-global"), + globalDir + ); + // Install a sideload that will load. We cannot currently prevent + // this situation. + await createWebExtension( + getID(`sideload-profile-2`), + initialVersion("sideload-profile"), + profileDir + ); + + // Replace the extensions.json with something bogus so we lose our xpidatabase. + await IOUtils.writeJSON(gExtensionsJSON.path, { + not: "what we expect to find", + }); + // Delete our appStartup/XPIState data. Now we should only be able to + // restore extensions in the profile. + gAddonStartup.remove(true); + info(`**** restart AOM and rebuild XPI database`); + + await promiseStartupManager(); + + addons = await AddonManager.getAddonsByTypes(["extension"]); + Assert.equal(addons.length, 3, "addons installed"); + + let [a1, a2, a3] = await promiseAddonsByIDs([ + getID(`legacy-profile`), + getID(`sideload-profile`), + getID(`sideload-profile-2`), + ]); + + Assert.notEqual(a1, null); + Assert.ok(isExtensionInBootstrappedList(profileDir, a1.id)); + + Assert.notEqual(a2, null); + Assert.ok(isExtensionInBootstrappedList(profileDir, a2.id)); + + Assert.notEqual(a3, null); + Assert.ok(isExtensionInBootstrappedList(profileDir, a3.id)); + + await promiseShutdownManager(); +}); |