1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/dom/apps/tests/test_packaged_app_install.html Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,239 @@ 1.4 +<!DOCTYPE html> 1.5 +<html> 1.6 +<!-- 1.7 +https://bugzilla.mozilla.org/show_bug.cgi?id={821589} 1.8 +--> 1.9 +<head> 1.10 + <title>Test for Bug {821589} Packaged apps installation and update</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={821589}">Mozilla Bug {821589}</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 +"use strict"; 1.26 + 1.27 +function debug(aMsg) { 1.28 + //dump("== Tests debug == " + aMsg + "\n"); 1.29 +} 1.30 + 1.31 +function checkAppInstallError(aMiniManifestURL, aExpectedError) { 1.32 + var req = navigator.mozApps.installPackage(aMiniManifestURL); 1.33 + req.onsuccess = function() { 1.34 + ok(false, "We are supposed to throw " + aExpectedError); 1.35 + PackagedTestHelper.finish(); 1.36 + }; 1.37 + req.onerror = function(evt) { 1.38 + var error = evt.target.error.name; 1.39 + if (error == aExpectedError) { 1.40 + ok(true, "Got expected " + aExpectedError); 1.41 + PackagedTestHelper.next(); 1.42 + } else { 1.43 + ok(false, "Got unexpected " + error); 1.44 + PackagedTestHelper.finish(); 1.45 + } 1.46 + }; 1.47 +} 1.48 + 1.49 +function checkUninstallApp(aApp) { 1.50 + var req = navigator.mozApps.mgmt.uninstall(aApp); 1.51 + req.onsuccess = function() { 1.52 + ok(true, "App uninstalled"); 1.53 + aApp.ondownloadsuccess = null; 1.54 + aApp.ondownloaderror = null; 1.55 + aApp.onprogress = null; 1.56 + PackagedTestHelper.next(); 1.57 + }; 1.58 + req.onerror = function(evt) { 1.59 + ok(false, "Got unexpected " + evt.target.error.name); 1.60 + PackagedTestHelper.finish(); 1.61 + }; 1.62 +} 1.63 + 1.64 +function checkInstalledApp(aMiniManifestURL, 1.65 + aVersion, 1.66 + aExpectedApp, 1.67 + aLaunchable, 1.68 + aCb) { 1.69 + var req = navigator.mozApps.checkInstalled(aMiniManifestURL); 1.70 + req.onsuccess = function(evt) { 1.71 + ok(req.result, "The app is installed"); 1.72 + 1.73 + if (!req.result) { 1.74 + PackagedTestHelper.finish(); 1.75 + } 1.76 + 1.77 + PackagedTestHelper.checkAppState(evt.application, aVersion, aExpectedApp, 1.78 + aLaunchable, false, aCb); 1.79 + }; 1.80 +} 1.81 + 1.82 +SimpleTest.waitForExplicitFinish(); 1.83 + 1.84 +var steps = [ 1.85 + function() { 1.86 + // Set up 1.87 + SpecialPowers.setAllAppsLaunchable(true); 1.88 + SpecialPowers.addPermission("webapps-manage", true, document); 1.89 + ok(true, "Set up"); 1.90 + PackagedTestHelper.next(); 1.91 + }, 1.92 + function() { 1.93 + ok(true, "autoConfirmAppInstall"); 1.94 + SpecialPowers.autoConfirmAppInstall(PackagedTestHelper.next); 1.95 + }, 1.96 + function() { 1.97 + PackagedTestHelper.setAppVersion(0, PackagedTestHelper.next); 1.98 + }, 1.99 + function() { 1.100 + // Bug 927699 - navigator.mozApps.install(url) lets NS_ERROR_FAILURE onto 1.101 + // the web. 1.102 + ok(true, "== TEST == INVALID_URL"); 1.103 + checkAppInstallError("", "INVALID_URL"); 1.104 + }, 1.105 + function() { 1.106 + // Test network error. 1.107 + ok(true, "== TEST == Network error"); 1.108 + checkAppInstallError("http://notvalidurl", "NETWORK_ERROR"); 1.109 + }, 1.110 + function() { 1.111 + // Test wrong mini-manifest content type. 1.112 + ok(true, "== TEST == Not valid mini-manifest content type"); 1.113 + var miniManifestURL = PackagedTestHelper.gSJS + 1.114 + "?getManifest=true" + 1.115 + "&noManifestContentType=true"; 1.116 + checkAppInstallError(miniManifestURL, "INVALID_MANIFEST"); 1.117 + }, 1.118 + function() { 1.119 + // Test mini-manifest 'size' value is not number. Bug 839435. 1.120 + ok(true, "== TEST == Size value is not a number"); 1.121 + var miniManifestURL = PackagedTestHelper.gSJS + 1.122 + "?getManifest=true" + 1.123 + "&packageSize=\"NotANumber\""; 1.124 + checkAppInstallError(miniManifestURL, "INVALID_MANIFEST"); 1.125 + }, 1.126 + function() { 1.127 + // Test mini-manifest negative 'size' value. Bug 839435. 1.128 + ok(true, "== TEST == Negative size value"); 1.129 + var miniManifestURL = PackagedTestHelper.gSJS + 1.130 + "?getManifest=true" + 1.131 + "&packageSize=-1"; 1.132 + checkAppInstallError(miniManifestURL, "INVALID_MANIFEST"); 1.133 + }, 1.134 + function() { 1.135 + // Test wrong package path 1.136 + ok(true, "== TEST == Installing app with wrong package path"); 1.137 + var miniManifestURL = PackagedTestHelper.gSJS + 1.138 + "?getManifest=true" + 1.139 + "&wrongPackagePath=true"; 1.140 + checkAppInstallError(miniManifestURL, "INVALID_MANIFEST"); 1.141 + }, 1.142 + function() { 1.143 + // Test no manifest in zip file. 1.144 + ok(true, "== TEST == No manifest in the zip file"); 1.145 + var miniManifestURL = PackagedTestHelper.gSJS + "?getManifest=true"; 1.146 + PackagedTestHelper.checkAppDownloadError(miniManifestURL, 1.147 + "MISSING_MANIFEST", 0, true, true, 1.148 + PackagedTestHelper.gAppName); 1.149 + }, 1.150 + function() { 1.151 + PackagedTestHelper.setAppVersion(1, PackagedTestHelper.next); 1.152 + }, 1.153 + function() { 1.154 + // Test mini-manifest app name is different from the webapp manifest name. 1.155 + // Bug 844243. 1.156 + ok(true, "== TEST == Mini-manifest app name is different from webapp " + 1.157 + "manifest name"); 1.158 + var miniManifestURL = PackagedTestHelper.gSJS + 1.159 + "?getManifest=true" + 1.160 + "&appName=arandomname"; 1.161 + PackagedTestHelper.checkAppDownloadError(miniManifestURL, 1.162 + "MANIFEST_MISMATCH", 1, true, true, 1.163 + "arandomname"); 1.164 + }, 1.165 + function() { 1.166 + // Test mini-manifest dev name is different from the webapp manifest dev 1.167 + // name. 1.168 + ok (true, "== TEST == Mini-manifest dev name is different from manifest " + 1.169 + "dev name"); 1.170 + var miniManifestURL = PackagedTestHelper.gSJS + 1.171 + "?getManifest=true" + 1.172 + "&devName=arandomdevname"; 1.173 + PackagedTestHelper.checkAppDownloadError(miniManifestURL, 1.174 + "MANIFEST_MISMATCH", 1, true, true, 1.175 + PackagedTestHelper.gAppName); 1.176 + }, 1.177 + function() { 1.178 + // Test mini-manifest dev url is different from the webapp manifest dev 1.179 + // url. 1.180 + ok (true, "== TEST == Mini-manifest dev url is different from manifest " + 1.181 + "dev url"); 1.182 + var miniManifestURL = PackagedTestHelper.gSJS + 1.183 + "?getManifest=true" + 1.184 + "&devUrl=arandomdevurl"; 1.185 + PackagedTestHelper.checkAppDownloadError(miniManifestURL, 1.186 + "MANIFEST_MISMATCH", 1, true, true, 1.187 + PackagedTestHelper.gAppName); 1.188 + }, 1.189 + function() { 1.190 + PackagedTestHelper.setAppVersion(2, PackagedTestHelper.next); 1.191 + }, 1.192 + function() { 1.193 + ok(true, "== TEST == Install packaged app"); 1.194 + var miniManifestURL = PackagedTestHelper.gSJS + 1.195 + "?getManifest=true"; 1.196 + navigator.mozApps.mgmt.oninstall = function(evt) { 1.197 + ok(true, "Got oninstall event"); 1.198 + PackagedTestHelper.gApp = evt.application; 1.199 + PackagedTestHelper.gApp.ondownloaderror = function() { 1.200 + ok(false, "Download error " + 1.201 + PackagedTestHelper.gApp.downloadError.name); 1.202 + PackagedTestHelper.finish(); 1.203 + }; 1.204 + PackagedTestHelper.gApp.ondownloadsuccess = function() { 1.205 + ok(true, "App downloaded"); 1.206 + var expected = { 1.207 + name: PackagedTestHelper.gAppName, 1.208 + manifestURL: miniManifestURL, 1.209 + installOrigin: PackagedTestHelper.gInstallOrigin, 1.210 + progress: 0, 1.211 + installState: "installed", 1.212 + downloadAvailable: false, 1.213 + downloading: false, 1.214 + downloadSize: 0, 1.215 + size: 0, 1.216 + readyToApplyDownload: false 1.217 + }; 1.218 + PackagedTestHelper.checkAppState(PackagedTestHelper.gApp, 2, expected, 1.219 + true, false, PackagedTestHelper.next); 1.220 + }; 1.221 + }; 1.222 + 1.223 + var request = navigator.mozApps.installPackage(miniManifestURL); 1.224 + request.onerror = PackagedTestHelper.mozAppsError; 1.225 + request.onsuccess = function() { 1.226 + ok(true, "Application installed"); 1.227 + }; 1.228 + }, 1.229 + function() { 1.230 + ok(true, "all done!\n"); 1.231 + PackagedTestHelper.finish(); 1.232 + } 1.233 +]; 1.234 + 1.235 +PackagedTestHelper.setSteps(steps); 1.236 + 1.237 +addLoadEvent(PackagedTestHelper.start); 1.238 + 1.239 +</script> 1.240 +</pre> 1.241 +</body> 1.242 +</html>