/* Any copyright is dedicated to the Public Domain. * http://creativecommons.org/publicdomain/zero/1.0/ */ // Tests that extensions behave correctly in safe mode let scopes = AddonManager.SCOPE_PROFILE | AddonManager.SCOPE_APPLICATION; Services.prefs.setIntPref("extensions.enabledScopes", scopes); const profileDir = gProfD.clone(); profileDir.append("extensions"); const ID = "addon1@tests.mozilla.org"; const BUILTIN_ID = "builtin@tests.mozilla.org"; const VERSION = "1.0"; // Sets up the profile by installing an add-on. add_task(async function setup() { AddonTestUtils.createAppInfo( "xpcshell@tests.mozilla.org", "XPCShell", "1", "1.9.2" ); gAppInfo.inSafeMode = true; await promiseStartupManager(); let a1 = await AddonManager.getAddonByID(ID); Assert.equal(a1, null); do_check_not_in_crash_annotation(ID, VERSION); await promiseInstallWebExtension({ manifest: { name: "Test 1", version: VERSION, browser_specific_settings: { gecko: { id: ID } }, }, }); let wrapper = await installBuiltinExtension({ manifest: { browser_specific_settings: { gecko: { id: BUILTIN_ID } }, }, }); let builtin = await AddonManager.getAddonByID(BUILTIN_ID); Assert.notEqual(builtin, null, "builtin extension is installed"); await promiseRestartManager(); a1 = await AddonManager.getAddonByID(ID); Assert.notEqual(a1, null); Assert.ok(!a1.isActive); Assert.ok(!a1.userDisabled); Assert.ok(isExtensionInBootstrappedList(profileDir, ID)); Assert.ok(hasFlag(a1.permissions, AddonManager.PERM_CAN_DISABLE)); Assert.ok(!hasFlag(a1.permissions, AddonManager.PERM_CAN_ENABLE)); do_check_not_in_crash_annotation(ID, VERSION); builtin = await AddonManager.getAddonByID(BUILTIN_ID); Assert.notEqual(builtin, null, "builtin extension is installed"); Assert.ok(builtin.isActive, "builtin extension is active"); await wrapper.unload(); }); // Disabling an add-on should work add_task(async function test_disable() { let a1 = await AddonManager.getAddonByID(ID); Assert.ok( !hasFlag( a1.operationsRequiringRestart, AddonManager.OP_NEEDS_RESTART_DISABLE ) ); await a1.disable(); Assert.ok(!a1.isActive); Assert.ok(!hasFlag(a1.permissions, AddonManager.PERM_CAN_DISABLE)); Assert.ok(hasFlag(a1.permissions, AddonManager.PERM_CAN_ENABLE)); do_check_not_in_crash_annotation(ID, VERSION); }); // Enabling an add-on should happen but not become active. add_task(async function test_enable() { let a1 = await AddonManager.getAddonByID("addon1@tests.mozilla.org"); await a1.enable(); Assert.ok(!a1.isActive); Assert.ok(hasFlag(a1.permissions, AddonManager.PERM_CAN_DISABLE)); Assert.ok(!hasFlag(a1.permissions, AddonManager.PERM_CAN_ENABLE)); do_check_not_in_crash_annotation(ID, VERSION); });