summaryrefslogtreecommitdiffstats
path: root/toolkit/mozapps/extensions/test/browser/browser_bug596336.js
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/mozapps/extensions/test/browser/browser_bug596336.js')
-rw-r--r--toolkit/mozapps/extensions/test/browser/browser_bug596336.js180
1 files changed, 180 insertions, 0 deletions
diff --git a/toolkit/mozapps/extensions/test/browser/browser_bug596336.js b/toolkit/mozapps/extensions/test/browser/browser_bug596336.js
new file mode 100644
index 000000000..935820613
--- /dev/null
+++ b/toolkit/mozapps/extensions/test/browser/browser_bug596336.js
@@ -0,0 +1,180 @@
+/* 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();
+ });
+ });
+ });
+ });
+});