1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/toolkit/mozapps/extensions/test/xpcshell/test_install.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,1751 @@ 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 +// This verifies that add-ons can be installed from XPI files 1.9 +const Cc = Components.classes; 1.10 +const Ci = Components.interfaces; 1.11 +const Cu = Components.utils; 1.12 + 1.13 +// Maximum error in file modification times. Some file systems don't store 1.14 +// modification times exactly. As long as we are closer than this then it 1.15 +// still passes. 1.16 +const MAX_TIME_DIFFERENCE = 3000; 1.17 + 1.18 +// install.rdf size, icon.png, icon64.png size 1.19 +const ADDON1_SIZE = 705 + 16 + 16; 1.20 + 1.21 +Cu.import("resource://gre/modules/Services.jsm"); 1.22 +Cu.import("resource://gre/modules/NetUtil.jsm"); 1.23 +Cu.import("resource://testing-common/httpd.js"); 1.24 + 1.25 +var testserver; 1.26 +var gInstallDate; 1.27 +var gInstall = null; 1.28 + 1.29 +// The test extension uses an insecure update url. 1.30 +Services.prefs.setBoolPref(PREF_EM_CHECK_UPDATE_SECURITY, false); 1.31 +Services.prefs.setBoolPref(PREF_EM_STRICT_COMPATIBILITY, false); 1.32 + 1.33 +const profileDir = gProfD.clone(); 1.34 +profileDir.append("extensions"); 1.35 + 1.36 +function run_test() { 1.37 + createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "1", "1.9.2"); 1.38 + 1.39 + startupManager(); 1.40 + // Make sure we only register once despite multiple calls 1.41 + AddonManager.addInstallListener(InstallListener); 1.42 + AddonManager.addAddonListener(AddonListener); 1.43 + AddonManager.addInstallListener(InstallListener); 1.44 + AddonManager.addAddonListener(AddonListener); 1.45 + 1.46 + // Create and configure the HTTP server. 1.47 + testserver = new HttpServer(); 1.48 + testserver.registerDirectory("/addons/", do_get_file("addons")); 1.49 + testserver.registerDirectory("/data/", do_get_file("data")); 1.50 + testserver.registerPathHandler("/redirect", function(aRequest, aResponse) { 1.51 + aResponse.setStatusLine(null, 301, "Moved Permanently"); 1.52 + let url = aRequest.host + ":" + aRequest.port + aRequest.queryString; 1.53 + aResponse.setHeader("Location", "http://" + url); 1.54 + }); 1.55 + testserver.start(-1); 1.56 + gPort = testserver.identity.primaryPort; 1.57 + 1.58 + do_test_pending(); 1.59 + run_test_1(); 1.60 +} 1.61 + 1.62 +function end_test() { 1.63 + testserver.stop(do_test_finished); 1.64 +} 1.65 + 1.66 +// Checks that an install from a local file proceeds as expected 1.67 +function run_test_1() { 1.68 + prepare_test({ }, [ 1.69 + "onNewInstall" 1.70 + ]); 1.71 + 1.72 + AddonManager.getInstallForFile(do_get_addon("test_install1"), function(install) { 1.73 + ensure_test_completed(); 1.74 + 1.75 + do_check_neq(install, null); 1.76 + do_check_eq(install.linkedInstalls, null); 1.77 + do_check_eq(install.type, "extension"); 1.78 + do_check_eq(install.version, "1.0"); 1.79 + do_check_eq(install.name, "Test 1"); 1.80 + do_check_eq(install.state, AddonManager.STATE_DOWNLOADED); 1.81 + do_check_true(install.addon.hasResource("install.rdf")); 1.82 + do_check_neq(install.addon.syncGUID, null); 1.83 + do_check_eq(install.addon.install, install); 1.84 + do_check_eq(install.addon.size, ADDON1_SIZE); 1.85 + do_check_true(hasFlag(install.addon.operationsRequiringRestart, 1.86 + AddonManager.OP_NEEDS_RESTART_INSTALL)); 1.87 + let file = do_get_addon("test_install1"); 1.88 + let uri = Services.io.newFileURI(file).spec; 1.89 + do_check_eq(install.addon.getResourceURI("install.rdf").spec, "jar:" + uri + "!/install.rdf"); 1.90 + do_check_eq(install.addon.iconURL, "jar:" + uri + "!/icon.png"); 1.91 + do_check_eq(install.addon.icon64URL, "jar:" + uri + "!/icon64.png"); 1.92 + do_check_eq(install.iconURL, null); 1.93 + 1.94 + do_check_eq(install.sourceURI.spec, uri); 1.95 + do_check_eq(install.addon.sourceURI.spec, uri); 1.96 + 1.97 + AddonManager.getAllInstalls(function(activeInstalls) { 1.98 + do_check_eq(activeInstalls.length, 1); 1.99 + do_check_eq(activeInstalls[0], install); 1.100 + 1.101 + AddonManager.getInstallsByTypes(["foo"], function(fooInstalls) { 1.102 + do_check_eq(fooInstalls.length, 0); 1.103 + 1.104 + AddonManager.getInstallsByTypes(["extension"], function(extensionInstalls) { 1.105 + do_check_eq(extensionInstalls.length, 1); 1.106 + do_check_eq(extensionInstalls[0], install); 1.107 + 1.108 + prepare_test({ 1.109 + "addon1@tests.mozilla.org": [ 1.110 + "onInstalling" 1.111 + ] 1.112 + }, [ 1.113 + "onInstallStarted", 1.114 + "onInstallEnded", 1.115 + ], function() { 1.116 + check_test_1(install.addon.syncGUID); 1.117 + }); 1.118 + install.install(); 1.119 + }); 1.120 + }); 1.121 + }); 1.122 + }); 1.123 +} 1.124 + 1.125 +function check_test_1(installSyncGUID) { 1.126 + ensure_test_completed(); 1.127 + AddonManager.getAddonByID("addon1@tests.mozilla.org", function(olda1) { 1.128 + do_check_eq(olda1, null); 1.129 + 1.130 + AddonManager.getAddonsWithOperationsByTypes(null, callback_soon(function(pendingAddons) { 1.131 + do_check_eq(pendingAddons.length, 1); 1.132 + do_check_eq(pendingAddons[0].id, "addon1@tests.mozilla.org"); 1.133 + let uri = NetUtil.newURI(pendingAddons[0].iconURL); 1.134 + if (uri instanceof AM_Ci.nsIJARURI) { 1.135 + let jarURI = uri.QueryInterface(AM_Ci.nsIJARURI); 1.136 + let archiveURI = jarURI.JARFile; 1.137 + let archiveFile = archiveURI.QueryInterface(AM_Ci.nsIFileURL).file; 1.138 + let zipReader = Cc["@mozilla.org/libjar/zip-reader;1"]. 1.139 + createInstance(Ci.nsIZipReader); 1.140 + try { 1.141 + zipReader.open(archiveFile); 1.142 + do_check_true(zipReader.hasEntry(jarURI.JAREntry)); 1.143 + } 1.144 + finally { 1.145 + zipReader.close(); 1.146 + } 1.147 + } 1.148 + else { 1.149 + let iconFile = uri.QueryInterface(AM_Ci.nsIFileURL).file; 1.150 + do_check_true(iconFile.exists()); 1.151 + } 1.152 + 1.153 + // Make the pending install have a sensible date 1.154 + let updateDate = Date.now(); 1.155 + let extURI = pendingAddons[0].getResourceURI(""); 1.156 + let ext = extURI.QueryInterface(AM_Ci.nsIFileURL).file; 1.157 + setExtensionModifiedTime(ext, updateDate); 1.158 + 1.159 + // The pending add-on cannot be disabled or enabled. 1.160 + do_check_false(hasFlag(pendingAddons[0].permissions, AddonManager.PERM_CAN_ENABLE)); 1.161 + do_check_false(hasFlag(pendingAddons[0].permissions, AddonManager.PERM_CAN_DISABLE)); 1.162 + 1.163 + restartManager(); 1.164 + 1.165 + AddonManager.getAllInstalls(function(activeInstalls) { 1.166 + do_check_eq(activeInstalls, 0); 1.167 + 1.168 + AddonManager.getAddonByID("addon1@tests.mozilla.org", callback_soon(function(a1) { 1.169 + do_check_neq(a1, null); 1.170 + do_check_neq(a1.syncGUID, null); 1.171 + do_check_true(a1.syncGUID.length >= 9); 1.172 + do_check_eq(a1.syncGUID, installSyncGUID); 1.173 + do_check_eq(a1.type, "extension"); 1.174 + do_check_eq(a1.version, "1.0"); 1.175 + do_check_eq(a1.name, "Test 1"); 1.176 + do_check_true(isExtensionInAddonsList(profileDir, a1.id)); 1.177 + do_check_true(do_get_addon("test_install1").exists()); 1.178 + do_check_in_crash_annotation(a1.id, a1.version); 1.179 + do_check_eq(a1.size, ADDON1_SIZE); 1.180 + do_check_false(a1.foreignInstall); 1.181 + 1.182 + do_check_eq(a1.sourceURI.spec, 1.183 + Services.io.newFileURI(do_get_addon("test_install1")).spec); 1.184 + let difference = a1.installDate.getTime() - updateDate; 1.185 + if (Math.abs(difference) > MAX_TIME_DIFFERENCE) 1.186 + do_throw("Add-on install time was out by " + difference + "ms"); 1.187 + 1.188 + difference = a1.updateDate.getTime() - updateDate; 1.189 + if (Math.abs(difference) > MAX_TIME_DIFFERENCE) 1.190 + do_throw("Add-on update time was out by " + difference + "ms"); 1.191 + 1.192 + do_check_true(a1.hasResource("install.rdf")); 1.193 + do_check_false(a1.hasResource("foo.bar")); 1.194 + 1.195 + let uri = do_get_addon_root_uri(profileDir, "addon1@tests.mozilla.org"); 1.196 + do_check_eq(a1.getResourceURI("install.rdf").spec, uri + "install.rdf"); 1.197 + do_check_eq(a1.iconURL, uri + "icon.png"); 1.198 + do_check_eq(a1.icon64URL, uri + "icon64.png"); 1.199 + 1.200 + a1.uninstall(); 1.201 + restartManager(); 1.202 + do_check_not_in_crash_annotation(a1.id, a1.version); 1.203 + 1.204 + do_execute_soon(run_test_2); 1.205 + })); 1.206 + }); 1.207 + })); 1.208 + }); 1.209 +} 1.210 + 1.211 +// Tests that an install from a url downloads. 1.212 +function run_test_2() { 1.213 + let url = "http://localhost:" + gPort + "/addons/test_install2_1.xpi"; 1.214 + AddonManager.getInstallForURL(url, function(install) { 1.215 + do_check_neq(install, null); 1.216 + do_check_eq(install.linkedInstalls, null); 1.217 + do_check_eq(install.version, "1.0"); 1.218 + do_check_eq(install.name, "Test 2"); 1.219 + do_check_eq(install.state, AddonManager.STATE_AVAILABLE); 1.220 + do_check_eq(install.iconURL, null); 1.221 + do_check_eq(install.sourceURI.spec, url); 1.222 + 1.223 + AddonManager.getAllInstalls(function(activeInstalls) { 1.224 + do_check_eq(activeInstalls.length, 1); 1.225 + do_check_eq(activeInstalls[0], install); 1.226 + 1.227 + prepare_test({}, [ 1.228 + "onDownloadStarted", 1.229 + "onDownloadEnded", 1.230 + ], check_test_2); 1.231 + 1.232 + install.addListener({ 1.233 + onDownloadProgress: function(install) { 1.234 + do_execute_soon(function() { 1.235 + Components.utils.forceGC(); 1.236 + }); 1.237 + } 1.238 + }); 1.239 + 1.240 + install.install(); 1.241 + }); 1.242 + }, "application/x-xpinstall", null, "Test 2", null, "1.0"); 1.243 +} 1.244 + 1.245 +function check_test_2(install) { 1.246 + ensure_test_completed(); 1.247 + do_check_eq(install.version, "2.0"); 1.248 + do_check_eq(install.name, "Real Test 2"); 1.249 + do_check_eq(install.state, AddonManager.STATE_DOWNLOADED); 1.250 + do_check_eq(install.addon.install, install); 1.251 + do_check_true(hasFlag(install.addon.operationsRequiringRestart, 1.252 + AddonManager.OP_NEEDS_RESTART_INSTALL)); 1.253 + do_check_eq(install.iconURL, null); 1.254 + 1.255 + // Pause the install here and start it again in run_test_3 1.256 + do_execute_soon(function() { run_test_3(install); }); 1.257 + return false; 1.258 +} 1.259 + 1.260 +// Tests that the downloaded XPI installs ok 1.261 +function run_test_3(install) { 1.262 + prepare_test({ 1.263 + "addon2@tests.mozilla.org": [ 1.264 + "onInstalling" 1.265 + ] 1.266 + }, [ 1.267 + "onInstallStarted", 1.268 + "onInstallEnded", 1.269 + ], check_test_3); 1.270 + install.install(); 1.271 +} 1.272 + 1.273 +function check_test_3(aInstall) { 1.274 + // Make the pending install have a sensible date 1.275 + let updateDate = Date.now(); 1.276 + let extURI = aInstall.addon.getResourceURI(""); 1.277 + let ext = extURI.QueryInterface(AM_Ci.nsIFileURL).file; 1.278 + setExtensionModifiedTime(ext, updateDate); 1.279 + 1.280 + ensure_test_completed(); 1.281 + AddonManager.getAddonByID("addon2@tests.mozilla.org", callback_soon(function(olda2) { 1.282 + do_check_eq(olda2, null); 1.283 + restartManager(); 1.284 + 1.285 + AddonManager.getAllInstalls(function(installs) { 1.286 + do_check_eq(installs, 0); 1.287 + 1.288 + AddonManager.getAddonByID("addon2@tests.mozilla.org", function(a2) { 1.289 + do_check_neq(a2, null); 1.290 + do_check_neq(a2.syncGUID, null); 1.291 + do_check_eq(a2.type, "extension"); 1.292 + do_check_eq(a2.version, "2.0"); 1.293 + do_check_eq(a2.name, "Real Test 2"); 1.294 + do_check_true(isExtensionInAddonsList(profileDir, a2.id)); 1.295 + do_check_true(do_get_addon("test_install2_1").exists()); 1.296 + do_check_in_crash_annotation(a2.id, a2.version); 1.297 + do_check_eq(a2.sourceURI.spec, 1.298 + "http://localhost:" + gPort + "/addons/test_install2_1.xpi"); 1.299 + 1.300 + let difference = a2.installDate.getTime() - updateDate; 1.301 + if (Math.abs(difference) > MAX_TIME_DIFFERENCE) 1.302 + do_throw("Add-on install time was out by " + difference + "ms"); 1.303 + 1.304 + difference = a2.updateDate.getTime() - updateDate; 1.305 + if (Math.abs(difference) > MAX_TIME_DIFFERENCE) 1.306 + do_throw("Add-on update time was out by " + difference + "ms"); 1.307 + 1.308 + gInstallDate = a2.installDate.getTime(); 1.309 + 1.310 + run_test_4(); 1.311 + }); 1.312 + }); 1.313 + })); 1.314 +} 1.315 + 1.316 +// Tests that installing a new version of an existing add-on works 1.317 +function run_test_4() { 1.318 + prepare_test({ }, [ 1.319 + "onNewInstall" 1.320 + ]); 1.321 + 1.322 + let url = "http://localhost:" + gPort + "/addons/test_install2_2.xpi"; 1.323 + AddonManager.getInstallForURL(url, function(install) { 1.324 + ensure_test_completed(); 1.325 + 1.326 + do_check_neq(install, null); 1.327 + do_check_eq(install.version, "3.0"); 1.328 + do_check_eq(install.name, "Test 3"); 1.329 + do_check_eq(install.state, AddonManager.STATE_AVAILABLE); 1.330 + 1.331 + AddonManager.getAllInstalls(function(activeInstalls) { 1.332 + do_check_eq(activeInstalls.length, 1); 1.333 + do_check_eq(activeInstalls[0], install); 1.334 + do_check_eq(install.existingAddon, null); 1.335 + 1.336 + prepare_test({}, [ 1.337 + "onDownloadStarted", 1.338 + "onDownloadEnded", 1.339 + ], check_test_4); 1.340 + install.install(); 1.341 + }); 1.342 + }, "application/x-xpinstall", null, "Test 3", null, "3.0"); 1.343 +} 1.344 + 1.345 +function check_test_4(install) { 1.346 + ensure_test_completed(); 1.347 + 1.348 + do_check_eq(install.version, "3.0"); 1.349 + do_check_eq(install.name, "Real Test 3"); 1.350 + do_check_eq(install.state, AddonManager.STATE_DOWNLOADED); 1.351 + do_check_neq(install.existingAddon); 1.352 + do_check_eq(install.existingAddon.id, "addon2@tests.mozilla.org"); 1.353 + do_check_eq(install.addon.install, install); 1.354 + do_check_true(hasFlag(install.addon.operationsRequiringRestart, 1.355 + AddonManager.OP_NEEDS_RESTART_INSTALL)); 1.356 + 1.357 + run_test_5(); 1.358 + // Installation will continue when there is nothing returned. 1.359 +} 1.360 + 1.361 +// Continue installing the new version 1.362 +function run_test_5() { 1.363 + prepare_test({ 1.364 + "addon2@tests.mozilla.org": [ 1.365 + "onInstalling" 1.366 + ] 1.367 + }, [ 1.368 + "onInstallStarted", 1.369 + "onInstallEnded", 1.370 + ], check_test_5); 1.371 +} 1.372 + 1.373 +function check_test_5(install) { 1.374 + ensure_test_completed(); 1.375 + 1.376 + do_check_eq(install.existingAddon.pendingUpgrade.install, install); 1.377 + 1.378 + AddonManager.getAddonByID("addon2@tests.mozilla.org", function(olda2) { 1.379 + do_check_neq(olda2, null); 1.380 + do_check_true(hasFlag(olda2.pendingOperations, AddonManager.PENDING_UPGRADE)); 1.381 + 1.382 + AddonManager.getInstallsByTypes(null, callback_soon(function(installs) { 1.383 + do_check_eq(installs.length, 1); 1.384 + do_check_eq(installs[0].addon, olda2.pendingUpgrade); 1.385 + restartManager(); 1.386 + 1.387 + AddonManager.getInstallsByTypes(null, function(installs) { 1.388 + do_check_eq(installs.length, 0); 1.389 + 1.390 + AddonManager.getAddonByID("addon2@tests.mozilla.org", function(a2) { 1.391 + do_check_neq(a2, null); 1.392 + do_check_eq(a2.type, "extension"); 1.393 + do_check_eq(a2.version, "3.0"); 1.394 + do_check_eq(a2.name, "Real Test 3"); 1.395 + do_check_true(a2.isActive); 1.396 + do_check_true(isExtensionInAddonsList(profileDir, a2.id)); 1.397 + do_check_true(do_get_addon("test_install2_2").exists()); 1.398 + do_check_in_crash_annotation(a2.id, a2.version); 1.399 + do_check_eq(a2.sourceURI.spec, 1.400 + "http://localhost:" + gPort + "/addons/test_install2_2.xpi"); 1.401 + do_check_false(a2.foreignInstall); 1.402 + 1.403 + do_check_eq(a2.installDate.getTime(), gInstallDate); 1.404 + // Update date should be later (or the same if this test is too fast) 1.405 + do_check_true(a2.installDate <= a2.updateDate); 1.406 + 1.407 + a2.uninstall(); 1.408 + do_execute_soon(run_test_6); 1.409 + }); 1.410 + }); 1.411 + })); 1.412 + }); 1.413 +} 1.414 + 1.415 +// Tests that an install that requires a compatibility update works 1.416 +function run_test_6() { 1.417 + restartManager(); 1.418 + 1.419 + prepare_test({ }, [ 1.420 + "onNewInstall" 1.421 + ]); 1.422 + 1.423 + let url = "http://localhost:" + gPort + "/addons/test_install3.xpi"; 1.424 + AddonManager.getInstallForURL(url, function(install) { 1.425 + ensure_test_completed(); 1.426 + 1.427 + do_check_neq(install, null); 1.428 + do_check_eq(install.version, "1.0"); 1.429 + do_check_eq(install.name, "Real Test 4"); 1.430 + do_check_eq(install.state, AddonManager.STATE_AVAILABLE); 1.431 + 1.432 + AddonManager.getInstallsByTypes(null, function(activeInstalls) { 1.433 + do_check_eq(activeInstalls.length, 1); 1.434 + do_check_eq(activeInstalls[0], install); 1.435 + 1.436 + prepare_test({}, [ 1.437 + "onDownloadStarted", 1.438 + "onDownloadEnded", 1.439 + ], check_test_6); 1.440 + install.install(); 1.441 + }); 1.442 + }, "application/x-xpinstall", null, "Real Test 4", null, "1.0"); 1.443 +} 1.444 + 1.445 +function check_test_6(install) { 1.446 + ensure_test_completed(); 1.447 + do_check_eq(install.version, "1.0"); 1.448 + do_check_eq(install.name, "Real Test 4"); 1.449 + do_check_eq(install.state, AddonManager.STATE_DOWNLOADED); 1.450 + do_check_eq(install.existingAddon, null); 1.451 + do_check_false(install.addon.appDisabled); 1.452 + run_test_7(); 1.453 + return true; 1.454 +} 1.455 + 1.456 +// Continue the install 1.457 +function run_test_7() { 1.458 + prepare_test({ 1.459 + "addon3@tests.mozilla.org": [ 1.460 + "onInstalling" 1.461 + ] 1.462 + }, [ 1.463 + "onInstallStarted", 1.464 + "onInstallEnded", 1.465 + ], check_test_7); 1.466 +} 1.467 + 1.468 +function check_test_7() { 1.469 + ensure_test_completed(); 1.470 + AddonManager.getAddonByID("addon3@tests.mozilla.org", callback_soon(function(olda3) { 1.471 + do_check_eq(olda3, null); 1.472 + restartManager(); 1.473 + 1.474 + AddonManager.getAllInstalls(function(installs) { 1.475 + do_check_eq(installs, 0); 1.476 + 1.477 + AddonManager.getAddonByID("addon3@tests.mozilla.org", function(a3) { 1.478 + do_check_neq(a3, null); 1.479 + do_check_neq(a3.syncGUID, null); 1.480 + do_check_eq(a3.type, "extension"); 1.481 + do_check_eq(a3.version, "1.0"); 1.482 + do_check_eq(a3.name, "Real Test 4"); 1.483 + do_check_true(a3.isActive); 1.484 + do_check_false(a3.appDisabled); 1.485 + do_check_true(isExtensionInAddonsList(profileDir, a3.id)); 1.486 + do_check_true(do_get_addon("test_install3").exists()); 1.487 + a3.uninstall(); 1.488 + do_execute_soon(run_test_8); 1.489 + }); 1.490 + }); 1.491 + })); 1.492 +} 1.493 + 1.494 +function run_test_8() { 1.495 + restartManager(); 1.496 + 1.497 + AddonManager.addInstallListener(InstallListener); 1.498 + AddonManager.addAddonListener(AddonListener); 1.499 + 1.500 + prepare_test({ }, [ 1.501 + "onNewInstall" 1.502 + ]); 1.503 + 1.504 + AddonManager.getInstallForFile(do_get_addon("test_install3"), function(install) { 1.505 + do_check_true(install.addon.isCompatible); 1.506 + 1.507 + prepare_test({ 1.508 + "addon3@tests.mozilla.org": [ 1.509 + "onInstalling" 1.510 + ] 1.511 + }, [ 1.512 + "onInstallStarted", 1.513 + "onInstallEnded", 1.514 + ], callback_soon(check_test_8)); 1.515 + install.install(); 1.516 + }); 1.517 +} 1.518 + 1.519 +function check_test_8() { 1.520 + restartManager(); 1.521 + 1.522 + AddonManager.getAddonByID("addon3@tests.mozilla.org", function(a3) { 1.523 + do_check_neq(a3, null); 1.524 + do_check_neq(a3.syncGUID, null); 1.525 + do_check_eq(a3.type, "extension"); 1.526 + do_check_eq(a3.version, "1.0"); 1.527 + do_check_eq(a3.name, "Real Test 4"); 1.528 + do_check_true(a3.isActive); 1.529 + do_check_false(a3.appDisabled); 1.530 + do_check_true(isExtensionInAddonsList(profileDir, a3.id)); 1.531 + do_check_true(do_get_addon("test_install3").exists()); 1.532 + a3.uninstall(); 1.533 + do_execute_soon(run_test_9); 1.534 + }); 1.535 +} 1.536 + 1.537 +// Test that after cancelling a download it is removed from the active installs 1.538 +function run_test_9() { 1.539 + restartManager(); 1.540 + 1.541 + prepare_test({ }, [ 1.542 + "onNewInstall" 1.543 + ]); 1.544 + 1.545 + let url = "http://localhost:" + gPort + "/addons/test_install3.xpi"; 1.546 + AddonManager.getInstallForURL(url, function(install) { 1.547 + ensure_test_completed(); 1.548 + 1.549 + do_check_neq(install, null); 1.550 + do_check_eq(install.version, "1.0"); 1.551 + do_check_eq(install.name, "Real Test 4"); 1.552 + do_check_eq(install.state, AddonManager.STATE_AVAILABLE); 1.553 + 1.554 + AddonManager.getInstallsByTypes(null, function(activeInstalls) { 1.555 + do_check_eq(activeInstalls.length, 1); 1.556 + do_check_eq(activeInstalls[0], install); 1.557 + 1.558 + prepare_test({}, [ 1.559 + "onDownloadStarted", 1.560 + "onDownloadEnded", 1.561 + ], check_test_9); 1.562 + install.install(); 1.563 + }); 1.564 + }, "application/x-xpinstall", null, "Real Test 4", null, "1.0"); 1.565 +} 1.566 + 1.567 +function check_test_9(install) { 1.568 + prepare_test({}, [ 1.569 + "onDownloadCancelled" 1.570 + ]); 1.571 + 1.572 + install.cancel(); 1.573 + 1.574 + ensure_test_completed(); 1.575 + 1.576 + AddonManager.getAllInstalls(function(activeInstalls) { 1.577 + do_check_eq(activeInstalls.length, 0); 1.578 + 1.579 + run_test_10(); 1.580 + }); 1.581 +} 1.582 + 1.583 +// Tests that after cancelling a pending install it is removed from the active 1.584 +// installs 1.585 +function run_test_10() { 1.586 + prepare_test({ }, [ 1.587 + "onNewInstall" 1.588 + ]); 1.589 + 1.590 + let url = "http://localhost:" + gPort + "/addons/test_install3.xpi"; 1.591 + AddonManager.getInstallForURL(url, function(install) { 1.592 + ensure_test_completed(); 1.593 + 1.594 + do_check_neq(install, null); 1.595 + do_check_eq(install.version, "1.0"); 1.596 + do_check_eq(install.name, "Real Test 4"); 1.597 + do_check_eq(install.state, AddonManager.STATE_AVAILABLE); 1.598 + 1.599 + AddonManager.getInstallsByTypes(null, function(activeInstalls) { 1.600 + do_check_eq(activeInstalls.length, 1); 1.601 + do_check_eq(activeInstalls[0], install); 1.602 + 1.603 + prepare_test({ 1.604 + "addon3@tests.mozilla.org": [ 1.605 + "onInstalling" 1.606 + ] 1.607 + }, [ 1.608 + "onDownloadStarted", 1.609 + "onDownloadEnded", 1.610 + "onInstallStarted", 1.611 + "onInstallEnded" 1.612 + ], check_test_10); 1.613 + install.install(); 1.614 + }); 1.615 + }, "application/x-xpinstall", null, "Real Test 4", null, "1.0"); 1.616 +} 1.617 + 1.618 +function check_test_10(install) { 1.619 + prepare_test({ 1.620 + "addon3@tests.mozilla.org": [ 1.621 + "onOperationCancelled" 1.622 + ] 1.623 + }, [ 1.624 + "onInstallCancelled" 1.625 + ]); 1.626 + 1.627 + install.cancel(); 1.628 + 1.629 + ensure_test_completed(); 1.630 + 1.631 + AddonManager.getAllInstalls(callback_soon(function(activeInstalls) { 1.632 + do_check_eq(activeInstalls.length, 0); 1.633 + 1.634 + restartManager(); 1.635 + 1.636 + // Check that the install did not complete 1.637 + AddonManager.getAddonByID("addon3@tests.mozilla.org", function(a3) { 1.638 + do_check_eq(a3, null); 1.639 + 1.640 + do_execute_soon(run_test_11); 1.641 + }); 1.642 + })); 1.643 +} 1.644 + 1.645 +// Tests that a multi-package install shows up as multiple installs with the 1.646 +// correct sourceURI. 1.647 +function run_test_11() { 1.648 + prepare_test({ }, [ 1.649 + "onNewInstall", 1.650 + "onNewInstall", 1.651 + "onNewInstall", 1.652 + "onNewInstall" 1.653 + ]); 1.654 + 1.655 + AddonManager.getInstallForFile(do_get_addon("test_install4"), function(install) { 1.656 + ensure_test_completed(); 1.657 + do_check_neq(install, null); 1.658 + do_check_neq(install.linkedInstalls, null); 1.659 + do_check_eq(install.linkedInstalls.length, 3); 1.660 + 1.661 + // Might be in any order so sort them based on ID 1.662 + let installs = [install].concat(install.linkedInstalls); 1.663 + installs.sort(function(a, b) { 1.664 + if (a.addon.id < b.addon.id) 1.665 + return -1; 1.666 + if (a.addon.id > b.addon.id) 1.667 + return 1; 1.668 + return 0; 1.669 + }); 1.670 + 1.671 + // Comes from addon4.xpi and is made compatible by an update check 1.672 + do_check_eq(installs[0].sourceURI, install.sourceURI); 1.673 + do_check_eq(installs[0].addon.id, "addon4@tests.mozilla.org"); 1.674 + do_check_false(installs[0].addon.appDisabled); 1.675 + do_check_eq(installs[0].version, "1.0"); 1.676 + do_check_eq(installs[0].name, "Multi Test 1"); 1.677 + do_check_eq(installs[0].state, AddonManager.STATE_DOWNLOADED); 1.678 + do_check_true(hasFlag(installs[0].addon.operationsRequiringRestart, 1.679 + AddonManager.OP_NEEDS_RESTART_INSTALL)); 1.680 + 1.681 + // Comes from addon5.jar and is compatible by default 1.682 + do_check_eq(installs[1].sourceURI, install.sourceURI); 1.683 + do_check_eq(installs[1].addon.id, "addon5@tests.mozilla.org"); 1.684 + do_check_false(installs[1].addon.appDisabled); 1.685 + do_check_eq(installs[1].version, "3.0"); 1.686 + do_check_eq(installs[1].name, "Multi Test 2"); 1.687 + do_check_eq(installs[1].state, AddonManager.STATE_DOWNLOADED); 1.688 + do_check_true(hasFlag(installs[1].addon.operationsRequiringRestart, 1.689 + AddonManager.OP_NEEDS_RESTART_INSTALL)); 1.690 + 1.691 + // Comes from addon6.xpi and would be incompatible with strict compat enabled 1.692 + do_check_eq(installs[2].sourceURI, install.sourceURI); 1.693 + do_check_eq(installs[2].addon.id, "addon6@tests.mozilla.org"); 1.694 + do_check_false(installs[2].addon.appDisabled); 1.695 + do_check_eq(installs[2].version, "2.0"); 1.696 + do_check_eq(installs[2].name, "Multi Test 3"); 1.697 + do_check_eq(installs[2].state, AddonManager.STATE_DOWNLOADED); 1.698 + do_check_true(hasFlag(installs[2].addon.operationsRequiringRestart, 1.699 + AddonManager.OP_NEEDS_RESTART_INSTALL)); 1.700 + 1.701 + // Comes from addon7.jar and is made compatible by an update check 1.702 + do_check_eq(installs[3].sourceURI, install.sourceURI); 1.703 + do_check_eq(installs[3].addon.id, "addon7@tests.mozilla.org"); 1.704 + do_check_false(installs[3].addon.appDisabled); 1.705 + do_check_eq(installs[3].version, "5.0"); 1.706 + do_check_eq(installs[3].name, "Multi Test 4"); 1.707 + do_check_eq(installs[3].state, AddonManager.STATE_DOWNLOADED); 1.708 + do_check_true(hasFlag(installs[3].addon.operationsRequiringRestart, 1.709 + AddonManager.OP_NEEDS_RESTART_INSTALL)); 1.710 + 1.711 + AddonManager.getAllInstalls(function(aInstalls) { 1.712 + do_check_eq(aInstalls.length, 4); 1.713 + 1.714 + prepare_test({ 1.715 + "addon4@tests.mozilla.org": [ 1.716 + "onInstalling" 1.717 + ], 1.718 + "addon5@tests.mozilla.org": [ 1.719 + "onInstalling" 1.720 + ], 1.721 + "addon6@tests.mozilla.org": [ 1.722 + "onInstalling" 1.723 + ], 1.724 + "addon7@tests.mozilla.org": [ 1.725 + "onInstalling" 1.726 + ] 1.727 + }, { 1.728 + "addon4@tests.mozilla.org": [ 1.729 + "onInstallStarted", 1.730 + "onInstallEnded" 1.731 + ], 1.732 + "addon5@tests.mozilla.org": [ 1.733 + "onInstallStarted", 1.734 + "onInstallEnded" 1.735 + ], 1.736 + "addon6@tests.mozilla.org": [ 1.737 + "onInstallStarted", 1.738 + "onInstallEnded" 1.739 + ], 1.740 + "addon7@tests.mozilla.org": [ 1.741 + "onInstallStarted", 1.742 + "onInstallEnded" 1.743 + ] 1.744 + }, callback_soon(check_test_11)); 1.745 + 1.746 + installs[0].install(); 1.747 + installs[1].install(); 1.748 + installs[3].install(); 1.749 + 1.750 + // Note that we install addon6 last. Since it doesn't need a restart to 1.751 + // install it completes asynchronously which would otherwise make the 1.752 + // onInstallStarted/onInstallEnded events go out of sequence unless this 1.753 + // is the last install operation 1.754 + installs[2].install(); 1.755 + }); 1.756 + }); 1.757 +} 1.758 + 1.759 +function check_test_11() { 1.760 + restartManager(); 1.761 + 1.762 + AddonManager.getAddonsByIDs(["addon4@tests.mozilla.org", 1.763 + "addon5@tests.mozilla.org", 1.764 + "addon6@tests.mozilla.org", 1.765 + "addon7@tests.mozilla.org"], 1.766 + function([a4, a5, a6, a7]) { 1.767 + do_check_neq(a4, null); 1.768 + do_check_neq(a5, null); 1.769 + do_check_neq(a6, null); 1.770 + do_check_neq(a7, null); 1.771 + 1.772 + a4.uninstall(); 1.773 + a5.uninstall(); 1.774 + a6.uninstall(); 1.775 + a7.uninstall(); 1.776 + 1.777 + do_execute_soon(run_test_12); 1.778 + }); 1.779 +} 1.780 + 1.781 +// Same as test 11 but for a remote XPI 1.782 +function run_test_12() { 1.783 + restartManager(); 1.784 + 1.785 + prepare_test({ }, [ 1.786 + "onNewInstall", 1.787 + ]); 1.788 + 1.789 + let url = "http://localhost:" + gPort + "/addons/test_install4.xpi"; 1.790 + AddonManager.getInstallForURL(url, function(install) { 1.791 + gInstall = install; 1.792 + 1.793 + ensure_test_completed(); 1.794 + do_check_neq(install, null); 1.795 + do_check_eq(install.linkedInstalls, null); 1.796 + do_check_eq(install.state, AddonManager.STATE_AVAILABLE); 1.797 + 1.798 + prepare_test({ 1.799 + "addon4@tests.mozilla.org": [ 1.800 + "onInstalling" 1.801 + ], 1.802 + "addon5@tests.mozilla.org": [ 1.803 + "onInstalling" 1.804 + ], 1.805 + "addon6@tests.mozilla.org": [ 1.806 + "onInstalling" 1.807 + ], 1.808 + "addon7@tests.mozilla.org": [ 1.809 + "onInstalling" 1.810 + ] 1.811 + }, { 1.812 + "NO_ID": [ 1.813 + "onDownloadStarted", 1.814 + "onNewInstall", 1.815 + "onNewInstall", 1.816 + "onNewInstall", 1.817 + "onDownloadEnded" 1.818 + ], 1.819 + "addon4@tests.mozilla.org": [ 1.820 + "onInstallStarted", 1.821 + "onInstallEnded" 1.822 + ], 1.823 + "addon5@tests.mozilla.org": [ 1.824 + "onInstallStarted", 1.825 + "onInstallEnded" 1.826 + ], 1.827 + "addon6@tests.mozilla.org": [ 1.828 + "onInstallStarted", 1.829 + "onInstallEnded" 1.830 + ], 1.831 + "addon7@tests.mozilla.org": [ 1.832 + "onInstallStarted", 1.833 + "onInstallEnded" 1.834 + ] 1.835 + }, callback_soon(check_test_12)); 1.836 + install.install(); 1.837 + }, "application/x-xpinstall", null, "Multi Test 4"); 1.838 +} 1.839 + 1.840 +function check_test_12() { 1.841 + do_check_eq(gInstall.linkedInstalls.length, 3); 1.842 + 1.843 + // Might be in any order so sort them based on ID 1.844 + let installs = [gInstall].concat(gInstall.linkedInstalls); 1.845 + installs.sort(function(a, b) { 1.846 + if (a.addon.id < b.addon.id) 1.847 + return -1; 1.848 + if (a.addon.id > b.addon.id) 1.849 + return 1; 1.850 + return 0; 1.851 + }); 1.852 + 1.853 + // Comes from addon4.xpi and is made compatible by an update check 1.854 + do_check_eq(installs[0].sourceURI, gInstall.sourceURI); 1.855 + do_check_eq(installs[0].addon.id, "addon4@tests.mozilla.org"); 1.856 + do_check_false(installs[0].addon.appDisabled); 1.857 + do_check_eq(installs[0].version, "1.0"); 1.858 + do_check_eq(installs[0].name, "Multi Test 1"); 1.859 + do_check_eq(installs[0].state, AddonManager.STATE_INSTALLED); 1.860 + 1.861 + // Comes from addon5.jar and is compatible by default 1.862 + do_check_eq(installs[1].sourceURI, gInstall.sourceURI); 1.863 + do_check_eq(installs[1].addon.id, "addon5@tests.mozilla.org"); 1.864 + do_check_false(installs[1].addon.appDisabled); 1.865 + do_check_eq(installs[1].version, "3.0"); 1.866 + do_check_eq(installs[1].name, "Multi Test 2"); 1.867 + do_check_eq(installs[1].state, AddonManager.STATE_INSTALLED); 1.868 + 1.869 + // Comes from addon6.xpi and would be incompatible with strict compat enabled 1.870 + do_check_eq(installs[2].sourceURI, gInstall.sourceURI); 1.871 + do_check_eq(installs[2].addon.id, "addon6@tests.mozilla.org"); 1.872 + do_check_false(installs[2].addon.appDisabled); 1.873 + do_check_eq(installs[2].version, "2.0"); 1.874 + do_check_eq(installs[2].name, "Multi Test 3"); 1.875 + do_check_eq(installs[2].state, AddonManager.STATE_INSTALLED); 1.876 + 1.877 + // Comes from addon7.jar and is made compatible by an update check 1.878 + do_check_eq(installs[3].sourceURI, gInstall.sourceURI); 1.879 + do_check_eq(installs[3].addon.id, "addon7@tests.mozilla.org"); 1.880 + do_check_false(installs[3].addon.appDisabled); 1.881 + do_check_eq(installs[3].version, "5.0"); 1.882 + do_check_eq(installs[3].name, "Multi Test 4"); 1.883 + do_check_eq(installs[3].state, AddonManager.STATE_INSTALLED); 1.884 + 1.885 + restartManager(); 1.886 + 1.887 + AddonManager.getAddonsByIDs(["addon4@tests.mozilla.org", 1.888 + "addon5@tests.mozilla.org", 1.889 + "addon6@tests.mozilla.org", 1.890 + "addon7@tests.mozilla.org"], 1.891 + function([a4, a5, a6, a7]) { 1.892 + do_check_neq(a4, null); 1.893 + do_check_neq(a5, null); 1.894 + do_check_neq(a6, null); 1.895 + do_check_neq(a7, null); 1.896 + 1.897 + a4.uninstall(); 1.898 + a5.uninstall(); 1.899 + a6.uninstall(); 1.900 + a7.uninstall(); 1.901 + 1.902 + do_execute_soon(run_test_13); 1.903 + }); 1.904 +} 1.905 + 1.906 + 1.907 +// Tests that cancelling an upgrade leaves the original add-on's pendingOperations 1.908 +// correct 1.909 +function run_test_13() { 1.910 + restartManager(); 1.911 + 1.912 + installAllFiles([do_get_addon("test_install2_1")], function() { 1.913 + restartManager(); 1.914 + 1.915 + prepare_test({ }, [ 1.916 + "onNewInstall" 1.917 + ]); 1.918 + 1.919 + let url = "http://localhost:" + gPort + "/addons/test_install2_2.xpi"; 1.920 + AddonManager.getInstallForURL(url, function(install) { 1.921 + ensure_test_completed(); 1.922 + 1.923 + do_check_neq(install, null); 1.924 + do_check_eq(install.version, "3.0"); 1.925 + do_check_eq(install.name, "Test 3"); 1.926 + do_check_eq(install.state, AddonManager.STATE_AVAILABLE); 1.927 + 1.928 + AddonManager.getAllInstalls(function(activeInstalls) { 1.929 + do_check_eq(activeInstalls.length, 1); 1.930 + do_check_eq(activeInstalls[0], install); 1.931 + do_check_eq(install.existingAddon, null); 1.932 + 1.933 + prepare_test({ 1.934 + "addon2@tests.mozilla.org": [ 1.935 + "onInstalling" 1.936 + ] 1.937 + }, [ 1.938 + "onDownloadStarted", 1.939 + "onDownloadEnded", 1.940 + "onInstallStarted", 1.941 + "onInstallEnded", 1.942 + ], check_test_13); 1.943 + install.install(); 1.944 + }); 1.945 + }, "application/x-xpinstall", null, "Test 3", null, "3.0"); 1.946 + }); 1.947 +} 1.948 + 1.949 +function check_test_13(install) { 1.950 + ensure_test_completed(); 1.951 + 1.952 + do_check_eq(install.version, "3.0"); 1.953 + do_check_eq(install.name, "Real Test 3"); 1.954 + do_check_eq(install.state, AddonManager.STATE_INSTALLED); 1.955 + do_check_neq(install.existingAddon, null); 1.956 + do_check_eq(install.existingAddon.id, "addon2@tests.mozilla.org"); 1.957 + do_check_eq(install.addon.install, install); 1.958 + 1.959 + AddonManager.getAddonByID("addon2@tests.mozilla.org", callback_soon(function(olda2) { 1.960 + do_check_neq(olda2, null); 1.961 + do_check_true(hasFlag(olda2.pendingOperations, AddonManager.PENDING_UPGRADE)); 1.962 + do_check_eq(olda2.pendingUpgrade, install.addon); 1.963 + 1.964 + do_check_true(hasFlag(install.addon.pendingOperations, 1.965 + AddonManager.PENDING_INSTALL)); 1.966 + 1.967 + prepare_test({ 1.968 + "addon2@tests.mozilla.org": [ 1.969 + "onOperationCancelled" 1.970 + ] 1.971 + }, [ 1.972 + "onInstallCancelled", 1.973 + ]); 1.974 + 1.975 + install.cancel(); 1.976 + 1.977 + do_check_false(hasFlag(install.addon.pendingOperations, AddonManager.PENDING_INSTALL)); 1.978 + 1.979 + do_check_false(hasFlag(olda2.pendingOperations, AddonManager.PENDING_UPGRADE)); 1.980 + do_check_eq(olda2.pendingUpgrade, null); 1.981 + 1.982 + restartManager(); 1.983 + 1.984 + // Check that the upgrade did not complete 1.985 + AddonManager.getAddonByID("addon2@tests.mozilla.org", function(a2) { 1.986 + do_check_eq(a2.version, "2.0"); 1.987 + 1.988 + a2.uninstall(); 1.989 + 1.990 + do_execute_soon(run_test_14); 1.991 + }); 1.992 + })); 1.993 +} 1.994 + 1.995 +// Check that cancelling the install from onDownloadStarted actually cancels it 1.996 +function run_test_14() { 1.997 + restartManager(); 1.998 + 1.999 + prepare_test({ }, [ 1.1000 + "onNewInstall" 1.1001 + ]); 1.1002 + 1.1003 + let url = "http://localhost:" + gPort + "/addons/test_install2_1.xpi"; 1.1004 + AddonManager.getInstallForURL(url, function(install) { 1.1005 + ensure_test_completed(); 1.1006 + 1.1007 + do_check_eq(install.file, null); 1.1008 + 1.1009 + prepare_test({ }, [ 1.1010 + "onDownloadStarted" 1.1011 + ], check_test_14); 1.1012 + install.install(); 1.1013 + }, "application/x-xpinstall"); 1.1014 +} 1.1015 + 1.1016 +function check_test_14(install) { 1.1017 + prepare_test({ }, [ 1.1018 + "onDownloadCancelled" 1.1019 + ]); 1.1020 + 1.1021 + install.cancel(); 1.1022 + 1.1023 + ensure_test_completed(); 1.1024 + 1.1025 + install.addListener({ 1.1026 + onDownloadProgress: function() { 1.1027 + do_throw("Download should not have continued"); 1.1028 + }, 1.1029 + onDownloadEnded: function() { 1.1030 + do_throw("Download should not have continued"); 1.1031 + } 1.1032 + }); 1.1033 + 1.1034 + // Allow the listener to return to see if it continues downloading. The 1.1035 + // The listener only really tests if we give it time to see progress, the 1.1036 + // file check isn't ideal either 1.1037 + do_execute_soon(function() { 1.1038 + do_check_eq(install.file, null); 1.1039 + 1.1040 + run_test_15(); 1.1041 + }); 1.1042 +} 1.1043 + 1.1044 +// Checks that cancelling the install from onDownloadEnded actually cancels it 1.1045 +function run_test_15() { 1.1046 + prepare_test({ }, [ 1.1047 + "onNewInstall" 1.1048 + ]); 1.1049 + 1.1050 + let url = "http://localhost:" + gPort + "/addons/test_install2_1.xpi"; 1.1051 + AddonManager.getInstallForURL(url, function(install) { 1.1052 + ensure_test_completed(); 1.1053 + 1.1054 + do_check_eq(install.file, null); 1.1055 + 1.1056 + prepare_test({ }, [ 1.1057 + "onDownloadStarted", 1.1058 + "onDownloadEnded" 1.1059 + ], check_test_15); 1.1060 + install.install(); 1.1061 + }, "application/x-xpinstall"); 1.1062 +} 1.1063 + 1.1064 +function check_test_15(install) { 1.1065 + prepare_test({ }, [ 1.1066 + "onDownloadCancelled" 1.1067 + ]); 1.1068 + 1.1069 + install.cancel(); 1.1070 + 1.1071 + ensure_test_completed(); 1.1072 + 1.1073 + install.addListener({ 1.1074 + onInstallStarted: function() { 1.1075 + do_throw("Install should not have continued"); 1.1076 + } 1.1077 + }); 1.1078 + 1.1079 + // Allow the listener to return to see if it starts installing 1.1080 + do_execute_soon(run_test_16); 1.1081 +} 1.1082 + 1.1083 +// Verify that the userDisabled value carries over to the upgrade by default 1.1084 +function run_test_16() { 1.1085 + restartManager(); 1.1086 + 1.1087 + let url = "http://localhost:" + gPort + "/addons/test_install2_1.xpi"; 1.1088 + AddonManager.getInstallForURL(url, function(aInstall) { 1.1089 + aInstall.addListener({ 1.1090 + onInstallStarted: function() { 1.1091 + do_check_false(aInstall.addon.userDisabled); 1.1092 + aInstall.addon.userDisabled = true; 1.1093 + }, 1.1094 + 1.1095 + onInstallEnded: function() { 1.1096 + do_execute_soon(function install2_1_ended() { 1.1097 + restartManager(); 1.1098 + 1.1099 + AddonManager.getAddonByID("addon2@tests.mozilla.org", function(a2) { 1.1100 + do_check_true(a2.userDisabled); 1.1101 + do_check_false(a2.isActive); 1.1102 + 1.1103 + let url = "http://localhost:" + gPort + "/addons/test_install2_2.xpi"; 1.1104 + AddonManager.getInstallForURL(url, function(aInstall) { 1.1105 + aInstall.addListener({ 1.1106 + onInstallEnded: function() { 1.1107 + do_execute_soon(function install2_2_ended() { 1.1108 + do_check_true(aInstall.addon.userDisabled); 1.1109 + 1.1110 + restartManager(); 1.1111 + 1.1112 + AddonManager.getAddonByID("addon2@tests.mozilla.org", function(a2) { 1.1113 + do_check_true(a2.userDisabled); 1.1114 + do_check_false(a2.isActive); 1.1115 + 1.1116 + a2.uninstall(); 1.1117 + do_execute_soon(run_test_17); 1.1118 + }); 1.1119 + }); 1.1120 + } 1.1121 + }); 1.1122 + aInstall.install(); 1.1123 + }, "application/x-xpinstall"); 1.1124 + }); 1.1125 + }); 1.1126 + } 1.1127 + }); 1.1128 + aInstall.install(); 1.1129 + }, "application/x-xpinstall"); 1.1130 +} 1.1131 + 1.1132 +// Verify that changing the userDisabled value before onInstallEnded works 1.1133 +function run_test_17() { 1.1134 + restartManager(); 1.1135 + 1.1136 + let url = "http://localhost:" + gPort + "/addons/test_install2_1.xpi"; 1.1137 + AddonManager.getInstallForURL(url, function(aInstall) { 1.1138 + aInstall.addListener({ 1.1139 + onInstallEnded: function() { 1.1140 + do_execute_soon(function install2_1_ended2() { 1.1141 + do_check_false(aInstall.addon.userDisabled); 1.1142 + 1.1143 + restartManager(); 1.1144 + 1.1145 + AddonManager.getAddonByID("addon2@tests.mozilla.org", function(a2) { 1.1146 + do_check_false(a2.userDisabled); 1.1147 + do_check_true(a2.isActive); 1.1148 + 1.1149 + let url = "http://localhost:" + gPort + "/addons/test_install2_2.xpi"; 1.1150 + AddonManager.getInstallForURL(url, function(aInstall) { 1.1151 + aInstall.addListener({ 1.1152 + onInstallStarted: function() { 1.1153 + do_check_false(aInstall.addon.userDisabled); 1.1154 + aInstall.addon.userDisabled = true; 1.1155 + }, 1.1156 + 1.1157 + onInstallEnded: function() { 1.1158 + do_execute_soon(function install2_2_ended2() { 1.1159 + restartManager(); 1.1160 + 1.1161 + AddonManager.getAddonByID("addon2@tests.mozilla.org", function(a2) { 1.1162 + do_check_true(a2.userDisabled); 1.1163 + do_check_false(a2.isActive); 1.1164 + 1.1165 + a2.uninstall(); 1.1166 + do_execute_soon(run_test_18); 1.1167 + }); 1.1168 + }); 1.1169 + } 1.1170 + }); 1.1171 + aInstall.install(); 1.1172 + }, "application/x-xpinstall"); 1.1173 + }); 1.1174 + }); 1.1175 + } 1.1176 + }); 1.1177 + aInstall.install(); 1.1178 + }, "application/x-xpinstall"); 1.1179 +} 1.1180 + 1.1181 +// Verify that changing the userDisabled value before onInstallEnded works 1.1182 +function run_test_18() { 1.1183 + restartManager(); 1.1184 + 1.1185 + let url = "http://localhost:" + gPort + "/addons/test_install2_1.xpi"; 1.1186 + AddonManager.getInstallForURL(url, function(aInstall) { 1.1187 + aInstall.addListener({ 1.1188 + onInstallStarted: function() { 1.1189 + do_check_false(aInstall.addon.userDisabled); 1.1190 + aInstall.addon.userDisabled = true; 1.1191 + }, 1.1192 + 1.1193 + onInstallEnded: function() { 1.1194 + do_execute_soon(function install_2_1_ended3() { 1.1195 + restartManager(); 1.1196 + 1.1197 + AddonManager.getAddonByID("addon2@tests.mozilla.org", function(a2) { 1.1198 + do_check_true(a2.userDisabled); 1.1199 + do_check_false(a2.isActive); 1.1200 + 1.1201 + let url = "http://localhost:" + gPort + "/addons/test_install2_2.xpi"; 1.1202 + AddonManager.getInstallForURL(url, function(aInstall) { 1.1203 + aInstall.addListener({ 1.1204 + onInstallStarted: function() { 1.1205 + do_check_true(aInstall.addon.userDisabled); 1.1206 + aInstall.addon.userDisabled = false; 1.1207 + }, 1.1208 + 1.1209 + onInstallEnded: function() { 1.1210 + do_execute_soon(function install_2_2_ended3() { 1.1211 + restartManager(); 1.1212 + 1.1213 + AddonManager.getAddonByID("addon2@tests.mozilla.org", function(a2) { 1.1214 + do_check_false(a2.userDisabled); 1.1215 + do_check_true(a2.isActive); 1.1216 + 1.1217 + a2.uninstall(); 1.1218 + do_execute_soon(run_test_18_1); 1.1219 + }); 1.1220 + }); 1.1221 + } 1.1222 + }); 1.1223 + aInstall.install(); 1.1224 + }, "application/x-xpinstall"); 1.1225 + }); 1.1226 + }); 1.1227 + } 1.1228 + }); 1.1229 + aInstall.install(); 1.1230 + }, "application/x-xpinstall"); 1.1231 +} 1.1232 + 1.1233 + 1.1234 +// Checks that metadata is not stored if the pref is set to false 1.1235 +function run_test_18_1() { 1.1236 + restartManager(); 1.1237 + 1.1238 + Services.prefs.setBoolPref("extensions.getAddons.cache.enabled", true); 1.1239 + Services.prefs.setCharPref(PREF_GETADDONS_BYIDS, 1.1240 + "http://localhost:" + gPort + "/data/test_install.xml"); 1.1241 + 1.1242 + Services.prefs.setBoolPref("extensions.addon2@tests.mozilla.org.getAddons.cache.enabled", false); 1.1243 + 1.1244 + let url = "http://localhost:" + gPort + "/addons/test_install2_1.xpi"; 1.1245 + AddonManager.getInstallForURL(url, function(aInstall) { 1.1246 + aInstall.addListener({ 1.1247 + onInstallEnded: function(aInstall, aAddon) { 1.1248 + do_execute_soon(function test18_1_install_ended() { 1.1249 + do_check_neq(aAddon.fullDescription, "Repository description"); 1.1250 + 1.1251 + restartManager(); 1.1252 + 1.1253 + AddonManager.getAddonByID("addon2@tests.mozilla.org", function(a2) { 1.1254 + do_check_neq(a2.fullDescription, "Repository description"); 1.1255 + 1.1256 + a2.uninstall(); 1.1257 + do_execute_soon(run_test_19); 1.1258 + }); 1.1259 + }); 1.1260 + } 1.1261 + }); 1.1262 + aInstall.install(); 1.1263 + }, "application/x-xpinstall"); 1.1264 +} 1.1265 + 1.1266 +// Checks that metadata is downloaded for new installs and is visible before and 1.1267 +// after restart 1.1268 +function run_test_19() { 1.1269 + restartManager(); 1.1270 + Services.prefs.setBoolPref("extensions.addon2@tests.mozilla.org.getAddons.cache.enabled", true); 1.1271 + 1.1272 + let url = "http://localhost:" + gPort + "/addons/test_install2_1.xpi"; 1.1273 + AddonManager.getInstallForURL(url, function(aInstall) { 1.1274 + aInstall.addListener({ 1.1275 + onInstallEnded: function(aInstall, aAddon) { 1.1276 + do_execute_soon(function test19_install_ended() { 1.1277 + do_check_eq(aAddon.fullDescription, "Repository description"); 1.1278 + 1.1279 + restartManager(); 1.1280 + 1.1281 + AddonManager.getAddonByID("addon2@tests.mozilla.org", function(a2) { 1.1282 + do_check_eq(a2.fullDescription, "Repository description"); 1.1283 + 1.1284 + a2.uninstall(); 1.1285 + do_execute_soon(run_test_20); 1.1286 + }); 1.1287 + }); 1.1288 + } 1.1289 + }); 1.1290 + aInstall.install(); 1.1291 + }, "application/x-xpinstall"); 1.1292 +} 1.1293 + 1.1294 +// Do the same again to make sure it works when the data is already in the cache 1.1295 +function run_test_20() { 1.1296 + restartManager(); 1.1297 + 1.1298 + let url = "http://localhost:" + gPort + "/addons/test_install2_1.xpi"; 1.1299 + AddonManager.getInstallForURL(url, function(aInstall) { 1.1300 + aInstall.addListener({ 1.1301 + onInstallEnded: function(aInstall, aAddon) { 1.1302 + do_execute_soon(function test20_install_ended() { 1.1303 + do_check_eq(aAddon.fullDescription, "Repository description"); 1.1304 + 1.1305 + restartManager(); 1.1306 + 1.1307 + AddonManager.getAddonByID("addon2@tests.mozilla.org", function(a2) { 1.1308 + do_check_eq(a2.fullDescription, "Repository description"); 1.1309 + 1.1310 + a2.uninstall(); 1.1311 + do_execute_soon(run_test_21); 1.1312 + }); 1.1313 + }); 1.1314 + } 1.1315 + }); 1.1316 + aInstall.install(); 1.1317 + }, "application/x-xpinstall"); 1.1318 +} 1.1319 + 1.1320 +// Verify that installing an add-on that is already pending install cancels the 1.1321 +// first install 1.1322 +function run_test_21() { 1.1323 + restartManager(); 1.1324 + Services.prefs.setBoolPref("extensions.getAddons.cache.enabled", false); 1.1325 + 1.1326 + installAllFiles([do_get_addon("test_install2_1")], function() { 1.1327 + AddonManager.getAllInstalls(function(aInstalls) { 1.1328 + do_check_eq(aInstalls.length, 1); 1.1329 + 1.1330 + prepare_test({ 1.1331 + "addon2@tests.mozilla.org": [ 1.1332 + "onOperationCancelled", 1.1333 + "onInstalling" 1.1334 + ] 1.1335 + }, [ 1.1336 + "onNewInstall", 1.1337 + "onDownloadStarted", 1.1338 + "onDownloadEnded", 1.1339 + "onInstallStarted", 1.1340 + "onInstallCancelled", 1.1341 + "onInstallEnded", 1.1342 + ], check_test_21); 1.1343 + 1.1344 + let url = "http://localhost:" + gPort + "/addons/test_install2_1.xpi"; 1.1345 + AddonManager.getInstallForURL(url, function(aInstall) { 1.1346 + aInstall.install(); 1.1347 + }, "application/x-xpinstall"); 1.1348 + }); 1.1349 + }); 1.1350 +} 1.1351 + 1.1352 +function check_test_21(aInstall) { 1.1353 + AddonManager.getAllInstalls(callback_soon(function(aInstalls) { 1.1354 + do_check_eq(aInstalls.length, 1); 1.1355 + do_check_eq(aInstalls[0], aInstall); 1.1356 + 1.1357 + prepare_test({ 1.1358 + "addon2@tests.mozilla.org": [ 1.1359 + "onOperationCancelled" 1.1360 + ] 1.1361 + }, [ 1.1362 + "onInstallCancelled", 1.1363 + ]); 1.1364 + 1.1365 + aInstall.cancel(); 1.1366 + 1.1367 + ensure_test_completed(); 1.1368 + 1.1369 + restartManager(); 1.1370 + 1.1371 + AddonManager.getAddonByID("addon2@tests.mozilla.org", function(a2) { 1.1372 + do_check_eq(a2, null); 1.1373 + 1.1374 + run_test_22(); 1.1375 + }); 1.1376 + })); 1.1377 +} 1.1378 + 1.1379 +// Tests that an install can be restarted after being cancelled 1.1380 +function run_test_22() { 1.1381 + prepare_test({ }, [ 1.1382 + "onNewInstall" 1.1383 + ]); 1.1384 + 1.1385 + let url = "http://localhost:" + gPort + "/addons/test_install3.xpi"; 1.1386 + AddonManager.getInstallForURL(url, function(aInstall) { 1.1387 + ensure_test_completed(); 1.1388 + 1.1389 + do_check_neq(aInstall, null); 1.1390 + do_check_eq(aInstall.state, AddonManager.STATE_AVAILABLE); 1.1391 + 1.1392 + prepare_test({}, [ 1.1393 + "onDownloadStarted", 1.1394 + "onDownloadEnded", 1.1395 + ], check_test_22); 1.1396 + aInstall.install(); 1.1397 + }, "application/x-xpinstall"); 1.1398 +} 1.1399 + 1.1400 +function check_test_22(aInstall) { 1.1401 + prepare_test({}, [ 1.1402 + "onDownloadCancelled" 1.1403 + ]); 1.1404 + 1.1405 + aInstall.cancel(); 1.1406 + 1.1407 + ensure_test_completed(); 1.1408 + 1.1409 + prepare_test({ 1.1410 + "addon3@tests.mozilla.org": [ 1.1411 + "onInstalling" 1.1412 + ] 1.1413 + }, [ 1.1414 + "onDownloadStarted", 1.1415 + "onDownloadEnded", 1.1416 + "onInstallStarted", 1.1417 + "onInstallEnded" 1.1418 + ], finish_test_22); 1.1419 + 1.1420 + aInstall.install(); 1.1421 +} 1.1422 + 1.1423 +function finish_test_22(aInstall) { 1.1424 + prepare_test({ 1.1425 + "addon3@tests.mozilla.org": [ 1.1426 + "onOperationCancelled" 1.1427 + ] 1.1428 + }, [ 1.1429 + "onInstallCancelled" 1.1430 + ]); 1.1431 + 1.1432 + aInstall.cancel(); 1.1433 + 1.1434 + ensure_test_completed(); 1.1435 + 1.1436 + run_test_23(); 1.1437 +} 1.1438 + 1.1439 +// Tests that an install can be restarted after being cancelled when a hash 1.1440 +// was provided 1.1441 +function run_test_23() { 1.1442 + prepare_test({ }, [ 1.1443 + "onNewInstall" 1.1444 + ]); 1.1445 + 1.1446 + let url = "http://localhost:" + gPort + "/addons/test_install3.xpi"; 1.1447 + AddonManager.getInstallForURL(url, function(aInstall) { 1.1448 + ensure_test_completed(); 1.1449 + 1.1450 + do_check_neq(aInstall, null); 1.1451 + do_check_eq(aInstall.state, AddonManager.STATE_AVAILABLE); 1.1452 + 1.1453 + prepare_test({}, [ 1.1454 + "onDownloadStarted", 1.1455 + "onDownloadEnded", 1.1456 + ], check_test_23); 1.1457 + aInstall.install(); 1.1458 + }, "application/x-xpinstall", do_get_addon_hash("test_install3")); 1.1459 +} 1.1460 + 1.1461 +function check_test_23(aInstall) { 1.1462 + prepare_test({}, [ 1.1463 + "onDownloadCancelled" 1.1464 + ]); 1.1465 + 1.1466 + aInstall.cancel(); 1.1467 + 1.1468 + ensure_test_completed(); 1.1469 + 1.1470 + prepare_test({ 1.1471 + "addon3@tests.mozilla.org": [ 1.1472 + "onInstalling" 1.1473 + ] 1.1474 + }, [ 1.1475 + "onDownloadStarted", 1.1476 + "onDownloadEnded", 1.1477 + "onInstallStarted", 1.1478 + "onInstallEnded" 1.1479 + ], finish_test_23); 1.1480 + 1.1481 + aInstall.install(); 1.1482 +} 1.1483 + 1.1484 +function finish_test_23(aInstall) { 1.1485 + prepare_test({ 1.1486 + "addon3@tests.mozilla.org": [ 1.1487 + "onOperationCancelled" 1.1488 + ] 1.1489 + }, [ 1.1490 + "onInstallCancelled" 1.1491 + ]); 1.1492 + 1.1493 + aInstall.cancel(); 1.1494 + 1.1495 + ensure_test_completed(); 1.1496 + 1.1497 + run_test_24(); 1.1498 +} 1.1499 + 1.1500 +// Tests that an install with a bad hash can be restarted after it fails, though 1.1501 +// it will only fail again 1.1502 +function run_test_24() { 1.1503 + prepare_test({ }, [ 1.1504 + "onNewInstall" 1.1505 + ]); 1.1506 + 1.1507 + let url = "http://localhost:" + gPort + "/addons/test_install3.xpi"; 1.1508 + AddonManager.getInstallForURL(url, function(aInstall) { 1.1509 + ensure_test_completed(); 1.1510 + 1.1511 + do_check_neq(aInstall, null); 1.1512 + do_check_eq(aInstall.state, AddonManager.STATE_AVAILABLE); 1.1513 + 1.1514 + prepare_test({}, [ 1.1515 + "onDownloadStarted", 1.1516 + "onDownloadFailed", 1.1517 + ], check_test_24); 1.1518 + aInstall.install(); 1.1519 + }, "application/x-xpinstall", "sha1:foo"); 1.1520 +} 1.1521 + 1.1522 +function check_test_24(aInstall) { 1.1523 + prepare_test({ }, [ 1.1524 + "onDownloadStarted", 1.1525 + "onDownloadFailed" 1.1526 + ], run_test_25); 1.1527 + 1.1528 + aInstall.install(); 1.1529 +} 1.1530 + 1.1531 +// Tests that installs with a hash for a local file work 1.1532 +function run_test_25() { 1.1533 + prepare_test({ }, [ 1.1534 + "onNewInstall" 1.1535 + ]); 1.1536 + 1.1537 + let url = Services.io.newFileURI(do_get_addon("test_install3")).spec; 1.1538 + AddonManager.getInstallForURL(url, function(aInstall) { 1.1539 + ensure_test_completed(); 1.1540 + 1.1541 + do_check_neq(aInstall, null); 1.1542 + do_check_eq(aInstall.state, AddonManager.STATE_DOWNLOADED); 1.1543 + do_check_eq(aInstall.error, 0); 1.1544 + 1.1545 + prepare_test({ }, [ 1.1546 + "onDownloadCancelled" 1.1547 + ]); 1.1548 + 1.1549 + aInstall.cancel(); 1.1550 + 1.1551 + ensure_test_completed(); 1.1552 + 1.1553 + run_test_26(); 1.1554 + }, "application/x-xpinstall", do_get_addon_hash("test_install3")); 1.1555 +} 1.1556 + 1.1557 +function run_test_26() { 1.1558 + prepare_test({ }, [ 1.1559 + "onNewInstall", 1.1560 + "onDownloadStarted", 1.1561 + "onDownloadCancelled" 1.1562 + ]); 1.1563 + 1.1564 + let observerService = AM_Cc["@mozilla.org/network/http-activity-distributor;1"]. 1.1565 + getService(AM_Ci.nsIHttpActivityDistributor); 1.1566 + observerService.addObserver({ 1.1567 + observeActivity: function(aChannel, aType, aSubtype, aTimestamp, aSizeData, 1.1568 + aStringData) { 1.1569 + aChannel.QueryInterface(AM_Ci.nsIChannel); 1.1570 + // Wait for the final event for the redirected URL 1.1571 + if (aChannel.URI.spec != "http://localhost:" + gPort + "/addons/test_install1.xpi" || 1.1572 + aType != AM_Ci.nsIHttpActivityObserver.ACTIVITY_TYPE_HTTP_TRANSACTION || 1.1573 + aSubtype != AM_Ci.nsIHttpActivityObserver.ACTIVITY_SUBTYPE_TRANSACTION_CLOSE) 1.1574 + return; 1.1575 + 1.1576 + // Request should have been cancelled 1.1577 + do_check_eq(aChannel.status, Components.results.NS_BINDING_ABORTED); 1.1578 + 1.1579 + observerService.removeObserver(this); 1.1580 + 1.1581 + run_test_27(); 1.1582 + } 1.1583 + }); 1.1584 + 1.1585 + let url = "http://localhost:" + gPort + "/redirect?/addons/test_install1.xpi"; 1.1586 + AddonManager.getInstallForURL(url, function(aInstall) { 1.1587 + aInstall.addListener({ 1.1588 + onDownloadProgress: function(aInstall) { 1.1589 + aInstall.cancel(); 1.1590 + } 1.1591 + }); 1.1592 + 1.1593 + aInstall.install(); 1.1594 + }, "application/x-xpinstall"); 1.1595 +} 1.1596 + 1.1597 + 1.1598 +// Tests that an install can be restarted during onDownloadCancelled after being 1.1599 +// cancelled in mid-download 1.1600 +function run_test_27() { 1.1601 + prepare_test({ }, [ 1.1602 + "onNewInstall" 1.1603 + ]); 1.1604 + 1.1605 + let url = "http://localhost:" + gPort + "/addons/test_install3.xpi"; 1.1606 + AddonManager.getInstallForURL(url, function(aInstall) { 1.1607 + ensure_test_completed(); 1.1608 + 1.1609 + do_check_neq(aInstall, null); 1.1610 + do_check_eq(aInstall.state, AddonManager.STATE_AVAILABLE); 1.1611 + 1.1612 + aInstall.addListener({ 1.1613 + onDownloadProgress: function() { 1.1614 + aInstall.removeListener(this); 1.1615 + aInstall.cancel(); 1.1616 + } 1.1617 + }); 1.1618 + 1.1619 + prepare_test({}, [ 1.1620 + "onDownloadStarted", 1.1621 + "onDownloadCancelled", 1.1622 + ], check_test_27); 1.1623 + aInstall.install(); 1.1624 + }, "application/x-xpinstall"); 1.1625 +} 1.1626 + 1.1627 +function check_test_27(aInstall) { 1.1628 + prepare_test({ 1.1629 + "addon3@tests.mozilla.org": [ 1.1630 + "onInstalling" 1.1631 + ] 1.1632 + }, [ 1.1633 + "onDownloadStarted", 1.1634 + "onDownloadEnded", 1.1635 + "onInstallStarted", 1.1636 + "onInstallEnded" 1.1637 + ], finish_test_27); 1.1638 + 1.1639 + aInstall.install(); 1.1640 +} 1.1641 + 1.1642 +function finish_test_27(aInstall) { 1.1643 + prepare_test({ 1.1644 + "addon3@tests.mozilla.org": [ 1.1645 + "onOperationCancelled" 1.1646 + ] 1.1647 + }, [ 1.1648 + "onInstallCancelled" 1.1649 + ]); 1.1650 + 1.1651 + aInstall.cancel(); 1.1652 + 1.1653 + ensure_test_completed(); 1.1654 + 1.1655 + run_test_28(); 1.1656 +} 1.1657 + 1.1658 +// Tests that an install that isn't strictly compatible and has 1.1659 +// binary components correctly has appDisabled set (see bug 702868). 1.1660 +function run_test_28() { 1.1661 + prepare_test({ }, [ 1.1662 + "onNewInstall" 1.1663 + ]); 1.1664 + 1.1665 + let url = "http://localhost:" + gPort + "/addons/test_install5.xpi"; 1.1666 + AddonManager.getInstallForURL(url, function(install) { 1.1667 + ensure_test_completed(); 1.1668 + 1.1669 + do_check_neq(install, null); 1.1670 + do_check_eq(install.version, "1.0"); 1.1671 + do_check_eq(install.name, "Real Test 5"); 1.1672 + do_check_eq(install.state, AddonManager.STATE_AVAILABLE); 1.1673 + 1.1674 + AddonManager.getInstallsByTypes(null, function(activeInstalls) { 1.1675 + do_check_eq(activeInstalls.length, 1); 1.1676 + do_check_eq(activeInstalls[0], install); 1.1677 + 1.1678 + prepare_test({}, [ 1.1679 + "onDownloadStarted", 1.1680 + "onDownloadEnded", 1.1681 + "onInstallStarted" 1.1682 + ], check_test_28); 1.1683 + install.install(); 1.1684 + }); 1.1685 + }, "application/x-xpinstall", null, "Real Test 5", null, "1.0"); 1.1686 +} 1.1687 + 1.1688 +function check_test_28(install) { 1.1689 + ensure_test_completed(); 1.1690 + do_check_eq(install.version, "1.0"); 1.1691 + do_check_eq(install.name, "Real Test 5"); 1.1692 + do_check_eq(install.state, AddonManager.STATE_INSTALLING); 1.1693 + do_check_eq(install.existingAddon, null); 1.1694 + do_check_false(install.addon.isCompatible); 1.1695 + do_check_true(install.addon.appDisabled); 1.1696 + 1.1697 + prepare_test({}, [ 1.1698 + "onInstallCancelled" 1.1699 + ], finish_test_28); 1.1700 + return false; 1.1701 +} 1.1702 + 1.1703 +function finish_test_28(install) { 1.1704 + prepare_test({}, [ 1.1705 + "onDownloadCancelled" 1.1706 + ], run_test_29); 1.1707 + 1.1708 + install.cancel(); 1.1709 +} 1.1710 + 1.1711 +// Tests that an install with a matching compatibility override has appDisabled 1.1712 +// set correctly. 1.1713 +function run_test_29() { 1.1714 + Services.prefs.setBoolPref("extensions.getAddons.cache.enabled", true); 1.1715 + 1.1716 + prepare_test({ }, [ 1.1717 + "onNewInstall" 1.1718 + ]); 1.1719 + 1.1720 + let url = "http://localhost:" + gPort + "/addons/test_install6.xpi"; 1.1721 + AddonManager.getInstallForURL(url, function(install) { 1.1722 + ensure_test_completed(); 1.1723 + 1.1724 + do_check_neq(install, null); 1.1725 + do_check_eq(install.version, "1.0"); 1.1726 + do_check_eq(install.name, "Addon Test 6"); 1.1727 + do_check_eq(install.state, AddonManager.STATE_AVAILABLE); 1.1728 + 1.1729 + AddonManager.getInstallsByTypes(null, function(activeInstalls) { 1.1730 + do_check_eq(activeInstalls.length, 1); 1.1731 + do_check_eq(activeInstalls[0], install); 1.1732 + 1.1733 + prepare_test({}, [ 1.1734 + "onDownloadStarted", 1.1735 + "onDownloadEnded" 1.1736 + ], check_test_29); 1.1737 + install.install(); 1.1738 + }); 1.1739 + }, "application/x-xpinstall", null, "Addon Test 6", null, "1.0"); 1.1740 +} 1.1741 + 1.1742 +function check_test_29(install) { 1.1743 + //ensure_test_completed(); 1.1744 + do_check_eq(install.state, AddonManager.STATE_DOWNLOADED); 1.1745 + do_check_neq(install.addon, null); 1.1746 + do_check_false(install.addon.isCompatible); 1.1747 + do_check_true(install.addon.appDisabled); 1.1748 + 1.1749 + prepare_test({}, [ 1.1750 + "onDownloadCancelled" 1.1751 + ], do_test_finished); 1.1752 + install.cancel(); 1.1753 + return false; 1.1754 +}