indexeddb.https.html (2459B)
1 <!DOCTYPE html> 2 <title>Service Worker: Indexed DB</title> 3 <script src="/resources/testharness.js"></script> 4 <script src="/resources/testharnessreport.js"></script> 5 <script src="resources/test-helpers.sub.js"></script> 6 <script> 7 function readDB() { 8 return new Promise(function(resolve, reject) { 9 var openRequest = indexedDB.open('db'); 10 11 openRequest.onerror = reject; 12 openRequest.onsuccess = function() { 13 var db = openRequest.result; 14 var tx = db.transaction('store'); 15 var store = tx.objectStore('store'); 16 var getRequest = store.get('key'); 17 18 getRequest.onerror = function() { 19 db.close(); 20 reject(getRequest.error); 21 }; 22 getRequest.onsuccess = function() { 23 db.close(); 24 resolve(getRequest.result); 25 }; 26 }; 27 }); 28 } 29 30 function send(worker, action) { 31 return new Promise(function(resolve, reject) { 32 var messageChannel = new MessageChannel(); 33 messageChannel.port1.onmessage = function(event) { 34 if (event.data.type === 'error') { 35 reject(event.data.reason); 36 } 37 38 resolve(); 39 }; 40 41 worker.postMessage( 42 {action: action, port: messageChannel.port2}, 43 [messageChannel.port2]); 44 }); 45 } 46 47 promise_test(function(t) { 48 var scope = 'resources/blank.html'; 49 50 return service_worker_unregister_and_register( 51 t, 'resources/indexeddb-worker.js', scope) 52 .then(function(registration) { 53 var worker = registration.installing; 54 55 promise_test(function() { 56 return registration.unregister(); 57 }, 'clean up: registration'); 58 59 return send(worker, 'create') 60 .then(function() { 61 promise_test(function() { 62 return new Promise(function(resolve, reject) { 63 var delete_request = indexedDB.deleteDatabase('db'); 64 65 delete_request.onsuccess = resolve; 66 delete_request.onerror = reject; 67 }); 68 }, 'clean up: database'); 69 }) 70 .then(readDB) 71 .then(function(value) { 72 assert_equals( 73 value, 'value', 74 'The get() result should match what the worker put().'); 75 }); 76 }); 77 }, 'Verify Indexed DB operation in a Service Worker'); 78 </script>