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

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

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 // Checks that changes that cause an add-on to become unblocked or blocked have
     6 // the right effect
     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.
    14 // softblock1 is enabled/disabled by the blocklist changes so its softDisabled
    15 // property should always match its userDisabled property
    17 // softblock2 gets manually enabled then disabled after it becomes blocked so
    18 // its softDisabled property should never become true after that
    20 // softblock3 does the same as softblock2 however it remains disabled
    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
    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)
    30 const Cc = Components.classes;
    31 const Ci = Components.interfaces;
    32 const Cu = Components.utils;
    33 const Cr = Components.results;
    35 const URI_EXTENSION_BLOCKLIST_DIALOG = "chrome://mozapps/content/extensions/blocklist.xul";
    37 Cu.import("resource://gre/modules/NetUtil.jsm");
    39 // Allow insecure updates
    40 Services.prefs.setBoolPref("extensions.checkUpdateSecurity", false)
    42 Cu.import("resource://testing-common/httpd.js");
    43 var testserver = new HttpServer();
    44 testserver.start(-1);
    45 gPort = testserver.identity.primaryPort;
    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);
    57 testserver.registerDirectory("/addons/", do_get_file("addons"));
    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 };
    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 };
    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 };
    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 };
   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 };
   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 };
   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 };
   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 };
   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 };
   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 };
   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 };
   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 };
   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 };
   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 };
   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 };
   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 };
   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 };
   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 };
   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 };
   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 };
   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 };
   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 };
   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"];
   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);
   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     });
   349     //run the code after the blocklist is closed
   350     Services.obs.notifyObservers(null, "addon-blocklist-closed", null);
   352   },
   354   QueryInterface: function(iid) {
   355     if (iid.equals(Ci.nsIWindowWatcher)
   356      || iid.equals(Ci.nsISupports))
   357       return this;
   359     throw Cr.NS_ERROR_NO_INTERFACE;
   360   }
   361 };
   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 };
   371 var InstallConfirm = {
   372   confirm: function(aWindow, aUrl, aInstalls, aInstallCount) {
   373     aInstalls.forEach(function(aInstall) {
   374       aInstall.install();
   375     });
   376   },
   378   QueryInterface: function(iid) {
   379     if (iid.equals(Ci.amIWebInstallPrompt)
   380      || iid.equals(Ci.nsISupports))
   381       return this;
   383     throw Cr.NS_ERROR_NO_INTERFACE;
   384   }
   385 };
   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 };
   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);
   403 const profileDir = gProfD.clone();
   404 profileDir.append("extensions");
   406 function load_blocklist(aFile, aCallback) {
   407   Services.obs.addObserver(function() {
   408     Services.obs.removeObserver(arguments.callee, "blocklist-updated");
   410     do_execute_soon(aCallback);
   411   }, "blocklist-updated", false);
   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 }
   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;
   425   AddonManager.addInstallListener({
   426     onNewInstall: function(aInstall) {
   427       installCount++;
   428     },
   430     onInstallEnded: function(aInstall) {
   431       installCount--;
   432       // Wait until all started installs have completed
   433       if (installCount)
   434         return;
   436       AddonManager.removeInstallListener(this);
   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;
   443       do_execute_soon(aCallback);
   444     }
   445   });
   447   Services.obs.addObserver(function() {
   448     Services.obs.removeObserver(arguments.callee, "addons-background-update-complete");
   449     backgroundCheckCompleted = true;
   451     // If any new installs have started then we'll call the callback once they
   452     // are completed
   453     if (installCount)
   454       return;
   456     do_execute_soon(aCallback);
   457   }, "addons-background-update-complete", false);
   459   AddonManagerPrivate.backgroundUpdateCheck();
   460 }
   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);
   487                 Services.obs.addObserver(function(aSubject, aTopic, aData) {
   488                   Services.obs.removeObserver(arguments.callee, "addon-install-blocked");
   490                   aSubject.QueryInterface(Ci.amIWebInstallInfo);
   492                   var installCount = aSubject.installs.length;
   494                   var listener = {
   495                     installComplete: function() {
   496                       installCount--;
   497                       if (installCount)
   498                         return;
   500                       do_execute_soon(aCallback);
   501                     },
   503                     onDownloadCancelled: function(aInstall) {
   504                       this.installComplete();
   505                     },
   507                     onInstallEnded: function(aInstall) {
   508                       this.installComplete();
   509                     }
   510                   };
   512                   aSubject.installs.forEach(function(aInstall) {
   513                     aInstall.addListener(listener);
   514                   });
   516                   aSubject.install();
   517                 }, "addon-install-blocked", false);
   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 }
   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");
   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);
   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);
   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;
   566   if (aExpectedUserDisabled || aExpectedState == Ci.nsIBlocklistService.STATE_BLOCKED) {
   567     do_check_false(willBeActive);
   568   }
   569   else {
   570     do_check_true(willBeActive);
   571   }
   572 }
   574 function run_test() {
   575   do_test_pending("test_blocklistchange main");
   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();
   588   AddonManager.getAddonsByIDs(ADDON_IDS, do_exception_wrap(function([s1, s2, s3, s4, s5, h, r]) {
   589     s4.userDisabled = true;
   590     s5.userDisabled = false;
   592     run_next_test();
   593   }));
   594 }
   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();
   604     AddonManager.getAddonsByIDs(ADDON_IDS, function([s1, s2, s3, s4, s5, h, r]) {
   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");
   615       do_execute_soon(app_update_step_2);
   616     })
   617   });
   619   function app_update_step_2() {
   620     restartManager("2");
   622     AddonManager.getAddonsByIDs(ADDON_IDS, function([s1, s2, s3, s4, s5, h, r]) {
   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");
   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);
   639       do_execute_soon(app_update_step_3);
   640     });
   641   }
   643   function app_update_step_3() {
   644     restartManager();
   646     restartManager("2.5");
   648     AddonManager.getAddonsByIDs(ADDON_IDS, function([s1, s2, s3, s4, s5, h, r]) {
   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");
   659       do_execute_soon(app_update_step_4);
   660     });
   661   }
   663   function app_update_step_4() {
   664     restartManager("1");
   666     AddonManager.getAddonsByIDs(ADDON_IDS, function([s1, s2, s3, s4, s5, h, r]) {
   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");
   677       s1.userDisabled = false;
   678       s2.userDisabled = false;
   679       s5.userDisabled = false;
   680       run_next_test();
   681     });
   682   }
   683 });
   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();
   692   AddonManager.getAddonsByIDs(ADDON_IDS, function([s1, s2, s3, s4, s5, h, r]) {
   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");
   703     do_execute_soon(update_schema_2);
   704   });
   706   function update_schema_2() {
   707     shutdownManager();
   709     changeXPIDBVersion(100);
   710     gAppInfo.version = "2";
   711     startupManager(true);
   713     AddonManager.getAddonsByIDs(ADDON_IDS, function([s1, s2, s3, s4, s5, h, r]) {
   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");
   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   }
   733   function update_schema_3() {
   734     restartManager();
   736     shutdownManager();
   737     changeXPIDBVersion(100);
   738     gAppInfo.version = "2.5";
   739     startupManager(true);
   741     AddonManager.getAddonsByIDs(ADDON_IDS, function([s1, s2, s3, s4, s5, h, r]) {
   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");
   752       do_execute_soon(update_schema_4);
   753     });
   754   }
   756   function update_schema_4() {
   757     shutdownManager();
   759     changeXPIDBVersion(100);
   760     startupManager(false);
   762     AddonManager.getAddonsByIDs(ADDON_IDS, function([s1, s2, s3, s4, s5, h, r]) {
   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");
   773       do_execute_soon(update_schema_5);
   774     });
   775   }
   777   function update_schema_5() {
   778     shutdownManager();
   780     changeXPIDBVersion(100);
   781     gAppInfo.version = "1";
   782     startupManager(true);
   784     AddonManager.getAddonsByIDs(ADDON_IDS, function([s1, s2, s3, s4, s5, h, r]) {
   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");
   795       s1.userDisabled = false;
   796       s2.userDisabled = false;
   797       s5.userDisabled = false;
   798       run_next_test();
   799     });
   800   }
   801 });
   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();
   810     AddonManager.getAddonsByIDs(ADDON_IDS, function([s1, s2, s3, s4, s5, h, r]) {
   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");
   821       load_blocklist("blocklist_update2.xml", function run_blocklist_update_2() {
   822         restartManager();
   824         AddonManager.getAddonsByIDs(ADDON_IDS, function([s1, s2, s3, s4, s5, h, r]) {
   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");
   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);
   841           do_execute_soon(function restart_and_reload() {
   842            restartManager();
   844            load_blocklist("blocklist_update2.xml", function run_blocklist_update_3() {
   845             restartManager();
   847             AddonManager.getAddonsByIDs(ADDON_IDS, function([s1, s2, s3, s4, s5, h, r]) {
   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");
   858               load_blocklist("blocklist_update1.xml", function run_blocklist_update_4() {
   859                 restartManager();
   861                 AddonManager.getAddonsByIDs(ADDON_IDS, function([s1, s2, s3, s4, s5, h, r]) {
   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");
   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 });
   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();
   894     AddonManager.getAddonsByIDs(ADDON_IDS, function([s1, s2, s3, s4, s5, h, r]) {
   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");
   905       do_execute_soon(run_addon_change_2);
   906     });
   907   });
   909   function run_addon_change_2() {
   910     shutdownManager();
   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);
   927     startupManager(false);
   929     AddonManager.getAddonsByIDs(ADDON_IDS, function([s1, s2, s3, s4, s5, h, r]) {
   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");
   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   }
   949   function run_addon_change_3() {
   950     restartManager();
   952     shutdownManager();
   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);
   969     startupManager(false);
   971     AddonManager.getAddonsByIDs(ADDON_IDS, function([s1, s2, s3, s4, s5, h, r]) {
   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");
   982       do_execute_soon(run_addon_change_4);
   983     });
   984   }
   986   function run_addon_change_4() {
   987     shutdownManager();
   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);
  1004     startupManager(false);
  1006     AddonManager.getAddonsByIDs(ADDON_IDS, function([s1, s2, s3, s4, s5, h, r]) {
  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");
  1017       s1.userDisabled = false;
  1018       s2.userDisabled = false;
  1019       s5.userDisabled = false;
  1020       run_next_test();
  1021     });
  1023 });
  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();
  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);
  1039   startupManager(false);
  1040   shutdownManager();
  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);
  1050   startupManager(false);
  1052   AddonManager.getAddonsByIDs(ADDON_IDS, function([s1, s2, s3, s4, s5, h, r]) {
  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);
  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   });
  1068   function addon_change_2_test_2() {
  1069     restartManager();
  1071     shutdownManager();
  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);
  1088     startupManager(false);
  1090     AddonManager.getAddonsByIDs(ADDON_IDS, function([s1, s2, s3, s4, s5, h, r]) {
  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);
  1098       do_execute_soon(addon_change_2_test_3);
  1099     });
  1102   function addon_change_2_test_3() {
  1103     shutdownManager();
  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);
  1120     startupManager(false);
  1122     AddonManager.getAddonsByIDs(ADDON_IDS, function([s1, s2, s3, s4, s5, h, r]) {
  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);
  1130       s1.userDisabled = false;
  1131       s2.userDisabled = false;
  1132       s4.userDisabled = true;
  1133       s5.userDisabled = false;
  1134       run_next_test();
  1135     });
  1137 });
  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();
  1145   AddonManager.getAddonsByIDs(ADDON_IDS, function([s1, s2, s3, s4, s5, h, r]) {
  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);
  1155     background_update(function background_update_1() {
  1156       restartManager();
  1158       AddonManager.getAddonsByIDs(ADDON_IDS, function([s1, s2, s3, s4, s5, h, r]) {
  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);
  1168         run_next_test();
  1169       });
  1170     });
  1171   });
  1172 });
  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();
  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);
  1188   startupManager(false);
  1189   shutdownManager();
  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);
  1199   startupManager(false);
  1201   AddonManager.getAddonsByIDs(ADDON_IDS, function([s1, s2, s3, s4, s5, h, r]) {
  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);
  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);
  1215     // make sure we're not in a handler when we restart
  1216     do_execute_soon(function restart_and_update() {
  1217      restartManager();
  1219      background_update(function background_update_2_1() {
  1220       restartManager();
  1222       AddonManager.getAddonsByIDs(ADDON_IDS, function([s1, s2, s3, s4, s5, h, r]) {
  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);
  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 });
  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();
  1249     AddonManager.getAddonsByIDs(ADDON_IDS, function([s1, s2, s3, s4, s5, h, r]) {
  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);
  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);
  1265       do_execute_soon(function restart_manual_update() {
  1266        restartManager();
  1268        manual_update("2", function manual_update_2() {
  1269         restartManager();
  1271         AddonManager.getAddonsByIDs(ADDON_IDS, function([s1, s2, s3, s4, s5, h, r]) {
  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);
  1282           manual_update("3", function manual_update_3() {
  1283             restartManager();
  1285             AddonManager.getAddonsByIDs(ADDON_IDS, function([s1, s2, s3, s4, s5, h, r]) {
  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);
  1295               run_next_test();
  1296             });
  1297           });
  1298         });
  1299        });
  1300       });
  1301     });
  1302   });
  1303 });
  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();
  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);
  1319   startupManager(false);
  1320   shutdownManager();
  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);
  1330   startupManager(false);
  1332   AddonManager.getAddonsByIDs(ADDON_IDS, callback_soon(function([s1, s2, s3, s4, s5, h, r]) {
  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);
  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();
  1347     manual_update("2", function manual_update_2_2() {
  1348       restartManager();
  1350       AddonManager.getAddonsByIDs(ADDON_IDS,
  1351        callback_soon(function([s1, s2, s3, s4, s5, h, r]) {
  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);
  1360         restartManager();
  1362         manual_update("3", function manual_update_2_3() {
  1363           restartManager();
  1365           AddonManager.getAddonsByIDs(ADDON_IDS, function([s1, s2, s3, s4, s5, h, r]) {
  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);
  1373             s1.userDisabled = false;
  1374             s2.userDisabled = false;
  1375             s4.userDisabled = true;
  1376             run_next_test();
  1377           });
  1378         });
  1379       }));
  1380     });
  1381   }));
  1382 });
  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();
  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);
  1397   startupManager(false);
  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);
  1412       AddonManager.getAddonsByIDs(ADDON_IDS, function([s1, s2, s3, s4, s5, h, r]) {
  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);
  1420         run_next_test();
  1421       });
  1422     });
  1423   });
  1424 });
  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