|
1 /* Any copyright is dedicated to the Public Domain. |
|
2 http://creativecommons.org/publicdomain/zero/1.0/ */ |
|
3 |
|
4 // Tests compatibility overrides, for when strict compatibility checking is |
|
5 // disabled. See bug 693906. |
|
6 |
|
7 |
|
8 const PREF_GETADDONS_CACHE_ENABLED = "extensions.getAddons.cache.enabled"; |
|
9 |
|
10 Components.utils.import("resource://testing-common/httpd.js"); |
|
11 var gServer = new HttpServer(); |
|
12 gServer.start(-1); |
|
13 gPort = gServer.identity.primaryPort; |
|
14 |
|
15 const PORT = gPort; |
|
16 const BASE_URL = "http://localhost:" + PORT; |
|
17 const DEFAULT_URL = "about:blank"; |
|
18 const REQ_URL = "/data.xml"; |
|
19 |
|
20 // register static file and mark it for interpolation |
|
21 mapUrlToFile(REQ_URL, do_get_file("data/test_compatoverrides.xml"), gServer); |
|
22 |
|
23 Services.prefs.setBoolPref(PREF_EM_STRICT_COMPATIBILITY, false); |
|
24 Services.prefs.setBoolPref(PREF_GETADDONS_CACHE_ENABLED, true); |
|
25 Services.prefs.setCharPref(PREF_GETADDONS_BYIDS_PERFORMANCE, |
|
26 BASE_URL + REQ_URL); |
|
27 |
|
28 |
|
29 // Not hosted, no overrides |
|
30 var addon1 = { |
|
31 id: "addon1@tests.mozilla.org", |
|
32 version: "1.0", |
|
33 name: "Test addon 1", |
|
34 targetApplications: [{ |
|
35 id: "xpcshell@tests.mozilla.org", |
|
36 minVersion: "1", |
|
37 maxVersion: "1" |
|
38 }] |
|
39 }; |
|
40 |
|
41 // Hosted, no overrides |
|
42 var addon2 = { |
|
43 id: "addon2@tests.mozilla.org", |
|
44 version: "1.0", |
|
45 name: "Test addon 2", |
|
46 targetApplications: [{ |
|
47 id: "xpcshell@tests.mozilla.org", |
|
48 minVersion: "1", |
|
49 maxVersion: "1" |
|
50 }] |
|
51 }; |
|
52 |
|
53 // Hosted, matching override |
|
54 var addon3 = { |
|
55 id: "addon3@tests.mozilla.org", |
|
56 version: "1.0", |
|
57 name: "Test addon 3", |
|
58 targetApplications: [{ |
|
59 id: "xpcshell@tests.mozilla.org", |
|
60 minVersion: "1", |
|
61 maxVersion: "1" |
|
62 }] |
|
63 }; |
|
64 |
|
65 // Hosted, matching override, wouldn't be compatible if strict checking is enabled |
|
66 var addon4 = { |
|
67 id: "addon4@tests.mozilla.org", |
|
68 version: "1.0", |
|
69 name: "Test addon 4", |
|
70 targetApplications: [{ |
|
71 id: "xpcshell@tests.mozilla.org", |
|
72 minVersion: "0.1", |
|
73 maxVersion: "0.2" |
|
74 }] |
|
75 }; |
|
76 |
|
77 // Hosted, app ID doesn't match in override |
|
78 var addon5 = { |
|
79 id: "addon5@tests.mozilla.org", |
|
80 version: "1.0", |
|
81 name: "Test addon 5", |
|
82 targetApplications: [{ |
|
83 id: "xpcshell@tests.mozilla.org", |
|
84 minVersion: "1", |
|
85 maxVersion: "1" |
|
86 }] |
|
87 }; |
|
88 |
|
89 // Hosted, addon version range doesn't match in override |
|
90 var addon6 = { |
|
91 id: "addon6@tests.mozilla.org", |
|
92 version: "1.0", |
|
93 name: "Test addon 6", |
|
94 targetApplications: [{ |
|
95 id: "xpcshell@tests.mozilla.org", |
|
96 minVersion: "1", |
|
97 maxVersion: "1" |
|
98 }] |
|
99 }; |
|
100 |
|
101 // Hosted, app version range doesn't match in override |
|
102 var addon7 = { |
|
103 id: "addon7@tests.mozilla.org", |
|
104 version: "1.0", |
|
105 name: "Test addon 7", |
|
106 targetApplications: [{ |
|
107 id: "xpcshell@tests.mozilla.org", |
|
108 minVersion: "1", |
|
109 maxVersion: "1" |
|
110 }] |
|
111 }; |
|
112 |
|
113 // Hosted, multiple overrides |
|
114 var addon8 = { |
|
115 id: "addon8@tests.mozilla.org", |
|
116 version: "1.0", |
|
117 name: "Test addon 8", |
|
118 targetApplications: [{ |
|
119 id: "xpcshell@tests.mozilla.org", |
|
120 minVersion: "1", |
|
121 maxVersion: "1" |
|
122 }] |
|
123 }; |
|
124 |
|
125 // Not hosted, matching override |
|
126 var addon9 = { |
|
127 id: "addon9@tests.mozilla.org", |
|
128 version: "1.0", |
|
129 name: "Test addon 9", |
|
130 targetApplications: [{ |
|
131 id: "xpcshell@tests.mozilla.org", |
|
132 minVersion: "1", |
|
133 maxVersion: "1" |
|
134 }] |
|
135 }; |
|
136 |
|
137 // Not hosted, override is of unsupported type (compatible) |
|
138 var addon10 = { |
|
139 id: "addon10@tests.mozilla.org", |
|
140 version: "1.0", |
|
141 name: "Test addon 10", |
|
142 targetApplications: [{ |
|
143 id: "xpcshell@tests.mozilla.org", |
|
144 minVersion: "1", |
|
145 maxVersion: "1" |
|
146 }] |
|
147 }; |
|
148 |
|
149 |
|
150 const profileDir = gProfD.clone(); |
|
151 profileDir.append("extensions"); |
|
152 |
|
153 |
|
154 /* |
|
155 * Trigger an AddonManager background update check |
|
156 * |
|
157 * @param aCallback |
|
158 * Callback to call once the background update is complete |
|
159 */ |
|
160 function trigger_background_update(aCallback) { |
|
161 Services.obs.addObserver({ |
|
162 observe: function(aSubject, aTopic, aData) { |
|
163 Services.obs.removeObserver(this, "addons-background-update-complete"); |
|
164 do_execute_soon(aCallback); |
|
165 } |
|
166 }, "addons-background-update-complete", false); |
|
167 |
|
168 gInternalManager.notify(null); |
|
169 } |
|
170 |
|
171 function run_test() { |
|
172 do_test_pending(); |
|
173 createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "1", "2"); |
|
174 |
|
175 writeInstallRDFForExtension(addon1, profileDir); |
|
176 writeInstallRDFForExtension(addon2, profileDir); |
|
177 writeInstallRDFForExtension(addon3, profileDir); |
|
178 writeInstallRDFForExtension(addon4, profileDir); |
|
179 writeInstallRDFForExtension(addon5, profileDir); |
|
180 writeInstallRDFForExtension(addon6, profileDir); |
|
181 writeInstallRDFForExtension(addon7, profileDir); |
|
182 writeInstallRDFForExtension(addon8, profileDir); |
|
183 writeInstallRDFForExtension(addon9, profileDir); |
|
184 writeInstallRDFForExtension(addon10, profileDir); |
|
185 |
|
186 startupManager(); |
|
187 |
|
188 trigger_background_update(run_test_1); |
|
189 } |
|
190 |
|
191 function end_test() { |
|
192 gServer.stop(do_test_finished); |
|
193 } |
|
194 |
|
195 function check_compat_status(aCallback) { |
|
196 AddonManager.getAddonsByIDs(["addon1@tests.mozilla.org", |
|
197 "addon2@tests.mozilla.org", |
|
198 "addon3@tests.mozilla.org", |
|
199 "addon4@tests.mozilla.org", |
|
200 "addon5@tests.mozilla.org", |
|
201 "addon6@tests.mozilla.org", |
|
202 "addon7@tests.mozilla.org", |
|
203 "addon8@tests.mozilla.org", |
|
204 "addon9@tests.mozilla.org", |
|
205 "addon10@tests.mozilla.org"], |
|
206 function([a1, a2, a3, a4, a5, a6, a7, a8, a9, a10]) { |
|
207 |
|
208 do_check_neq(a1, null); |
|
209 do_check_eq(a1.compatibilityOverrides, null); |
|
210 do_check_true(a1.isCompatible); |
|
211 do_check_false(a1.appDisabled); |
|
212 |
|
213 do_check_neq(a2, null); |
|
214 do_check_eq(a2.compatibilityOverrides, null); |
|
215 do_check_true(a2.isCompatible); |
|
216 do_check_false(a2.appDisabled); |
|
217 |
|
218 do_check_neq(a3, null); |
|
219 do_check_neq(a3.compatibilityOverrides, null); |
|
220 do_check_eq(a3.compatibilityOverrides.length, 1); |
|
221 do_check_false(a3.isCompatible); |
|
222 do_check_true(a3.appDisabled); |
|
223 |
|
224 do_check_neq(a4, null); |
|
225 do_check_neq(a4.compatibilityOverrides, null); |
|
226 do_check_eq(a4.compatibilityOverrides.length, 1); |
|
227 do_check_false(a4.isCompatible); |
|
228 do_check_true(a4.appDisabled); |
|
229 |
|
230 do_check_neq(a5, null); |
|
231 do_check_eq(a5.compatibilityOverrides, null); |
|
232 do_check_true(a5.isCompatible); |
|
233 do_check_false(a5.appDisabled); |
|
234 |
|
235 do_check_neq(a6, null); |
|
236 do_check_neq(a6.compatibilityOverrides, null); |
|
237 do_check_eq(a6.compatibilityOverrides.length, 1); |
|
238 do_check_true(a6.isCompatible); |
|
239 do_check_false(a6.appDisabled); |
|
240 |
|
241 do_check_neq(a7, null); |
|
242 do_check_neq(a7.compatibilityOverrides, null); |
|
243 do_check_eq(a7.compatibilityOverrides.length, 1); |
|
244 do_check_true(a7.isCompatible); |
|
245 do_check_false(a7.appDisabled); |
|
246 |
|
247 do_check_neq(a8, null); |
|
248 do_check_neq(a8.compatibilityOverrides, null); |
|
249 do_check_eq(a8.compatibilityOverrides.length, 3); |
|
250 do_check_false(a8.isCompatible); |
|
251 do_check_true(a8.appDisabled); |
|
252 |
|
253 do_check_neq(a9, null); |
|
254 do_check_neq(a9.compatibilityOverrides, null); |
|
255 do_check_eq(a9.compatibilityOverrides.length, 1); |
|
256 do_check_false(a9.isCompatible); |
|
257 do_check_true(a9.appDisabled); |
|
258 |
|
259 do_check_neq(a10, null); |
|
260 do_check_eq(a10.compatibilityOverrides, null); |
|
261 do_check_true(a10.isCompatible); |
|
262 do_check_false(a10.appDisabled); |
|
263 |
|
264 do_execute_soon(aCallback); |
|
265 }); |
|
266 } |
|
267 |
|
268 function run_test_1() { |
|
269 do_print("Run test 1"); |
|
270 check_compat_status(run_test_2); |
|
271 } |
|
272 |
|
273 function run_test_2() { |
|
274 do_print("Run test 2"); |
|
275 restartManager(); |
|
276 check_compat_status(end_test); |
|
277 } |