LibWeb/IndexedDB: Remove spin_until from checking finished transactions

This commit is contained in:
Luke Wilde
2025-09-13 11:01:25 +01:00
committed by Andreas Kling
parent 52b53e52fb
commit d87c2a55b0
Notes: github-actions[bot] 2025-10-08 15:26:31 +00:00
10 changed files with 250 additions and 42 deletions

View File

@@ -11,6 +11,7 @@
#include <LibWeb/IndexedDB/IDBObjectStore.h>
#include <LibWeb/IndexedDB/IDBTransaction.h>
#include <LibWeb/IndexedDB/Internal/Algorithms.h>
#include <LibWeb/IndexedDB/Internal/IDBTransactionObserver.h>
namespace Web::IndexedDB {
@@ -43,6 +44,7 @@ void IDBTransaction::initialize(JS::Realm& realm)
void IDBTransaction::visit_edges(Visitor& visitor)
{
Base::visit_edges(visitor);
visitor.visit(m_transaction_observers_being_notified);
visitor.visit(m_connection);
visitor.visit(m_error);
visitor.visit(m_associated_request);
@@ -147,4 +149,27 @@ WebIDL::ExceptionOr<GC::Ref<IDBObjectStore>> IDBTransaction::object_store(String
return IDBObjectStore::create(realm, *store, *this);
}
void IDBTransaction::register_transaction_observer(Badge<IDBTransactionObserver>, IDBTransactionObserver& database_observer)
{
auto result = m_transaction_observers.set(database_observer);
VERIFY(result == AK::HashSetResult::InsertedNewEntry);
}
void IDBTransaction::unregister_transaction_observer(Badge<IDBTransactionObserver>, IDBTransactionObserver& database_observer)
{
bool was_removed = m_transaction_observers.remove(database_observer);
VERIFY(was_removed);
}
void IDBTransaction::set_state(TransactionState state)
{
m_state = state;
if (m_state == TransactionState::Finished) {
notify_each_transaction_observer([](IDBTransactionObserver const& transaction_observer) {
return transaction_observer.transaction_finished_observer();
});
}
}
}