OLD | NEW |
1 <!DOCTYPE html> | 1 <!DOCTYPE html> |
2 <script src="/js-test-resources/js-test.js"></script> | 2 <title>Service Worker: Indexed DB</title> |
| 3 <script src="../resources/testharness.js"></script> |
| 4 <script src="../resources/testharnessreport.js"></script> |
3 <script> | 5 <script> |
| 6 var test = async_test('Verify Indexed DB operation in a Service Worker'); |
| 7 test.step(function() { |
4 | 8 |
5 description("Verify that IndexedDB is functional in a ServiceWorker"); | 9 navigator.serviceWorker.register('resources/indexeddb-worker.js').then( |
6 var jsTestIsAsync = true; | 10 test.step_func(function(worker) { |
| 11 var messageChannel = new MessageChannel(); |
| 12 messageChannel.port1.onmessage = test.step_func(onMessage); |
7 | 13 |
8 evalAndLog("messageChannel = new MessageChannel()"); | 14 worker.postMessage({port: messageChannel.port2}, [messageChannel.por
t2]); |
9 evalAndLog("messageChannel.port1.onmessage = onMessageHandler"); | 15 }), |
| 16 test.step_func(function(reason) { |
| 17 assert_unreached('Registration should succeed, but failed: ' + reaso
n.name); |
| 18 })); |
10 | 19 |
11 debug(""); | 20 function onMessage() { |
12 evalAndLog("navigator.serviceWorker.register('indexeddb-worker.js')").then( | 21 var openRequest = indexedDB.open('db'); |
13 function(result) { | 22 openRequest.onsuccess = test.step_func(function() { |
14 serviceWorker = result; | 23 var db = openRequest.result; |
15 evalAndLog("serviceWorker.postMessage({port: messageChannel.port2}, [mes
sageChannel.port2])"); | 24 var tx = db.transaction('store'); |
16 }, | 25 var store = tx.objectStore('store'); |
17 function(reason) { | 26 var getRequest = store.get('key'); |
18 testFailed(reason.name); | 27 getRequest.onsuccess = test.step_func(function() { |
19 finishJSTest(); | 28 assert_equals(getRequest.result, 'value', |
20 }); | 29 'The get() result should match what the worker put
().'); |
21 | 30 test.done(); |
22 function onMessageHandler(e) { | 31 }); |
23 var prefix = "[ServiceWorker] "; | 32 }); |
24 message = e.data; | |
25 switch (message.action) { | |
26 case 'log': | |
27 debug(prefix + message.text); | |
28 break; | |
29 case 'pass': | |
30 testPassed(prefix + message.text); | |
31 break; | |
32 case 'fail': | |
33 testFailed(prefix + message.text); | |
34 break; | |
35 case 'quit': | |
36 verifyDatabase(); | |
37 break; | |
38 } | 33 } |
39 } | 34 }); |
40 | |
41 function verifyDatabase() { | |
42 debug(""); | |
43 debug("Verifying the database from the page"); | |
44 debug(""); | |
45 evalAndLog("request = indexedDB.open('db')"); | |
46 request.onsuccess = function() { | |
47 evalAndLog("db = request.result"); | |
48 evalAndLog("tx = db.transaction('store')"); | |
49 evalAndLog("store = tx.objectStore('store')"); | |
50 evalAndLog("request = store.get('key')"); | |
51 request.onsuccess = function() { | |
52 shouldBe("request.result", "'value'"); | |
53 finishJSTest(); | |
54 }; | |
55 }; | |
56 } | |
57 </script> | 35 </script> |
OLD | NEW |