mirror of
https://github.com/LadybirdBrowser/ladybird
synced 2026-05-03 04:52:06 +02:00
LibWeb/IndexedDB: Prevent copying and moving of RequestList
RequestList cannot be copied or moved, because m_pending_request_queue contains lambdas that store pointers to the original RequestList and completion steps that we don't have a reference to. Fixes a bunch of WPT regressions and imports the ones that work.
This commit is contained in:
committed by
Jelle Raaijmakers
parent
4ede2cdf18
commit
85e8d2ba38
Notes:
github-actions[bot]
2025-10-23 12:44:02 +00:00
Author: https://github.com/Lubrsi Commit: https://github.com/LadybirdBrowser/ladybird/commit/85e8d2ba38b Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/6429 Reviewed-by: https://github.com/gmta ✅
@@ -0,0 +1,62 @@
|
||||
// META: title=IndexedDB: IDBIndex query method Ordering
|
||||
// META: global=window,worker
|
||||
// META: script=resources/support.js
|
||||
|
||||
// Spec: https://w3c.github.io/IndexedDB/#dom-idbindex-get
|
||||
// Spec: https://w3c.github.io/IndexedDB/#dom-idbindex-getall
|
||||
// Spec: https://w3c.github.io/IndexedDB/#dom-idbindex-getallkeys
|
||||
// Spec: https://w3c.github.io/IndexedDB/#dom-idbindex-count
|
||||
// Spec: https://w3c.github.io/IndexedDB/#dom-idbindex-opencursor
|
||||
// Spec: https://w3c.github.io/IndexedDB/#dom-idbindex-openkeycursor
|
||||
|
||||
'use strict';
|
||||
|
||||
[ 'get',
|
||||
'getAll',
|
||||
'getAllKeys',
|
||||
'count',
|
||||
'openCursor',
|
||||
'openKeyCursor'
|
||||
].forEach(method => {
|
||||
indexeddb_test(
|
||||
(t, db) => {
|
||||
const store = db.createObjectStore('s');
|
||||
const store2 = db.createObjectStore('s2');
|
||||
const index = store2.createIndex('i', 'keyPath');
|
||||
store2.deleteIndex('i');
|
||||
|
||||
setTimeout(t.step_func(() => {
|
||||
assert_throws_dom(
|
||||
'InvalidStateError', () => { index[method]('key'); },
|
||||
'"has been deleted" check (InvalidStateError) should precede ' +
|
||||
'"not active" check (TransactionInactiveError)');
|
||||
t.done();
|
||||
}), 0);
|
||||
},
|
||||
(t, db) => {},
|
||||
`IDBIndex.${method} exception order: ` +
|
||||
'InvalidStateError vs. TransactionInactiveError'
|
||||
);
|
||||
|
||||
indexeddb_test(
|
||||
(t, db) => {
|
||||
const store = db.createObjectStore('s');
|
||||
const index = store.createIndex('i', 'keyPath');
|
||||
},
|
||||
(t, db) => {
|
||||
const tx = db.transaction('s', 'readonly');
|
||||
const store = tx.objectStore('s');
|
||||
const index = store.index('i');
|
||||
|
||||
setTimeout(t.step_func(() => {
|
||||
assert_throws_dom(
|
||||
'TransactionInactiveError', () => { index[method]({}); },
|
||||
'"not active" check (TransactionInactiveError) should precede ' +
|
||||
'query check (DataError)');
|
||||
t.done();
|
||||
}), 0);
|
||||
},
|
||||
`IDBIndex.${method} exception order: ` +
|
||||
'TransactionInactiveError vs. DataError'
|
||||
);
|
||||
});
|
||||
Reference in New Issue
Block a user