diff options
author | Matt A. Tobin <email@mattatobin.com> | 2018-02-10 02:51:36 -0500 |
---|---|---|
committer | Matt A. Tobin <email@mattatobin.com> | 2018-02-10 02:51:36 -0500 |
commit | 37d5300335d81cecbecc99812747a657588c63eb (patch) | |
tree | 765efa3b6a56bb715d9813a8697473e120436278 /toolkit/mozapps/webextensions/test/browser/browser_list.js | |
parent | b2bdac20c02b12f2057b9ef70b0a946113a00e00 (diff) | |
parent | 4fb11cd5966461bccc3ed1599b808237be6b0de9 (diff) | |
download | UXP-37d5300335d81cecbecc99812747a657588c63eb.tar UXP-37d5300335d81cecbecc99812747a657588c63eb.tar.gz UXP-37d5300335d81cecbecc99812747a657588c63eb.tar.lz UXP-37d5300335d81cecbecc99812747a657588c63eb.tar.xz UXP-37d5300335d81cecbecc99812747a657588c63eb.zip |
Merge branch 'ext-work'
Diffstat (limited to 'toolkit/mozapps/webextensions/test/browser/browser_list.js')
-rw-r--r-- | toolkit/mozapps/webextensions/test/browser/browser_list.js | 956 |
1 files changed, 956 insertions, 0 deletions
diff --git a/toolkit/mozapps/webextensions/test/browser/browser_list.js b/toolkit/mozapps/webextensions/test/browser/browser_list.js new file mode 100644 index 000000000..49427329f --- /dev/null +++ b/toolkit/mozapps/webextensions/test/browser/browser_list.js @@ -0,0 +1,956 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ + */ + +// Tests the list view + +var tempScope = {}; +Components.utils.import("resource://gre/modules/LightweightThemeManager.jsm", tempScope); +var LightweightThemeManager = tempScope.LightweightThemeManager; +const { REQUIRE_SIGNING } = Components.utils.import("resource://gre/modules/addons/AddonConstants.jsm", {}); + +var gProvider; +var gManagerWindow; +var gCategoryUtilities; + +var gApp = document.getElementById("bundle_brand").getString("brandShortName"); +var gVersion = Services.appinfo.version; +var gBlocklistURL = Services.urlFormatter.formatURLPref("extensions.blocklist.detailsURL"); +var gDate = new Date(2010, 7, 16); +var infoURL = Services.urlFormatter.formatURLPref("app.support.baseURL") + "unsigned-addons"; + +const EXPECTED_ADDONS = 13; + +var gLWTheme = { + id: "4", + version: "1", + name: "Bling", + description: "SO MUCH BLING!", + author: "Pixel Pusher", + homepageURL: "http://mochi.test:8888/data/index.html", + headerURL: "http://mochi.test:8888/data/header.png", + footerURL: "http://mochi.test:8888/data/footer.png", + previewURL: "http://mochi.test:8888/data/preview.png", + iconURL: "http://mochi.test:8888/data/icon.png" + }; + +add_task(function*() { + gProvider = new MockProvider(); + + gProvider.createAddons([{ + id: "addon1@tests.mozilla.org", + name: "Test add-on", + version: "1.0", + description: "A test add-on", + longDescription: " A longer description", + updateDate: gDate + }, { + id: "addon2@tests.mozilla.org", + name: "Test add-on 2", + version: "2.0", + longDescription: " A longer description", + _userDisabled: true, + isActive: false, + }, { + id: "addon3@tests.mozilla.org", + name: "Test add-on 3", + longDescription: " A longer description", + isActive: false, + isCompatible: false, + appDisabled: true, + permissions: AddonManager.PERM_CAN_ENABLE | + AddonManager.PERM_CAN_DISABLE | + AddonManager.PERM_CAN_UPGRADE + }, { + id: "addon4@tests.mozilla.org", + blocklistURL: "http://example.com/addon4@tests.mozilla.org", + name: "Test add-on 4", + _userDisabled: true, + isActive: false, + blocklistState: Ci.nsIBlocklistService.STATE_SOFTBLOCKED + }, { + id: "addon5@tests.mozilla.org", + blocklistURL: "http://example.com/addon5@tests.mozilla.org", + name: "Test add-on 5", + isActive: false, + blocklistState: Ci.nsIBlocklistService.STATE_BLOCKED, + appDisabled: true + }, { + id: "addon6@tests.mozilla.org", + blocklistURL: "http://example.com/addon6@tests.mozilla.org", + name: "Test add-on 6", + operationsRequiringRestart: AddonManager.OP_NEEDS_RESTART_NONE + }, { + id: "addon7@tests.mozilla.org", + blocklistURL: "http://example.com/addon7@tests.mozilla.org", + name: "Test add-on 7", + blocklistState: Ci.nsIBlocklistService.STATE_OUTDATED, + }, { + id: "addon8@tests.mozilla.org", + blocklistURL: "http://example.com/addon8@tests.mozilla.org", + name: "Test add-on 8", + blocklistState: Ci.nsIBlocklistService.STATE_VULNERABLE_UPDATE_AVAILABLE, + }, { + id: "addon9@tests.mozilla.org", + blocklistURL: "http://example.com/addon9@tests.mozilla.org", + name: "Test add-on 9", + blocklistState: Ci.nsIBlocklistService.STATE_VULNERABLE_NO_UPDATE, + }, { + id: "addon10@tests.mozilla.org", + name: "Test add-on 10", + signedState: AddonManager.SIGNEDSTATE_MISSING, + }, { + id: "addon11@tests.mozilla.org", + name: "Test add-on 11", + signedState: AddonManager.SIGNEDSTATE_MISSING, + isActive: false, + isCompatible: false, + appDisabled: true, + }, { + id: "addon12@tests.mozilla.org", + name: "Test add-on 12", + signedState: AddonManager.SIGNEDSTATE_PRELIMINARY, + foreignInstall: true, + }, { + id: "addon13@tests.mozilla.org", + name: "Test add-on 13", + signedState: AddonManager.SIGNEDSTATE_SIGNED, + foreignInstall: true, + }, { + id: "addon15@tests.mozilla.org", + name: "Test add-on 15", + hidden: true, + }]); + + gManagerWindow = yield open_manager(null); + gCategoryUtilities = new CategoryUtilities(gManagerWindow); +}); + +function get_test_items() { + var tests = "@tests.mozilla.org"; + + var items = {}; + var item = gManagerWindow.document.getElementById("addon-list").firstChild; + + while (item) { + if (item.mAddon.id.substring(item.mAddon.id.length - tests.length) == tests && + !is_hidden(item)) + items[item.mAddon.name] = item; + item = item.nextSibling; + } + + return items; +} + +function get_node(parent, anonid) { + return parent.ownerDocument.getAnonymousElementByAttribute(parent, "anonid", anonid); +} + +function get_class_node(parent, cls) { + return parent.ownerDocument.getAnonymousElementByAttribute(parent, "class", cls); +} + +// Check that the list appears to have displayed correctly and trigger some +// changes +add_task(function*() { + yield gCategoryUtilities.openType("extension"); + let items = get_test_items(); + is(Object.keys(items).length, EXPECTED_ADDONS, "Should be the right number of add-ons installed"); + + info("Addon 1"); + let addon = items["Test add-on"]; + addon.parentNode.ensureElementIsVisible(addon); + let { name, version } = yield get_tooltip_info(addon); + is(get_node(addon, "name").value, "Test add-on", "Name should be correct"); + is(name, "Test add-on", "Tooltip name should be correct"); + is(version, "1.0", "Tooltip version should be correct"); + is(get_node(addon, "description").value, "A test add-on", "Description should be correct"); + is_element_hidden(get_class_node(addon, "disabled-postfix"), "Disabled postfix should be hidden"); + is_element_hidden(get_class_node(addon, "update-postfix"), "Update postfix should be hidden"); + is(get_node(addon, "date-updated").value, formatDate(gDate), "Update date should be correct"); + + is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden"); + is_element_hidden(get_node(addon, "enable-btn"), "Enable button should be hidden"); + is_element_visible(get_node(addon, "disable-btn"), "Disable button should be visible"); + is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible"); + + is_element_hidden(get_node(addon, "warning"), "Warning message should be hidden"); + is_element_hidden(get_node(addon, "warning-link"), "Warning link should be hidden"); + is_element_hidden(get_node(addon, "error"), "Error message should be hidden"); + is_element_hidden(get_node(addon, "error-link"), "Error link should be hidden"); + is_element_hidden(get_node(addon, "pending"), "Pending message should be hidden"); + + info("Disabling"); + EventUtils.synthesizeMouseAtCenter(get_node(addon, "disable-btn"), {}, gManagerWindow); + is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden"); + is_element_visible(get_node(addon, "enable-btn"), "Enable button should be visible"); + is_element_hidden(get_node(addon, "disable-btn"), "Disable button should be hidden"); + is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible"); + + is_element_hidden(get_node(addon, "warning"), "Warning message should be visible"); + is_element_hidden(get_node(addon, "warning-link"), "Warning link should be hidden"); + is_element_hidden(get_node(addon, "error"), "Error message should be hidden"); + is_element_hidden(get_node(addon, "error-link"), "Error link should be hidden"); + is_element_visible(get_node(addon, "pending"), "Pending message should be visible"); + is(get_node(addon, "pending").textContent, "Test add-on will be disabled after you restart " + gApp + ".", "Pending message should be correct"); + + info("Addon 2"); + addon = items["Test add-on 2"]; + addon.parentNode.ensureElementIsVisible(addon); + ({ name, version } = yield get_tooltip_info(addon)); + is(get_node(addon, "name").value, "Test add-on 2", "Name should be correct"); + is(name, "Test add-on 2", "Tooltip name should be correct"); + is(version, "2.0", "Tooltip version should be correct"); + is_element_hidden(get_node(addon, "description"), "Description should be hidden"); + is_element_visible(get_class_node(addon, "disabled-postfix"), "Disabled postfix should be visible"); + is_element_hidden(get_class_node(addon, "update-postfix"), "Update postfix should be hidden"); + is(get_node(addon, "date-updated").value, "Unknown", "Date should be correct"); + + is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden"); + is_element_visible(get_node(addon, "enable-btn"), "Enable button should be visible"); + is_element_hidden(get_node(addon, "disable-btn"), "Disable button should be hidden"); + is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible"); + + is_element_hidden(get_node(addon, "warning"), "Warning message should be hidden"); + is_element_hidden(get_node(addon, "warning-link"), "Warning link should be hidden"); + is_element_hidden(get_node(addon, "error"), "Error message should be hidden"); + is_element_hidden(get_node(addon, "error-link"), "Error link should be hidden"); + is_element_hidden(get_node(addon, "pending"), "Pending message should be hidden"); + + info("Enabling"); + EventUtils.synthesizeMouseAtCenter(get_node(addon, "enable-btn"), {}, gManagerWindow); + is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden"); + is_element_hidden(get_node(addon, "enable-btn"), "Enable button should be hidden"); + is_element_visible(get_node(addon, "disable-btn"), "Disable button should be visible"); + is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible"); + + is_element_hidden(get_node(addon, "warning"), "Warning message should be hidden"); + is_element_hidden(get_node(addon, "warning-link"), "Warning link should be hidden"); + is_element_hidden(get_node(addon, "error"), "Error message should be hidden"); + is_element_hidden(get_node(addon, "error-link"), "Error link should be hidden"); + is_element_visible(get_node(addon, "pending"), "Pending message should be visible"); + is(get_node(addon, "pending").textContent, "Test add-on 2 will be enabled after you restart " + gApp + ".", "Pending message should be correct"); + + info("Addon 3"); + addon = items["Test add-on 3"]; + addon.parentNode.ensureElementIsVisible(addon); + ({ name, version } = yield get_tooltip_info(addon)); + is(get_node(addon, "name").value, "Test add-on 3", "Name should be correct"); + is(name, "Test add-on 3", "Tooltip name should be correct"); + is(version, undefined, "Tooltip version should be hidden"); + + is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden"); + is_element_hidden(get_node(addon, "enable-btn"), "Enable button should be hidden"); + is_element_hidden(get_node(addon, "disable-btn"), "Disable button should be hidden"); + is_element_hidden(get_node(addon, "remove-btn"), "Remove button should be hidden"); + + is_element_visible(get_node(addon, "warning"), "Warning message should be visible"); + is(get_node(addon, "warning").textContent, "Test add-on 3 is incompatible with " + gApp + " " + gVersion + ".", "Warning message should be correct"); + is_element_hidden(get_node(addon, "warning-link"), "Warning link should be hidden"); + is_element_hidden(get_node(addon, "error"), "Error message should be hidden"); + is_element_hidden(get_node(addon, "error-link"), "Error link should be hidden"); + is_element_hidden(get_node(addon, "pending"), "Pending message should be hidden"); + + info("Addon 4"); + addon = items["Test add-on 4"]; + addon.parentNode.ensureElementIsVisible(addon); + ({ name, version } = yield get_tooltip_info(addon)); + is(get_node(addon, "name").value, "Test add-on 4", "Name should be correct"); + is(name, "Test add-on 4", "Tooltip name should be correct"); + + is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden"); + is_element_visible(get_node(addon, "enable-btn"), "Enable button should be visible"); + is_element_hidden(get_node(addon, "disable-btn"), "Disable button should be hidden"); + is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible"); + + is_element_visible(get_node(addon, "warning"), "Warning message should be visible"); + is(get_node(addon, "warning").textContent, "Test add-on 4 is known to cause security or stability issues.", "Warning message should be correct"); + is_element_visible(get_node(addon, "warning-link"), "Warning link should be visible"); + is(get_node(addon, "warning-link").value, "More Information", "Warning link text should be correct"); + is(get_node(addon, "warning-link").href, "http://example.com/addon4@tests.mozilla.org", "Warning link should be correct"); + is_element_hidden(get_node(addon, "error"), "Error message should be hidden"); + is_element_hidden(get_node(addon, "error-link"), "Error link should be hidden"); + is_element_hidden(get_node(addon, "pending"), "Pending message should be hidden"); + + info("Enabling"); + EventUtils.synthesizeMouseAtCenter(get_node(addon, "enable-btn"), {}, gManagerWindow); + is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden"); + is_element_hidden(get_node(addon, "enable-btn"), "Enable button should be hidden"); + is_element_visible(get_node(addon, "disable-btn"), "Disable button should be visible"); + is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible"); + + is_element_hidden(get_node(addon, "warning"), "Warning message should be hidden"); + is_element_hidden(get_node(addon, "warning-link"), "Warning link should be hidden"); + is_element_hidden(get_node(addon, "error"), "Error message should be hidden"); + is_element_hidden(get_node(addon, "error-link"), "Error link should be hidden"); + is_element_visible(get_node(addon, "pending"), "Pending message should be visible"); + is(get_node(addon, "pending").textContent, "Test add-on 4 will be enabled after you restart " + gApp + ".", "Pending message should be correct"); + + info("Addon 5"); + addon = items["Test add-on 5"]; + addon.parentNode.ensureElementIsVisible(addon); + ({ name, version } = yield get_tooltip_info(addon)); + is(get_node(addon, "name").value, "Test add-on 5", "Name should be correct"); + is(name, "Test add-on 5", "Tooltip name should be correct"); + + is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden"); + is_element_hidden(get_node(addon, "enable-btn"), "Enable button should be hidden"); + is_element_hidden(get_node(addon, "disable-btn"), "Disable button should be hidden"); + is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible"); + + is_element_hidden(get_node(addon, "warning"), "Warning message should be hidden"); + is_element_hidden(get_node(addon, "warning-link"), "Warning link should be hidden"); + is_element_visible(get_node(addon, "error"), "Error message should be visible"); + is(get_node(addon, "error").textContent, "Test add-on 5 has been disabled due to security or stability issues.", "Error message should be correct"); + is_element_visible(get_node(addon, "error-link"), "Error link should be visible"); + is(get_node(addon, "error-link").value, "More Information", "Error link text should be correct"); + is(get_node(addon, "error-link").href, "http://example.com/addon5@tests.mozilla.org", "Error link should be correct"); + is_element_hidden(get_node(addon, "pending"), "Pending message should be hidden"); + + info("Addon 6"); + addon = items["Test add-on 6"]; + addon.parentNode.ensureElementIsVisible(addon); + ({ name, version } = yield get_tooltip_info(addon)); + is(get_node(addon, "name").value, "Test add-on 6", "Name should be correct"); + is(name, "Test add-on 6", "Tooltip name should be correct"); + is_element_hidden(get_class_node(addon, "disabled-postfix"), "Disabled postfix should be hidden"); + + is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden"); + is_element_hidden(get_node(addon, "enable-btn"), "Enable button should be hidden"); + is_element_visible(get_node(addon, "disable-btn"), "Disable button should be visible"); + is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible"); + + is_element_hidden(get_node(addon, "warning"), "Warning message should be hidden"); + is_element_hidden(get_node(addon, "warning-link"), "Warning link should be hidden"); + is_element_hidden(get_node(addon, "error"), "Error message should be visible"); + is_element_hidden(get_node(addon, "error-link"), "Error link should be hidden"); + is_element_hidden(get_node(addon, "pending"), "Pending message should be hidden"); + + info("Disabling"); + EventUtils.synthesizeMouseAtCenter(get_node(addon, "disable-btn"), {}, gManagerWindow); + is_element_visible(get_class_node(addon, "disabled-postfix"), "Disabled postfix should be visible"); + + is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden"); + is_element_visible(get_node(addon, "enable-btn"), "Enable button should be visible"); + is_element_hidden(get_node(addon, "disable-btn"), "Disable button should be hidden"); + is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible"); + + is_element_hidden(get_node(addon, "warning"), "Warning message should be hidden"); + is_element_hidden(get_node(addon, "warning-link"), "Warning link should be hidden"); + is_element_hidden(get_node(addon, "error"), "Error message should be visible"); + is_element_hidden(get_node(addon, "error-link"), "Error link should be hidden"); + is_element_hidden(get_node(addon, "pending"), "Pending message should be hidden"); + + info("Addon 7"); + addon = items["Test add-on 7"]; + addon.parentNode.ensureElementIsVisible(addon); + ({ name, version } = yield get_tooltip_info(addon)); + is(get_node(addon, "name").value, "Test add-on 7", "Name should be correct"); + is(name, "Test add-on 7", "Tooltip name should be correct"); + + is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden"); + is_element_hidden(get_node(addon, "enable-btn"), "Enable button should be hidden"); + is_element_visible(get_node(addon, "disable-btn"), "Disable button should be visible"); + is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible"); + + is_element_visible(get_node(addon, "warning"), "Warning message should be hidden"); + is(get_node(addon, "warning").textContent, "An important update is available for Test add-on 7.", "Warning message should be correct"); + is_element_visible(get_node(addon, "warning-link"), "Warning link should be visible"); + is(get_node(addon, "warning-link").value, "Update Now", "Warning link text should be correct"); + is(get_node(addon, "warning-link").href, "http://example.com/addon7@tests.mozilla.org", "Warning link should be correct"); + is_element_hidden(get_node(addon, "error"), "Error message should be hidden"); + is_element_hidden(get_node(addon, "error-link"), "Error link should be hidden"); + is_element_hidden(get_node(addon, "pending"), "Pending message should be hidden"); + + info("Disabling"); + EventUtils.synthesizeMouseAtCenter(get_node(addon, "disable-btn"), {}, gManagerWindow); + is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden"); + is_element_visible(get_node(addon, "enable-btn"), "Enable button should be visible"); + is_element_hidden(get_node(addon, "disable-btn"), "Disable button should be hidden"); + is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible"); + + is_element_hidden(get_node(addon, "warning"), "Warning message should be visible"); + is_element_hidden(get_node(addon, "warning-link"), "Warning link should be hidden"); + is_element_hidden(get_node(addon, "error"), "Error message should be hidden"); + is_element_hidden(get_node(addon, "error-link"), "Error link should be hidden"); + is_element_visible(get_node(addon, "pending"), "Pending message should be visible"); + is(get_node(addon, "pending").textContent, "Test add-on 7 will be disabled after you restart " + gApp + ".", "Pending message should be correct"); + + info("Addon 8"); + addon = items["Test add-on 8"]; + addon.parentNode.ensureElementIsVisible(addon); + ({ name, version } = yield get_tooltip_info(addon)); + is(get_node(addon, "name").value, "Test add-on 8", "Name should be correct"); + is(name, "Test add-on 8", "Tooltip name should be correct"); + + is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden"); + is_element_hidden(get_node(addon, "enable-btn"), "Enable button should be hidden"); + is_element_visible(get_node(addon, "disable-btn"), "Disable button should be visible"); + is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible"); + + is_element_hidden(get_node(addon, "warning"), "Warning message should be hidden"); + is_element_hidden(get_node(addon, "warning-link"), "Warning link should be hidden"); + is_element_visible(get_node(addon, "error"), "Error message should be visible"); + is(get_node(addon, "error").textContent, "Test add-on 8 is known to be vulnerable and should be updated.", "Error message should be correct"); + is_element_visible(get_node(addon, "error-link"), "Error link should be visible"); + is(get_node(addon, "error-link").value, "Update Now", "Error link text should be correct"); + is(get_node(addon, "error-link").href, "http://example.com/addon8@tests.mozilla.org", "Error link should be correct"); + is_element_hidden(get_node(addon, "pending"), "Pending message should be hidden"); + + info("Addon 9"); + addon = items["Test add-on 9"]; + addon.parentNode.ensureElementIsVisible(addon); + ({ name, version } = yield get_tooltip_info(addon)); + is(get_node(addon, "name").value, "Test add-on 9", "Name should be correct"); + is(name, "Test add-on 9", "Tooltip name should be correct"); + + is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden"); + is_element_hidden(get_node(addon, "enable-btn"), "Enable button should be hidden"); + is_element_visible(get_node(addon, "disable-btn"), "Disable button should be visible"); + is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible"); + + is_element_hidden(get_node(addon, "warning"), "Warning message should be hidden"); + is_element_hidden(get_node(addon, "warning-link"), "Warning link should be hidden"); + is_element_visible(get_node(addon, "error"), "Error message should be visible"); + is(get_node(addon, "error").textContent, "Test add-on 9 is known to be vulnerable. Use with caution.", "Error message should be correct"); + is_element_visible(get_node(addon, "error-link"), "Error link should be visible"); + is(get_node(addon, "error-link").value, "More Information", "Error link text should be correct"); + is(get_node(addon, "error-link").href, "http://example.com/addon9@tests.mozilla.org", "Error link should be correct"); + is_element_hidden(get_node(addon, "pending"), "Pending message should be hidden"); + + // These tests are only appropriate when signing can be turned off + if (!REQUIRE_SIGNING) { + info("Addon 10"); + addon = items["Test add-on 10"]; + addon.parentNode.ensureElementIsVisible(addon); + ({ name, version } = yield get_tooltip_info(addon)); + is(get_node(addon, "name").value, "Test add-on 10", "Name should be correct"); + is(name, "Test add-on 10", "Tooltip name should be correct"); + + is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden"); + is_element_hidden(get_node(addon, "enable-btn"), "Enable button should be hidden"); + is_element_visible(get_node(addon, "disable-btn"), "Disable button should be visible"); + is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible"); + + is_element_visible(get_node(addon, "warning"), "Warning message should be visible"); + is(get_node(addon, "warning").textContent, "Test add-on 10 could not be verified for use in " + gApp + ". Proceed with caution.", "Warning message should be correct"); + is_element_visible(get_node(addon, "warning-link"), "Warning link should be visible"); + is(get_node(addon, "warning-link").value, "More Information", "Warning link text should be correct"); + is(get_node(addon, "warning-link").href, infoURL, "Warning link should be correct"); + is_element_hidden(get_node(addon, "error"), "Error message should be hidden"); + is_element_hidden(get_node(addon, "error-link"), "Error link should be hidden"); + is_element_hidden(get_node(addon, "pending"), "Pending message should be hidden"); + + info("Addon 11"); + addon = items["Test add-on 11"]; + addon.parentNode.ensureElementIsVisible(addon); + ({ name, version } = yield get_tooltip_info(addon)); + is(get_node(addon, "name").value, "Test add-on 11", "Name should be correct"); + is(name, "Test add-on 11", "Tooltip name should be correct"); + + is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden"); + is_element_hidden(get_node(addon, "enable-btn"), "Enable button should be hidden"); + is_element_hidden(get_node(addon, "disable-btn"), "Disable button should be hidden"); + is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible"); + + is_element_visible(get_node(addon, "warning"), "Warning message should be visible"); + is(get_node(addon, "warning").textContent, "Test add-on 11 is incompatible with " + gApp + " " + gVersion + ".", "Warning message should be correct"); + is_element_hidden(get_node(addon, "warning-link"), "Warning link should be hidden"); + is_element_hidden(get_node(addon, "error"), "Error message should be hidden"); + is_element_hidden(get_node(addon, "error-link"), "Error link should be hidden"); + is_element_hidden(get_node(addon, "pending"), "Pending message should be hidden"); + + info("Filter for disabled unsigned extensions shouldn't appear because signing checks are off"); + let filterButton = gManagerWindow.document.getElementById("show-disabled-unsigned-extensions"); + let showAllButton = gManagerWindow.document.getElementById("show-all-extensions"); + let signingInfoUI = gManagerWindow.document.getElementById("disabled-unsigned-addons-info"); + is_element_hidden(filterButton, "Button for showing disabled unsigned extensions should be hidden"); + is_element_hidden(showAllButton, "Button for showing all extensions should be hidden"); + is_element_hidden(signingInfoUI, "Signing info UI should be hidden"); + } +}); + +// Check the add-ons are now in the right state +add_task(function*() { + let [a1, a2, a4, a6] = yield promiseAddonsByIDs(["addon1@tests.mozilla.org", + "addon2@tests.mozilla.org", + "addon4@tests.mozilla.org", + "addon6@tests.mozilla.org"]); + + is(a1.pendingOperations, AddonManager.PENDING_DISABLE, "Add-on 1 should be pending disable"); + is(a2.pendingOperations, AddonManager.PENDING_ENABLE, "Add-on 2 should be pending enable"); + is(a4.pendingOperations, AddonManager.PENDING_ENABLE, "Add-on 4 should be pending enable"); +}); + +// Reload the list to make sure the changes are still pending and that undoing +// works +add_task(function*() { + yield gCategoryUtilities.openType("plugin"); + yield gCategoryUtilities.openType("extension"); + + let items = get_test_items(); + is(Object.keys(items).length, EXPECTED_ADDONS, "Should be the right number of add-ons installed"); + + info("Addon 1"); + let addon = items["Test add-on"]; + addon.parentNode.ensureElementIsVisible(addon); + let { name, version } = yield get_tooltip_info(addon); + is(get_node(addon, "name").value, "Test add-on", "Name should be correct"); + is(name, "Test add-on", "Tooltip name should be correct"); + is(version, "1.0", "Tooltip version should be correct"); + is_element_visible(get_node(addon, "description"), "Description should be visible"); + is(get_node(addon, "description").value, "A test add-on", "Description should be correct"); + is_element_hidden(get_class_node(addon, "disabled-postfix"), "Disabled postfix should be hidden"); + is_element_hidden(get_class_node(addon, "update-postfix"), "Update postfix should be hidden"); + is(get_node(addon, "date-updated").value, formatDate(gDate), "Update date should be correct"); + + is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden"); + is_element_visible(get_node(addon, "enable-btn"), "Enable button should be visible"); + is_element_hidden(get_node(addon, "disable-btn"), "Disable button should be hidden"); + is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible"); + + is_element_hidden(get_node(addon, "warning"), "Warning message should be hidden"); + is_element_hidden(get_node(addon, "warning-link"), "Warning link should be hidden"); + is_element_hidden(get_node(addon, "error"), "Error message should be hidden"); + is_element_hidden(get_node(addon, "error-link"), "Error link should be hidden"); + is_element_visible(get_node(addon, "pending"), "Pending message should be visible"); + is(get_node(addon, "pending").textContent, "Test add-on will be disabled after you restart " + gApp + ".", "Pending message should be correct"); + + info("Undoing"); + EventUtils.synthesizeMouseAtCenter(get_node(addon, "undo-btn"), {}, gManagerWindow); + is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden"); + is_element_hidden(get_node(addon, "enable-btn"), "Enable button should be hidden"); + is_element_visible(get_node(addon, "disable-btn"), "Disable button should be visible"); + is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible"); + + is_element_hidden(get_node(addon, "warning"), "Warning message should be hidden"); + is_element_hidden(get_node(addon, "warning-link"), "Warning link should be hidden"); + is_element_hidden(get_node(addon, "error"), "Error message should be hidden"); + is_element_hidden(get_node(addon, "error-link"), "Error link should be hidden"); + is_element_hidden(get_node(addon, "pending"), "Pending message should be hidden"); + + info("Addon 2"); + addon = items["Test add-on 2"]; + addon.parentNode.ensureElementIsVisible(addon); + ({ name, version } = yield get_tooltip_info(addon)); + is(get_node(addon, "name").value, "Test add-on 2", "Name should be correct"); + is(name, "Test add-on 2", "Tooltip name should be correct"); + is(version, "2.0", "Tooltip version should be correct"); + is_element_hidden(get_node(addon, "description"), "Description should be hidden"); + is_element_visible(get_class_node(addon, "disabled-postfix"), "Disabled postfix should be visible"); + is_element_hidden(get_class_node(addon, "update-postfix"), "Update postfix should be hidden"); + is(get_node(addon, "date-updated").value, "Unknown", "Date should be correct"); + + is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden"); + is_element_hidden(get_node(addon, "enable-btn"), "Enable button should be hidden"); + is_element_visible(get_node(addon, "disable-btn"), "Disable button should be visible"); + is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible"); + + is_element_hidden(get_node(addon, "warning"), "Warning message should be hidden"); + is_element_hidden(get_node(addon, "warning-link"), "Warning link should be hidden"); + is_element_hidden(get_node(addon, "error"), "Error message should be hidden"); + is_element_hidden(get_node(addon, "error-link"), "Error link should be hidden"); + is_element_visible(get_node(addon, "pending"), "Pending message should be visible"); + is(get_node(addon, "pending").textContent, "Test add-on 2 will be enabled after you restart " + gApp + ".", "Pending message should be correct"); + + info("Undoing"); + EventUtils.synthesizeMouseAtCenter(get_node(addon, "undo-btn"), {}, gManagerWindow); + is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden"); + is_element_visible(get_node(addon, "enable-btn"), "Enable button should be visible"); + is_element_hidden(get_node(addon, "disable-btn"), "Disable button should be hidden"); + is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible"); + + is_element_hidden(get_node(addon, "warning"), "Warning message should be hidden"); + is_element_hidden(get_node(addon, "warning-link"), "Warning link should be hidden"); + is_element_hidden(get_node(addon, "error"), "Error message should be hidden"); + is_element_hidden(get_node(addon, "error-link"), "Error link should be hidden"); + is_element_hidden(get_node(addon, "pending"), "Pending message should be hidden"); + + info("Addon 4"); + addon = items["Test add-on 4"]; + addon.parentNode.ensureElementIsVisible(addon); + ({ name, version } = yield get_tooltip_info(addon)); + is(get_node(addon, "name").value, "Test add-on 4", "Name should be correct"); + is(name, "Test add-on 4", "Tooltip name should be correct"); + + is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden"); + is_element_hidden(get_node(addon, "enable-btn"), "Enable button should be hidden"); + is_element_visible(get_node(addon, "disable-btn"), "Disable button should be visible"); + is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible"); + + is_element_hidden(get_node(addon, "warning"), "Warning message should be hidden"); + is_element_hidden(get_node(addon, "warning-link"), "Warning link should be hidden"); + is_element_hidden(get_node(addon, "error"), "Error message should be hidden"); + is_element_hidden(get_node(addon, "error-link"), "Error link should be hidden"); + is_element_visible(get_node(addon, "pending"), "Pending message should be visible"); + is(get_node(addon, "pending").textContent, "Test add-on 4 will be enabled after you restart " + gApp + ".", "Pending message should be correct"); + + info("Undoing"); + EventUtils.synthesizeMouseAtCenter(get_node(addon, "undo-btn"), {}, gManagerWindow); + is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden"); + is_element_visible(get_node(addon, "enable-btn"), "Enable button should be visible"); + is_element_hidden(get_node(addon, "disable-btn"), "Disable button should be hidden"); + is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible"); + + is_element_visible(get_node(addon, "warning"), "Warning message should be visible"); + is(get_node(addon, "warning").textContent, "Test add-on 4 is known to cause security or stability issues.", "Warning message should be correct"); + is_element_visible(get_node(addon, "warning-link"), "Warning link should be visible"); + is(get_node(addon, "warning-link").value, "More Information", "Warning link text should be correct"); + is(get_node(addon, "warning-link").href, "http://example.com/addon4@tests.mozilla.org", "Warning link should be correct"); + is_element_hidden(get_node(addon, "error"), "Error message should be hidden"); + is_element_hidden(get_node(addon, "error-link"), "Error link should be hidden"); + is_element_hidden(get_node(addon, "pending"), "Pending message should be hidden"); + + info("Addon 6"); + addon = items["Test add-on 6"]; + addon.parentNode.ensureElementIsVisible(addon); + ({ name, version } = yield get_tooltip_info(addon)); + is(get_node(addon, "name").value, "Test add-on 6", "Name should be correct"); + is(name, "Test add-on 6", "Tooltip name should be correct"); + is_element_visible(get_class_node(addon, "disabled-postfix"), "Disabled postfix should be visible"); + + is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden"); + is_element_visible(get_node(addon, "enable-btn"), "Enable button should be visible"); + is_element_hidden(get_node(addon, "disable-btn"), "Disable button should be hidden"); + is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible"); + + is_element_hidden(get_node(addon, "warning"), "Warning message should be hidden"); + is_element_hidden(get_node(addon, "warning-link"), "Warning link should be hidden"); + is_element_hidden(get_node(addon, "error"), "Error message should be visible"); + is_element_hidden(get_node(addon, "error-link"), "Error link should be hidden"); + is_element_hidden(get_node(addon, "pending"), "Pending message should be hidden"); + + info("Enabling"); + EventUtils.synthesizeMouseAtCenter(get_node(addon, "enable-btn"), {}, gManagerWindow); + is_element_hidden(get_class_node(addon, "disabled-postfix"), "Disabled postfix should be hidden"); + + is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden"); + is_element_hidden(get_node(addon, "enable-btn"), "Enable button should be hidden"); + is_element_visible(get_node(addon, "disable-btn"), "Disable button should be visible"); + is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible"); + + is_element_hidden(get_node(addon, "warning"), "Warning message should be hidden"); + is_element_hidden(get_node(addon, "warning-link"), "Warning link should be hidden"); + is_element_hidden(get_node(addon, "error"), "Error message should be visible"); + is_element_hidden(get_node(addon, "error-link"), "Error link should be hidden"); + is_element_hidden(get_node(addon, "pending"), "Pending message should be hidden"); + + info("Addon 7"); + addon = items["Test add-on 7"]; + addon.parentNode.ensureElementIsVisible(addon); + ({ name, version } = yield get_tooltip_info(addon)); + is(get_node(addon, "name").value, "Test add-on 7", "Name should be correct"); + is(name, "Test add-on 7", "Tooltip name should be correct"); + + is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden"); + is_element_visible(get_node(addon, "enable-btn"), "Enable button should be visible"); + is_element_hidden(get_node(addon, "disable-btn"), "Disable button should be hidden"); + is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible"); + + is_element_hidden(get_node(addon, "warning"), "Warning message should be visible"); + is_element_hidden(get_node(addon, "warning-link"), "Warning link should be hidden"); + is_element_hidden(get_node(addon, "error"), "Error message should be hidden"); + is_element_hidden(get_node(addon, "error-link"), "Error link should be hidden"); + is_element_visible(get_node(addon, "pending"), "Pending message should be visible"); + is(get_node(addon, "pending").textContent, "Test add-on 7 will be disabled after you restart " + gApp + ".", "Pending message should be correct"); + + info("Undoing"); + EventUtils.synthesizeMouseAtCenter(get_node(addon, "undo-btn"), {}, gManagerWindow); + is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden"); + is_element_hidden(get_node(addon, "enable-btn"), "Enable button should be hidden"); + is_element_visible(get_node(addon, "disable-btn"), "Disable button should be visible"); + is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible"); + + is_element_visible(get_node(addon, "warning"), "Warning message should be hidden"); + is(get_node(addon, "warning").textContent, "An important update is available for Test add-on 7.", "Warning message should be correct"); + is_element_visible(get_node(addon, "warning-link"), "Warning link should be visible"); + is(get_node(addon, "warning-link").value, "Update Now", "Warning link text should be correct"); + is(get_node(addon, "warning-link").href, "http://example.com/addon7@tests.mozilla.org", "Warning link should be correct"); + is_element_hidden(get_node(addon, "error"), "Error message should be hidden"); + is_element_hidden(get_node(addon, "error-link"), "Error link should be hidden"); + is_element_hidden(get_node(addon, "pending"), "Pending message should be hidden"); +}); + +// Check the add-ons are now in the right state +add_task(function*() { + let [a1, a2, a4] = yield promiseAddonsByIDs(["addon1@tests.mozilla.org", + "addon2@tests.mozilla.org", + "addon4@tests.mozilla.org"]); + + is(a1.pendingOperations, 0, "Add-on 1 should not have any pending operations"); + is(a2.pendingOperations, 0, "Add-on 1 should not have any pending operations"); + is(a4.pendingOperations, 0, "Add-on 1 should not have any pending operations"); +}); + +// Check that upgrades with onExternalInstall take effect immediately +add_task(function*() { + gProvider.createAddons([{ + id: "addon1@tests.mozilla.org", + name: "Test add-on replacement", + version: "2.0", + description: "A test add-on with a new description", + updateDate: gDate, + operationsRequiringRestart: AddonManager.OP_NEEDS_RESTART_NONE + }, { + id: "addon14@tests.mozilla.org", + name: "Test add-on 14", + hidden: true, + }]); + + let items = get_test_items(); + is(Object.keys(items).length, EXPECTED_ADDONS, "Should be the right number of add-ons installed"); + + let addon = items["Test add-on replacement"]; + addon.parentNode.ensureElementIsVisible(addon); + let { name, version } = yield get_tooltip_info(addon); + is(get_node(addon, "name").value, "Test add-on replacement", "Name should be correct"); + is(name, "Test add-on replacement", "Tooltip name should be correct"); + is(version, "2.0", "Tooltip version should be correct"); + is_element_visible(get_node(addon, "description"), "Description should be visible"); + is(get_node(addon, "description").value, "A test add-on with a new description", "Description should be correct"); + is_element_hidden(get_class_node(addon, "disabled-postfix"), "Disabled postfix should be hidden"); + is_element_hidden(get_class_node(addon, "update-postfix"), "Update postfix should be hidden"); + is(get_node(addon, "date-updated").value, formatDate(gDate), "Update date should be correct"); + + is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden"); + is_element_hidden(get_node(addon, "enable-btn"), "Enable button should be hidden"); + is_element_visible(get_node(addon, "disable-btn"), "Disable button should be visible"); + is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible"); + + is_element_hidden(get_node(addon, "warning"), "Warning message should be hidden"); + is_element_hidden(get_node(addon, "warning-link"), "Warning link should be hidden"); + is_element_hidden(get_node(addon, "error"), "Error message should be hidden"); + is_element_hidden(get_node(addon, "error-link"), "Error link should be hidden"); + is_element_hidden(get_node(addon, "pending"), "Pending message should be hidden"); +}); + +// Check that focus changes correctly move around the selected list item +add_task(function*() { + function is_node_in_list(aNode) { + var list = gManagerWindow.document.getElementById("addon-list"); + + while (aNode && aNode != list) + aNode = aNode.parentNode; + + if (aNode) + return true; + return false; + } + + // Ignore the OSX full keyboard access setting + Services.prefs.setBoolPref("accessibility.tabfocus_applies_to_xul", false); + + let items = get_test_items(); + + var fm = Cc["@mozilla.org/focus-manager;1"]. + getService(Ci.nsIFocusManager); + + let addon = items["Test add-on 6"]; + addon.parentNode.ensureElementIsVisible(addon); + EventUtils.synthesizeMouseAtCenter(addon, { }, gManagerWindow); + is(fm.focusedElement, addon.parentNode, "Focus should have moved to the list"); + + EventUtils.synthesizeKey("VK_TAB", { }, gManagerWindow); + is(fm.focusedElement, get_node(addon, "details-btn"), "Focus should have moved to the more button"); + + EventUtils.synthesizeKey("VK_TAB", { }, gManagerWindow); + is(fm.focusedElement, get_node(addon, "disable-btn"), "Focus should have moved to the disable button"); + + EventUtils.synthesizeKey("VK_TAB", { }, gManagerWindow); + is(fm.focusedElement, get_node(addon, "remove-btn"), "Focus should have moved to the remove button"); + + EventUtils.synthesizeKey("VK_TAB", { }, gManagerWindow); + ok(!is_node_in_list(fm.focusedElement), "Focus should be outside the list"); + + EventUtils.synthesizeKey("VK_TAB", { shiftKey: true }, gManagerWindow); + is(fm.focusedElement, get_node(addon, "remove-btn"), "Focus should have moved to the remove button"); + + EventUtils.synthesizeKey("VK_TAB", { shiftKey: true }, gManagerWindow); + EventUtils.synthesizeKey("VK_TAB", { shiftKey: true }, gManagerWindow); + is(fm.focusedElement, get_node(addon, "details-btn"), "Focus should have moved to the more button"); + + EventUtils.synthesizeKey("VK_TAB", { shiftKey: true }, gManagerWindow); + is(fm.focusedElement, addon.parentNode, "Focus should have moved to the list"); + + EventUtils.synthesizeKey("VK_TAB", { shiftKey: true }, gManagerWindow); + ok(!is_node_in_list(fm.focusedElement), "Focus should be outside the list"); + + try { + Services.prefs.clearUserPref("accessibility.tabfocus_applies_to_xul"); + } + catch (e) { } +}); + + +add_task(function*() { + info("Enabling lightweight theme"); + LightweightThemeManager.currentTheme = gLWTheme; + + gManagerWindow.loadView("addons://list/theme"); + yield new Promise(resolve => wait_for_view_load(gManagerWindow, resolve)); + + var addon = get_addon_element(gManagerWindow, "4@personas.mozilla.org"); + + is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden"); + is_element_hidden(get_node(addon, "enable-btn"), "Enable button should be hidden"); + is_element_visible(get_node(addon, "disable-btn"), "Disable button should be visible"); + is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible"); + + info("Disabling lightweight theme"); + LightweightThemeManager.currentTheme = null; + + is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden"); + is_element_visible(get_node(addon, "enable-btn"), "Enable button should be hidden"); + is_element_hidden(get_node(addon, "disable-btn"), "Disable button should be visible"); + is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible"); + + let [aAddon] = yield promiseAddonsByIDs(["4@personas.mozilla.org"]); + aAddon.uninstall(); +}); + +// Check that onPropertyChanges for appDisabled updates the UI +add_task(function*() { + info("Checking that onPropertyChanges for appDisabled updates the UI"); + + let [aAddon] = yield promiseAddonsByIDs(["addon2@tests.mozilla.org"]); + aAddon.userDisabled = true; + aAddon.isCompatible = true; + aAddon.appDisabled = false; + + gManagerWindow.loadView("addons://list/extension"); + yield new Promise(resolve => wait_for_view_load(gManagerWindow, resolve)); + var el = get_addon_element(gManagerWindow, "addon2@tests.mozilla.org"); + + is(el.getAttribute("active"), "false", "Addon should not be marked as active"); + is_element_hidden(get_node(el, "warning"), "Warning message should not be visible"); + + info("Making addon incompatible and appDisabled"); + aAddon.isCompatible = false; + aAddon.appDisabled = true; + + is(el.getAttribute("active"), "false", "Addon should not be marked as active"); + is_element_visible(get_node(el, "warning"), "Warning message should be visible"); + is(get_node(el, "warning").textContent, "Test add-on 2 is incompatible with " + gApp + " " + gVersion + ".", "Warning message should be correct"); +}); + +// Check that the list displays correctly when signing is required +add_task(function*() { + yield close_manager(gManagerWindow); + Services.prefs.setBoolPref("xpinstall.signatures.required", true); + gManagerWindow = yield open_manager(null); + gCategoryUtilities = new CategoryUtilities(gManagerWindow); + + yield gCategoryUtilities.openType("extension"); + let items = get_test_items(); + is(Object.keys(items).length, EXPECTED_ADDONS, "Should be the right number of add-ons installed"); + + info("Addon 10"); + let addon = items["Test add-on 10"]; + addon.parentNode.ensureElementIsVisible(addon); + let { name, version } = yield get_tooltip_info(addon); + is(get_node(addon, "name").value, "Test add-on 10", "Name should be correct"); + is(name, "Test add-on 10", "Tooltip name should be correct"); + + is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden"); + is_element_hidden(get_node(addon, "enable-btn"), "Enable button should be hidden"); + is_element_visible(get_node(addon, "disable-btn"), "Disable button should be visible"); + is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible"); + + is_element_hidden(get_node(addon, "warning"), "Warning message should be hidden"); + is_element_hidden(get_node(addon, "warning-link"), "Warning link should be hidden"); + is_element_visible(get_node(addon, "error"), "Error message should be visible"); + is(get_node(addon, "error").textContent, "Test add-on 10 could not be verified for use in " + gApp + " and has been disabled.", "Error message should be correct"); + is_element_visible(get_node(addon, "error-link"), "Error link should be visible"); + is(get_node(addon, "error-link").value, "More Information", "Error link text should be correct"); + is(get_node(addon, "error-link").href, infoURL, "Error link should be correct"); + + info("Addon 11"); + addon = items["Test add-on 11"]; + addon.parentNode.ensureElementIsVisible(addon); + ({ name, version } = yield get_tooltip_info(addon)); + is(get_node(addon, "name").value, "Test add-on 11", "Name should be correct"); + is(name, "Test add-on 11", "Tooltip name should be correct"); + + is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden"); + is_element_hidden(get_node(addon, "enable-btn"), "Enable button should be hidden"); + is_element_hidden(get_node(addon, "disable-btn"), "Disable button should be hidden"); + is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible"); + + is_element_hidden(get_node(addon, "warning"), "Warning message should be hidden"); + is_element_hidden(get_node(addon, "warning-link"), "Warning link should be hidden"); + is_element_visible(get_node(addon, "error"), "Error message should be visible"); + is(get_node(addon, "error").textContent, "Test add-on 11 could not be verified for use in " + gApp + " and has been disabled.", "Error message should be correct"); + is_element_visible(get_node(addon, "error-link"), "Error link should be visible"); + is(get_node(addon, "error-link").value, "More Information", "Error link text should be correct"); + is(get_node(addon, "error-link").href, infoURL, "Error link should be correct"); + + info("Addon 12"); + addon = items["Test add-on 12"]; + addon.parentNode.ensureElementIsVisible(addon); + ({ name, version } = yield get_tooltip_info(addon)) + is(get_node(addon, "name").value, "Test add-on 12", "Name should be correct"); + is(name, "Test add-on 12", "Tooltip name should be correct"); + + is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden"); + is_element_hidden(get_node(addon, "enable-btn"), "Enable button should be hidden"); + is_element_visible(get_node(addon, "disable-btn"), "Disable button should be visible"); + is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible"); + + is_element_hidden(get_node(addon, "warning"), "Warning message should be hidden"); + is_element_hidden(get_node(addon, "warning-link"), "Warning link should be hidden"); + is_element_hidden(get_node(addon, "error"), "Error message should be hidden"); + is_element_hidden(get_node(addon, "error-link"), "Error link should be hidden"); + + info("Addon 13"); + addon = items["Test add-on 13"]; + addon.parentNode.ensureElementIsVisible(addon); + ({ name, version } = yield get_tooltip_info(addon)); + is(get_node(addon, "name").value, "Test add-on 13", "Name should be correct"); + is(name, "Test add-on 13", "Tooltip name should be correct"); + + is_element_hidden(get_node(addon, "preferences-btn"), "Preferences button should be hidden"); + is_element_hidden(get_node(addon, "enable-btn"), "Enable button should be hidden"); + is_element_visible(get_node(addon, "disable-btn"), "Disable button should be visible"); + is_element_visible(get_node(addon, "remove-btn"), "Remove button should be visible"); + + is_element_hidden(get_node(addon, "warning"), "Warning message should be hidden"); + is_element_hidden(get_node(addon, "warning-link"), "Warning link should be hidden"); + is_element_hidden(get_node(addon, "error"), "Error message should be hidden"); + + info("Filter for disabled unsigned extensions"); + let filterButton = gManagerWindow.document.getElementById("show-disabled-unsigned-extensions"); + let showAllButton = gManagerWindow.document.getElementById("show-all-extensions"); + let signingInfoUI = gManagerWindow.document.getElementById("disabled-unsigned-addons-info"); + is_element_visible(filterButton, "Button for showing disabled unsigned extensions should be visible"); + is_element_hidden(showAllButton, "Button for showing all extensions should be hidden"); + is_element_hidden(signingInfoUI, "Signing info UI should be hidden"); + + filterButton.click(); + + yield new Promise(resolve => wait_for_view_load(gManagerWindow, resolve)); + + is_element_hidden(filterButton, "Button for showing disabled unsigned extensions should be hidden"); + is_element_visible(showAllButton, "Button for showing all extensions should be visible"); + is_element_visible(signingInfoUI, "Signing info UI should be visible"); + + items = get_test_items(); + is(Object.keys(items).length, 2, "Two add-ons should be shown"); + is(Object.keys(items)[0], "Test add-on 10", "The disabled unsigned extension should be shown"); + is(Object.keys(items)[1], "Test add-on 11", "The disabled unsigned extension should be shown"); + + showAllButton.click(); + + yield new Promise(resolve => wait_for_view_load(gManagerWindow, resolve)); + + items = get_test_items(); + is(Object.keys(items).length, EXPECTED_ADDONS, "All add-ons should be shown again"); + is_element_visible(filterButton, "Button for showing disabled unsigned extensions should be visible again"); + is_element_hidden(showAllButton, "Button for showing all extensions should be hidden again"); + is_element_hidden(signingInfoUI, "Signing info UI should be hidden again"); + + Services.prefs.setBoolPref("xpinstall.signatures.required", false); +}); + +add_task(function*() { + return close_manager(gManagerWindow); +}); |