Thu, 22 Jan 2015 13:21:57 +0100
Incorporate requested changes from Mozilla in review:
https://bugzilla.mozilla.org/show_bug.cgi?id=1123480#c6
1 <!DOCTYPE html>
2 <html>
3 <!--
4 https://bugzilla.mozilla.org/show_bug.cgi?id={821589}
5 -->
6 <head>
7 <title>Test for Bug {821589} Packaged apps installation and update</title>
8 <script type="text/javascript" src="/MochiKit/MochiKit.js"></script>
9 <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
10 <script type="text/javascript" src="test_packaged_app_common.js"></script>
11 <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
12 </head>
13 <body>
15 <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id={821589}">Mozilla Bug {821589}</a>
16 <p id="display"></p>
17 <div id="content" style="display: none">
19 </div>
20 <pre id="test">
21 <script class="testbody" type="text/javascript">
22 "use strict";
24 function debug(aMsg) {
25 //dump("== Tests debug == " + aMsg + "\n");
26 }
28 function checkAppInstallError(aMiniManifestURL, aExpectedError) {
29 var req = navigator.mozApps.installPackage(aMiniManifestURL);
30 req.onsuccess = function() {
31 ok(false, "We are supposed to throw " + aExpectedError);
32 PackagedTestHelper.finish();
33 };
34 req.onerror = function(evt) {
35 var error = evt.target.error.name;
36 if (error == aExpectedError) {
37 ok(true, "Got expected " + aExpectedError);
38 PackagedTestHelper.next();
39 } else {
40 ok(false, "Got unexpected " + error);
41 PackagedTestHelper.finish();
42 }
43 };
44 }
46 function checkUninstallApp(aApp) {
47 var req = navigator.mozApps.mgmt.uninstall(aApp);
48 req.onsuccess = function() {
49 ok(true, "App uninstalled");
50 aApp.ondownloadsuccess = null;
51 aApp.ondownloaderror = null;
52 aApp.onprogress = null;
53 PackagedTestHelper.next();
54 };
55 req.onerror = function(evt) {
56 ok(false, "Got unexpected " + evt.target.error.name);
57 PackagedTestHelper.finish();
58 };
59 }
61 function checkInstalledApp(aMiniManifestURL,
62 aVersion,
63 aExpectedApp,
64 aLaunchable,
65 aCb) {
66 var req = navigator.mozApps.checkInstalled(aMiniManifestURL);
67 req.onsuccess = function(evt) {
68 ok(req.result, "The app is installed");
70 if (!req.result) {
71 PackagedTestHelper.finish();
72 }
74 PackagedTestHelper.checkAppState(evt.application, aVersion, aExpectedApp,
75 aLaunchable, false, aCb);
76 };
77 }
79 SimpleTest.waitForExplicitFinish();
81 var steps = [
82 function() {
83 // Set up
84 SpecialPowers.setAllAppsLaunchable(true);
85 SpecialPowers.addPermission("webapps-manage", true, document);
86 ok(true, "Set up");
87 PackagedTestHelper.next();
88 },
89 function() {
90 ok(true, "autoConfirmAppInstall");
91 SpecialPowers.autoConfirmAppInstall(PackagedTestHelper.next);
92 },
93 function() {
94 PackagedTestHelper.setAppVersion(0, PackagedTestHelper.next);
95 },
96 function() {
97 // Bug 927699 - navigator.mozApps.install(url) lets NS_ERROR_FAILURE onto
98 // the web.
99 ok(true, "== TEST == INVALID_URL");
100 checkAppInstallError("", "INVALID_URL");
101 },
102 function() {
103 // Test network error.
104 ok(true, "== TEST == Network error");
105 checkAppInstallError("http://notvalidurl", "NETWORK_ERROR");
106 },
107 function() {
108 // Test wrong mini-manifest content type.
109 ok(true, "== TEST == Not valid mini-manifest content type");
110 var miniManifestURL = PackagedTestHelper.gSJS +
111 "?getManifest=true" +
112 "&noManifestContentType=true";
113 checkAppInstallError(miniManifestURL, "INVALID_MANIFEST");
114 },
115 function() {
116 // Test mini-manifest 'size' value is not number. Bug 839435.
117 ok(true, "== TEST == Size value is not a number");
118 var miniManifestURL = PackagedTestHelper.gSJS +
119 "?getManifest=true" +
120 "&packageSize=\"NotANumber\"";
121 checkAppInstallError(miniManifestURL, "INVALID_MANIFEST");
122 },
123 function() {
124 // Test mini-manifest negative 'size' value. Bug 839435.
125 ok(true, "== TEST == Negative size value");
126 var miniManifestURL = PackagedTestHelper.gSJS +
127 "?getManifest=true" +
128 "&packageSize=-1";
129 checkAppInstallError(miniManifestURL, "INVALID_MANIFEST");
130 },
131 function() {
132 // Test wrong package path
133 ok(true, "== TEST == Installing app with wrong package path");
134 var miniManifestURL = PackagedTestHelper.gSJS +
135 "?getManifest=true" +
136 "&wrongPackagePath=true";
137 checkAppInstallError(miniManifestURL, "INVALID_MANIFEST");
138 },
139 function() {
140 // Test no manifest in zip file.
141 ok(true, "== TEST == No manifest in the zip file");
142 var miniManifestURL = PackagedTestHelper.gSJS + "?getManifest=true";
143 PackagedTestHelper.checkAppDownloadError(miniManifestURL,
144 "MISSING_MANIFEST", 0, true, true,
145 PackagedTestHelper.gAppName);
146 },
147 function() {
148 PackagedTestHelper.setAppVersion(1, PackagedTestHelper.next);
149 },
150 function() {
151 // Test mini-manifest app name is different from the webapp manifest name.
152 // Bug 844243.
153 ok(true, "== TEST == Mini-manifest app name is different from webapp " +
154 "manifest name");
155 var miniManifestURL = PackagedTestHelper.gSJS +
156 "?getManifest=true" +
157 "&appName=arandomname";
158 PackagedTestHelper.checkAppDownloadError(miniManifestURL,
159 "MANIFEST_MISMATCH", 1, true, true,
160 "arandomname");
161 },
162 function() {
163 // Test mini-manifest dev name is different from the webapp manifest dev
164 // name.
165 ok (true, "== TEST == Mini-manifest dev name is different from manifest " +
166 "dev name");
167 var miniManifestURL = PackagedTestHelper.gSJS +
168 "?getManifest=true" +
169 "&devName=arandomdevname";
170 PackagedTestHelper.checkAppDownloadError(miniManifestURL,
171 "MANIFEST_MISMATCH", 1, true, true,
172 PackagedTestHelper.gAppName);
173 },
174 function() {
175 // Test mini-manifest dev url is different from the webapp manifest dev
176 // url.
177 ok (true, "== TEST == Mini-manifest dev url is different from manifest " +
178 "dev url");
179 var miniManifestURL = PackagedTestHelper.gSJS +
180 "?getManifest=true" +
181 "&devUrl=arandomdevurl";
182 PackagedTestHelper.checkAppDownloadError(miniManifestURL,
183 "MANIFEST_MISMATCH", 1, true, true,
184 PackagedTestHelper.gAppName);
185 },
186 function() {
187 PackagedTestHelper.setAppVersion(2, PackagedTestHelper.next);
188 },
189 function() {
190 ok(true, "== TEST == Install packaged app");
191 var miniManifestURL = PackagedTestHelper.gSJS +
192 "?getManifest=true";
193 navigator.mozApps.mgmt.oninstall = function(evt) {
194 ok(true, "Got oninstall event");
195 PackagedTestHelper.gApp = evt.application;
196 PackagedTestHelper.gApp.ondownloaderror = function() {
197 ok(false, "Download error " +
198 PackagedTestHelper.gApp.downloadError.name);
199 PackagedTestHelper.finish();
200 };
201 PackagedTestHelper.gApp.ondownloadsuccess = function() {
202 ok(true, "App downloaded");
203 var expected = {
204 name: PackagedTestHelper.gAppName,
205 manifestURL: miniManifestURL,
206 installOrigin: PackagedTestHelper.gInstallOrigin,
207 progress: 0,
208 installState: "installed",
209 downloadAvailable: false,
210 downloading: false,
211 downloadSize: 0,
212 size: 0,
213 readyToApplyDownload: false
214 };
215 PackagedTestHelper.checkAppState(PackagedTestHelper.gApp, 2, expected,
216 true, false, PackagedTestHelper.next);
217 };
218 };
220 var request = navigator.mozApps.installPackage(miniManifestURL);
221 request.onerror = PackagedTestHelper.mozAppsError;
222 request.onsuccess = function() {
223 ok(true, "Application installed");
224 };
225 },
226 function() {
227 ok(true, "all done!\n");
228 PackagedTestHelper.finish();
229 }
230 ];
232 PackagedTestHelper.setSteps(steps);
234 addLoadEvent(PackagedTestHelper.start);
236 </script>
237 </pre>
238 </body>
239 </html>