Bug 1850713: remove duplicated setting of early hint preloader id in `ScriptLoader...
[gecko.git] / dom / indexedDB / test / test_blob_simple.html
blob7dc2fee767af5c25085ff439bda2c446490fc746
1 <!--
2 Any copyright is dedicated to the Public Domain.
3 http://creativecommons.org/publicdomain/zero/1.0/
4 -->
5 <html>
6 <head>
7 <title>Indexed Database Property Test</title>
9 <script src="/tests/SimpleTest/SimpleTest.js"></script>
10 <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
12 <script type="text/javascript">
13 function* testSteps()
15 info("Setting up test fixtures: create an IndexedDB database and object store.");
17 let request = indexedDB.open(window.location.pathname, 1);
18 request.onerror = errorHandler;
19 request.onupgradeneeded = grabEventAndContinueHandler;
20 request.onsuccess = unexpectedSuccessHandler;
21 let event = yield undefined;
23 let db = event.target.result;
24 db.onerror = errorHandler;
26 let objectStore = db.createObjectStore("foo", { autoIncrement: true });
27 let index = objectStore.createIndex("foo", "index");
29 request.onsuccess = grabEventAndContinueHandler;
30 event = yield undefined;
33 info("Let's create a blob and store it in IndexedDB twice.");
35 const BLOB_DATA = ["fun ", "times ", "all ", "around!"];
36 const INDEX_KEY = 5;
37 let blob = new Blob(BLOB_DATA, { type: "text/plain" });
38 let data = { blob, index: INDEX_KEY };
40 objectStore = db.transaction("foo", "readwrite").objectStore("foo");
41 objectStore.add(data).onsuccess = grabEventAndContinueHandler;
42 event = yield undefined;
44 info("Added blob to database once");
46 let key = event.target.result;
48 objectStore.add(data).onsuccess = grabEventAndContinueHandler;
49 event = yield undefined;
51 info("Added blob to database twice");
53 info("Let's retrieve the blob again and verify the contents is the same.");
55 objectStore = db.transaction("foo").objectStore("foo");
56 objectStore.get(key).onsuccess = grabEventAndContinueHandler;
57 event = yield undefined;
59 info("Got blob from database");
61 let fileReader = new FileReader();
62 fileReader.onload = grabEventAndContinueHandler;
63 fileReader.readAsText(event.target.result.blob);
64 event = yield undefined;
66 is(event.target.result, BLOB_DATA.join(""), "Correct text");
69 info("Let's retrieve it again, create an object URL for the blob, load" +
70 "it via an XMLHttpRequest, and verify the contents is the same.");
72 objectStore = db.transaction("foo").objectStore("foo");
73 objectStore.get(key).onsuccess = grabEventAndContinueHandler;
74 event = yield undefined;
76 info("Got blob from database");
78 let blobURL = URL.createObjectURL(event.target.result.blob);
80 let xhr = new XMLHttpRequest();
81 xhr.open("GET", blobURL);
82 xhr.onload = grabEventAndContinueHandler;
83 xhr.send();
84 yield undefined;
86 URL.revokeObjectURL(blobURL);
88 is(xhr.responseText, BLOB_DATA.join(""), "Correct responseText");
91 info("Retrieve both blob entries from the database and verify contents.");
93 objectStore = db.transaction("foo").objectStore("foo");
94 objectStore.mozGetAll().onsuccess = grabEventAndContinueHandler;
95 event = yield undefined;
97 is(event.target.result.length, 2, "Got right number of items");
99 fileReader = new FileReader();
100 fileReader.onload = grabEventAndContinueHandler;
101 fileReader.readAsText(event.target.result[0].blob);
102 event = yield undefined;
104 is(event.target.result, BLOB_DATA.join(""), "Correct text");
106 let cursorResults = [];
108 objectStore = db.transaction("foo").objectStore("foo");
109 objectStore.openCursor().onsuccess = function(event) {
110 let cursor = event.target.result;
111 if (cursor) {
112 info("Got item from cursor");
113 cursorResults.push(cursor.value);
114 cursor.continue();
116 else {
117 info("Finished cursor");
118 continueToNextStep();
121 yield undefined;
123 is(cursorResults.length, 2, "Got right number of items");
125 fileReader = new FileReader();
126 fileReader.onload = grabEventAndContinueHandler;
127 fileReader.readAsText(cursorResults[0].blob);
128 event = yield undefined;
130 is(event.target.result, BLOB_DATA.join(""), "Correct text");
133 info("Retrieve blobs from database via index and verify contents.");
135 index = db.transaction("foo").objectStore("foo").index("foo");
136 index.get(INDEX_KEY).onsuccess = grabEventAndContinueHandler;
137 event = yield undefined;
139 info("Got blob from database");
141 fileReader = new FileReader();
142 fileReader.onload = grabEventAndContinueHandler;
143 fileReader.readAsText(event.target.result.blob);
144 event = yield undefined;
146 is(event.target.result, BLOB_DATA.join(""), "Correct text");
148 index = db.transaction("foo").objectStore("foo").index("foo");
149 index.mozGetAll().onsuccess = grabEventAndContinueHandler;
150 event = yield undefined;
152 is(event.target.result.length, 2, "Got right number of items");
154 fileReader = new FileReader();
155 fileReader.onload = grabEventAndContinueHandler;
156 fileReader.readAsText(event.target.result[0].blob);
157 event = yield undefined;
159 is(event.target.result, BLOB_DATA.join(""), "Correct text");
161 cursorResults = [];
163 index = db.transaction("foo").objectStore("foo").index("foo");
164 index.openCursor().onsuccess = function(event) {
165 let cursor = event.target.result;
166 if (cursor) {
167 info("Got item from cursor");
168 cursorResults.push(cursor.value);
169 cursor.continue();
171 else {
172 info("Finished cursor");
173 continueToNextStep();
176 yield undefined;
178 is(cursorResults.length, 2, "Got right number of items");
180 fileReader = new FileReader();
181 fileReader.onload = grabEventAndContinueHandler;
182 fileReader.readAsText(cursorResults[0].blob);
183 event = yield undefined;
185 is(event.target.result, BLOB_DATA.join(""), "Correct text");
187 fileReader = new FileReader();
188 fileReader.onload = grabEventAndContinueHandler;
189 fileReader.readAsText(cursorResults[1].blob);
190 event = yield undefined;
192 is(event.target.result, BLOB_DATA.join(""), "Correct text");
195 info("Slice the the retrieved blob and verify its contents.");
197 let slice = cursorResults[1].blob.slice(0, BLOB_DATA[0].length);
199 fileReader = new FileReader();
200 fileReader.onload = grabEventAndContinueHandler;
201 fileReader.readAsText(slice);
202 event = yield undefined;
204 is(event.target.result, BLOB_DATA[0], "Correct text");
207 info("Send blob to a worker, read its contents there, and verify results.");
209 function workerScript() {
210 /* eslint-env worker */
211 onmessage = function(event) {
212 var reader = new FileReaderSync();
213 postMessage(reader.readAsText(event.data));
215 var slice = event.data.slice(1, 2);
216 postMessage(reader.readAsText(slice));
220 let url =
221 URL.createObjectURL(new Blob(["(", workerScript.toString(), ")()"]));
223 let worker = new Worker(url);
224 worker.postMessage(slice);
225 worker.onmessage = grabEventAndContinueHandler;
226 event = yield undefined;
228 is(event.data, BLOB_DATA[0], "Correct text");
229 event = yield undefined;
231 is(event.data, BLOB_DATA[0][1], "Correct text");
234 info("Store a blob back in the database, and keep holding on to the " +
235 "blob, verifying that it still can be read.");
237 objectStore = db.transaction("foo").objectStore("foo");
238 objectStore.get(key).onsuccess = grabEventAndContinueHandler;
239 event = yield undefined;
241 let blobFromDB = event.target.result.blob;
242 info("Got blob from database");
244 let txn = db.transaction("foo", "readwrite");
245 txn.objectStore("foo").put(event.target.result, key);
246 txn.oncomplete = grabEventAndContinueHandler;
247 event = yield undefined;
249 info("Stored blob back into database");
251 fileReader = new FileReader();
252 fileReader.onload = grabEventAndContinueHandler;
253 fileReader.readAsText(blobFromDB);
254 event = yield undefined;
256 is(event.target.result, BLOB_DATA.join(""), "Correct text");
258 blobURL = URL.createObjectURL(blobFromDB);
260 xhr = new XMLHttpRequest();
261 xhr.open("GET", blobURL);
262 xhr.onload = grabEventAndContinueHandler;
263 xhr.send();
264 yield undefined;
266 URL.revokeObjectURL(blobURL);
268 is(xhr.responseText, BLOB_DATA.join(""), "Correct responseText");
271 finishTest();
273 </script>
274 <script type="text/javascript" src="helpers.js"></script>
276 </head>
278 <body onload="runTest();"></body>
280 </html>