Wed, 31 Dec 2014 06:09:35 +0100
Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.
1 /* Any copyright is dedicated to the Public Domain.
2 * http://creativecommons.org/publicdomain/zero/1.0/
3 */
5 Components.utils.import("resource://gre/modules/NetUtil.jsm");
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;
13 // This verifies that themes behave as expected
15 const PREF_GENERAL_SKINS_SELECTEDSKIN = "general.skins.selectedSkin";
16 const PREF_EXTENSIONS_DSS_ENABLED = "extensions.dss.enabled";
18 Components.utils.import("resource://gre/modules/LightweightThemeManager.jsm");
20 const profileDir = gProfD.clone();
21 profileDir.append("extensions");
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;
31 gLWThemeChanged = true;
32 }
33 };
35 AM_Cc["@mozilla.org/observer-service;1"]
36 .getService(Components.interfaces.nsIObserverService)
37 .addObserver(LightweightThemeObserver, "lightweight-theme-styling-update", false);
40 function run_test() {
41 do_test_pending();
42 createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "1", "1.9.2");
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);
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);
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);
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);
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));
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));
113 do_execute_soon(run_test_1);
114 });
115 }
117 function end_test() {
118 do_execute_soon(do_test_finished);
119 }
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;
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));
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));
145 do_execute_soon(check_test_1);
146 });
147 }
149 function check_test_1() {
150 restartManager();
151 do_check_eq(Services.prefs.getCharPref(PREF_GENERAL_SKINS_SELECTEDSKIN), "theme2/1.0");
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));
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);
172 do_execute_soon(run_test_2);
173 });
174 }
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);
183 restartManager();
184 do_check_eq(Services.prefs.getCharPref(PREF_GENERAL_SKINS_SELECTEDSKIN), "classic/1.0");
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));
196 do_check_eq(t2, null);
197 do_check_false(isThemeInAddonsList(profileDir, "theme2@tests.mozilla.org"));
198 do_check_false(gLWThemeChanged);
200 do_execute_soon(run_test_3);
201 });
202 }
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();
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 ]);
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 };
247 ensure_test_completed();
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);
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);
286 do_check_true(gLWThemeChanged);
287 gLWThemeChanged = false;
289 do_execute_soon(run_test_4);
290 });
291 });
292 }
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 ]);
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 };
324 ensure_test_completed();
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);
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);
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);
356 do_check_true(gLWThemeChanged);
357 gLWThemeChanged = false;
359 do_execute_soon(run_test_5);
360 });
361 });
362 }
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 });
378 AddonManager.getAddonsByIDs(["2@personas.mozilla.org",
379 "theme2@tests.mozilla.org"], function([p2, t2]) {
380 t2.userDisabled = false;
382 ensure_test_completed();
384 prepare_test({
385 "2@personas.mozilla.org": [
386 "onEnabling"
387 ],
388 "theme2@tests.mozilla.org": [
389 ["onDisabling", false],
390 "onDisabled"
391 ]
392 });
394 p2.userDisabled = false;
396 ensure_test_completed();
398 prepare_test({
399 "2@personas.mozilla.org": [
400 ["onOperationCancelled", true]
401 ],
402 "theme2@tests.mozilla.org": [
403 ["onEnabling", false],
404 "onEnabled"
405 ]
406 });
408 t2.userDisabled = false;
410 ensure_test_completed();
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);
421 do_execute_soon(check_test_5);
422 });
423 }
425 function check_test_5() {
426 restartManager();
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));
437 do_check_true(gLWThemeChanged);
438 gLWThemeChanged = false;
440 do_execute_soon(run_test_6);
441 });
442 }
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 });
456 AddonManager.getAddonsByIDs(["2@personas.mozilla.org",
457 "theme2@tests.mozilla.org"], function([p2, t2]) {
458 p2.userDisabled = false;
460 ensure_test_completed();
462 prepare_test({
463 "2@personas.mozilla.org": [
464 "onOperationCancelled",
465 ],
466 "theme2@tests.mozilla.org": [
467 ["onEnabling", false],
468 "onEnabled"
469 ]
470 });
472 t2.userDisabled = false;
474 ensure_test_completed();
476 prepare_test({
477 "2@personas.mozilla.org": [
478 "onEnabling",
479 ],
480 "theme2@tests.mozilla.org": [
481 ["onDisabling", false],
482 "onDisabled"
483 ]
484 });
486 p2.userDisabled = false;
488 ensure_test_completed();
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);
498 do_execute_soon(check_test_6);
499 });
500 }
502 function check_test_6() {
503 restartManager();
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));
514 do_check_true(gLWThemeChanged);
515 gLWThemeChanged = false;
517 do_execute_soon(run_test_7);
518 });
519 }
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 });
530 AddonManager.getAddonByID("1@personas.mozilla.org", function(p1) {
531 p1.uninstall();
533 ensure_test_completed();
534 do_check_eq(LightweightThemeManager.usedThemes.length, 1);
535 do_check_false(gLWThemeChanged);
537 do_execute_soon(run_test_8);
538 });
539 }
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 });
557 AddonManager.getAddonByID("2@personas.mozilla.org", function(p2) {
558 p2.uninstall();
560 ensure_test_completed();
561 do_check_eq(LightweightThemeManager.usedThemes.length, 0);
563 do_check_true(gLWThemeChanged);
564 gLWThemeChanged = false;
566 do_execute_soon(run_test_9);
567 });
568 }
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 });
580 t1.uninstall();
582 ensure_test_completed();
584 AddonManager.getAddonByID("theme1@tests.mozilla.org", function(newt1) {
585 do_check_eq(newt1, null);
586 do_check_false(gLWThemeChanged);
588 do_execute_soon(run_test_10);
589 });
590 });
591 }
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 });
607 oldt2.userDisabled = false;
609 ensure_test_completed();
611 restartManager();
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);
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 });
634 t2.uninstall();
636 ensure_test_completed();
637 do_check_false(gLWThemeChanged);
639 restartManager();
641 do_execute_soon(run_test_11);
642 }));
643 }));
644 }
646 // Installing a custom theme not in use should not require a restart
647 function run_test_11() {
648 prepare_test({ }, [
649 "onNewInstall"
650 ]);
652 AddonManager.getInstallForFile(do_get_addon("test_theme"), function(install) {
653 ensure_test_completed();
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);
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 }
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);
683 do_execute_soon(run_test_12);
684 });
685 }
687 // Updating a custom theme not in use should not require a restart
688 function run_test_12() {
689 prepare_test({ }, [
690 "onNewInstall"
691 ]);
693 AddonManager.getInstallForFile(do_get_addon("test_theme"), function(install) {
694 ensure_test_completed();
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);
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 }
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);
720 do_execute_soon(run_test_13);
721 });
722 }
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 });
738 t1.userDisabled = false;
739 ensure_test_completed();
740 restartManager();
742 prepare_test({ }, [
743 "onNewInstall"
744 ]);
746 AddonManager.getInstallForFile(do_get_addon("test_theme"), function(install) {
747 ensure_test_completed();
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);
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 }
768 function check_test_13() {
769 restartManager();
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();
777 do_execute_soon(run_test_14);
778 });
779 }
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 };
798 AddonManager.getAddonByID("default@tests.mozilla.org", function(d) {
799 do_check_true(d.userDisabled);
800 do_check_false(d.isActive);
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 });
813 d.userDisabled = false;
814 ensure_test_completed();
816 do_check_false(d.userDisabled);
817 do_check_true(d.isActive);
819 do_check_true(gLWThemeChanged);
820 gLWThemeChanged = false;
822 end_test();
823 });
824 }