63 lines
2.3 KiB
JavaScript
63 lines
2.3 KiB
JavaScript
// 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'], 'readonly');
|
|
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'], 'readonly');
|
|
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 mixed transactions are enforced.");
|