diff --git a/Libraries/LibWeb/IndexedDB/Internal/Algorithms.cpp b/Libraries/LibWeb/IndexedDB/Internal/Algorithms.cpp index 4e51fae300f..e0a9a6352db 100644 --- a/Libraries/LibWeb/IndexedDB/Internal/Algorithms.cpp +++ b/Libraries/LibWeb/IndexedDB/Internal/Algorithms.cpp @@ -40,8 +40,11 @@ WebIDL::ExceptionOr> open_a_database_connection(JS::Realm& })); // 4. Let db be the database named name in storageKey, or null otherwise. - auto maybe_db = Database::for_key_and_name(storage_key, name); GC::Ptr db; + auto maybe_db = Database::for_key_and_name(storage_key, name); + if (maybe_db.has_value()) { + db = maybe_db.value(); + } // 5. If version is undefined, let version be 1 if db is null, or db’s version otherwise. auto version = maybe_version.value_or(maybe_db.has_value() ? maybe_db.value()->version() : 1); diff --git a/Libraries/LibWeb/IndexedDB/Internal/Database.cpp b/Libraries/LibWeb/IndexedDB/Internal/Database.cpp index d6d94585788..f86d4d0c1d5 100644 --- a/Libraries/LibWeb/IndexedDB/Internal/Database.cpp +++ b/Libraries/LibWeb/IndexedDB/Internal/Database.cpp @@ -52,9 +52,12 @@ ErrorOr> Database::create_for_key_and_name(JS::Realm& realm, return HashMap>(); })); - return database_mapping.try_ensure(name, [&] { - return Database::create(realm, name); - }); + auto value = Database::create(realm, name); + + database_mapping.set(name, value); + m_databases.set(key, database_mapping); + + return value; } ErrorOr Database::delete_for_key_and_name(StorageAPI::StorageKey& key, String& name) @@ -73,6 +76,8 @@ ErrorOr Database::delete_for_key_and_name(StorageAPI::StorageKey& key, Str if (!did_remove) return {}; + m_databases.set(key, database_mapping); + return {}; }