summaryrefslogtreecommitdiffstats
path: root/toolkit/mozapps/extensions/test/browser/browser_select_update.js
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/mozapps/extensions/test/browser/browser_select_update.js')
-rw-r--r--toolkit/mozapps/extensions/test/browser/browser_select_update.js181
1 files changed, 181 insertions, 0 deletions
diff --git a/toolkit/mozapps/extensions/test/browser/browser_select_update.js b/toolkit/mozapps/extensions/test/browser/browser_select_update.js
new file mode 100644
index 000000000..58f1de687
--- /dev/null
+++ b/toolkit/mozapps/extensions/test/browser/browser_select_update.js
@@ -0,0 +1,181 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/
+ */
+
+// Tests the update part of the post-app-update dialog
+
+var gProvider;
+var gWin;
+
+function waitForView(aView, aCallback) {
+ var view = gWin.document.getElementById(aView);
+ if (view.parentNode.selectedPanel == view) {
+ aCallback();
+ return;
+ }
+
+ view.addEventListener("ViewChanged", function() {
+ view.removeEventListener("ViewChanged", arguments.callee, false);
+ aCallback();
+ }, false);
+}
+
+function waitForClose(aCallback) {
+ gWin.addEventListener("unload", function() {
+ gWin.removeEventListener("unload", arguments.callee, false);
+
+ aCallback();
+ }, false);
+}
+
+/**
+ * Creates 4 test add-ons. Two are disabled and two enabled.
+ */
+function setupUI(aFailDownloads, aFailInstalls, aCallback) {
+ if (gProvider)
+ gProvider.unregister();
+
+ gProvider = new MockProvider();
+
+ for (var i = 1; i < 5; i++) {
+ var addon = new MockAddon("test" + i + "@tests.mozilla.org",
+ "Test Add-on " + i, "extension");
+ addon.version = "1.0";
+ addon.userDisabled = (i > 2);
+ addon.appDisabled = false;
+ addon.isActive = !addon.userDisabled && !addon.appDisabled;
+
+ addon.findUpdates = function(aListener, aReason, aAppVersion, aPlatformVersion) {
+ var newAddon = new MockAddon(this.id, this.name, "extension");
+ newAddon.version = "2.0";
+ var install = new MockInstall(this.name, this.type, newAddon);
+ install.existingAddon = this;
+
+ install.install = function() {
+ this.state = AddonManager.STATE_DOWNLOADING;
+ this.callListeners("onDownloadStarted");
+
+ var self = this;
+ executeSoon(function() {
+ if (aFailDownloads) {
+ self.state = AddonManager.STATE_DOWNLOAD_FAILED;
+ self.callListeners("onDownloadFailed");
+ return;
+ }
+
+ self.type = self._type;
+ self.addon = new MockAddon(self.existingAddon.id, self.name, self.type);
+ self.addon.version = self.version;
+ self.addon.pendingOperations = AddonManager.PENDING_INSTALL;
+ self.addon.install = self;
+
+ self.existingAddon.pendingUpgrade = self.addon;
+ self.existingAddon.pendingOperations |= AddonManager.PENDING_UPGRADE;
+
+ self.state = AddonManager.STATE_DOWNLOADED;
+ self.callListeners("onDownloadEnded");
+
+ self.state = AddonManager.STATE_INSTALLING;
+ self.callListeners("onInstallStarted");
+
+ if (aFailInstalls) {
+ self.state = AddonManager.STATE_INSTALL_FAILED;
+ self.callListeners("onInstallFailed");
+ return;
+ }
+
+ self.state = AddonManager.STATE_INSTALLED;
+ self.callListeners("onInstallEnded");
+ });
+ }
+
+ aListener.onUpdateAvailable(this, install);
+
+ aListener.onUpdateFinished(this, AddonManager.UPDATE_STATUS_NO_ERROR);
+ };
+
+ gProvider.addAddon(addon);
+ }
+
+ gWin = Services.ww.openWindow(null,
+ "chrome://mozapps/content/extensions/selectAddons.xul",
+ "",
+ "chrome,centerscreen,dialog,titlebar",
+ null);
+ waitForFocus(function() {
+ waitForView("select", function() {
+ var row = gWin.document.getElementById("select-rows").firstChild.nextSibling;
+ while (row) {
+ if (!row.id || row.id.indexOf("@tests.mozilla.org") < 0) {
+ // not a test add-on
+ row = row.nextSibling;
+ continue;
+ }
+
+ if (row.id == "test2@tests.mozilla.org" ||
+ row.id == "test4@tests.mozilla.org") {
+ row.disable();
+ }
+ else {
+ row.keep();
+ }
+ row = row.nextSibling;
+ }
+
+ waitForView("confirm", function() {
+ waitForView("update", aCallback);
+ EventUtils.synthesizeMouseAtCenter(gWin.document.getElementById("next"), {}, gWin);
+ });
+ EventUtils.synthesizeMouseAtCenter(gWin.document.getElementById("next"), {}, gWin);
+ });
+ }, gWin);
+}
+
+function test() {
+ waitForExplicitFinish();
+ run_next_test();
+}
+
+function end_test() {
+ finish();
+}
+
+// Test for working updates
+add_test(function working_test() {
+ setupUI(false, false, function() {
+ waitForClose(function() {
+ is(gWin.document.getElementById("update-progress").value, 2, "Should have finished 2 downloads");
+ run_next_test();
+ });
+
+ EventUtils.synthesizeMouseAtCenter(gWin.document.getElementById("next"), {}, gWin);
+ });
+});
+
+// Test for failed updates
+add_test(function working_test() {
+ setupUI(true, false, function() {
+ waitForView("errors", function() {
+ is(gWin.document.getElementById("update-progress").value, 2, "Should have finished 2 downloads");
+ gWin.close();
+
+ run_next_test();
+ });
+
+ EventUtils.synthesizeMouseAtCenter(gWin.document.getElementById("next"), {}, gWin);
+ });
+});
+
+// Test for failed updates
+add_test(function working_test() {
+ setupUI(false, true, function() {
+ waitForView("errors", function() {
+ is(gWin.document.getElementById("update-progress").value, 2, "Should have finished 2 downloads");
+ gWin.close();
+
+ run_next_test();
+ });
+
+ EventUtils.synthesizeMouseAtCenter(gWin.document.getElementById("next"), {}, gWin);
+ });
+});