michael@0: /* Any copyright is dedicated to the Public Domain. michael@0: http://creativecommons.org/publicdomain/zero/1.0/ */ michael@0: michael@0: // Tests the preference-related properties of AddonManager michael@0: // eg: AddonManager.checkCompatibility, AddonManager.updateEnabled, etc michael@0: michael@0: var gManagerEventsListener = { michael@0: seenEvents: [], michael@0: init: function() { michael@0: let events = ["onCompatibilityModeChanged", "onCheckUpdateSecurityChanged", michael@0: "onUpdateModeChanged"]; michael@0: events.forEach(function(aEvent) { michael@0: this[aEvent] = function() { michael@0: do_print("Saw event " + aEvent); michael@0: this.seenEvents.push(aEvent); michael@0: } michael@0: }, this); michael@0: AddonManager.addManagerListener(this); michael@0: // Try to add twice, to test that the second time silently fails. michael@0: AddonManager.addManagerListener(this); michael@0: }, michael@0: shutdown: function() { michael@0: AddonManager.removeManagerListener(this); michael@0: }, michael@0: expect: function(aEvents) { michael@0: this.expectedEvents = aEvents; michael@0: }, michael@0: checkExpected: function() { michael@0: do_print("Checking expected events..."); michael@0: while (this.expectedEvents.length > 0) { michael@0: let event = this.expectedEvents.pop(); michael@0: do_print("Looking for expected event " + event); michael@0: let matchingEvents = this.seenEvents.filter(function(aSeenEvent) { michael@0: return aSeenEvent == event; michael@0: }); michael@0: do_check_eq(matchingEvents.length, 1); michael@0: } michael@0: this.seenEvents = []; michael@0: } michael@0: } michael@0: michael@0: function run_test() { michael@0: createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "1", "1.9.2"); michael@0: michael@0: Services.prefs.setBoolPref("extensions.update.enabled", true); michael@0: Services.prefs.setBoolPref("extensions.update.autoUpdateDefault", true); michael@0: Services.prefs.setBoolPref("extensions.strictCompatibility", true); michael@0: Services.prefs.setBoolPref("extensions.checkUpdatesecurity", true); michael@0: michael@0: startupManager(); michael@0: gManagerEventsListener.init(); michael@0: michael@0: michael@0: // AddonManager.updateEnabled michael@0: gManagerEventsListener.expect(["onUpdateModeChanged"]); michael@0: AddonManager.updateEnabled = false; michael@0: gManagerEventsListener.checkExpected(); michael@0: do_check_false(AddonManager.updateEnabled); michael@0: do_check_false(Services.prefs.getBoolPref("extensions.update.enabled")); michael@0: michael@0: gManagerEventsListener.expect([]); michael@0: AddonManager.updateEnabled = false; michael@0: gManagerEventsListener.checkExpected(); michael@0: do_check_false(AddonManager.updateEnabled); michael@0: do_check_false(Services.prefs.getBoolPref("extensions.update.enabled")); michael@0: michael@0: gManagerEventsListener.expect(["onUpdateModeChanged"]); michael@0: AddonManager.updateEnabled = true; michael@0: gManagerEventsListener.checkExpected(); michael@0: do_check_true(AddonManager.updateEnabled); michael@0: do_check_true(Services.prefs.getBoolPref("extensions.update.enabled")); michael@0: michael@0: gManagerEventsListener.expect([]); michael@0: AddonManager.updateEnabled = true; michael@0: gManagerEventsListener.checkExpected(); michael@0: do_check_true(AddonManager.updateEnabled); michael@0: do_check_true(Services.prefs.getBoolPref("extensions.update.enabled")); michael@0: michael@0: // AddonManager.autoUpdateDefault michael@0: gManagerEventsListener.expect(["onUpdateModeChanged"]); michael@0: AddonManager.autoUpdateDefault = false; michael@0: gManagerEventsListener.checkExpected(); michael@0: do_check_false(AddonManager.autoUpdateDefault); michael@0: do_check_false(Services.prefs.getBoolPref("extensions.update.autoUpdateDefault")); michael@0: michael@0: gManagerEventsListener.expect([]); michael@0: AddonManager.autoUpdateDefault = false; michael@0: gManagerEventsListener.checkExpected(); michael@0: do_check_false(AddonManager.autoUpdateDefault); michael@0: do_check_false(Services.prefs.getBoolPref("extensions.update.autoUpdateDefault")); michael@0: michael@0: gManagerEventsListener.expect(["onUpdateModeChanged"]); michael@0: AddonManager.autoUpdateDefault = true; michael@0: gManagerEventsListener.checkExpected(); michael@0: do_check_true(AddonManager.autoUpdateDefault); michael@0: do_check_true(Services.prefs.getBoolPref("extensions.update.autoUpdateDefault")); michael@0: michael@0: gManagerEventsListener.expect([]); michael@0: AddonManager.autoUpdateDefault = true; michael@0: gManagerEventsListener.checkExpected(); michael@0: do_check_true(AddonManager.autoUpdateDefault); michael@0: do_check_true(Services.prefs.getBoolPref("extensions.update.autoUpdateDefault")); michael@0: michael@0: // AddonManager.strictCompatibility michael@0: gManagerEventsListener.expect(["onCompatibilityModeChanged"]); michael@0: AddonManager.strictCompatibility = false; michael@0: gManagerEventsListener.checkExpected(); michael@0: do_check_false(AddonManager.strictCompatibility); michael@0: do_check_false(Services.prefs.getBoolPref("extensions.strictCompatibility")); michael@0: michael@0: gManagerEventsListener.expect([]); michael@0: AddonManager.strictCompatibility = false; michael@0: gManagerEventsListener.checkExpected(); michael@0: do_check_false(AddonManager.strictCompatibility); michael@0: do_check_false(Services.prefs.getBoolPref("extensions.strictCompatibility")); michael@0: michael@0: gManagerEventsListener.expect(["onCompatibilityModeChanged"]); michael@0: AddonManager.strictCompatibility = true; michael@0: gManagerEventsListener.checkExpected(); michael@0: do_check_true(AddonManager.strictCompatibility); michael@0: do_check_true(Services.prefs.getBoolPref("extensions.strictCompatibility")); michael@0: michael@0: gManagerEventsListener.expect([]); michael@0: AddonManager.strictCompatibility = true; michael@0: gManagerEventsListener.checkExpected(); michael@0: do_check_true(AddonManager.strictCompatibility); michael@0: do_check_true(Services.prefs.getBoolPref("extensions.strictCompatibility")); michael@0: michael@0: michael@0: // AddonManager.checkCompatibility michael@0: if (isNightlyChannel()) { michael@0: var version = "nightly"; michael@0: } else { michael@0: version = Services.appinfo.version.replace(/^([^\.]+\.[0-9]+[a-z]*).*/gi, "$1"); michael@0: } michael@0: const COMPATIBILITY_PREF = "extensions.checkCompatibility." + version; michael@0: michael@0: gManagerEventsListener.expect(["onCompatibilityModeChanged"]); michael@0: AddonManager.checkCompatibility = false; michael@0: gManagerEventsListener.checkExpected(); michael@0: do_check_false(AddonManager.checkCompatibility); michael@0: do_check_false(Services.prefs.getBoolPref(COMPATIBILITY_PREF)); michael@0: michael@0: gManagerEventsListener.expect([]); michael@0: AddonManager.checkCompatibility = false; michael@0: gManagerEventsListener.checkExpected(); michael@0: do_check_false(AddonManager.checkCompatibility); michael@0: do_check_false(Services.prefs.getBoolPref(COMPATIBILITY_PREF)); michael@0: michael@0: gManagerEventsListener.expect(["onCompatibilityModeChanged"]); michael@0: AddonManager.checkCompatibility = true; michael@0: gManagerEventsListener.checkExpected(); michael@0: do_check_true(AddonManager.checkCompatibility); michael@0: do_check_false(Services.prefs.prefHasUserValue(COMPATIBILITY_PREF)); michael@0: michael@0: gManagerEventsListener.expect([]); michael@0: AddonManager.checkCompatibility = true; michael@0: gManagerEventsListener.checkExpected(); michael@0: do_check_true(AddonManager.checkCompatibility); michael@0: do_check_false(Services.prefs.prefHasUserValue(COMPATIBILITY_PREF)); michael@0: michael@0: michael@0: // AddonManager.checkUpdateSecurity michael@0: gManagerEventsListener.expect(["onCheckUpdateSecurityChanged"]); michael@0: AddonManager.checkUpdateSecurity = false; michael@0: gManagerEventsListener.checkExpected(); michael@0: do_check_false(AddonManager.checkUpdateSecurity); michael@0: if (AddonManager.checkUpdateSecurityDefault) michael@0: do_check_false(Services.prefs.getBoolPref("extensions.checkUpdateSecurity")); michael@0: else michael@0: do_check_false(Services.prefs.prefHasUserValue("extensions.checkUpdateSecurity")); michael@0: michael@0: gManagerEventsListener.expect([]); michael@0: AddonManager.checkUpdateSecurity = false; michael@0: gManagerEventsListener.checkExpected(); michael@0: do_check_false(AddonManager.checkUpdateSecurity); michael@0: if (AddonManager.checkUpdateSecurityDefault) michael@0: do_check_false(Services.prefs.getBoolPref("extensions.checkUpdateSecurity")); michael@0: else michael@0: do_check_false(Services.prefs.prefHasUserValue("extensions.checkUpdateSecurity")); michael@0: michael@0: gManagerEventsListener.expect(["onCheckUpdateSecurityChanged"]); michael@0: AddonManager.checkUpdateSecurity = true; michael@0: gManagerEventsListener.checkExpected(); michael@0: do_check_true(AddonManager.checkUpdateSecurity); michael@0: if (!AddonManager.checkUpdateSecurityDefault) michael@0: do_check_true(Services.prefs.getBoolPref("extensions.checkUpdateSecurity")); michael@0: else michael@0: do_check_false(Services.prefs.prefHasUserValue("extensions.checkUpdateSecurity")); michael@0: michael@0: gManagerEventsListener.expect([]); michael@0: AddonManager.checkUpdateSecurity = true; michael@0: gManagerEventsListener.checkExpected(); michael@0: do_check_true(AddonManager.checkUpdateSecurity); michael@0: if (!AddonManager.checkUpdateSecurityDefault) michael@0: do_check_true(Services.prefs.getBoolPref("extensions.checkUpdateSecurity")); michael@0: else michael@0: do_check_false(Services.prefs.prefHasUserValue("extensions.checkUpdateSecurity")); michael@0: michael@0: gManagerEventsListener.shutdown(); michael@0: michael@0: // AddonManager.hotfixID michael@0: let hotfixID = "hotfix@tests.mozilla.org"; michael@0: Services.prefs.setCharPref("extensions.hotfix.id", hotfixID); michael@0: do_check_eq(AddonManager.hotfixID, hotfixID); michael@0: // Change the pref and make sure the property is updated michael@0: hotfixID = "hotfix2@tests.mozilla.org"; michael@0: Services.prefs.setCharPref("extensions.hotfix.id", hotfixID); michael@0: do_check_eq(AddonManager.hotfixID, hotfixID); michael@0: // Test an invalid pref value michael@0: hotfixID = 99; michael@0: Services.prefs.deleteBranch("extensions.hotfix.id"); michael@0: Services.prefs.setIntPref("extensions.hotfix.id", hotfixID); michael@0: do_check_eq(AddonManager.hotfixID, null); michael@0: Services.prefs.clearUserPref("extensions.hotfix.id"); michael@0: michael@0: // After removing the listener, ensure we get no further events. michael@0: gManagerEventsListener.expect([]); michael@0: AddonManager.updateEnabled = false; michael@0: gManagerEventsListener.checkExpected(); michael@0: }