|
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> |
|
14 |
|
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"> |
|
18 |
|
19 </div> |
|
20 <pre id="test"> |
|
21 <script class="testbody" type="text/javascript"> |
|
22 "use strict"; |
|
23 |
|
24 function debug(aMsg) { |
|
25 //dump("== Tests debug == " + aMsg + "\n"); |
|
26 } |
|
27 |
|
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 } |
|
45 |
|
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 } |
|
60 |
|
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"); |
|
69 |
|
70 if (!req.result) { |
|
71 PackagedTestHelper.finish(); |
|
72 } |
|
73 |
|
74 PackagedTestHelper.checkAppState(evt.application, aVersion, aExpectedApp, |
|
75 aLaunchable, false, aCb); |
|
76 }; |
|
77 } |
|
78 |
|
79 SimpleTest.waitForExplicitFinish(); |
|
80 |
|
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 }; |
|
219 |
|
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 ]; |
|
231 |
|
232 PackagedTestHelper.setSteps(steps); |
|
233 |
|
234 addLoadEvent(PackagedTestHelper.start); |
|
235 |
|
236 </script> |
|
237 </pre> |
|
238 </body> |
|
239 </html> |