Modified: trunk/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabaseTransaction.cpp (279959 => 279960)
--- trunk/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabaseTransaction.cpp 2021-07-15 20:39:47 UTC (rev 279959)
+++ trunk/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabaseTransaction.cpp 2021-07-15 20:40:06 UTC (rev 279960)
@@ -41,23 +41,29 @@
}
UniqueIDBDatabaseTransaction::UniqueIDBDatabaseTransaction(UniqueIDBDatabaseConnection& connection, const IDBTransactionInfo& info)
- : m_databaseConnection(&connection)
+ : m_databaseConnection(makeWeakPtr(&connection))
, m_transactionInfo(info)
{
- auto database = m_databaseConnection->database();
+ auto database = databaseConnection().database();
ASSERT(database);
if (m_transactionInfo.mode() == IDBTransactionMode::Versionchange)
m_originalDatabaseInfo = makeUnique<IDBDatabaseInfo>(database->info());
- m_databaseConnection->server()->registerTransaction(*this);
+ databaseConnection().server()->registerTransaction(*this);
}
UniqueIDBDatabaseTransaction::~UniqueIDBDatabaseTransaction()
{
- m_databaseConnection->server()->unregisterTransaction(*this);
+ databaseConnection().server()->unregisterTransaction(*this);
}
+UniqueIDBDatabaseConnection& UniqueIDBDatabaseTransaction::databaseConnection()
+{
+ RELEASE_ASSERT(m_databaseConnection);
+ return *m_databaseConnection;
+}
+
IDBDatabaseInfo* UniqueIDBDatabaseTransaction::originalDatabaseInfo() const
{
ASSERT(m_transactionInfo.mode() == IDBTransactionMode::Versionchange);
@@ -68,13 +74,13 @@
{
LOG(IndexedDB, "UniqueIDBDatabaseTransaction::abort");
- auto database = m_databaseConnection->database();
+ auto database = databaseConnection().database();
ASSERT(database);
database->abortTransaction(*this, [this](auto& error) {
LOG(IndexedDB, "UniqueIDBDatabaseTransaction::abort (callback)");
- m_databaseConnection->didAbortTransaction(*this, error);
+ databaseConnection().didAbortTransaction(*this, error);
});
}
@@ -82,7 +88,7 @@
{
LOG(IndexedDB, "UniqueIDBDatabaseTransaction::abortWithoutCallback");
- m_databaseConnection->abortTransactionWithoutCallback(*this);
+ databaseConnection().abortTransactionWithoutCallback(*this);
}
bool UniqueIDBDatabaseTransaction::isVersionChange() const
@@ -99,12 +105,12 @@
{
LOG(IndexedDB, "UniqueIDBDatabaseTransaction::commit");
- auto database = m_databaseConnection->database();
+ auto database = databaseConnection().database();
database->commitTransaction(*this, [this](auto& error) {
LOG(IndexedDB, "UniqueIDBDatabaseTransaction::commit (callback)");
- m_databaseConnection->didCommitTransaction(*this, error);
+ databaseConnection().didCommitTransaction(*this, error);
});
}
@@ -115,7 +121,7 @@
ASSERT(isVersionChange());
ASSERT(m_transactionInfo.identifier() == requestData.transactionIdentifier());
- auto database = m_databaseConnection->database();
+ auto database = databaseConnection().database();
ASSERT(database);
database->createObjectStore(*this, info, [this, requestData](auto& error) {
@@ -122,9 +128,9 @@
LOG(IndexedDB, "UniqueIDBDatabaseTransaction::createObjectStore (callback)");
if (error.isNull())
- m_databaseConnection->didCreateObjectStore(IDBResultData::createObjectStoreSuccess(requestData.requestIdentifier()));
+ databaseConnection().didCreateObjectStore(IDBResultData::createObjectStoreSuccess(requestData.requestIdentifier()));
else
- m_databaseConnection->didCreateObjectStore(IDBResultData::error(requestData.requestIdentifier(), error));
+ databaseConnection().didCreateObjectStore(IDBResultData::error(requestData.requestIdentifier(), error));
});
}
@@ -134,8 +140,8 @@
ASSERT(isVersionChange());
ASSERT(m_transactionInfo.identifier() == requestData.transactionIdentifier());
-
- auto database = m_databaseConnection->database();
+
+ auto database = databaseConnection().database();
ASSERT(database);
database->deleteObjectStore(*this, objectStoreName, [this, requestData](const IDBError& error) {
@@ -142,9 +148,9 @@
LOG(IndexedDB, "UniqueIDBDatabaseTransaction::deleteObjectStore (callback)");
if (error.isNull())
- m_databaseConnection->didDeleteObjectStore(IDBResultData::deleteObjectStoreSuccess(requestData.requestIdentifier()));
+ databaseConnection().didDeleteObjectStore(IDBResultData::deleteObjectStoreSuccess(requestData.requestIdentifier()));
else
- m_databaseConnection->didDeleteObjectStore(IDBResultData::error(requestData.requestIdentifier(), error));
+ databaseConnection().didDeleteObjectStore(IDBResultData::error(requestData.requestIdentifier(), error));
});
}
@@ -155,7 +161,7 @@
ASSERT(isVersionChange());
ASSERT(m_transactionInfo.identifier() == requestData.transactionIdentifier());
- auto database = m_databaseConnection->database();
+ auto database = databaseConnection().database();
ASSERT(database);
database->renameObjectStore(*this, objectStoreIdentifier, newName, [this, requestData](auto& error) {
@@ -162,9 +168,9 @@
LOG(IndexedDB, "UniqueIDBDatabaseTransaction::renameObjectStore (callback)");
if (error.isNull())
- m_databaseConnection->didRenameObjectStore(IDBResultData::renameObjectStoreSuccess(requestData.requestIdentifier()));
+ databaseConnection().didRenameObjectStore(IDBResultData::renameObjectStoreSuccess(requestData.requestIdentifier()));
else
- m_databaseConnection->didRenameObjectStore(IDBResultData::error(requestData.requestIdentifier(), error));
+ databaseConnection().didRenameObjectStore(IDBResultData::error(requestData.requestIdentifier(), error));
});
}
@@ -174,7 +180,7 @@
ASSERT(m_transactionInfo.identifier() == requestData.transactionIdentifier());
- auto database = m_databaseConnection->database();
+ auto database = databaseConnection().database();
ASSERT(database);
database->clearObjectStore(*this, objectStoreIdentifier, [this, requestData](auto& error) {
@@ -181,9 +187,9 @@
LOG(IndexedDB, "UniqueIDBDatabaseTransaction::clearObjectStore (callback)");
if (error.isNull())
- m_databaseConnection->didClearObjectStore(IDBResultData::clearObjectStoreSuccess(requestData.requestIdentifier()));
+ databaseConnection().didClearObjectStore(IDBResultData::clearObjectStoreSuccess(requestData.requestIdentifier()));
else
- m_databaseConnection->didClearObjectStore(IDBResultData::error(requestData.requestIdentifier(), error));
+ databaseConnection().didClearObjectStore(IDBResultData::error(requestData.requestIdentifier(), error));
});
}
@@ -194,7 +200,7 @@
ASSERT(isVersionChange());
ASSERT(m_transactionInfo.identifier() == requestData.transactionIdentifier());
- auto database = m_databaseConnection->database();
+ auto database = databaseConnection().database();
ASSERT(database);
database->createIndex(*this, info, [this, requestData](auto& error) {
@@ -201,9 +207,9 @@
LOG(IndexedDB, "UniqueIDBDatabaseTransaction::createIndex (callback)");
if (error.isNull())
- m_databaseConnection->didCreateIndex(IDBResultData::createIndexSuccess(requestData.requestIdentifier()));
+ databaseConnection().didCreateIndex(IDBResultData::createIndexSuccess(requestData.requestIdentifier()));
else
- m_databaseConnection->didCreateIndex(IDBResultData::error(requestData.requestIdentifier(), error));
+ databaseConnection().didCreateIndex(IDBResultData::error(requestData.requestIdentifier(), error));
});
}
@@ -214,7 +220,7 @@
ASSERT(isVersionChange());
ASSERT(m_transactionInfo.identifier() == requestData.transactionIdentifier());
- auto database = m_databaseConnection->database();
+ auto database = databaseConnection().database();
ASSERT(database);
database->deleteIndex(*this, objectStoreIdentifier, indexName, [this, requestData](auto& error) {
@@ -221,9 +227,9 @@
LOG(IndexedDB, "UniqueIDBDatabaseTransaction::createIndex (callback)");
if (error.isNull())
- m_databaseConnection->didDeleteIndex(IDBResultData::deleteIndexSuccess(requestData.requestIdentifier()));
+ databaseConnection().didDeleteIndex(IDBResultData::deleteIndexSuccess(requestData.requestIdentifier()));
else
- m_databaseConnection->didDeleteIndex(IDBResultData::error(requestData.requestIdentifier(), error));
+ databaseConnection().didDeleteIndex(IDBResultData::error(requestData.requestIdentifier(), error));
});
}
@@ -233,8 +239,8 @@
ASSERT(isVersionChange());
ASSERT(m_transactionInfo.identifier() == requestData.transactionIdentifier());
-
- auto database = m_databaseConnection->database();
+
+ auto database = databaseConnection().database();
ASSERT(database);
database->renameIndex(*this, objectStoreIdentifier, indexIdentifier, newName, [this, requestData](auto& error) {
@@ -241,9 +247,9 @@
LOG(IndexedDB, "UniqueIDBDatabaseTransaction::renameIndex (callback)");
if (error.isNull())
- m_databaseConnection->didRenameIndex(IDBResultData::renameIndexSuccess(requestData.requestIdentifier()));
+ databaseConnection().didRenameIndex(IDBResultData::renameIndexSuccess(requestData.requestIdentifier()));
else
- m_databaseConnection->didRenameIndex(IDBResultData::error(requestData.requestIdentifier(), error));
+ databaseConnection().didRenameIndex(IDBResultData::error(requestData.requestIdentifier(), error));
});
}
@@ -255,7 +261,7 @@
ASSERT(!isReadOnly());
ASSERT(m_transactionInfo.identifier() == requestData.transactionIdentifier());
- auto database = m_databaseConnection->database();
+ auto database = databaseConnection().database();
ASSERT(database);
database->putOrAdd(requestData, keyData, value, overwriteMode, [this, requestData](auto& error, const IDBKeyData& key) {
@@ -262,9 +268,9 @@
LOG(IndexedDB, "UniqueIDBDatabaseTransaction::putOrAdd (callback)");
if (error.isNull())
- m_databaseConnection->connectionToClient().didPutOrAdd(IDBResultData::putOrAddSuccess(requestData.requestIdentifier(), key));
+ databaseConnection().connectionToClient().didPutOrAdd(IDBResultData::putOrAddSuccess(requestData.requestIdentifier(), key));
else
- m_databaseConnection->connectionToClient().didPutOrAdd(IDBResultData::error(requestData.requestIdentifier(), error));
+ databaseConnection().connectionToClient().didPutOrAdd(IDBResultData::error(requestData.requestIdentifier(), error));
});
}
@@ -274,7 +280,7 @@
ASSERT(m_transactionInfo.identifier() == requestData.transactionIdentifier());
- auto database = m_databaseConnection->database();
+ auto database = databaseConnection().database();
ASSERT(database);
database->getRecord(requestData, getRecordData, [this, requestData](auto& error, const IDBGetResult& result) {
@@ -281,9 +287,9 @@
LOG(IndexedDB, "UniqueIDBDatabaseTransaction::getRecord (callback)");
if (error.isNull())
- m_databaseConnection->connectionToClient().didGetRecord(IDBResultData::getRecordSuccess(requestData.requestIdentifier(), result));
+ databaseConnection().connectionToClient().didGetRecord(IDBResultData::getRecordSuccess(requestData.requestIdentifier(), result));
else
- m_databaseConnection->connectionToClient().didGetRecord(IDBResultData::error(requestData.requestIdentifier(), error));
+ databaseConnection().connectionToClient().didGetRecord(IDBResultData::error(requestData.requestIdentifier(), error));
});
}
@@ -293,7 +299,7 @@
ASSERT(m_transactionInfo.identifier() == requestData.transactionIdentifier());
- auto database = m_databaseConnection->database();
+ auto database = databaseConnection().database();
ASSERT(database);
database->getAllRecords(requestData, getAllRecordsData, [this, requestData](auto& error, const IDBGetAllResult& result) {
@@ -300,9 +306,9 @@
LOG(IndexedDB, "UniqueIDBDatabaseTransaction::getAllRecords (callback)");
if (error.isNull())
- m_databaseConnection->connectionToClient().didGetAllRecords(IDBResultData::getAllRecordsSuccess(requestData.requestIdentifier(), result));
+ databaseConnection().connectionToClient().didGetAllRecords(IDBResultData::getAllRecordsSuccess(requestData.requestIdentifier(), result));
else
- m_databaseConnection->connectionToClient().didGetAllRecords(IDBResultData::error(requestData.requestIdentifier(), error));
+ databaseConnection().connectionToClient().didGetAllRecords(IDBResultData::error(requestData.requestIdentifier(), error));
});
}
@@ -312,7 +318,7 @@
ASSERT(m_transactionInfo.identifier() == requestData.transactionIdentifier());
- auto database = m_databaseConnection->database();
+ auto database = databaseConnection().database();
ASSERT(database);
database->getCount(requestData, keyRangeData, [this, requestData](auto& error, uint64_t count) {
@@ -319,9 +325,9 @@
LOG(IndexedDB, "UniqueIDBDatabaseTransaction::getCount (callback)");
if (error.isNull())
- m_databaseConnection->connectionToClient().didGetCount(IDBResultData::getCountSuccess(requestData.requestIdentifier(), count));
+ databaseConnection().connectionToClient().didGetCount(IDBResultData::getCountSuccess(requestData.requestIdentifier(), count));
else
- m_databaseConnection->connectionToClient().didGetCount(IDBResultData::error(requestData.requestIdentifier(), error));
+ databaseConnection().connectionToClient().didGetCount(IDBResultData::error(requestData.requestIdentifier(), error));
});
}
@@ -331,7 +337,7 @@
ASSERT(m_transactionInfo.identifier() == requestData.transactionIdentifier());
- auto database = m_databaseConnection->database();
+ auto database = databaseConnection().database();
ASSERT(database);
database->deleteRecord(requestData, keyRangeData, [this, requestData](auto& error) {
@@ -338,9 +344,9 @@
LOG(IndexedDB, "UniqueIDBDatabaseTransaction::deleteRecord (callback)");
if (error.isNull())
- m_databaseConnection->connectionToClient().didDeleteRecord(IDBResultData::deleteRecordSuccess(requestData.requestIdentifier()));
+ databaseConnection().connectionToClient().didDeleteRecord(IDBResultData::deleteRecordSuccess(requestData.requestIdentifier()));
else
- m_databaseConnection->connectionToClient().didDeleteRecord(IDBResultData::error(requestData.requestIdentifier(), error));
+ databaseConnection().connectionToClient().didDeleteRecord(IDBResultData::error(requestData.requestIdentifier(), error));
});
}
@@ -350,7 +356,7 @@
ASSERT(m_transactionInfo.identifier() == requestData.transactionIdentifier());
- auto database = m_databaseConnection->database();
+ auto database = databaseConnection().database();
ASSERT(database);
database->openCursor(requestData, info, [this, requestData](auto& error, const IDBGetResult& result) {
@@ -357,9 +363,9 @@
LOG(IndexedDB, "UniqueIDBDatabaseTransaction::openCursor (callback)");
if (error.isNull())
- m_databaseConnection->connectionToClient().didOpenCursor(IDBResultData::openCursorSuccess(requestData.requestIdentifier(), result));
+ databaseConnection().connectionToClient().didOpenCursor(IDBResultData::openCursorSuccess(requestData.requestIdentifier(), result));
else
- m_databaseConnection->connectionToClient().didOpenCursor(IDBResultData::error(requestData.requestIdentifier(), error));
+ databaseConnection().connectionToClient().didOpenCursor(IDBResultData::error(requestData.requestIdentifier(), error));
});
}
@@ -368,8 +374,8 @@
LOG(IndexedDB, "UniqueIDBDatabaseTransaction::iterateCursor");
ASSERT(m_transactionInfo.identifier() == requestData.transactionIdentifier());
-
- auto database = m_databaseConnection->database();
+
+ auto database = databaseConnection().database();
ASSERT(database);
database->iterateCursor(requestData, data, [this, requestData, option = data.option](auto& error, const IDBGetResult& result) {
@@ -379,9 +385,9 @@
return;
if (error.isNull())
- m_databaseConnection->connectionToClient().didIterateCursor(IDBResultData::iterateCursorSuccess(requestData.requestIdentifier(), result));
+ databaseConnection().connectionToClient().didIterateCursor(IDBResultData::iterateCursorSuccess(requestData.requestIdentifier(), result));
else
- m_databaseConnection->connectionToClient().didIterateCursor(IDBResultData::error(requestData.requestIdentifier(), error));
+ databaseConnection().connectionToClient().didIterateCursor(IDBResultData::error(requestData.requestIdentifier(), error));
});
}
@@ -390,7 +396,7 @@
if (!m_objectStoreIdentifiers.isEmpty())
return m_objectStoreIdentifiers;
- auto& info = m_databaseConnection->database()->info();
+ auto& info = databaseConnection().database()->info();
for (const auto& objectStoreName : info.objectStoreNames()) {
auto objectStoreInfo = info.infoForExistingObjectStore(objectStoreName);
ASSERT(objectStoreInfo);
@@ -408,7 +414,7 @@
{
LOG(IndexedDB, "UniqueIDBDatabaseTransaction::didActivateInBackingStore");
- m_databaseConnection->connectionToClient().didStartTransaction(m_transactionInfo.identifier(), error);
+ databaseConnection().connectionToClient().didStartTransaction(m_transactionInfo.identifier(), error);
}
} // namespace IDBServer