michael@0: /* Any copyright is dedicated to the Public Domain. michael@0: * http://creativecommons.org/publicdomain/zero/1.0/ michael@0: */ michael@0: michael@0: // This verifies startup detection of added/removed/changed items and install michael@0: // location priorities michael@0: michael@0: // Enable loading extensions from the user and system scopes michael@0: Services.prefs.setIntPref("extensions.enabledScopes", michael@0: AddonManager.SCOPE_PROFILE + AddonManager.SCOPE_USER + michael@0: AddonManager.SCOPE_SYSTEM); michael@0: michael@0: var addon1 = { michael@0: id: "addon1@tests.mozilla.org", michael@0: version: "1.0", michael@0: name: "Test 1", michael@0: targetApplications: [{ michael@0: id: "xpcshell@tests.mozilla.org", michael@0: minVersion: "1", michael@0: maxVersion: "1" michael@0: }, { // Repeated target application entries should be ignored michael@0: id: "xpcshell@tests.mozilla.org", michael@0: minVersion: "2", michael@0: maxVersion: "2" michael@0: }] michael@0: }; michael@0: michael@0: var addon2 = { michael@0: id: "addon2@tests.mozilla.org", michael@0: version: "2.0", michael@0: name: "Test 2", michael@0: targetApplications: [{ // Bad target application entries should be ignored michael@0: minVersion: "3", michael@0: maxVersion: "4" michael@0: }, { michael@0: id: "xpcshell@tests.mozilla.org", michael@0: minVersion: "1", michael@0: maxVersion: "2" michael@0: }] michael@0: }; michael@0: michael@0: var addon3 = { michael@0: id: "addon3@tests.mozilla.org", michael@0: version: "3.0", michael@0: name: "Test 3", michael@0: targetApplications: [{ michael@0: id: "toolkit@mozilla.org", michael@0: minVersion: "1.9.2", michael@0: maxVersion: "1.9.2.*" michael@0: }] michael@0: }; michael@0: michael@0: // Should be ignored because it has no ID michael@0: var addon4 = { michael@0: version: "4.0", michael@0: name: "Test 4", michael@0: targetApplications: [{ michael@0: id: "xpcshell@tests.mozilla.org", michael@0: minVersion: "1", michael@0: maxVersion: "1" michael@0: }] michael@0: }; michael@0: michael@0: // Should be ignored because it has no version michael@0: var addon5 = { michael@0: id: "addon5@tests.mozilla.org", michael@0: name: "Test 5", michael@0: targetApplications: [{ michael@0: id: "xpcshell@tests.mozilla.org", michael@0: minVersion: "1", michael@0: maxVersion: "1" michael@0: }] michael@0: }; michael@0: michael@0: // Should be ignored because it has an invalid type michael@0: var addon6 = { michael@0: id: "addon6@tests.mozilla.org", michael@0: version: "3.0", michael@0: name: "Test 6", michael@0: type: 5, michael@0: targetApplications: [{ michael@0: id: "toolkit@mozilla.org", michael@0: minVersion: "1.9.2", michael@0: maxVersion: "1.9.2.*" michael@0: }] michael@0: }; michael@0: michael@0: // Should be ignored because it has an invalid type michael@0: var addon7 = { michael@0: id: "addon7@tests.mozilla.org", michael@0: version: "3.0", michael@0: name: "Test 3", michael@0: type: "extension", michael@0: targetApplications: [{ michael@0: id: "toolkit@mozilla.org", michael@0: minVersion: "1.9.2", michael@0: maxVersion: "1.9.2.*" michael@0: }] michael@0: }; michael@0: michael@0: createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "1", "1.9.2"); michael@0: michael@0: const globalDir = gProfD.clone(); michael@0: globalDir.append("extensions2"); michael@0: globalDir.append(gAppInfo.ID); michael@0: registerDirectory("XRESysSExtPD", globalDir.parent); michael@0: const userDir = gProfD.clone(); michael@0: userDir.append("extensions3"); michael@0: userDir.append(gAppInfo.ID); michael@0: registerDirectory("XREUSysExt", userDir.parent); michael@0: const profileDir = gProfD.clone(); michael@0: profileDir.append("extensions"); michael@0: michael@0: var gCachePurged = false; michael@0: michael@0: // Set up the profile michael@0: function run_test() { michael@0: do_test_pending("test_startup main"); michael@0: michael@0: let obs = AM_Cc["@mozilla.org/observer-service;1"]. michael@0: getService(AM_Ci.nsIObserverService); michael@0: obs.addObserver({ michael@0: observe: function(aSubject, aTopic, aData) { michael@0: gCachePurged = true; michael@0: } michael@0: }, "startupcache-invalidate", false); michael@0: michael@0: startupManager(); michael@0: check_startup_changes(AddonManager.STARTUP_CHANGE_INSTALLED, []); michael@0: check_startup_changes(AddonManager.STARTUP_CHANGE_CHANGED, []); michael@0: check_startup_changes(AddonManager.STARTUP_CHANGE_UNINSTALLED, []); michael@0: check_startup_changes(AddonManager.STARTUP_CHANGE_DISABLED, []); michael@0: check_startup_changes(AddonManager.STARTUP_CHANGE_ENABLED, []); michael@0: michael@0: do_check_false(gExtensionsJSON.exists()); michael@0: michael@0: do_check_false(gExtensionsINI.exists()); michael@0: michael@0: AddonManager.getAddonsByIDs(["addon1@tests.mozilla.org", michael@0: "addon2@tests.mozilla.org", michael@0: "addon3@tests.mozilla.org", michael@0: "addon4@tests.mozilla.org", michael@0: "addon5@tests.mozilla.org", michael@0: "addon6@tests.mozilla.org", michael@0: "addon7@tests.mozilla.org"], michael@0: function([a1, a2, a3, a4, a5, a6, a7]) { michael@0: michael@0: do_check_eq(a1, null); michael@0: do_check_not_in_crash_annotation(addon1.id, addon1.version); michael@0: do_check_eq(a2, null); michael@0: do_check_not_in_crash_annotation(addon2.id, addon2.version); michael@0: do_check_eq(a3, null); michael@0: do_check_not_in_crash_annotation(addon3.id, addon3.version); michael@0: do_check_eq(a4, null); michael@0: do_check_eq(a5, null); michael@0: michael@0: do_execute_soon(run_test_1); michael@0: }); michael@0: } michael@0: michael@0: function end_test() { michael@0: do_test_finished("test_startup main"); michael@0: } michael@0: michael@0: // Try to install all the items into the profile michael@0: function run_test_1() { michael@0: writeInstallRDFForExtension(addon1, profileDir); michael@0: var dest = writeInstallRDFForExtension(addon2, profileDir); michael@0: // Attempt to make this look like it was added some time in the past so michael@0: // the change in run_test_2 makes the last modified time change. michael@0: setExtensionModifiedTime(dest, dest.lastModifiedTime - 5000); michael@0: michael@0: writeInstallRDFForExtension(addon3, profileDir); michael@0: writeInstallRDFForExtension(addon4, profileDir); michael@0: writeInstallRDFForExtension(addon5, profileDir); michael@0: writeInstallRDFForExtension(addon6, profileDir); michael@0: writeInstallRDFForExtension(addon7, profileDir); michael@0: michael@0: gCachePurged = false; michael@0: restartManager(); michael@0: check_startup_changes(AddonManager.STARTUP_CHANGE_INSTALLED, ["addon1@tests.mozilla.org", michael@0: "addon2@tests.mozilla.org", michael@0: "addon3@tests.mozilla.org"]); michael@0: check_startup_changes(AddonManager.STARTUP_CHANGE_CHANGED, []); michael@0: check_startup_changes(AddonManager.STARTUP_CHANGE_UNINSTALLED, []); michael@0: check_startup_changes(AddonManager.STARTUP_CHANGE_DISABLED, []); michael@0: check_startup_changes(AddonManager.STARTUP_CHANGE_ENABLED, []); michael@0: do_check_true(gCachePurged); michael@0: michael@0: do_print("Checking for " + gExtensionsINI.path); michael@0: do_check_true(gExtensionsINI.exists()); michael@0: michael@0: AddonManager.getAddonsByIDs(["addon1@tests.mozilla.org", michael@0: "addon2@tests.mozilla.org", michael@0: "addon3@tests.mozilla.org", michael@0: "addon4@tests.mozilla.org", michael@0: "addon5@tests.mozilla.org", michael@0: "addon6@tests.mozilla.org", michael@0: "addon7@tests.mozilla.org"], michael@0: function([a1, a2, a3, a4, a5, a6, a7]) { michael@0: michael@0: do_check_neq(a1, null); michael@0: do_check_eq(a1.id, "addon1@tests.mozilla.org"); michael@0: do_check_neq(a1.syncGUID, null); michael@0: do_check_true(a1.syncGUID.length >= 9); michael@0: do_check_eq(a1.version, "1.0"); michael@0: do_check_eq(a1.name, "Test 1"); michael@0: do_check_true(isExtensionInAddonsList(profileDir, a1.id)); michael@0: do_check_true(hasFlag(a1.permissions, AddonManager.PERM_CAN_UNINSTALL)); michael@0: do_check_true(hasFlag(a1.permissions, AddonManager.PERM_CAN_UPGRADE)); michael@0: do_check_in_crash_annotation(addon1.id, addon1.version); michael@0: do_check_eq(a1.scope, AddonManager.SCOPE_PROFILE); michael@0: do_check_eq(a1.sourceURI, null); michael@0: do_check_true(a1.foreignInstall); michael@0: michael@0: do_check_neq(a2, null); michael@0: do_check_eq(a2.id, "addon2@tests.mozilla.org"); michael@0: do_check_neq(a2.syncGUID, null); michael@0: do_check_true(a2.syncGUID.length >= 9); michael@0: do_check_eq(a2.version, "2.0"); michael@0: do_check_eq(a2.name, "Test 2"); michael@0: do_check_true(isExtensionInAddonsList(profileDir, a2.id)); michael@0: do_check_true(hasFlag(a2.permissions, AddonManager.PERM_CAN_UNINSTALL)); michael@0: do_check_true(hasFlag(a2.permissions, AddonManager.PERM_CAN_UPGRADE)); michael@0: do_check_in_crash_annotation(addon2.id, addon2.version); michael@0: do_check_eq(a2.scope, AddonManager.SCOPE_PROFILE); michael@0: do_check_eq(a2.sourceURI, null); michael@0: do_check_true(a2.foreignInstall); michael@0: michael@0: do_check_neq(a3, null); michael@0: do_check_eq(a3.id, "addon3@tests.mozilla.org"); michael@0: do_check_neq(a3.syncGUID, null); michael@0: do_check_true(a3.syncGUID.length >= 9); michael@0: do_check_eq(a3.version, "3.0"); michael@0: do_check_eq(a3.name, "Test 3"); michael@0: do_check_true(isExtensionInAddonsList(profileDir, a3.id)); michael@0: do_check_true(hasFlag(a3.permissions, AddonManager.PERM_CAN_UNINSTALL)); michael@0: do_check_true(hasFlag(a3.permissions, AddonManager.PERM_CAN_UPGRADE)); michael@0: do_check_in_crash_annotation(addon3.id, addon3.version); michael@0: do_check_eq(a3.scope, AddonManager.SCOPE_PROFILE); michael@0: do_check_eq(a3.sourceURI, null); michael@0: do_check_true(a3.foreignInstall); michael@0: michael@0: do_check_eq(a4, null); michael@0: do_check_false(isExtensionInAddonsList(profileDir, "addon4@tests.mozilla.org")); michael@0: dest = profileDir.clone(); michael@0: dest.append(do_get_expected_addon_name("addon4@tests.mozilla.org")); michael@0: do_check_false(dest.exists()); michael@0: michael@0: do_check_eq(a5, null); michael@0: do_check_false(isExtensionInAddonsList(profileDir, "addon5@tests.mozilla.org")); michael@0: dest = profileDir.clone(); michael@0: dest.append(do_get_expected_addon_name("addon5@tests.mozilla.org")); michael@0: do_check_false(dest.exists()); michael@0: michael@0: do_check_eq(a6, null); michael@0: do_check_false(isExtensionInAddonsList(profileDir, "addon6@tests.mozilla.org")); michael@0: dest = profileDir.clone(); michael@0: dest.append(do_get_expected_addon_name("addon6@tests.mozilla.org")); michael@0: do_check_false(dest.exists()); michael@0: michael@0: do_check_eq(a7, null); michael@0: do_check_false(isExtensionInAddonsList(profileDir, "addon7@tests.mozilla.org")); michael@0: dest = profileDir.clone(); michael@0: dest.append(do_get_expected_addon_name("addon7@tests.mozilla.org")); michael@0: do_check_false(dest.exists()); michael@0: michael@0: AddonManager.getAddonsByTypes(["extension"], function(extensionAddons) { michael@0: do_check_eq(extensionAddons.length, 3); michael@0: michael@0: do_execute_soon(run_test_2); michael@0: }); michael@0: }); michael@0: } michael@0: michael@0: // Test that modified items are detected and items in other install locations michael@0: // are ignored michael@0: function run_test_2() { michael@0: addon1.version = "1.1"; michael@0: writeInstallRDFForExtension(addon1, userDir); michael@0: addon2.version="2.1"; michael@0: writeInstallRDFForExtension(addon2, profileDir); michael@0: addon2.version="2.2"; michael@0: writeInstallRDFForExtension(addon2, globalDir); michael@0: addon2.version="2.3"; michael@0: writeInstallRDFForExtension(addon2, userDir); michael@0: var dest = profileDir.clone(); michael@0: dest.append(do_get_expected_addon_name("addon3@tests.mozilla.org")); michael@0: dest.remove(true); michael@0: michael@0: gCachePurged = false; michael@0: restartManager(); michael@0: check_startup_changes(AddonManager.STARTUP_CHANGE_INSTALLED, []); michael@0: check_startup_changes(AddonManager.STARTUP_CHANGE_CHANGED, ["addon2@tests.mozilla.org"]); michael@0: check_startup_changes(AddonManager.STARTUP_CHANGE_UNINSTALLED, ["addon3@tests.mozilla.org"]); michael@0: check_startup_changes(AddonManager.STARTUP_CHANGE_DISABLED, []); michael@0: check_startup_changes(AddonManager.STARTUP_CHANGE_ENABLED, []); michael@0: do_check_true(gCachePurged); michael@0: michael@0: do_check_true(gExtensionsINI.exists()); michael@0: michael@0: AddonManager.getAddonsByIDs(["addon1@tests.mozilla.org", michael@0: "addon2@tests.mozilla.org", michael@0: "addon3@tests.mozilla.org", michael@0: "addon4@tests.mozilla.org", michael@0: "addon5@tests.mozilla.org"], michael@0: function([a1, a2, a3, a4, a5]) { michael@0: michael@0: do_check_neq(a1, null); michael@0: do_check_eq(a1.id, "addon1@tests.mozilla.org"); michael@0: do_check_eq(a1.version, "1.0"); michael@0: do_check_true(isExtensionInAddonsList(profileDir, a1.id)); michael@0: do_check_false(isExtensionInAddonsList(userDir, a1.id)); michael@0: do_check_true(hasFlag(a1.permissions, AddonManager.PERM_CAN_UNINSTALL)); michael@0: do_check_true(hasFlag(a1.permissions, AddonManager.PERM_CAN_UPGRADE)); michael@0: do_check_in_crash_annotation(addon1.id, a1.version); michael@0: do_check_eq(a1.scope, AddonManager.SCOPE_PROFILE); michael@0: do_check_true(a1.foreignInstall); michael@0: michael@0: do_check_neq(a2, null); michael@0: do_check_eq(a2.id, "addon2@tests.mozilla.org"); michael@0: do_check_eq(a2.version, "2.1"); michael@0: do_check_true(isExtensionInAddonsList(profileDir, a2.id)); michael@0: do_check_false(isExtensionInAddonsList(userDir, a2.id)); michael@0: do_check_false(isExtensionInAddonsList(globalDir, a2.id)); michael@0: do_check_true(hasFlag(a2.permissions, AddonManager.PERM_CAN_UNINSTALL)); michael@0: do_check_true(hasFlag(a2.permissions, AddonManager.PERM_CAN_UPGRADE)); michael@0: do_check_in_crash_annotation(addon2.id, a2.version); michael@0: do_check_eq(a2.scope, AddonManager.SCOPE_PROFILE); michael@0: do_check_true(a2.foreignInstall); michael@0: michael@0: do_check_eq(a3, null); michael@0: do_check_false(isExtensionInAddonsList(profileDir, "addon3@tests.mozilla.org")); michael@0: do_check_not_in_crash_annotation(addon3.id, addon3.version); michael@0: michael@0: do_check_eq(a4, null); michael@0: do_check_false(isExtensionInAddonsList(profileDir, "addon4@tests.mozilla.org")); michael@0: michael@0: do_check_eq(a5, null); michael@0: do_check_false(isExtensionInAddonsList(profileDir, "addon5@tests.mozilla.org")); michael@0: michael@0: do_execute_soon(run_test_3); michael@0: }); michael@0: } michael@0: michael@0: // Check that removing items from the profile reveals their hidden versions. michael@0: function run_test_3() { michael@0: var dest = profileDir.clone(); michael@0: dest.append(do_get_expected_addon_name("addon1@tests.mozilla.org")); michael@0: dest.remove(true); michael@0: dest = profileDir.clone(); michael@0: dest.append(do_get_expected_addon_name("addon2@tests.mozilla.org")); michael@0: dest.remove(true); michael@0: writeInstallRDFForExtension(addon3, profileDir, "addon4@tests.mozilla.org"); michael@0: michael@0: gCachePurged = false; michael@0: restartManager(); michael@0: check_startup_changes(AddonManager.STARTUP_CHANGE_INSTALLED, []); michael@0: check_startup_changes(AddonManager.STARTUP_CHANGE_CHANGED, ["addon1@tests.mozilla.org", michael@0: "addon2@tests.mozilla.org"]); michael@0: check_startup_changes(AddonManager.STARTUP_CHANGE_UNINSTALLED, []); michael@0: check_startup_changes(AddonManager.STARTUP_CHANGE_DISABLED, []); michael@0: check_startup_changes(AddonManager.STARTUP_CHANGE_ENABLED, []); michael@0: do_check_true(gCachePurged); michael@0: michael@0: AddonManager.getAddonsByIDs(["addon1@tests.mozilla.org", michael@0: "addon2@tests.mozilla.org", michael@0: "addon3@tests.mozilla.org", michael@0: "addon4@tests.mozilla.org", michael@0: "addon5@tests.mozilla.org"], michael@0: function([a1, a2, a3, a4, a5]) { michael@0: michael@0: do_check_neq(a1, null); michael@0: do_check_eq(a1.id, "addon1@tests.mozilla.org"); michael@0: do_check_eq(a1.version, "1.1"); michael@0: do_check_false(isExtensionInAddonsList(profileDir, a1.id)); michael@0: do_check_true(isExtensionInAddonsList(userDir, a1.id)); michael@0: do_check_false(hasFlag(a1.permissions, AddonManager.PERM_CAN_UNINSTALL)); michael@0: do_check_false(hasFlag(a1.permissions, AddonManager.PERM_CAN_UPGRADE)); michael@0: do_check_in_crash_annotation(addon1.id, a1.version); michael@0: do_check_eq(a1.scope, AddonManager.SCOPE_USER); michael@0: michael@0: do_check_neq(a2, null); michael@0: do_check_eq(a2.id, "addon2@tests.mozilla.org"); michael@0: do_check_eq(a2.version, "2.3"); michael@0: do_check_false(isExtensionInAddonsList(profileDir, a2.id)); michael@0: do_check_true(isExtensionInAddonsList(userDir, a2.id)); michael@0: do_check_false(isExtensionInAddonsList(globalDir, a2.id)); michael@0: do_check_false(hasFlag(a2.permissions, AddonManager.PERM_CAN_UNINSTALL)); michael@0: do_check_false(hasFlag(a2.permissions, AddonManager.PERM_CAN_UPGRADE)); michael@0: do_check_in_crash_annotation(addon2.id, a2.version); michael@0: do_check_eq(a2.scope, AddonManager.SCOPE_USER); michael@0: michael@0: do_check_eq(a3, null); michael@0: do_check_false(isExtensionInAddonsList(profileDir, "addon3@tests.mozilla.org")); michael@0: michael@0: do_check_eq(a4, null); michael@0: do_check_false(isExtensionInAddonsList(profileDir, "addon4@tests.mozilla.org")); michael@0: michael@0: do_check_eq(a5, null); michael@0: do_check_false(isExtensionInAddonsList(profileDir, "addon5@tests.mozilla.org")); michael@0: michael@0: dest = profileDir.clone(); michael@0: dest.append(do_get_expected_addon_name("addon4@tests.mozilla.org")); michael@0: do_check_false(dest.exists()); michael@0: michael@0: do_execute_soon(run_test_4); michael@0: }); michael@0: } michael@0: michael@0: // Test that disabling an install location works michael@0: function run_test_4() { michael@0: Services.prefs.setIntPref("extensions.enabledScopes", AddonManager.SCOPE_SYSTEM); michael@0: michael@0: gCachePurged = false; michael@0: restartManager(); michael@0: check_startup_changes(AddonManager.STARTUP_CHANGE_INSTALLED, []); michael@0: check_startup_changes(AddonManager.STARTUP_CHANGE_CHANGED, ["addon2@tests.mozilla.org"]); michael@0: check_startup_changes(AddonManager.STARTUP_CHANGE_UNINSTALLED, ["addon1@tests.mozilla.org"]); michael@0: check_startup_changes(AddonManager.STARTUP_CHANGE_DISABLED, []); michael@0: check_startup_changes(AddonManager.STARTUP_CHANGE_ENABLED, []); michael@0: do_check_true(gCachePurged); michael@0: michael@0: AddonManager.getAddonsByIDs(["addon1@tests.mozilla.org", michael@0: "addon2@tests.mozilla.org", michael@0: "addon3@tests.mozilla.org", michael@0: "addon4@tests.mozilla.org", michael@0: "addon5@tests.mozilla.org"], michael@0: function([a1, a2, a3, a4, a5]) { michael@0: michael@0: do_check_eq(a1, null); michael@0: do_check_false(isExtensionInAddonsList(profileDir, "addon1@tests.mozilla.org")); michael@0: do_check_false(isExtensionInAddonsList(userDir, "addon1@tests.mozilla.org")); michael@0: michael@0: do_check_neq(a2, null); michael@0: do_check_eq(a2.id, "addon2@tests.mozilla.org"); michael@0: do_check_eq(a2.version, "2.2"); michael@0: do_check_false(isExtensionInAddonsList(profileDir, a2.id)); michael@0: do_check_false(isExtensionInAddonsList(userDir, a2.id)); michael@0: do_check_true(isExtensionInAddonsList(globalDir, a2.id)); michael@0: do_check_false(hasFlag(a2.permissions, AddonManager.PERM_CAN_UNINSTALL)); michael@0: do_check_false(hasFlag(a2.permissions, AddonManager.PERM_CAN_UPGRADE)); michael@0: do_check_in_crash_annotation(addon2.id, a2.version); michael@0: do_check_eq(a2.scope, AddonManager.SCOPE_SYSTEM); michael@0: michael@0: do_execute_soon(run_test_5); michael@0: }); michael@0: } michael@0: michael@0: // Switching disabled locations works michael@0: function run_test_5() { michael@0: Services.prefs.setIntPref("extensions.enabledScopes", AddonManager.SCOPE_USER); michael@0: michael@0: gCachePurged = false; michael@0: restartManager(); michael@0: check_startup_changes(AddonManager.STARTUP_CHANGE_INSTALLED, ["addon1@tests.mozilla.org"]); michael@0: check_startup_changes(AddonManager.STARTUP_CHANGE_CHANGED, ["addon2@tests.mozilla.org"]); michael@0: check_startup_changes(AddonManager.STARTUP_CHANGE_UNINSTALLED, []); michael@0: check_startup_changes(AddonManager.STARTUP_CHANGE_DISABLED, []); michael@0: check_startup_changes(AddonManager.STARTUP_CHANGE_ENABLED, []); michael@0: do_check_true(gCachePurged); michael@0: michael@0: AddonManager.getAddonsByIDs(["addon1@tests.mozilla.org", michael@0: "addon2@tests.mozilla.org", michael@0: "addon3@tests.mozilla.org", michael@0: "addon4@tests.mozilla.org", michael@0: "addon5@tests.mozilla.org"], michael@0: function([a1, a2, a3, a4, a5]) { michael@0: michael@0: do_check_neq(a1, null); michael@0: do_check_eq(a1.id, "addon1@tests.mozilla.org"); michael@0: do_check_eq(a1.version, "1.1"); michael@0: do_check_false(isExtensionInAddonsList(profileDir, a1.id)); michael@0: do_check_true(isExtensionInAddonsList(userDir, a1.id)); michael@0: do_check_false(hasFlag(a1.permissions, AddonManager.PERM_CAN_UNINSTALL)); michael@0: do_check_false(hasFlag(a1.permissions, AddonManager.PERM_CAN_UPGRADE)); michael@0: do_check_in_crash_annotation(addon1.id, a1.version); michael@0: do_check_eq(a1.scope, AddonManager.SCOPE_USER); michael@0: michael@0: do_check_neq(a2, null); michael@0: do_check_eq(a2.id, "addon2@tests.mozilla.org"); michael@0: do_check_eq(a2.version, "2.3"); michael@0: do_check_false(isExtensionInAddonsList(profileDir, a2.id)); michael@0: do_check_true(isExtensionInAddonsList(userDir, a2.id)); michael@0: do_check_false(isExtensionInAddonsList(globalDir, a2.id)); michael@0: do_check_false(hasFlag(a2.permissions, AddonManager.PERM_CAN_UNINSTALL)); michael@0: do_check_false(hasFlag(a2.permissions, AddonManager.PERM_CAN_UPGRADE)); michael@0: do_check_in_crash_annotation(addon2.id, a2.version); michael@0: do_check_eq(a2.scope, AddonManager.SCOPE_USER); michael@0: michael@0: do_execute_soon(run_test_6); michael@0: }); michael@0: } michael@0: michael@0: // Resetting the pref makes everything visible again michael@0: function run_test_6() { michael@0: Services.prefs.clearUserPref("extensions.enabledScopes"); michael@0: michael@0: gCachePurged = false; michael@0: restartManager(); michael@0: check_startup_changes(AddonManager.STARTUP_CHANGE_INSTALLED, []); michael@0: check_startup_changes(AddonManager.STARTUP_CHANGE_CHANGED, []); michael@0: check_startup_changes(AddonManager.STARTUP_CHANGE_UNINSTALLED, []); michael@0: check_startup_changes(AddonManager.STARTUP_CHANGE_DISABLED, []); michael@0: check_startup_changes(AddonManager.STARTUP_CHANGE_ENABLED, []); michael@0: do_check_true(gCachePurged); michael@0: michael@0: AddonManager.getAddonsByIDs(["addon1@tests.mozilla.org", michael@0: "addon2@tests.mozilla.org", michael@0: "addon3@tests.mozilla.org", michael@0: "addon4@tests.mozilla.org", michael@0: "addon5@tests.mozilla.org"], michael@0: function([a1, a2, a3, a4, a5]) { michael@0: michael@0: do_check_neq(a1, null); michael@0: do_check_eq(a1.id, "addon1@tests.mozilla.org"); michael@0: do_check_eq(a1.version, "1.1"); michael@0: do_check_false(isExtensionInAddonsList(profileDir, a1.id)); michael@0: do_check_true(isExtensionInAddonsList(userDir, a1.id)); michael@0: do_check_false(hasFlag(a1.permissions, AddonManager.PERM_CAN_UNINSTALL)); michael@0: do_check_false(hasFlag(a1.permissions, AddonManager.PERM_CAN_UPGRADE)); michael@0: do_check_in_crash_annotation(addon1.id, a1.version); michael@0: do_check_eq(a1.scope, AddonManager.SCOPE_USER); michael@0: michael@0: do_check_neq(a2, null); michael@0: do_check_eq(a2.id, "addon2@tests.mozilla.org"); michael@0: do_check_eq(a2.version, "2.3"); michael@0: do_check_false(isExtensionInAddonsList(profileDir, a2.id)); michael@0: do_check_true(isExtensionInAddonsList(userDir, a2.id)); michael@0: do_check_false(isExtensionInAddonsList(globalDir, a2.id)); michael@0: do_check_false(hasFlag(a2.permissions, AddonManager.PERM_CAN_UNINSTALL)); michael@0: do_check_false(hasFlag(a2.permissions, AddonManager.PERM_CAN_UPGRADE)); michael@0: do_check_in_crash_annotation(addon2.id, a2.version); michael@0: do_check_eq(a2.scope, AddonManager.SCOPE_USER); michael@0: michael@0: do_execute_soon(run_test_7); michael@0: }); michael@0: } michael@0: michael@0: // Check that items in the profile hide the others again. michael@0: function run_test_7() { michael@0: addon1.version = "1.2"; michael@0: writeInstallRDFForExtension(addon1, profileDir); michael@0: var dest = userDir.clone(); michael@0: dest.append(do_get_expected_addon_name("addon2@tests.mozilla.org")); michael@0: dest.remove(true); michael@0: michael@0: gCachePurged = false; michael@0: restartManager(); michael@0: check_startup_changes(AddonManager.STARTUP_CHANGE_INSTALLED, []); michael@0: check_startup_changes(AddonManager.STARTUP_CHANGE_CHANGED, ["addon1@tests.mozilla.org", michael@0: "addon2@tests.mozilla.org"]); michael@0: check_startup_changes(AddonManager.STARTUP_CHANGE_UNINSTALLED, []); michael@0: check_startup_changes(AddonManager.STARTUP_CHANGE_DISABLED, []); michael@0: check_startup_changes(AddonManager.STARTUP_CHANGE_ENABLED, []); michael@0: do_check_true(gCachePurged); michael@0: michael@0: AddonManager.getAddonsByIDs(["addon1@tests.mozilla.org", michael@0: "addon2@tests.mozilla.org", michael@0: "addon3@tests.mozilla.org", michael@0: "addon4@tests.mozilla.org", michael@0: "addon5@tests.mozilla.org"], michael@0: function([a1, a2, a3, a4, a5]) { michael@0: michael@0: do_check_neq(a1, null); michael@0: do_check_eq(a1.id, "addon1@tests.mozilla.org"); michael@0: do_check_eq(a1.version, "1.2"); michael@0: do_check_true(isExtensionInAddonsList(profileDir, a1.id)); michael@0: do_check_false(isExtensionInAddonsList(userDir, a1.id)); michael@0: do_check_true(hasFlag(a1.permissions, AddonManager.PERM_CAN_UNINSTALL)); michael@0: do_check_true(hasFlag(a1.permissions, AddonManager.PERM_CAN_UPGRADE)); michael@0: do_check_in_crash_annotation(addon1.id, a1.version); michael@0: do_check_eq(a1.scope, AddonManager.SCOPE_PROFILE); michael@0: michael@0: do_check_neq(a2, null); michael@0: do_check_eq(a2.id, "addon2@tests.mozilla.org"); michael@0: do_check_eq(a2.version, "2.2"); michael@0: do_check_false(isExtensionInAddonsList(profileDir, a2.id)); michael@0: do_check_false(isExtensionInAddonsList(userDir, a2.id)); michael@0: do_check_true(isExtensionInAddonsList(globalDir, a2.id)); michael@0: do_check_false(hasFlag(a2.permissions, AddonManager.PERM_CAN_UNINSTALL)); michael@0: do_check_false(hasFlag(a2.permissions, AddonManager.PERM_CAN_UPGRADE)); michael@0: do_check_in_crash_annotation(addon2.id, a2.version); michael@0: do_check_eq(a2.scope, AddonManager.SCOPE_SYSTEM); michael@0: michael@0: do_check_eq(a3, null); michael@0: do_check_false(isExtensionInAddonsList(profileDir, "addon3@tests.mozilla.org")); michael@0: michael@0: do_check_eq(a4, null); michael@0: do_check_false(isExtensionInAddonsList(profileDir, "addon4@tests.mozilla.org")); michael@0: michael@0: do_check_eq(a5, null); michael@0: do_check_false(isExtensionInAddonsList(profileDir, "addon5@tests.mozilla.org")); michael@0: michael@0: do_execute_soon(run_test_8); michael@0: }); michael@0: } michael@0: michael@0: // Disabling all locations still leaves the profile working michael@0: function run_test_8() { michael@0: Services.prefs.setIntPref("extensions.enabledScopes", 0); michael@0: michael@0: gCachePurged = false; michael@0: restartManager(); michael@0: check_startup_changes(AddonManager.STARTUP_CHANGE_INSTALLED, []); michael@0: check_startup_changes(AddonManager.STARTUP_CHANGE_CHANGED, []); michael@0: check_startup_changes(AddonManager.STARTUP_CHANGE_UNINSTALLED, ["addon2@tests.mozilla.org"]); michael@0: check_startup_changes(AddonManager.STARTUP_CHANGE_DISABLED, []); michael@0: check_startup_changes(AddonManager.STARTUP_CHANGE_ENABLED, []); michael@0: do_check_true(gCachePurged); michael@0: michael@0: AddonManager.getAddonsByIDs(["addon1@tests.mozilla.org", michael@0: "addon2@tests.mozilla.org", michael@0: "addon3@tests.mozilla.org", michael@0: "addon4@tests.mozilla.org", michael@0: "addon5@tests.mozilla.org"], michael@0: function([a1, a2, a3, a4, a5]) { michael@0: michael@0: do_check_neq(a1, null); michael@0: do_check_eq(a1.id, "addon1@tests.mozilla.org"); michael@0: do_check_eq(a1.version, "1.2"); michael@0: do_check_true(isExtensionInAddonsList(profileDir, a1.id)); michael@0: do_check_false(isExtensionInAddonsList(userDir, a1.id)); michael@0: do_check_true(hasFlag(a1.permissions, AddonManager.PERM_CAN_UNINSTALL)); michael@0: do_check_true(hasFlag(a1.permissions, AddonManager.PERM_CAN_UPGRADE)); michael@0: do_check_in_crash_annotation(addon1.id, a1.version); michael@0: do_check_eq(a1.scope, AddonManager.SCOPE_PROFILE); michael@0: michael@0: do_check_eq(a2, null); michael@0: do_check_false(isExtensionInAddonsList(profileDir, "addon2@tests.mozilla.org")); michael@0: do_check_false(isExtensionInAddonsList(userDir, "addon2@tests.mozilla.org")); michael@0: do_check_false(isExtensionInAddonsList(globalDir, "addon2@tests.mozilla.org")); michael@0: michael@0: do_execute_soon(run_test_9); michael@0: }); michael@0: } michael@0: michael@0: // More hiding and revealing michael@0: function run_test_9() { michael@0: Services.prefs.clearUserPref("extensions.enabledScopes", 0); michael@0: michael@0: var dest = userDir.clone(); michael@0: dest.append(do_get_expected_addon_name("addon1@tests.mozilla.org")); michael@0: dest.remove(true); michael@0: dest = globalDir.clone(); michael@0: dest.append(do_get_expected_addon_name("addon2@tests.mozilla.org")); michael@0: dest.remove(true); michael@0: addon2.version = "2.4"; michael@0: writeInstallRDFForExtension(addon2, profileDir); michael@0: michael@0: gCachePurged = false; michael@0: restartManager(); michael@0: check_startup_changes(AddonManager.STARTUP_CHANGE_INSTALLED, ["addon2@tests.mozilla.org"]); michael@0: check_startup_changes(AddonManager.STARTUP_CHANGE_CHANGED, []); michael@0: check_startup_changes(AddonManager.STARTUP_CHANGE_UNINSTALLED, []); michael@0: check_startup_changes(AddonManager.STARTUP_CHANGE_DISABLED, []); michael@0: check_startup_changes(AddonManager.STARTUP_CHANGE_ENABLED, []); michael@0: do_check_true(gCachePurged); michael@0: michael@0: AddonManager.getAddonsByIDs(["addon1@tests.mozilla.org", michael@0: "addon2@tests.mozilla.org", michael@0: "addon3@tests.mozilla.org", michael@0: "addon4@tests.mozilla.org", michael@0: "addon5@tests.mozilla.org"], michael@0: function([a1, a2, a3, a4, a5]) { michael@0: michael@0: do_check_neq(a1, null); michael@0: do_check_eq(a1.id, "addon1@tests.mozilla.org"); michael@0: do_check_eq(a1.version, "1.2"); michael@0: do_check_true(isExtensionInAddonsList(profileDir, a1.id)); michael@0: do_check_false(isExtensionInAddonsList(userDir, a1.id)); michael@0: do_check_true(hasFlag(a1.permissions, AddonManager.PERM_CAN_UNINSTALL)); michael@0: do_check_true(hasFlag(a1.permissions, AddonManager.PERM_CAN_UPGRADE)); michael@0: do_check_eq(a1.scope, AddonManager.SCOPE_PROFILE); michael@0: michael@0: do_check_neq(a2, null); michael@0: do_check_eq(a2.id, "addon2@tests.mozilla.org"); michael@0: do_check_eq(a2.version, "2.4"); michael@0: do_check_true(isExtensionInAddonsList(profileDir, a2.id)); michael@0: do_check_false(isExtensionInAddonsList(userDir, a2.id)); michael@0: do_check_false(isExtensionInAddonsList(globalDir, a2.id)); michael@0: do_check_true(hasFlag(a2.permissions, AddonManager.PERM_CAN_UNINSTALL)); michael@0: do_check_true(hasFlag(a2.permissions, AddonManager.PERM_CAN_UPGRADE)); michael@0: do_check_eq(a2.scope, AddonManager.SCOPE_PROFILE); michael@0: michael@0: do_check_eq(a3, null); michael@0: do_check_false(isExtensionInAddonsList(profileDir, "addon3@tests.mozilla.org")); michael@0: michael@0: do_check_eq(a4, null); michael@0: do_check_false(isExtensionInAddonsList(profileDir, "addon4@tests.mozilla.org")); michael@0: michael@0: do_check_eq(a5, null); michael@0: do_check_false(isExtensionInAddonsList(profileDir, "addon5@tests.mozilla.org")); michael@0: michael@0: do_execute_soon(run_test_10); michael@0: }); michael@0: } michael@0: michael@0: // Checks that a removal from one location and an addition in another location michael@0: // for the same item is handled michael@0: function run_test_10() { michael@0: var dest = profileDir.clone(); michael@0: dest.append(do_get_expected_addon_name("addon1@tests.mozilla.org")); michael@0: dest.remove(true); michael@0: addon1.version = "1.3"; michael@0: writeInstallRDFForExtension(addon1, userDir); michael@0: michael@0: gCachePurged = false; michael@0: restartManager(); michael@0: check_startup_changes(AddonManager.STARTUP_CHANGE_INSTALLED, []); michael@0: check_startup_changes(AddonManager.STARTUP_CHANGE_CHANGED, ["addon1@tests.mozilla.org"]); michael@0: check_startup_changes(AddonManager.STARTUP_CHANGE_UNINSTALLED, []); michael@0: check_startup_changes(AddonManager.STARTUP_CHANGE_DISABLED, []); michael@0: check_startup_changes(AddonManager.STARTUP_CHANGE_ENABLED, []); michael@0: do_check_true(gCachePurged); michael@0: michael@0: AddonManager.getAddonsByIDs(["addon1@tests.mozilla.org", michael@0: "addon2@tests.mozilla.org", michael@0: "addon3@tests.mozilla.org", michael@0: "addon4@tests.mozilla.org", michael@0: "addon5@tests.mozilla.org"], michael@0: function([a1, a2, a3, a4, a5]) { michael@0: michael@0: do_check_neq(a1, null); michael@0: do_check_eq(a1.id, "addon1@tests.mozilla.org"); michael@0: do_check_eq(a1.version, "1.3"); michael@0: do_check_false(isExtensionInAddonsList(profileDir, a1.id)); michael@0: do_check_true(isExtensionInAddonsList(userDir, a1.id)); michael@0: do_check_false(hasFlag(a1.permissions, AddonManager.PERM_CAN_UNINSTALL)); michael@0: do_check_false(hasFlag(a1.permissions, AddonManager.PERM_CAN_UPGRADE)); michael@0: do_check_eq(a1.scope, AddonManager.SCOPE_USER); michael@0: michael@0: do_check_neq(a2, null); michael@0: do_check_eq(a2.id, "addon2@tests.mozilla.org"); michael@0: do_check_eq(a2.version, "2.4"); michael@0: do_check_true(isExtensionInAddonsList(profileDir, a2.id)); michael@0: do_check_false(isExtensionInAddonsList(userDir, a2.id)); michael@0: do_check_false(isExtensionInAddonsList(globalDir, a2.id)); michael@0: do_check_true(hasFlag(a2.permissions, AddonManager.PERM_CAN_UNINSTALL)); michael@0: do_check_true(hasFlag(a2.permissions, AddonManager.PERM_CAN_UPGRADE)); michael@0: do_check_eq(a2.scope, AddonManager.SCOPE_PROFILE); michael@0: michael@0: do_check_eq(a3, null); michael@0: do_check_false(isExtensionInAddonsList(profileDir, "addon3@tests.mozilla.org")); michael@0: michael@0: do_check_eq(a4, null); michael@0: do_check_false(isExtensionInAddonsList(profileDir, "addon4@tests.mozilla.org")); michael@0: michael@0: do_check_eq(a5, null); michael@0: do_check_false(isExtensionInAddonsList(profileDir, "addon5@tests.mozilla.org")); michael@0: michael@0: do_execute_soon(run_test_11); michael@0: }); michael@0: } michael@0: michael@0: // This should remove any remaining items michael@0: function run_test_11() { michael@0: var dest = userDir.clone(); michael@0: dest.append(do_get_expected_addon_name("addon1@tests.mozilla.org")); michael@0: dest.remove(true); michael@0: dest = profileDir.clone(); michael@0: dest.append(do_get_expected_addon_name("addon2@tests.mozilla.org")); michael@0: dest.remove(true); michael@0: michael@0: gCachePurged = false; michael@0: restartManager(); michael@0: check_startup_changes(AddonManager.STARTUP_CHANGE_INSTALLED, []); michael@0: check_startup_changes(AddonManager.STARTUP_CHANGE_CHANGED, []); michael@0: check_startup_changes(AddonManager.STARTUP_CHANGE_UNINSTALLED, ["addon1@tests.mozilla.org", michael@0: "addon2@tests.mozilla.org"]); michael@0: check_startup_changes(AddonManager.STARTUP_CHANGE_DISABLED, []); michael@0: check_startup_changes(AddonManager.STARTUP_CHANGE_ENABLED, []); michael@0: do_check_true(gCachePurged); michael@0: michael@0: AddonManager.getAddonsByIDs(["addon1@tests.mozilla.org", michael@0: "addon2@tests.mozilla.org", michael@0: "addon3@tests.mozilla.org", michael@0: "addon4@tests.mozilla.org", michael@0: "addon5@tests.mozilla.org"], michael@0: function([a1, a2, a3, a4, a5]) { michael@0: michael@0: do_check_eq(a1, null); michael@0: do_check_eq(a2, null); michael@0: do_check_eq(a3, null); michael@0: do_check_eq(a4, null); michael@0: do_check_eq(a5, null); michael@0: do_check_false(isExtensionInAddonsList(profileDir, "addon1@tests.mozilla.org")); michael@0: do_check_false(isExtensionInAddonsList(profileDir, "addon2@tests.mozilla.org")); michael@0: do_check_false(isExtensionInAddonsList(profileDir, "addon3@tests.mozilla.org")); michael@0: do_check_false(isExtensionInAddonsList(profileDir, "addon4@tests.mozilla.org")); michael@0: do_check_false(isExtensionInAddonsList(profileDir, "addon5@tests.mozilla.org")); michael@0: do_check_false(isExtensionInAddonsList(userDir, "addon1@tests.mozilla.org")); michael@0: do_check_false(isExtensionInAddonsList(userDir, "addon2@tests.mozilla.org")); michael@0: do_check_false(isExtensionInAddonsList(userDir, "addon3@tests.mozilla.org")); michael@0: do_check_false(isExtensionInAddonsList(userDir, "addon4@tests.mozilla.org")); michael@0: do_check_false(isExtensionInAddonsList(userDir, "addon5@tests.mozilla.org")); michael@0: do_check_false(isExtensionInAddonsList(globalDir, "addon1@tests.mozilla.org")); michael@0: do_check_false(isExtensionInAddonsList(globalDir, "addon2@tests.mozilla.org")); michael@0: do_check_false(isExtensionInAddonsList(globalDir, "addon3@tests.mozilla.org")); michael@0: do_check_false(isExtensionInAddonsList(globalDir, "addon4@tests.mozilla.org")); michael@0: do_check_false(isExtensionInAddonsList(globalDir, "addon5@tests.mozilla.org")); michael@0: do_check_not_in_crash_annotation(addon1.id, addon1.version); michael@0: do_check_not_in_crash_annotation(addon2.id, addon2.version); michael@0: michael@0: do_execute_soon(run_test_12); michael@0: }); michael@0: } michael@0: michael@0: // Test that auto-disabling for specific scopes works michael@0: function run_test_12() { michael@0: Services.prefs.setIntPref("extensions.autoDisableScopes", AddonManager.SCOPE_USER); michael@0: michael@0: writeInstallRDFForExtension(addon1, profileDir); michael@0: writeInstallRDFForExtension(addon2, userDir); michael@0: writeInstallRDFForExtension(addon3, globalDir); michael@0: michael@0: restartManager(); michael@0: michael@0: AddonManager.getAddonsByIDs(["addon1@tests.mozilla.org", michael@0: "addon2@tests.mozilla.org", michael@0: "addon3@tests.mozilla.org", michael@0: "addon4@tests.mozilla.org", michael@0: "addon5@tests.mozilla.org"], michael@0: callback_soon(function([a1, a2, a3, a4, a5]) { michael@0: do_check_neq(a1, null); michael@0: do_check_false(a1.userDisabled); michael@0: do_check_true(a1.isActive); michael@0: michael@0: do_check_neq(a2, null); michael@0: do_check_true(a2.userDisabled); michael@0: do_check_false(a2.isActive); michael@0: michael@0: do_check_neq(a3, null); michael@0: do_check_false(a3.userDisabled); michael@0: do_check_true(a3.isActive); michael@0: michael@0: var dest = profileDir.clone(); michael@0: dest.append(do_get_expected_addon_name("addon1@tests.mozilla.org")); michael@0: dest.remove(true); michael@0: dest = userDir.clone(); michael@0: dest.append(do_get_expected_addon_name("addon2@tests.mozilla.org")); michael@0: dest.remove(true); michael@0: dest = globalDir.clone(); michael@0: dest.append(do_get_expected_addon_name("addon3@tests.mozilla.org")); michael@0: dest.remove(true); michael@0: michael@0: restartManager(); michael@0: michael@0: Services.prefs.setIntPref("extensions.autoDisableScopes", AddonManager.SCOPE_SYSTEM); michael@0: michael@0: writeInstallRDFForExtension(addon1, profileDir); michael@0: writeInstallRDFForExtension(addon2, userDir); michael@0: writeInstallRDFForExtension(addon3, globalDir); michael@0: michael@0: restartManager(); michael@0: michael@0: AddonManager.getAddonsByIDs(["addon1@tests.mozilla.org", michael@0: "addon2@tests.mozilla.org", michael@0: "addon3@tests.mozilla.org", michael@0: "addon4@tests.mozilla.org", michael@0: "addon5@tests.mozilla.org"], michael@0: function([a1, a2, a3, a4, a5]) { michael@0: do_check_neq(a1, null); michael@0: do_check_false(a1.userDisabled); michael@0: do_check_true(a1.isActive); michael@0: michael@0: do_check_neq(a2, null); michael@0: do_check_false(a2.userDisabled); michael@0: do_check_true(a2.isActive); michael@0: michael@0: do_check_neq(a3, null); michael@0: do_check_true(a3.userDisabled); michael@0: do_check_false(a3.isActive); michael@0: michael@0: var dest = profileDir.clone(); michael@0: dest.append(do_get_expected_addon_name("addon1@tests.mozilla.org")); michael@0: dest.remove(true); michael@0: dest = userDir.clone(); michael@0: dest.append(do_get_expected_addon_name("addon2@tests.mozilla.org")); michael@0: dest.remove(true); michael@0: dest = globalDir.clone(); michael@0: dest.append(do_get_expected_addon_name("addon3@tests.mozilla.org")); michael@0: dest.remove(true); michael@0: michael@0: restartManager(); michael@0: michael@0: Services.prefs.setIntPref("extensions.autoDisableScopes", AddonManager.SCOPE_USER + AddonManager.SCOPE_SYSTEM); michael@0: michael@0: writeInstallRDFForExtension(addon1, profileDir); michael@0: writeInstallRDFForExtension(addon2, userDir); michael@0: writeInstallRDFForExtension(addon3, globalDir); michael@0: michael@0: restartManager(); michael@0: michael@0: AddonManager.getAddonsByIDs(["addon1@tests.mozilla.org", michael@0: "addon2@tests.mozilla.org", michael@0: "addon3@tests.mozilla.org", michael@0: "addon4@tests.mozilla.org", michael@0: "addon5@tests.mozilla.org"], michael@0: function([a1, a2, a3, a4, a5]) { michael@0: do_check_neq(a1, null); michael@0: do_check_false(a1.userDisabled); michael@0: do_check_true(a1.isActive); michael@0: michael@0: do_check_neq(a2, null); michael@0: do_check_true(a2.userDisabled); michael@0: do_check_false(a2.isActive); michael@0: michael@0: do_check_neq(a3, null); michael@0: do_check_true(a3.userDisabled); michael@0: do_check_false(a3.isActive); michael@0: michael@0: do_execute_soon(end_test); michael@0: }); michael@0: }); michael@0: })); michael@0: }