/* Any copyright is dedicated to the Public Domain. * http://creativecommons.org/publicdomain/zero/1.0/ */ // Tests that upgrading bootstrapped add-ons behaves correctly while the // manager is open var gManagerWindow; var gCategoryUtilities; function test() { waitForExplicitFinish(); open_manager("addons://list/extension", function(aWindow) { gManagerWindow = aWindow; gCategoryUtilities = new CategoryUtilities(gManagerWindow); run_next_test(); }); } function end_test() { close_manager(gManagerWindow, finish); } function get_list_item_count() { return get_test_items_in_list(gManagerWindow).length; } 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); } function install_addon(aXpi, aCallback) { AddonManager.getInstallForURL(TESTROOT + "addons/" + aXpi + ".xpi", function(aInstall) { aInstall.addListener({ onInstallEnded: function(aInstall) { executeSoon(aCallback); } }); aInstall.install(); }, "application/x-xpinstall"); } function check_addon(aAddon, version) { is(get_list_item_count(), 1, "Should be one item in the list"); is(aAddon.version, version, "Add-on should have the right version"); let item = get_addon_element(gManagerWindow, "addon1@tests.mozilla.org"); ok(!!item, "Should see the add-on in the list"); // Force XBL to apply item.clientTop; is(get_node(item, "version").value, version, "Version should be correct"); if (aAddon.userDisabled) is_element_visible(get_class_node(item, "disabled-postfix"), "Disabled postfix should be hidden"); else is_element_hidden(get_class_node(item, "disabled-postfix"), "Disabled postfix should be hidden"); } // Install version 1 then upgrade to version 2 with the manager open add_test(function() { install_addon("browser_bug596336_1", function() { AddonManager.getAddonByID("addon1@tests.mozilla.org", function(aAddon) { check_addon(aAddon, "1.0"); ok(!aAddon.userDisabled, "Add-on should not be disabled"); install_addon("browser_bug596336_2", function() { AddonManager.getAddonByID("addon1@tests.mozilla.org", function(aAddon) { check_addon(aAddon, "2.0"); ok(!aAddon.userDisabled, "Add-on should not be disabled"); aAddon.uninstall(); is(get_list_item_count(), 0, "Should be no items in the list"); run_next_test(); }); }); }); }); }); // Install version 1 mark it as disabled then upgrade to version 2 with the // manager open add_test(function() { install_addon("browser_bug596336_1", function() { AddonManager.getAddonByID("addon1@tests.mozilla.org", function(aAddon) { aAddon.userDisabled = true; check_addon(aAddon, "1.0"); ok(aAddon.userDisabled, "Add-on should be disabled"); install_addon("browser_bug596336_2", function() { AddonManager.getAddonByID("addon1@tests.mozilla.org", function(aAddon) { check_addon(aAddon, "2.0"); ok(aAddon.userDisabled, "Add-on should be disabled"); aAddon.uninstall(); is(get_list_item_count(), 0, "Should be no items in the list"); run_next_test(); }); }); }); }); }); // Install version 1 click the remove button and then upgrade to version 2 with // the manager open add_test(function() { install_addon("browser_bug596336_1", function() { AddonManager.getAddonByID("addon1@tests.mozilla.org", function(aAddon) { check_addon(aAddon, "1.0"); ok(!aAddon.userDisabled, "Add-on should not be disabled"); let item = get_addon_element(gManagerWindow, "addon1@tests.mozilla.org"); EventUtils.synthesizeMouseAtCenter(get_node(item, "remove-btn"), { }, gManagerWindow); // Force XBL to apply item.clientTop; ok(!!(aAddon.pendingOperations & AddonManager.PENDING_UNINSTALL), "Add-on should be pending uninstall"); is_element_visible(get_class_node(item, "pending"), "Pending message should be visible"); install_addon("browser_bug596336_2", function() { AddonManager.getAddonByID("addon1@tests.mozilla.org", function(aAddon) { check_addon(aAddon, "2.0"); ok(!aAddon.userDisabled, "Add-on should not be disabled"); aAddon.uninstall(); is(get_list_item_count(), 0, "Should be no items in the list"); run_next_test(); }); }); }); }); }); // Install version 1, disable it, click the remove button and then upgrade to // version 2 with the manager open add_test(function() { install_addon("browser_bug596336_1", function() { AddonManager.getAddonByID("addon1@tests.mozilla.org", function(aAddon) { aAddon.userDisabled = true; check_addon(aAddon, "1.0"); ok(aAddon.userDisabled, "Add-on should be disabled"); let item = get_addon_element(gManagerWindow, "addon1@tests.mozilla.org"); EventUtils.synthesizeMouseAtCenter(get_node(item, "remove-btn"), { }, gManagerWindow); // Force XBL to apply item.clientTop; ok(!!(aAddon.pendingOperations & AddonManager.PENDING_UNINSTALL), "Add-on should be pending uninstall"); is_element_visible(get_class_node(item, "pending"), "Pending message should be visible"); install_addon("browser_bug596336_2", function() { AddonManager.getAddonByID("addon1@tests.mozilla.org", function(aAddon) { check_addon(aAddon, "2.0"); ok(aAddon.userDisabled, "Add-on should be disabled"); aAddon.uninstall(); is(get_list_item_count(), 0, "Should be no items in the list"); run_next_test(); }); }); }); }); });