Bug 1568921 - Don't allow addons to be uninstalled from AMO if policy prevents it. r=aswan

Differential Revision: https://phabricator.services.mozilla.com/D39902

--HG--
extra : moz-landing-system : lando
This commit is contained in:
Michael Kaply 2019-07-30 23:03:28 +00:00
Родитель 49bcf3c657
Коммит 3af21bd5bf
2 изменённых файлов: 24 добавлений и 2 удалений

Просмотреть файл

@ -3386,6 +3386,10 @@ var AddonManagerInternal = {
return false;
}
if (!(addon.permissions & AddonManager.PERM_CAN_UNINSTALL)) {
return Promise.reject({ message: "Addon cannot be uninstalled" });
}
try {
addon.uninstall();
return true;

Просмотреть файл

@ -28,20 +28,26 @@ add_task(
testWithAPI(async function(browser) {
const ID1 = "addon1@tests.mozilla.org";
const ID2 = "addon2@tests.mozilla.org";
const ID3 = "addon3@tests.mozilla.org";
let provider = new MockProvider();
provider.addAddon(new MockAddon(ID1, "Test add-on 1", "extension", 0));
provider.addAddon(new MockAddon(ID2, "Test add-on 2", "extension", 0));
let [a1, a2] = await promiseAddonsByIDs([ID1, ID2]);
let addon = new MockAddon(ID3, "Test add-on 3", "extension", 0);
addon.permissions &= ~AddonManager.PERM_CAN_UNINSTALL;
provider.addAddon(addon);
let [a1, a2, a3] = await promiseAddonsByIDs([ID1, ID2, ID3]);
isnot(a1, null, "addon1 is installed");
isnot(a2, null, "addon2 is installed");
isnot(a3, null, "addon3 is installed");
let result = await API_uninstallByID(browser, ID1);
is(result, true, "uninstall of addon1 succeeded");
[a1, a2] = await promiseAddonsByIDs([ID1, ID2]);
[a1, a2, a3] = await promiseAddonsByIDs([ID1, ID2, ID3]);
is(a1, null, "addon1 is uninstalled");
isnot(a2, null, "addon2 is still installed");
@ -49,5 +55,17 @@ add_task(
is(result, true, "uninstall of addon2 succeeded");
[a2] = await promiseAddonsByIDs([ID2]);
is(a2, null, "addon2 is uninstalled");
await Assert.rejects(
API_uninstallByID(browser, ID3),
/Addon cannot be uninstalled/,
"Unable to uninstall addon"
);
// Cleanup addon3
a3.permissions |= AddonManager.PERM_CAN_UNINSTALL;
await a3.uninstall();
[a3] = await promiseAddonsByIDs([ID3]);
is(a3, null, "addon3 is uninstalled");
})
);