1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/dom/apps/tests/test_packaged_app_update.html Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,208 @@ 1.4 +<!DOCTYPE html> 1.5 +<html> 1.6 +<!-- 1.7 +https://bugzilla.mozilla.org/show_bug.cgi?id={900533} 1.8 +--> 1.9 +<head> 1.10 + <title>Test for Bug {900533} Packaged app update tests</title> 1.11 + <script type="text/javascript" src="/MochiKit/MochiKit.js"></script> 1.12 + <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script> 1.13 + <script type="text/javascript" src="test_packaged_app_common.js"></script> 1.14 + <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" /> 1.15 +</head> 1.16 +<body> 1.17 + 1.18 +<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id={900533}">Mozilla Bug {900533}</a> 1.19 +<p id="display"></p> 1.20 +<div id="content" style="display: none"> 1.21 + 1.22 +</div> 1.23 +<pre id="test"> 1.24 +<script class="testbody" type="text/javascript"> 1.25 + 1.26 +"use strict"; 1.27 + 1.28 +function debug(aMsg) { 1.29 + //dump("== Tests debug == " + aMsg + "\n"); 1.30 +} 1.31 + 1.32 +var miniManifestURL; 1.33 + 1.34 +SimpleTest.waitForExplicitFinish(); 1.35 + 1.36 +function checkForUpdate(aExpected, aOnSuccess, aOnApplied, aOnDownloadError, 1.37 + aLaunchDownload, aOnRequestError) { 1.38 + var lApp = PackagedTestHelper.gApp; 1.39 + 1.40 + lApp.ondownloadsuccess = aOnSuccess || null; 1.41 + lApp.ondownloadapplied = aOnApplied || null; 1.42 + lApp.ondownloaderror = aOnDownloadError || null; 1.43 + 1.44 + var request = lApp.checkForUpdate(); 1.45 + request.onerror = aOnRequestError ? aOnRequestError.bind(undefined, request) : 1.46 + PackagedTestHelper.mozAppsError; 1.47 + request.onsuccess = function(event) { 1.48 + var expectingDownload = aExpected ? "": "not "; 1.49 + ok(lApp.downloadAvailable === aExpected, 1.50 + "Download should " + expectingDownload + "be available"); 1.51 + if (aLaunchDownload) { 1.52 + lApp.download(); 1.53 + } else { 1.54 + PackagedTestHelper.next(); 1.55 + } 1.56 + }; 1.57 +} 1.58 + 1.59 +function checkLastAppState(aMiniManifestURL, aExpectedReady, aExpectedDownload, 1.60 + aExpectedVersion, aCb) { 1.61 + ok(true, aExpectedReady ? "App downloaded" : "App download applied"); 1.62 + var expected = { 1.63 + name: PackagedTestHelper.gAppName, 1.64 + manifestURL: aMiniManifestURL, 1.65 + installOrigin: PackagedTestHelper.gInstallOrigin, 1.66 + progress: 0, 1.67 + installState: aExpectedReady ? "updating" : "installed", 1.68 + downloadAvailable: aExpectedDownload, 1.69 + downloading: false, 1.70 + size: 0, 1.71 + readyToApplyDownload: aExpectedReady 1.72 + }; 1.73 + 1.74 + PackagedTestHelper.checkAppState(PackagedTestHelper.gApp, aExpectedVersion, 1.75 + expected, true, false, aCb); 1.76 +} 1.77 + 1.78 +function updateApp(aExpectedReady, aPreviousVersion, aNextVersion) { 1.79 + var lApp = PackagedTestHelper.gApp; 1.80 + 1.81 + var ondownloadappliedhandler = 1.82 + checkLastAppState.bind(PackagedTestHelper, miniManifestURL, false, false, 1.83 + aNextVersion, PackagedTestHelper.next); 1.84 + 1.85 + var ondownloadsuccesshandler = 1.86 + checkLastAppState.bind(undefined, miniManifestURL, 1.87 + aExpectedReady, false, aPreviousVersion, 1.88 + function() { 1.89 + navigator.mozApps.mgmt.applyDownload(lApp); 1.90 + }); 1.91 + 1.92 + checkForUpdate(true, ondownloadsuccesshandler, ondownloadappliedhandler, null, 1.93 + true); 1.94 + 1.95 +} 1.96 + 1.97 + 1.98 +var steps = [ 1.99 + function() { 1.100 + // Set up 1.101 + SpecialPowers.setAllAppsLaunchable(true); 1.102 + SpecialPowers.addPermission("webapps-manage", true, document); 1.103 + ok(true, "Set up"); 1.104 + PackagedTestHelper.next(); 1.105 + }, 1.106 + function() { 1.107 + ok(true, "autoConfirmAppInstall"); 1.108 + SpecialPowers.autoConfirmAppInstall(PackagedTestHelper.next); 1.109 + }, 1.110 + function() { 1.111 + PackagedTestHelper.setAppVersion(2, PackagedTestHelper.next); 1.112 + }, 1.113 + function() { 1.114 + ok(true, "== TEST == Install packaged app"); 1.115 + navigator.mozApps.mgmt.oninstall = function(evt) { 1.116 + ok(true, "Got oninstall event"); 1.117 + PackagedTestHelper.gApp = evt.application; 1.118 + PackagedTestHelper.gApp.ondownloaderror = function() { 1.119 + ok(false, "Download error " + PackagedTestHelper.gApp.downloadError.name); 1.120 + PackagedTestHelper.finish(); 1.121 + }; 1.122 + PackagedTestHelper.gApp.ondownloadsuccess = 1.123 + checkLastAppState.bind(undefined, miniManifestURL, false, false, 1.124 + 2, PackagedTestHelper.next); 1.125 + }; 1.126 + 1.127 + var request = navigator.mozApps.installPackage(miniManifestURL); 1.128 + request.onerror = PackagedTestHelper.mozAppsError; 1.129 + request.onsuccess = function() { 1.130 + ok(true, "Application installed"); 1.131 + }; 1.132 + }, 1.133 + function() { 1.134 + ok(true, "== TEST == Check for Update and try to download it without update available"); 1.135 + 1.136 + function onerror() { 1.137 + is(PackagedTestHelper.gApp.downloadError.name, "NO_DOWNLOAD_AVAILABLE", "Download not available"); 1.138 + ok(!PackagedTestHelper.gApp.readyToApplyDownload, "Not ready to apply download"); 1.139 + PackagedTestHelper.next(); 1.140 + } 1.141 + function onsuccess() { 1.142 + ok(false, "ondownloadsuccess fired"); 1.143 + PackagedTestHelper.next(); 1.144 + } 1.145 + 1.146 + checkForUpdate(false, onsuccess, null, onerror, true); 1.147 + }, 1.148 + function() { 1.149 + PackagedTestHelper.setAppVersion(3, PackagedTestHelper.next); 1.150 + }, 1.151 + function() { 1.152 + ok(true, "== TEST == Update packaged app"); 1.153 + updateApp(true, 2, 3); 1.154 + }, 1.155 + function() { 1.156 + ok(true, "== TEST == Check for Update after getting a new package"); 1.157 + checkForUpdate(false); 1.158 + }, 1.159 + function() { 1.160 + PackagedTestHelper.setAppVersion(4, PackagedTestHelper.next, true); 1.161 + }, 1.162 + function() { 1.163 + ok(true, "== TEST == Update packaged app - same package"); 1.164 + updateApp(false, 3, 3); 1.165 + }, 1.166 + function() { 1.167 + ok(true, "== TEST == Check for Update after getting the same package"); 1.168 + checkForUpdate(false); 1.169 + }, 1.170 + function() { 1.171 + PackagedTestHelper.setAppVersion(1, PackagedTestHelper.next); 1.172 + }, 1.173 + function() { 1.174 + ok(true, "== TEST == Update packaged app - Updating a pending app"); 1.175 + miniManifestURL = PackagedTestHelper.gSJS + 1.176 + "?getManifest=true" + 1.177 + "&appName=arandomname" + 1.178 + "&appToFail1"; 1.179 + PackagedTestHelper.checkAppDownloadError(miniManifestURL, 1.180 + "MANIFEST_MISMATCH", 2, false, true, 1.181 + "arandomname", 1.182 + function () { 1.183 + checkForUpdate(false, null, null, null, false, 1.184 + function (request) { 1.185 + if (request.error.name === "PENDING_APP_NOT_UPDATABLE") { 1.186 + ok(true, "Got expected PENDING_APP_NOT_UPDATEABLE"); 1.187 + } else { 1.188 + ok(false, "Got unexpected " + request.error.name); 1.189 + } 1.190 + PackagedTestHelper.next(); 1.191 + }); 1.192 + }); 1.193 + }, 1.194 + function() { 1.195 + ok(true, "all done!\n"); 1.196 + PackagedTestHelper.finish(); 1.197 + } 1.198 +]; 1.199 + 1.200 +PackagedTestHelper.setSteps(steps); 1.201 +// appToUpdate added to the URL so we get a unique URL for this app. 1.202 +// Unique in this case meaning different from the ones used on the 1.203 +// install tests 1.204 +miniManifestURL = PackagedTestHelper.gSJS + "?getManifest=true&appToUpdate"; 1.205 + 1.206 +addLoadEvent(PackagedTestHelper.start); 1.207 + 1.208 +</script> 1.209 +</pre> 1.210 +</body> 1.211 +</html>