|
1 <!DOCTYPE html> |
|
2 <html> |
|
3 <!-- |
|
4 https://bugzilla.mozilla.org/show_bug.cgi?id={900533} |
|
5 --> |
|
6 <head> |
|
7 <title>Test for Bug {900533} Packaged app update tests</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={900533}">Mozilla Bug {900533}</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 |
|
23 "use strict"; |
|
24 |
|
25 function debug(aMsg) { |
|
26 //dump("== Tests debug == " + aMsg + "\n"); |
|
27 } |
|
28 |
|
29 var miniManifestURL; |
|
30 |
|
31 SimpleTest.waitForExplicitFinish(); |
|
32 |
|
33 function checkForUpdate(aExpected, aOnSuccess, aOnApplied, aOnDownloadError, |
|
34 aLaunchDownload, aOnRequestError) { |
|
35 var lApp = PackagedTestHelper.gApp; |
|
36 |
|
37 lApp.ondownloadsuccess = aOnSuccess || null; |
|
38 lApp.ondownloadapplied = aOnApplied || null; |
|
39 lApp.ondownloaderror = aOnDownloadError || null; |
|
40 |
|
41 var request = lApp.checkForUpdate(); |
|
42 request.onerror = aOnRequestError ? aOnRequestError.bind(undefined, request) : |
|
43 PackagedTestHelper.mozAppsError; |
|
44 request.onsuccess = function(event) { |
|
45 var expectingDownload = aExpected ? "": "not "; |
|
46 ok(lApp.downloadAvailable === aExpected, |
|
47 "Download should " + expectingDownload + "be available"); |
|
48 if (aLaunchDownload) { |
|
49 lApp.download(); |
|
50 } else { |
|
51 PackagedTestHelper.next(); |
|
52 } |
|
53 }; |
|
54 } |
|
55 |
|
56 function checkLastAppState(aMiniManifestURL, aExpectedReady, aExpectedDownload, |
|
57 aExpectedVersion, aCb) { |
|
58 ok(true, aExpectedReady ? "App downloaded" : "App download applied"); |
|
59 var expected = { |
|
60 name: PackagedTestHelper.gAppName, |
|
61 manifestURL: aMiniManifestURL, |
|
62 installOrigin: PackagedTestHelper.gInstallOrigin, |
|
63 progress: 0, |
|
64 installState: aExpectedReady ? "updating" : "installed", |
|
65 downloadAvailable: aExpectedDownload, |
|
66 downloading: false, |
|
67 size: 0, |
|
68 readyToApplyDownload: aExpectedReady |
|
69 }; |
|
70 |
|
71 PackagedTestHelper.checkAppState(PackagedTestHelper.gApp, aExpectedVersion, |
|
72 expected, true, false, aCb); |
|
73 } |
|
74 |
|
75 function updateApp(aExpectedReady, aPreviousVersion, aNextVersion) { |
|
76 var lApp = PackagedTestHelper.gApp; |
|
77 |
|
78 var ondownloadappliedhandler = |
|
79 checkLastAppState.bind(PackagedTestHelper, miniManifestURL, false, false, |
|
80 aNextVersion, PackagedTestHelper.next); |
|
81 |
|
82 var ondownloadsuccesshandler = |
|
83 checkLastAppState.bind(undefined, miniManifestURL, |
|
84 aExpectedReady, false, aPreviousVersion, |
|
85 function() { |
|
86 navigator.mozApps.mgmt.applyDownload(lApp); |
|
87 }); |
|
88 |
|
89 checkForUpdate(true, ondownloadsuccesshandler, ondownloadappliedhandler, null, |
|
90 true); |
|
91 |
|
92 } |
|
93 |
|
94 |
|
95 var steps = [ |
|
96 function() { |
|
97 // Set up |
|
98 SpecialPowers.setAllAppsLaunchable(true); |
|
99 SpecialPowers.addPermission("webapps-manage", true, document); |
|
100 ok(true, "Set up"); |
|
101 PackagedTestHelper.next(); |
|
102 }, |
|
103 function() { |
|
104 ok(true, "autoConfirmAppInstall"); |
|
105 SpecialPowers.autoConfirmAppInstall(PackagedTestHelper.next); |
|
106 }, |
|
107 function() { |
|
108 PackagedTestHelper.setAppVersion(2, PackagedTestHelper.next); |
|
109 }, |
|
110 function() { |
|
111 ok(true, "== TEST == Install packaged app"); |
|
112 navigator.mozApps.mgmt.oninstall = function(evt) { |
|
113 ok(true, "Got oninstall event"); |
|
114 PackagedTestHelper.gApp = evt.application; |
|
115 PackagedTestHelper.gApp.ondownloaderror = function() { |
|
116 ok(false, "Download error " + PackagedTestHelper.gApp.downloadError.name); |
|
117 PackagedTestHelper.finish(); |
|
118 }; |
|
119 PackagedTestHelper.gApp.ondownloadsuccess = |
|
120 checkLastAppState.bind(undefined, miniManifestURL, false, false, |
|
121 2, PackagedTestHelper.next); |
|
122 }; |
|
123 |
|
124 var request = navigator.mozApps.installPackage(miniManifestURL); |
|
125 request.onerror = PackagedTestHelper.mozAppsError; |
|
126 request.onsuccess = function() { |
|
127 ok(true, "Application installed"); |
|
128 }; |
|
129 }, |
|
130 function() { |
|
131 ok(true, "== TEST == Check for Update and try to download it without update available"); |
|
132 |
|
133 function onerror() { |
|
134 is(PackagedTestHelper.gApp.downloadError.name, "NO_DOWNLOAD_AVAILABLE", "Download not available"); |
|
135 ok(!PackagedTestHelper.gApp.readyToApplyDownload, "Not ready to apply download"); |
|
136 PackagedTestHelper.next(); |
|
137 } |
|
138 function onsuccess() { |
|
139 ok(false, "ondownloadsuccess fired"); |
|
140 PackagedTestHelper.next(); |
|
141 } |
|
142 |
|
143 checkForUpdate(false, onsuccess, null, onerror, true); |
|
144 }, |
|
145 function() { |
|
146 PackagedTestHelper.setAppVersion(3, PackagedTestHelper.next); |
|
147 }, |
|
148 function() { |
|
149 ok(true, "== TEST == Update packaged app"); |
|
150 updateApp(true, 2, 3); |
|
151 }, |
|
152 function() { |
|
153 ok(true, "== TEST == Check for Update after getting a new package"); |
|
154 checkForUpdate(false); |
|
155 }, |
|
156 function() { |
|
157 PackagedTestHelper.setAppVersion(4, PackagedTestHelper.next, true); |
|
158 }, |
|
159 function() { |
|
160 ok(true, "== TEST == Update packaged app - same package"); |
|
161 updateApp(false, 3, 3); |
|
162 }, |
|
163 function() { |
|
164 ok(true, "== TEST == Check for Update after getting the same package"); |
|
165 checkForUpdate(false); |
|
166 }, |
|
167 function() { |
|
168 PackagedTestHelper.setAppVersion(1, PackagedTestHelper.next); |
|
169 }, |
|
170 function() { |
|
171 ok(true, "== TEST == Update packaged app - Updating a pending app"); |
|
172 miniManifestURL = PackagedTestHelper.gSJS + |
|
173 "?getManifest=true" + |
|
174 "&appName=arandomname" + |
|
175 "&appToFail1"; |
|
176 PackagedTestHelper.checkAppDownloadError(miniManifestURL, |
|
177 "MANIFEST_MISMATCH", 2, false, true, |
|
178 "arandomname", |
|
179 function () { |
|
180 checkForUpdate(false, null, null, null, false, |
|
181 function (request) { |
|
182 if (request.error.name === "PENDING_APP_NOT_UPDATABLE") { |
|
183 ok(true, "Got expected PENDING_APP_NOT_UPDATEABLE"); |
|
184 } else { |
|
185 ok(false, "Got unexpected " + request.error.name); |
|
186 } |
|
187 PackagedTestHelper.next(); |
|
188 }); |
|
189 }); |
|
190 }, |
|
191 function() { |
|
192 ok(true, "all done!\n"); |
|
193 PackagedTestHelper.finish(); |
|
194 } |
|
195 ]; |
|
196 |
|
197 PackagedTestHelper.setSteps(steps); |
|
198 // appToUpdate added to the URL so we get a unique URL for this app. |
|
199 // Unique in this case meaning different from the ones used on the |
|
200 // install tests |
|
201 miniManifestURL = PackagedTestHelper.gSJS + "?getManifest=true&appToUpdate"; |
|
202 |
|
203 addLoadEvent(PackagedTestHelper.start); |
|
204 |
|
205 </script> |
|
206 </pre> |
|
207 </body> |
|
208 </html> |