diff options
Diffstat (limited to 'toolkit/mozapps/extensions/test/xpcshell/test_install.js')
-rw-r--r-- | toolkit/mozapps/extensions/test/xpcshell/test_install.js | 1843 |
1 files changed, 0 insertions, 1843 deletions
diff --git a/toolkit/mozapps/extensions/test/xpcshell/test_install.js b/toolkit/mozapps/extensions/test/xpcshell/test_install.js deleted file mode 100644 index 60af3a9fd..000000000 --- a/toolkit/mozapps/extensions/test/xpcshell/test_install.js +++ /dev/null @@ -1,1843 +0,0 @@ -/* Any copyright is dedicated to the Public Domain. - * http://creativecommons.org/publicdomain/zero/1.0/ - */ - -// This verifies that add-ons can be installed from XPI files -var Cc = Components.classes; -var Ci = Components.interfaces; -var Cu = Components.utils; - -// install.rdf size, icon.png, icon64.png size -const ADDON1_SIZE = 705 + 16 + 16; - -Cu.import("resource://gre/modules/Services.jsm"); -Cu.import("resource://gre/modules/NetUtil.jsm"); -Cu.import("resource://testing-common/httpd.js"); - -var testserver; -var gInstallDate; -var gInstall = null; - -// The test extension uses an insecure update url. -Services.prefs.setBoolPref(PREF_EM_CHECK_UPDATE_SECURITY, false); -Services.prefs.setBoolPref(PREF_EM_STRICT_COMPATIBILITY, false); - -const profileDir = gProfD.clone(); -profileDir.append("extensions"); - -function run_test() { - createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "1", "1.9.2"); - - startupManager(); - // Make sure we only register once despite multiple calls - AddonManager.addInstallListener(InstallListener); - AddonManager.addAddonListener(AddonListener); - AddonManager.addInstallListener(InstallListener); - AddonManager.addAddonListener(AddonListener); - - // Create and configure the HTTP server. - testserver = new HttpServer(); - testserver.registerDirectory("/addons/", do_get_file("addons")); - testserver.registerDirectory("/data/", do_get_file("data")); - testserver.registerPathHandler("/redirect", function(aRequest, aResponse) { - aResponse.setStatusLine(null, 301, "Moved Permanently"); - let url = aRequest.host + ":" + aRequest.port + aRequest.queryString; - aResponse.setHeader("Location", "http://" + url); - }); - testserver.start(-1); - gPort = testserver.identity.primaryPort; - - do_test_pending(); - run_test_1(); -} - -function end_test() { - testserver.stop(do_test_finished); -} - -// Checks that an install from a local file proceeds as expected -function run_test_1() { - prepare_test({ }, [ - "onNewInstall" - ]); - - AddonManager.getInstallForFile(do_get_addon("test_install1"), function(install) { - ensure_test_completed(); - - do_check_neq(install, null); - do_check_eq(install.linkedInstalls, null); - do_check_eq(install.type, "extension"); - do_check_eq(install.version, "1.0"); - do_check_eq(install.name, "Test 1"); - do_check_eq(install.state, AddonManager.STATE_DOWNLOADED); - do_check_true(install.addon.hasResource("install.rdf")); - do_check_neq(install.addon.syncGUID, null); - do_check_eq(install.addon.install, install); - do_check_eq(install.addon.size, ADDON1_SIZE); - do_check_true(hasFlag(install.addon.operationsRequiringRestart, - AddonManager.OP_NEEDS_RESTART_INSTALL)); - let file = do_get_addon("test_install1"); - let uri = Services.io.newFileURI(file).spec; - do_check_eq(install.addon.getResourceURI("install.rdf").spec, "jar:" + uri + "!/install.rdf"); - do_check_eq(install.addon.iconURL, "jar:" + uri + "!/icon.png"); - do_check_eq(install.addon.icon64URL, "jar:" + uri + "!/icon64.png"); - do_check_eq(install.iconURL, null); - - do_check_eq(install.sourceURI.spec, uri); - do_check_eq(install.addon.sourceURI.spec, uri); - - AddonManager.getAllInstalls(function(activeInstalls) { - do_check_eq(activeInstalls.length, 1); - do_check_eq(activeInstalls[0], install); - - AddonManager.getInstallsByTypes(["foo"], function(fooInstalls) { - do_check_eq(fooInstalls.length, 0); - - AddonManager.getInstallsByTypes(["extension"], function(extensionInstalls) { - do_check_eq(extensionInstalls.length, 1); - do_check_eq(extensionInstalls[0], install); - - prepare_test({ - "addon1@tests.mozilla.org": [ - "onInstalling" - ] - }, [ - "onInstallStarted", - "onInstallEnded", - ], function() { - check_test_1(install.addon.syncGUID); - }); - install.install(); - }); - }); - }); - }); -} - -function check_test_1(installSyncGUID) { - ensure_test_completed(); - AddonManager.getAddonByID("addon1@tests.mozilla.org", function(olda1) { - do_check_eq(olda1, null); - - AddonManager.getAddonsWithOperationsByTypes(null, callback_soon(function(pendingAddons) { - do_check_eq(pendingAddons.length, 1); - do_check_eq(pendingAddons[0].id, "addon1@tests.mozilla.org"); - let uri = NetUtil.newURI(pendingAddons[0].iconURL); - if (uri instanceof AM_Ci.nsIJARURI) { - let jarURI = uri.QueryInterface(AM_Ci.nsIJARURI); - let archiveURI = jarURI.JARFile; - let archiveFile = archiveURI.QueryInterface(AM_Ci.nsIFileURL).file; - let zipReader = Cc["@mozilla.org/libjar/zip-reader;1"]. - createInstance(Ci.nsIZipReader); - try { - zipReader.open(archiveFile); - do_check_true(zipReader.hasEntry(jarURI.JAREntry)); - } - finally { - zipReader.close(); - } - } - else { - let iconFile = uri.QueryInterface(AM_Ci.nsIFileURL).file; - do_check_true(iconFile.exists()); - // Make the iconFile predictably old. - iconFile.lastModifiedTime = Date.now() - MAKE_FILE_OLD_DIFFERENCE; - } - - // Make the pending install have a sensible date - let updateDate = Date.now(); - let extURI = pendingAddons[0].getResourceURI(""); - let ext = extURI.QueryInterface(AM_Ci.nsIFileURL).file; - setExtensionModifiedTime(ext, updateDate); - - // The pending add-on cannot be disabled or enabled. - do_check_false(hasFlag(pendingAddons[0].permissions, AddonManager.PERM_CAN_ENABLE)); - do_check_false(hasFlag(pendingAddons[0].permissions, AddonManager.PERM_CAN_DISABLE)); - - restartManager(); - - AddonManager.getAllInstalls(function(activeInstalls) { - do_check_eq(activeInstalls, 0); - - AddonManager.getAddonByID("addon1@tests.mozilla.org", callback_soon(function(a1) { - do_check_neq(a1, null); - do_check_neq(a1.syncGUID, null); - do_check_true(a1.syncGUID.length >= 9); - do_check_eq(a1.syncGUID, installSyncGUID); - do_check_eq(a1.type, "extension"); - do_check_eq(a1.version, "1.0"); - do_check_eq(a1.name, "Test 1"); - do_check_true(isExtensionInAddonsList(profileDir, a1.id)); - do_check_true(do_get_addon("test_install1").exists()); - do_check_in_crash_annotation(a1.id, a1.version); - do_check_eq(a1.size, ADDON1_SIZE); - do_check_false(a1.foreignInstall); - - do_check_eq(a1.sourceURI.spec, - Services.io.newFileURI(do_get_addon("test_install1")).spec); - let difference = a1.installDate.getTime() - updateDate; - if (Math.abs(difference) > MAX_TIME_DIFFERENCE) - do_throw("Add-on install time was out by " + difference + "ms"); - - difference = a1.updateDate.getTime() - updateDate; - if (Math.abs(difference) > MAX_TIME_DIFFERENCE) - do_throw("Add-on update time was out by " + difference + "ms"); - - do_check_true(a1.hasResource("install.rdf")); - do_check_false(a1.hasResource("foo.bar")); - - let uri2 = do_get_addon_root_uri(profileDir, "addon1@tests.mozilla.org"); - do_check_eq(a1.getResourceURI("install.rdf").spec, uri2 + "install.rdf"); - do_check_eq(a1.iconURL, uri2 + "icon.png"); - do_check_eq(a1.icon64URL, uri2 + "icon64.png"); - - // Ensure that extension bundle (or icon if unpacked) has updated - // lastModifiedDate. - let testURI = a1.getResourceURI(TEST_UNPACKED ? "icon.png" : ""); - let testFile = testURI.QueryInterface(Components.interfaces.nsIFileURL).file; - do_check_true(testFile.exists()); - difference = testFile.lastModifiedTime - Date.now(); - do_check_true(Math.abs(difference) < MAX_TIME_DIFFERENCE); - - a1.uninstall(); - let { id, version } = a1; - restartManager(); - do_check_not_in_crash_annotation(id, version); - - do_execute_soon(run_test_2); - })); - }); - })); - }); -} - -// Tests that an install from a url downloads. -function run_test_2() { - let url = "http://localhost:" + gPort + "/addons/test_install2_1.xpi"; - AddonManager.getInstallForURL(url, function(install) { - do_check_neq(install, null); - do_check_eq(install.linkedInstalls, null); - do_check_eq(install.version, "1.0"); - do_check_eq(install.name, "Test 2"); - do_check_eq(install.state, AddonManager.STATE_AVAILABLE); - do_check_eq(install.iconURL, null); - do_check_eq(install.sourceURI.spec, url); - - AddonManager.getAllInstalls(function(activeInstalls) { - do_check_eq(activeInstalls.length, 1); - do_check_eq(activeInstalls[0], install); - - prepare_test({}, [ - "onDownloadStarted", - "onDownloadEnded", - ], check_test_2); - - install.addListener({ - onDownloadProgress: function() { - do_execute_soon(function() { - Components.utils.forceGC(); - }); - } - }); - - install.install(); - }); - }, "application/x-xpinstall", null, "Test 2", null, "1.0"); -} - -function check_test_2(install) { - ensure_test_completed(); - do_check_eq(install.version, "2.0"); - do_check_eq(install.name, "Real Test 2"); - do_check_eq(install.state, AddonManager.STATE_DOWNLOADED); - do_check_eq(install.addon.install, install); - do_check_true(hasFlag(install.addon.operationsRequiringRestart, - AddonManager.OP_NEEDS_RESTART_INSTALL)); - do_check_eq(install.iconURL, null); - - // Pause the install here and start it again in run_test_3 - do_execute_soon(function() { run_test_3(install); }); - return false; -} - -// Tests that the downloaded XPI installs ok -function run_test_3(install) { - prepare_test({ - "addon2@tests.mozilla.org": [ - "onInstalling" - ] - }, [ - "onInstallStarted", - "onInstallEnded", - ], check_test_3); - install.install(); -} - -function check_test_3(aInstall) { - // Make the pending install have a sensible date - let updateDate = Date.now(); - let extURI = aInstall.addon.getResourceURI(""); - let ext = extURI.QueryInterface(AM_Ci.nsIFileURL).file; - setExtensionModifiedTime(ext, updateDate); - - ensure_test_completed(); - AddonManager.getAddonByID("addon2@tests.mozilla.org", callback_soon(function(olda2) { - do_check_eq(olda2, null); - restartManager(); - - AddonManager.getAllInstalls(function(installs) { - do_check_eq(installs, 0); - - AddonManager.getAddonByID("addon2@tests.mozilla.org", function(a2) { - do_check_neq(a2, null); - do_check_neq(a2.syncGUID, null); - do_check_eq(a2.type, "extension"); - do_check_eq(a2.version, "2.0"); - do_check_eq(a2.name, "Real Test 2"); - do_check_true(isExtensionInAddonsList(profileDir, a2.id)); - do_check_true(do_get_addon("test_install2_1").exists()); - do_check_in_crash_annotation(a2.id, a2.version); - do_check_eq(a2.sourceURI.spec, - "http://localhost:" + gPort + "/addons/test_install2_1.xpi"); - - let difference = a2.installDate.getTime() - updateDate; - if (Math.abs(difference) > MAX_TIME_DIFFERENCE) - do_throw("Add-on install time was out by " + difference + "ms"); - - difference = a2.updateDate.getTime() - updateDate; - if (Math.abs(difference) > MAX_TIME_DIFFERENCE) - do_throw("Add-on update time was out by " + difference + "ms"); - - gInstallDate = a2.installDate.getTime(); - - run_test_4(); - }); - }); - })); -} - -// Tests that installing a new version of an existing add-on works -function run_test_4() { - prepare_test({ }, [ - "onNewInstall" - ]); - - let url = "http://localhost:" + gPort + "/addons/test_install2_2.xpi"; - AddonManager.getInstallForURL(url, function(install) { - ensure_test_completed(); - - do_check_neq(install, null); - do_check_eq(install.version, "3.0"); - do_check_eq(install.name, "Test 3"); - do_check_eq(install.state, AddonManager.STATE_AVAILABLE); - - AddonManager.getAllInstalls(function(activeInstalls) { - do_check_eq(activeInstalls.length, 1); - do_check_eq(activeInstalls[0], install); - do_check_eq(install.existingAddon, null); - - prepare_test({}, [ - "onDownloadStarted", - "onDownloadEnded", - ], check_test_4); - install.install(); - }); - }, "application/x-xpinstall", null, "Test 3", null, "3.0"); -} - -function check_test_4(install) { - ensure_test_completed(); - - do_check_eq(install.version, "3.0"); - do_check_eq(install.name, "Real Test 3"); - do_check_eq(install.state, AddonManager.STATE_DOWNLOADED); - do_check_neq(install.existingAddon); - do_check_eq(install.existingAddon.id, "addon2@tests.mozilla.org"); - do_check_eq(install.addon.install, install); - do_check_true(hasFlag(install.addon.operationsRequiringRestart, - AddonManager.OP_NEEDS_RESTART_INSTALL)); - - run_test_5(); - // Installation will continue when there is nothing returned. -} - -// Continue installing the new version -function run_test_5() { - prepare_test({ - "addon2@tests.mozilla.org": [ - "onInstalling" - ] - }, [ - "onInstallStarted", - "onInstallEnded", - ], check_test_5); -} - -function check_test_5(install) { - ensure_test_completed(); - - do_check_eq(install.existingAddon.pendingUpgrade.install, install); - - AddonManager.getAddonByID("addon2@tests.mozilla.org", function(olda2) { - do_check_neq(olda2, null); - do_check_true(hasFlag(olda2.pendingOperations, AddonManager.PENDING_UPGRADE)); - - AddonManager.getInstallsByTypes(null, callback_soon(function(installs) { - do_check_eq(installs.length, 1); - do_check_eq(installs[0].addon, olda2.pendingUpgrade); - restartManager(); - - AddonManager.getInstallsByTypes(null, function(installs2) { - do_check_eq(installs2.length, 0); - - AddonManager.getAddonByID("addon2@tests.mozilla.org", function(a2) { - do_check_neq(a2, null); - do_check_eq(a2.type, "extension"); - do_check_eq(a2.version, "3.0"); - do_check_eq(a2.name, "Real Test 3"); - do_check_true(a2.isActive); - do_check_true(isExtensionInAddonsList(profileDir, a2.id)); - do_check_true(do_get_addon("test_install2_2").exists()); - do_check_in_crash_annotation(a2.id, a2.version); - do_check_eq(a2.sourceURI.spec, - "http://localhost:" + gPort + "/addons/test_install2_2.xpi"); - do_check_false(a2.foreignInstall); - - do_check_eq(a2.installDate.getTime(), gInstallDate); - // Update date should be later (or the same if this test is too fast) - do_check_true(a2.installDate <= a2.updateDate); - - a2.uninstall(); - do_execute_soon(run_test_6); - }); - }); - })); - }); -} - -// Tests that an install that requires a compatibility update works -function run_test_6() { - restartManager(); - - prepare_test({ }, [ - "onNewInstall" - ]); - - let url = "http://localhost:" + gPort + "/addons/test_install3.xpi"; - AddonManager.getInstallForURL(url, function(install) { - ensure_test_completed(); - - do_check_neq(install, null); - do_check_eq(install.version, "1.0"); - do_check_eq(install.name, "Real Test 4"); - do_check_eq(install.state, AddonManager.STATE_AVAILABLE); - - AddonManager.getInstallsByTypes(null, function(activeInstalls) { - do_check_eq(activeInstalls.length, 1); - do_check_eq(activeInstalls[0], install); - - prepare_test({}, [ - "onDownloadStarted", - "onDownloadEnded", - ], check_test_6); - install.install(); - }); - }, "application/x-xpinstall", null, "Real Test 4", null, "1.0"); -} - -function check_test_6(install) { - ensure_test_completed(); - do_check_eq(install.version, "1.0"); - do_check_eq(install.name, "Real Test 4"); - do_check_eq(install.state, AddonManager.STATE_DOWNLOADED); - do_check_eq(install.existingAddon, null); - do_check_false(install.addon.appDisabled); - run_test_7(); - return true; -} - -// Continue the install -function run_test_7() { - prepare_test({ - "addon3@tests.mozilla.org": [ - "onInstalling" - ] - }, [ - "onInstallStarted", - "onInstallEnded", - ], check_test_7); -} - -function check_test_7() { - ensure_test_completed(); - AddonManager.getAddonByID("addon3@tests.mozilla.org", callback_soon(function(olda3) { - do_check_eq(olda3, null); - restartManager(); - - AddonManager.getAllInstalls(function(installs) { - do_check_eq(installs, 0); - - AddonManager.getAddonByID("addon3@tests.mozilla.org", function(a3) { - do_check_neq(a3, null); - do_check_neq(a3.syncGUID, null); - do_check_eq(a3.type, "extension"); - do_check_eq(a3.version, "1.0"); - do_check_eq(a3.name, "Real Test 4"); - do_check_true(a3.isActive); - do_check_false(a3.appDisabled); - do_check_true(isExtensionInAddonsList(profileDir, a3.id)); - do_check_true(do_get_addon("test_install3").exists()); - a3.uninstall(); - do_execute_soon(run_test_8); - }); - }); - })); -} - -function run_test_8() { - restartManager(); - - AddonManager.addInstallListener(InstallListener); - AddonManager.addAddonListener(AddonListener); - - prepare_test({ }, [ - "onNewInstall" - ]); - - AddonManager.getInstallForFile(do_get_addon("test_install3"), function(install) { - do_check_true(install.addon.isCompatible); - - prepare_test({ - "addon3@tests.mozilla.org": [ - "onInstalling" - ] - }, [ - "onInstallStarted", - "onInstallEnded", - ], callback_soon(check_test_8)); - install.install(); - }); -} - -function check_test_8() { - restartManager(); - - AddonManager.getAddonByID("addon3@tests.mozilla.org", function(a3) { - do_check_neq(a3, null); - do_check_neq(a3.syncGUID, null); - do_check_eq(a3.type, "extension"); - do_check_eq(a3.version, "1.0"); - do_check_eq(a3.name, "Real Test 4"); - do_check_true(a3.isActive); - do_check_false(a3.appDisabled); - do_check_true(isExtensionInAddonsList(profileDir, a3.id)); - do_check_true(do_get_addon("test_install3").exists()); - a3.uninstall(); - do_execute_soon(run_test_9); - }); -} - -// Test that after cancelling a download it is removed from the active installs -function run_test_9() { - restartManager(); - - prepare_test({ }, [ - "onNewInstall" - ]); - - let url = "http://localhost:" + gPort + "/addons/test_install3.xpi"; - AddonManager.getInstallForURL(url, function(install) { - ensure_test_completed(); - - do_check_neq(install, null); - do_check_eq(install.version, "1.0"); - do_check_eq(install.name, "Real Test 4"); - do_check_eq(install.state, AddonManager.STATE_AVAILABLE); - - AddonManager.getInstallsByTypes(null, function(activeInstalls) { - do_check_eq(activeInstalls.length, 1); - do_check_eq(activeInstalls[0], install); - - prepare_test({}, [ - "onDownloadStarted", - "onDownloadEnded", - ], check_test_9); - install.install(); - }); - }, "application/x-xpinstall", null, "Real Test 4", null, "1.0"); -} - -function check_test_9(install) { - prepare_test({}, [ - "onDownloadCancelled" - ], function() { - let file = install.file; - - // Allow the file removal to complete - do_execute_soon(function() { - AddonManager.getAllInstalls(function(activeInstalls) { - do_check_eq(activeInstalls.length, 0); - do_check_false(file.exists()); - - run_test_10(); - }); - }); - }); - - install.cancel(); -} - -// Tests that after cancelling a pending install it is removed from the active -// installs -function run_test_10() { - prepare_test({ }, [ - "onNewInstall" - ]); - - let url = "http://localhost:" + gPort + "/addons/test_install3.xpi"; - AddonManager.getInstallForURL(url, function(install) { - ensure_test_completed(); - - do_check_neq(install, null); - do_check_eq(install.version, "1.0"); - do_check_eq(install.name, "Real Test 4"); - do_check_eq(install.state, AddonManager.STATE_AVAILABLE); - - AddonManager.getInstallsByTypes(null, function(activeInstalls) { - do_check_eq(activeInstalls.length, 1); - do_check_eq(activeInstalls[0], install); - - prepare_test({ - "addon3@tests.mozilla.org": [ - "onInstalling" - ] - }, [ - "onDownloadStarted", - "onDownloadEnded", - "onInstallStarted", - "onInstallEnded" - ], check_test_10); - install.install(); - }); - }, "application/x-xpinstall", null, "Real Test 4", null, "1.0"); -} - -function check_test_10(install) { - prepare_test({ - "addon3@tests.mozilla.org": [ - "onOperationCancelled" - ] - }, [ - "onInstallCancelled" - ]); - - install.cancel(); - - ensure_test_completed(); - - AddonManager.getAllInstalls(callback_soon(function(activeInstalls) { - do_check_eq(activeInstalls.length, 0); - - restartManager(); - - // Check that the install did not complete - AddonManager.getAddonByID("addon3@tests.mozilla.org", function(a3) { - do_check_eq(a3, null); - - do_execute_soon(run_test_11); - }); - })); -} - -// Tests that a multi-package install shows up as multiple installs with the -// correct sourceURI. -function run_test_11() { - prepare_test({ }, [ - "onNewInstall", - "onNewInstall", - "onNewInstall", - "onNewInstall", - "onNewInstall", - "onNewInstall" - ]); - - AddonManager.getInstallForFile(do_get_addon("test_install4"), function(install) { - ensure_test_completed(); - do_check_neq(install, null); - do_check_neq(install.linkedInstalls, null); - do_check_eq(install.linkedInstalls.length, 5); - - // Might be in any order so sort them based on ID - let installs = [install].concat(install.linkedInstalls); - installs.sort(function(a, b) { - if (a.state != b.state) { - if (a.state == AddonManager.STATE_DOWNLOAD_FAILED) - return 1; - else if (b.state == AddonManager.STATE_DOWNLOAD_FAILED) - return -1; - } - - // Don't care what order the failed installs show up in - if (a.state == AddonManager.STATE_DOWNLOAD_FAILED) - return 0; - - if (a.addon.id < b.addon.id) - return -1; - if (a.addon.id > b.addon.id) - return 1; - return 0; - }); - - // Comes from addon4.xpi and is made compatible by an update check - do_check_eq(installs[0].sourceURI, install.sourceURI); - do_check_eq(installs[0].addon.id, "addon4@tests.mozilla.org"); - do_check_false(installs[0].addon.appDisabled); - do_check_eq(installs[0].version, "1.0"); - do_check_eq(installs[0].name, "Multi Test 1"); - do_check_eq(installs[0].state, AddonManager.STATE_DOWNLOADED); - do_check_true(hasFlag(installs[0].addon.operationsRequiringRestart, - AddonManager.OP_NEEDS_RESTART_INSTALL)); - - // Comes from addon5.jar and is compatible by default - do_check_eq(installs[1].sourceURI, install.sourceURI); - do_check_eq(installs[1].addon.id, "addon5@tests.mozilla.org"); - do_check_false(installs[1].addon.appDisabled); - do_check_eq(installs[1].version, "3.0"); - do_check_eq(installs[1].name, "Multi Test 2"); - do_check_eq(installs[1].state, AddonManager.STATE_DOWNLOADED); - do_check_true(hasFlag(installs[1].addon.operationsRequiringRestart, - AddonManager.OP_NEEDS_RESTART_INSTALL)); - - // Comes from addon6.xpi and would be incompatible with strict compat enabled - do_check_eq(installs[2].sourceURI, install.sourceURI); - do_check_eq(installs[2].addon.id, "addon6@tests.mozilla.org"); - do_check_false(installs[2].addon.appDisabled); - do_check_eq(installs[2].version, "2.0"); - do_check_eq(installs[2].name, "Multi Test 3"); - do_check_eq(installs[2].state, AddonManager.STATE_DOWNLOADED); - do_check_true(hasFlag(installs[2].addon.operationsRequiringRestart, - AddonManager.OP_NEEDS_RESTART_INSTALL)); - - // Comes from addon7.jar and is made compatible by an update check - do_check_eq(installs[3].sourceURI, install.sourceURI); - do_check_eq(installs[3].addon.id, "addon7@tests.mozilla.org"); - do_check_false(installs[3].addon.appDisabled); - do_check_eq(installs[3].version, "5.0"); - do_check_eq(installs[3].name, "Multi Test 4"); - do_check_eq(installs[3].state, AddonManager.STATE_DOWNLOADED); - do_check_true(hasFlag(installs[3].addon.operationsRequiringRestart, - AddonManager.OP_NEEDS_RESTART_INSTALL)); - - do_check_eq(installs[4].state, AddonManager.STATE_DOWNLOAD_FAILED); - do_check_eq(installs[4].error, AddonManager.ERROR_CORRUPT_FILE); - - do_check_eq(installs[5].state, AddonManager.STATE_DOWNLOAD_FAILED); - do_check_eq(installs[5].error, AddonManager.ERROR_CORRUPT_FILE); - - AddonManager.getAllInstalls(function(aInstalls) { - do_check_eq(aInstalls.length, 4); - - prepare_test({ - "addon4@tests.mozilla.org": [ - "onInstalling" - ], - "addon5@tests.mozilla.org": [ - "onInstalling" - ], - "addon6@tests.mozilla.org": [ - "onInstalling" - ], - "addon7@tests.mozilla.org": [ - "onInstalling" - ] - }, { - "addon4@tests.mozilla.org": [ - "onInstallStarted", - "onInstallEnded" - ], - "addon5@tests.mozilla.org": [ - "onInstallStarted", - "onInstallEnded" - ], - "addon6@tests.mozilla.org": [ - "onInstallStarted", - "onInstallEnded" - ], - "addon7@tests.mozilla.org": [ - "onInstallStarted", - "onInstallEnded" - ] - }, callback_soon(check_test_11)); - - installs[0].install(); - installs[1].install(); - installs[3].install(); - - // Note that we install addon6 last. Since it doesn't need a restart to - // install it completes asynchronously which would otherwise make the - // onInstallStarted/onInstallEnded events go out of sequence unless this - // is the last install operation - installs[2].install(); - }); - }); -} - -function check_test_11() { - restartManager(); - - AddonManager.getAddonsByIDs(["addon4@tests.mozilla.org", - "addon5@tests.mozilla.org", - "addon6@tests.mozilla.org", - "addon7@tests.mozilla.org"], - function([a4, a5, a6, a7]) { - do_check_neq(a4, null); - do_check_neq(a5, null); - do_check_neq(a6, null); - do_check_neq(a7, null); - - a4.uninstall(); - a5.uninstall(); - a6.uninstall(); - a7.uninstall(); - - do_execute_soon(run_test_12); - }); -} - -// Same as test 11 but for a remote XPI -function run_test_12() { - restartManager(); - - prepare_test({ }, [ - "onNewInstall", - ]); - - let url = "http://localhost:" + gPort + "/addons/test_install4.xpi"; - AddonManager.getInstallForURL(url, function(install) { - gInstall = install; - - ensure_test_completed(); - do_check_neq(install, null); - do_check_eq(install.linkedInstalls, null); - do_check_eq(install.state, AddonManager.STATE_AVAILABLE); - - prepare_test({ - "addon4@tests.mozilla.org": [ - "onInstalling" - ], - "addon5@tests.mozilla.org": [ - "onInstalling" - ], - "addon6@tests.mozilla.org": [ - "onInstalling" - ], - "addon7@tests.mozilla.org": [ - "onInstalling" - ] - }, { - "NO_ID": [ - "onDownloadStarted", - "onNewInstall", - "onNewInstall", - "onNewInstall", - "onNewInstall", - "onNewInstall", - "onDownloadEnded" - ], - "addon4@tests.mozilla.org": [ - "onInstallStarted", - "onInstallEnded" - ], - "addon5@tests.mozilla.org": [ - "onInstallStarted", - "onInstallEnded" - ], - "addon6@tests.mozilla.org": [ - "onInstallStarted", - "onInstallEnded" - ], - "addon7@tests.mozilla.org": [ - "onInstallStarted", - "onInstallEnded" - ] - }, callback_soon(check_test_12)); - install.install(); - }, "application/x-xpinstall", null, "Multi Test 4"); -} - -function check_test_12() { - do_check_eq(gInstall.linkedInstalls.length, 5); - - // Might be in any order so sort them based on ID - let installs = [gInstall].concat(gInstall.linkedInstalls); - installs.sort(function(a, b) { - if (a.state != b.state) { - if (a.state == AddonManager.STATE_DOWNLOAD_FAILED) - return 1; - else if (b.state == AddonManager.STATE_DOWNLOAD_FAILED) - return -1; - } - - // Don't care what order the failed installs show up in - if (a.state == AddonManager.STATE_DOWNLOAD_FAILED) - return 0; - - if (a.addon.id < b.addon.id) - return -1; - if (a.addon.id > b.addon.id) - return 1; - return 0; - }); - - // Comes from addon4.xpi and is made compatible by an update check - do_check_eq(installs[0].sourceURI, gInstall.sourceURI); - do_check_eq(installs[0].addon.id, "addon4@tests.mozilla.org"); - do_check_false(installs[0].addon.appDisabled); - do_check_eq(installs[0].version, "1.0"); - do_check_eq(installs[0].name, "Multi Test 1"); - do_check_eq(installs[0].state, AddonManager.STATE_INSTALLED); - - // Comes from addon5.jar and is compatible by default - do_check_eq(installs[1].sourceURI, gInstall.sourceURI); - do_check_eq(installs[1].addon.id, "addon5@tests.mozilla.org"); - do_check_false(installs[1].addon.appDisabled); - do_check_eq(installs[1].version, "3.0"); - do_check_eq(installs[1].name, "Multi Test 2"); - do_check_eq(installs[1].state, AddonManager.STATE_INSTALLED); - - // Comes from addon6.xpi and would be incompatible with strict compat enabled - do_check_eq(installs[2].sourceURI, gInstall.sourceURI); - do_check_eq(installs[2].addon.id, "addon6@tests.mozilla.org"); - do_check_false(installs[2].addon.appDisabled); - do_check_eq(installs[2].version, "2.0"); - do_check_eq(installs[2].name, "Multi Test 3"); - do_check_eq(installs[2].state, AddonManager.STATE_INSTALLED); - - // Comes from addon7.jar and is made compatible by an update check - do_check_eq(installs[3].sourceURI, gInstall.sourceURI); - do_check_eq(installs[3].addon.id, "addon7@tests.mozilla.org"); - do_check_false(installs[3].addon.appDisabled); - do_check_eq(installs[3].version, "5.0"); - do_check_eq(installs[3].name, "Multi Test 4"); - do_check_eq(installs[3].state, AddonManager.STATE_INSTALLED); - - do_check_eq(installs[4].state, AddonManager.STATE_DOWNLOAD_FAILED); - do_check_eq(installs[4].error, AddonManager.ERROR_CORRUPT_FILE); - - do_check_eq(installs[5].state, AddonManager.STATE_DOWNLOAD_FAILED); - do_check_eq(installs[5].error, AddonManager.ERROR_CORRUPT_FILE); - - restartManager(); - - AddonManager.getAddonsByIDs(["addon4@tests.mozilla.org", - "addon5@tests.mozilla.org", - "addon6@tests.mozilla.org", - "addon7@tests.mozilla.org"], - function([a4, a5, a6, a7]) { - do_check_neq(a4, null); - do_check_neq(a5, null); - do_check_neq(a6, null); - do_check_neq(a7, null); - - a4.uninstall(); - a5.uninstall(); - a6.uninstall(); - a7.uninstall(); - - do_execute_soon(run_test_13); - }); -} - - -// Tests that cancelling an upgrade leaves the original add-on's pendingOperations -// correct -function run_test_13() { - restartManager(); - - installAllFiles([do_get_addon("test_install2_1")], function() { - restartManager(); - - prepare_test({ }, [ - "onNewInstall" - ]); - - let url = "http://localhost:" + gPort + "/addons/test_install2_2.xpi"; - AddonManager.getInstallForURL(url, function(install) { - ensure_test_completed(); - - do_check_neq(install, null); - do_check_eq(install.version, "3.0"); - do_check_eq(install.name, "Test 3"); - do_check_eq(install.state, AddonManager.STATE_AVAILABLE); - - AddonManager.getAllInstalls(function(activeInstalls) { - do_check_eq(activeInstalls.length, 1); - do_check_eq(activeInstalls[0], install); - do_check_eq(install.existingAddon, null); - - prepare_test({ - "addon2@tests.mozilla.org": [ - "onInstalling" - ] - }, [ - "onDownloadStarted", - "onDownloadEnded", - "onInstallStarted", - "onInstallEnded", - ], check_test_13); - install.install(); - }); - }, "application/x-xpinstall", null, "Test 3", null, "3.0"); - }); -} - -function check_test_13(install) { - ensure_test_completed(); - - do_check_eq(install.version, "3.0"); - do_check_eq(install.name, "Real Test 3"); - do_check_eq(install.state, AddonManager.STATE_INSTALLED); - do_check_neq(install.existingAddon, null); - do_check_eq(install.existingAddon.id, "addon2@tests.mozilla.org"); - do_check_eq(install.addon.install, install); - - AddonManager.getAddonByID("addon2@tests.mozilla.org", callback_soon(function(olda2) { - do_check_neq(olda2, null); - do_check_true(hasFlag(olda2.pendingOperations, AddonManager.PENDING_UPGRADE)); - do_check_eq(olda2.pendingUpgrade, install.addon); - - do_check_true(hasFlag(install.addon.pendingOperations, - AddonManager.PENDING_INSTALL)); - - prepare_test({ - "addon2@tests.mozilla.org": [ - "onOperationCancelled" - ] - }, [ - "onInstallCancelled", - ]); - - install.cancel(); - - do_check_false(hasFlag(install.addon.pendingOperations, AddonManager.PENDING_INSTALL)); - - do_check_false(hasFlag(olda2.pendingOperations, AddonManager.PENDING_UPGRADE)); - do_check_eq(olda2.pendingUpgrade, null); - - restartManager(); - - // Check that the upgrade did not complete - AddonManager.getAddonByID("addon2@tests.mozilla.org", function(a2) { - do_check_eq(a2.version, "2.0"); - - a2.uninstall(); - - do_execute_soon(run_test_14); - }); - })); -} - -// Check that cancelling the install from onDownloadStarted actually cancels it -function run_test_14() { - restartManager(); - - prepare_test({ }, [ - "onNewInstall" - ]); - - let url = "http://localhost:" + gPort + "/addons/test_install2_1.xpi"; - AddonManager.getInstallForURL(url, function(install) { - ensure_test_completed(); - - do_check_eq(install.file, null); - - prepare_test({ }, [ - "onDownloadStarted" - ], check_test_14); - install.install(); - }, "application/x-xpinstall"); -} - -function check_test_14(install) { - prepare_test({ }, [ - "onDownloadCancelled" - ], function() { - let file = install.file; - - install.addListener({ - onDownloadProgress: function() { - do_throw("Download should not have continued"); - }, - onDownloadEnded: function() { - do_throw("Download should not have continued"); - } - }); - - // Allow the listener to return to see if it continues downloading. The - // The listener only really tests if we give it time to see progress, the - // file check isn't ideal either - do_execute_soon(function() { - do_check_false(file.exists()); - - run_test_15(); - }); - }); - - // Wait for the channel to be ready to cancel - do_execute_soon(function() { - install.cancel(); - }); -} - -// Checks that cancelling the install from onDownloadEnded actually cancels it -function run_test_15() { - prepare_test({ }, [ - "onNewInstall" - ]); - - let url = "http://localhost:" + gPort + "/addons/test_install2_1.xpi"; - AddonManager.getInstallForURL(url, function(install) { - ensure_test_completed(); - - do_check_eq(install.file, null); - - prepare_test({ }, [ - "onDownloadStarted", - "onDownloadEnded" - ], check_test_15); - install.install(); - }, "application/x-xpinstall"); -} - -function check_test_15(install) { - prepare_test({ }, [ - "onDownloadCancelled" - ]); - - install.cancel(); - - ensure_test_completed(); - - install.addListener({ - onInstallStarted: function() { - do_throw("Install should not have continued"); - } - }); - - // Allow the listener to return to see if it starts installing - do_execute_soon(run_test_16); -} - -// Verify that the userDisabled value carries over to the upgrade by default -function run_test_16() { - restartManager(); - - let url = "http://localhost:" + gPort + "/addons/test_install2_1.xpi"; - AddonManager.getInstallForURL(url, function(aInstall) { - aInstall.addListener({ - onInstallStarted: function() { - do_check_false(aInstall.addon.userDisabled); - aInstall.addon.userDisabled = true; - }, - - onInstallEnded: function() { - do_execute_soon(function install2_1_ended() { - restartManager(); - - AddonManager.getAddonByID("addon2@tests.mozilla.org", function(a2) { - do_check_true(a2.userDisabled); - do_check_false(a2.isActive); - - let url_2 = "http://localhost:" + gPort + "/addons/test_install2_2.xpi"; - AddonManager.getInstallForURL(url_2, function(aInstall_2) { - aInstall_2.addListener({ - onInstallEnded: function() { - do_execute_soon(function install2_2_ended() { - do_check_true(aInstall_2.addon.userDisabled); - - restartManager(); - - AddonManager.getAddonByID("addon2@tests.mozilla.org", function(a2_2) { - do_check_true(a2_2.userDisabled); - do_check_false(a2_2.isActive); - - a2_2.uninstall(); - do_execute_soon(run_test_17); - }); - }); - } - }); - aInstall_2.install(); - }, "application/x-xpinstall"); - }); - }); - } - }); - aInstall.install(); - }, "application/x-xpinstall"); -} - -// Verify that changing the userDisabled value before onInstallEnded works -function run_test_17() { - restartManager(); - - let url = "http://localhost:" + gPort + "/addons/test_install2_1.xpi"; - AddonManager.getInstallForURL(url, function(aInstall) { - aInstall.addListener({ - onInstallEnded: function() { - do_execute_soon(function install2_1_ended2() { - do_check_false(aInstall.addon.userDisabled); - - restartManager(); - - AddonManager.getAddonByID("addon2@tests.mozilla.org", function(a2) { - do_check_false(a2.userDisabled); - do_check_true(a2.isActive); - - let url_2 = "http://localhost:" + gPort + "/addons/test_install2_2.xpi"; - AddonManager.getInstallForURL(url_2, function(aInstall_2) { - aInstall_2.addListener({ - onInstallStarted: function() { - do_check_false(aInstall_2.addon.userDisabled); - aInstall_2.addon.userDisabled = true; - }, - - onInstallEnded: function() { - do_execute_soon(function install2_2_ended2() { - restartManager(); - - AddonManager.getAddonByID("addon2@tests.mozilla.org", function(a2_2) { - do_check_true(a2_2.userDisabled); - do_check_false(a2_2.isActive); - - a2_2.uninstall(); - do_execute_soon(run_test_18); - }); - }); - } - }); - aInstall_2.install(); - }, "application/x-xpinstall"); - }); - }); - } - }); - aInstall.install(); - }, "application/x-xpinstall"); -} - -// Verify that changing the userDisabled value before onInstallEnded works -function run_test_18() { - restartManager(); - - let url = "http://localhost:" + gPort + "/addons/test_install2_1.xpi"; - AddonManager.getInstallForURL(url, function(aInstall) { - aInstall.addListener({ - onInstallStarted: function() { - do_check_false(aInstall.addon.userDisabled); - aInstall.addon.userDisabled = true; - }, - - onInstallEnded: function() { - do_execute_soon(function install_2_1_ended3() { - restartManager(); - - AddonManager.getAddonByID("addon2@tests.mozilla.org", function(a2) { - do_check_true(a2.userDisabled); - do_check_false(a2.isActive); - - let url_2 = "http://localhost:" + gPort + "/addons/test_install2_2.xpi"; - AddonManager.getInstallForURL(url_2, function(aInstall_2) { - aInstall_2.addListener({ - onInstallStarted: function() { - do_check_true(aInstall_2.addon.userDisabled); - aInstall_2.addon.userDisabled = false; - }, - - onInstallEnded: function() { - do_execute_soon(function install_2_2_ended3() { - restartManager(); - - AddonManager.getAddonByID("addon2@tests.mozilla.org", function(a2_2) { - do_check_false(a2_2.userDisabled); - do_check_true(a2_2.isActive); - - a2_2.uninstall(); - do_execute_soon(run_test_18_1); - }); - }); - } - }); - aInstall_2.install(); - }, "application/x-xpinstall"); - }); - }); - } - }); - aInstall.install(); - }, "application/x-xpinstall"); -} - - -// Checks that metadata is not stored if the pref is set to false -function run_test_18_1() { - restartManager(); - - Services.prefs.setBoolPref("extensions.getAddons.cache.enabled", true); - Services.prefs.setCharPref(PREF_GETADDONS_BYIDS, - "http://localhost:" + gPort + "/data/test_install.xml"); - - Services.prefs.setBoolPref("extensions.addon2@tests.mozilla.org.getAddons.cache.enabled", false); - - let url = "http://localhost:" + gPort + "/addons/test_install2_1.xpi"; - AddonManager.getInstallForURL(url, function(aInstall) { - aInstall.addListener({ - onInstallEnded: function(unused, aAddon) { - do_execute_soon(function test18_1_install_ended() { - do_check_neq(aAddon.fullDescription, "Repository description"); - - restartManager(); - - AddonManager.getAddonByID("addon2@tests.mozilla.org", function(a2) { - do_check_neq(a2.fullDescription, "Repository description"); - - a2.uninstall(); - do_execute_soon(run_test_19); - }); - }); - } - }); - aInstall.install(); - }, "application/x-xpinstall"); -} - -// Checks that metadata is downloaded for new installs and is visible before and -// after restart -function run_test_19() { - restartManager(); - Services.prefs.setBoolPref("extensions.addon2@tests.mozilla.org.getAddons.cache.enabled", true); - - let url = "http://localhost:" + gPort + "/addons/test_install2_1.xpi"; - AddonManager.getInstallForURL(url, function(aInstall) { - aInstall.addListener({ - onInstallEnded: function(unused, aAddon) { - do_execute_soon(function test19_install_ended() { - do_check_eq(aAddon.fullDescription, "Repository description"); - - restartManager(); - - AddonManager.getAddonByID("addon2@tests.mozilla.org", function(a2) { - do_check_eq(a2.fullDescription, "Repository description"); - - a2.uninstall(); - do_execute_soon(run_test_20); - }); - }); - } - }); - aInstall.install(); - }, "application/x-xpinstall"); -} - -// Do the same again to make sure it works when the data is already in the cache -function run_test_20() { - restartManager(); - - let url = "http://localhost:" + gPort + "/addons/test_install2_1.xpi"; - AddonManager.getInstallForURL(url, function(aInstall) { - aInstall.addListener({ - onInstallEnded: function(unused, aAddon) { - do_execute_soon(function test20_install_ended() { - do_check_eq(aAddon.fullDescription, "Repository description"); - - restartManager(); - - AddonManager.getAddonByID("addon2@tests.mozilla.org", function(a2) { - do_check_eq(a2.fullDescription, "Repository description"); - - a2.uninstall(); - do_execute_soon(run_test_21); - }); - }); - } - }); - aInstall.install(); - }, "application/x-xpinstall"); -} - -// Verify that installing an add-on that is already pending install cancels the -// first install -function run_test_21() { - restartManager(); - Services.prefs.setBoolPref("extensions.getAddons.cache.enabled", false); - - installAllFiles([do_get_addon("test_install2_1")], function() { - AddonManager.getAllInstalls(function(aInstalls) { - do_check_eq(aInstalls.length, 1); - - prepare_test({ - "addon2@tests.mozilla.org": [ - "onOperationCancelled", - "onInstalling" - ] - }, [ - "onNewInstall", - "onDownloadStarted", - "onDownloadEnded", - "onInstallStarted", - "onInstallCancelled", - "onInstallEnded", - ], check_test_21); - - let url = "http://localhost:" + gPort + "/addons/test_install2_1.xpi"; - AddonManager.getInstallForURL(url, function(aInstall) { - aInstall.install(); - }, "application/x-xpinstall"); - }); - }); -} - -function check_test_21(aInstall) { - AddonManager.getAllInstalls(callback_soon(function(aInstalls) { - do_check_eq(aInstalls.length, 1); - do_check_eq(aInstalls[0], aInstall); - - prepare_test({ - "addon2@tests.mozilla.org": [ - "onOperationCancelled" - ] - }, [ - "onInstallCancelled", - ]); - - aInstall.cancel(); - - ensure_test_completed(); - - restartManager(); - - AddonManager.getAddonByID("addon2@tests.mozilla.org", function(a2) { - do_check_eq(a2, null); - - run_test_22(); - }); - })); -} - -// Tests that an install can be restarted after being cancelled -function run_test_22() { - prepare_test({ }, [ - "onNewInstall" - ]); - - let url = "http://localhost:" + gPort + "/addons/test_install3.xpi"; - AddonManager.getInstallForURL(url, function(aInstall) { - ensure_test_completed(); - - do_check_neq(aInstall, null); - do_check_eq(aInstall.state, AddonManager.STATE_AVAILABLE); - - prepare_test({}, [ - "onDownloadStarted", - "onDownloadEnded", - ], check_test_22); - aInstall.install(); - }, "application/x-xpinstall"); -} - -function check_test_22(aInstall) { - prepare_test({}, [ - "onDownloadCancelled" - ]); - - aInstall.cancel(); - - ensure_test_completed(); - - prepare_test({ - "addon3@tests.mozilla.org": [ - "onInstalling" - ] - }, [ - "onDownloadStarted", - "onDownloadEnded", - "onInstallStarted", - "onInstallEnded" - ], finish_test_22); - - aInstall.install(); -} - -function finish_test_22(aInstall) { - prepare_test({ - "addon3@tests.mozilla.org": [ - "onOperationCancelled" - ] - }, [ - "onInstallCancelled" - ]); - - aInstall.cancel(); - - ensure_test_completed(); - - run_test_23(); -} - -// Tests that an install can be restarted after being cancelled when a hash -// was provided -function run_test_23() { - prepare_test({ }, [ - "onNewInstall" - ]); - - let url = "http://localhost:" + gPort + "/addons/test_install3.xpi"; - AddonManager.getInstallForURL(url, function(aInstall) { - ensure_test_completed(); - - do_check_neq(aInstall, null); - do_check_eq(aInstall.state, AddonManager.STATE_AVAILABLE); - - prepare_test({}, [ - "onDownloadStarted", - "onDownloadEnded", - ], check_test_23); - aInstall.install(); - }, "application/x-xpinstall", do_get_addon_hash("test_install3")); -} - -function check_test_23(aInstall) { - prepare_test({}, [ - "onDownloadCancelled" - ]); - - aInstall.cancel(); - - ensure_test_completed(); - - prepare_test({ - "addon3@tests.mozilla.org": [ - "onInstalling" - ] - }, [ - "onDownloadStarted", - "onDownloadEnded", - "onInstallStarted", - "onInstallEnded" - ], finish_test_23); - - aInstall.install(); -} - -function finish_test_23(aInstall) { - prepare_test({ - "addon3@tests.mozilla.org": [ - "onOperationCancelled" - ] - }, [ - "onInstallCancelled" - ]); - - aInstall.cancel(); - - ensure_test_completed(); - - run_test_24(); -} - -// Tests that an install with a bad hash can be restarted after it fails, though -// it will only fail again -function run_test_24() { - prepare_test({ }, [ - "onNewInstall" - ]); - - let url = "http://localhost:" + gPort + "/addons/test_install3.xpi"; - AddonManager.getInstallForURL(url, function(aInstall) { - ensure_test_completed(); - - do_check_neq(aInstall, null); - do_check_eq(aInstall.state, AddonManager.STATE_AVAILABLE); - - prepare_test({}, [ - "onDownloadStarted", - "onDownloadFailed", - ], check_test_24); - aInstall.install(); - }, "application/x-xpinstall", "sha1:foo"); -} - -function check_test_24(aInstall) { - prepare_test({ }, [ - "onDownloadStarted", - "onDownloadFailed" - ], run_test_25); - - aInstall.install(); -} - -// Tests that installs with a hash for a local file work -function run_test_25() { - prepare_test({ }, [ - "onNewInstall" - ]); - - let url = Services.io.newFileURI(do_get_addon("test_install3")).spec; - AddonManager.getInstallForURL(url, function(aInstall) { - ensure_test_completed(); - - do_check_neq(aInstall, null); - do_check_eq(aInstall.state, AddonManager.STATE_DOWNLOADED); - do_check_eq(aInstall.error, 0); - - prepare_test({ }, [ - "onDownloadCancelled" - ]); - - aInstall.cancel(); - - ensure_test_completed(); - - run_test_26(); - }, "application/x-xpinstall", do_get_addon_hash("test_install3")); -} - -function run_test_26() { - prepare_test({ }, [ - "onNewInstall", - "onDownloadStarted", - "onDownloadCancelled" - ]); - - let observerService = AM_Cc["@mozilla.org/network/http-activity-distributor;1"]. - getService(AM_Ci.nsIHttpActivityDistributor); - observerService.addObserver({ - observeActivity: function(aChannel, aType, aSubtype, aTimestamp, aSizeData, - aStringData) { - aChannel.QueryInterface(AM_Ci.nsIChannel); - // Wait for the final event for the redirected URL - if (aChannel.URI.spec != "http://localhost:" + gPort + "/addons/test_install1.xpi" || - aType != AM_Ci.nsIHttpActivityObserver.ACTIVITY_TYPE_HTTP_TRANSACTION || - aSubtype != AM_Ci.nsIHttpActivityObserver.ACTIVITY_SUBTYPE_TRANSACTION_CLOSE) - return; - - // Request should have been cancelled - do_check_eq(aChannel.status, Components.results.NS_BINDING_ABORTED); - - observerService.removeObserver(this); - - run_test_27(); - } - }); - - let url = "http://localhost:" + gPort + "/redirect?/addons/test_install1.xpi"; - AddonManager.getInstallForURL(url, function(aInstall) { - aInstall.addListener({ - onDownloadProgress: function(aDownloadProgressInstall) { - aDownloadProgressInstall.cancel(); - } - }); - - aInstall.install(); - }, "application/x-xpinstall"); -} - - -// Tests that an install can be restarted during onDownloadCancelled after being -// cancelled in mid-download -function run_test_27() { - prepare_test({ }, [ - "onNewInstall" - ]); - - let url = "http://localhost:" + gPort + "/addons/test_install3.xpi"; - AddonManager.getInstallForURL(url, function(aInstall) { - ensure_test_completed(); - - do_check_neq(aInstall, null); - do_check_eq(aInstall.state, AddonManager.STATE_AVAILABLE); - - aInstall.addListener({ - onDownloadProgress: function() { - aInstall.removeListener(this); - aInstall.cancel(); - } - }); - - prepare_test({}, [ - "onDownloadStarted", - "onDownloadCancelled", - ], check_test_27); - aInstall.install(); - }, "application/x-xpinstall"); -} - -function check_test_27(aInstall) { - prepare_test({ - "addon3@tests.mozilla.org": [ - "onInstalling" - ] - }, [ - "onDownloadStarted", - "onDownloadEnded", - "onInstallStarted", - "onInstallEnded" - ], finish_test_27); - - let file = aInstall.file; - aInstall.install(); - do_check_neq(file.path, aInstall.file.path); - do_check_false(file.exists()); -} - -function finish_test_27(aInstall) { - prepare_test({ - "addon3@tests.mozilla.org": [ - "onOperationCancelled" - ] - }, [ - "onInstallCancelled" - ]); - - aInstall.cancel(); - - ensure_test_completed(); - - run_test_28(); -} - -// Tests that an install that isn't strictly compatible and has -// binary components correctly has appDisabled set (see bug 702868). -function run_test_28() { - prepare_test({ }, [ - "onNewInstall" - ]); - - let url = "http://localhost:" + gPort + "/addons/test_install5.xpi"; - AddonManager.getInstallForURL(url, function(install) { - ensure_test_completed(); - - do_check_neq(install, null); - do_check_eq(install.version, "1.0"); - do_check_eq(install.name, "Real Test 5"); - do_check_eq(install.state, AddonManager.STATE_AVAILABLE); - - AddonManager.getInstallsByTypes(null, function(activeInstalls) { - do_check_eq(activeInstalls.length, 1); - do_check_eq(activeInstalls[0], install); - - prepare_test({}, [ - "onDownloadStarted", - "onDownloadEnded", - "onInstallStarted" - ], check_test_28); - install.install(); - }); - }, "application/x-xpinstall", null, "Real Test 5", null, "1.0"); -} - -function check_test_28(install) { - ensure_test_completed(); - do_check_eq(install.version, "1.0"); - do_check_eq(install.name, "Real Test 5"); - do_check_eq(install.state, AddonManager.STATE_INSTALLING); - do_check_eq(install.existingAddon, null); - do_check_false(install.addon.isCompatible); - do_check_true(install.addon.appDisabled); - - prepare_test({}, [ - "onInstallCancelled" - ], finish_test_28); - return false; -} - -function finish_test_28(install) { - prepare_test({}, [ - "onDownloadCancelled" - ], run_test_29); - - install.cancel(); -} - -// Tests that an install with a matching compatibility override has appDisabled -// set correctly. -function run_test_29() { - Services.prefs.setBoolPref("extensions.getAddons.cache.enabled", true); - - prepare_test({ }, [ - "onNewInstall" - ]); - - let url = "http://localhost:" + gPort + "/addons/test_install6.xpi"; - AddonManager.getInstallForURL(url, function(install) { - ensure_test_completed(); - - do_check_neq(install, null); - do_check_eq(install.version, "1.0"); - do_check_eq(install.name, "Addon Test 6"); - do_check_eq(install.state, AddonManager.STATE_AVAILABLE); - - AddonManager.getInstallsByTypes(null, function(activeInstalls) { - do_check_eq(activeInstalls.length, 1); - do_check_eq(activeInstalls[0], install); - - prepare_test({}, [ - "onDownloadStarted", - "onDownloadEnded" - ], check_test_29); - install.install(); - }); - }, "application/x-xpinstall", null, "Addon Test 6", null, "1.0"); -} - -function check_test_29(install) { - // ensure_test_completed(); - do_check_eq(install.state, AddonManager.STATE_DOWNLOADED); - do_check_neq(install.addon, null); - do_check_false(install.addon.isCompatible); - do_check_true(install.addon.appDisabled); - - prepare_test({}, [ - "onDownloadCancelled" - ], run_test_30); - install.cancel(); - return false; -} - -// Tests that a multi-package XPI with no add-ons inside shows up as a -// corrupt file -function run_test_30() { - prepare_test({ }, [ - "onNewInstall" - ]); - - AddonManager.getInstallForFile(do_get_addon("test_install7"), function(install) { - ensure_test_completed(); - - do_check_neq(install, null); - do_check_eq(install.state, AddonManager.STATE_DOWNLOAD_FAILED); - do_check_eq(install.error, AddonManager.ERROR_CORRUPT_FILE); - do_check_eq(install.linkedInstalls, null); - - run_test_31(); - }); -} - -// Tests that a multi-package XPI with no valid add-ons inside shows up as a -// corrupt file -function run_test_31() { - prepare_test({ }, [ - "onNewInstall" - ]); - - AddonManager.getInstallForFile(do_get_addon("test_install8"), function(install) { - ensure_test_completed(); - - do_check_neq(install, null); - do_check_eq(install.state, AddonManager.STATE_DOWNLOAD_FAILED); - do_check_eq(install.error, AddonManager.ERROR_CORRUPT_FILE); - do_check_eq(install.linkedInstalls, null); - - end_test(); - }); -} |