/* Any copyright is dedicated to the Public Domain. * http://creativecommons.org/publicdomain/zero/1.0/ */ const TESTPAGE = `${SECURE_TESTROOT}webapi_checkavailable.html`; add_setup(async function () { await SpecialPowers.pushPrefEnv({ set: [["extensions.webapi.testing", true]], }); }); function testWithAPI(task) { return async function () { await BrowserTestUtils.withNewTab(TESTPAGE, task); }; } function API_uninstallByID(browser, id) { return SpecialPowers.spawn(browser, [id], async function (id) { let addon = await content.navigator.mozAddonManager.getAddonByID(id); let result = await addon.uninstall(); return result; }); } 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 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, a3] = await promiseAddonsByIDs([ID1, ID2, ID3]); is(a1, null, "addon1 is uninstalled"); isnot(a2, null, "addon2 is still installed"); result = await API_uninstallByID(browser, ID2); 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"); }) );