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