dom/apps/tests/test_packaged_app_update.html

branch
TOR_BUG_9701
changeset 15
b8a032363ba2
equal deleted inserted replaced
-1:000000000000 0:0ed1c4bb140e
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>

mercurial