toolkit/mozapps/extensions/test/browser/browser_list.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 // Tests the list view
     7 let tempScope = {};
     8 Components.utils.import("resource://gre/modules/LightweightThemeManager.jsm", tempScope);
     9 let LightweightThemeManager = tempScope.LightweightThemeManager;
    12 var gProvider;
    13 var gManagerWindow;
    14 var gCategoryUtilities;
    16 var gApp = document.getElementById("bundle_brand").getString("brandShortName");
    17 var gVersion = Services.appinfo.version;
    18 var gBlocklistURL = Services.urlFormatter.formatURLPref("extensions.blocklist.detailsURL");
    19 var gPluginURL = Services.urlFormatter.formatURLPref("plugins.update.url");
    20 var gDate = new Date(2010, 7, 16);
    22 var gLWTheme = {
    23                 id: "4",
    24                 version: "1",
    25                 name: "Bling",
    26                 description: "SO MUCH BLING!",
    27                 author: "Pixel Pusher",
    28                 homepageURL: "http://mochi.test:8888/data/index.html",
    29                 headerURL: "http://mochi.test:8888/data/header.png",
    30                 footerURL: "http://mochi.test:8888/data/footer.png",
    31                 previewURL: "http://mochi.test:8888/data/preview.png",
    32                 iconURL: "http://mochi.test:8888/data/icon.png"
    33               };
    36 function test() {
    37   waitForExplicitFinish();
    39   gProvider = new MockProvider();
    41   gProvider.createAddons([{
    42     id: "addon1@tests.mozilla.org",
    43     name: "Test add-on",
    44     version: "1.0",
    45     description: "A test add-on",
    46     longDescription: " A longer description",
    47     updateDate: gDate
    48   }, {
    49     id: "addon2@tests.mozilla.org",
    50     name: "Test add-on 2",
    51     version: "2.0",
    52     longDescription: " A longer description",
    53     _userDisabled: true,
    54     isActive: false,
    55   }, {
    56     id: "addon3@tests.mozilla.org",
    57     name: "Test add-on 3",
    58     longDescription: " A longer description",
    59     isActive: false,
    60     isCompatible: false,
    61     appDisabled: true,
    62     permissions: AddonManager.PERM_CAN_ENABLE |
    63                  AddonManager.PERM_CAN_DISABLE |
    64                  AddonManager.PERM_CAN_UPGRADE
    65   }, {
    66     id: "addon4@tests.mozilla.org",
    67     blocklistURL: "http://example.com/addon4@tests.mozilla.org",
    68     name: "Test add-on 4",
    69     _userDisabled: true,
    70     isActive: false,
    71     blocklistState: Ci.nsIBlocklistService.STATE_SOFTBLOCKED
    72   }, {
    73     id: "addon5@tests.mozilla.org",
    74     blocklistURL: "http://example.com/addon5@tests.mozilla.org",
    75     name: "Test add-on 5",
    76     isActive: false,
    77     blocklistState: Ci.nsIBlocklistService.STATE_BLOCKED,
    78     appDisabled: true
    79   }, {
    80     id: "addon6@tests.mozilla.org",
    81     blocklistURL: "http://example.com/addon6@tests.mozilla.org",
    82     name: "Test add-on 6",
    83     operationsRequiringRestart: AddonManager.OP_NEEDS_RESTART_NONE
    84   }, {
    85     id: "addon7@tests.mozilla.org",
    86     blocklistURL: "http://example.com/addon7@tests.mozilla.org",
    87     name: "Test add-on 7",
    88     blocklistState: Ci.nsIBlocklistService.STATE_OUTDATED,
    89   }, {
    90     id: "addon8@tests.mozilla.org",
    91     blocklistURL: "http://example.com/addon8@tests.mozilla.org",
    92     name: "Test add-on 8",
    93     blocklistState: Ci.nsIBlocklistService.STATE_VULNERABLE_UPDATE_AVAILABLE,
    94   }, {
    95     id: "addon9@tests.mozilla.org",
    96     blocklistURL: "http://example.com/addon9@tests.mozilla.org",
    97     name: "Test add-on 9",
    98     blocklistState: Ci.nsIBlocklistService.STATE_VULNERABLE_NO_UPDATE,
    99   }]);
   101   open_manager(null, function(aWindow) {
   102     gManagerWindow = aWindow;
   103     gCategoryUtilities = new CategoryUtilities(gManagerWindow);
   104     run_next_test();
   105   });
   106 }
   108 function end_test() {
   109   close_manager(gManagerWindow, function() {
   110     finish();
   111   });
   112 }
   114 function get_test_items() {
   115   var tests = "@tests.mozilla.org";
   117   var items = {};
   118   var item = gManagerWindow.document.getElementById("addon-list").firstChild;
   120   while (item) {
   121     if (item.mAddon.id.substring(item.mAddon.id.length - tests.length) == tests)
   122       items[item.mAddon.name] = item;
   123     item = item.nextSibling;
   124   }
   126   return items;
   127 }
   129 function get_node(parent, anonid) {
   130   return parent.ownerDocument.getAnonymousElementByAttribute(parent, "anonid", anonid);
   131 }
   133 function get_class_node(parent, cls) {
   134   return parent.ownerDocument.getAnonymousElementByAttribute(parent, "class", cls);
   135 }
   137 // Check that the list appears to have displayed correctly and trigger some
   138 // changes
   139 add_test(function() {
   140   gCategoryUtilities.openType("extension", function() {
   141     let items = get_test_items();
   142     is(Object.keys(items).length, 9, "Should be nine add-ons installed");
   144     info("Addon 1");
   145     let addon = items["Test add-on"];
   146     addon.parentNode.ensureElementIsVisible(addon);
   147     is(get_node(addon, "name").value, "Test add-on", "Name should be correct");
   148     is_element_visible(get_node(addon, "version"), "Version should be visible");
   149     is(get_node(addon, "version").value, "1.0", "Version should be correct");
   150     is_element_visible(get_node(addon, "description"), "Description should be visible");
   151     is(get_node(addon, "description").value, "A test add-on", "Description should be correct");
   152     is_element_hidden(get_class_node(addon, "disabled-postfix"), "Disabled postfix should be hidden");
   153     is_element_hidden(get_class_node(addon, "update-postfix"), "Update postfix should be hidden");
   154     is(get_node(addon, "date-updated").value, formatDate(gDate), "Update date should be correct");
   156     is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden");
   157     is_element_hidden(get_node(addon, "enable-btn"), "Enable button should be hidden");
   158     is_element_visible(get_node(addon, "disable-btn"), "Disable button should be visible");
   159     is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible");
   161     is_element_hidden(get_node(addon, "warning"), "Warning message should be hidden");
   162     is_element_hidden(get_node(addon, "warning-link"), "Warning link should be hidden");
   163     is_element_hidden(get_node(addon, "error"), "Error message should be hidden");
   164     is_element_hidden(get_node(addon, "error-link"), "Error link should be hidden");
   165     is_element_hidden(get_node(addon, "pending"), "Pending message should be hidden");
   167     info("Disabling");
   168     EventUtils.synthesizeMouseAtCenter(get_node(addon, "disable-btn"), {}, gManagerWindow);
   169     is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden");
   170     is_element_visible(get_node(addon, "enable-btn"), "Enable button should be visible");
   171     is_element_hidden(get_node(addon, "disable-btn"), "Disable button should be hidden");
   172     is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible");
   174     is_element_hidden(get_node(addon, "warning"), "Warning message should be visible");
   175     is_element_hidden(get_node(addon, "warning-link"), "Warning link should be hidden");
   176     is_element_hidden(get_node(addon, "error"), "Error message should be hidden");
   177     is_element_hidden(get_node(addon, "error-link"), "Error link should be hidden");
   178     is_element_visible(get_node(addon, "pending"), "Pending message should be visible");
   179     is(get_node(addon, "pending").textContent, "Test add-on will be disabled after you restart " + gApp + ".", "Pending message should be correct");
   181     info("Addon 2");
   182     addon = items["Test add-on 2"];
   183     addon.parentNode.ensureElementIsVisible(addon);
   184     is(get_node(addon, "name").value, "Test add-on 2", "Name should be correct");
   185     is_element_visible(get_node(addon, "version"), "Version should be visible");
   186     is(get_node(addon, "version").value, "2.0", "Version should be correct");
   187     is_element_hidden(get_node(addon, "description"), "Description should be hidden");
   188     is_element_visible(get_class_node(addon, "disabled-postfix"), "Disabled postfix should be visible");
   189     is_element_hidden(get_class_node(addon, "update-postfix"), "Update postfix should be hidden");
   190     is(get_node(addon, "date-updated").value, "Unknown", "Date should be correct");
   192     is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden");
   193     is_element_visible(get_node(addon, "enable-btn"), "Enable button should be visible");
   194     is_element_hidden(get_node(addon, "disable-btn"), "Disable button should be hidden");
   195     is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible");
   197     is_element_hidden(get_node(addon, "warning"), "Warning message should be hidden");
   198     is_element_hidden(get_node(addon, "warning-link"), "Warning link should be hidden");
   199     is_element_hidden(get_node(addon, "error"), "Error message should be hidden");
   200     is_element_hidden(get_node(addon, "error-link"), "Error link should be hidden");
   201     is_element_hidden(get_node(addon, "pending"), "Pending message should be hidden");
   203     info("Enabling");
   204     EventUtils.synthesizeMouseAtCenter(get_node(addon, "enable-btn"), {}, gManagerWindow);
   205     is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden");
   206     is_element_hidden(get_node(addon, "enable-btn"), "Enable button should be hidden");
   207     is_element_visible(get_node(addon, "disable-btn"), "Disable button should be visible");
   208     is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible");
   210     is_element_hidden(get_node(addon, "warning"), "Warning message should be hidden");
   211     is_element_hidden(get_node(addon, "warning-link"), "Warning link should be hidden");
   212     is_element_hidden(get_node(addon, "error"), "Error message should be hidden");
   213     is_element_hidden(get_node(addon, "error-link"), "Error link should be hidden");
   214     is_element_visible(get_node(addon, "pending"), "Pending message should be visible");
   215     is(get_node(addon, "pending").textContent, "Test add-on 2 will be enabled after you restart " + gApp + ".", "Pending message should be correct");
   217     info("Addon 3");
   218     addon = items["Test add-on 3"];
   219     addon.parentNode.ensureElementIsVisible(addon);
   220     is(get_node(addon, "name").value, "Test add-on 3", "Name should be correct");
   221     is_element_hidden(get_node(addon, "version"), "Version should be hidden");
   223     is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden");
   224     is_element_hidden(get_node(addon, "enable-btn"), "Enable button should be hidden");
   225     is_element_hidden(get_node(addon, "disable-btn"), "Disable button should be hidden");
   226     is_element_hidden(get_node(addon, "remove-btn"), "Remove button should be hidden");
   228     is_element_visible(get_node(addon, "warning"), "Warning message should be visible");
   229     is(get_node(addon, "warning").textContent, "Test add-on 3 is incompatible with " + gApp + " " + gVersion + ".", "Warning message should be correct");
   230     is_element_hidden(get_node(addon, "warning-link"), "Warning link should be hidden");
   231     is_element_hidden(get_node(addon, "error"), "Error message should be hidden");
   232     is_element_hidden(get_node(addon, "error-link"), "Error link should be hidden");
   233     is_element_hidden(get_node(addon, "pending"), "Pending message should be hidden");
   235     info("Addon 4");
   236     addon = items["Test add-on 4"];
   237     addon.parentNode.ensureElementIsVisible(addon);
   238     is(get_node(addon, "name").value, "Test add-on 4", "Name should be correct");
   240     is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden");
   241     is_element_visible(get_node(addon, "enable-btn"), "Enable button should be visible");
   242     is_element_hidden(get_node(addon, "disable-btn"), "Disable button should be hidden");
   243     is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible");
   245     is_element_visible(get_node(addon, "warning"), "Warning message should be visible");
   246     is(get_node(addon, "warning").textContent, "Test add-on 4 is known to cause security or stability issues.", "Warning message should be correct");
   247     is_element_visible(get_node(addon, "warning-link"), "Warning link should be visible");
   248     is(get_node(addon, "warning-link").value, "More Information", "Warning link text should be correct");
   249     is(get_node(addon, "warning-link").href, "http://example.com/addon4@tests.mozilla.org", "Warning link should be correct");
   250     is_element_hidden(get_node(addon, "error"), "Error message should be hidden");
   251     is_element_hidden(get_node(addon, "error-link"), "Error link should be hidden");
   252     is_element_hidden(get_node(addon, "pending"), "Pending message should be hidden");
   254     info("Enabling");
   255     EventUtils.synthesizeMouseAtCenter(get_node(addon, "enable-btn"), {}, gManagerWindow);
   256     is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden");
   257     is_element_hidden(get_node(addon, "enable-btn"), "Enable button should be hidden");
   258     is_element_visible(get_node(addon, "disable-btn"), "Disable button should be visible");
   259     is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible");
   261     is_element_hidden(get_node(addon, "warning"), "Warning message should be hidden");
   262     is_element_hidden(get_node(addon, "warning-link"), "Warning link should be hidden");
   263     is_element_hidden(get_node(addon, "error"), "Error message should be hidden");
   264     is_element_hidden(get_node(addon, "error-link"), "Error link should be hidden");
   265     is_element_visible(get_node(addon, "pending"), "Pending message should be visible");
   266     is(get_node(addon, "pending").textContent, "Test add-on 4 will be enabled after you restart " + gApp + ".", "Pending message should be correct");
   268     info("Addon 5");
   269     addon = items["Test add-on 5"];
   270     addon.parentNode.ensureElementIsVisible(addon);
   271     is(get_node(addon, "name").value, "Test add-on 5", "Name should be correct");
   273     is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden");
   274     is_element_hidden(get_node(addon, "enable-btn"), "Enable button should be hidden");
   275     is_element_hidden(get_node(addon, "disable-btn"), "Disable button should be hidden");
   276     is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible");
   278     is_element_hidden(get_node(addon, "warning"), "Warning message should be hidden");
   279     is_element_hidden(get_node(addon, "warning-link"), "Warning link should be hidden");
   280     is_element_visible(get_node(addon, "error"), "Error message should be visible");
   281     is(get_node(addon, "error").textContent, "Test add-on 5 has been disabled due to security or stability issues.", "Error message should be correct");
   282     is_element_visible(get_node(addon, "error-link"), "Error link should be visible");
   283     is(get_node(addon, "error-link").value, "More Information", "Error link text should be correct");
   284     is(get_node(addon, "error-link").href, "http://example.com/addon5@tests.mozilla.org", "Error link should be correct");
   285     is_element_hidden(get_node(addon, "pending"), "Pending message should be hidden");
   287     info("Addon 6");
   288     addon = items["Test add-on 6"];
   289     addon.parentNode.ensureElementIsVisible(addon);
   290     is(get_node(addon, "name").value, "Test add-on 6", "Name should be correct");
   291     is_element_hidden(get_class_node(addon, "disabled-postfix"), "Disabled postfix should be hidden");
   293     is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden");
   294     is_element_hidden(get_node(addon, "enable-btn"), "Enable button should be hidden");
   295     is_element_visible(get_node(addon, "disable-btn"), "Disable button should be visible");
   296     is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible");
   298     is_element_hidden(get_node(addon, "warning"), "Warning message should be hidden");
   299     is_element_hidden(get_node(addon, "warning-link"), "Warning link should be hidden");
   300     is_element_hidden(get_node(addon, "error"), "Error message should be visible");
   301     is_element_hidden(get_node(addon, "error-link"), "Error link should be hidden");
   302     is_element_hidden(get_node(addon, "pending"), "Pending message should be hidden");
   304     info("Disabling");
   305     EventUtils.synthesizeMouseAtCenter(get_node(addon, "disable-btn"), {}, gManagerWindow);
   306     is_element_visible(get_class_node(addon, "disabled-postfix"), "Disabled postfix should be visible");
   308     is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden");
   309     is_element_visible(get_node(addon, "enable-btn"), "Enable button should be visible");
   310     is_element_hidden(get_node(addon, "disable-btn"), "Disable button should be hidden");
   311     is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible");
   313     is_element_hidden(get_node(addon, "warning"), "Warning message should be hidden");
   314     is_element_hidden(get_node(addon, "warning-link"), "Warning link should be hidden");
   315     is_element_hidden(get_node(addon, "error"), "Error message should be visible");
   316     is_element_hidden(get_node(addon, "error-link"), "Error link should be hidden");
   317     is_element_hidden(get_node(addon, "pending"), "Pending message should be hidden");
   319     info("Addon 7");
   320     addon = items["Test add-on 7"];
   321     addon.parentNode.ensureElementIsVisible(addon);
   322     is(get_node(addon, "name").value, "Test add-on 7", "Name should be correct");
   324     is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden");
   325     is_element_hidden(get_node(addon, "enable-btn"), "Enable button should be hidden");
   326     is_element_visible(get_node(addon, "disable-btn"), "Disable button should be visible");
   327     is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible");
   329     is_element_visible(get_node(addon, "warning"), "Warning message should be hidden");
   330     is(get_node(addon, "warning").textContent, "An important update is available for Test add-on 7.", "Warning message should be correct");
   331     is_element_visible(get_node(addon, "warning-link"), "Warning link should be visible");
   332     is(get_node(addon, "warning-link").value, "Update Now", "Warning link text should be correct");
   333     is(get_node(addon, "warning-link").href, gPluginURL, "Warning link should be correct");
   334     is_element_hidden(get_node(addon, "error"), "Error message should be hidden");
   335     is_element_hidden(get_node(addon, "error-link"), "Error link should be hidden");
   336     is_element_hidden(get_node(addon, "pending"), "Pending message should be hidden");
   338     info("Disabling");
   339     EventUtils.synthesizeMouseAtCenter(get_node(addon, "disable-btn"), {}, gManagerWindow);
   340     is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden");
   341     is_element_visible(get_node(addon, "enable-btn"), "Enable button should be visible");
   342     is_element_hidden(get_node(addon, "disable-btn"), "Disable button should be hidden");
   343     is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible");
   345     is_element_hidden(get_node(addon, "warning"), "Warning message should be visible");
   346     is_element_hidden(get_node(addon, "warning-link"), "Warning link should be hidden");
   347     is_element_hidden(get_node(addon, "error"), "Error message should be hidden");
   348     is_element_hidden(get_node(addon, "error-link"), "Error link should be hidden");
   349     is_element_visible(get_node(addon, "pending"), "Pending message should be visible");
   350     is(get_node(addon, "pending").textContent, "Test add-on 7 will be disabled after you restart " + gApp + ".", "Pending message should be correct");
   352     info("Addon 8");
   353     addon = items["Test add-on 8"];
   354     addon.parentNode.ensureElementIsVisible(addon);
   355     is(get_node(addon, "name").value, "Test add-on 8", "Name should be correct");
   357     is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden");
   358     is_element_hidden(get_node(addon, "enable-btn"), "Enable button should be hidden");
   359     is_element_visible(get_node(addon, "disable-btn"), "Disable button should be visible");
   360     is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible");
   362     is_element_hidden(get_node(addon, "warning"), "Warning message should be hidden");
   363     is_element_hidden(get_node(addon, "warning-link"), "Warning link should be hidden");
   364     is_element_visible(get_node(addon, "error"), "Error message should be visible");
   365     is(get_node(addon, "error").textContent, "Test add-on 8 is known to be vulnerable and should be updated.", "Error message should be correct");
   366     is_element_visible(get_node(addon, "error-link"), "Error link should be visible");
   367     is(get_node(addon, "error-link").value, "Update Now", "Error link text should be correct");
   368     is(get_node(addon, "error-link").href, "http://example.com/addon8@tests.mozilla.org", "Error link should be correct");
   369     is_element_hidden(get_node(addon, "pending"), "Pending message should be hidden");
   371     info("Addon 9");
   372     addon = items["Test add-on 9"];
   373     addon.parentNode.ensureElementIsVisible(addon);
   374     is(get_node(addon, "name").value, "Test add-on 9", "Name should be correct");
   376     is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden");
   377     is_element_hidden(get_node(addon, "enable-btn"), "Enable button should be hidden");
   378     is_element_visible(get_node(addon, "disable-btn"), "Disable button should be visible");
   379     is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible");
   381     is_element_hidden(get_node(addon, "warning"), "Warning message should be hidden");
   382     is_element_hidden(get_node(addon, "warning-link"), "Warning link should be hidden");
   383     is_element_visible(get_node(addon, "error"), "Error message should be visible");
   384     is(get_node(addon, "error").textContent, "Test add-on 9 is known to be vulnerable. Use with caution.", "Error message should be correct");
   385     is_element_visible(get_node(addon, "error-link"), "Error link should be visible");
   386     is(get_node(addon, "error-link").value, "More Information", "Error link text should be correct");
   387     is(get_node(addon, "error-link").href, "http://example.com/addon9@tests.mozilla.org", "Error link should be correct");
   388     is_element_hidden(get_node(addon, "pending"), "Pending message should be hidden");
   390     run_next_test();
   391   });
   392 });
   394 // Check the add-ons are now in the right state
   395 add_test(function() {
   396   AddonManager.getAddonsByIDs(["addon1@tests.mozilla.org",
   397                                "addon2@tests.mozilla.org",
   398                                "addon4@tests.mozilla.org",
   399                                "addon6@tests.mozilla.org"],
   400                                function([a1, a2, a4, a6]) {
   401     is(a1.pendingOperations, AddonManager.PENDING_DISABLE, "Add-on 1 should be pending disable");
   402     is(a2.pendingOperations, AddonManager.PENDING_ENABLE, "Add-on 2 should be pending enable");
   403     is(a4.pendingOperations, AddonManager.PENDING_ENABLE, "Add-on 4 should be pending enable");
   405     run_next_test();
   406   });
   407 });
   409 // Reload the list to make sure the changes are still pending and that undoing
   410 // works
   411 add_test(function() {
   412   gCategoryUtilities.openType("plugin", function() {
   413     gCategoryUtilities.openType("extension", function() {
   414       let items = get_test_items();
   415       is(Object.keys(items).length, 9, "Should be nine add-ons installed");
   417       info("Addon 1");
   418       let addon = items["Test add-on"];
   419       addon.parentNode.ensureElementIsVisible(addon);
   420       is(get_node(addon, "name").value, "Test add-on", "Name should be correct");
   421       is_element_visible(get_node(addon, "version"), "Version should be visible");
   422       is(get_node(addon, "version").value, "1.0", "Version should be correct");
   423       is_element_visible(get_node(addon, "description"), "Description should be visible");
   424       is(get_node(addon, "description").value, "A test add-on", "Description should be correct");
   425       is_element_hidden(get_class_node(addon, "disabled-postfix"), "Disabled postfix should be hidden");
   426       is_element_hidden(get_class_node(addon, "update-postfix"), "Update postfix should be hidden");
   427       is(get_node(addon, "date-updated").value, formatDate(gDate), "Update date should be correct");
   429       is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden");
   430       is_element_visible(get_node(addon, "enable-btn"), "Enable button should be visible");
   431       is_element_hidden(get_node(addon, "disable-btn"), "Disable button should be hidden");
   432       is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible");
   434       is_element_hidden(get_node(addon, "warning"), "Warning message should be hidden");
   435       is_element_hidden(get_node(addon, "warning-link"), "Warning link should be hidden");
   436       is_element_hidden(get_node(addon, "error"), "Error message should be hidden");
   437       is_element_hidden(get_node(addon, "error-link"), "Error link should be hidden");
   438       is_element_visible(get_node(addon, "pending"), "Pending message should be visible");
   439       is(get_node(addon, "pending").textContent, "Test add-on will be disabled after you restart " + gApp + ".", "Pending message should be correct");
   441       info("Undoing");
   442       EventUtils.synthesizeMouseAtCenter(get_node(addon, "undo-btn"), {}, gManagerWindow);
   443       is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden");
   444       is_element_hidden(get_node(addon, "enable-btn"), "Enable button should be hidden");
   445       is_element_visible(get_node(addon, "disable-btn"), "Disable button should be visible");
   446       is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible");
   448       is_element_hidden(get_node(addon, "warning"), "Warning message should be hidden");
   449       is_element_hidden(get_node(addon, "warning-link"), "Warning link should be hidden");
   450       is_element_hidden(get_node(addon, "error"), "Error message should be hidden");
   451       is_element_hidden(get_node(addon, "error-link"), "Error link should be hidden");
   452       is_element_hidden(get_node(addon, "pending"), "Pending message should be hidden");
   454       info("Addon 2");
   455       addon = items["Test add-on 2"];
   456       addon.parentNode.ensureElementIsVisible(addon);
   457       is(get_node(addon, "name").value, "Test add-on 2", "Name should be correct");
   458       is_element_visible(get_node(addon, "version"), "Version should be visible");
   459       is(get_node(addon, "version").value, "2.0", "Version should be correct");
   460       is_element_hidden(get_node(addon, "description"), "Description should be hidden");
   461       is_element_visible(get_class_node(addon, "disabled-postfix"), "Disabled postfix should be visible");
   462       is_element_hidden(get_class_node(addon, "update-postfix"), "Update postfix should be hidden");
   463       is(get_node(addon, "date-updated").value, "Unknown", "Date should be correct");
   465       is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden");
   466       is_element_hidden(get_node(addon, "enable-btn"), "Enable button should be hidden");
   467       is_element_visible(get_node(addon, "disable-btn"), "Disable button should be visible");
   468       is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible");
   470       is_element_hidden(get_node(addon, "warning"), "Warning message should be hidden");
   471       is_element_hidden(get_node(addon, "warning-link"), "Warning link should be hidden");
   472       is_element_hidden(get_node(addon, "error"), "Error message should be hidden");
   473       is_element_hidden(get_node(addon, "error-link"), "Error link should be hidden");
   474       is_element_visible(get_node(addon, "pending"), "Pending message should be visible");
   475       is(get_node(addon, "pending").textContent, "Test add-on 2 will be enabled after you restart " + gApp + ".", "Pending message should be correct");
   477       info("Undoing");
   478       EventUtils.synthesizeMouseAtCenter(get_node(addon, "undo-btn"), {}, gManagerWindow);
   479       is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden");
   480       is_element_visible(get_node(addon, "enable-btn"), "Enable button should be visible");
   481       is_element_hidden(get_node(addon, "disable-btn"), "Disable button should be hidden");
   482       is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible");
   484       is_element_hidden(get_node(addon, "warning"), "Warning message should be hidden");
   485       is_element_hidden(get_node(addon, "warning-link"), "Warning link should be hidden");
   486       is_element_hidden(get_node(addon, "error"), "Error message should be hidden");
   487       is_element_hidden(get_node(addon, "error-link"), "Error link should be hidden");
   488       is_element_hidden(get_node(addon, "pending"), "Pending message should be hidden");
   490       info("Addon 4");
   491       addon = items["Test add-on 4"];
   492       addon.parentNode.ensureElementIsVisible(addon);
   493       is(get_node(addon, "name").value, "Test add-on 4", "Name should be correct");
   495       is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden");
   496       is_element_hidden(get_node(addon, "enable-btn"), "Enable button should be hidden");
   497       is_element_visible(get_node(addon, "disable-btn"), "Disable button should be visible");
   498       is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible");
   500       is_element_hidden(get_node(addon, "warning"), "Warning message should be hidden");
   501       is_element_hidden(get_node(addon, "warning-link"), "Warning link should be hidden");
   502       is_element_hidden(get_node(addon, "error"), "Error message should be hidden");
   503       is_element_hidden(get_node(addon, "error-link"), "Error link should be hidden");
   504       is_element_visible(get_node(addon, "pending"), "Pending message should be visible");
   505       is(get_node(addon, "pending").textContent, "Test add-on 4 will be enabled after you restart " + gApp + ".", "Pending message should be correct");
   507       info("Undoing");
   508       EventUtils.synthesizeMouseAtCenter(get_node(addon, "undo-btn"), {}, gManagerWindow);
   509       is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden");
   510       is_element_visible(get_node(addon, "enable-btn"), "Enable button should be visible");
   511       is_element_hidden(get_node(addon, "disable-btn"), "Disable button should be hidden");
   512       is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible");
   514       is_element_visible(get_node(addon, "warning"), "Warning message should be visible");
   515       is(get_node(addon, "warning").textContent, "Test add-on 4 is known to cause security or stability issues.", "Warning message should be correct");
   516       is_element_visible(get_node(addon, "warning-link"), "Warning link should be visible");
   517       is(get_node(addon, "warning-link").value, "More Information", "Warning link text should be correct");
   518       is(get_node(addon, "warning-link").href, "http://example.com/addon4@tests.mozilla.org", "Warning link should be correct");
   519       is_element_hidden(get_node(addon, "error"), "Error message should be hidden");
   520       is_element_hidden(get_node(addon, "error-link"), "Error link should be hidden");
   521       is_element_hidden(get_node(addon, "pending"), "Pending message should be hidden");
   523       info("Addon 6");
   524       addon = items["Test add-on 6"];
   525       addon.parentNode.ensureElementIsVisible(addon);
   526       is(get_node(addon, "name").value, "Test add-on 6", "Name should be correct");
   527       is_element_visible(get_class_node(addon, "disabled-postfix"), "Disabled postfix should be visible");
   529       is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden");
   530       is_element_visible(get_node(addon, "enable-btn"), "Enable button should be visible");
   531       is_element_hidden(get_node(addon, "disable-btn"), "Disable button should be hidden");
   532       is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible");
   534       is_element_hidden(get_node(addon, "warning"), "Warning message should be hidden");
   535       is_element_hidden(get_node(addon, "warning-link"), "Warning link should be hidden");
   536       is_element_hidden(get_node(addon, "error"), "Error message should be visible");
   537       is_element_hidden(get_node(addon, "error-link"), "Error link should be hidden");
   538       is_element_hidden(get_node(addon, "pending"), "Pending message should be hidden");
   540       info("Enabling");
   541       EventUtils.synthesizeMouseAtCenter(get_node(addon, "enable-btn"), {}, gManagerWindow);
   542       is_element_hidden(get_class_node(addon, "disabled-postfix"), "Disabled postfix should be hidden");
   544       is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden");
   545       is_element_hidden(get_node(addon, "enable-btn"), "Enable button should be hidden");
   546       is_element_visible(get_node(addon, "disable-btn"), "Disable button should be visible");
   547       is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible");
   549       is_element_hidden(get_node(addon, "warning"), "Warning message should be hidden");
   550       is_element_hidden(get_node(addon, "warning-link"), "Warning link should be hidden");
   551       is_element_hidden(get_node(addon, "error"), "Error message should be visible");
   552       is_element_hidden(get_node(addon, "error-link"), "Error link should be hidden");
   553       is_element_hidden(get_node(addon, "pending"), "Pending message should be hidden");
   555       info("Addon 7");
   556       addon = items["Test add-on 7"];
   557       addon.parentNode.ensureElementIsVisible(addon);
   558       is(get_node(addon, "name").value, "Test add-on 7", "Name should be correct");
   560       is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden");
   561       is_element_visible(get_node(addon, "enable-btn"), "Enable button should be visible");
   562       is_element_hidden(get_node(addon, "disable-btn"), "Disable button should be hidden");
   563       is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible");
   565       is_element_hidden(get_node(addon, "warning"), "Warning message should be visible");
   566       is_element_hidden(get_node(addon, "warning-link"), "Warning link should be hidden");
   567       is_element_hidden(get_node(addon, "error"), "Error message should be hidden");
   568       is_element_hidden(get_node(addon, "error-link"), "Error link should be hidden");
   569       is_element_visible(get_node(addon, "pending"), "Pending message should be visible");
   570       is(get_node(addon, "pending").textContent, "Test add-on 7 will be disabled after you restart " + gApp + ".", "Pending message should be correct");
   572       info("Undoing");
   573       EventUtils.synthesizeMouseAtCenter(get_node(addon, "undo-btn"), {}, gManagerWindow);
   574       is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden");
   575       is_element_hidden(get_node(addon, "enable-btn"), "Enable button should be hidden");
   576       is_element_visible(get_node(addon, "disable-btn"), "Disable button should be visible");
   577       is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible");
   579       is_element_visible(get_node(addon, "warning"), "Warning message should be hidden");
   580       is(get_node(addon, "warning").textContent, "An important update is available for Test add-on 7.", "Warning message should be correct");
   581       is_element_visible(get_node(addon, "warning-link"), "Warning link should be visible");
   582       is(get_node(addon, "warning-link").value, "Update Now", "Warning link text should be correct");
   583       is(get_node(addon, "warning-link").href, gPluginURL, "Warning link should be correct");
   584       is_element_hidden(get_node(addon, "error"), "Error message should be hidden");
   585       is_element_hidden(get_node(addon, "error-link"), "Error link should be hidden");
   586       is_element_hidden(get_node(addon, "pending"), "Pending message should be hidden");
   588       run_next_test();
   589     });
   590   });
   591 });
   593 // Check the add-ons are now in the right state
   594 add_test(function() {
   595   AddonManager.getAddonsByIDs(["addon1@tests.mozilla.org",
   596                                "addon2@tests.mozilla.org",
   597                                "addon4@tests.mozilla.org"],
   598                                function([a1, a2, a4]) {
   599     is(a1.pendingOperations, 0, "Add-on 1 should not have any pending operations");
   600     is(a2.pendingOperations, 0, "Add-on 1 should not have any pending operations");
   601     is(a4.pendingOperations, 0, "Add-on 1 should not have any pending operations");
   603     run_next_test();
   604   });
   605 });
   607 // Check that upgrades with onExternalInstall take effect immediately
   608 add_test(function() {
   609   gProvider.createAddons([{
   610     id: "addon1@tests.mozilla.org",
   611     name: "Test add-on replacement",
   612     version: "2.0",
   613     description: "A test add-on with a new description",
   614     updateDate: gDate,
   615     operationsRequiringRestart: AddonManager.OP_NEEDS_RESTART_NONE
   616   }]);
   618   let items = get_test_items();
   619   is(Object.keys(items).length, 9, "Should be nine add-ons installed");
   621   let addon = items["Test add-on replacement"];
   622   addon.parentNode.ensureElementIsVisible(addon);
   623   is(get_node(addon, "name").value, "Test add-on replacement", "Name should be correct");
   624   is_element_visible(get_node(addon, "version"), "Version should be visible");
   625   is(get_node(addon, "version").value, "2.0", "Version should be correct");
   626   is_element_visible(get_node(addon, "description"), "Description should be visible");
   627   is(get_node(addon, "description").value, "A test add-on with a new description", "Description should be correct");
   628   is_element_hidden(get_class_node(addon, "disabled-postfix"), "Disabled postfix should be hidden");
   629   is_element_hidden(get_class_node(addon, "update-postfix"), "Update postfix should be hidden");
   630   is(get_node(addon, "date-updated").value, formatDate(gDate), "Update date should be correct");
   632   is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden");
   633   is_element_hidden(get_node(addon, "enable-btn"), "Enable button should be hidden");
   634   is_element_visible(get_node(addon, "disable-btn"), "Disable button should be visible");
   635   is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible");
   637   is_element_hidden(get_node(addon, "warning"), "Warning message should be hidden");
   638   is_element_hidden(get_node(addon, "warning-link"), "Warning link should be hidden");
   639   is_element_hidden(get_node(addon, "error"), "Error message should be hidden");
   640   is_element_hidden(get_node(addon, "error-link"), "Error link should be hidden");
   641   is_element_hidden(get_node(addon, "pending"), "Pending message should be hidden");
   643   run_next_test();
   644 });
   646 // Check that focus changes correctly move around the selected list item
   647 add_test(function() {
   648   function is_node_in_list(aNode) {
   649     var list = gManagerWindow.document.getElementById("addon-list");
   651     while (aNode && aNode != list)
   652       aNode = aNode.parentNode;
   654     if (aNode)
   655       return true;
   656     return false;
   657   }
   659   // Ignore the OSX full keyboard access setting
   660   Services.prefs.setBoolPref("accessibility.tabfocus_applies_to_xul", false);
   662   let items = get_test_items();
   664   var fm = Cc["@mozilla.org/focus-manager;1"].
   665            getService(Ci.nsIFocusManager);
   667   let addon = items["Test add-on 6"];
   668   EventUtils.synthesizeMouseAtCenter(addon, { }, gManagerWindow);
   669   is(fm.focusedElement, addon.parentNode, "Focus should have moved to the list");
   671   EventUtils.synthesizeKey("VK_TAB", { }, gManagerWindow);
   672   is(fm.focusedElement, get_node(addon, "details-btn"), "Focus should have moved to the more button");
   674   EventUtils.synthesizeKey("VK_TAB", { }, gManagerWindow);
   675   is(fm.focusedElement, get_node(addon, "disable-btn"), "Focus should have moved to the disable button");
   677   EventUtils.synthesizeKey("VK_TAB", { }, gManagerWindow);
   678   is(fm.focusedElement, get_node(addon, "remove-btn"), "Focus should have moved to the remove button");
   680   EventUtils.synthesizeKey("VK_TAB", { }, gManagerWindow);
   681   ok(!is_node_in_list(fm.focusedElement), "Focus should be outside the list");
   683   EventUtils.synthesizeKey("VK_TAB", { shiftKey: true }, gManagerWindow);
   684   is(fm.focusedElement, get_node(addon, "remove-btn"), "Focus should have moved to the remove button");
   686   EventUtils.synthesizeKey("VK_TAB", { shiftKey: true }, gManagerWindow);
   687   EventUtils.synthesizeKey("VK_TAB", { shiftKey: true }, gManagerWindow);
   688   is(fm.focusedElement, get_node(addon, "details-btn"), "Focus should have moved to the more button");
   690   EventUtils.synthesizeKey("VK_TAB", { shiftKey: true }, gManagerWindow);
   691   is(fm.focusedElement, addon.parentNode, "Focus should have moved to the list");
   693   EventUtils.synthesizeKey("VK_TAB", { shiftKey: true }, gManagerWindow);
   694   ok(!is_node_in_list(fm.focusedElement), "Focus should be outside the list");
   696   try {
   697     Services.prefs.clearUserPref("accessibility.tabfocus_applies_to_xul");
   698   }
   699   catch (e) { }
   701   run_next_test();
   702 });
   705 add_test(function() {
   706   info("Enabling lightweight theme");
   707   LightweightThemeManager.currentTheme = gLWTheme;
   709   gManagerWindow.loadView("addons://list/theme");
   710   wait_for_view_load(gManagerWindow, function() {
   711     var addon = get_addon_element(gManagerWindow, "4@personas.mozilla.org");
   713     is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden");
   714     is_element_hidden(get_node(addon, "enable-btn"), "Enable button should be hidden");
   715     is_element_visible(get_node(addon, "disable-btn"), "Disable button should be visible");
   716     is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible");
   718     info("Disabling lightweight theme");
   719     LightweightThemeManager.currentTheme = null;
   721     is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden");
   722     is_element_visible(get_node(addon, "enable-btn"), "Enable button should be hidden");
   723     is_element_hidden(get_node(addon, "disable-btn"), "Disable button should be visible");
   724     is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible");
   726     AddonManager.getAddonByID("4@personas.mozilla.org", function(aAddon) {
   727       aAddon.uninstall();
   728       run_next_test();
   729     });
   730   });
   731 });
   733 // Check that onPropertyChanges for appDisabled updates the UI
   734 add_test(function() {
   735   info("Checking that onPropertyChanges for appDisabled updates the UI");
   737   AddonManager.getAddonByID("addon2@tests.mozilla.org", function(aAddon) {
   738     aAddon.userDisabled = true;
   739     aAddon.isCompatible = true;
   740     aAddon.appDisabled = false;
   742     gManagerWindow.loadView("addons://list/extension");
   743     wait_for_view_load(gManagerWindow, function() {
   744       var el = get_addon_element(gManagerWindow, "addon2@tests.mozilla.org");
   746       is(el.getAttribute("active"), "false", "Addon should not be marked as active");
   747       is_element_hidden(get_node(el, "warning"), "Warning message should not be visible");
   749       info("Making addon incompatible and appDisabled");
   750       aAddon.isCompatible = false;
   751       aAddon.appDisabled = true;
   753       is(el.getAttribute("active"), "false", "Addon should not be marked as active");
   754       is_element_visible(get_node(el, "warning"), "Warning message should be visible");
   755       is(get_node(el, "warning").textContent, "Test add-on 2 is incompatible with " + gApp + " " + gVersion + ".", "Warning message should be correct");
   757       run_next_test();
   758     });
   759   });
   760 });

mercurial