diff options
Diffstat (limited to 'toolkit/mozapps/webextensions/test/browser/browser_install.js')
-rw-r--r-- | toolkit/mozapps/webextensions/test/browser/browser_install.js | 312 |
1 files changed, 312 insertions, 0 deletions
diff --git a/toolkit/mozapps/webextensions/test/browser/browser_install.js b/toolkit/mozapps/webextensions/test/browser/browser_install.js new file mode 100644 index 000000000..880a4624d --- /dev/null +++ b/toolkit/mozapps/webextensions/test/browser/browser_install.js @@ -0,0 +1,312 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ + */ + +// Tests tha installs and undoing installs show up correctly + +var gManagerWindow; +var gCategoryUtilities; + +var gApp = document.getElementById("bundle_brand").getString("brandShortName"); +var gSearchCount = 0; + +function test() { + requestLongerTimeout(2); + waitForExplicitFinish(); + + // Turn on searching for this test + Services.prefs.setIntPref(PREF_SEARCH_MAXRESULTS, 15); + Services.prefs.setCharPref("extensions.getAddons.search.url", TESTROOT + "browser_install.xml"); + // Allow http update checks + Services.prefs.setBoolPref("extensions.checkUpdateSecurity", false); + + open_manager(null, function(aWindow) { + gManagerWindow = aWindow; + gCategoryUtilities = new CategoryUtilities(gManagerWindow); + run_next_test(); + }); +} + +function end_test() { + close_manager(gManagerWindow, function() { + Services.prefs.clearUserPref("extensions.checkUpdateSecurity"); + + AddonManager.getAddonByID("install1@tests.mozilla.org", function(aAddon) { + aAddon.uninstall(); + finish(); + }); + }); +} + +function get_node(parent, anonid) { + return parent.ownerDocument.getAnonymousElementByAttribute(parent, "anonid", anonid); +} + +function installAddon(aCallback) { + AddonManager.getInstallForURL(TESTROOT + "addons/browser_install1_2.xpi", + function(aInstall) { + aInstall.addListener({ + onInstallEnded: function() { + executeSoon(aCallback); + } + }); + aInstall.install(); + }, "application/x-xpinstall"); +} + +function installUpgrade(aCallback) { + AddonManager.getAddonByID("install1@tests.mozilla.org", function(aAddon) { + aAddon.findUpdates({ + onUpdateAvailable: function(aAddon, aInstall) { + is(get_list_item_count(), 1, "Should be only one item in the list"); + + aInstall.addListener({ + onDownloadEnded: function() { + is(get_list_item_count(), 1, "Should be only one item in the list once the update has started"); + }, + onInstallEnded: function() { + executeSoon(aCallback); + } + }); + aInstall.install(); + } + }, AddonManager.UPDATE_WHEN_USER_REQUESTED); + }); +} + +function cancelInstall(aCallback) { + AddonManager.getInstallForURL(TESTROOT + "addons/browser_install1_2.xpi", + function(aInstall) { + aInstall.addListener({ + onDownloadEnded: function(aInstall) { + executeSoon(function() { + aInstall.cancel(); + aCallback(); + }); + return false; + } + }); + aInstall.install(); + }, "application/x-xpinstall"); +} + +function installSearchResult(aCallback) { + var searchBox = gManagerWindow.document.getElementById("header-search"); + // Search for something different each time + searchBox.value = "foo" + gSearchCount; + gSearchCount++; + + EventUtils.synthesizeMouseAtCenter(searchBox, { }, gManagerWindow); + EventUtils.synthesizeKey("VK_RETURN", { }, gManagerWindow); + + wait_for_view_load(gManagerWindow, function() { + let remote = gManagerWindow.document.getElementById("search-filter-remote") + EventUtils.synthesizeMouseAtCenter(remote, { }, gManagerWindow); + + let item = get_addon_element(gManagerWindow, "install1@tests.mozilla.org"); + ok(!!item, "Should see the search result in the list"); + + let status = get_node(item, "install-status"); + EventUtils.synthesizeMouseAtCenter(get_node(status, "install-remote-btn"), {}, gManagerWindow); + + item.mInstall.addListener({ + onInstallEnded: function() { + executeSoon(aCallback); + } + }); + }); +} + +function get_list_item_count() { + return get_test_items_in_list(gManagerWindow).length; +} + +function check_undo_install() { + is(get_list_item_count(), 1, "Should be only one item in the list"); + + let item = get_addon_element(gManagerWindow, "install1@tests.mozilla.org"); + ok(!!item, "Should see the pending install in the list"); + // Force XBL to apply + item.clientTop; + is_element_visible(get_node(item, "pending"), "Pending message should be visible"); + is(get_node(item, "pending").textContent, "Install Tests will be installed after you restart " + gApp + ".", "Pending message should be correct"); + + EventUtils.synthesizeMouseAtCenter(get_node(item, "undo-btn"), {}, gManagerWindow); + + is(get_list_item_count(), 0, "Should be no items in the list"); + + item = get_addon_element(gManagerWindow, "install1@tests.mozilla.org"); + ok(!item, "Should no longer see the pending install"); +} + +function check_undo_upgrade() { + is(get_list_item_count(), 1, "Should be only one item in the list"); + + let item = get_addon_element(gManagerWindow, "install1@tests.mozilla.org"); + ok(!!item, "Should see the pending upgrade in the list"); + // Force XBL to apply + item.clientTop; + is_element_visible(get_node(item, "pending"), "Pending message should be visible"); + is(get_node(item, "pending").textContent, "Install Tests will be updated after you restart " + gApp + ".", "Pending message should be correct"); + + EventUtils.synthesizeMouseAtCenter(get_node(item, "undo-btn"), {}, gManagerWindow); + + is(get_list_item_count(), 1, "Should be only one item in the list"); + + item = get_addon_element(gManagerWindow, "install1@tests.mozilla.org"); + ok(!!item, "Should still see installed item in the list"); + is_element_hidden(get_node(item, "pending"), "Pending message should be hidden"); +} + +// Install an add-on through the API with the manager open +add_test(function() { + gCategoryUtilities.openType("extension", function() { + installAddon(function() { + check_undo_install(); + run_next_test(); + }); + }); +}); + +// Install an add-on with the manager closed then open it +add_test(function() { + close_manager(gManagerWindow, function() { + installAddon(function() { + open_manager(null, function(aWindow) { + gManagerWindow = aWindow; + gCategoryUtilities = new CategoryUtilities(gManagerWindow); + check_undo_install(); + run_next_test(); + }); + }); + }); +}); + +// Install an add-on through the search page and then undo it +add_test(function() { + installSearchResult(function() { + check_undo_install(); + run_next_test(); + }); +}); + +// Install an add-on through the search page then switch to the extensions page +// and then undo it +add_test(function() { + installSearchResult(function() { + gCategoryUtilities.openType("extension", function() { + check_undo_install(); + run_next_test(); + }); + }); +}); + +// Install an add-on through the search page then re-open the manager and then +// undo it +add_test(function() { + installSearchResult(function() { + close_manager(gManagerWindow, function() { + open_manager("addons://list/extension", function(aWindow) { + gManagerWindow = aWindow; + gCategoryUtilities = new CategoryUtilities(gManagerWindow); + check_undo_install(); + run_next_test(); + }); + }); + }); +}); + +// Cancel an install after download with the manager open +add_test(function() { + cancelInstall(function() { + is(get_list_item_count(), 0, "Should be no items in the list"); + + run_next_test(); + }); +}); + +// Cancel an install after download with the manager closed +add_test(function() { + close_manager(gManagerWindow, function() { + cancelInstall(function() { + open_manager(null, function(aWindow) { + gManagerWindow = aWindow; + gCategoryUtilities = new CategoryUtilities(gManagerWindow); + is(get_list_item_count(), 0, "Should be no items in the list"); + + run_next_test(); + }); + }); + }); +}); + +// Install an existing add-on for the subsequent tests +add_test(function() { + AddonManager.getInstallForURL(TESTROOT + "addons/browser_install1_1.xpi", + function(aInstall) { + aInstall.addListener({ + onInstallEnded: run_next_test + }); + aInstall.install(); + }, "application/x-xpinstall"); +}); + +// Install an upgrade through the API with the manager open +add_test(function() { + installAddon(function() { + check_undo_upgrade(); + run_next_test(); + }); +}); + +// Install an upgrade through the API with the manager open +add_test(function() { + installUpgrade(function() { + check_undo_upgrade(); + run_next_test(); + }); +}); + +// Install an upgrade through the API with the manager closed +add_test(function() { + close_manager(gManagerWindow, function() { + installAddon(function() { + open_manager(null, function(aWindow) { + gManagerWindow = aWindow; + gCategoryUtilities = new CategoryUtilities(gManagerWindow); + check_undo_upgrade(); + run_next_test(); + }); + }); + }); +}); + +// Cancel an upgrade after download with the manager open +add_test(function() { + cancelInstall(function() { + is(get_list_item_count(), 1, "Should be no items in the list"); + let item = get_addon_element(gManagerWindow, "install1@tests.mozilla.org"); + ok(!!item, "Should still see installed item in the list"); + is_element_hidden(get_node(item, "pending"), "Pending message should be hidden"); + + run_next_test(); + }); +}); + +// Cancel an upgrade after download with the manager closed +add_test(function() { + close_manager(gManagerWindow, function() { + cancelInstall(function() { + open_manager(null, function(aWindow) { + gManagerWindow = aWindow; + gCategoryUtilities = new CategoryUtilities(gManagerWindow); + is(get_list_item_count(), 1, "Should be no items in the list"); + let item = get_addon_element(gManagerWindow, "install1@tests.mozilla.org"); + ok(!!item, "Should still see installed item in the list"); + is_element_hidden(get_node(item, "pending"), "Pending message should be hidden"); + + run_next_test(); + }); + }); + }); +}); |