Source code
Revision control
Copy as Markdown
Other Tools
Test Info:
- This WPT test may be referenced by the following Test IDs:
- /IndexedDB/transaction-scheduling-rw-scopes.any.html - WPT Dashboard Interop Dashboard
- /IndexedDB/transaction-scheduling-rw-scopes.any.worker.html - WPT Dashboard Interop Dashboard
// 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.");