1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/toolkit/mozapps/extensions/test/browser/browser_select_update.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,181 @@ 1.4 +/* Any copyright is dedicated to the Public Domain. 1.5 + * http://creativecommons.org/publicdomain/zero/1.0/ 1.6 + */ 1.7 + 1.8 +// Tests the update part of the post-app-update dialog 1.9 + 1.10 +var gProvider; 1.11 +var gWin; 1.12 + 1.13 +function waitForView(aView, aCallback) { 1.14 + var view = gWin.document.getElementById(aView); 1.15 + if (view.parentNode.selectedPanel == view) { 1.16 + aCallback(); 1.17 + return; 1.18 + } 1.19 + 1.20 + view.addEventListener("ViewChanged", function() { 1.21 + view.removeEventListener("ViewChanged", arguments.callee, false); 1.22 + aCallback(); 1.23 + }, false); 1.24 +} 1.25 + 1.26 +function waitForClose(aCallback) { 1.27 + gWin.addEventListener("unload", function() { 1.28 + gWin.removeEventListener("unload", arguments.callee, false); 1.29 + 1.30 + aCallback(); 1.31 + }, false); 1.32 +} 1.33 + 1.34 +/** 1.35 + * Creates 4 test add-ons. Two are disabled and two enabled. 1.36 + */ 1.37 +function setupUI(aFailDownloads, aFailInstalls, aCallback) { 1.38 + if (gProvider) 1.39 + gProvider.unregister(); 1.40 + 1.41 + gProvider = new MockProvider(); 1.42 + 1.43 + for (var i = 1; i < 5; i++) { 1.44 + var addon = new MockAddon("test" + i + "@tests.mozilla.org", 1.45 + "Test Add-on " + i, "extension"); 1.46 + addon.version = "1.0"; 1.47 + addon.userDisabled = (i > 2); 1.48 + addon.appDisabled = false; 1.49 + addon.isActive = !addon.userDisabled && !addon.appDisabled; 1.50 + 1.51 + addon.findUpdates = function(aListener, aReason, aAppVersion, aPlatformVersion) { 1.52 + var newAddon = new MockAddon(this.id, this.name, "extension"); 1.53 + newAddon.version = "2.0"; 1.54 + var install = new MockInstall(this.name, this.type, newAddon); 1.55 + install.existingAddon = this; 1.56 + 1.57 + install.install = function() { 1.58 + this.state = AddonManager.STATE_DOWNLOADING; 1.59 + this.callListeners("onDownloadStarted"); 1.60 + 1.61 + var self = this; 1.62 + executeSoon(function() { 1.63 + if (aFailDownloads) { 1.64 + self.state = AddonManager.STATE_DOWNLOAD_FAILED; 1.65 + self.callListeners("onDownloadFailed"); 1.66 + return; 1.67 + } 1.68 + 1.69 + self.type = self._type; 1.70 + self.addon = new MockAddon(self.existingAddon.id, self.name, self.type); 1.71 + self.addon.version = self.version; 1.72 + self.addon.pendingOperations = AddonManager.PENDING_INSTALL; 1.73 + self.addon.install = self; 1.74 + 1.75 + self.existingAddon.pendingUpgrade = self.addon; 1.76 + self.existingAddon.pendingOperations |= AddonManager.PENDING_UPGRADE; 1.77 + 1.78 + self.state = AddonManager.STATE_DOWNLOADED; 1.79 + self.callListeners("onDownloadEnded"); 1.80 + 1.81 + self.state = AddonManager.STATE_INSTALLING; 1.82 + self.callListeners("onInstallStarted"); 1.83 + 1.84 + if (aFailInstalls) { 1.85 + self.state = AddonManager.STATE_INSTALL_FAILED; 1.86 + self.callListeners("onInstallFailed"); 1.87 + return; 1.88 + } 1.89 + 1.90 + self.state = AddonManager.STATE_INSTALLED; 1.91 + self.callListeners("onInstallEnded"); 1.92 + }); 1.93 + } 1.94 + 1.95 + aListener.onUpdateAvailable(this, install); 1.96 + 1.97 + aListener.onUpdateFinished(this, AddonManager.UPDATE_STATUS_NO_ERROR); 1.98 + }; 1.99 + 1.100 + gProvider.addAddon(addon); 1.101 + } 1.102 + 1.103 + gWin = Services.ww.openWindow(null, 1.104 + "chrome://mozapps/content/extensions/selectAddons.xul", 1.105 + "", 1.106 + "chrome,centerscreen,dialog,titlebar", 1.107 + null); 1.108 + waitForFocus(function() { 1.109 + waitForView("select", function() { 1.110 + var row = gWin.document.getElementById("select-rows").firstChild.nextSibling; 1.111 + while (row) { 1.112 + if (!row.id || row.id.indexOf("@tests.mozilla.org") < 0) { 1.113 + // not a test add-on 1.114 + row = row.nextSibling; 1.115 + continue; 1.116 + } 1.117 + 1.118 + if (row.id == "test2@tests.mozilla.org" || 1.119 + row.id == "test4@tests.mozilla.org") { 1.120 + row.disable(); 1.121 + } 1.122 + else { 1.123 + row.keep(); 1.124 + } 1.125 + row = row.nextSibling; 1.126 + } 1.127 + 1.128 + waitForView("confirm", function() { 1.129 + waitForView("update", aCallback); 1.130 + EventUtils.synthesizeMouseAtCenter(gWin.document.getElementById("next"), {}, gWin); 1.131 + }); 1.132 + EventUtils.synthesizeMouseAtCenter(gWin.document.getElementById("next"), {}, gWin); 1.133 + }); 1.134 + }, gWin); 1.135 +} 1.136 + 1.137 +function test() { 1.138 + waitForExplicitFinish(); 1.139 + run_next_test(); 1.140 +} 1.141 + 1.142 +function end_test() { 1.143 + finish(); 1.144 +} 1.145 + 1.146 +// Test for working updates 1.147 +add_test(function working_test() { 1.148 + setupUI(false, false, function() { 1.149 + waitForClose(function() { 1.150 + is(gWin.document.getElementById("update-progress").value, 2, "Should have finished 2 downloads"); 1.151 + run_next_test(); 1.152 + }); 1.153 + 1.154 + EventUtils.synthesizeMouseAtCenter(gWin.document.getElementById("next"), {}, gWin); 1.155 + }); 1.156 +}); 1.157 + 1.158 +// Test for failed updates 1.159 +add_test(function working_test() { 1.160 + setupUI(true, false, function() { 1.161 + waitForView("errors", function() { 1.162 + is(gWin.document.getElementById("update-progress").value, 2, "Should have finished 2 downloads"); 1.163 + gWin.close(); 1.164 + 1.165 + run_next_test(); 1.166 + }); 1.167 + 1.168 + EventUtils.synthesizeMouseAtCenter(gWin.document.getElementById("next"), {}, gWin); 1.169 + }); 1.170 +}); 1.171 + 1.172 +// Test for failed updates 1.173 +add_test(function working_test() { 1.174 + setupUI(false, true, function() { 1.175 + waitForView("errors", function() { 1.176 + is(gWin.document.getElementById("update-progress").value, 2, "Should have finished 2 downloads"); 1.177 + gWin.close(); 1.178 + 1.179 + run_next_test(); 1.180 + }); 1.181 + 1.182 + EventUtils.synthesizeMouseAtCenter(gWin.document.getElementById("next"), {}, gWin); 1.183 + }); 1.184 +});