IndexedDB: communicate transaction errors and async response data more precisely (#38027)

Digging into several crashing tests revealed that committing
transactions is a fallible operation. Propagating those errors led to
exposing many new errors caused by the IDBRequest implementation
assuming that all successful responses contained a structured clone. The
end result is a bunch of new test failures that were previously hidden.

Testing: Existing test coverage is sufficient.

---------

Signed-off-by: Josh Matthews <josh@joshmatthews.net>
This commit is contained in:
Josh Matthews 2025-07-14 22:04:28 -04:00 committed by GitHub
parent 027954dbad
commit 312985faff
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
9 changed files with 196 additions and 51 deletions

View file

@ -0,0 +1,21 @@
[idb-binary-key-detached.any.html]
[Detached ArrayBuffers must throw DataError when used as a key]
expected: FAIL
[Detached TypedArrays must throw DataError when used as a key]
expected: FAIL
[idb-binary-key-detached.any.worker.html]
[Detached ArrayBuffers must throw DataError when used as a key]
expected: FAIL
[Detached TypedArrays must throw DataError when used as a key]
expected: FAIL
[idb-binary-key-detached.any.serviceworker.html]
expected: ERROR
[idb-binary-key-detached.any.sharedworker.html]
expected: ERROR

View file

@ -2,10 +2,62 @@
expected: ERROR
[idbdatabase_createObjectStore.any.html]
expected: CRASH
[Both with empty name]
expected: FAIL
[Create 1000 object stores, add one item and delete]
expected: FAIL
[Empty name]
expected: FAIL
[Attempting to create an existing object store with a different keyPath throw ConstraintError ]
expected: FAIL
[Object store 'name' and 'keyPath' properties are correctly set ]
expected: FAIL
[Attempt to create an object store outside of a version change transaction ]
expected: FAIL
[Attempt to create an object store that already exists ]
expected: FAIL
[Attempt to create an object store with an invalid key path ]
expected: FAIL
[autoInc and keyPath object]
expected: FAIL
[idbdatabase_createObjectStore.any.worker.html]
expected: CRASH
[Both with empty name]
expected: FAIL
[Create 1000 object stores, add one item and delete]
expected: FAIL
[Empty name]
expected: FAIL
[Attempting to create an existing object store with a different keyPath throw ConstraintError ]
expected: FAIL
[Object store 'name' and 'keyPath' properties are correctly set ]
expected: FAIL
[Attempt to create an object store outside of a version change transaction ]
expected: FAIL
[Attempt to create an object store that already exists ]
expected: FAIL
[Attempt to create an object store with an invalid key path ]
expected: FAIL
[autoInc and keyPath object]
expected: FAIL
[idbdatabase_createObjectStore.any.serviceworker.html]
expected: ERROR

View file

@ -8,7 +8,13 @@
[The deleteDatabase() request's success event is an IDBVersionChangeEvent.]
expected: FAIL
[deleteDatabase() request should have no source, and deleting a non-existent database should succeed with oldVersion of 0.]
expected: FAIL
[idbfactory_deleteDatabase.any.worker.html]
[The deleteDatabase() request's success event is an IDBVersionChangeEvent.]
expected: FAIL
[deleteDatabase() request should have no source, and deleting a non-existent database should succeed with oldVersion of 0.]
expected: FAIL

View file

@ -3,9 +3,6 @@
[value_recursive.any.html]
expected: TIMEOUT
[Recursive value - array indirectly contains self]
expected: TIMEOUT
[Recursive value - array member contains self]
expected: TIMEOUT