[webkit-changes] [WebKit/WebKit] b5d274: [IndexedDB] Added records should be removed if tra...
Sihui
noreply at github.com
Wed Feb 26 08:58:46 PST 2025
Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: b5d274d82a73a96011e412c2d46d824ba4b42b3e
https://github.com/WebKit/WebKit/commit/b5d274d82a73a96011e412c2d46d824ba4b42b3e
Author: Sihui Liu <sihui_liu at apple.com>
Date: 2025-02-26 (Wed, 26 Feb 2025)
Changed paths:
A LayoutTests/storage/indexeddb/resources/transaction-abort-revert-records.js
A LayoutTests/storage/indexeddb/transaction-abort-revert-records-expected.txt
A LayoutTests/storage/indexeddb/transaction-abort-revert-records-private-expected.txt
A LayoutTests/storage/indexeddb/transaction-abort-revert-records-private.html
A LayoutTests/storage/indexeddb/transaction-abort-revert-records.html
M Source/WebCore/Modules/indexeddb/server/MemoryBackingStoreTransaction.cpp
M Source/WebCore/Modules/indexeddb/server/MemoryBackingStoreTransaction.h
M Source/WebCore/Modules/indexeddb/server/MemoryObjectStore.cpp
M Source/WebCore/Modules/indexeddb/server/MemoryObjectStore.h
Log Message:
-----------
[IndexedDB] Added records should be removed if transaction aborts
https://bugs.webkit.org/show_bug.cgi?id=288346
rdar://problem/145501159
Reviewed by Brady Eidson.
In current implementation, the memory backend does not roll back added records when transaction aborts. See the new test
for an example: before this patch, transaction-abort-revert-records-private.html would fail for keys added in
versionchnage transaction still present after the transaction is aborted.
The cause is MemoryBackingStoreTransaction only tracks records that are removed from object store during transaction,
but not records that are newly added. To fix that, now MemoryObjectStore tracks both added keys and removed records.
When transaction aborts, MemoryObjectStore deletes added records and re-adds deleted records. By moving the ownership of
changed records from MemoryBackingStoreTransaction to MemoryObjectStore, MemoryObjectStore does not need to notify
MemoryBackingStoreTransaction about changes, which makes the lifetime management more clear.
Tests: storage/indexeddb/transaction-abort-revert-records.html
storage/indexeddb/transaction-abort-revert-records-private.html
* LayoutTests/storage/indexeddb/resources/transaction-abort-revert-records.js: Added.
(prepareDatabase):
(onDatabasePrepared):
(onDatabaseUpgrade):
(onTranactionAbort):
(onDatabaseError):
(onDatabaseOpen):
(onGetAllKeysSuccess):
(onGetSuccess):
* LayoutTests/storage/indexeddb/transaction-abort-revert-records-expected.txt: Added.
* LayoutTests/storage/indexeddb/transaction-abort-revert-records-private-expected.txt: Added.
* LayoutTests/storage/indexeddb/transaction-abort-revert-records-private.html: Added.
* LayoutTests/storage/indexeddb/transaction-abort-revert-records.html: Added.
* Source/WebCore/Modules/indexeddb/server/MemoryBackingStoreTransaction.cpp:
(WebCore::IDBServer::MemoryBackingStoreTransaction::addExistingObjectStore):
(WebCore::IDBServer::MemoryBackingStoreTransaction::abort):
(WebCore::IDBServer::MemoryBackingStoreTransaction::objectStoreCleared): Deleted.
(WebCore::IDBServer::MemoryBackingStoreTransaction::recordValueChanged): Deleted.
* Source/WebCore/Modules/indexeddb/server/MemoryBackingStoreTransaction.h:
* Source/WebCore/Modules/indexeddb/server/MemoryObjectStore.cpp:
(WebCore::IDBServer::MemoryObjectStore::writeTransactionStarted):
(WebCore::IDBServer::MemoryObjectStore::transactionAborted):
(WebCore::IDBServer::MemoryObjectStore::writeTransactionFinished):
(WebCore::IDBServer::MemoryObjectStore::clear):
(WebCore::IDBServer::MemoryObjectStore::deleteRecord):
(WebCore::IDBServer::MemoryObjectStore::addRecord):
(WebCore::IDBServer::MemoryObjectStore::replaceKeyValueStore): Deleted.
(WebCore::IDBServer::MemoryObjectStore::unregisterIndex): Deleted.
* Source/WebCore/Modules/indexeddb/server/MemoryObjectStore.h:
Canonical link: https://commits.webkit.org/291126@main
To unsubscribe from these emails, change your notification settings at https://github.com/WebKit/WebKit/settings/notifications
More information about the webkit-changes
mailing list