Sat, 03 Jan 2015 20:18:00 +0100
Conditionally enable double key logic according to:
private browsing mode or privacy.thirdparty.isolate preference and
implement in GetCookieStringCommon and FindCookie where it counts...
With some reservations of how to convince FindCookie users to test
condition and pass a nullptr when disabling double key logic.
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 // The maximum allowable time since install. If an add-on claims to have been
8 // installed longer ago than this the the test will fail.
9 const MAX_INSTALL_TIME = 10000;
11 // This verifies that themes behave as expected
13 const PREF_GENERAL_SKINS_SELECTEDSKIN = "general.skins.selectedSkin";
15 Components.utils.import("resource://gre/modules/LightweightThemeManager.jsm");
17 const profileDir = gProfD.clone();
18 profileDir.append("extensions");
20 // Observer to ensure a "lightweight-theme-styling-update" notification is sent
21 // when expected
22 var gLWThemeChanged = false;
23 var LightweightThemeObserver = {
24 observe: function(aSubject, aTopic, aData) {
25 if (aTopic != "lightweight-theme-styling-update")
26 return;
28 gLWThemeChanged = true;
29 }
30 };
32 AM_Cc["@mozilla.org/observer-service;1"]
33 .getService(Components.interfaces.nsIObserverService)
34 .addObserver(LightweightThemeObserver, "lightweight-theme-styling-update", false);
37 function run_test() {
38 do_test_pending();
39 createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "1", "1.9.2");
41 Services.prefs.setCharPref(PREF_GENERAL_SKINS_SELECTEDSKIN, "theme1/1.0");
42 writeInstallRDFForExtension({
43 id: "theme1@tests.mozilla.org",
44 version: "1.0",
45 name: "Test 1",
46 type: 4,
47 skinnable: true,
48 internalName: "theme1/1.0",
49 targetApplications: [{
50 id: "xpcshell@tests.mozilla.org",
51 minVersion: "1",
52 maxVersion: "2"
53 }]
54 }, profileDir);
56 writeInstallRDFForExtension({
57 id: "theme2@tests.mozilla.org",
58 version: "1.0",
59 name: "Test 1",
60 skinnable: false,
61 internalName: "theme2/1.0",
62 targetApplications: [{
63 id: "xpcshell@tests.mozilla.org",
64 minVersion: "1",
65 maxVersion: "2"
66 }]
67 }, profileDir);
69 // We need a default theme for some of these things to work but we have hidden
70 // the one in the application directory.
71 writeInstallRDFForExtension({
72 id: "default@tests.mozilla.org",
73 version: "1.0",
74 name: "Default",
75 internalName: "classic/1.0",
76 targetApplications: [{
77 id: "xpcshell@tests.mozilla.org",
78 minVersion: "1",
79 maxVersion: "2"
80 }]
81 }, profileDir);
83 startupManager();
84 // Make sure we only register once despite multiple calls
85 AddonManager.addInstallListener(InstallListener);
86 AddonManager.addAddonListener(AddonListener);
87 AddonManager.addInstallListener(InstallListener);
88 AddonManager.addAddonListener(AddonListener);
89 AddonManager.addInstallListener(InstallListener);
91 AddonManager.getAddonsByIDs(["default@tests.mozilla.org",
92 "theme1@tests.mozilla.org",
93 "theme2@tests.mozilla.org"],
94 function([d, t1, t2]) {
95 do_check_neq(d, null);
96 do_check_false(d.skinnable);
97 do_check_false(d.foreignInstall);
99 do_check_neq(t1, null);
100 do_check_false(t1.userDisabled);
101 do_check_false(t1.appDisabled);
102 do_check_true(t1.isActive);
103 do_check_true(t1.skinnable);
104 do_check_true(t1.foreignInstall);
105 do_check_eq(t1.screenshots, null);
106 do_check_true(isThemeInAddonsList(profileDir, t1.id));
107 do_check_false(hasFlag(t1.permissions, AddonManager.PERM_CAN_DISABLE));
108 do_check_false(hasFlag(t1.permissions, AddonManager.PERM_CAN_ENABLE));
109 do_check_eq(t1.operationsRequiringRestart, AddonManager.OP_NEEDS_RESTART_UNINSTALL |
110 AddonManager.OP_NEEDS_RESTART_DISABLE);
112 do_check_neq(t2, null);
113 do_check_true(t2.userDisabled);
114 do_check_false(t2.appDisabled);
115 do_check_false(t2.isActive);
116 do_check_false(t2.skinnable);
117 do_check_true(t2.foreignInstall);
118 do_check_eq(t2.screenshots, null);
119 do_check_false(isThemeInAddonsList(profileDir, t2.id));
120 do_check_false(hasFlag(t2.permissions, AddonManager.PERM_CAN_DISABLE));
121 do_check_true(hasFlag(t2.permissions, AddonManager.PERM_CAN_ENABLE));
122 do_check_eq(t2.operationsRequiringRestart, AddonManager.OP_NEEDS_RESTART_ENABLE);
124 do_execute_soon(run_test_1);
125 });
126 }
128 function end_test() {
129 do_execute_soon(do_test_finished);
130 }
132 // Checks enabling one theme disables the others
133 function run_test_1() {
134 prepare_test({
135 "theme1@tests.mozilla.org": [
136 "onDisabling"
137 ],
138 "theme2@tests.mozilla.org": [
139 "onEnabling"
140 ]
141 });
142 AddonManager.getAddonsByIDs(["theme1@tests.mozilla.org",
143 "theme2@tests.mozilla.org"], function([t1, t2]) {
144 t2.userDisabled = false;
146 ensure_test_completed();
147 do_check_false(hasFlag(t2.permissions, AddonManager.PERM_CAN_DISABLE));
148 do_check_false(hasFlag(t2.permissions, AddonManager.PERM_CAN_ENABLE));
150 do_check_true(t1.userDisabled);
151 do_check_false(hasFlag(t1.permissions, AddonManager.PERM_CAN_DISABLE));
152 do_check_true(hasFlag(t1.permissions, AddonManager.PERM_CAN_ENABLE));
154 do_execute_soon(check_test_1);
155 });
156 }
158 function check_test_1() {
159 restartManager();
160 do_check_eq(Services.prefs.getCharPref(PREF_GENERAL_SKINS_SELECTEDSKIN), "theme2/1.0");
162 AddonManager.getAddonsByIDs(["theme1@tests.mozilla.org",
163 "theme2@tests.mozilla.org"], function([t1, t2]) {
164 do_check_neq(t1, null);
165 do_check_true(t1.userDisabled);
166 do_check_false(t1.appDisabled);
167 do_check_false(t1.isActive);
168 do_check_false(isThemeInAddonsList(profileDir, t1.id));
169 do_check_false(hasFlag(t1.permissions, AddonManager.PERM_CAN_DISABLE));
170 do_check_true(hasFlag(t1.permissions, AddonManager.PERM_CAN_ENABLE));
171 do_check_eq(t1.operationsRequiringRestart, AddonManager.OP_NEEDS_RESTART_ENABLE);
173 do_check_neq(t2, null);
174 do_check_false(t2.userDisabled);
175 do_check_false(t2.appDisabled);
176 do_check_true(t2.isActive);
177 do_check_true(isThemeInAddonsList(profileDir, t2.id));
178 do_check_false(hasFlag(t2.permissions, AddonManager.PERM_CAN_DISABLE));
179 do_check_false(hasFlag(t2.permissions, AddonManager.PERM_CAN_ENABLE));
180 do_check_eq(t2.operationsRequiringRestart, AddonManager.OP_NEEDS_RESTART_UNINSTALL |
181 AddonManager.OP_NEEDS_RESTART_DISABLE);
182 do_check_false(gLWThemeChanged);
184 do_execute_soon(run_test_2);
185 });
186 }
188 // Removing the active theme should fall back to the default (not ideal in this
189 // case since we don't have the default theme installed)
190 function run_test_2() {
191 var dest = profileDir.clone();
192 dest.append(do_get_expected_addon_name("theme2@tests.mozilla.org"));
193 dest.remove(true);
195 restartManager();
196 do_check_eq(Services.prefs.getCharPref(PREF_GENERAL_SKINS_SELECTEDSKIN), "classic/1.0");
198 AddonManager.getAddonsByIDs(["theme1@tests.mozilla.org",
199 "theme2@tests.mozilla.org"], function([t1, t2]) {
200 do_check_neq(t1, null);
201 do_check_true(t1.userDisabled);
202 do_check_false(t1.appDisabled);
203 do_check_false(t1.isActive);
204 do_check_false(isThemeInAddonsList(profileDir, t1.id));
205 do_check_false(hasFlag(t1.permissions, AddonManager.PERM_CAN_DISABLE));
206 do_check_true(hasFlag(t1.permissions, AddonManager.PERM_CAN_ENABLE));
208 do_check_eq(t2, null);
209 do_check_false(isThemeInAddonsList(profileDir, "theme2@tests.mozilla.org"));
210 do_check_false(gLWThemeChanged);
212 do_execute_soon(run_test_3);
213 });
214 }
216 // Installing a lightweight theme should happen instantly and disable the default theme
217 function run_test_3() {
218 writeInstallRDFForExtension({
219 id: "theme2@tests.mozilla.org",
220 version: "1.0",
221 name: "Test 1",
222 internalName: "theme2/1.0",
223 targetApplications: [{
224 id: "xpcshell@tests.mozilla.org",
225 minVersion: "1",
226 maxVersion: "2"
227 }]
228 }, profileDir);
229 restartManager();
231 prepare_test({
232 "1@personas.mozilla.org": [
233 ["onInstalling", false],
234 "onInstalled",
235 ["onEnabling", false],
236 "onEnabled"
237 ],
238 "default@tests.mozilla.org": [
239 ["onDisabling", false],
240 "onDisabled",
241 ]
242 }, [
243 "onExternalInstall"
244 ]);
246 LightweightThemeManager.currentTheme = {
247 id: "1",
248 version: "1",
249 name: "Test LW Theme",
250 description: "A test theme",
251 author: "Mozilla",
252 homepageURL: "http://localhost/data/index.html",
253 headerURL: "http://localhost/data/header.png",
254 footerURL: "http://localhost/data/footer.png",
255 previewURL: "http://localhost/data/preview.png",
256 iconURL: "http://localhost/data/icon.png"
257 };
259 ensure_test_completed();
261 AddonManager.getAddonByID("1@personas.mozilla.org", function(p1) {
262 do_check_neq(null, p1);
263 do_check_eq(p1.name, "Test LW Theme");
264 do_check_eq(p1.version, "1");
265 do_check_eq(p1.type, "theme");
266 do_check_eq(p1.description, "A test theme");
267 do_check_eq(p1.creator, "Mozilla");
268 do_check_eq(p1.homepageURL, "http://localhost/data/index.html");
269 do_check_eq(p1.iconURL, "http://localhost/data/icon.png");
270 do_check_eq(p1.screenshots.length, 1);
271 do_check_eq(p1.screenshots[0], "http://localhost/data/preview.png");
272 do_check_false(p1.appDisabled);
273 do_check_false(p1.userDisabled);
274 do_check_true(p1.isCompatible);
275 do_check_true(p1.providesUpdatesSecurely);
276 do_check_eq(p1.blocklistState, 0);
277 do_check_true(p1.isActive);
278 do_check_eq(p1.pendingOperations, 0);
279 do_check_eq(p1.permissions, AddonManager.PERM_CAN_UNINSTALL | AddonManager.PERM_CAN_DISABLE);
280 do_check_eq(p1.scope, AddonManager.SCOPE_PROFILE);
281 do_check_true("isCompatibleWith" in p1);
282 do_check_true("findUpdates" in p1);
283 do_check_eq(p1.installDate.getTime(), p1.updateDate.getTime());
285 // Should have been installed sometime in the last few seconds.
286 let difference = Date.now() - p1.installDate.getTime();
287 if (difference > MAX_INSTALL_TIME)
288 do_throw("Add-on was installed " + difference + "ms ago");
289 else if (difference < 0)
290 do_throw("Add-on was installed " + difference + "ms in the future");
292 AddonManager.getAddonsByTypes(["theme"], function(addons) {
293 let seen = false;
294 addons.forEach(function(a) {
295 if (a.id == "1@personas.mozilla.org") {
296 seen = true;
297 }
298 else {
299 dump("Checking theme " + a.id + "\n");
300 do_check_false(a.isActive);
301 do_check_true(a.userDisabled);
302 }
303 });
304 do_check_true(seen);
306 do_check_true(gLWThemeChanged);
307 gLWThemeChanged = false;
309 do_execute_soon(run_test_4);
310 });
311 });
312 }
314 // Installing a second lightweight theme should disable the first with no restart
315 function run_test_4() {
316 prepare_test({
317 "1@personas.mozilla.org": [
318 ["onDisabling", false],
319 "onDisabled",
320 ],
321 "2@personas.mozilla.org": [
322 ["onInstalling", false],
323 "onInstalled",
324 ["onEnabling", false],
325 "onEnabled"
326 ]
327 }, [
328 "onExternalInstall"
329 ]);
331 LightweightThemeManager.currentTheme = {
332 id: "2",
333 version: "1",
334 name: "Test LW Theme",
335 description: "A second test theme",
336 author: "Mozilla",
337 homepageURL: "http://localhost/data/index.html",
338 headerURL: "http://localhost/data/header.png",
339 footerURL: "http://localhost/data/footer.png",
340 previewURL: "http://localhost/data/preview.png",
341 iconURL: "http://localhost/data/icon.png"
342 };
344 ensure_test_completed();
346 AddonManager.getAddonsByIDs(["1@personas.mozilla.org",
347 "2@personas.mozilla.org"], function([p1, p2]) {
348 do_check_neq(null, p2);
349 do_check_false(p2.appDisabled);
350 do_check_false(p2.userDisabled);
351 do_check_true(p2.isActive);
352 do_check_eq(p2.pendingOperations, 0);
353 do_check_eq(p2.permissions, AddonManager.PERM_CAN_UNINSTALL | AddonManager.PERM_CAN_DISABLE);
354 do_check_eq(p2.installDate.getTime(), p2.updateDate.getTime());
356 // Should have been installed sometime in the last few seconds.
357 let difference = Date.now() - p2.installDate.getTime();
358 if (difference > MAX_INSTALL_TIME)
359 do_throw("Add-on was installed " + difference + "ms ago");
360 else if (difference < 0)
361 do_throw("Add-on was installed " + difference + "ms in the future");
363 do_check_neq(null, p1);
364 do_check_false(p1.appDisabled);
365 do_check_true(p1.userDisabled);
366 do_check_false(p1.isActive);
367 do_check_eq(p1.pendingOperations, 0);
368 do_check_eq(p1.permissions, AddonManager.PERM_CAN_UNINSTALL | AddonManager.PERM_CAN_ENABLE);
370 AddonManager.getAddonsByTypes(["theme"], function(addons) {
371 let seen = false;
372 addons.forEach(function(a) {
373 if (a.id == "2@personas.mozilla.org") {
374 seen = true;
375 }
376 else {
377 dump("Checking theme " + a.id + "\n");
378 do_check_false(a.isActive);
379 do_check_true(a.userDisabled);
380 }
381 });
382 do_check_true(seen);
384 do_check_true(gLWThemeChanged);
385 gLWThemeChanged = false;
387 do_execute_soon(run_test_5);
388 });
389 });
390 }
392 // Switching to a custom theme should disable the lightweight theme and require
393 // a restart. Cancelling that should also be possible.
394 function run_test_5() {
395 prepare_test({
396 "2@personas.mozilla.org": [
397 "onDisabling",
398 ],
399 "theme2@tests.mozilla.org": [
400 "onEnabling"
401 ]
402 });
404 AddonManager.getAddonsByIDs(["2@personas.mozilla.org",
405 "theme2@tests.mozilla.org"], function([p2, t2]) {
406 t2.userDisabled = false;
408 ensure_test_completed();
410 prepare_test({
411 "2@personas.mozilla.org": [
412 "onOperationCancelled",
413 ],
414 "theme2@tests.mozilla.org": [
415 "onOperationCancelled"
416 ]
417 });
419 p2.userDisabled = false;
421 ensure_test_completed();
423 prepare_test({
424 "2@personas.mozilla.org": [
425 "onDisabling",
426 ],
427 "theme2@tests.mozilla.org": [
428 "onEnabling"
429 ]
430 });
432 t2.userDisabled = false;
434 ensure_test_completed();
436 do_check_false(t2.isActive);
437 do_check_false(t2.userDisabled);
438 do_check_true(hasFlag(AddonManager.PENDING_ENABLE, t2.pendingOperations));
439 do_check_true(p2.isActive);
440 do_check_true(p2.userDisabled);
441 do_check_true(hasFlag(AddonManager.PENDING_DISABLE, p2.pendingOperations));
442 do_check_true(hasFlag(AddonManager.PERM_CAN_ENABLE, p2.permissions));
443 do_check_false(gLWThemeChanged);
445 do_execute_soon(check_test_5);
446 });
447 }
449 function check_test_5() {
450 restartManager();
452 AddonManager.getAddonsByIDs(["2@personas.mozilla.org",
453 "theme2@tests.mozilla.org"], function([p2, t2]) {
454 do_check_true(t2.isActive);
455 do_check_false(t2.userDisabled);
456 do_check_false(hasFlag(AddonManager.PENDING_ENABLE, t2.pendingOperations));
457 do_check_false(p2.isActive);
458 do_check_true(p2.userDisabled);
459 do_check_false(hasFlag(AddonManager.PENDING_DISABLE, p2.pendingOperations));
461 do_check_true(gLWThemeChanged);
462 gLWThemeChanged = false;
464 do_execute_soon(run_test_6);
465 });
466 }
468 // Switching from a custom theme to a lightweight theme should require a restart
469 function run_test_6() {
470 prepare_test({
471 "2@personas.mozilla.org": [
472 "onEnabling",
473 ],
474 "theme2@tests.mozilla.org": [
475 "onDisabling"
476 ]
477 });
479 AddonManager.getAddonsByIDs(["2@personas.mozilla.org",
480 "theme2@tests.mozilla.org"], function([p2, t2]) {
481 p2.userDisabled = false;
483 ensure_test_completed();
485 prepare_test({
486 "2@personas.mozilla.org": [
487 "onOperationCancelled",
488 ],
489 "theme2@tests.mozilla.org": [
490 "onOperationCancelled"
491 ]
492 });
494 t2.userDisabled = false;
496 ensure_test_completed();
498 prepare_test({
499 "2@personas.mozilla.org": [
500 "onEnabling",
501 ],
502 "theme2@tests.mozilla.org": [
503 "onDisabling"
504 ]
505 });
507 p2.userDisabled = false;
509 ensure_test_completed();
511 do_check_false(p2.isActive);
512 do_check_false(p2.userDisabled);
513 do_check_true(hasFlag(AddonManager.PENDING_ENABLE, p2.pendingOperations));
514 do_check_true(t2.isActive);
515 do_check_true(t2.userDisabled);
516 do_check_true(hasFlag(AddonManager.PENDING_DISABLE, t2.pendingOperations));
517 do_check_false(gLWThemeChanged);
519 do_execute_soon(check_test_6);
520 });
521 }
523 function check_test_6() {
524 restartManager();
526 AddonManager.getAddonsByIDs(["2@personas.mozilla.org",
527 "theme2@tests.mozilla.org"], function([p2, t2]) {
528 do_check_true(p2.isActive);
529 do_check_false(p2.userDisabled);
530 do_check_false(hasFlag(AddonManager.PENDING_ENABLE, p2.pendingOperations));
531 do_check_false(t2.isActive);
532 do_check_true(t2.userDisabled);
533 do_check_false(hasFlag(AddonManager.PENDING_DISABLE, t2.pendingOperations));
535 do_check_true(gLWThemeChanged);
536 gLWThemeChanged = false;
538 do_execute_soon(run_test_7);
539 });
540 }
542 // Uninstalling a lightweight theme should not require a restart
543 function run_test_7() {
544 prepare_test({
545 "1@personas.mozilla.org": [
546 ["onUninstalling", false],
547 "onUninstalled"
548 ]
549 });
551 AddonManager.getAddonByID("1@personas.mozilla.org", function(p1) {
552 p1.uninstall();
554 ensure_test_completed();
555 do_check_eq(LightweightThemeManager.usedThemes.length, 1);
556 do_check_false(gLWThemeChanged);
558 do_execute_soon(run_test_8);
559 });
560 }
562 // Uninstalling a lightweight theme in use should not require a restart and it
563 // should reactivate the default theme
564 // Also, uninstalling a lightweight theme in use should send a
565 // "lightweight-theme-styling-update" notification through the observer service
566 function run_test_8() {
567 prepare_test({
568 "2@personas.mozilla.org": [
569 ["onUninstalling", false],
570 "onUninstalled"
571 ],
572 "default@tests.mozilla.org": [
573 ["onEnabling", false],
574 "onEnabled"
575 ]
576 });
578 AddonManager.getAddonByID("2@personas.mozilla.org", function(p2) {
579 p2.uninstall();
581 ensure_test_completed();
582 do_check_eq(LightweightThemeManager.usedThemes.length, 0);
584 do_check_true(gLWThemeChanged);
585 gLWThemeChanged = false;
587 do_execute_soon(run_test_9);
588 });
589 }
591 // Uninstalling a theme not in use should not require a restart
592 function run_test_9() {
593 AddonManager.getAddonByID("theme1@tests.mozilla.org", function(t1) {
594 prepare_test({
595 "theme1@tests.mozilla.org": [
596 ["onUninstalling", false],
597 "onUninstalled"
598 ]
599 });
601 t1.uninstall();
603 ensure_test_completed();
605 AddonManager.getAddonByID("theme1@tests.mozilla.org", function(newt1) {
606 do_check_eq(newt1, null);
607 do_check_false(gLWThemeChanged);
609 do_execute_soon(run_test_10);
610 });
611 });
612 }
614 // Uninstalling a custom theme in use should require a restart
615 function run_test_10() {
616 AddonManager.getAddonByID("theme2@tests.mozilla.org", callback_soon(function(oldt2) {
617 prepare_test({
618 "theme2@tests.mozilla.org": [
619 "onEnabling",
620 ],
621 "default@tests.mozilla.org": [
622 "onDisabling"
623 ]
624 });
626 oldt2.userDisabled = false;
628 ensure_test_completed();
630 restartManager();
632 AddonManager.getAddonsByIDs(["default@tests.mozilla.org",
633 "theme2@tests.mozilla.org"], function([d, t2]) {
634 do_check_true(t2.isActive);
635 do_check_false(t2.userDisabled);
636 do_check_false(t2.appDisabled);
637 do_check_false(d.isActive);
638 do_check_true(d.userDisabled);
639 do_check_false(d.appDisabled);
641 prepare_test({
642 "theme2@tests.mozilla.org": [
643 "onUninstalling",
644 ],
645 "default@tests.mozilla.org": [
646 "onEnabling"
647 ]
648 });
650 t2.uninstall();
652 ensure_test_completed();
653 do_check_false(gLWThemeChanged);
655 do_execute_soon(run_test_11);
656 });
657 }));
658 }
660 // Installing a custom theme not in use should not require a restart
661 function run_test_11() {
662 restartManager();
664 prepare_test({ }, [
665 "onNewInstall"
666 ]);
668 AddonManager.getInstallForFile(do_get_addon("test_theme"), function(install) {
669 ensure_test_completed();
671 do_check_neq(install, null);
672 do_check_eq(install.type, "theme");
673 do_check_eq(install.version, "1.0");
674 do_check_eq(install.name, "Test Theme 1");
675 do_check_eq(install.state, AddonManager.STATE_DOWNLOADED);
676 do_check_true(install.addon.skinnable, true);
677 do_check_false(hasFlag(install.addon.operationsRequiringRestart, AddonManager.OP_NEEDS_RESTART_INSTALL));
679 prepare_test({
680 "theme1@tests.mozilla.org": [
681 ["onInstalling", false],
682 "onInstalled"
683 ]
684 }, [
685 "onInstallStarted",
686 "onInstallEnded",
687 ], check_test_11);
688 install.install();
689 });
690 }
692 function check_test_11() {
693 AddonManager.getAddonByID("theme1@tests.mozilla.org", function(t1) {
694 do_check_neq(t1, null);
695 var previewSpec = do_get_addon_root_uri(profileDir, "theme1@tests.mozilla.org") + "preview.png";
696 do_check_eq(t1.screenshots.length, 1);
697 do_check_eq(t1.screenshots[0], previewSpec);
698 do_check_true(t1.skinnable);
699 do_check_false(gLWThemeChanged);
701 do_execute_soon(run_test_12);
702 });
703 }
705 // Updating a custom theme not in use should not require a restart
706 function run_test_12() {
707 prepare_test({ }, [
708 "onNewInstall"
709 ]);
711 AddonManager.getInstallForFile(do_get_addon("test_theme"), function(install) {
712 ensure_test_completed();
714 do_check_neq(install, null);
715 do_check_eq(install.type, "theme");
716 do_check_eq(install.version, "1.0");
717 do_check_eq(install.name, "Test Theme 1");
718 do_check_eq(install.state, AddonManager.STATE_DOWNLOADED);
719 do_check_false(hasFlag(install.addon.operationsRequiringRestart, AddonManager.OP_NEEDS_RESTART_INSTALL));
721 prepare_test({
722 "theme1@tests.mozilla.org": [
723 ["onInstalling", false],
724 "onInstalled"
725 ]
726 }, [
727 "onInstallStarted",
728 "onInstallEnded",
729 ], check_test_12);
730 install.install();
731 });
732 }
734 function check_test_12() {
735 AddonManager.getAddonByID("theme1@tests.mozilla.org", function(t1) {
736 do_check_neq(t1, null);
737 do_check_false(gLWThemeChanged);
739 do_execute_soon(run_test_13);
740 });
741 }
743 // Updating a custom theme in use should require a restart
744 function run_test_13() {
745 AddonManager.getAddonByID("theme1@tests.mozilla.org", callback_soon(function(t1) {
746 prepare_test({
747 "theme1@tests.mozilla.org": [
748 "onEnabling",
749 ],
750 "default@tests.mozilla.org": [
751 "onDisabling"
752 ]
753 });
755 t1.userDisabled = false;
756 ensure_test_completed();
757 restartManager();
759 prepare_test({ }, [
760 "onNewInstall"
761 ]);
763 AddonManager.getInstallForFile(do_get_addon("test_theme"), function(install) {
764 ensure_test_completed();
766 do_check_neq(install, null);
767 do_check_eq(install.type, "theme");
768 do_check_eq(install.version, "1.0");
769 do_check_eq(install.name, "Test Theme 1");
770 do_check_eq(install.state, AddonManager.STATE_DOWNLOADED);
771 do_check_true(hasFlag(install.addon.operationsRequiringRestart, AddonManager.OP_NEEDS_RESTART_INSTALL));
773 prepare_test({
774 "theme1@tests.mozilla.org": [
775 "onInstalling",
776 ]
777 }, [
778 "onInstallStarted",
779 "onInstallEnded",
780 ], callback_soon(check_test_13));
781 install.install();
782 });
783 }));
784 }
786 function check_test_13() {
787 restartManager();
789 AddonManager.getAddonByID("theme1@tests.mozilla.org", callback_soon(function(t1) {
790 do_check_neq(t1, null);
791 do_check_true(t1.isActive);
792 do_check_false(gLWThemeChanged);
793 t1.uninstall();
794 restartManager();
796 do_execute_soon(run_test_14);
797 }));
798 }
800 // Switching from a lightweight theme to the default theme should not require
801 // a restart
802 function run_test_14() {
803 LightweightThemeManager.currentTheme = {
804 id: "1",
805 version: "1",
806 name: "Test LW Theme",
807 description: "A test theme",
808 author: "Mozilla",
809 homepageURL: "http://localhost/data/index.html",
810 headerURL: "http://localhost/data/header.png",
811 footerURL: "http://localhost/data/footer.png",
812 previewURL: "http://localhost/data/preview.png",
813 iconURL: "http://localhost/data/icon.png"
814 };
816 AddonManager.getAddonByID("default@tests.mozilla.org", function(d) {
817 do_check_true(d.userDisabled);
818 do_check_false(d.isActive);
820 prepare_test({
821 "1@personas.mozilla.org": [
822 ["onDisabling", false],
823 "onDisabled"
824 ],
825 "default@tests.mozilla.org": [
826 ["onEnabling", false],
827 "onEnabled"
828 ]
829 });
831 d.userDisabled = false;
832 ensure_test_completed();
834 do_check_false(d.userDisabled);
835 do_check_true(d.isActive);
837 do_check_true(gLWThemeChanged);
838 gLWThemeChanged = false;
840 do_execute_soon(run_test_15);
841 });
842 }
844 // Upgrading the application with a custom theme in use should not disable it
845 function run_test_15() {
846 restartManager();
848 installAllFiles([do_get_addon("test_theme")], function() {
849 AddonManager.getAddonByID("theme1@tests.mozilla.org", callback_soon(function(t1) {
850 t1.userDisabled = false;
852 restartManager();
854 do_check_eq(Services.prefs.getCharPref(PREF_GENERAL_SKINS_SELECTEDSKIN), "theme1/1.0");
855 AddonManager.getAddonsByIDs(["default@tests.mozilla.org",
856 "theme1@tests.mozilla.org"],
857 callback_soon(function([d, t1]) {
858 do_check_true(d.userDisabled);
859 do_check_false(d.appDisabled);
860 do_check_false(d.isActive);
862 do_check_false(t1.userDisabled);
863 do_check_false(t1.appDisabled);
864 do_check_true(t1.isActive);
866 restartManager("2");
868 do_check_eq(Services.prefs.getCharPref(PREF_GENERAL_SKINS_SELECTEDSKIN), "theme1/1.0");
869 AddonManager.getAddonsByIDs(["default@tests.mozilla.org",
870 "theme1@tests.mozilla.org"], function([d, t1]) {
871 do_check_true(d.userDisabled);
872 do_check_false(d.appDisabled);
873 do_check_false(d.isActive);
875 do_check_false(t1.userDisabled);
876 do_check_false(t1.appDisabled);
877 do_check_true(t1.isActive);
879 do_execute_soon(run_test_16);
880 });
881 }));
882 }));
883 });
884 }
886 // Upgrading the application with a custom theme in use should disable it if it
887 // is no longer compatible
888 function run_test_16() {
889 restartManager("3");
891 do_check_eq(Services.prefs.getCharPref(PREF_GENERAL_SKINS_SELECTEDSKIN), "classic/1.0");
892 AddonManager.getAddonsByIDs(["default@tests.mozilla.org",
893 "theme1@tests.mozilla.org"], function([d, t1]) {
894 do_check_false(d.userDisabled);
895 do_check_false(d.appDisabled);
896 do_check_true(d.isActive);
898 do_check_true(t1.userDisabled);
899 do_check_true(t1.appDisabled);
900 do_check_false(t1.isActive);
902 do_execute_soon(run_test_17);
903 });
904 }
906 // Verifies that if the selected theme pref is changed by a different version
907 // of the application that we correctly reset it when it points to an
908 // incompatible theme
909 function run_test_17() {
910 restartManager("2");
911 shutdownManager();
913 Services.prefs.setCharPref(PREF_GENERAL_SKINS_SELECTEDSKIN, "theme1/1.0");
915 restartManager("3");
917 do_check_eq(Services.prefs.getCharPref(PREF_GENERAL_SKINS_SELECTEDSKIN), "classic/1.0");
918 AddonManager.getAddonsByIDs(["default@tests.mozilla.org",
919 "theme1@tests.mozilla.org"], function([d, t1]) {
920 do_check_false(d.userDisabled);
921 do_check_false(d.appDisabled);
922 do_check_true(d.isActive);
924 do_check_true(t1.userDisabled);
925 do_check_true(t1.appDisabled);
926 do_check_false(t1.isActive);
928 do_execute_soon(run_test_18);
929 });
930 }
932 // Disabling the active theme should switch back to the default theme
933 function run_test_18() {
934 restartManager(2);
936 AddonManager.getAddonByID("theme1@tests.mozilla.org", callback_soon(function(t1) {
937 t1.userDisabled = false;
939 restartManager();
941 AddonManager.getAddonsByIDs(["default@tests.mozilla.org",
942 "theme1@tests.mozilla.org"],
943 callback_soon(function([d, t1]) {
944 do_check_true(d.userDisabled);
945 do_check_false(d.appDisabled);
946 do_check_false(d.isActive);
948 do_check_false(t1.userDisabled);
949 do_check_false(t1.appDisabled);
950 do_check_true(t1.isActive);
952 prepare_test({
953 "theme1@tests.mozilla.org": [
954 "onDisabling",
955 ],
956 "default@tests.mozilla.org": [
957 "onEnabling",
958 ]
959 });
960 t1.userDisabled = true;
961 ensure_test_completed();
963 do_check_false(d.userDisabled);
964 do_check_false(d.appDisabled);
965 do_check_false(d.isActive);
967 do_check_true(t1.userDisabled);
968 do_check_false(t1.appDisabled);
969 do_check_true(t1.isActive);
971 restartManager();
973 AddonManager.getAddonsByIDs(["default@tests.mozilla.org",
974 "theme1@tests.mozilla.org"], function([d, t1]) {
975 do_check_false(d.userDisabled);
976 do_check_false(d.appDisabled);
977 do_check_true(d.isActive);
979 do_check_true(t1.userDisabled);
980 do_check_false(t1.appDisabled);
981 do_check_false(t1.isActive);
983 do_execute_soon(run_test_19);
984 });
985 }));
986 }));
987 }
989 // Disabling the active persona should switch back to the default theme
990 function run_test_19() {
991 AddonManager.getAddonsByIDs(["default@tests.mozilla.org",
992 "1@personas.mozilla.org"], function([d, p1]) {
993 p1.userDisabled = false;
995 do_check_true(d.userDisabled);
996 do_check_false(d.appDisabled);
997 do_check_false(d.isActive);
999 do_check_false(p1.userDisabled);
1000 do_check_false(p1.appDisabled);
1001 do_check_true(p1.isActive);
1003 prepare_test({
1004 "1@personas.mozilla.org": [
1005 ["onDisabling", false],
1006 "onDisabled"
1007 ],
1008 "default@tests.mozilla.org": [
1009 ["onEnabling", false],
1010 "onEnabled"
1011 ]
1012 });
1013 p1.userDisabled = true;
1014 ensure_test_completed();
1016 do_check_false(d.userDisabled);
1017 do_check_false(d.appDisabled);
1018 do_check_true(d.isActive);
1020 do_check_true(p1.userDisabled);
1021 do_check_false(p1.appDisabled);
1022 do_check_false(p1.isActive);
1024 do_execute_soon(run_test_20);
1025 });
1026 }
1028 // Tests that you cannot disable the default theme
1029 function run_test_20() {
1030 AddonManager.getAddonByID("default@tests.mozilla.org", function(d) {
1031 do_check_false(d.userDisabled);
1032 do_check_false(d.appDisabled);
1033 do_check_true(d.isActive);
1035 try {
1036 d.userDisabled = true;
1037 do_throw("Disabling the default theme should throw an exception");
1038 }
1039 catch (e) {
1040 }
1042 do_execute_soon(run_test_21);
1043 });
1044 }
1046 // Tests that cached copies of a lightweight theme have the right permissions
1047 // and pendingOperations during the onEnabling event
1048 function run_test_21() {
1049 AddonManager.getAddonByID("theme1@tests.mozilla.org", callback_soon(function(t1) {
1050 // Switch to a custom theme so we can test pendingOperations properly.
1052 prepare_test({
1053 "theme1@tests.mozilla.org": [
1054 "onEnabling"
1055 ],
1056 "default@tests.mozilla.org": [
1057 "onDisabling"
1058 ]
1059 });
1061 t1.userDisabled = false;
1062 ensure_test_completed();
1064 restartManager();
1066 AddonManager.getAddonByID("1@personas.mozilla.org", function(p1) {
1067 AddonManager.addAddonListener({
1068 onEnabling: function(aAddon) {
1069 do_check_false(hasFlag(aAddon.permissions, AddonManager.PERM_CAN_ENABLE));
1070 do_check_true(hasFlag(aAddon.pendingOperations, AddonManager.PENDING_ENABLE));
1072 do_check_eq(aAddon.permissions, p1.permissions);
1073 do_check_eq(aAddon.pendingOperations, p1.pendingOperations);
1074 }
1075 });
1077 prepare_test({
1078 "1@personas.mozilla.org": [
1079 "onEnabling"
1080 ],
1081 "theme1@tests.mozilla.org": [
1082 "onDisabling"
1083 ]
1084 });
1086 p1.userDisabled = false;
1087 ensure_test_completed();
1089 end_test();
1090 });
1091 }));
1092 }