72 lines
2.2 KiB
JavaScript
72 lines
2.2 KiB
JavaScript
/* 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");
|
|
})
|
|
);
|