Modified: trunk/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabaseConnection.cpp (234790 => 234791)
--- trunk/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabaseConnection.cpp 2018-08-13 02:48:08 UTC (rev 234790)
+++ trunk/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabaseConnection.cpp 2018-08-13 06:33:08 UTC (rev 234791)
@@ -44,17 +44,18 @@
}
UniqueIDBDatabaseConnection::UniqueIDBDatabaseConnection(UniqueIDBDatabase& database, ServerOpenDBRequest& request)
- : m_database(database)
+ : m_database(makeWeakPtr(database))
, m_connectionToClient(request.connection())
, m_openRequestIdentifier(request.requestData().requestIdentifier())
{
- m_database.server().registerDatabaseConnection(*this);
+ m_database->server().registerDatabaseConnection(*this);
m_connectionToClient.registerDatabaseConnection(*this);
}
UniqueIDBDatabaseConnection::~UniqueIDBDatabaseConnection()
{
- m_database.server().unregisterDatabaseConnection(*this);
+ if (m_database)
+ m_database->server().unregisterDatabaseConnection(*this);
m_connectionToClient.unregisterDatabaseConnection(*this);
}
@@ -70,7 +71,11 @@
const auto& transactionIdentifier = transaction.info().identifier();
RefPtr<UniqueIDBDatabaseConnection> protectedThis(this);
- m_database.abortTransaction(transaction, [this, protectedThis, transactionIdentifier](const IDBError&) {
+ ASSERT(m_database);
+ if (!m_database)
+ return;
+
+ m_database->abortTransaction(transaction, [this, protectedThis, transactionIdentifier](const IDBError&) {
ASSERT(m_transactionMap.contains(transactionIdentifier));
m_transactionMap.remove(transactionIdentifier);
});
@@ -87,7 +92,9 @@
{
LOG(IndexedDB, "UniqueIDBDatabaseConnection::connectionClosedFromClient - %s - %" PRIu64, m_openRequestIdentifier.loggingString().utf8().data(), identifier());
- m_database.connectionClosedFromClient(*this);
+ ASSERT(m_database);
+ if (m_database)
+ m_database->connectionClosedFromClient(*this);
}
void UniqueIDBDatabaseConnection::confirmDidCloseFromServer()
@@ -94,7 +101,9 @@
{
LOG(IndexedDB, "UniqueIDBDatabaseConnection::confirmDidCloseFromServer - %s - %" PRIu64, m_openRequestIdentifier.loggingString().utf8().data(), identifier());
- m_database.confirmDidCloseFromServer(*this);
+ ASSERT(m_database);
+ if (m_database)
+ m_database->confirmDidCloseFromServer(*this);
}
void UniqueIDBDatabaseConnection::didFireVersionChangeEvent(const IDBResourceIdentifier& requestIdentifier)
@@ -101,7 +110,9 @@
{
LOG(IndexedDB, "UniqueIDBDatabaseConnection::didFireVersionChangeEvent - %s - %" PRIu64, m_openRequestIdentifier.loggingString().utf8().data(), identifier());
- m_database.didFireVersionChangeEvent(*this, requestIdentifier);
+ ASSERT(m_database);
+ if (m_database)
+ m_database->didFireVersionChangeEvent(*this, requestIdentifier);
}
void UniqueIDBDatabaseConnection::didFinishHandlingVersionChange(const IDBResourceIdentifier& transactionIdentifier)
@@ -108,7 +119,9 @@
{
LOG(IndexedDB, "UniqueIDBDatabaseConnection::didFinishHandlingVersionChange - %s - %" PRIu64, transactionIdentifier.loggingString().utf8().data(), identifier());
- m_database.didFinishHandlingVersionChange(*this, transactionIdentifier);
+ ASSERT(m_database);
+ if (m_database)
+ m_database->didFinishHandlingVersionChange(*this, transactionIdentifier);
}
void UniqueIDBDatabaseConnection::fireVersionChangeEvent(const IDBResourceIdentifier& requestIdentifier, uint64_t requestedVersion)
@@ -122,7 +135,7 @@
LOG(IndexedDB, "UniqueIDBDatabaseConnection::createVersionChangeTransaction - %s - %" PRIu64, m_openRequestIdentifier.loggingString().utf8().data(), identifier());
ASSERT(!m_closePending);
- IDBTransactionInfo info = IDBTransactionInfo::versionChange(m_connectionToClient, m_database.info(), newVersion);
+ IDBTransactionInfo info = IDBTransactionInfo::versionChange(m_connectionToClient, m_database->info(), newVersion);
Ref<UniqueIDBDatabaseTransaction> transaction = UniqueIDBDatabaseTransaction::create(*this, info);
m_transactionMap.set(transaction->info().identifier(), &transaction.get());
@@ -142,7 +155,9 @@
Ref<UniqueIDBDatabaseTransaction> transaction = UniqueIDBDatabaseTransaction::create(*this, info);
m_transactionMap.set(transaction->info().identifier(), &transaction.get());
- m_database.enqueueTransaction(WTFMove(transaction));
+
+ ASSERT(m_database);
+ m_database->enqueueTransaction(WTFMove(transaction));
}
void UniqueIDBDatabaseConnection::didAbortTransaction(UniqueIDBDatabaseTransaction& transaction, const IDBError& error)
@@ -152,7 +167,8 @@
auto transactionIdentifier = transaction.info().identifier();
auto takenTransaction = m_transactionMap.take(transactionIdentifier);
- ASSERT(takenTransaction || m_database.hardClosedForUserDelete());
+ ASSERT(m_database);
+ ASSERT(takenTransaction || m_database->hardClosedForUserDelete());
if (takenTransaction)
m_connectionToClient.didAbortTransaction(transactionIdentifier, error);
}
Modified: trunk/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabaseTransaction.cpp (234790 => 234791)
--- trunk/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabaseTransaction.cpp 2018-08-13 02:48:08 UTC (rev 234790)
+++ trunk/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabaseTransaction.cpp 2018-08-13 06:33:08 UTC (rev 234791)
@@ -47,16 +47,23 @@
: m_databaseConnection(connection)
, m_transactionInfo(info)
{
+ auto database = m_databaseConnection->database();
+ ASSERT(database);
+
if (m_transactionInfo.mode() == IDBTransactionMode::Versionchange)
- m_originalDatabaseInfo = std::make_unique<IDBDatabaseInfo>(m_databaseConnection->database().info());
+ m_originalDatabaseInfo = std::make_unique<IDBDatabaseInfo>(database->info());
- m_databaseConnection->database().server().registerTransaction(*this);
+ database->server().registerTransaction(*this);
}
UniqueIDBDatabaseTransaction::~UniqueIDBDatabaseTransaction()
{
- m_databaseConnection->database().transactionDestroyed(*this);
- m_databaseConnection->database().server().unregisterTransaction(*this);
+ auto database = m_databaseConnection->database();
+ if (!database)
+ return;
+
+ database->transactionDestroyed(*this);
+ database->server().unregisterTransaction(*this);
}
IDBDatabaseInfo* UniqueIDBDatabaseTransaction::originalDatabaseInfo() const
@@ -70,7 +77,11 @@
LOG(IndexedDB, "UniqueIDBDatabaseTransaction::abort");
RefPtr<UniqueIDBDatabaseTransaction> protectedThis(this);
- m_databaseConnection->database().abortTransaction(*this, [this, protectedThis](const IDBError& error) {
+
+ auto database = m_databaseConnection->database();
+ ASSERT(database);
+
+ database->abortTransaction(*this, [this, protectedThis](const IDBError& error) {
LOG(IndexedDB, "UniqueIDBDatabaseTransaction::abort (callback)");
m_databaseConnection->didAbortTransaction(*this, error);
});
@@ -98,7 +109,11 @@
LOG(IndexedDB, "UniqueIDBDatabaseTransaction::commit");
RefPtr<UniqueIDBDatabaseTransaction> protectedThis(this);
- m_databaseConnection->database().commitTransaction(*this, [this, protectedThis](const IDBError& error) {
+
+ auto database = m_databaseConnection->database();
+ ASSERT(database);
+
+ database->commitTransaction(*this, [this, protectedThis](const IDBError& error) {
LOG(IndexedDB, "UniqueIDBDatabaseTransaction::commit (callback)");
m_databaseConnection->didCommitTransaction(*this, error);
});
@@ -112,7 +127,11 @@
ASSERT(m_transactionInfo.identifier() == requestData.transactionIdentifier());
RefPtr<UniqueIDBDatabaseTransaction> protectedThis(this);
- m_databaseConnection->database().createObjectStore(*this, info, [this, protectedThis, requestData](const IDBError& error) {
+
+ auto database = m_databaseConnection->database();
+ ASSERT(database);
+
+ database->createObjectStore(*this, info, [this, protectedThis, requestData](const IDBError& error) {
LOG(IndexedDB, "UniqueIDBDatabaseTransaction::createObjectStore (callback)");
if (error.isNull())
m_databaseConnection->didCreateObjectStore(IDBResultData::createObjectStoreSuccess(requestData.requestIdentifier()));
@@ -129,7 +148,11 @@
ASSERT(m_transactionInfo.identifier() == requestData.transactionIdentifier());
RefPtr<UniqueIDBDatabaseTransaction> protectedThis(this);
- m_databaseConnection->database().deleteObjectStore(*this, objectStoreName, [this, protectedThis, requestData](const IDBError& error) {
+
+ auto database = m_databaseConnection->database();
+ ASSERT(database);
+
+ database->deleteObjectStore(*this, objectStoreName, [this, protectedThis, requestData](const IDBError& error) {
LOG(IndexedDB, "UniqueIDBDatabaseTransaction::deleteObjectStore (callback)");
if (error.isNull())
m_databaseConnection->didDeleteObjectStore(IDBResultData::deleteObjectStoreSuccess(requestData.requestIdentifier()));
@@ -146,7 +169,11 @@
ASSERT(m_transactionInfo.identifier() == requestData.transactionIdentifier());
RefPtr<UniqueIDBDatabaseTransaction> protectedThis(this);
- m_databaseConnection->database().renameObjectStore(*this, objectStoreIdentifier, newName, [this, protectedThis, requestData](const IDBError& error) {
+
+ auto database = m_databaseConnection->database();
+ ASSERT(database);
+
+ database->renameObjectStore(*this, objectStoreIdentifier, newName, [this, protectedThis, requestData](const IDBError& error) {
LOG(IndexedDB, "UniqueIDBDatabaseTransaction::renameObjectStore (callback)");
if (error.isNull())
m_databaseConnection->didRenameObjectStore(IDBResultData::renameObjectStoreSuccess(requestData.requestIdentifier()));
@@ -162,7 +189,11 @@
ASSERT(m_transactionInfo.identifier() == requestData.transactionIdentifier());
RefPtr<UniqueIDBDatabaseTransaction> protectedThis(this);
- m_databaseConnection->database().clearObjectStore(*this, objectStoreIdentifier, [this, protectedThis, requestData](const IDBError& error) {
+
+ auto database = m_databaseConnection->database();
+ ASSERT(database);
+
+ database->clearObjectStore(*this, objectStoreIdentifier, [this, protectedThis, requestData](const IDBError& error) {
LOG(IndexedDB, "UniqueIDBDatabaseTransaction::clearObjectStore (callback)");
if (error.isNull())
m_databaseConnection->didClearObjectStore(IDBResultData::clearObjectStoreSuccess(requestData.requestIdentifier()));
@@ -179,7 +210,11 @@
ASSERT(m_transactionInfo.identifier() == requestData.transactionIdentifier());
RefPtr<UniqueIDBDatabaseTransaction> protectedThis(this);
- m_databaseConnection->database().createIndex(*this, info, [this, protectedThis, requestData](const IDBError& error) {
+
+ auto database = m_databaseConnection->database();
+ ASSERT(database);
+
+ database->createIndex(*this, info, [this, protectedThis, requestData](const IDBError& error) {
LOG(IndexedDB, "UniqueIDBDatabaseTransaction::createIndex (callback)");
if (error.isNull())
m_databaseConnection->didCreateIndex(IDBResultData::createIndexSuccess(requestData.requestIdentifier()));
@@ -196,7 +231,11 @@
ASSERT(m_transactionInfo.identifier() == requestData.transactionIdentifier());
RefPtr<UniqueIDBDatabaseTransaction> protectedThis(this);
- m_databaseConnection->database().deleteIndex(*this, objectStoreIdentifier, indexName, [this, protectedThis, requestData](const IDBError& error) {
+
+ auto database = m_databaseConnection->database();
+ ASSERT(database);
+
+ database->deleteIndex(*this, objectStoreIdentifier, indexName, [this, protectedThis, requestData](const IDBError& error) {
LOG(IndexedDB, "UniqueIDBDatabaseTransaction::createIndex (callback)");
if (error.isNull())
m_databaseConnection->didDeleteIndex(IDBResultData::deleteIndexSuccess(requestData.requestIdentifier()));
@@ -213,7 +252,11 @@
ASSERT(m_transactionInfo.identifier() == requestData.transactionIdentifier());
RefPtr<UniqueIDBDatabaseTransaction> protectedThis(this);
- m_databaseConnection->database().renameIndex(*this, objectStoreIdentifier, indexIdentifier, newName, [this, protectedThis, requestData](const IDBError& error) {
+
+ auto database = m_databaseConnection->database();
+ ASSERT(database);
+
+ database->renameIndex(*this, objectStoreIdentifier, indexIdentifier, newName, [this, protectedThis, requestData](const IDBError& error) {
LOG(IndexedDB, "UniqueIDBDatabaseTransaction::renameIndex (callback)");
if (error.isNull())
m_databaseConnection->didRenameIndex(IDBResultData::renameIndexSuccess(requestData.requestIdentifier()));
@@ -231,7 +274,11 @@
ASSERT(m_transactionInfo.identifier() == requestData.transactionIdentifier());
RefPtr<UniqueIDBDatabaseTransaction> protectedThis(this);
- m_databaseConnection->database().putOrAdd(requestData, keyData, value, overwriteMode, [this, protectedThis, requestData](const IDBError& error, const IDBKeyData& key) {
+
+ auto database = m_databaseConnection->database();
+ ASSERT(database);
+
+ database->putOrAdd(requestData, keyData, value, overwriteMode, [this, protectedThis, requestData](const IDBError& error, const IDBKeyData& key) {
LOG(IndexedDB, "UniqueIDBDatabaseTransaction::putOrAdd (callback)");
if (error.isNull())
@@ -248,7 +295,11 @@
ASSERT(m_transactionInfo.identifier() == requestData.transactionIdentifier());
RefPtr<UniqueIDBDatabaseTransaction> protectedThis(this);
- m_databaseConnection->database().getRecord(requestData, getRecordData, [this, protectedThis, requestData](const IDBError& error, const IDBGetResult& result) {
+
+ auto database = m_databaseConnection->database();
+ ASSERT(database);
+
+ database->getRecord(requestData, getRecordData, [this, protectedThis, requestData](const IDBError& error, const IDBGetResult& result) {
LOG(IndexedDB, "UniqueIDBDatabaseTransaction::getRecord (callback)");
if (error.isNull())
@@ -265,7 +316,11 @@
ASSERT(m_transactionInfo.identifier() == requestData.transactionIdentifier());
RefPtr<UniqueIDBDatabaseTransaction> protectedThis(this);
- m_databaseConnection->database().getAllRecords(requestData, getAllRecordsData, [this, protectedThis, requestData](const IDBError& error, const IDBGetAllResult& result) {
+
+ auto database = m_databaseConnection->database();
+ ASSERT(database);
+
+ database->getAllRecords(requestData, getAllRecordsData, [this, protectedThis, requestData](const IDBError& error, const IDBGetAllResult& result) {
LOG(IndexedDB, "UniqueIDBDatabaseTransaction::getAllRecords (callback)");
if (error.isNull())
@@ -282,7 +337,11 @@
ASSERT(m_transactionInfo.identifier() == requestData.transactionIdentifier());
RefPtr<UniqueIDBDatabaseTransaction> protectedThis(this);
- m_databaseConnection->database().getCount(requestData, keyRangeData, [this, protectedThis, requestData](const IDBError& error, uint64_t count) {
+
+ auto database = m_databaseConnection->database();
+ ASSERT(database);
+
+ database->getCount(requestData, keyRangeData, [this, protectedThis, requestData](const IDBError& error, uint64_t count) {
LOG(IndexedDB, "UniqueIDBDatabaseTransaction::getCount (callback)");
if (error.isNull())
@@ -299,7 +358,11 @@
ASSERT(m_transactionInfo.identifier() == requestData.transactionIdentifier());
RefPtr<UniqueIDBDatabaseTransaction> protectedThis(this);
- m_databaseConnection->database().deleteRecord(requestData, keyRangeData, [this, protectedThis, requestData](const IDBError& error) {
+
+ auto database = m_databaseConnection->database();
+ ASSERT(database);
+
+ database->deleteRecord(requestData, keyRangeData, [this, protectedThis, requestData](const IDBError& error) {
LOG(IndexedDB, "UniqueIDBDatabaseTransaction::deleteRecord (callback)");
if (error.isNull())
@@ -316,7 +379,11 @@
ASSERT(m_transactionInfo.identifier() == requestData.transactionIdentifier());
RefPtr<UniqueIDBDatabaseTransaction> protectedThis(this);
- m_databaseConnection->database().openCursor(requestData, info, [this, protectedThis, requestData](const IDBError& error, const IDBGetResult& result) {
+
+ auto database = m_databaseConnection->database();
+ ASSERT(database);
+
+ database->openCursor(requestData, info, [this, protectedThis, requestData](const IDBError& error, const IDBGetResult& result) {
LOG(IndexedDB, "UniqueIDBDatabaseTransaction::openCursor (callback)");
if (error.isNull())
@@ -333,7 +400,11 @@
ASSERT(m_transactionInfo.identifier() == requestData.transactionIdentifier());
RefPtr<UniqueIDBDatabaseTransaction> protectedThis(this);
- m_databaseConnection->database().iterateCursor(requestData, data, [this, protectedThis, requestData](const IDBError& error, const IDBGetResult& result) {
+
+ auto database = m_databaseConnection->database();
+ ASSERT(database);
+
+ database->iterateCursor(requestData, data, [this, protectedThis, requestData](const IDBError& error, const IDBGetResult& result) {
LOG(IndexedDB, "UniqueIDBDatabaseTransaction::iterateCursor (callback)");
if (error.isNull())
@@ -348,7 +419,7 @@
if (!m_objectStoreIdentifiers.isEmpty())
return m_objectStoreIdentifiers;
- auto& info = m_databaseConnection->database().info();
+ auto& info = m_databaseConnection->database()->info();
for (auto objectStoreName : info.objectStoreNames()) {
auto objectStoreInfo = info.infoForExistingObjectStore(objectStoreName);
ASSERT(objectStoreInfo);