|
1 /* Any copyright is dedicated to the Public Domain. |
|
2 * http://creativecommons.org/publicdomain/zero/1.0/ |
|
3 */ |
|
4 |
|
5 Components.utils.import("resource://gre/modules/NetUtil.jsm"); |
|
6 |
|
7 // using a dynamic port in the addon metadata |
|
8 Components.utils.import("resource://testing-common/httpd.js"); |
|
9 let gServer = new HttpServer(); |
|
10 gServer.start(-1); |
|
11 gPort = gServer.identity.primaryPort; |
|
12 |
|
13 // This verifies that themes behave as expected |
|
14 |
|
15 const PREF_GENERAL_SKINS_SELECTEDSKIN = "general.skins.selectedSkin"; |
|
16 const PREF_EXTENSIONS_DSS_ENABLED = "extensions.dss.enabled"; |
|
17 |
|
18 Components.utils.import("resource://gre/modules/LightweightThemeManager.jsm"); |
|
19 |
|
20 const profileDir = gProfD.clone(); |
|
21 profileDir.append("extensions"); |
|
22 |
|
23 // Observer to ensure a "lightweight-theme-styling-update" notification is sent |
|
24 // when expected |
|
25 var gLWThemeChanged = false; |
|
26 var LightweightThemeObserver = { |
|
27 observe: function(aSubject, aTopic, aData) { |
|
28 if (aTopic != "lightweight-theme-styling-update") |
|
29 return; |
|
30 |
|
31 gLWThemeChanged = true; |
|
32 } |
|
33 }; |
|
34 |
|
35 AM_Cc["@mozilla.org/observer-service;1"] |
|
36 .getService(Components.interfaces.nsIObserverService) |
|
37 .addObserver(LightweightThemeObserver, "lightweight-theme-styling-update", false); |
|
38 |
|
39 |
|
40 function run_test() { |
|
41 do_test_pending(); |
|
42 createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "1", "1.9.2"); |
|
43 |
|
44 Services.prefs.setCharPref(PREF_GENERAL_SKINS_SELECTEDSKIN, "theme1/1.0"); |
|
45 Services.prefs.setBoolPref(PREF_EXTENSIONS_DSS_ENABLED, true); |
|
46 writeInstallRDFForExtension({ |
|
47 id: "theme1@tests.mozilla.org", |
|
48 version: "1.0", |
|
49 name: "Test 1", |
|
50 type: 4, |
|
51 internalName: "theme1/1.0", |
|
52 targetApplications: [{ |
|
53 id: "xpcshell@tests.mozilla.org", |
|
54 minVersion: "1", |
|
55 maxVersion: "2" |
|
56 }] |
|
57 }, profileDir); |
|
58 |
|
59 writeInstallRDFForExtension({ |
|
60 id: "theme2@tests.mozilla.org", |
|
61 version: "1.0", |
|
62 name: "Test 1", |
|
63 internalName: "theme2/1.0", |
|
64 targetApplications: [{ |
|
65 id: "xpcshell@tests.mozilla.org", |
|
66 minVersion: "1", |
|
67 maxVersion: "2" |
|
68 }] |
|
69 }, profileDir); |
|
70 |
|
71 // We need a default theme for some of these things to work but we have hidden |
|
72 // the one in the application directory. |
|
73 writeInstallRDFForExtension({ |
|
74 id: "default@tests.mozilla.org", |
|
75 version: "1.0", |
|
76 name: "Default", |
|
77 internalName: "classic/1.0", |
|
78 targetApplications: [{ |
|
79 id: "xpcshell@tests.mozilla.org", |
|
80 minVersion: "1", |
|
81 maxVersion: "2" |
|
82 }] |
|
83 }, profileDir); |
|
84 |
|
85 startupManager(); |
|
86 // Make sure we only register once despite multiple calls |
|
87 AddonManager.addInstallListener(InstallListener); |
|
88 AddonManager.addAddonListener(AddonListener); |
|
89 AddonManager.addInstallListener(InstallListener); |
|
90 AddonManager.addAddonListener(AddonListener); |
|
91 AddonManager.addInstallListener(InstallListener); |
|
92 |
|
93 AddonManager.getAddonsByIDs(["theme1@tests.mozilla.org", |
|
94 "theme2@tests.mozilla.org"], function([t1, t2]) { |
|
95 do_check_neq(t1, null); |
|
96 do_check_false(t1.userDisabled); |
|
97 do_check_false(t1.appDisabled); |
|
98 do_check_true(t1.isActive); |
|
99 do_check_eq(t1.screenshots, null); |
|
100 do_check_true(isThemeInAddonsList(profileDir, t1.id)); |
|
101 do_check_false(hasFlag(t1.permissions, AddonManager.PERM_CAN_DISABLE)); |
|
102 do_check_false(hasFlag(t1.permissions, AddonManager.PERM_CAN_ENABLE)); |
|
103 |
|
104 do_check_neq(t2, null); |
|
105 do_check_true(t2.userDisabled); |
|
106 do_check_false(t2.appDisabled); |
|
107 do_check_false(t2.isActive); |
|
108 do_check_eq(t2.screenshots, null); |
|
109 do_check_true(isThemeInAddonsList(profileDir, t2.id)); |
|
110 do_check_false(hasFlag(t2.permissions, AddonManager.PERM_CAN_DISABLE)); |
|
111 do_check_true(hasFlag(t2.permissions, AddonManager.PERM_CAN_ENABLE)); |
|
112 |
|
113 do_execute_soon(run_test_1); |
|
114 }); |
|
115 } |
|
116 |
|
117 function end_test() { |
|
118 do_execute_soon(do_test_finished); |
|
119 } |
|
120 |
|
121 // Checks enabling one theme disables the others |
|
122 function run_test_1() { |
|
123 prepare_test({ |
|
124 "theme1@tests.mozilla.org": [ |
|
125 ["onDisabling", false], |
|
126 "onDisabled" |
|
127 ], |
|
128 "theme2@tests.mozilla.org": [ |
|
129 ["onEnabling", false], |
|
130 "onEnabled" |
|
131 ] |
|
132 }); |
|
133 AddonManager.getAddonsByIDs(["theme1@tests.mozilla.org", |
|
134 "theme2@tests.mozilla.org"], function([t1, t2]) { |
|
135 t2.userDisabled = false; |
|
136 |
|
137 ensure_test_completed(); |
|
138 do_check_false(hasFlag(t2.permissions, AddonManager.PERM_CAN_DISABLE)); |
|
139 do_check_false(hasFlag(t2.permissions, AddonManager.PERM_CAN_ENABLE)); |
|
140 |
|
141 do_check_true(t1.userDisabled); |
|
142 do_check_false(hasFlag(t1.permissions, AddonManager.PERM_CAN_DISABLE)); |
|
143 do_check_true(hasFlag(t1.permissions, AddonManager.PERM_CAN_ENABLE)); |
|
144 |
|
145 do_execute_soon(check_test_1); |
|
146 }); |
|
147 } |
|
148 |
|
149 function check_test_1() { |
|
150 restartManager(); |
|
151 do_check_eq(Services.prefs.getCharPref(PREF_GENERAL_SKINS_SELECTEDSKIN), "theme2/1.0"); |
|
152 |
|
153 AddonManager.getAddonsByIDs(["theme1@tests.mozilla.org", |
|
154 "theme2@tests.mozilla.org"], function([t1, t2]) { |
|
155 do_check_neq(t1, null); |
|
156 do_check_true(t1.userDisabled); |
|
157 do_check_false(t1.appDisabled); |
|
158 do_check_false(t1.isActive); |
|
159 do_check_true(isThemeInAddonsList(profileDir, t1.id)); |
|
160 do_check_false(hasFlag(t1.permissions, AddonManager.PERM_CAN_DISABLE)); |
|
161 do_check_true(hasFlag(t1.permissions, AddonManager.PERM_CAN_ENABLE)); |
|
162 |
|
163 do_check_neq(t2, null); |
|
164 do_check_false(t2.userDisabled); |
|
165 do_check_false(t2.appDisabled); |
|
166 do_check_true(t2.isActive); |
|
167 do_check_true(isThemeInAddonsList(profileDir, t2.id)); |
|
168 do_check_false(hasFlag(t2.permissions, AddonManager.PERM_CAN_DISABLE)); |
|
169 do_check_false(hasFlag(t2.permissions, AddonManager.PERM_CAN_ENABLE)); |
|
170 do_check_false(gLWThemeChanged); |
|
171 |
|
172 do_execute_soon(run_test_2); |
|
173 }); |
|
174 } |
|
175 |
|
176 // Removing the active theme should fall back to the default (not ideal in this |
|
177 // case since we don't have the default theme installed) |
|
178 function run_test_2() { |
|
179 var dest = profileDir.clone(); |
|
180 dest.append(do_get_expected_addon_name("theme2@tests.mozilla.org")); |
|
181 dest.remove(true); |
|
182 |
|
183 restartManager(); |
|
184 do_check_eq(Services.prefs.getCharPref(PREF_GENERAL_SKINS_SELECTEDSKIN), "classic/1.0"); |
|
185 |
|
186 AddonManager.getAddonsByIDs(["theme1@tests.mozilla.org", |
|
187 "theme2@tests.mozilla.org"], function([t1, t2]) { |
|
188 do_check_neq(t1, null); |
|
189 do_check_true(t1.userDisabled); |
|
190 do_check_false(t1.appDisabled); |
|
191 do_check_false(t1.isActive); |
|
192 do_check_true(isThemeInAddonsList(profileDir, t1.id)); |
|
193 do_check_false(hasFlag(t1.permissions, AddonManager.PERM_CAN_DISABLE)); |
|
194 do_check_true(hasFlag(t1.permissions, AddonManager.PERM_CAN_ENABLE)); |
|
195 |
|
196 do_check_eq(t2, null); |
|
197 do_check_false(isThemeInAddonsList(profileDir, "theme2@tests.mozilla.org")); |
|
198 do_check_false(gLWThemeChanged); |
|
199 |
|
200 do_execute_soon(run_test_3); |
|
201 }); |
|
202 } |
|
203 |
|
204 // Installing a lightweight theme should happen instantly and disable the default theme |
|
205 function run_test_3() { |
|
206 writeInstallRDFForExtension({ |
|
207 id: "theme2@tests.mozilla.org", |
|
208 version: "1.0", |
|
209 name: "Test 1", |
|
210 internalName: "theme2/1.0", |
|
211 targetApplications: [{ |
|
212 id: "xpcshell@tests.mozilla.org", |
|
213 minVersion: "1", |
|
214 maxVersion: "2" |
|
215 }] |
|
216 }, profileDir); |
|
217 restartManager(); |
|
218 |
|
219 prepare_test({ |
|
220 "1@personas.mozilla.org": [ |
|
221 ["onInstalling", false], |
|
222 "onInstalled", |
|
223 ["onEnabling", false], |
|
224 "onEnabled" |
|
225 ], |
|
226 "default@tests.mozilla.org": [ |
|
227 ["onDisabling", false], |
|
228 "onDisabled", |
|
229 ] |
|
230 }, [ |
|
231 "onExternalInstall" |
|
232 ]); |
|
233 |
|
234 LightweightThemeManager.currentTheme = { |
|
235 id: "1", |
|
236 version: "1", |
|
237 name: "Test LW Theme", |
|
238 description: "A test theme", |
|
239 author: "Mozilla", |
|
240 homepageURL: "http://localhost:" + gPort + "/data/index.html", |
|
241 headerURL: "http://localhost:" + gPort + "/data/header.png", |
|
242 footerURL: "http://localhost:" + gPort + "/data/footer.png", |
|
243 previewURL: "http://localhost:" + gPort + "/data/preview.png", |
|
244 iconURL: "http://localhost:" + gPort + "/data/icon.png" |
|
245 }; |
|
246 |
|
247 ensure_test_completed(); |
|
248 |
|
249 AddonManager.getAddonByID("1@personas.mozilla.org", function(p1) { |
|
250 do_check_neq(null, p1); |
|
251 do_check_eq(p1.name, "Test LW Theme"); |
|
252 do_check_eq(p1.version, "1"); |
|
253 do_check_eq(p1.type, "theme"); |
|
254 do_check_eq(p1.description, "A test theme"); |
|
255 do_check_eq(p1.creator, "Mozilla"); |
|
256 do_check_eq(p1.homepageURL, "http://localhost:" + gPort + "/data/index.html"); |
|
257 do_check_eq(p1.iconURL, "http://localhost:" + gPort + "/data/icon.png"); |
|
258 do_check_eq(p1.screenshots.length, 1); |
|
259 do_check_eq(p1.screenshots[0], "http://localhost:" + gPort + "/data/preview.png"); |
|
260 do_check_false(p1.appDisabled); |
|
261 do_check_false(p1.userDisabled); |
|
262 do_check_true(p1.isCompatible); |
|
263 do_check_true(p1.providesUpdatesSecurely); |
|
264 do_check_eq(p1.blocklistState, 0); |
|
265 do_check_true(p1.isActive); |
|
266 do_check_eq(p1.pendingOperations, 0); |
|
267 do_check_eq(p1.permissions, AddonManager.PERM_CAN_UNINSTALL | AddonManager.PERM_CAN_DISABLE); |
|
268 do_check_eq(p1.scope, AddonManager.SCOPE_PROFILE); |
|
269 do_check_true("isCompatibleWith" in p1); |
|
270 do_check_true("findUpdates" in p1); |
|
271 |
|
272 AddonManager.getAddonsByTypes(["theme"], function(addons) { |
|
273 let seen = false; |
|
274 addons.forEach(function(a) { |
|
275 if (a.id == "1@personas.mozilla.org") { |
|
276 seen = true; |
|
277 } |
|
278 else { |
|
279 dump("Checking theme " + a.id + "\n"); |
|
280 do_check_false(a.isActive); |
|
281 do_check_true(a.userDisabled); |
|
282 } |
|
283 }); |
|
284 do_check_true(seen); |
|
285 |
|
286 do_check_true(gLWThemeChanged); |
|
287 gLWThemeChanged = false; |
|
288 |
|
289 do_execute_soon(run_test_4); |
|
290 }); |
|
291 }); |
|
292 } |
|
293 |
|
294 // Installing a second lightweight theme should disable the first with no restart |
|
295 function run_test_4() { |
|
296 prepare_test({ |
|
297 "1@personas.mozilla.org": [ |
|
298 ["onDisabling", false], |
|
299 "onDisabled", |
|
300 ], |
|
301 "2@personas.mozilla.org": [ |
|
302 ["onInstalling", false], |
|
303 "onInstalled", |
|
304 ["onEnabling", false], |
|
305 "onEnabled" |
|
306 ] |
|
307 }, [ |
|
308 "onExternalInstall" |
|
309 ]); |
|
310 |
|
311 LightweightThemeManager.currentTheme = { |
|
312 id: "2", |
|
313 version: "1", |
|
314 name: "Test LW Theme", |
|
315 description: "A second test theme", |
|
316 author: "Mozilla", |
|
317 homepageURL: "http://localhost:" + gPort + "/data/index.html", |
|
318 headerURL: "http://localhost:" + gPort + "/data/header.png", |
|
319 footerURL: "http://localhost:" + gPort + "/data/footer.png", |
|
320 previewURL: "http://localhost:" + gPort + "/data/preview.png", |
|
321 iconURL: "http://localhost:" + gPort + "/data/icon.png" |
|
322 }; |
|
323 |
|
324 ensure_test_completed(); |
|
325 |
|
326 AddonManager.getAddonsByIDs(["1@personas.mozilla.org", |
|
327 "2@personas.mozilla.org"], function([p1, p2]) { |
|
328 do_check_neq(null, p2); |
|
329 do_check_false(p2.appDisabled); |
|
330 do_check_false(p2.userDisabled); |
|
331 do_check_true(p2.isActive); |
|
332 do_check_eq(p2.pendingOperations, 0); |
|
333 do_check_eq(p2.permissions, AddonManager.PERM_CAN_UNINSTALL | AddonManager.PERM_CAN_DISABLE); |
|
334 |
|
335 do_check_neq(null, p1); |
|
336 do_check_false(p1.appDisabled); |
|
337 do_check_true(p1.userDisabled); |
|
338 do_check_false(p1.isActive); |
|
339 do_check_eq(p1.pendingOperations, 0); |
|
340 do_check_eq(p1.permissions, AddonManager.PERM_CAN_UNINSTALL | AddonManager.PERM_CAN_ENABLE); |
|
341 |
|
342 AddonManager.getAddonsByTypes(["theme"], function(addons) { |
|
343 let seen = false; |
|
344 addons.forEach(function(a) { |
|
345 if (a.id == "2@personas.mozilla.org") { |
|
346 seen = true; |
|
347 } |
|
348 else { |
|
349 dump("Checking theme " + a.id + "\n"); |
|
350 do_check_false(a.isActive); |
|
351 do_check_true(a.userDisabled); |
|
352 } |
|
353 }); |
|
354 do_check_true(seen); |
|
355 |
|
356 do_check_true(gLWThemeChanged); |
|
357 gLWThemeChanged = false; |
|
358 |
|
359 do_execute_soon(run_test_5); |
|
360 }); |
|
361 }); |
|
362 } |
|
363 |
|
364 // Switching to a custom theme should disable the lightweight theme and require |
|
365 // a restart. Cancelling that should also be possible. |
|
366 function run_test_5() { |
|
367 prepare_test({ |
|
368 "2@personas.mozilla.org": [ |
|
369 ["onDisabling", false], |
|
370 "onDisabled" |
|
371 ], |
|
372 "theme2@tests.mozilla.org": [ |
|
373 ["onEnabling", false], |
|
374 "onEnabled" |
|
375 ] |
|
376 }); |
|
377 |
|
378 AddonManager.getAddonsByIDs(["2@personas.mozilla.org", |
|
379 "theme2@tests.mozilla.org"], function([p2, t2]) { |
|
380 t2.userDisabled = false; |
|
381 |
|
382 ensure_test_completed(); |
|
383 |
|
384 prepare_test({ |
|
385 "2@personas.mozilla.org": [ |
|
386 "onEnabling" |
|
387 ], |
|
388 "theme2@tests.mozilla.org": [ |
|
389 ["onDisabling", false], |
|
390 "onDisabled" |
|
391 ] |
|
392 }); |
|
393 |
|
394 p2.userDisabled = false; |
|
395 |
|
396 ensure_test_completed(); |
|
397 |
|
398 prepare_test({ |
|
399 "2@personas.mozilla.org": [ |
|
400 ["onOperationCancelled", true] |
|
401 ], |
|
402 "theme2@tests.mozilla.org": [ |
|
403 ["onEnabling", false], |
|
404 "onEnabled" |
|
405 ] |
|
406 }); |
|
407 |
|
408 t2.userDisabled = false; |
|
409 |
|
410 ensure_test_completed(); |
|
411 |
|
412 do_check_true(t2.isActive); |
|
413 do_check_false(t2.userDisabled); |
|
414 do_check_false(hasFlag(AddonManager.PENDING_ENABLE, t2.pendingOperations)); |
|
415 do_check_false(p2.isActive); |
|
416 do_check_true(p2.userDisabled); |
|
417 do_check_false(hasFlag(AddonManager.PENDING_DISABLE, p2.pendingOperations)); |
|
418 do_check_true(hasFlag(AddonManager.PERM_CAN_ENABLE, p2.permissions)); |
|
419 do_check_true(gLWThemeChanged); |
|
420 |
|
421 do_execute_soon(check_test_5); |
|
422 }); |
|
423 } |
|
424 |
|
425 function check_test_5() { |
|
426 restartManager(); |
|
427 |
|
428 AddonManager.getAddonsByIDs(["2@personas.mozilla.org", |
|
429 "theme2@tests.mozilla.org"], function([p2, t2]) { |
|
430 do_check_true(t2.isActive); |
|
431 do_check_false(t2.userDisabled); |
|
432 do_check_false(hasFlag(AddonManager.PENDING_ENABLE, t2.pendingOperations)); |
|
433 do_check_false(p2.isActive); |
|
434 do_check_true(p2.userDisabled); |
|
435 do_check_false(hasFlag(AddonManager.PENDING_DISABLE, p2.pendingOperations)); |
|
436 |
|
437 do_check_true(gLWThemeChanged); |
|
438 gLWThemeChanged = false; |
|
439 |
|
440 do_execute_soon(run_test_6); |
|
441 }); |
|
442 } |
|
443 |
|
444 // Switching from a custom theme to a lightweight theme should require a restart |
|
445 function run_test_6() { |
|
446 prepare_test({ |
|
447 "2@personas.mozilla.org": [ |
|
448 "onEnabling", |
|
449 ], |
|
450 "theme2@tests.mozilla.org": [ |
|
451 ["onDisabling", false], |
|
452 "onDisabled" |
|
453 ] |
|
454 }); |
|
455 |
|
456 AddonManager.getAddonsByIDs(["2@personas.mozilla.org", |
|
457 "theme2@tests.mozilla.org"], function([p2, t2]) { |
|
458 p2.userDisabled = false; |
|
459 |
|
460 ensure_test_completed(); |
|
461 |
|
462 prepare_test({ |
|
463 "2@personas.mozilla.org": [ |
|
464 "onOperationCancelled", |
|
465 ], |
|
466 "theme2@tests.mozilla.org": [ |
|
467 ["onEnabling", false], |
|
468 "onEnabled" |
|
469 ] |
|
470 }); |
|
471 |
|
472 t2.userDisabled = false; |
|
473 |
|
474 ensure_test_completed(); |
|
475 |
|
476 prepare_test({ |
|
477 "2@personas.mozilla.org": [ |
|
478 "onEnabling", |
|
479 ], |
|
480 "theme2@tests.mozilla.org": [ |
|
481 ["onDisabling", false], |
|
482 "onDisabled" |
|
483 ] |
|
484 }); |
|
485 |
|
486 p2.userDisabled = false; |
|
487 |
|
488 ensure_test_completed(); |
|
489 |
|
490 do_check_false(p2.isActive); |
|
491 do_check_false(p2.userDisabled); |
|
492 do_check_true(hasFlag(AddonManager.PENDING_ENABLE, p2.pendingOperations)); |
|
493 do_check_false(t2.isActive); |
|
494 do_check_true(t2.userDisabled); |
|
495 do_check_false(hasFlag(AddonManager.PENDING_DISABLE, t2.pendingOperations)); |
|
496 do_check_false(gLWThemeChanged); |
|
497 |
|
498 do_execute_soon(check_test_6); |
|
499 }); |
|
500 } |
|
501 |
|
502 function check_test_6() { |
|
503 restartManager(); |
|
504 |
|
505 AddonManager.getAddonsByIDs(["2@personas.mozilla.org", |
|
506 "theme2@tests.mozilla.org"], function([p2, t2]) { |
|
507 do_check_true(p2.isActive); |
|
508 do_check_false(p2.userDisabled); |
|
509 do_check_false(hasFlag(AddonManager.PENDING_ENABLE, p2.pendingOperations)); |
|
510 do_check_false(t2.isActive); |
|
511 do_check_true(t2.userDisabled); |
|
512 do_check_false(hasFlag(AddonManager.PENDING_DISABLE, t2.pendingOperations)); |
|
513 |
|
514 do_check_true(gLWThemeChanged); |
|
515 gLWThemeChanged = false; |
|
516 |
|
517 do_execute_soon(run_test_7); |
|
518 }); |
|
519 } |
|
520 |
|
521 // Uninstalling a lightweight theme should not require a restart |
|
522 function run_test_7() { |
|
523 prepare_test({ |
|
524 "1@personas.mozilla.org": [ |
|
525 ["onUninstalling", false], |
|
526 "onUninstalled" |
|
527 ] |
|
528 }); |
|
529 |
|
530 AddonManager.getAddonByID("1@personas.mozilla.org", function(p1) { |
|
531 p1.uninstall(); |
|
532 |
|
533 ensure_test_completed(); |
|
534 do_check_eq(LightweightThemeManager.usedThemes.length, 1); |
|
535 do_check_false(gLWThemeChanged); |
|
536 |
|
537 do_execute_soon(run_test_8); |
|
538 }); |
|
539 } |
|
540 |
|
541 // Uninstalling a lightweight theme in use should not require a restart and it |
|
542 // should reactivate the default theme |
|
543 // Also, uninstalling a lightweight theme in use should send a |
|
544 // "lightweight-theme-styling-update" notification through the observer service |
|
545 function run_test_8() { |
|
546 prepare_test({ |
|
547 "2@personas.mozilla.org": [ |
|
548 ["onUninstalling", false], |
|
549 "onUninstalled" |
|
550 ], |
|
551 "default@tests.mozilla.org": [ |
|
552 ["onEnabling", false], |
|
553 "onEnabled" |
|
554 ] |
|
555 }); |
|
556 |
|
557 AddonManager.getAddonByID("2@personas.mozilla.org", function(p2) { |
|
558 p2.uninstall(); |
|
559 |
|
560 ensure_test_completed(); |
|
561 do_check_eq(LightweightThemeManager.usedThemes.length, 0); |
|
562 |
|
563 do_check_true(gLWThemeChanged); |
|
564 gLWThemeChanged = false; |
|
565 |
|
566 do_execute_soon(run_test_9); |
|
567 }); |
|
568 } |
|
569 |
|
570 // Uninstalling a theme not in use should not require a restart |
|
571 function run_test_9() { |
|
572 AddonManager.getAddonByID("theme1@tests.mozilla.org", function(t1) { |
|
573 prepare_test({ |
|
574 "theme1@tests.mozilla.org": [ |
|
575 ["onUninstalling", false], |
|
576 "onUninstalled" |
|
577 ] |
|
578 }); |
|
579 |
|
580 t1.uninstall(); |
|
581 |
|
582 ensure_test_completed(); |
|
583 |
|
584 AddonManager.getAddonByID("theme1@tests.mozilla.org", function(newt1) { |
|
585 do_check_eq(newt1, null); |
|
586 do_check_false(gLWThemeChanged); |
|
587 |
|
588 do_execute_soon(run_test_10); |
|
589 }); |
|
590 }); |
|
591 } |
|
592 |
|
593 // Uninstalling a custom theme in use should require a restart |
|
594 function run_test_10() { |
|
595 AddonManager.getAddonByID("theme2@tests.mozilla.org", callback_soon(function(oldt2) { |
|
596 prepare_test({ |
|
597 "theme2@tests.mozilla.org": [ |
|
598 ["onEnabling", false], |
|
599 "onEnabled" |
|
600 ], |
|
601 "default@tests.mozilla.org": [ |
|
602 ["onDisabling", false], |
|
603 "onDisabled" |
|
604 ] |
|
605 }); |
|
606 |
|
607 oldt2.userDisabled = false; |
|
608 |
|
609 ensure_test_completed(); |
|
610 |
|
611 restartManager(); |
|
612 |
|
613 AddonManager.getAddonsByIDs(["default@tests.mozilla.org", |
|
614 "theme2@tests.mozilla.org"], |
|
615 callback_soon(function([d, t2]) { |
|
616 do_check_true(t2.isActive); |
|
617 do_check_false(t2.userDisabled); |
|
618 do_check_false(t2.appDisabled); |
|
619 do_check_false(d.isActive); |
|
620 do_check_true(d.userDisabled); |
|
621 do_check_false(d.appDisabled); |
|
622 |
|
623 prepare_test({ |
|
624 "theme2@tests.mozilla.org": [ |
|
625 ["onUninstalling", false], |
|
626 "onUninstalled" |
|
627 ], |
|
628 "default@tests.mozilla.org": [ |
|
629 ["onEnabling", false], |
|
630 "onEnabled" |
|
631 ] |
|
632 }); |
|
633 |
|
634 t2.uninstall(); |
|
635 |
|
636 ensure_test_completed(); |
|
637 do_check_false(gLWThemeChanged); |
|
638 |
|
639 restartManager(); |
|
640 |
|
641 do_execute_soon(run_test_11); |
|
642 })); |
|
643 })); |
|
644 } |
|
645 |
|
646 // Installing a custom theme not in use should not require a restart |
|
647 function run_test_11() { |
|
648 prepare_test({ }, [ |
|
649 "onNewInstall" |
|
650 ]); |
|
651 |
|
652 AddonManager.getInstallForFile(do_get_addon("test_theme"), function(install) { |
|
653 ensure_test_completed(); |
|
654 |
|
655 do_check_neq(install, null); |
|
656 do_check_eq(install.type, "theme"); |
|
657 do_check_eq(install.version, "1.0"); |
|
658 do_check_eq(install.name, "Test Theme 1"); |
|
659 do_check_eq(install.state, AddonManager.STATE_DOWNLOADED); |
|
660 |
|
661 prepare_test({ |
|
662 "theme1@tests.mozilla.org": [ |
|
663 ["onInstalling", false], |
|
664 "onInstalled" |
|
665 ] |
|
666 }, [ |
|
667 "onInstallStarted", |
|
668 "onInstallEnded", |
|
669 ], callback_soon(check_test_11)); |
|
670 install.install(); |
|
671 }); |
|
672 } |
|
673 |
|
674 function check_test_11() { |
|
675 restartManager(); |
|
676 AddonManager.getAddonByID("theme1@tests.mozilla.org", function(t1) { |
|
677 do_check_neq(t1, null); |
|
678 var previewSpec = do_get_addon_root_uri(profileDir, "theme1@tests.mozilla.org") + "preview.png"; |
|
679 do_check_eq(t1.screenshots.length, 1); |
|
680 do_check_eq(t1.screenshots[0], previewSpec); |
|
681 do_check_false(gLWThemeChanged); |
|
682 |
|
683 do_execute_soon(run_test_12); |
|
684 }); |
|
685 } |
|
686 |
|
687 // Updating a custom theme not in use should not require a restart |
|
688 function run_test_12() { |
|
689 prepare_test({ }, [ |
|
690 "onNewInstall" |
|
691 ]); |
|
692 |
|
693 AddonManager.getInstallForFile(do_get_addon("test_theme"), function(install) { |
|
694 ensure_test_completed(); |
|
695 |
|
696 do_check_neq(install, null); |
|
697 do_check_eq(install.type, "theme"); |
|
698 do_check_eq(install.version, "1.0"); |
|
699 do_check_eq(install.name, "Test Theme 1"); |
|
700 do_check_eq(install.state, AddonManager.STATE_DOWNLOADED); |
|
701 |
|
702 prepare_test({ |
|
703 "theme1@tests.mozilla.org": [ |
|
704 ["onInstalling", false], |
|
705 "onInstalled" |
|
706 ] |
|
707 }, [ |
|
708 "onInstallStarted", |
|
709 "onInstallEnded", |
|
710 ], check_test_12); |
|
711 install.install(); |
|
712 }); |
|
713 } |
|
714 |
|
715 function check_test_12() { |
|
716 AddonManager.getAddonByID("theme1@tests.mozilla.org", function(t1) { |
|
717 do_check_neq(t1, null); |
|
718 do_check_false(gLWThemeChanged); |
|
719 |
|
720 do_execute_soon(run_test_13); |
|
721 }); |
|
722 } |
|
723 |
|
724 // Updating a custom theme in use should require a restart |
|
725 function run_test_13() { |
|
726 AddonManager.getAddonByID("theme1@tests.mozilla.org", callback_soon(function(t1) { |
|
727 prepare_test({ |
|
728 "theme1@tests.mozilla.org": [ |
|
729 ["onEnabling", false], |
|
730 "onEnabled" |
|
731 ], |
|
732 "default@tests.mozilla.org": [ |
|
733 ["onDisabling", false], |
|
734 "onDisabled" |
|
735 ] |
|
736 }); |
|
737 |
|
738 t1.userDisabled = false; |
|
739 ensure_test_completed(); |
|
740 restartManager(); |
|
741 |
|
742 prepare_test({ }, [ |
|
743 "onNewInstall" |
|
744 ]); |
|
745 |
|
746 AddonManager.getInstallForFile(do_get_addon("test_theme"), function(install) { |
|
747 ensure_test_completed(); |
|
748 |
|
749 do_check_neq(install, null); |
|
750 do_check_eq(install.type, "theme"); |
|
751 do_check_eq(install.version, "1.0"); |
|
752 do_check_eq(install.name, "Test Theme 1"); |
|
753 do_check_eq(install.state, AddonManager.STATE_DOWNLOADED); |
|
754 |
|
755 prepare_test({ |
|
756 "theme1@tests.mozilla.org": [ |
|
757 "onInstalling", |
|
758 ] |
|
759 }, [ |
|
760 "onInstallStarted", |
|
761 "onInstallEnded", |
|
762 ], callback_soon(check_test_13)); |
|
763 install.install(); |
|
764 }); |
|
765 })); |
|
766 } |
|
767 |
|
768 function check_test_13() { |
|
769 restartManager(); |
|
770 |
|
771 AddonManager.getAddonByID("theme1@tests.mozilla.org", function(t1) { |
|
772 do_check_neq(t1, null); |
|
773 do_check_true(t1.isActive); |
|
774 do_check_false(gLWThemeChanged); |
|
775 t1.uninstall(); |
|
776 |
|
777 do_execute_soon(run_test_14); |
|
778 }); |
|
779 } |
|
780 |
|
781 // Switching from a lightweight theme to the default theme should not require |
|
782 // a restart |
|
783 function run_test_14() { |
|
784 restartManager(); |
|
785 LightweightThemeManager.currentTheme = { |
|
786 id: "1", |
|
787 version: "1", |
|
788 name: "Test LW Theme", |
|
789 description: "A test theme", |
|
790 author: "Mozilla", |
|
791 homepageURL: "http://localhost:" + gPort + "/data/index.html", |
|
792 headerURL: "http://localhost:" + gPort + "/data/header.png", |
|
793 footerURL: "http://localhost:" + gPort + "/data/footer.png", |
|
794 previewURL: "http://localhost:" + gPort + "/data/preview.png", |
|
795 iconURL: "http://localhost:" + gPort + "/data/icon.png" |
|
796 }; |
|
797 |
|
798 AddonManager.getAddonByID("default@tests.mozilla.org", function(d) { |
|
799 do_check_true(d.userDisabled); |
|
800 do_check_false(d.isActive); |
|
801 |
|
802 prepare_test({ |
|
803 "1@personas.mozilla.org": [ |
|
804 ["onDisabling", false], |
|
805 "onDisabled" |
|
806 ], |
|
807 "default@tests.mozilla.org": [ |
|
808 ["onEnabling", false], |
|
809 "onEnabled" |
|
810 ] |
|
811 }); |
|
812 |
|
813 d.userDisabled = false; |
|
814 ensure_test_completed(); |
|
815 |
|
816 do_check_false(d.userDisabled); |
|
817 do_check_true(d.isActive); |
|
818 |
|
819 do_check_true(gLWThemeChanged); |
|
820 gLWThemeChanged = false; |
|
821 |
|
822 end_test(); |
|
823 }); |
|
824 } |