1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/toolkit/mozapps/extensions/test/xpcshell/test_bug299716.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,209 @@ 1.4 +/* This Source Code Form is subject to the terms of the Mozilla Public 1.5 + * License, v. 2.0. If a copy of the MPL was not distributed with this 1.6 + * file, You can obtain one at http://mozilla.org/MPL/2.0/. 1.7 + */ 1.8 + 1.9 +// Disables security checking our updates which haven't been signed 1.10 +Services.prefs.setBoolPref("extensions.checkUpdateSecurity", false); 1.11 + 1.12 +// Update check listener. 1.13 +const checkListener = { 1.14 + pendingCount: 0, 1.15 + 1.16 + onUpdateAvailable: function onUpdateAvailable(aAddon, aInstall) { 1.17 + for (let currentAddon of ADDONS) { 1.18 + if (currentAddon.id == aAddon.id) { 1.19 + currentAddon.newInstall = aInstall; 1.20 + return; 1.21 + } 1.22 + } 1.23 + }, 1.24 + 1.25 + onUpdateFinished: function onUpdateFinished() { 1.26 + if (--this.pendingCount == 0) 1.27 + next_test(); 1.28 + } 1.29 +} 1.30 + 1.31 +// Get the HTTP server. 1.32 +Components.utils.import("resource://testing-common/httpd.js"); 1.33 +var testserver; 1.34 + 1.35 +var ADDONS = [ 1.36 + // XPCShell 1.37 + { 1.38 + id: "bug299716-a@tests.mozilla.org", 1.39 + addon: "test_bug299716_a_1", 1.40 + installed: true, 1.41 + item: null, 1.42 + newInstall: null 1.43 + }, 1.44 + 1.45 + // Toolkit 1.46 + { 1.47 + id: "bug299716-b@tests.mozilla.org", 1.48 + addon: "test_bug299716_b_1", 1.49 + installed: true, 1.50 + item: null, 1.51 + newInstall: null 1.52 + }, 1.53 + 1.54 + // XPCShell + Toolkit 1.55 + { 1.56 + id: "bug299716-c@tests.mozilla.org", 1.57 + addon: "test_bug299716_c_1", 1.58 + installed: true, 1.59 + item: null, 1.60 + newInstall: null 1.61 + }, 1.62 + 1.63 + // XPCShell (Toolkit invalid) 1.64 + { 1.65 + id: "bug299716-d@tests.mozilla.org", 1.66 + addon: "test_bug299716_d_1", 1.67 + installed: true, 1.68 + item: null, 1.69 + newInstall: null 1.70 + }, 1.71 + 1.72 + // Toolkit (XPCShell invalid) 1.73 + { 1.74 + id: "bug299716-e@tests.mozilla.org", 1.75 + addon: "test_bug299716_e_1", 1.76 + installed: false, 1.77 + item: null, 1.78 + newInstall: null, 1.79 + failedAppName: "XPCShell" 1.80 + }, 1.81 + 1.82 + // None (XPCShell, Toolkit invalid) 1.83 + { 1.84 + id: "bug299716-f@tests.mozilla.org", 1.85 + addon: "test_bug299716_f_1", 1.86 + installed: false, 1.87 + item: null, 1.88 + newInstall: null, 1.89 + failedAppName: "XPCShell" 1.90 + }, 1.91 + 1.92 + // None (Toolkit invalid) 1.93 + { 1.94 + id: "bug299716-g@tests.mozilla.org", 1.95 + addon: "test_bug299716_g_1", 1.96 + installed: false, 1.97 + item: null, 1.98 + newInstall: null, 1.99 + failedAppName: "Toolkit" 1.100 + }, 1.101 +]; 1.102 + 1.103 +var next_test = function() {}; 1.104 + 1.105 +function do_check_item(aItem, aVersion, aAddonsEntry) { 1.106 + if (aAddonsEntry.installed) { 1.107 + if (aItem == null) 1.108 + do_throw("Addon " + aAddonsEntry.id + " wasn't detected"); 1.109 + if (aItem.version != aVersion) 1.110 + do_throw("Addon " + aAddonsEntry.id + " was version " + aItem.version + " instead of " + aVersion); 1.111 + } else { 1.112 + if (aItem != null) 1.113 + do_throw("Addon " + aAddonsEntry.id + " was detected"); 1.114 + } 1.115 +} 1.116 + 1.117 +/** 1.118 + * Start the test by installing extensions. 1.119 + */ 1.120 +function run_test() { 1.121 + do_test_pending(); 1.122 + 1.123 + createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "5", "1.9"); 1.124 + 1.125 + const dataDir = do_get_file("data"); 1.126 + const addonsDir = do_get_addon(ADDONS[0].addon).parent; 1.127 + 1.128 + // Make sure we can actually get our data files. 1.129 + const xpiFile = addonsDir.clone(); 1.130 + xpiFile.append("test_bug299716_a_2.xpi"); 1.131 + do_check_true(xpiFile.exists()); 1.132 + 1.133 + // Create and configure the HTTP server. 1.134 + testserver = new HttpServer(); 1.135 + testserver.registerDirectory("/addons/", addonsDir); 1.136 + testserver.registerDirectory("/data/", dataDir); 1.137 + testserver.start(4444); 1.138 + 1.139 + // Make sure we can fetch the files over HTTP. 1.140 + const Ci = Components.interfaces; 1.141 + const xhr = Components.classes["@mozilla.org/xmlextras/xmlhttprequest;1"] 1.142 + .createInstance(Ci.nsIXMLHttpRequest) 1.143 + xhr.open("GET", "http://localhost:4444/addons/test_bug299716_a_2.xpi", false); 1.144 + xhr.send(null); 1.145 + do_check_true(xhr.status == 200); 1.146 + 1.147 + xhr.open("GET", "http://localhost:4444/data/test_bug299716.rdf", false); 1.148 + xhr.send(null); 1.149 + do_check_true(xhr.status == 200); 1.150 + 1.151 + // Start the real test. 1.152 + startupManager(); 1.153 + dump("\n\n*** INSTALLING NEW ITEMS\n\n"); 1.154 + 1.155 + installAllFiles([do_get_addon(a.addon) for each (a in ADDONS)], run_test_pt2, 1.156 + true); 1.157 +} 1.158 + 1.159 +/** 1.160 + * Check the versions of all items, and ask the extension manager to find updates. 1.161 + */ 1.162 +function run_test_pt2() { 1.163 + dump("\n\n*** DONE INSTALLING NEW ITEMS\n\n"); 1.164 + dump("\n\n*** RESTARTING EXTENSION MANAGER\n\n"); 1.165 + restartManager(); 1.166 + 1.167 + AddonManager.getAddonsByIDs([a.id for each (a in ADDONS)], function(items) { 1.168 + dump("\n\n*** REQUESTING UPDATE\n\n"); 1.169 + // checkListener will call run_test_pt3(). 1.170 + next_test = run_test_pt3; 1.171 + 1.172 + // Try to update the items. 1.173 + for (var i = 0; i < ADDONS.length; i++) { 1.174 + var item = items[i]; 1.175 + do_check_item(item, "0.1", ADDONS[i]); 1.176 + 1.177 + if (item) { 1.178 + checkListener.pendingCount++; 1.179 + ADDONS[i].item = item; 1.180 + item.findUpdates(checkListener, AddonManager.UPDATE_WHEN_USER_REQUESTED); 1.181 + } 1.182 + } 1.183 + }); 1.184 +} 1.185 + 1.186 +/** 1.187 + * Install new items for each enabled extension. 1.188 + */ 1.189 +function run_test_pt3() { 1.190 + // Install the new items. 1.191 + dump("\n\n*** UPDATING ITEMS\n\n"); 1.192 + completeAllInstalls([a.newInstall for each(a in ADDONS) if (a.newInstall)], 1.193 + run_test_pt4); 1.194 +} 1.195 + 1.196 +/** 1.197 + * Check the final version of each extension. 1.198 + */ 1.199 +function run_test_pt4() { 1.200 + dump("\n\n*** RESTARTING EXTENSION MANAGER\n\n"); 1.201 + restartManager(); 1.202 + 1.203 + dump("\n\n*** FINAL CHECKS\n\n"); 1.204 + AddonManager.getAddonsByIDs([a.id for each (a in ADDONS)], function(items) { 1.205 + for (var i = 0; i < ADDONS.length; i++) { 1.206 + var item = items[i]; 1.207 + do_check_item(item, "0.2", ADDONS[i]); 1.208 + } 1.209 + 1.210 + testserver.stop(do_test_finished); 1.211 + }); 1.212 +}