☠☠ backed out by 66651fb7bca3 ☠ ☠ | |
author | Antonio M. Amaya <amac@tid.es> |
Fri, 11 Jul 2014 14:45:00 +0200 | |
changeset 193713 | 28664fb86b3c191d64cf932643a8179cc028bc1a |
parent 193712 | 73e71a89498be87e5dff5efac3f3d02f875d466f |
child 193714 | 8ecc1aa20f39065a5904b904515035764a381d97 |
push id | 46196 |
push user | cbook@mozilla.com |
push date | Mon, 14 Jul 2014 06:47:41 +0000 |
treeherder | mozilla-inbound@b7e9c0479666 [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | fabrice |
bugs | 1036847 |
milestone | 33.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
--- a/dom/apps/tests/file_packaged_app.sjs +++ b/dom/apps/tests/file_packaged_app.sjs @@ -15,33 +15,45 @@ var gMiniManifestTemplate = "file_packag var gAppTemplate = "file_packaged_app.template.html"; var gAppName = "appname"; var gDevName = "devname"; var gDevUrl = "http://dev.url"; function handleRequest(request, response) { var query = getQuery(request); - response.setHeader("Access-Control-Allow-Origin", "*", false); - var packageSize = ("packageSize" in query) ? query.packageSize : 0; var appName = ("appName" in query) ? query.appName : gAppName; var devName = ("devName" in query) ? query.devName : gDevName; var devUrl = ("devUrl" in query) ? query.devUrl : gDevUrl; + // allowCancel just means deliver the file slowly so we have time to cancel it + var allowCancel = "allowCancel" in query; + var getPackage = "getPackage" in query; + var alreadyDeferred = Number(getState("alreadyDeferred")); + + if (allowCancel && getPackage && !alreadyDeferred) { + // Only do this for the actual package delivery. + response.processAsync(); + // And to avoid timer problems, only do this once. + setState("alreadyDeferred", "1"); + } + + response.setHeader("Access-Control-Allow-Origin", "*", false); // If this is a version update, update state, prepare the manifest, // the application package and return. if ("setVersion" in query) { var version = query.setVersion; setState("version", version); var packageVersion = ("dontUpdatePackage" in query) ? version - 1 : version; var packageName = "test_packaged_app_" + packageVersion + ".zip"; setState("packageName", packageName); - var packagePath = "/" + gBasePath + "file_packaged_app.sjs?getPackage=" + + var packagePath = "/" + gBasePath + "file_packaged_app.sjs?" + + (allowCancel?"allowCancel&": "") + "getPackage=" + packageName; setState("packagePath", packagePath); if (version == packageVersion) { // Create the application package. var zipWriter = Cc["@mozilla.org/zipwriter;1"] .createInstance(Ci.nsIZipWriter); var zipFile = FileUtils.getFile("TmpD", [packageName]); @@ -79,21 +91,29 @@ function handleRequest(request, response dump("Etags Match. Sending 304\n"); response.setStatusLine(request.httpVersion, "304", "Not modified"); return; } response.setHeader("Etag", etag, false); // Serve the application package corresponding to the requested app version. - if ("getPackage" in query) { + if (getPackage) { var resource = readFile(packageName, true); response.setHeader("Content-Type", "Content-Type: application/java-archive", false); - response.write(resource); + if (allowCancel && !alreadyDeferred) { + var timer = Cc["@mozilla.org/timer;1"].createInstance(Ci.nsITimer); + timer.initWithCallback(function (aTimer) { + response.write(resource); + response.finish(); + }, 3000, Ci.nsITimer.TYPE_ONE_SHOT); + } else { + response.write(resource); + } return; } // Serve the mini-manifest corresponding to the requested app version. if ("getManifest" in query) { var template = gBasePath + gMiniManifestTemplate; if (!("noManifestContentType" in query)) { response.setHeader("Content-Type",
--- a/dom/apps/tests/test_packaged_app_common.js +++ b/dom/apps/tests/test_packaged_app_common.js @@ -52,23 +52,27 @@ var PackagedTestHelper = (function Packa finish(); } function xhrAbort(url) { ok(false, "XHR abort loading " + url); finish(); } - function setAppVersion(aVersion, aCb, aDontUpdatePackage) { + function setAppVersion(aVersion, aCb, aDontUpdatePackage, aAllowCancel) { var xhr = new XMLHttpRequest(); var dontUpdate = ""; + var allowCancel = ""; if (aDontUpdatePackage) { dontUpdate = "&dontUpdatePackage=1"; } - var url = gSJS + "?setVersion=" + aVersion + dontUpdate; + if (aAllowCancel) { + allowCancel= "&allowCancel=1"; + } + var url = gSJS + "?setVersion=" + aVersion + dontUpdate + allowCancel; xhr.addEventListener("load", function() { is(xhr.responseText, "OK", "setAppVersion OK"); aCb(); }); xhr.addEventListener("error", event => xhrError(event, url)); xhr.addEventListener("abort", event => xhrAbort(url)); xhr.open("GET", url, true); xhr.send();
--- a/dom/apps/tests/test_packaged_app_install.html +++ b/dom/apps/tests/test_packaged_app_install.html @@ -29,29 +29,29 @@ function checkAppInstallError(aMiniManif var req = navigator.mozApps.installPackage(aMiniManifestURL); req.onsuccess = function() { ok(false, "We are supposed to throw " + aExpectedError); PackagedTestHelper.finish(); }; req.onerror = function(evt) { var error = evt.target.error.name; if (error == aExpectedError) { - ok(true, "Got expected " + aExpectedError); + info("Got expected " + aExpectedError); PackagedTestHelper.next(); } else { ok(false, "Got unexpected " + error); PackagedTestHelper.finish(); } }; } function checkUninstallApp(aApp) { var req = navigator.mozApps.mgmt.uninstall(aApp); req.onsuccess = function() { - ok(true, "App uninstalled"); + info("App uninstalled"); aApp.ondownloadsuccess = null; aApp.ondownloaderror = null; aApp.onprogress = null; PackagedTestHelper.next(); }; req.onerror = function(evt) { ok(false, "Got unexpected " + evt.target.error.name); PackagedTestHelper.finish(); @@ -78,84 +78,84 @@ function checkInstalledApp(aMiniManifest SimpleTest.waitForExplicitFinish(); var steps = [ function() { // Set up SpecialPowers.setAllAppsLaunchable(true); SpecialPowers.addPermission("webapps-manage", true, document); - ok(true, "Set up"); + info("Set up"); PackagedTestHelper.next(); }, function() { - ok(true, "autoConfirmAppInstall"); + info("autoConfirmAppInstall"); SpecialPowers.autoConfirmAppInstall(PackagedTestHelper.next); }, function() { PackagedTestHelper.setAppVersion(0, PackagedTestHelper.next); }, function() { // Bug 927699 - navigator.mozApps.install(url) lets NS_ERROR_FAILURE onto // the web. - ok(true, "== TEST == INVALID_URL"); + info("== TEST == INVALID_URL"); checkAppInstallError("", "INVALID_URL"); }, function() { // Test network error. - ok(true, "== TEST == Network error"); + info("== TEST == Network error"); checkAppInstallError("http://notvalidurl", "NETWORK_ERROR"); }, function() { // Test wrong mini-manifest content type. - ok(true, "== TEST == Not valid mini-manifest content type"); + info("== TEST == Not valid mini-manifest content type"); var miniManifestURL = PackagedTestHelper.gSJS + "?getManifest=true" + "&noManifestContentType=true"; checkAppInstallError(miniManifestURL, "INVALID_MANIFEST_CONTENT_TYPE"); }, function() { // Test mini-manifest 'size' value is not number. Bug 839435. - ok(true, "== TEST == Size value is not a number"); + info("== TEST == Size value is not a number"); var miniManifestURL = PackagedTestHelper.gSJS + "?getManifest=true" + "&packageSize=\"NotANumber\""; checkAppInstallError(miniManifestURL, "INVALID_MANIFEST"); }, function() { // Test mini-manifest negative 'size' value. Bug 839435. - ok(true, "== TEST == Negative size value"); + info("== TEST == Negative size value"); var miniManifestURL = PackagedTestHelper.gSJS + "?getManifest=true" + "&packageSize=-1"; checkAppInstallError(miniManifestURL, "INVALID_MANIFEST"); }, function() { // Test wrong package path - ok(true, "== TEST == Installing app with wrong package path"); + info("== TEST == Installing app with wrong package path"); var miniManifestURL = PackagedTestHelper.gSJS + "?getManifest=true" + "&wrongPackagePath=true"; checkAppInstallError(miniManifestURL, "INVALID_MANIFEST"); }, function() { // Test no manifest in zip file. - ok(true, "== TEST == No manifest in the zip file"); + info("== TEST == No manifest in the zip file"); var miniManifestURL = PackagedTestHelper.gSJS + "?getManifest=true"; PackagedTestHelper.checkAppDownloadError(miniManifestURL, "MISSING_MANIFEST", 0, true, true, PackagedTestHelper.gAppName); }, function() { PackagedTestHelper.setAppVersion(1, PackagedTestHelper.next); }, function() { // Test mini-manifest app name is different from the webapp manifest name. // Bug 844243. - ok(true, "== TEST == Mini-manifest app name is different from webapp " + + info("== TEST == Mini-manifest app name is different from webapp " + "manifest name"); var miniManifestURL = PackagedTestHelper.gSJS + "?getManifest=true" + "&appName=arandomname"; PackagedTestHelper.checkAppDownloadError(miniManifestURL, "MANIFEST_MISMATCH", 1, true, true, "arandomname"); }, @@ -182,29 +182,29 @@ var steps = [ PackagedTestHelper.checkAppDownloadError(miniManifestURL, "MANIFEST_MISMATCH", 1, true, true, PackagedTestHelper.gAppName); }, function() { PackagedTestHelper.setAppVersion(2, PackagedTestHelper.next); }, function() { - ok(true, "== TEST == Install packaged app"); + info("== TEST == Install packaged app"); var miniManifestURL = PackagedTestHelper.gSJS + "?getManifest=true"; navigator.mozApps.mgmt.oninstall = function(evt) { - ok(true, "Got oninstall event"); + info("Got oninstall event"); PackagedTestHelper.gApp = evt.application; PackagedTestHelper.gApp.ondownloaderror = function() { ok(false, "Download error " + PackagedTestHelper.gApp.downloadError.name); PackagedTestHelper.finish(); }; PackagedTestHelper.gApp.ondownloadsuccess = function() { - ok(true, "App downloaded"); + info("App downloaded"); var expected = { name: PackagedTestHelper.gAppName, manifestURL: miniManifestURL, installOrigin: PackagedTestHelper.gInstallOrigin, progress: 0, installState: "installed", downloadAvailable: false, downloading: false, @@ -215,21 +215,95 @@ var steps = [ PackagedTestHelper.checkAppState(PackagedTestHelper.gApp, 2, expected, true, false, PackagedTestHelper.next); }; }; var request = navigator.mozApps.installPackage(miniManifestURL); request.onerror = PackagedTestHelper.mozAppsError; request.onsuccess = function() { - ok(true, "Application installed"); + info("Application installed"); }; }, function() { - ok(true, "all done!\n"); + PackagedTestHelper.setAppVersion(3, PackagedTestHelper.next, false, true); + }, + function() { + info("== TEST == Install packaged app with a cancel/resume"); + var miniManifestURL = PackagedTestHelper.gSJS + + "?getManifest=true&allowCancel"; + navigator.mozApps.mgmt.oninstall = function(evt) { + info("Got oninstall event"); + PackagedTestHelper.gApp = evt.application; + + PackagedTestHelper.gApp.onprogress = function() { + // Let's try cancelling and resuming the download later on. + PackagedTestHelper.gApp.cancelDownload(); + // And only do this once. + PackagedTestHelper.gApp.onprogress = null; + }; + + var alreadyCancelled = false; + PackagedTestHelper.gApp.ondownloaderror = function() { + ok(!alreadyCancelled, "The download should be cancelled only once!"); + is(PackagedTestHelper.gApp.downloadError.name, "DOWNLOAD_CANCELED", + "Download error " + PackagedTestHelper.gApp.downloadError.name); + if (!alreadyCancelled) { + PackagedTestHelper.gApp.download(); + alreadyCancelled = true; + } + }; + + PackagedTestHelper.gApp.ondownloadsuccess = function() { + info("App downloaded"); + // We could try also applying the download we just made. + var expected = { + name: PackagedTestHelper.gAppName, + manifestURL: miniManifestURL, + installOrigin: PackagedTestHelper.gInstallOrigin, + progress: 0, + installState: "pending", + downloadAvailable: false, + downloading: false, + downloadSize: 0, + size: 0, + readyToApplyDownload: true + }; + PackagedTestHelper.checkAppState(PackagedTestHelper.gApp, 3, expected, + true, false, function() {}); + }; + + PackagedTestHelper.gApp.ondownloadapplied = function() { + info("App download applied."); + var expected = { + name: PackagedTestHelper.gAppName, + manifestURL: miniManifestURL, + installOrigin: PackagedTestHelper.gInstallOrigin, + progress: 0, + installState: "installed", + downloadAvailable: false, + downloading: false, + downloadSize: 0, + size: 0, + readyToApplyDownload: false + }; + PackagedTestHelper.checkAppState(PackagedTestHelper.gApp, 3, expected, + true, false, PackagedTestHelper.next); + } + + }; + + var request = navigator.mozApps.installPackage(miniManifestURL); + request.onerror = PackagedTestHelper.mozAppsError; + request.onsuccess = function() { + info("Application installed"); + }; + }, + function() { + info("all done!\n"); PackagedTestHelper.finish(); } ]; PackagedTestHelper.setSteps(steps); addLoadEvent(PackagedTestHelper.start);