|
1 /* Any copyright is dedicated to the Public Domain. |
|
2 http://creativecommons.org/publicdomain/zero/1.0/ */ |
|
3 |
|
4 // Tests the preference-related properties of AddonManager |
|
5 // eg: AddonManager.checkCompatibility, AddonManager.updateEnabled, etc |
|
6 |
|
7 var gManagerEventsListener = { |
|
8 seenEvents: [], |
|
9 init: function() { |
|
10 let events = ["onCompatibilityModeChanged", "onCheckUpdateSecurityChanged", |
|
11 "onUpdateModeChanged"]; |
|
12 events.forEach(function(aEvent) { |
|
13 this[aEvent] = function() { |
|
14 do_print("Saw event " + aEvent); |
|
15 this.seenEvents.push(aEvent); |
|
16 } |
|
17 }, this); |
|
18 AddonManager.addManagerListener(this); |
|
19 // Try to add twice, to test that the second time silently fails. |
|
20 AddonManager.addManagerListener(this); |
|
21 }, |
|
22 shutdown: function() { |
|
23 AddonManager.removeManagerListener(this); |
|
24 }, |
|
25 expect: function(aEvents) { |
|
26 this.expectedEvents = aEvents; |
|
27 }, |
|
28 checkExpected: function() { |
|
29 do_print("Checking expected events..."); |
|
30 while (this.expectedEvents.length > 0) { |
|
31 let event = this.expectedEvents.pop(); |
|
32 do_print("Looking for expected event " + event); |
|
33 let matchingEvents = this.seenEvents.filter(function(aSeenEvent) { |
|
34 return aSeenEvent == event; |
|
35 }); |
|
36 do_check_eq(matchingEvents.length, 1); |
|
37 } |
|
38 this.seenEvents = []; |
|
39 } |
|
40 } |
|
41 |
|
42 function run_test() { |
|
43 createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "1", "1.9.2"); |
|
44 |
|
45 Services.prefs.setBoolPref("extensions.update.enabled", true); |
|
46 Services.prefs.setBoolPref("extensions.update.autoUpdateDefault", true); |
|
47 Services.prefs.setBoolPref("extensions.strictCompatibility", true); |
|
48 Services.prefs.setBoolPref("extensions.checkUpdatesecurity", true); |
|
49 |
|
50 startupManager(); |
|
51 gManagerEventsListener.init(); |
|
52 |
|
53 |
|
54 // AddonManager.updateEnabled |
|
55 gManagerEventsListener.expect(["onUpdateModeChanged"]); |
|
56 AddonManager.updateEnabled = false; |
|
57 gManagerEventsListener.checkExpected(); |
|
58 do_check_false(AddonManager.updateEnabled); |
|
59 do_check_false(Services.prefs.getBoolPref("extensions.update.enabled")); |
|
60 |
|
61 gManagerEventsListener.expect([]); |
|
62 AddonManager.updateEnabled = false; |
|
63 gManagerEventsListener.checkExpected(); |
|
64 do_check_false(AddonManager.updateEnabled); |
|
65 do_check_false(Services.prefs.getBoolPref("extensions.update.enabled")); |
|
66 |
|
67 gManagerEventsListener.expect(["onUpdateModeChanged"]); |
|
68 AddonManager.updateEnabled = true; |
|
69 gManagerEventsListener.checkExpected(); |
|
70 do_check_true(AddonManager.updateEnabled); |
|
71 do_check_true(Services.prefs.getBoolPref("extensions.update.enabled")); |
|
72 |
|
73 gManagerEventsListener.expect([]); |
|
74 AddonManager.updateEnabled = true; |
|
75 gManagerEventsListener.checkExpected(); |
|
76 do_check_true(AddonManager.updateEnabled); |
|
77 do_check_true(Services.prefs.getBoolPref("extensions.update.enabled")); |
|
78 |
|
79 // AddonManager.autoUpdateDefault |
|
80 gManagerEventsListener.expect(["onUpdateModeChanged"]); |
|
81 AddonManager.autoUpdateDefault = false; |
|
82 gManagerEventsListener.checkExpected(); |
|
83 do_check_false(AddonManager.autoUpdateDefault); |
|
84 do_check_false(Services.prefs.getBoolPref("extensions.update.autoUpdateDefault")); |
|
85 |
|
86 gManagerEventsListener.expect([]); |
|
87 AddonManager.autoUpdateDefault = false; |
|
88 gManagerEventsListener.checkExpected(); |
|
89 do_check_false(AddonManager.autoUpdateDefault); |
|
90 do_check_false(Services.prefs.getBoolPref("extensions.update.autoUpdateDefault")); |
|
91 |
|
92 gManagerEventsListener.expect(["onUpdateModeChanged"]); |
|
93 AddonManager.autoUpdateDefault = true; |
|
94 gManagerEventsListener.checkExpected(); |
|
95 do_check_true(AddonManager.autoUpdateDefault); |
|
96 do_check_true(Services.prefs.getBoolPref("extensions.update.autoUpdateDefault")); |
|
97 |
|
98 gManagerEventsListener.expect([]); |
|
99 AddonManager.autoUpdateDefault = true; |
|
100 gManagerEventsListener.checkExpected(); |
|
101 do_check_true(AddonManager.autoUpdateDefault); |
|
102 do_check_true(Services.prefs.getBoolPref("extensions.update.autoUpdateDefault")); |
|
103 |
|
104 // AddonManager.strictCompatibility |
|
105 gManagerEventsListener.expect(["onCompatibilityModeChanged"]); |
|
106 AddonManager.strictCompatibility = false; |
|
107 gManagerEventsListener.checkExpected(); |
|
108 do_check_false(AddonManager.strictCompatibility); |
|
109 do_check_false(Services.prefs.getBoolPref("extensions.strictCompatibility")); |
|
110 |
|
111 gManagerEventsListener.expect([]); |
|
112 AddonManager.strictCompatibility = false; |
|
113 gManagerEventsListener.checkExpected(); |
|
114 do_check_false(AddonManager.strictCompatibility); |
|
115 do_check_false(Services.prefs.getBoolPref("extensions.strictCompatibility")); |
|
116 |
|
117 gManagerEventsListener.expect(["onCompatibilityModeChanged"]); |
|
118 AddonManager.strictCompatibility = true; |
|
119 gManagerEventsListener.checkExpected(); |
|
120 do_check_true(AddonManager.strictCompatibility); |
|
121 do_check_true(Services.prefs.getBoolPref("extensions.strictCompatibility")); |
|
122 |
|
123 gManagerEventsListener.expect([]); |
|
124 AddonManager.strictCompatibility = true; |
|
125 gManagerEventsListener.checkExpected(); |
|
126 do_check_true(AddonManager.strictCompatibility); |
|
127 do_check_true(Services.prefs.getBoolPref("extensions.strictCompatibility")); |
|
128 |
|
129 |
|
130 // AddonManager.checkCompatibility |
|
131 if (isNightlyChannel()) { |
|
132 var version = "nightly"; |
|
133 } else { |
|
134 version = Services.appinfo.version.replace(/^([^\.]+\.[0-9]+[a-z]*).*/gi, "$1"); |
|
135 } |
|
136 const COMPATIBILITY_PREF = "extensions.checkCompatibility." + version; |
|
137 |
|
138 gManagerEventsListener.expect(["onCompatibilityModeChanged"]); |
|
139 AddonManager.checkCompatibility = false; |
|
140 gManagerEventsListener.checkExpected(); |
|
141 do_check_false(AddonManager.checkCompatibility); |
|
142 do_check_false(Services.prefs.getBoolPref(COMPATIBILITY_PREF)); |
|
143 |
|
144 gManagerEventsListener.expect([]); |
|
145 AddonManager.checkCompatibility = false; |
|
146 gManagerEventsListener.checkExpected(); |
|
147 do_check_false(AddonManager.checkCompatibility); |
|
148 do_check_false(Services.prefs.getBoolPref(COMPATIBILITY_PREF)); |
|
149 |
|
150 gManagerEventsListener.expect(["onCompatibilityModeChanged"]); |
|
151 AddonManager.checkCompatibility = true; |
|
152 gManagerEventsListener.checkExpected(); |
|
153 do_check_true(AddonManager.checkCompatibility); |
|
154 do_check_false(Services.prefs.prefHasUserValue(COMPATIBILITY_PREF)); |
|
155 |
|
156 gManagerEventsListener.expect([]); |
|
157 AddonManager.checkCompatibility = true; |
|
158 gManagerEventsListener.checkExpected(); |
|
159 do_check_true(AddonManager.checkCompatibility); |
|
160 do_check_false(Services.prefs.prefHasUserValue(COMPATIBILITY_PREF)); |
|
161 |
|
162 |
|
163 // AddonManager.checkUpdateSecurity |
|
164 gManagerEventsListener.expect(["onCheckUpdateSecurityChanged"]); |
|
165 AddonManager.checkUpdateSecurity = false; |
|
166 gManagerEventsListener.checkExpected(); |
|
167 do_check_false(AddonManager.checkUpdateSecurity); |
|
168 if (AddonManager.checkUpdateSecurityDefault) |
|
169 do_check_false(Services.prefs.getBoolPref("extensions.checkUpdateSecurity")); |
|
170 else |
|
171 do_check_false(Services.prefs.prefHasUserValue("extensions.checkUpdateSecurity")); |
|
172 |
|
173 gManagerEventsListener.expect([]); |
|
174 AddonManager.checkUpdateSecurity = false; |
|
175 gManagerEventsListener.checkExpected(); |
|
176 do_check_false(AddonManager.checkUpdateSecurity); |
|
177 if (AddonManager.checkUpdateSecurityDefault) |
|
178 do_check_false(Services.prefs.getBoolPref("extensions.checkUpdateSecurity")); |
|
179 else |
|
180 do_check_false(Services.prefs.prefHasUserValue("extensions.checkUpdateSecurity")); |
|
181 |
|
182 gManagerEventsListener.expect(["onCheckUpdateSecurityChanged"]); |
|
183 AddonManager.checkUpdateSecurity = true; |
|
184 gManagerEventsListener.checkExpected(); |
|
185 do_check_true(AddonManager.checkUpdateSecurity); |
|
186 if (!AddonManager.checkUpdateSecurityDefault) |
|
187 do_check_true(Services.prefs.getBoolPref("extensions.checkUpdateSecurity")); |
|
188 else |
|
189 do_check_false(Services.prefs.prefHasUserValue("extensions.checkUpdateSecurity")); |
|
190 |
|
191 gManagerEventsListener.expect([]); |
|
192 AddonManager.checkUpdateSecurity = true; |
|
193 gManagerEventsListener.checkExpected(); |
|
194 do_check_true(AddonManager.checkUpdateSecurity); |
|
195 if (!AddonManager.checkUpdateSecurityDefault) |
|
196 do_check_true(Services.prefs.getBoolPref("extensions.checkUpdateSecurity")); |
|
197 else |
|
198 do_check_false(Services.prefs.prefHasUserValue("extensions.checkUpdateSecurity")); |
|
199 |
|
200 gManagerEventsListener.shutdown(); |
|
201 |
|
202 // AddonManager.hotfixID |
|
203 let hotfixID = "hotfix@tests.mozilla.org"; |
|
204 Services.prefs.setCharPref("extensions.hotfix.id", hotfixID); |
|
205 do_check_eq(AddonManager.hotfixID, hotfixID); |
|
206 // Change the pref and make sure the property is updated |
|
207 hotfixID = "hotfix2@tests.mozilla.org"; |
|
208 Services.prefs.setCharPref("extensions.hotfix.id", hotfixID); |
|
209 do_check_eq(AddonManager.hotfixID, hotfixID); |
|
210 // Test an invalid pref value |
|
211 hotfixID = 99; |
|
212 Services.prefs.deleteBranch("extensions.hotfix.id"); |
|
213 Services.prefs.setIntPref("extensions.hotfix.id", hotfixID); |
|
214 do_check_eq(AddonManager.hotfixID, null); |
|
215 Services.prefs.clearUserPref("extensions.hotfix.id"); |
|
216 |
|
217 // After removing the listener, ensure we get no further events. |
|
218 gManagerEventsListener.expect([]); |
|
219 AddonManager.updateEnabled = false; |
|
220 gManagerEventsListener.checkExpected(); |
|
221 } |