mirror of
https://github.com/LadybirdBrowser/ladybird
synced 2026-04-27 02:05:07 +02:00
If the current JS task has not made any requests, then nothing else will trigger a commit like the spec desires, so we need to do it in the microtask checkpoint. Two WPT tests no longer time out with this change and have been imported.
70 lines
2.4 KiB
JavaScript
70 lines
2.4 KiB
JavaScript
// META: title=IndexedDB: Commit ordering of empty transactions
|
|
// META: global=window,worker
|
|
// META: script=resources/support.js
|
|
|
|
'use strict';
|
|
|
|
indexeddb_test(
|
|
(t, db) => {
|
|
db.createObjectStore('store');
|
|
},
|
|
(t, db) => {
|
|
let saw = expect(t, [
|
|
'rq1.onsuccess', 'rq2.onsuccess', 'tx1.oncomplete', 'tx2.oncomplete'
|
|
]);
|
|
|
|
let tx1 = db.transaction('store', 'readwrite');
|
|
tx1.onabort = t.unreached_func('transaction should commit');
|
|
tx1.oncomplete = t.step_func(() => saw('tx1.oncomplete'));
|
|
|
|
let store = tx1.objectStore('store');
|
|
let rq1 = store.put('a', 1);
|
|
rq1.onerror = t.unreached_func('put should succeed');
|
|
rq1.onsuccess = t.step_func(() => {
|
|
saw('rq1.onsuccess');
|
|
|
|
let tx2 = db.transaction('store', 'readonly');
|
|
tx2.onabort = t.unreached_func('transaction should commit');
|
|
tx2.oncomplete = t.step_func(() => saw('tx2.oncomplete'));
|
|
|
|
let rq2 = store.put('b', 2);
|
|
rq2.onsuccess = t.step_func(() => saw('rq2.onsuccess'));
|
|
rq2.onerror = t.unreached_func('request should succeed');
|
|
});
|
|
},
|
|
'Transactions without requests complete in the expected order');
|
|
|
|
indexeddb_test(
|
|
(t, db) => {
|
|
db.createObjectStore('store');
|
|
},
|
|
(t, db) => {
|
|
let saw = expect(t, [
|
|
'rq1.onsuccess', 'rq2.onsuccess', 'tx1.oncomplete', 'tx2.oncomplete',
|
|
'tx3.oncomplete'
|
|
]);
|
|
let tx1 = db.transaction('store', 'readwrite');
|
|
tx1.onabort = t.unreached_func('transaction should commit');
|
|
tx1.oncomplete = t.step_func(() => saw('tx1.oncomplete'));
|
|
|
|
let store = tx1.objectStore('store');
|
|
let rq1 = store.put('a', 1);
|
|
rq1.onerror = t.unreached_func('put should succeed');
|
|
rq1.onsuccess = t.step_func(() => {
|
|
saw('rq1.onsuccess');
|
|
|
|
let tx2 = db.transaction('store', 'readonly');
|
|
tx2.onabort = t.unreached_func('transaction should commit');
|
|
tx2.oncomplete = t.step_func(() => saw('tx2.oncomplete'));
|
|
|
|
let tx3 = db.transaction('store', 'readonly');
|
|
tx3.onabort = t.unreached_func('transaction should commit');
|
|
tx3.oncomplete = t.step_func(() => saw('tx3.oncomplete'));
|
|
|
|
let rq2 = store.put('b', 2);
|
|
rq2.onsuccess = t.step_func(() => saw('rq2.onsuccess'));
|
|
rq2.onerror = t.unreached_func('request should succeed');
|
|
});
|
|
},
|
|
'Multiple transactions without requests complete in the expected order');
|