From 6bf0a5cb5034a7e684dcc3500e841785237ce2dd Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 19:32:43 +0200 Subject: Adding upstream version 1:115.7.0. Signed-off-by: Daniel Baumann --- .../test/xpcshell/test_sideloads_after_rebuild.js | 149 +++++++++++++++++++++ 1 file changed, 149 insertions(+) create mode 100644 toolkit/mozapps/extensions/test/xpcshell/test_sideloads_after_rebuild.js (limited to 'toolkit/mozapps/extensions/test/xpcshell/test_sideloads_after_rebuild.js') 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(); +}); -- cgit v1.2.3