Index: LayoutTests/storage/indexeddb/metadata-race.html |
diff --git a/LayoutTests/storage/indexeddb/metadata-race.html b/LayoutTests/storage/indexeddb/metadata-race.html |
new file mode 100644 |
index 0000000000000000000000000000000000000000..2ac0bc479445472ba391de0bb004ab802e81771b |
--- /dev/null |
+++ b/LayoutTests/storage/indexeddb/metadata-race.html |
@@ -0,0 +1,40 @@ |
+<!DOCTYPE html> |
+<script src="../../fast/js/resources/js-test-pre.js"></script> |
+<script src="resources/shared.js"></script> |
+<script> |
+ |
+description("Ensure IndexedDB transactions created before open onsuccess have correct metadata"); |
+ |
+indexedDBTest(prepareDatabase, onOpenSuccess); |
+function prepareDatabase(evt) |
+{ |
+ preamble(evt); |
+ evalAndLog("db = event.target.result"); |
+ evalAndLog("store = db.createObjectStore('store')"); |
+ evalAndLog("store.createIndex('index', 'keyPath')"); |
+ evalAndLog("transaction = event.target.transaction"); |
+ shouldNotThrow("index = transaction.objectStore('store').index('index')"); |
+ transaction.oncomplete = onTransactionComplete; |
+} |
+ |
+function onTransactionComplete(evt) |
+{ |
+ preamble(evt); |
+ debug("In multiprocess mode, 'complete' event may be dispatched before\n" + |
+ "the 'success' arrives with updated metadata. Ensure the new metadata\n" + |
+ "is still used for transactions."); |
+ evalAndLog("store = db.transaction('store').objectStore('store')"); |
+ shouldNotThrow("index = store.index('index')"); |
+} |
+ |
+function onOpenSuccess(evt) |
+{ |
+ preamble(evt); |
+ evalAndLog("db = event.target.result"); |
+ evalAndLog("store = db.transaction('store').objectStore('store')"); |
+ shouldNotThrow("index = store.index('index')"); |
+ finishJSTest(); |
+} |
+ |
+</script> |
+<script src="../../fast/js/resources/js-test-post.js"></script> |