| self.addEventListener('message', function(e) { |
| var message = e.data; |
| if (message.action === 'create') { |
| e.waitUntil(deleteDB() |
| .then(doIndexedDBTest) |
| .then(function() { |
| message.port.postMessage({ type: 'created' }); |
| }) |
| .catch(function(reason) { |
| message.port.postMessage({ type: 'error', value: reason }); |
| })); |
| } else if (message.action === 'cleanup') { |
| e.waitUntil(deleteDB() |
| .then(function() { |
| message.port.postMessage({ type: 'done' }); |
| }) |
| .catch(function(reason) { |
| message.port.postMessage({ type: 'error', value: reason }); |
| })); |
| } |
| }); |
| |
| function deleteDB() { |
| return new Promise(function(resolve, reject) { |
| var delete_request = indexedDB.deleteDatabase('db'); |
| |
| delete_request.onsuccess = resolve; |
| delete_request.onerror = reject; |
| }); |
| } |
| |
| function doIndexedDBTest(port) { |
| return new Promise(function(resolve, reject) { |
| var open_request = indexedDB.open('db'); |
| |
| open_request.onerror = reject; |
| open_request.onupgradeneeded = function() { |
| var db = open_request.result; |
| db.createObjectStore('store'); |
| }; |
| open_request.onsuccess = function() { |
| var db = open_request.result; |
| var tx = db.transaction('store', 'readwrite'); |
| var store = tx.objectStore('store'); |
| store.put('value', 'key'); |
| |
| tx.onerror = function() { |
| db.close(); |
| reject(tx.error); |
| }; |
| tx.oncomplete = function() { |
| db.close(); |
| resolve(); |
| }; |
| }; |
| }); |
| } |