summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/IndexedDB/transaction-scheduling-rw-scopes.any.js
diff options
context:
space:
mode:
Diffstat (limited to 'testing/web-platform/tests/IndexedDB/transaction-scheduling-rw-scopes.any.js')
-rw-r--r--testing/web-platform/tests/IndexedDB/transaction-scheduling-rw-scopes.any.js63
1 files changed, 63 insertions, 0 deletions
diff --git a/testing/web-platform/tests/IndexedDB/transaction-scheduling-rw-scopes.any.js b/testing/web-platform/tests/IndexedDB/transaction-scheduling-rw-scopes.any.js
new file mode 100644
index 0000000000..7296fef3b0
--- /dev/null
+++ b/testing/web-platform/tests/IndexedDB/transaction-scheduling-rw-scopes.any.js
@@ -0,0 +1,63 @@
+// META: script=resources/support.js
+
+indexeddb_test(
+ (t, db) => {
+ const store = db.createObjectStore('store');
+ db.createObjectStore('a');
+ db.createObjectStore('b');
+ db.createObjectStore('c');
+ },
+
+ (t, db) => {
+ let transaction1Started = false;
+ let transaction1Complete = false;
+ let transaction2Started = false;
+ let transaction2Complete = false;
+ let transaction3Started = false;
+ let transaction3Complete = false;
+
+ const transaction1 = db.transaction(['a'], 'readwrite');
+ let request = transaction1.objectStore('a').get(0);
+ request.onerror = t.unreached_func('request should succeed');
+ request.onsuccess = t.step_func(() => {
+ transaction1Started = true;
+ });
+ transaction1.onabort = t.unreached_func('transaction1 should complete');
+ transaction1.oncomplete = t.step_func(() => {
+ transaction1Complete = true;
+ assert_false(transaction2Started);
+ assert_false(transaction3Started);
+ });
+
+
+ // transaction2 overlaps with transaction1, so must wait until transaction1
+ // completes.
+ const transaction2 = db.transaction(['a', 'b'], 'readwrite');
+ request = transaction2.objectStore('a').get(0);
+ request.onerror = t.unreached_func('request should succeed');
+ request.onsuccess = t.step_func(() => {
+ assert_true(transaction1Complete);
+ transaction2Started = true;
+ });
+ transaction2.onabort = t.unreached_func('transaction2 should complete');
+ transaction2.oncomplete = t.step_func(() => {
+ transaction2Complete = true;
+ assert_false(transaction3Started);
+ });
+
+ // transaction3 overlaps with transaction2, so must wait until transaction2
+ // completes even though it does not overlap with transaction1.
+ const transaction3 = db.transaction(['b', 'c'], 'readwrite');
+ request = transaction3.objectStore('b').get(0);
+ request.onerror = t.unreached_func('request should succeed');
+ request.onsuccess = t.step_func(() => {
+ assert_true(transaction1Complete);
+ assert_true(transaction2Complete);
+ transaction3Started = true;
+ });
+ transaction3.onabort = t.unreached_func('transaction3 should complete');
+ transaction3.oncomplete = t.step_func_done(() => {
+ transaction3Complete = true;
+ });
+ },
+ "Check that scope restrictions on read-write transactions are enforced.");