toolkit/mozapps/extensions/test/xpcshell/test_startup.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 // This verifies startup detection of added/removed/changed items and install
     6 // location priorities
     8 // Enable loading extensions from the user and system scopes
     9 Services.prefs.setIntPref("extensions.enabledScopes",
    10                           AddonManager.SCOPE_PROFILE + AddonManager.SCOPE_USER +
    11                           AddonManager.SCOPE_SYSTEM);
    13 var addon1 = {
    14   id: "addon1@tests.mozilla.org",
    15   version: "1.0",
    16   name: "Test 1",
    17   targetApplications: [{
    18     id: "xpcshell@tests.mozilla.org",
    19     minVersion: "1",
    20     maxVersion: "1"
    21   }, {                 // Repeated target application entries should be ignored
    22     id: "xpcshell@tests.mozilla.org",
    23     minVersion: "2",
    24     maxVersion: "2"
    25   }]
    26 };
    28 var addon2 = {
    29   id: "addon2@tests.mozilla.org",
    30   version: "2.0",
    31   name: "Test 2",
    32   targetApplications: [{  // Bad target application entries should be ignored
    33     minVersion: "3",
    34     maxVersion: "4"
    35   }, {
    36     id: "xpcshell@tests.mozilla.org",
    37     minVersion: "1",
    38     maxVersion: "2"
    39   }]
    40 };
    42 var addon3 = {
    43   id: "addon3@tests.mozilla.org",
    44   version: "3.0",
    45   name: "Test 3",
    46   targetApplications: [{
    47     id: "toolkit@mozilla.org",
    48     minVersion: "1.9.2",
    49     maxVersion: "1.9.2.*"
    50   }]
    51 };
    53 // Should be ignored because it has no ID
    54 var addon4 = {
    55   version: "4.0",
    56   name: "Test 4",
    57   targetApplications: [{
    58     id: "xpcshell@tests.mozilla.org",
    59     minVersion: "1",
    60     maxVersion: "1"
    61   }]
    62 };
    64 // Should be ignored because it has no version
    65 var addon5 = {
    66   id: "addon5@tests.mozilla.org",
    67   name: "Test 5",
    68   targetApplications: [{
    69     id: "xpcshell@tests.mozilla.org",
    70     minVersion: "1",
    71     maxVersion: "1"
    72   }]
    73 };
    75 // Should be ignored because it has an invalid type
    76 var addon6 = {
    77   id: "addon6@tests.mozilla.org",
    78   version: "3.0",
    79   name: "Test 6",
    80   type: 5,
    81   targetApplications: [{
    82     id: "toolkit@mozilla.org",
    83     minVersion: "1.9.2",
    84     maxVersion: "1.9.2.*"
    85   }]
    86 };
    88 // Should be ignored because it has an invalid type
    89 var addon7 = {
    90   id: "addon7@tests.mozilla.org",
    91   version: "3.0",
    92   name: "Test 3",
    93   type: "extension",
    94   targetApplications: [{
    95     id: "toolkit@mozilla.org",
    96     minVersion: "1.9.2",
    97     maxVersion: "1.9.2.*"
    98   }]
    99 };
   101 createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "1", "1.9.2");
   103 const globalDir = gProfD.clone();
   104 globalDir.append("extensions2");
   105 globalDir.append(gAppInfo.ID);
   106 registerDirectory("XRESysSExtPD", globalDir.parent);
   107 const userDir = gProfD.clone();
   108 userDir.append("extensions3");
   109 userDir.append(gAppInfo.ID);
   110 registerDirectory("XREUSysExt", userDir.parent);
   111 const profileDir = gProfD.clone();
   112 profileDir.append("extensions");
   114 var gCachePurged = false;
   116 // Set up the profile
   117 function run_test() {
   118   do_test_pending("test_startup main");
   120   let obs = AM_Cc["@mozilla.org/observer-service;1"].
   121     getService(AM_Ci.nsIObserverService);
   122   obs.addObserver({
   123     observe: function(aSubject, aTopic, aData) {
   124       gCachePurged = true;
   125     }
   126   }, "startupcache-invalidate", false);
   128   startupManager();
   129   check_startup_changes(AddonManager.STARTUP_CHANGE_INSTALLED, []);
   130   check_startup_changes(AddonManager.STARTUP_CHANGE_CHANGED, []);
   131   check_startup_changes(AddonManager.STARTUP_CHANGE_UNINSTALLED, []);
   132   check_startup_changes(AddonManager.STARTUP_CHANGE_DISABLED, []);
   133   check_startup_changes(AddonManager.STARTUP_CHANGE_ENABLED, []);
   135   do_check_false(gExtensionsJSON.exists());
   137   do_check_false(gExtensionsINI.exists());
   139   AddonManager.getAddonsByIDs(["addon1@tests.mozilla.org",
   140                                "addon2@tests.mozilla.org",
   141                                "addon3@tests.mozilla.org",
   142                                "addon4@tests.mozilla.org",
   143                                "addon5@tests.mozilla.org",
   144                                "addon6@tests.mozilla.org",
   145                                "addon7@tests.mozilla.org"],
   146                                function([a1, a2, a3, a4, a5, a6, a7]) {
   148     do_check_eq(a1, null);
   149     do_check_not_in_crash_annotation(addon1.id, addon1.version);
   150     do_check_eq(a2, null);
   151     do_check_not_in_crash_annotation(addon2.id, addon2.version);
   152     do_check_eq(a3, null);
   153     do_check_not_in_crash_annotation(addon3.id, addon3.version);
   154     do_check_eq(a4, null);
   155     do_check_eq(a5, null);
   157     do_execute_soon(run_test_1);
   158   });
   159 }
   161 function end_test() {
   162   do_test_finished("test_startup main");
   163 }
   165 // Try to install all the items into the profile
   166 function run_test_1() {
   167   writeInstallRDFForExtension(addon1, profileDir);
   168   var dest = writeInstallRDFForExtension(addon2, profileDir);
   169   // Attempt to make this look like it was added some time in the past so
   170   // the change in run_test_2 makes the last modified time change.
   171   setExtensionModifiedTime(dest, dest.lastModifiedTime - 5000);
   173   writeInstallRDFForExtension(addon3, profileDir);
   174   writeInstallRDFForExtension(addon4, profileDir);
   175   writeInstallRDFForExtension(addon5, profileDir);
   176   writeInstallRDFForExtension(addon6, profileDir);
   177   writeInstallRDFForExtension(addon7, profileDir);
   179   gCachePurged = false;
   180   restartManager();
   181   check_startup_changes(AddonManager.STARTUP_CHANGE_INSTALLED, ["addon1@tests.mozilla.org",
   182                                       "addon2@tests.mozilla.org",
   183                                       "addon3@tests.mozilla.org"]);
   184   check_startup_changes(AddonManager.STARTUP_CHANGE_CHANGED, []);
   185   check_startup_changes(AddonManager.STARTUP_CHANGE_UNINSTALLED, []);
   186   check_startup_changes(AddonManager.STARTUP_CHANGE_DISABLED, []);
   187   check_startup_changes(AddonManager.STARTUP_CHANGE_ENABLED, []);
   188   do_check_true(gCachePurged);
   190   do_print("Checking for " + gExtensionsINI.path);
   191   do_check_true(gExtensionsINI.exists());
   193   AddonManager.getAddonsByIDs(["addon1@tests.mozilla.org",
   194                                "addon2@tests.mozilla.org",
   195                                "addon3@tests.mozilla.org",
   196                                "addon4@tests.mozilla.org",
   197                                "addon5@tests.mozilla.org",
   198                                "addon6@tests.mozilla.org",
   199                                "addon7@tests.mozilla.org"],
   200                                function([a1, a2, a3, a4, a5, a6, a7]) {
   202     do_check_neq(a1, null);
   203     do_check_eq(a1.id, "addon1@tests.mozilla.org");
   204     do_check_neq(a1.syncGUID, null);
   205     do_check_true(a1.syncGUID.length >= 9);
   206     do_check_eq(a1.version, "1.0");
   207     do_check_eq(a1.name, "Test 1");
   208     do_check_true(isExtensionInAddonsList(profileDir, a1.id));
   209     do_check_true(hasFlag(a1.permissions, AddonManager.PERM_CAN_UNINSTALL));
   210     do_check_true(hasFlag(a1.permissions, AddonManager.PERM_CAN_UPGRADE));
   211     do_check_in_crash_annotation(addon1.id, addon1.version);
   212     do_check_eq(a1.scope, AddonManager.SCOPE_PROFILE);
   213     do_check_eq(a1.sourceURI, null);
   214     do_check_true(a1.foreignInstall);
   216     do_check_neq(a2, null);
   217     do_check_eq(a2.id, "addon2@tests.mozilla.org");
   218     do_check_neq(a2.syncGUID, null);
   219     do_check_true(a2.syncGUID.length >= 9);
   220     do_check_eq(a2.version, "2.0");
   221     do_check_eq(a2.name, "Test 2");
   222     do_check_true(isExtensionInAddonsList(profileDir, a2.id));
   223     do_check_true(hasFlag(a2.permissions, AddonManager.PERM_CAN_UNINSTALL));
   224     do_check_true(hasFlag(a2.permissions, AddonManager.PERM_CAN_UPGRADE));
   225     do_check_in_crash_annotation(addon2.id, addon2.version);
   226     do_check_eq(a2.scope, AddonManager.SCOPE_PROFILE);
   227     do_check_eq(a2.sourceURI, null);
   228     do_check_true(a2.foreignInstall);
   230     do_check_neq(a3, null);
   231     do_check_eq(a3.id, "addon3@tests.mozilla.org");
   232     do_check_neq(a3.syncGUID, null);
   233     do_check_true(a3.syncGUID.length >= 9);
   234     do_check_eq(a3.version, "3.0");
   235     do_check_eq(a3.name, "Test 3");
   236     do_check_true(isExtensionInAddonsList(profileDir, a3.id));
   237     do_check_true(hasFlag(a3.permissions, AddonManager.PERM_CAN_UNINSTALL));
   238     do_check_true(hasFlag(a3.permissions, AddonManager.PERM_CAN_UPGRADE));
   239     do_check_in_crash_annotation(addon3.id, addon3.version);
   240     do_check_eq(a3.scope, AddonManager.SCOPE_PROFILE);
   241     do_check_eq(a3.sourceURI, null);
   242     do_check_true(a3.foreignInstall);
   244     do_check_eq(a4, null);
   245     do_check_false(isExtensionInAddonsList(profileDir, "addon4@tests.mozilla.org"));
   246     dest = profileDir.clone();
   247     dest.append(do_get_expected_addon_name("addon4@tests.mozilla.org"));
   248     do_check_false(dest.exists());
   250     do_check_eq(a5, null);
   251     do_check_false(isExtensionInAddonsList(profileDir, "addon5@tests.mozilla.org"));
   252     dest = profileDir.clone();
   253     dest.append(do_get_expected_addon_name("addon5@tests.mozilla.org"));
   254     do_check_false(dest.exists());
   256     do_check_eq(a6, null);
   257     do_check_false(isExtensionInAddonsList(profileDir, "addon6@tests.mozilla.org"));
   258     dest = profileDir.clone();
   259     dest.append(do_get_expected_addon_name("addon6@tests.mozilla.org"));
   260     do_check_false(dest.exists());
   262     do_check_eq(a7, null);
   263     do_check_false(isExtensionInAddonsList(profileDir, "addon7@tests.mozilla.org"));
   264     dest = profileDir.clone();
   265     dest.append(do_get_expected_addon_name("addon7@tests.mozilla.org"));
   266     do_check_false(dest.exists());
   268     AddonManager.getAddonsByTypes(["extension"], function(extensionAddons) {
   269       do_check_eq(extensionAddons.length, 3);
   271       do_execute_soon(run_test_2);
   272     });
   273   });
   274 }
   276 // Test that modified items are detected and items in other install locations
   277 // are ignored
   278 function run_test_2() {
   279   addon1.version = "1.1";
   280   writeInstallRDFForExtension(addon1, userDir);
   281   addon2.version="2.1";
   282   writeInstallRDFForExtension(addon2, profileDir);
   283   addon2.version="2.2";
   284   writeInstallRDFForExtension(addon2, globalDir);
   285   addon2.version="2.3";
   286   writeInstallRDFForExtension(addon2, userDir);
   287   var dest = profileDir.clone();
   288   dest.append(do_get_expected_addon_name("addon3@tests.mozilla.org"));
   289   dest.remove(true);
   291   gCachePurged = false;
   292   restartManager();
   293   check_startup_changes(AddonManager.STARTUP_CHANGE_INSTALLED, []);
   294   check_startup_changes(AddonManager.STARTUP_CHANGE_CHANGED, ["addon2@tests.mozilla.org"]);
   295   check_startup_changes(AddonManager.STARTUP_CHANGE_UNINSTALLED, ["addon3@tests.mozilla.org"]);
   296   check_startup_changes(AddonManager.STARTUP_CHANGE_DISABLED, []);
   297   check_startup_changes(AddonManager.STARTUP_CHANGE_ENABLED, []);
   298   do_check_true(gCachePurged);
   300   do_check_true(gExtensionsINI.exists());
   302   AddonManager.getAddonsByIDs(["addon1@tests.mozilla.org",
   303                                "addon2@tests.mozilla.org",
   304                                "addon3@tests.mozilla.org",
   305                                "addon4@tests.mozilla.org",
   306                                "addon5@tests.mozilla.org"],
   307                                function([a1, a2, a3, a4, a5]) {
   309     do_check_neq(a1, null);
   310     do_check_eq(a1.id, "addon1@tests.mozilla.org");
   311     do_check_eq(a1.version, "1.0");
   312     do_check_true(isExtensionInAddonsList(profileDir, a1.id));
   313     do_check_false(isExtensionInAddonsList(userDir, a1.id));
   314     do_check_true(hasFlag(a1.permissions, AddonManager.PERM_CAN_UNINSTALL));
   315     do_check_true(hasFlag(a1.permissions, AddonManager.PERM_CAN_UPGRADE));
   316     do_check_in_crash_annotation(addon1.id, a1.version);
   317     do_check_eq(a1.scope, AddonManager.SCOPE_PROFILE);
   318     do_check_true(a1.foreignInstall);
   320     do_check_neq(a2, null);
   321     do_check_eq(a2.id, "addon2@tests.mozilla.org");
   322     do_check_eq(a2.version, "2.1");
   323     do_check_true(isExtensionInAddonsList(profileDir, a2.id));
   324     do_check_false(isExtensionInAddonsList(userDir, a2.id));
   325     do_check_false(isExtensionInAddonsList(globalDir, a2.id));
   326     do_check_true(hasFlag(a2.permissions, AddonManager.PERM_CAN_UNINSTALL));
   327     do_check_true(hasFlag(a2.permissions, AddonManager.PERM_CAN_UPGRADE));
   328     do_check_in_crash_annotation(addon2.id, a2.version);
   329     do_check_eq(a2.scope, AddonManager.SCOPE_PROFILE);
   330     do_check_true(a2.foreignInstall);
   332     do_check_eq(a3, null);
   333     do_check_false(isExtensionInAddonsList(profileDir, "addon3@tests.mozilla.org"));
   334     do_check_not_in_crash_annotation(addon3.id, addon3.version);
   336     do_check_eq(a4, null);
   337     do_check_false(isExtensionInAddonsList(profileDir, "addon4@tests.mozilla.org"));
   339     do_check_eq(a5, null);
   340     do_check_false(isExtensionInAddonsList(profileDir, "addon5@tests.mozilla.org"));
   342     do_execute_soon(run_test_3);
   343   });
   344 }
   346 // Check that removing items from the profile reveals their hidden versions.
   347 function run_test_3() {
   348   var dest = profileDir.clone();
   349   dest.append(do_get_expected_addon_name("addon1@tests.mozilla.org"));
   350   dest.remove(true);
   351   dest = profileDir.clone();
   352   dest.append(do_get_expected_addon_name("addon2@tests.mozilla.org"));
   353   dest.remove(true);
   354   writeInstallRDFForExtension(addon3, profileDir, "addon4@tests.mozilla.org");
   356   gCachePurged = false;
   357   restartManager();
   358   check_startup_changes(AddonManager.STARTUP_CHANGE_INSTALLED, []);
   359   check_startup_changes(AddonManager.STARTUP_CHANGE_CHANGED, ["addon1@tests.mozilla.org",
   360                                     "addon2@tests.mozilla.org"]);
   361   check_startup_changes(AddonManager.STARTUP_CHANGE_UNINSTALLED, []);
   362   check_startup_changes(AddonManager.STARTUP_CHANGE_DISABLED, []);
   363   check_startup_changes(AddonManager.STARTUP_CHANGE_ENABLED, []);
   364   do_check_true(gCachePurged);
   366   AddonManager.getAddonsByIDs(["addon1@tests.mozilla.org",
   367                                "addon2@tests.mozilla.org",
   368                                "addon3@tests.mozilla.org",
   369                                "addon4@tests.mozilla.org",
   370                                "addon5@tests.mozilla.org"],
   371                                function([a1, a2, a3, a4, a5]) {
   373     do_check_neq(a1, null);
   374     do_check_eq(a1.id, "addon1@tests.mozilla.org");
   375     do_check_eq(a1.version, "1.1");
   376     do_check_false(isExtensionInAddonsList(profileDir, a1.id));
   377     do_check_true(isExtensionInAddonsList(userDir, a1.id));
   378     do_check_false(hasFlag(a1.permissions, AddonManager.PERM_CAN_UNINSTALL));
   379     do_check_false(hasFlag(a1.permissions, AddonManager.PERM_CAN_UPGRADE));
   380     do_check_in_crash_annotation(addon1.id, a1.version);
   381     do_check_eq(a1.scope, AddonManager.SCOPE_USER);
   383     do_check_neq(a2, null);
   384     do_check_eq(a2.id, "addon2@tests.mozilla.org");
   385     do_check_eq(a2.version, "2.3");
   386     do_check_false(isExtensionInAddonsList(profileDir, a2.id));
   387     do_check_true(isExtensionInAddonsList(userDir, a2.id));
   388     do_check_false(isExtensionInAddonsList(globalDir, a2.id));
   389     do_check_false(hasFlag(a2.permissions, AddonManager.PERM_CAN_UNINSTALL));
   390     do_check_false(hasFlag(a2.permissions, AddonManager.PERM_CAN_UPGRADE));
   391     do_check_in_crash_annotation(addon2.id, a2.version);
   392     do_check_eq(a2.scope, AddonManager.SCOPE_USER);
   394     do_check_eq(a3, null);
   395     do_check_false(isExtensionInAddonsList(profileDir, "addon3@tests.mozilla.org"));
   397     do_check_eq(a4, null);
   398     do_check_false(isExtensionInAddonsList(profileDir, "addon4@tests.mozilla.org"));
   400     do_check_eq(a5, null);
   401     do_check_false(isExtensionInAddonsList(profileDir, "addon5@tests.mozilla.org"));
   403     dest = profileDir.clone();
   404     dest.append(do_get_expected_addon_name("addon4@tests.mozilla.org"));
   405     do_check_false(dest.exists());
   407     do_execute_soon(run_test_4);
   408   });
   409 }
   411 // Test that disabling an install location works
   412 function run_test_4() {
   413   Services.prefs.setIntPref("extensions.enabledScopes", AddonManager.SCOPE_SYSTEM);
   415   gCachePurged = false;
   416   restartManager();
   417   check_startup_changes(AddonManager.STARTUP_CHANGE_INSTALLED, []);
   418   check_startup_changes(AddonManager.STARTUP_CHANGE_CHANGED, ["addon2@tests.mozilla.org"]);
   419   check_startup_changes(AddonManager.STARTUP_CHANGE_UNINSTALLED, ["addon1@tests.mozilla.org"]);
   420   check_startup_changes(AddonManager.STARTUP_CHANGE_DISABLED, []);
   421   check_startup_changes(AddonManager.STARTUP_CHANGE_ENABLED, []);
   422   do_check_true(gCachePurged);
   424   AddonManager.getAddonsByIDs(["addon1@tests.mozilla.org",
   425                                "addon2@tests.mozilla.org",
   426                                "addon3@tests.mozilla.org",
   427                                "addon4@tests.mozilla.org",
   428                                "addon5@tests.mozilla.org"],
   429                                function([a1, a2, a3, a4, a5]) {
   431     do_check_eq(a1, null);
   432     do_check_false(isExtensionInAddonsList(profileDir, "addon1@tests.mozilla.org"));
   433     do_check_false(isExtensionInAddonsList(userDir, "addon1@tests.mozilla.org"));
   435     do_check_neq(a2, null);
   436     do_check_eq(a2.id, "addon2@tests.mozilla.org");
   437     do_check_eq(a2.version, "2.2");
   438     do_check_false(isExtensionInAddonsList(profileDir, a2.id));
   439     do_check_false(isExtensionInAddonsList(userDir, a2.id));
   440     do_check_true(isExtensionInAddonsList(globalDir, a2.id));
   441     do_check_false(hasFlag(a2.permissions, AddonManager.PERM_CAN_UNINSTALL));
   442     do_check_false(hasFlag(a2.permissions, AddonManager.PERM_CAN_UPGRADE));
   443     do_check_in_crash_annotation(addon2.id, a2.version);
   444     do_check_eq(a2.scope, AddonManager.SCOPE_SYSTEM);
   446     do_execute_soon(run_test_5);
   447   });
   448 }
   450 // Switching disabled locations works
   451 function run_test_5() {
   452   Services.prefs.setIntPref("extensions.enabledScopes", AddonManager.SCOPE_USER);
   454   gCachePurged = false;
   455   restartManager();
   456   check_startup_changes(AddonManager.STARTUP_CHANGE_INSTALLED, ["addon1@tests.mozilla.org"]);
   457   check_startup_changes(AddonManager.STARTUP_CHANGE_CHANGED, ["addon2@tests.mozilla.org"]);
   458   check_startup_changes(AddonManager.STARTUP_CHANGE_UNINSTALLED, []);
   459   check_startup_changes(AddonManager.STARTUP_CHANGE_DISABLED, []);
   460   check_startup_changes(AddonManager.STARTUP_CHANGE_ENABLED, []);
   461   do_check_true(gCachePurged);
   463   AddonManager.getAddonsByIDs(["addon1@tests.mozilla.org",
   464                                "addon2@tests.mozilla.org",
   465                                "addon3@tests.mozilla.org",
   466                                "addon4@tests.mozilla.org",
   467                                "addon5@tests.mozilla.org"],
   468                                function([a1, a2, a3, a4, a5]) {
   470     do_check_neq(a1, null);
   471     do_check_eq(a1.id, "addon1@tests.mozilla.org");
   472     do_check_eq(a1.version, "1.1");
   473     do_check_false(isExtensionInAddonsList(profileDir, a1.id));
   474     do_check_true(isExtensionInAddonsList(userDir, a1.id));
   475     do_check_false(hasFlag(a1.permissions, AddonManager.PERM_CAN_UNINSTALL));
   476     do_check_false(hasFlag(a1.permissions, AddonManager.PERM_CAN_UPGRADE));
   477     do_check_in_crash_annotation(addon1.id, a1.version);
   478     do_check_eq(a1.scope, AddonManager.SCOPE_USER);
   480     do_check_neq(a2, null);
   481     do_check_eq(a2.id, "addon2@tests.mozilla.org");
   482     do_check_eq(a2.version, "2.3");
   483     do_check_false(isExtensionInAddonsList(profileDir, a2.id));
   484     do_check_true(isExtensionInAddonsList(userDir, a2.id));
   485     do_check_false(isExtensionInAddonsList(globalDir, a2.id));
   486     do_check_false(hasFlag(a2.permissions, AddonManager.PERM_CAN_UNINSTALL));
   487     do_check_false(hasFlag(a2.permissions, AddonManager.PERM_CAN_UPGRADE));
   488     do_check_in_crash_annotation(addon2.id, a2.version);
   489     do_check_eq(a2.scope, AddonManager.SCOPE_USER);
   491     do_execute_soon(run_test_6);
   492   });
   493 }
   495 // Resetting the pref makes everything visible again
   496 function run_test_6() {
   497   Services.prefs.clearUserPref("extensions.enabledScopes");
   499   gCachePurged = false;
   500   restartManager();
   501   check_startup_changes(AddonManager.STARTUP_CHANGE_INSTALLED, []);
   502   check_startup_changes(AddonManager.STARTUP_CHANGE_CHANGED, []);
   503   check_startup_changes(AddonManager.STARTUP_CHANGE_UNINSTALLED, []);
   504   check_startup_changes(AddonManager.STARTUP_CHANGE_DISABLED, []);
   505   check_startup_changes(AddonManager.STARTUP_CHANGE_ENABLED, []);
   506   do_check_true(gCachePurged);
   508   AddonManager.getAddonsByIDs(["addon1@tests.mozilla.org",
   509                                "addon2@tests.mozilla.org",
   510                                "addon3@tests.mozilla.org",
   511                                "addon4@tests.mozilla.org",
   512                                "addon5@tests.mozilla.org"],
   513                                function([a1, a2, a3, a4, a5]) {
   515     do_check_neq(a1, null);
   516     do_check_eq(a1.id, "addon1@tests.mozilla.org");
   517     do_check_eq(a1.version, "1.1");
   518     do_check_false(isExtensionInAddonsList(profileDir, a1.id));
   519     do_check_true(isExtensionInAddonsList(userDir, a1.id));
   520     do_check_false(hasFlag(a1.permissions, AddonManager.PERM_CAN_UNINSTALL));
   521     do_check_false(hasFlag(a1.permissions, AddonManager.PERM_CAN_UPGRADE));
   522     do_check_in_crash_annotation(addon1.id, a1.version);
   523     do_check_eq(a1.scope, AddonManager.SCOPE_USER);
   525     do_check_neq(a2, null);
   526     do_check_eq(a2.id, "addon2@tests.mozilla.org");
   527     do_check_eq(a2.version, "2.3");
   528     do_check_false(isExtensionInAddonsList(profileDir, a2.id));
   529     do_check_true(isExtensionInAddonsList(userDir, a2.id));
   530     do_check_false(isExtensionInAddonsList(globalDir, a2.id));
   531     do_check_false(hasFlag(a2.permissions, AddonManager.PERM_CAN_UNINSTALL));
   532     do_check_false(hasFlag(a2.permissions, AddonManager.PERM_CAN_UPGRADE));
   533     do_check_in_crash_annotation(addon2.id, a2.version);
   534     do_check_eq(a2.scope, AddonManager.SCOPE_USER);
   536     do_execute_soon(run_test_7);
   537   });
   538 }
   540 // Check that items in the profile hide the others again.
   541 function run_test_7() {
   542   addon1.version = "1.2";
   543   writeInstallRDFForExtension(addon1, profileDir);
   544   var dest = userDir.clone();
   545   dest.append(do_get_expected_addon_name("addon2@tests.mozilla.org"));
   546   dest.remove(true);
   548   gCachePurged = false;
   549   restartManager();
   550   check_startup_changes(AddonManager.STARTUP_CHANGE_INSTALLED, []);
   551   check_startup_changes(AddonManager.STARTUP_CHANGE_CHANGED, ["addon1@tests.mozilla.org",
   552                                     "addon2@tests.mozilla.org"]);
   553   check_startup_changes(AddonManager.STARTUP_CHANGE_UNINSTALLED, []);
   554   check_startup_changes(AddonManager.STARTUP_CHANGE_DISABLED, []);
   555   check_startup_changes(AddonManager.STARTUP_CHANGE_ENABLED, []);
   556   do_check_true(gCachePurged);
   558   AddonManager.getAddonsByIDs(["addon1@tests.mozilla.org",
   559                                "addon2@tests.mozilla.org",
   560                                "addon3@tests.mozilla.org",
   561                                "addon4@tests.mozilla.org",
   562                                "addon5@tests.mozilla.org"],
   563                                function([a1, a2, a3, a4, a5]) {
   565     do_check_neq(a1, null);
   566     do_check_eq(a1.id, "addon1@tests.mozilla.org");
   567     do_check_eq(a1.version, "1.2");
   568     do_check_true(isExtensionInAddonsList(profileDir, a1.id));
   569     do_check_false(isExtensionInAddonsList(userDir, a1.id));
   570     do_check_true(hasFlag(a1.permissions, AddonManager.PERM_CAN_UNINSTALL));
   571     do_check_true(hasFlag(a1.permissions, AddonManager.PERM_CAN_UPGRADE));
   572     do_check_in_crash_annotation(addon1.id, a1.version);
   573     do_check_eq(a1.scope, AddonManager.SCOPE_PROFILE);
   575     do_check_neq(a2, null);
   576     do_check_eq(a2.id, "addon2@tests.mozilla.org");
   577     do_check_eq(a2.version, "2.2");
   578     do_check_false(isExtensionInAddonsList(profileDir, a2.id));
   579     do_check_false(isExtensionInAddonsList(userDir, a2.id));
   580     do_check_true(isExtensionInAddonsList(globalDir, a2.id));
   581     do_check_false(hasFlag(a2.permissions, AddonManager.PERM_CAN_UNINSTALL));
   582     do_check_false(hasFlag(a2.permissions, AddonManager.PERM_CAN_UPGRADE));
   583     do_check_in_crash_annotation(addon2.id, a2.version);
   584     do_check_eq(a2.scope, AddonManager.SCOPE_SYSTEM);
   586     do_check_eq(a3, null);
   587     do_check_false(isExtensionInAddonsList(profileDir, "addon3@tests.mozilla.org"));
   589     do_check_eq(a4, null);
   590     do_check_false(isExtensionInAddonsList(profileDir, "addon4@tests.mozilla.org"));
   592     do_check_eq(a5, null);
   593     do_check_false(isExtensionInAddonsList(profileDir, "addon5@tests.mozilla.org"));
   595     do_execute_soon(run_test_8);
   596   });
   597 }
   599 // Disabling all locations still leaves the profile working
   600 function run_test_8() {
   601   Services.prefs.setIntPref("extensions.enabledScopes", 0);
   603   gCachePurged = false;
   604   restartManager();
   605   check_startup_changes(AddonManager.STARTUP_CHANGE_INSTALLED, []);
   606   check_startup_changes(AddonManager.STARTUP_CHANGE_CHANGED, []);
   607   check_startup_changes(AddonManager.STARTUP_CHANGE_UNINSTALLED, ["addon2@tests.mozilla.org"]);
   608   check_startup_changes(AddonManager.STARTUP_CHANGE_DISABLED, []);
   609   check_startup_changes(AddonManager.STARTUP_CHANGE_ENABLED, []);
   610   do_check_true(gCachePurged);
   612   AddonManager.getAddonsByIDs(["addon1@tests.mozilla.org",
   613                                "addon2@tests.mozilla.org",
   614                                "addon3@tests.mozilla.org",
   615                                "addon4@tests.mozilla.org",
   616                                "addon5@tests.mozilla.org"],
   617                                function([a1, a2, a3, a4, a5]) {
   619     do_check_neq(a1, null);
   620     do_check_eq(a1.id, "addon1@tests.mozilla.org");
   621     do_check_eq(a1.version, "1.2");
   622     do_check_true(isExtensionInAddonsList(profileDir, a1.id));
   623     do_check_false(isExtensionInAddonsList(userDir, a1.id));
   624     do_check_true(hasFlag(a1.permissions, AddonManager.PERM_CAN_UNINSTALL));
   625     do_check_true(hasFlag(a1.permissions, AddonManager.PERM_CAN_UPGRADE));
   626     do_check_in_crash_annotation(addon1.id, a1.version);
   627     do_check_eq(a1.scope, AddonManager.SCOPE_PROFILE);
   629     do_check_eq(a2, null);
   630     do_check_false(isExtensionInAddonsList(profileDir, "addon2@tests.mozilla.org"));
   631     do_check_false(isExtensionInAddonsList(userDir, "addon2@tests.mozilla.org"));
   632     do_check_false(isExtensionInAddonsList(globalDir, "addon2@tests.mozilla.org"));
   634     do_execute_soon(run_test_9);
   635   });
   636 }
   638 // More hiding and revealing
   639 function run_test_9() {
   640   Services.prefs.clearUserPref("extensions.enabledScopes", 0);
   642   var dest = userDir.clone();
   643   dest.append(do_get_expected_addon_name("addon1@tests.mozilla.org"));
   644   dest.remove(true);
   645   dest = globalDir.clone();
   646   dest.append(do_get_expected_addon_name("addon2@tests.mozilla.org"));
   647   dest.remove(true);
   648   addon2.version = "2.4";
   649   writeInstallRDFForExtension(addon2, profileDir);
   651   gCachePurged = false;
   652   restartManager();
   653   check_startup_changes(AddonManager.STARTUP_CHANGE_INSTALLED, ["addon2@tests.mozilla.org"]);
   654   check_startup_changes(AddonManager.STARTUP_CHANGE_CHANGED, []);
   655   check_startup_changes(AddonManager.STARTUP_CHANGE_UNINSTALLED, []);
   656   check_startup_changes(AddonManager.STARTUP_CHANGE_DISABLED, []);
   657   check_startup_changes(AddonManager.STARTUP_CHANGE_ENABLED, []);
   658   do_check_true(gCachePurged);
   660   AddonManager.getAddonsByIDs(["addon1@tests.mozilla.org",
   661                                "addon2@tests.mozilla.org",
   662                                "addon3@tests.mozilla.org",
   663                                "addon4@tests.mozilla.org",
   664                                "addon5@tests.mozilla.org"],
   665                                function([a1, a2, a3, a4, a5]) {
   667     do_check_neq(a1, null);
   668     do_check_eq(a1.id, "addon1@tests.mozilla.org");
   669     do_check_eq(a1.version, "1.2");
   670     do_check_true(isExtensionInAddonsList(profileDir, a1.id));
   671     do_check_false(isExtensionInAddonsList(userDir, a1.id));
   672     do_check_true(hasFlag(a1.permissions, AddonManager.PERM_CAN_UNINSTALL));
   673     do_check_true(hasFlag(a1.permissions, AddonManager.PERM_CAN_UPGRADE));
   674     do_check_eq(a1.scope, AddonManager.SCOPE_PROFILE);
   676     do_check_neq(a2, null);
   677     do_check_eq(a2.id, "addon2@tests.mozilla.org");
   678     do_check_eq(a2.version, "2.4");
   679     do_check_true(isExtensionInAddonsList(profileDir, a2.id));
   680     do_check_false(isExtensionInAddonsList(userDir, a2.id));
   681     do_check_false(isExtensionInAddonsList(globalDir, a2.id));
   682     do_check_true(hasFlag(a2.permissions, AddonManager.PERM_CAN_UNINSTALL));
   683     do_check_true(hasFlag(a2.permissions, AddonManager.PERM_CAN_UPGRADE));
   684     do_check_eq(a2.scope, AddonManager.SCOPE_PROFILE);
   686     do_check_eq(a3, null);
   687     do_check_false(isExtensionInAddonsList(profileDir, "addon3@tests.mozilla.org"));
   689     do_check_eq(a4, null);
   690     do_check_false(isExtensionInAddonsList(profileDir, "addon4@tests.mozilla.org"));
   692     do_check_eq(a5, null);
   693     do_check_false(isExtensionInAddonsList(profileDir, "addon5@tests.mozilla.org"));
   695     do_execute_soon(run_test_10);
   696   });
   697 }
   699 // Checks that a removal from one location and an addition in another location
   700 // for the same item is handled
   701 function run_test_10() {
   702   var dest = profileDir.clone();
   703   dest.append(do_get_expected_addon_name("addon1@tests.mozilla.org"));
   704   dest.remove(true);
   705   addon1.version = "1.3";
   706   writeInstallRDFForExtension(addon1, userDir);
   708   gCachePurged = false;
   709   restartManager();
   710   check_startup_changes(AddonManager.STARTUP_CHANGE_INSTALLED, []);
   711   check_startup_changes(AddonManager.STARTUP_CHANGE_CHANGED, ["addon1@tests.mozilla.org"]);
   712   check_startup_changes(AddonManager.STARTUP_CHANGE_UNINSTALLED, []);
   713   check_startup_changes(AddonManager.STARTUP_CHANGE_DISABLED, []);
   714   check_startup_changes(AddonManager.STARTUP_CHANGE_ENABLED, []);
   715   do_check_true(gCachePurged);
   717   AddonManager.getAddonsByIDs(["addon1@tests.mozilla.org",
   718                                "addon2@tests.mozilla.org",
   719                                "addon3@tests.mozilla.org",
   720                                "addon4@tests.mozilla.org",
   721                                "addon5@tests.mozilla.org"],
   722                                function([a1, a2, a3, a4, a5]) {
   724     do_check_neq(a1, null);
   725     do_check_eq(a1.id, "addon1@tests.mozilla.org");
   726     do_check_eq(a1.version, "1.3");
   727     do_check_false(isExtensionInAddonsList(profileDir, a1.id));
   728     do_check_true(isExtensionInAddonsList(userDir, a1.id));
   729     do_check_false(hasFlag(a1.permissions, AddonManager.PERM_CAN_UNINSTALL));
   730     do_check_false(hasFlag(a1.permissions, AddonManager.PERM_CAN_UPGRADE));
   731     do_check_eq(a1.scope, AddonManager.SCOPE_USER);
   733     do_check_neq(a2, null);
   734     do_check_eq(a2.id, "addon2@tests.mozilla.org");
   735     do_check_eq(a2.version, "2.4");
   736     do_check_true(isExtensionInAddonsList(profileDir, a2.id));
   737     do_check_false(isExtensionInAddonsList(userDir, a2.id));
   738     do_check_false(isExtensionInAddonsList(globalDir, a2.id));
   739     do_check_true(hasFlag(a2.permissions, AddonManager.PERM_CAN_UNINSTALL));
   740     do_check_true(hasFlag(a2.permissions, AddonManager.PERM_CAN_UPGRADE));
   741     do_check_eq(a2.scope, AddonManager.SCOPE_PROFILE);
   743     do_check_eq(a3, null);
   744     do_check_false(isExtensionInAddonsList(profileDir, "addon3@tests.mozilla.org"));
   746     do_check_eq(a4, null);
   747     do_check_false(isExtensionInAddonsList(profileDir, "addon4@tests.mozilla.org"));
   749     do_check_eq(a5, null);
   750     do_check_false(isExtensionInAddonsList(profileDir, "addon5@tests.mozilla.org"));
   752     do_execute_soon(run_test_11);
   753   });
   754 }
   756 // This should remove any remaining items
   757 function run_test_11() {
   758   var dest = userDir.clone();
   759   dest.append(do_get_expected_addon_name("addon1@tests.mozilla.org"));
   760   dest.remove(true);
   761   dest = profileDir.clone();
   762   dest.append(do_get_expected_addon_name("addon2@tests.mozilla.org"));
   763   dest.remove(true);
   765   gCachePurged = false;
   766   restartManager();
   767   check_startup_changes(AddonManager.STARTUP_CHANGE_INSTALLED, []);
   768   check_startup_changes(AddonManager.STARTUP_CHANGE_CHANGED, []);
   769   check_startup_changes(AddonManager.STARTUP_CHANGE_UNINSTALLED, ["addon1@tests.mozilla.org",
   770                                         "addon2@tests.mozilla.org"]);
   771   check_startup_changes(AddonManager.STARTUP_CHANGE_DISABLED, []);
   772   check_startup_changes(AddonManager.STARTUP_CHANGE_ENABLED, []);
   773   do_check_true(gCachePurged);
   775   AddonManager.getAddonsByIDs(["addon1@tests.mozilla.org",
   776                                "addon2@tests.mozilla.org",
   777                                "addon3@tests.mozilla.org",
   778                                "addon4@tests.mozilla.org",
   779                                "addon5@tests.mozilla.org"],
   780                                function([a1, a2, a3, a4, a5]) {
   782     do_check_eq(a1, null);
   783     do_check_eq(a2, null);
   784     do_check_eq(a3, null);
   785     do_check_eq(a4, null);
   786     do_check_eq(a5, null);
   787     do_check_false(isExtensionInAddonsList(profileDir, "addon1@tests.mozilla.org"));
   788     do_check_false(isExtensionInAddonsList(profileDir, "addon2@tests.mozilla.org"));
   789     do_check_false(isExtensionInAddonsList(profileDir, "addon3@tests.mozilla.org"));
   790     do_check_false(isExtensionInAddonsList(profileDir, "addon4@tests.mozilla.org"));
   791     do_check_false(isExtensionInAddonsList(profileDir, "addon5@tests.mozilla.org"));
   792     do_check_false(isExtensionInAddonsList(userDir, "addon1@tests.mozilla.org"));
   793     do_check_false(isExtensionInAddonsList(userDir, "addon2@tests.mozilla.org"));
   794     do_check_false(isExtensionInAddonsList(userDir, "addon3@tests.mozilla.org"));
   795     do_check_false(isExtensionInAddonsList(userDir, "addon4@tests.mozilla.org"));
   796     do_check_false(isExtensionInAddonsList(userDir, "addon5@tests.mozilla.org"));
   797     do_check_false(isExtensionInAddonsList(globalDir, "addon1@tests.mozilla.org"));
   798     do_check_false(isExtensionInAddonsList(globalDir, "addon2@tests.mozilla.org"));
   799     do_check_false(isExtensionInAddonsList(globalDir, "addon3@tests.mozilla.org"));
   800     do_check_false(isExtensionInAddonsList(globalDir, "addon4@tests.mozilla.org"));
   801     do_check_false(isExtensionInAddonsList(globalDir, "addon5@tests.mozilla.org"));
   802     do_check_not_in_crash_annotation(addon1.id, addon1.version);
   803     do_check_not_in_crash_annotation(addon2.id, addon2.version);
   805     do_execute_soon(run_test_12);
   806   });
   807 }
   809 // Test that auto-disabling for specific scopes works
   810 function run_test_12() {
   811   Services.prefs.setIntPref("extensions.autoDisableScopes", AddonManager.SCOPE_USER);
   813   writeInstallRDFForExtension(addon1, profileDir);
   814   writeInstallRDFForExtension(addon2, userDir);
   815   writeInstallRDFForExtension(addon3, globalDir);
   817   restartManager();
   819   AddonManager.getAddonsByIDs(["addon1@tests.mozilla.org",
   820                                "addon2@tests.mozilla.org",
   821                                "addon3@tests.mozilla.org",
   822                                "addon4@tests.mozilla.org",
   823                                "addon5@tests.mozilla.org"],
   824                                callback_soon(function([a1, a2, a3, a4, a5]) {
   825     do_check_neq(a1, null);
   826     do_check_false(a1.userDisabled);
   827     do_check_true(a1.isActive);
   829     do_check_neq(a2, null);
   830     do_check_true(a2.userDisabled);
   831     do_check_false(a2.isActive);
   833     do_check_neq(a3, null);
   834     do_check_false(a3.userDisabled);
   835     do_check_true(a3.isActive);
   837     var dest = profileDir.clone();
   838     dest.append(do_get_expected_addon_name("addon1@tests.mozilla.org"));
   839     dest.remove(true);
   840     dest = userDir.clone();
   841     dest.append(do_get_expected_addon_name("addon2@tests.mozilla.org"));
   842     dest.remove(true);
   843     dest = globalDir.clone();
   844     dest.append(do_get_expected_addon_name("addon3@tests.mozilla.org"));
   845     dest.remove(true);
   847     restartManager();
   849     Services.prefs.setIntPref("extensions.autoDisableScopes", AddonManager.SCOPE_SYSTEM);
   851     writeInstallRDFForExtension(addon1, profileDir);
   852     writeInstallRDFForExtension(addon2, userDir);
   853     writeInstallRDFForExtension(addon3, globalDir);
   855     restartManager();
   857     AddonManager.getAddonsByIDs(["addon1@tests.mozilla.org",
   858                                  "addon2@tests.mozilla.org",
   859                                  "addon3@tests.mozilla.org",
   860                                  "addon4@tests.mozilla.org",
   861                                  "addon5@tests.mozilla.org"],
   862                                  function([a1, a2, a3, a4, a5]) {
   863       do_check_neq(a1, null);
   864       do_check_false(a1.userDisabled);
   865       do_check_true(a1.isActive);
   867       do_check_neq(a2, null);
   868       do_check_false(a2.userDisabled);
   869       do_check_true(a2.isActive);
   871       do_check_neq(a3, null);
   872       do_check_true(a3.userDisabled);
   873       do_check_false(a3.isActive);
   875       var dest = profileDir.clone();
   876       dest.append(do_get_expected_addon_name("addon1@tests.mozilla.org"));
   877       dest.remove(true);
   878       dest = userDir.clone();
   879       dest.append(do_get_expected_addon_name("addon2@tests.mozilla.org"));
   880       dest.remove(true);
   881       dest = globalDir.clone();
   882       dest.append(do_get_expected_addon_name("addon3@tests.mozilla.org"));
   883       dest.remove(true);
   885       restartManager();
   887       Services.prefs.setIntPref("extensions.autoDisableScopes", AddonManager.SCOPE_USER + AddonManager.SCOPE_SYSTEM);
   889       writeInstallRDFForExtension(addon1, profileDir);
   890       writeInstallRDFForExtension(addon2, userDir);
   891       writeInstallRDFForExtension(addon3, globalDir);
   893       restartManager();
   895       AddonManager.getAddonsByIDs(["addon1@tests.mozilla.org",
   896                                    "addon2@tests.mozilla.org",
   897                                    "addon3@tests.mozilla.org",
   898                                    "addon4@tests.mozilla.org",
   899                                    "addon5@tests.mozilla.org"],
   900                                    function([a1, a2, a3, a4, a5]) {
   901         do_check_neq(a1, null);
   902         do_check_false(a1.userDisabled);
   903         do_check_true(a1.isActive);
   905         do_check_neq(a2, null);
   906         do_check_true(a2.userDisabled);
   907         do_check_false(a2.isActive);
   909         do_check_neq(a3, null);
   910         do_check_true(a3.userDisabled);
   911         do_check_false(a3.isActive);
   913         do_execute_soon(end_test);
   914       });
   915     });
   916   }));
   917 }

mercurial