Index: third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/resources/indexeddb-worker.js |
diff --git a/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/resources/indexeddb-worker.js b/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/resources/indexeddb-worker.js |
index ef89550b3e0b26d84df9b0e8f3c00ef8265179cb..9add47683884c04fc22c34337714fd2a356dcac7 100644 |
--- a/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/resources/indexeddb-worker.js |
+++ b/third_party/WebKit/LayoutTests/external/wpt/service-workers/service-worker/resources/indexeddb-worker.js |
@@ -1,26 +1,57 @@ |
-var port; |
self.addEventListener('message', function(e) { |
var message = e.data; |
- if ('port' in message) |
- doIndexedDBTest(message.port); |
+ 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) { |
- var delete_request = indexedDB.deleteDatabase('db'); |
- delete_request.onsuccess = function() { |
- var open_request = indexedDB.open('db'); |
- 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.oncomplete = function() { |
- port.postMessage('done'); |
+ 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(); |
+ }; |
}; |
- }; |
- }; |
+ }); |
} |