toolkit/mozapps/extensions/test/xpcshell/test_blocklistchange.js

changeset 0
6474c204b198
equal deleted inserted replaced
-1:000000000000 0:a5fa708fb7ee
1 /* Any copyright is dedicated to the Public Domain.
2 * http://creativecommons.org/publicdomain/zero/1.0/
3 */
4
5 // Checks that changes that cause an add-on to become unblocked or blocked have
6 // the right effect
7
8 // The tests follow a mostly common pattern. First they start with the add-ons
9 // unblocked, then they make a change that causes the add-ons to become blocked
10 // then they make a similar change that keeps the add-ons blocked then they make
11 // a change that unblocks the add-ons. Some tests skip the initial part and
12 // start with add-ons detected as blocked.
13
14 // softblock1 is enabled/disabled by the blocklist changes so its softDisabled
15 // property should always match its userDisabled property
16
17 // softblock2 gets manually enabled then disabled after it becomes blocked so
18 // its softDisabled property should never become true after that
19
20 // softblock3 does the same as softblock2 however it remains disabled
21
22 // softblock4 is disabled while unblocked and so should never have softDisabled
23 // set to true and stay userDisabled. This add-on is not used in tests that
24 // start with add-ons blocked as it would be identical to softblock3
25
26 // softblock5 is a theme. Currently themes just get disabled when they become
27 // softblocked and have to be manually re-enabled if they become completely
28 // unblocked (bug 657520)
29
30 const Cc = Components.classes;
31 const Ci = Components.interfaces;
32 const Cu = Components.utils;
33 const Cr = Components.results;
34
35 const URI_EXTENSION_BLOCKLIST_DIALOG = "chrome://mozapps/content/extensions/blocklist.xul";
36
37 Cu.import("resource://gre/modules/NetUtil.jsm");
38
39 // Allow insecure updates
40 Services.prefs.setBoolPref("extensions.checkUpdateSecurity", false)
41
42 Cu.import("resource://testing-common/httpd.js");
43 var testserver = new HttpServer();
44 testserver.start(-1);
45 gPort = testserver.identity.primaryPort;
46
47 // register static files with server and interpolate port numbers in them
48 mapFile("/data/blocklistchange/addon_update1.rdf", testserver);
49 mapFile("/data/blocklistchange/addon_update2.rdf", testserver);
50 mapFile("/data/blocklistchange/addon_update3.rdf", testserver);
51 mapFile("/data/blocklistchange/addon_change.xml", testserver);
52 mapFile("/data/blocklistchange/app_update.xml", testserver);
53 mapFile("/data/blocklistchange/blocklist_update1.xml", testserver);
54 mapFile("/data/blocklistchange/blocklist_update2.xml", testserver);
55 mapFile("/data/blocklistchange/manual_update.xml", testserver);
56
57 testserver.registerDirectory("/addons/", do_get_file("addons"));
58
59
60 var default_theme = {
61 id: "default@tests.mozilla.org",
62 version: "1.0",
63 name: "Softblocked add-on",
64 internalName: "classic/1.0",
65 targetApplications: [{
66 id: "xpcshell@tests.mozilla.org",
67 minVersion: "1",
68 maxVersion: "3"
69 }]
70 };
71
72 var softblock1_1 = {
73 id: "softblock1@tests.mozilla.org",
74 version: "1.0",
75 name: "Softblocked add-on",
76 updateURL: "http://localhost:" + gPort + "/data/blocklistchange/addon_update1.rdf",
77 targetApplications: [{
78 id: "xpcshell@tests.mozilla.org",
79 minVersion: "1",
80 maxVersion: "3"
81 }]
82 };
83
84 var softblock1_2 = {
85 id: "softblock1@tests.mozilla.org",
86 version: "2.0",
87 name: "Softblocked add-on",
88 updateURL: "http://localhost:" + gPort + "/data/blocklistchange/addon_update2.rdf",
89 targetApplications: [{
90 id: "xpcshell@tests.mozilla.org",
91 minVersion: "1",
92 maxVersion: "3"
93 }]
94 };
95
96 var softblock1_3 = {
97 id: "softblock1@tests.mozilla.org",
98 version: "3.0",
99 name: "Softblocked add-on",
100 updateURL: "http://localhost:" + gPort + "/data/blocklistchange/addon_update3.rdf",
101 targetApplications: [{
102 id: "xpcshell@tests.mozilla.org",
103 minVersion: "1",
104 maxVersion: "3"
105 }]
106 };
107
108 var softblock2_1 = {
109 id: "softblock2@tests.mozilla.org",
110 version: "1.0",
111 name: "Softblocked add-on",
112 updateURL: "http://localhost:" + gPort + "/data/blocklistchange/addon_update1.rdf",
113 targetApplications: [{
114 id: "xpcshell@tests.mozilla.org",
115 minVersion: "1",
116 maxVersion: "3"
117 }]
118 };
119
120 var softblock2_2 = {
121 id: "softblock2@tests.mozilla.org",
122 version: "2.0",
123 name: "Softblocked add-on",
124 updateURL: "http://localhost:" + gPort + "/data/blocklistchange/addon_update2.rdf",
125 targetApplications: [{
126 id: "xpcshell@tests.mozilla.org",
127 minVersion: "1",
128 maxVersion: "3"
129 }]
130 };
131
132 var softblock2_3 = {
133 id: "softblock2@tests.mozilla.org",
134 version: "3.0",
135 name: "Softblocked add-on",
136 updateURL: "http://localhost:" + gPort + "/data/blocklistchange/addon_update3.rdf",
137 targetApplications: [{
138 id: "xpcshell@tests.mozilla.org",
139 minVersion: "1",
140 maxVersion: "3"
141 }]
142 };
143
144 var softblock3_1 = {
145 id: "softblock3@tests.mozilla.org",
146 version: "1.0",
147 name: "Softblocked add-on",
148 updateURL: "http://localhost:" + gPort + "/data/blocklistchange/addon_update1.rdf",
149 targetApplications: [{
150 id: "xpcshell@tests.mozilla.org",
151 minVersion: "1",
152 maxVersion: "3"
153 }]
154 };
155
156 var softblock3_2 = {
157 id: "softblock3@tests.mozilla.org",
158 version: "2.0",
159 name: "Softblocked add-on",
160 updateURL: "http://localhost:" + gPort + "/data/blocklistchange/addon_update2.rdf",
161 targetApplications: [{
162 id: "xpcshell@tests.mozilla.org",
163 minVersion: "1",
164 maxVersion: "3"
165 }]
166 };
167
168 var softblock3_3 = {
169 id: "softblock3@tests.mozilla.org",
170 version: "3.0",
171 name: "Softblocked add-on",
172 updateURL: "http://localhost:" + gPort + "/data/blocklistchange/addon_update3.rdf",
173 targetApplications: [{
174 id: "xpcshell@tests.mozilla.org",
175 minVersion: "1",
176 maxVersion: "3"
177 }]
178 };
179
180 var softblock4_1 = {
181 id: "softblock4@tests.mozilla.org",
182 version: "1.0",
183 name: "Softblocked add-on",
184 updateURL: "http://localhost:" + gPort + "/data/blocklistchange/addon_update1.rdf",
185 targetApplications: [{
186 id: "xpcshell@tests.mozilla.org",
187 minVersion: "1",
188 maxVersion: "3"
189 }]
190 };
191
192 var softblock4_2 = {
193 id: "softblock4@tests.mozilla.org",
194 version: "2.0",
195 name: "Softblocked add-on",
196 updateURL: "http://localhost:" + gPort + "/data/blocklistchange/addon_update2.rdf",
197 targetApplications: [{
198 id: "xpcshell@tests.mozilla.org",
199 minVersion: "1",
200 maxVersion: "3"
201 }]
202 };
203
204 var softblock4_3 = {
205 id: "softblock4@tests.mozilla.org",
206 version: "3.0",
207 name: "Softblocked add-on",
208 updateURL: "http://localhost:" + gPort + "/data/blocklistchange/addon_update3.rdf",
209 targetApplications: [{
210 id: "xpcshell@tests.mozilla.org",
211 minVersion: "1",
212 maxVersion: "3"
213 }]
214 };
215
216 var softblock5_1 = {
217 id: "softblock5@tests.mozilla.org",
218 version: "1.0",
219 name: "Softblocked add-on",
220 updateURL: "http://localhost:" + gPort + "/data/blocklistchange/addon_update1.rdf",
221 internalName: "test/1.0",
222 targetApplications: [{
223 id: "xpcshell@tests.mozilla.org",
224 minVersion: "1",
225 maxVersion: "3"
226 }]
227 };
228
229 var softblock5_2 = {
230 id: "softblock5@tests.mozilla.org",
231 version: "2.0",
232 name: "Softblocked add-on",
233 updateURL: "http://localhost:" + gPort + "/data/blocklistchange/addon_update2.rdf",
234 internalName: "test/1.0",
235 targetApplications: [{
236 id: "xpcshell@tests.mozilla.org",
237 minVersion: "1",
238 maxVersion: "3"
239 }]
240 };
241
242 var softblock5_3 = {
243 id: "softblock5@tests.mozilla.org",
244 version: "3.0",
245 name: "Softblocked add-on",
246 updateURL: "http://localhost:" + gPort + "/data/blocklistchange/addon_update3.rdf",
247 internalName: "test/1.0",
248 targetApplications: [{
249 id: "xpcshell@tests.mozilla.org",
250 minVersion: "1",
251 maxVersion: "3"
252 }]
253 };
254
255 var hardblock_1 = {
256 id: "hardblock@tests.mozilla.org",
257 version: "1.0",
258 name: "Hardblocked add-on",
259 updateURL: "http://localhost:" + gPort + "/data/blocklistchange/addon_update1.rdf",
260 targetApplications: [{
261 id: "xpcshell@tests.mozilla.org",
262 minVersion: "1",
263 maxVersion: "3"
264 }]
265 };
266
267 var hardblock_2 = {
268 id: "hardblock@tests.mozilla.org",
269 version: "2.0",
270 name: "Hardblocked add-on",
271 updateURL: "http://localhost:" + gPort + "/data/blocklistchange/addon_update2.rdf",
272 targetApplications: [{
273 id: "xpcshell@tests.mozilla.org",
274 minVersion: "1",
275 maxVersion: "3"
276 }]
277 };
278
279 var hardblock_3 = {
280 id: "hardblock@tests.mozilla.org",
281 version: "3.0",
282 name: "Hardblocked add-on",
283 updateURL: "http://localhost:" + gPort + "/data/blocklistchange/addon_update3.rdf",
284 targetApplications: [{
285 id: "xpcshell@tests.mozilla.org",
286 minVersion: "1",
287 maxVersion: "3"
288 }]
289 };
290
291 var regexpblock_1 = {
292 id: "regexpblock@tests.mozilla.org",
293 version: "1.0",
294 name: "RegExp-blocked add-on",
295 updateURL: "http://localhost:" + gPort + "/data/blocklistchange/addon_update1.rdf",
296 targetApplications: [{
297 id: "xpcshell@tests.mozilla.org",
298 minVersion: "1",
299 maxVersion: "3"
300 }]
301 };
302
303 var regexpblock_2 = {
304 id: "regexpblock@tests.mozilla.org",
305 version: "2.0",
306 name: "RegExp-blocked add-on",
307 updateURL: "http://localhost:" + gPort + "/data/blocklistchange/addon_update2.rdf",
308 targetApplications: [{
309 id: "xpcshell@tests.mozilla.org",
310 minVersion: "1",
311 maxVersion: "3"
312 }]
313 };
314
315 var regexpblock_3 = {
316 id: "regexpblock@tests.mozilla.org",
317 version: "3.0",
318 name: "RegExp-blocked add-on",
319 updateURL: "http://localhost:" + gPort + "/data/blocklistchange/addon_update3.rdf",
320 targetApplications: [{
321 id: "xpcshell@tests.mozilla.org",
322 minVersion: "1",
323 maxVersion: "3"
324 }]
325 };
326
327 const ADDON_IDS = ["softblock1@tests.mozilla.org",
328 "softblock2@tests.mozilla.org",
329 "softblock3@tests.mozilla.org",
330 "softblock4@tests.mozilla.org",
331 "softblock5@tests.mozilla.org",
332 "hardblock@tests.mozilla.org",
333 "regexpblock@tests.mozilla.org"];
334
335 // Don't need the full interface, attempts to call other methods will just
336 // throw which is just fine
337 var WindowWatcher = {
338 openWindow: function(parent, url, name, features, openArgs) {
339 // Should be called to list the newly blocklisted items
340 do_check_eq(url, URI_EXTENSION_BLOCKLIST_DIALOG);
341
342 // Simulate auto-disabling any softblocks
343 var list = openArgs.wrappedJSObject.list;
344 list.forEach(function(aItem) {
345 if (!aItem.blocked)
346 aItem.disable = true;
347 });
348
349 //run the code after the blocklist is closed
350 Services.obs.notifyObservers(null, "addon-blocklist-closed", null);
351
352 },
353
354 QueryInterface: function(iid) {
355 if (iid.equals(Ci.nsIWindowWatcher)
356 || iid.equals(Ci.nsISupports))
357 return this;
358
359 throw Cr.NS_ERROR_NO_INTERFACE;
360 }
361 };
362
363 var WindowWatcherFactory = {
364 createInstance: function createInstance(outer, iid) {
365 if (outer != null)
366 throw Components.results.NS_ERROR_NO_AGGREGATION;
367 return WindowWatcher.QueryInterface(iid);
368 }
369 };
370
371 var InstallConfirm = {
372 confirm: function(aWindow, aUrl, aInstalls, aInstallCount) {
373 aInstalls.forEach(function(aInstall) {
374 aInstall.install();
375 });
376 },
377
378 QueryInterface: function(iid) {
379 if (iid.equals(Ci.amIWebInstallPrompt)
380 || iid.equals(Ci.nsISupports))
381 return this;
382
383 throw Cr.NS_ERROR_NO_INTERFACE;
384 }
385 };
386
387 var InstallConfirmFactory = {
388 createInstance: function createInstance(outer, iid) {
389 if (outer != null)
390 throw Components.results.NS_ERROR_NO_AGGREGATION;
391 return InstallConfirm.QueryInterface(iid);
392 }
393 };
394
395 var registrar = Components.manager.QueryInterface(Components.interfaces.nsIComponentRegistrar);
396 registrar.registerFactory(Components.ID("{1dfeb90a-2193-45d5-9cb8-864928b2af55}"),
397 "Fake Window Watcher",
398 "@mozilla.org/embedcomp/window-watcher;1", WindowWatcherFactory);
399 registrar.registerFactory(Components.ID("{f0863905-4dde-42e2-991c-2dc8209bc9ca}"),
400 "Fake Install Prompt",
401 "@mozilla.org/addons/web-install-prompt;1", InstallConfirmFactory);
402
403 const profileDir = gProfD.clone();
404 profileDir.append("extensions");
405
406 function load_blocklist(aFile, aCallback) {
407 Services.obs.addObserver(function() {
408 Services.obs.removeObserver(arguments.callee, "blocklist-updated");
409
410 do_execute_soon(aCallback);
411 }, "blocklist-updated", false);
412
413 Services.prefs.setCharPref("extensions.blocklist.url", "http://localhost:" + gPort + "/data/blocklistchange/" + aFile);
414 var blocklist = Cc["@mozilla.org/extensions/blocklist;1"].
415 getService(Ci.nsITimerCallback);
416 blocklist.notify(null);
417 }
418
419 // Does a background update check for add-ons and waits for any started installs
420 // to complete
421 function background_update(aCallback) {
422 var installCount = 0;
423 var backgroundCheckCompleted = false;
424
425 AddonManager.addInstallListener({
426 onNewInstall: function(aInstall) {
427 installCount++;
428 },
429
430 onInstallEnded: function(aInstall) {
431 installCount--;
432 // Wait until all started installs have completed
433 if (installCount)
434 return;
435
436 AddonManager.removeInstallListener(this);
437
438 // If the background check hasn't yet completed then let that call the
439 // callback when it is done
440 if (!backgroundCheckCompleted)
441 return;
442
443 do_execute_soon(aCallback);
444 }
445 });
446
447 Services.obs.addObserver(function() {
448 Services.obs.removeObserver(arguments.callee, "addons-background-update-complete");
449 backgroundCheckCompleted = true;
450
451 // If any new installs have started then we'll call the callback once they
452 // are completed
453 if (installCount)
454 return;
455
456 do_execute_soon(aCallback);
457 }, "addons-background-update-complete", false);
458
459 AddonManagerPrivate.backgroundUpdateCheck();
460 }
461
462 // Manually updates the test add-ons to the given version
463 function manual_update(aVersion, aCallback) {
464 var installs = [];
465 AddonManager.getInstallForURL("http://localhost:" + gPort + "/addons/blocklist_soft1_" + aVersion + ".xpi",
466 function(aInstall) {
467 installs.push(aInstall);
468 AddonManager.getInstallForURL("http://localhost:" + gPort + "/addons/blocklist_soft2_" + aVersion + ".xpi",
469 function(aInstall) {
470 installs.push(aInstall);
471 AddonManager.getInstallForURL("http://localhost:" + gPort + "/addons/blocklist_soft3_" + aVersion + ".xpi",
472 function(aInstall) {
473 installs.push(aInstall);
474 AddonManager.getInstallForURL("http://localhost:" + gPort + "/addons/blocklist_soft4_" + aVersion + ".xpi",
475 function(aInstall) {
476 installs.push(aInstall);
477 AddonManager.getInstallForURL("http://localhost:" + gPort + "/addons/blocklist_soft5_" + aVersion + ".xpi",
478 function(aInstall) {
479 installs.push(aInstall);
480 AddonManager.getInstallForURL("http://localhost:" + gPort + "/addons/blocklist_hard1_" + aVersion + ".xpi",
481 function(aInstall) {
482 installs.push(aInstall);
483 AddonManager.getInstallForURL("http://localhost:" + gPort + "/addons/blocklist_regexp1_" + aVersion + ".xpi",
484 function(aInstall) {
485 installs.push(aInstall);
486
487 Services.obs.addObserver(function(aSubject, aTopic, aData) {
488 Services.obs.removeObserver(arguments.callee, "addon-install-blocked");
489
490 aSubject.QueryInterface(Ci.amIWebInstallInfo);
491
492 var installCount = aSubject.installs.length;
493
494 var listener = {
495 installComplete: function() {
496 installCount--;
497 if (installCount)
498 return;
499
500 do_execute_soon(aCallback);
501 },
502
503 onDownloadCancelled: function(aInstall) {
504 this.installComplete();
505 },
506
507 onInstallEnded: function(aInstall) {
508 this.installComplete();
509 }
510 };
511
512 aSubject.installs.forEach(function(aInstall) {
513 aInstall.addListener(listener);
514 });
515
516 aSubject.install();
517 }, "addon-install-blocked", false);
518
519 AddonManager.installAddonsFromWebpage("application/x-xpinstall", null,
520 NetUtil.newURI("http://localhost:" + gPort + "/"),
521 installs);
522 }, "application/x-xpinstall");
523 }, "application/x-xpinstall");
524 }, "application/x-xpinstall");
525 }, "application/x-xpinstall");
526 }, "application/x-xpinstall");
527 }, "application/x-xpinstall");
528 }, "application/x-xpinstall");
529 }
530
531 // Checks that an add-ons properties match expected values
532 function check_addon(aAddon, aExpectedVersion, aExpectedUserDisabled,
533 aExpectedSoftDisabled, aExpectedState) {
534 do_check_neq(aAddon, null);
535 dump("Testing " + aAddon.id + " version " + aAddon.version + "\n");
536 dump(aAddon.userDisabled + " " + aAddon.softDisabled + "\n");
537
538 do_check_eq(aAddon.version, aExpectedVersion);
539 do_check_eq(aAddon.blocklistState, aExpectedState);
540 do_check_eq(aAddon.userDisabled, aExpectedUserDisabled);
541 do_check_eq(aAddon.softDisabled, aExpectedSoftDisabled);
542 if (aAddon.softDisabled)
543 do_check_true(aAddon.userDisabled);
544
545 if (aExpectedState == Ci.nsIBlocklistService.STATE_BLOCKED) {
546 do_check_false(hasFlag(aAddon.permissions, AddonManager.PERM_CAN_ENABLE));
547 do_check_false(hasFlag(aAddon.permissions, AddonManager.PERM_CAN_DISABLE));
548 }
549 else if (aAddon.userDisabled) {
550 do_check_true(hasFlag(aAddon.permissions, AddonManager.PERM_CAN_ENABLE));
551 do_check_false(hasFlag(aAddon.permissions, AddonManager.PERM_CAN_DISABLE));
552 }
553 else {
554 do_check_false(hasFlag(aAddon.permissions, AddonManager.PERM_CAN_ENABLE));
555 if (aAddon.type != "theme")
556 do_check_true(hasFlag(aAddon.permissions, AddonManager.PERM_CAN_DISABLE));
557 }
558 do_check_eq(aAddon.appDisabled, aExpectedState == Ci.nsIBlocklistService.STATE_BLOCKED);
559
560 let willBeActive = aAddon.isActive;
561 if (hasFlag(aAddon.pendingOperations, AddonManager.PENDING_DISABLE))
562 willBeActive = false;
563 else if (hasFlag(aAddon.pendingOperations, AddonManager.PENDING_ENABLE))
564 willBeActive = true;
565
566 if (aExpectedUserDisabled || aExpectedState == Ci.nsIBlocklistService.STATE_BLOCKED) {
567 do_check_false(willBeActive);
568 }
569 else {
570 do_check_true(willBeActive);
571 }
572 }
573
574 function run_test() {
575 do_test_pending("test_blocklistchange main");
576
577 createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "1", "1");
578 writeInstallRDFForExtension(default_theme, profileDir);
579 writeInstallRDFForExtension(softblock1_1, profileDir);
580 writeInstallRDFForExtension(softblock2_1, profileDir);
581 writeInstallRDFForExtension(softblock3_1, profileDir);
582 writeInstallRDFForExtension(softblock4_1, profileDir);
583 writeInstallRDFForExtension(softblock5_1, profileDir);
584 writeInstallRDFForExtension(hardblock_1, profileDir);
585 writeInstallRDFForExtension(regexpblock_1, profileDir);
586 startupManager();
587
588 AddonManager.getAddonsByIDs(ADDON_IDS, do_exception_wrap(function([s1, s2, s3, s4, s5, h, r]) {
589 s4.userDisabled = true;
590 s5.userDisabled = false;
591
592 run_next_test();
593 }));
594 }
595
596 // Starts with add-ons unblocked and then switches application versions to
597 // change add-ons to blocked and back
598 add_test(function run_app_update_test() {
599 do_print("Test: " + arguments.callee.name);
600 restartManager();
601 load_blocklist("app_update.xml", function app_update_step_1() {
602 restartManager();
603
604 AddonManager.getAddonsByIDs(ADDON_IDS, function([s1, s2, s3, s4, s5, h, r]) {
605
606 check_addon(s1, "1.0", false, false, Ci.nsIBlocklistService.STATE_NOT_BLOCKED);
607 check_addon(s2, "1.0", false, false, Ci.nsIBlocklistService.STATE_NOT_BLOCKED);
608 check_addon(s3, "1.0", false, false, Ci.nsIBlocklistService.STATE_NOT_BLOCKED);
609 check_addon(s4, "1.0", true, false, Ci.nsIBlocklistService.STATE_NOT_BLOCKED);
610 check_addon(s5, "1.0", false, false, Ci.nsIBlocklistService.STATE_NOT_BLOCKED);
611 check_addon(h, "1.0", false, false, Ci.nsIBlocklistService.STATE_NOT_BLOCKED);
612 check_addon(r, "1.0", false, false, Ci.nsIBlocklistService.STATE_NOT_BLOCKED);
613 do_check_eq(Services.prefs.getCharPref("general.skins.selectedSkin"), "test/1.0");
614
615 do_execute_soon(app_update_step_2);
616 })
617 });
618
619 function app_update_step_2() {
620 restartManager("2");
621
622 AddonManager.getAddonsByIDs(ADDON_IDS, function([s1, s2, s3, s4, s5, h, r]) {
623
624 check_addon(s1, "1.0", true, true, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
625 check_addon(s2, "1.0", true, true, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
626 check_addon(s3, "1.0", true, true, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
627 check_addon(s4, "1.0", true, false, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
628 check_addon(s5, "1.0", true, false, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
629 check_addon(h, "1.0", false, false, Ci.nsIBlocklistService.STATE_BLOCKED);
630 check_addon(r, "1.0", false, false, Ci.nsIBlocklistService.STATE_BLOCKED);
631 do_check_eq(Services.prefs.getCharPref("general.skins.selectedSkin"), "classic/1.0");
632
633 s2.userDisabled = false;
634 s2.userDisabled = true;
635 check_addon(s2, "1.0", true, false, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
636 s3.userDisabled = false;
637 check_addon(s3, "1.0", false, false, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
638
639 do_execute_soon(app_update_step_3);
640 });
641 }
642
643 function app_update_step_3() {
644 restartManager();
645
646 restartManager("2.5");
647
648 AddonManager.getAddonsByIDs(ADDON_IDS, function([s1, s2, s3, s4, s5, h, r]) {
649
650 check_addon(s1, "1.0", true, true, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
651 check_addon(s2, "1.0", true, false, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
652 check_addon(s3, "1.0", false, false, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
653 check_addon(s4, "1.0", true, false, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
654 check_addon(s5, "1.0", true, false, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
655 check_addon(h, "1.0", false, false, Ci.nsIBlocklistService.STATE_BLOCKED);
656 check_addon(r, "1.0", false, false, Ci.nsIBlocklistService.STATE_BLOCKED);
657 do_check_eq(Services.prefs.getCharPref("general.skins.selectedSkin"), "classic/1.0");
658
659 do_execute_soon(app_update_step_4);
660 });
661 }
662
663 function app_update_step_4() {
664 restartManager("1");
665
666 AddonManager.getAddonsByIDs(ADDON_IDS, function([s1, s2, s3, s4, s5, h, r]) {
667
668 check_addon(s1, "1.0", false, false, Ci.nsIBlocklistService.STATE_NOT_BLOCKED);
669 check_addon(s2, "1.0", true, false, Ci.nsIBlocklistService.STATE_NOT_BLOCKED);
670 check_addon(s3, "1.0", false, false, Ci.nsIBlocklistService.STATE_NOT_BLOCKED);
671 check_addon(s4, "1.0", true, false, Ci.nsIBlocklistService.STATE_NOT_BLOCKED);
672 check_addon(s5, "1.0", true, false, Ci.nsIBlocklistService.STATE_NOT_BLOCKED);
673 check_addon(h, "1.0", false, false, Ci.nsIBlocklistService.STATE_NOT_BLOCKED);
674 check_addon(r, "1.0", false, false, Ci.nsIBlocklistService.STATE_NOT_BLOCKED);
675 do_check_eq(Services.prefs.getCharPref("general.skins.selectedSkin"), "classic/1.0");
676
677 s1.userDisabled = false;
678 s2.userDisabled = false;
679 s5.userDisabled = false;
680 run_next_test();
681 });
682 }
683 });
684
685 // Starts with add-ons unblocked and then switches application versions to
686 // change add-ons to blocked and back. A DB schema change is faked to force a
687 // rebuild when the application version changes
688 add_test(function run_app_update_schema_test() {
689 do_print("Test: " + arguments.callee.name);
690 restartManager();
691
692 AddonManager.getAddonsByIDs(ADDON_IDS, function([s1, s2, s3, s4, s5, h, r]) {
693
694 check_addon(s1, "1.0", false, false, Ci.nsIBlocklistService.STATE_NOT_BLOCKED);
695 check_addon(s2, "1.0", false, false, Ci.nsIBlocklistService.STATE_NOT_BLOCKED);
696 check_addon(s3, "1.0", false, false, Ci.nsIBlocklistService.STATE_NOT_BLOCKED);
697 check_addon(s4, "1.0", true, false, Ci.nsIBlocklistService.STATE_NOT_BLOCKED);
698 check_addon(s5, "1.0", false, false, Ci.nsIBlocklistService.STATE_NOT_BLOCKED);
699 check_addon(h, "1.0", false, false, Ci.nsIBlocklistService.STATE_NOT_BLOCKED);
700 check_addon(r, "1.0", false, false, Ci.nsIBlocklistService.STATE_NOT_BLOCKED);
701 do_check_eq(Services.prefs.getCharPref("general.skins.selectedSkin"), "test/1.0");
702
703 do_execute_soon(update_schema_2);
704 });
705
706 function update_schema_2() {
707 shutdownManager();
708
709 changeXPIDBVersion(100);
710 gAppInfo.version = "2";
711 startupManager(true);
712
713 AddonManager.getAddonsByIDs(ADDON_IDS, function([s1, s2, s3, s4, s5, h, r]) {
714
715 check_addon(s1, "1.0", true, true, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
716 check_addon(s2, "1.0", true, true, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
717 check_addon(s3, "1.0", true, true, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
718 check_addon(s4, "1.0", true, false, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
719 check_addon(s5, "1.0", true, false, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
720 check_addon(h, "1.0", false, false, Ci.nsIBlocklistService.STATE_BLOCKED);
721 check_addon(r, "1.0", false, false, Ci.nsIBlocklistService.STATE_BLOCKED);
722 do_check_eq(Services.prefs.getCharPref("general.skins.selectedSkin"), "classic/1.0");
723
724 s2.userDisabled = false;
725 s2.userDisabled = true;
726 check_addon(s2, "1.0", true, false, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
727 s3.userDisabled = false;
728 check_addon(s3, "1.0", false, false, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
729 do_execute_soon(update_schema_3);
730 });
731 }
732
733 function update_schema_3() {
734 restartManager();
735
736 shutdownManager();
737 changeXPIDBVersion(100);
738 gAppInfo.version = "2.5";
739 startupManager(true);
740
741 AddonManager.getAddonsByIDs(ADDON_IDS, function([s1, s2, s3, s4, s5, h, r]) {
742
743 check_addon(s1, "1.0", true, true, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
744 check_addon(s2, "1.0", true, false, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
745 check_addon(s3, "1.0", false, false, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
746 check_addon(s4, "1.0", true, false, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
747 check_addon(s5, "1.0", true, false, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
748 check_addon(h, "1.0", false, false, Ci.nsIBlocklistService.STATE_BLOCKED);
749 check_addon(r, "1.0", false, false, Ci.nsIBlocklistService.STATE_BLOCKED);
750 do_check_eq(Services.prefs.getCharPref("general.skins.selectedSkin"), "classic/1.0");
751
752 do_execute_soon(update_schema_4);
753 });
754 }
755
756 function update_schema_4() {
757 shutdownManager();
758
759 changeXPIDBVersion(100);
760 startupManager(false);
761
762 AddonManager.getAddonsByIDs(ADDON_IDS, function([s1, s2, s3, s4, s5, h, r]) {
763
764 check_addon(s1, "1.0", true, true, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
765 check_addon(s2, "1.0", true, false, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
766 check_addon(s3, "1.0", false, false, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
767 check_addon(s4, "1.0", true, false, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
768 check_addon(s5, "1.0", true, false, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
769 check_addon(h, "1.0", false, false, Ci.nsIBlocklistService.STATE_BLOCKED);
770 check_addon(r, "1.0", false, false, Ci.nsIBlocklistService.STATE_BLOCKED);
771 do_check_eq(Services.prefs.getCharPref("general.skins.selectedSkin"), "classic/1.0");
772
773 do_execute_soon(update_schema_5);
774 });
775 }
776
777 function update_schema_5() {
778 shutdownManager();
779
780 changeXPIDBVersion(100);
781 gAppInfo.version = "1";
782 startupManager(true);
783
784 AddonManager.getAddonsByIDs(ADDON_IDS, function([s1, s2, s3, s4, s5, h, r]) {
785
786 check_addon(s1, "1.0", false, false, Ci.nsIBlocklistService.STATE_NOT_BLOCKED);
787 check_addon(s2, "1.0", true, false, Ci.nsIBlocklistService.STATE_NOT_BLOCKED);
788 check_addon(s3, "1.0", false, false, Ci.nsIBlocklistService.STATE_NOT_BLOCKED);
789 check_addon(s4, "1.0", true, false, Ci.nsIBlocklistService.STATE_NOT_BLOCKED);
790 check_addon(s5, "1.0", true, false, Ci.nsIBlocklistService.STATE_NOT_BLOCKED);
791 check_addon(h, "1.0", false, false, Ci.nsIBlocklistService.STATE_NOT_BLOCKED);
792 check_addon(r, "1.0", false, false, Ci.nsIBlocklistService.STATE_NOT_BLOCKED);
793 do_check_eq(Services.prefs.getCharPref("general.skins.selectedSkin"), "classic/1.0");
794
795 s1.userDisabled = false;
796 s2.userDisabled = false;
797 s5.userDisabled = false;
798 run_next_test();
799 });
800 }
801 });
802
803 // Starts with add-ons unblocked and then loads new blocklists to change add-ons
804 // to blocked and back again.
805 add_test(function run_blocklist_update_test() {
806 do_print("Test: " + arguments.callee.name + "\n");
807 load_blocklist("blocklist_update1.xml", function run_blocklist_update_1() {
808 restartManager();
809
810 AddonManager.getAddonsByIDs(ADDON_IDS, function([s1, s2, s3, s4, s5, h, r]) {
811
812 check_addon(s1, "1.0", false, false, Ci.nsIBlocklistService.STATE_NOT_BLOCKED);
813 check_addon(s2, "1.0", false, false, Ci.nsIBlocklistService.STATE_NOT_BLOCKED);
814 check_addon(s3, "1.0", false, false, Ci.nsIBlocklistService.STATE_NOT_BLOCKED);
815 check_addon(s4, "1.0", true, false, Ci.nsIBlocklistService.STATE_NOT_BLOCKED);
816 check_addon(s5, "1.0", false, false, Ci.nsIBlocklistService.STATE_NOT_BLOCKED);
817 check_addon(h, "1.0", false, false, Ci.nsIBlocklistService.STATE_NOT_BLOCKED);
818 check_addon(r, "1.0", false, false, Ci.nsIBlocklistService.STATE_NOT_BLOCKED);
819 do_check_eq(Services.prefs.getCharPref("general.skins.selectedSkin"), "test/1.0");
820
821 load_blocklist("blocklist_update2.xml", function run_blocklist_update_2() {
822 restartManager();
823
824 AddonManager.getAddonsByIDs(ADDON_IDS, function([s1, s2, s3, s4, s5, h, r]) {
825
826 check_addon(s1, "1.0", true, true, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
827 check_addon(s2, "1.0", true, true, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
828 check_addon(s3, "1.0", true, true, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
829 check_addon(s4, "1.0", true, false, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
830 check_addon(s5, "1.0", true, false, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
831 check_addon(h, "1.0", false, false, Ci.nsIBlocklistService.STATE_BLOCKED);
832 check_addon(r, "1.0", false, false, Ci.nsIBlocklistService.STATE_BLOCKED);
833 do_check_eq(Services.prefs.getCharPref("general.skins.selectedSkin"), "classic/1.0");
834
835 s2.userDisabled = false;
836 s2.userDisabled = true;
837 check_addon(s2, "1.0", true, false, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
838 s3.userDisabled = false;
839 check_addon(s3, "1.0", false, false, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
840
841 do_execute_soon(function restart_and_reload() {
842 restartManager();
843
844 load_blocklist("blocklist_update2.xml", function run_blocklist_update_3() {
845 restartManager();
846
847 AddonManager.getAddonsByIDs(ADDON_IDS, function([s1, s2, s3, s4, s5, h, r]) {
848
849 check_addon(s1, "1.0", true, true, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
850 check_addon(s2, "1.0", true, false, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
851 check_addon(s3, "1.0", false, false, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
852 check_addon(s4, "1.0", true, false, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
853 check_addon(s5, "1.0", true, false, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
854 check_addon(h, "1.0", false, false, Ci.nsIBlocklistService.STATE_BLOCKED);
855 check_addon(r, "1.0", false, false, Ci.nsIBlocklistService.STATE_BLOCKED);
856 do_check_eq(Services.prefs.getCharPref("general.skins.selectedSkin"), "classic/1.0");
857
858 load_blocklist("blocklist_update1.xml", function run_blocklist_update_4() {
859 restartManager();
860
861 AddonManager.getAddonsByIDs(ADDON_IDS, function([s1, s2, s3, s4, s5, h, r]) {
862
863 check_addon(s1, "1.0", false, false, Ci.nsIBlocklistService.STATE_NOT_BLOCKED);
864 check_addon(s2, "1.0", true, false, Ci.nsIBlocklistService.STATE_NOT_BLOCKED);
865 check_addon(s3, "1.0", false, false, Ci.nsIBlocklistService.STATE_NOT_BLOCKED);
866 check_addon(s4, "1.0", true, false, Ci.nsIBlocklistService.STATE_NOT_BLOCKED);
867 check_addon(s5, "1.0", true, false, Ci.nsIBlocklistService.STATE_NOT_BLOCKED);
868 check_addon(h, "1.0", false, false, Ci.nsIBlocklistService.STATE_NOT_BLOCKED);
869 check_addon(r, "1.0", false, false, Ci.nsIBlocklistService.STATE_NOT_BLOCKED);
870 do_check_eq(Services.prefs.getCharPref("general.skins.selectedSkin"), "classic/1.0");
871
872 s1.userDisabled = false;
873 s2.userDisabled = false;
874 s5.userDisabled = false;
875 run_next_test();
876 });
877 });
878 });
879 });
880 });
881 });
882 });
883 });
884 });
885 });
886
887 // Starts with add-ons unblocked and then new versions are installed outside of
888 // the app to change them to blocked and back again.
889 add_test(function run_addon_change_test() {
890 do_print("Test: " + arguments.callee.name + "\n");
891 load_blocklist("addon_change.xml", function run_addon_change_1() {
892 restartManager();
893
894 AddonManager.getAddonsByIDs(ADDON_IDS, function([s1, s2, s3, s4, s5, h, r]) {
895
896 check_addon(s1, "1.0", false, false, Ci.nsIBlocklistService.STATE_NOT_BLOCKED);
897 check_addon(s2, "1.0", false, false, Ci.nsIBlocklistService.STATE_NOT_BLOCKED);
898 check_addon(s3, "1.0", false, false, Ci.nsIBlocklistService.STATE_NOT_BLOCKED);
899 check_addon(s4, "1.0", true, false, Ci.nsIBlocklistService.STATE_NOT_BLOCKED);
900 check_addon(s5, "1.0", false, false, Ci.nsIBlocklistService.STATE_NOT_BLOCKED);
901 check_addon(h, "1.0", false, false, Ci.nsIBlocklistService.STATE_NOT_BLOCKED);
902 check_addon(r, "1.0", false, false, Ci.nsIBlocklistService.STATE_NOT_BLOCKED);
903 do_check_eq(Services.prefs.getCharPref("general.skins.selectedSkin"), "test/1.0");
904
905 do_execute_soon(run_addon_change_2);
906 });
907 });
908
909 function run_addon_change_2() {
910 shutdownManager();
911
912 writeInstallRDFForExtension(softblock1_2, profileDir);
913 setExtensionModifiedTime(getFileForAddon(profileDir, softblock1_2.id), Date.now() + 10000);
914 writeInstallRDFForExtension(softblock2_2, profileDir);
915 setExtensionModifiedTime(getFileForAddon(profileDir, softblock2_2.id), Date.now() + 10000);
916 writeInstallRDFForExtension(softblock3_2, profileDir);
917 setExtensionModifiedTime(getFileForAddon(profileDir, softblock3_2.id), Date.now() + 10000);
918 writeInstallRDFForExtension(softblock4_2, profileDir);
919 setExtensionModifiedTime(getFileForAddon(profileDir, softblock4_2.id), Date.now() + 10000);
920 writeInstallRDFForExtension(softblock5_2, profileDir);
921 setExtensionModifiedTime(getFileForAddon(profileDir, softblock5_2.id), Date.now() + 10000);
922 writeInstallRDFForExtension(hardblock_2, profileDir);
923 setExtensionModifiedTime(getFileForAddon(profileDir, hardblock_2.id), Date.now() + 10000);
924 writeInstallRDFForExtension(regexpblock_2, profileDir);
925 setExtensionModifiedTime(getFileForAddon(profileDir, regexpblock_2.id), Date.now() + 10000);
926
927 startupManager(false);
928
929 AddonManager.getAddonsByIDs(ADDON_IDS, function([s1, s2, s3, s4, s5, h, r]) {
930
931 check_addon(s1, "2.0", true, true, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
932 check_addon(s2, "2.0", true, true, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
933 check_addon(s3, "2.0", true, true, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
934 check_addon(s4, "2.0", true, false, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
935 check_addon(s5, "2.0", true, false, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
936 check_addon(h, "2.0", false, false, Ci.nsIBlocklistService.STATE_BLOCKED);
937 check_addon(r, "2.0", false, false, Ci.nsIBlocklistService.STATE_BLOCKED);
938 do_check_eq(Services.prefs.getCharPref("general.skins.selectedSkin"), "classic/1.0");
939
940 s2.userDisabled = false;
941 s2.userDisabled = true;
942 check_addon(s2, "2.0", true, false, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
943 s3.userDisabled = false;
944 check_addon(s3, "2.0", false, false, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
945 do_execute_soon(run_addon_change_3);
946 });
947 }
948
949 function run_addon_change_3() {
950 restartManager();
951
952 shutdownManager();
953
954 writeInstallRDFForExtension(softblock1_3, profileDir);
955 setExtensionModifiedTime(getFileForAddon(profileDir, softblock1_3.id), Date.now() + 20000);
956 writeInstallRDFForExtension(softblock2_3, profileDir);
957 setExtensionModifiedTime(getFileForAddon(profileDir, softblock2_3.id), Date.now() + 20000);
958 writeInstallRDFForExtension(softblock3_3, profileDir);
959 setExtensionModifiedTime(getFileForAddon(profileDir, softblock3_3.id), Date.now() + 20000);
960 writeInstallRDFForExtension(softblock4_3, profileDir);
961 setExtensionModifiedTime(getFileForAddon(profileDir, softblock4_3.id), Date.now() + 20000);
962 writeInstallRDFForExtension(softblock5_3, profileDir);
963 setExtensionModifiedTime(getFileForAddon(profileDir, softblock5_3.id), Date.now() + 20000);
964 writeInstallRDFForExtension(hardblock_3, profileDir);
965 setExtensionModifiedTime(getFileForAddon(profileDir, hardblock_3.id), Date.now() + 20000);
966 writeInstallRDFForExtension(regexpblock_3, profileDir);
967 setExtensionModifiedTime(getFileForAddon(profileDir, regexpblock_3.id), Date.now() + 20000);
968
969 startupManager(false);
970
971 AddonManager.getAddonsByIDs(ADDON_IDS, function([s1, s2, s3, s4, s5, h, r]) {
972
973 check_addon(s1, "3.0", true, true, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
974 check_addon(s2, "3.0", true, false, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
975 check_addon(s3, "3.0", false, false, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
976 check_addon(s4, "3.0", true, false, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
977 check_addon(s5, "3.0", true, false, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
978 check_addon(h, "3.0", false, false, Ci.nsIBlocklistService.STATE_BLOCKED);
979 check_addon(r, "3.0", false, false, Ci.nsIBlocklistService.STATE_BLOCKED);
980 do_check_eq(Services.prefs.getCharPref("general.skins.selectedSkin"), "classic/1.0");
981
982 do_execute_soon(run_addon_change_4);
983 });
984 }
985
986 function run_addon_change_4() {
987 shutdownManager();
988
989 writeInstallRDFForExtension(softblock1_1, profileDir);
990 setExtensionModifiedTime(getFileForAddon(profileDir, softblock1_1.id), Date.now() + 30000);
991 writeInstallRDFForExtension(softblock2_1, profileDir);
992 setExtensionModifiedTime(getFileForAddon(profileDir, softblock2_1.id), Date.now() + 30000);
993 writeInstallRDFForExtension(softblock3_1, profileDir);
994 setExtensionModifiedTime(getFileForAddon(profileDir, softblock3_1.id), Date.now() + 30000);
995 writeInstallRDFForExtension(softblock4_1, profileDir);
996 setExtensionModifiedTime(getFileForAddon(profileDir, softblock4_1.id), Date.now() + 30000);
997 writeInstallRDFForExtension(softblock5_1, profileDir);
998 setExtensionModifiedTime(getFileForAddon(profileDir, softblock5_1.id), Date.now() + 30000);
999 writeInstallRDFForExtension(hardblock_1, profileDir);
1000 setExtensionModifiedTime(getFileForAddon(profileDir, hardblock_1.id), Date.now() + 30000);
1001 writeInstallRDFForExtension(regexpblock_1, profileDir);
1002 setExtensionModifiedTime(getFileForAddon(profileDir, regexpblock_1.id), Date.now() + 30000);
1003
1004 startupManager(false);
1005
1006 AddonManager.getAddonsByIDs(ADDON_IDS, function([s1, s2, s3, s4, s5, h, r]) {
1007
1008 check_addon(s1, "1.0", false, false, Ci.nsIBlocklistService.STATE_NOT_BLOCKED);
1009 check_addon(s2, "1.0", true, false, Ci.nsIBlocklistService.STATE_NOT_BLOCKED);
1010 check_addon(s3, "1.0", false, false, Ci.nsIBlocklistService.STATE_NOT_BLOCKED);
1011 check_addon(s4, "1.0", true, false, Ci.nsIBlocklistService.STATE_NOT_BLOCKED);
1012 check_addon(s5, "1.0", true, false, Ci.nsIBlocklistService.STATE_NOT_BLOCKED);
1013 check_addon(h, "1.0", false, false, Ci.nsIBlocklistService.STATE_NOT_BLOCKED);
1014 check_addon(r, "1.0", false, false, Ci.nsIBlocklistService.STATE_NOT_BLOCKED);
1015 do_check_eq(Services.prefs.getCharPref("general.skins.selectedSkin"), "classic/1.0");
1016
1017 s1.userDisabled = false;
1018 s2.userDisabled = false;
1019 s5.userDisabled = false;
1020 run_next_test();
1021 });
1022 }
1023 });
1024
1025 // Starts with add-ons blocked and then new versions are installed outside of
1026 // the app to change them to unblocked.
1027 add_test(function run_addon_change_2_test() {
1028 do_print("Test: " + arguments.callee.name + "\n");
1029 shutdownManager();
1030
1031 getFileForAddon(profileDir, softblock1_1.id).remove(true);
1032 getFileForAddon(profileDir, softblock2_1.id).remove(true);
1033 getFileForAddon(profileDir, softblock3_1.id).remove(true);
1034 getFileForAddon(profileDir, softblock4_1.id).remove(true);
1035 getFileForAddon(profileDir, softblock5_1.id).remove(true);
1036 getFileForAddon(profileDir, hardblock_1.id).remove(true);
1037 getFileForAddon(profileDir, regexpblock_1.id).remove(true);
1038
1039 startupManager(false);
1040 shutdownManager();
1041
1042 writeInstallRDFForExtension(softblock1_2, profileDir);
1043 writeInstallRDFForExtension(softblock2_2, profileDir);
1044 writeInstallRDFForExtension(softblock3_2, profileDir);
1045 writeInstallRDFForExtension(softblock4_2, profileDir);
1046 writeInstallRDFForExtension(softblock5_2, profileDir);
1047 writeInstallRDFForExtension(hardblock_2, profileDir);
1048 writeInstallRDFForExtension(regexpblock_2, profileDir);
1049
1050 startupManager(false);
1051
1052 AddonManager.getAddonsByIDs(ADDON_IDS, function([s1, s2, s3, s4, s5, h, r]) {
1053
1054 check_addon(s1, "2.0", true, true, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
1055 check_addon(s2, "2.0", true, true, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
1056 check_addon(s3, "2.0", true, true, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
1057 check_addon(h, "2.0", false, false, Ci.nsIBlocklistService.STATE_BLOCKED);
1058 check_addon(r, "2.0", false, false, Ci.nsIBlocklistService.STATE_BLOCKED);
1059
1060 s2.userDisabled = false;
1061 s2.userDisabled = true;
1062 check_addon(s2, "2.0", true, false, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
1063 s3.userDisabled = false;
1064 check_addon(s3, "2.0", false, false, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
1065 do_execute_soon(addon_change_2_test_2);
1066 });
1067
1068 function addon_change_2_test_2() {
1069 restartManager();
1070
1071 shutdownManager();
1072
1073 writeInstallRDFForExtension(softblock1_3, profileDir);
1074 setExtensionModifiedTime(getFileForAddon(profileDir, softblock1_3.id), Date.now() + 10000);
1075 writeInstallRDFForExtension(softblock2_3, profileDir);
1076 setExtensionModifiedTime(getFileForAddon(profileDir, softblock2_3.id), Date.now() + 10000);
1077 writeInstallRDFForExtension(softblock3_3, profileDir);
1078 setExtensionModifiedTime(getFileForAddon(profileDir, softblock3_3.id), Date.now() + 10000);
1079 writeInstallRDFForExtension(softblock4_3, profileDir);
1080 setExtensionModifiedTime(getFileForAddon(profileDir, softblock4_3.id), Date.now() + 10000);
1081 writeInstallRDFForExtension(softblock5_3, profileDir);
1082 setExtensionModifiedTime(getFileForAddon(profileDir, softblock5_3.id), Date.now() + 10000);
1083 writeInstallRDFForExtension(hardblock_3, profileDir);
1084 setExtensionModifiedTime(getFileForAddon(profileDir, hardblock_3.id), Date.now() + 10000);
1085 writeInstallRDFForExtension(regexpblock_3, profileDir);
1086 setExtensionModifiedTime(getFileForAddon(profileDir, regexpblock_3.id), Date.now() + 10000);
1087
1088 startupManager(false);
1089
1090 AddonManager.getAddonsByIDs(ADDON_IDS, function([s1, s2, s3, s4, s5, h, r]) {
1091
1092 check_addon(s1, "3.0", true, true, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
1093 check_addon(s2, "3.0", true, false, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
1094 check_addon(s3, "3.0", false, false, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
1095 check_addon(h, "3.0", false, false, Ci.nsIBlocklistService.STATE_BLOCKED);
1096 check_addon(r, "3.0", false, false, Ci.nsIBlocklistService.STATE_BLOCKED);
1097
1098 do_execute_soon(addon_change_2_test_3);
1099 });
1100 }
1101
1102 function addon_change_2_test_3() {
1103 shutdownManager();
1104
1105 writeInstallRDFForExtension(softblock1_1, profileDir);
1106 setExtensionModifiedTime(getFileForAddon(profileDir, softblock1_1.id), Date.now() + 20000);
1107 writeInstallRDFForExtension(softblock2_1, profileDir);
1108 setExtensionModifiedTime(getFileForAddon(profileDir, softblock2_1.id), Date.now() + 20000);
1109 writeInstallRDFForExtension(softblock3_1, profileDir);
1110 setExtensionModifiedTime(getFileForAddon(profileDir, softblock3_1.id), Date.now() + 20000);
1111 writeInstallRDFForExtension(softblock4_1, profileDir);
1112 setExtensionModifiedTime(getFileForAddon(profileDir, softblock4_1.id), Date.now() + 20000);
1113 writeInstallRDFForExtension(softblock5_1, profileDir);
1114 setExtensionModifiedTime(getFileForAddon(profileDir, softblock5_1.id), Date.now() + 20000);
1115 writeInstallRDFForExtension(hardblock_1, profileDir);
1116 setExtensionModifiedTime(getFileForAddon(profileDir, hardblock_1.id), Date.now() + 20000);
1117 writeInstallRDFForExtension(regexpblock_1, profileDir);
1118 setExtensionModifiedTime(getFileForAddon(profileDir, regexpblock_1.id), Date.now() + 20000);
1119
1120 startupManager(false);
1121
1122 AddonManager.getAddonsByIDs(ADDON_IDS, function([s1, s2, s3, s4, s5, h, r]) {
1123
1124 check_addon(s1, "1.0", false, false, Ci.nsIBlocklistService.STATE_NOT_BLOCKED);
1125 check_addon(s2, "1.0", true, false, Ci.nsIBlocklistService.STATE_NOT_BLOCKED);
1126 check_addon(s3, "1.0", false, false, Ci.nsIBlocklistService.STATE_NOT_BLOCKED);
1127 check_addon(h, "1.0", false, false, Ci.nsIBlocklistService.STATE_NOT_BLOCKED);
1128 check_addon(r, "1.0", false, false, Ci.nsIBlocklistService.STATE_NOT_BLOCKED);
1129
1130 s1.userDisabled = false;
1131 s2.userDisabled = false;
1132 s4.userDisabled = true;
1133 s5.userDisabled = false;
1134 run_next_test();
1135 });
1136 }
1137 });
1138
1139 // Add-ons are initially unblocked then attempts to upgrade to blocked versions
1140 // in the background which should fail
1141 add_test(function run_background_update_test() {
1142 do_print("Test: " + arguments.callee.name + "\n");
1143 restartManager();
1144
1145 AddonManager.getAddonsByIDs(ADDON_IDS, function([s1, s2, s3, s4, s5, h, r]) {
1146
1147 check_addon(s1, "1.0", false, false, Ci.nsIBlocklistService.STATE_NOT_BLOCKED);
1148 check_addon(s2, "1.0", false, false, Ci.nsIBlocklistService.STATE_NOT_BLOCKED);
1149 check_addon(s3, "1.0", false, false, Ci.nsIBlocklistService.STATE_NOT_BLOCKED);
1150 check_addon(s4, "1.0", true, false, Ci.nsIBlocklistService.STATE_NOT_BLOCKED);
1151 check_addon(s5, "1.0", false, false, Ci.nsIBlocklistService.STATE_NOT_BLOCKED);
1152 check_addon(h, "1.0", false, false, Ci.nsIBlocklistService.STATE_NOT_BLOCKED);
1153 check_addon(r, "1.0", false, false, Ci.nsIBlocklistService.STATE_NOT_BLOCKED);
1154
1155 background_update(function background_update_1() {
1156 restartManager();
1157
1158 AddonManager.getAddonsByIDs(ADDON_IDS, function([s1, s2, s3, s4, s5, h, r]) {
1159
1160 check_addon(s1, "1.0", false, false, Ci.nsIBlocklistService.STATE_NOT_BLOCKED);
1161 check_addon(s2, "1.0", false, false, Ci.nsIBlocklistService.STATE_NOT_BLOCKED);
1162 check_addon(s3, "1.0", false, false, Ci.nsIBlocklistService.STATE_NOT_BLOCKED);
1163 check_addon(s4, "1.0", true, false, Ci.nsIBlocklistService.STATE_NOT_BLOCKED);
1164 check_addon(s5, "1.0", false, false, Ci.nsIBlocklistService.STATE_NOT_BLOCKED);
1165 check_addon(h, "1.0", false, false, Ci.nsIBlocklistService.STATE_NOT_BLOCKED);
1166 check_addon(r, "1.0", false, false, Ci.nsIBlocklistService.STATE_NOT_BLOCKED);
1167
1168 run_next_test();
1169 });
1170 });
1171 });
1172 });
1173
1174 // Starts with add-ons blocked and then new versions are detected and installed
1175 // automatically for unblocked versions.
1176 add_test(function run_background_update_2_test() {
1177 do_print("Test: " + arguments.callee.name + "\n");
1178 shutdownManager();
1179
1180 getFileForAddon(profileDir, softblock1_1.id).remove(true);
1181 getFileForAddon(profileDir, softblock2_1.id).remove(true);
1182 getFileForAddon(profileDir, softblock3_1.id).remove(true);
1183 getFileForAddon(profileDir, softblock4_1.id).remove(true);
1184 getFileForAddon(profileDir, softblock5_1.id).remove(true);
1185 getFileForAddon(profileDir, hardblock_1.id).remove(true);
1186 getFileForAddon(profileDir, regexpblock_1.id).remove(true);
1187
1188 startupManager(false);
1189 shutdownManager();
1190
1191 writeInstallRDFForExtension(softblock1_3, profileDir);
1192 writeInstallRDFForExtension(softblock2_3, profileDir);
1193 writeInstallRDFForExtension(softblock3_3, profileDir);
1194 writeInstallRDFForExtension(softblock4_3, profileDir);
1195 writeInstallRDFForExtension(softblock5_3, profileDir);
1196 writeInstallRDFForExtension(hardblock_3, profileDir);
1197 writeInstallRDFForExtension(regexpblock_3, profileDir);
1198
1199 startupManager(false);
1200
1201 AddonManager.getAddonsByIDs(ADDON_IDS, function([s1, s2, s3, s4, s5, h, r]) {
1202
1203 check_addon(s1, "3.0", true, true, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
1204 check_addon(s2, "3.0", true, true, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
1205 check_addon(s3, "3.0", true, true, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
1206 check_addon(h, "3.0", false, false, Ci.nsIBlocklistService.STATE_BLOCKED);
1207 check_addon(r, "3.0", false, false, Ci.nsIBlocklistService.STATE_BLOCKED);
1208
1209 s2.userDisabled = false;
1210 s2.userDisabled = true;
1211 check_addon(s2, "3.0", true, false, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
1212 s3.userDisabled = false;
1213 check_addon(s3, "3.0", false, false, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
1214
1215 // make sure we're not in a handler when we restart
1216 do_execute_soon(function restart_and_update() {
1217 restartManager();
1218
1219 background_update(function background_update_2_1() {
1220 restartManager();
1221
1222 AddonManager.getAddonsByIDs(ADDON_IDS, function([s1, s2, s3, s4, s5, h, r]) {
1223
1224 check_addon(s1, "1.0", false, false, Ci.nsIBlocklistService.STATE_NOT_BLOCKED);
1225 check_addon(s2, "1.0", true, false, Ci.nsIBlocklistService.STATE_NOT_BLOCKED);
1226 check_addon(s3, "1.0", false, false, Ci.nsIBlocklistService.STATE_NOT_BLOCKED);
1227 check_addon(h, "1.0", false, false, Ci.nsIBlocklistService.STATE_NOT_BLOCKED);
1228 check_addon(r, "1.0", false, false, Ci.nsIBlocklistService.STATE_NOT_BLOCKED);
1229
1230 s1.userDisabled = false;
1231 s2.userDisabled = false;
1232 s4.userDisabled = true;
1233 s5.userDisabled = true;
1234 run_next_test();
1235 });
1236 });
1237 });
1238 });
1239 });
1240
1241 // Starts with add-ons blocked and then simulates the user upgrading them to
1242 // unblocked versions.
1243 add_test(function run_manual_update_test() {
1244 do_print("Test: " + arguments.callee.name + "\n");
1245 restartManager();
1246 load_blocklist("manual_update.xml", function manual_update_1() {
1247 restartManager();
1248
1249 AddonManager.getAddonsByIDs(ADDON_IDS, function([s1, s2, s3, s4, s5, h, r]) {
1250
1251 check_addon(s1, "1.0", true, true, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
1252 check_addon(s2, "1.0", true, true, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
1253 check_addon(s3, "1.0", true, true, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
1254 check_addon(s4, "1.0", true, false, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
1255 check_addon(s5, "1.0", true, false, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
1256 check_addon(h, "1.0", false, false, Ci.nsIBlocklistService.STATE_BLOCKED);
1257 check_addon(r, "1.0", false, false, Ci.nsIBlocklistService.STATE_BLOCKED);
1258
1259 s2.userDisabled = false;
1260 s2.userDisabled = true;
1261 check_addon(s2, "1.0", true, false, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
1262 s3.userDisabled = false;
1263 check_addon(s3, "1.0", false, false, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
1264
1265 do_execute_soon(function restart_manual_update() {
1266 restartManager();
1267
1268 manual_update("2", function manual_update_2() {
1269 restartManager();
1270
1271 AddonManager.getAddonsByIDs(ADDON_IDS, function([s1, s2, s3, s4, s5, h, r]) {
1272
1273 check_addon(s1, "2.0", true, true, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
1274 check_addon(s2, "2.0", true, false, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
1275 check_addon(s3, "2.0", false, false, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
1276 check_addon(s4, "2.0", true, false, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
1277 check_addon(s5, "2.0", false, false, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
1278 // Can't manually update to a hardblocked add-on
1279 check_addon(h, "1.0", false, false, Ci.nsIBlocklistService.STATE_BLOCKED);
1280 check_addon(r, "1.0", false, false, Ci.nsIBlocklistService.STATE_BLOCKED);
1281
1282 manual_update("3", function manual_update_3() {
1283 restartManager();
1284
1285 AddonManager.getAddonsByIDs(ADDON_IDS, function([s1, s2, s3, s4, s5, h, r]) {
1286
1287 check_addon(s1, "3.0", false, false, Ci.nsIBlocklistService.STATE_NOT_BLOCKED);
1288 check_addon(s2, "3.0", true, false, Ci.nsIBlocklistService.STATE_NOT_BLOCKED);
1289 check_addon(s3, "3.0", false, false, Ci.nsIBlocklistService.STATE_NOT_BLOCKED);
1290 check_addon(s4, "3.0", true, false, Ci.nsIBlocklistService.STATE_NOT_BLOCKED);
1291 check_addon(s5, "3.0", false, false, Ci.nsIBlocklistService.STATE_NOT_BLOCKED);
1292 check_addon(h, "3.0", false, false, Ci.nsIBlocklistService.STATE_NOT_BLOCKED);
1293 check_addon(r, "3.0", false, false, Ci.nsIBlocklistService.STATE_NOT_BLOCKED);
1294
1295 run_next_test();
1296 });
1297 });
1298 });
1299 });
1300 });
1301 });
1302 });
1303 });
1304
1305 // Starts with add-ons blocked and then new versions are installed outside of
1306 // the app to change them to unblocked.
1307 add_test(function run_manual_update_2_test() {
1308 do_print("Test: " + arguments.callee.name + "\n");
1309 shutdownManager();
1310
1311 getFileForAddon(profileDir, softblock1_1.id).remove(true);
1312 getFileForAddon(profileDir, softblock2_1.id).remove(true);
1313 getFileForAddon(profileDir, softblock3_1.id).remove(true);
1314 getFileForAddon(profileDir, softblock4_1.id).remove(true);
1315 getFileForAddon(profileDir, softblock5_1.id).remove(true);
1316 getFileForAddon(profileDir, hardblock_1.id).remove(true);
1317 getFileForAddon(profileDir, regexpblock_1.id).remove(true);
1318
1319 startupManager(false);
1320 shutdownManager();
1321
1322 writeInstallRDFForExtension(softblock1_1, profileDir);
1323 writeInstallRDFForExtension(softblock2_1, profileDir);
1324 writeInstallRDFForExtension(softblock3_1, profileDir);
1325 writeInstallRDFForExtension(softblock4_1, profileDir);
1326 writeInstallRDFForExtension(softblock5_1, profileDir);
1327 writeInstallRDFForExtension(hardblock_1, profileDir);
1328 writeInstallRDFForExtension(regexpblock_1, profileDir);
1329
1330 startupManager(false);
1331
1332 AddonManager.getAddonsByIDs(ADDON_IDS, callback_soon(function([s1, s2, s3, s4, s5, h, r]) {
1333
1334 check_addon(s1, "1.0", true, true, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
1335 check_addon(s2, "1.0", true, true, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
1336 check_addon(s3, "1.0", true, true, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
1337 check_addon(h, "1.0", false, false, Ci.nsIBlocklistService.STATE_BLOCKED);
1338 check_addon(r, "1.0", false, false, Ci.nsIBlocklistService.STATE_BLOCKED);
1339
1340 s2.userDisabled = false;
1341 s2.userDisabled = true;
1342 check_addon(s2, "1.0", true, false, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
1343 s3.userDisabled = false;
1344 check_addon(s3, "1.0", false, false, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
1345 restartManager();
1346
1347 manual_update("2", function manual_update_2_2() {
1348 restartManager();
1349
1350 AddonManager.getAddonsByIDs(ADDON_IDS,
1351 callback_soon(function([s1, s2, s3, s4, s5, h, r]) {
1352
1353 check_addon(s1, "2.0", true, true, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
1354 check_addon(s2, "2.0", true, false, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
1355 check_addon(s3, "2.0", false, false, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
1356 // Can't manually update to a hardblocked add-on
1357 check_addon(h, "1.0", false, false, Ci.nsIBlocklistService.STATE_BLOCKED);
1358 check_addon(r, "1.0", false, false, Ci.nsIBlocklistService.STATE_BLOCKED);
1359
1360 restartManager();
1361
1362 manual_update("3", function manual_update_2_3() {
1363 restartManager();
1364
1365 AddonManager.getAddonsByIDs(ADDON_IDS, function([s1, s2, s3, s4, s5, h, r]) {
1366
1367 check_addon(s1, "3.0", false, false, Ci.nsIBlocklistService.STATE_NOT_BLOCKED);
1368 check_addon(s2, "3.0", true, false, Ci.nsIBlocklistService.STATE_NOT_BLOCKED);
1369 check_addon(s3, "3.0", false, false, Ci.nsIBlocklistService.STATE_NOT_BLOCKED);
1370 check_addon(h, "3.0", false, false, Ci.nsIBlocklistService.STATE_NOT_BLOCKED);
1371 check_addon(r, "3.0", false, false, Ci.nsIBlocklistService.STATE_NOT_BLOCKED);
1372
1373 s1.userDisabled = false;
1374 s2.userDisabled = false;
1375 s4.userDisabled = true;
1376 run_next_test();
1377 });
1378 });
1379 }));
1380 });
1381 }));
1382 });
1383
1384 // Uses the API to install blocked add-ons from the local filesystem
1385 add_test(function run_local_install_test() {
1386 do_print("Test: " + arguments.callee.name + "\n");
1387 shutdownManager();
1388
1389 getFileForAddon(profileDir, softblock1_1.id).remove(true);
1390 getFileForAddon(profileDir, softblock2_1.id).remove(true);
1391 getFileForAddon(profileDir, softblock3_1.id).remove(true);
1392 getFileForAddon(profileDir, softblock4_1.id).remove(true);
1393 getFileForAddon(profileDir, softblock5_1.id).remove(true);
1394 getFileForAddon(profileDir, hardblock_1.id).remove(true);
1395 getFileForAddon(profileDir, regexpblock_1.id).remove(true);
1396
1397 startupManager(false);
1398
1399 installAllFiles([
1400 do_get_file("addons/blocklist_soft1_1.xpi"),
1401 do_get_file("addons/blocklist_soft2_1.xpi"),
1402 do_get_file("addons/blocklist_soft3_1.xpi"),
1403 do_get_file("addons/blocklist_soft4_1.xpi"),
1404 do_get_file("addons/blocklist_soft5_1.xpi"),
1405 do_get_file("addons/blocklist_hard1_1.xpi"),
1406 do_get_file("addons/blocklist_regexp1_1.xpi")
1407 ], function local_install_1() {
1408 AddonManager.getAllInstalls(function(aInstalls) {
1409 // Should have finished all installs without needing to restart
1410 do_check_eq(aInstalls.length, 0);
1411
1412 AddonManager.getAddonsByIDs(ADDON_IDS, function([s1, s2, s3, s4, s5, h, r]) {
1413
1414 check_addon(s1, "1.0", true, true, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
1415 check_addon(s2, "1.0", true, true, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
1416 check_addon(s3, "1.0", true, true, Ci.nsIBlocklistService.STATE_SOFTBLOCKED);
1417 check_addon(h, "1.0", false, false, Ci.nsIBlocklistService.STATE_BLOCKED);
1418 check_addon(r, "1.0", false, false, Ci.nsIBlocklistService.STATE_BLOCKED);
1419
1420 run_next_test();
1421 });
1422 });
1423 });
1424 });
1425
1426 add_test(function shutdown_httpserver() {
1427 testserver.stop(function() {
1428 do_test_finished("test_blocklistchange main");
1429 // this really means "async test step done"; needs to be called
1430 // even when there isn't a next test
1431 run_next_test();
1432 });
1433 });

mercurial