LibWeb/IndexedDB: Remove spin_until from waiting for connection closure

This commit is contained in:
Luke Wilde
2025-09-10 16:03:34 +01:00
committed by Andreas Kling
parent e6dc52a52b
commit 52b53e52fb
Notes: github-actions[bot] 2025-10-08 15:26:38 +00:00
11 changed files with 296 additions and 79 deletions

View File

@@ -11,6 +11,7 @@
#include <LibWeb/IndexedDB/IDBDatabase.h>
#include <LibWeb/IndexedDB/IDBObjectStore.h>
#include <LibWeb/IndexedDB/Internal/Algorithms.h>
#include <LibWeb/IndexedDB/Internal/IDBDatabaseObserver.h>
namespace Web::IndexedDB {
@@ -42,6 +43,7 @@ void IDBDatabase::initialize(JS::Realm& realm)
void IDBDatabase::visit_edges(Visitor& visitor)
{
Base::visit_edges(visitor);
visitor.visit(m_database_observers_being_notified);
visitor.visit(m_object_store_set);
visitor.visit(m_associated_database);
visitor.visit(m_transactions);
@@ -241,4 +243,24 @@ WebIDL::ExceptionOr<GC::Ref<IDBTransaction>> IDBDatabase::transaction(Variant<St
return transaction;
}
void IDBDatabase::register_database_observer(Badge<IDBDatabaseObserver>, IDBDatabaseObserver& database_observer)
{
auto result = m_database_observers.set(database_observer);
VERIFY(result == AK::HashSetResult::InsertedNewEntry);
}
void IDBDatabase::unregister_database_observer(Badge<IDBDatabaseObserver>, IDBDatabaseObserver& database_observer)
{
bool was_removed = m_database_observers.remove(database_observer);
VERIFY(was_removed);
}
void IDBDatabase::set_state(ConnectionState state)
{
m_state = state;
notify_each_database_observer([](IDBDatabaseObserver const& request_observer) {
return request_observer.connection_state_changed_observer();
});
}
}