From c920f32df3ab82ae25af2eb81a96486d764359b0 Mon Sep 17 00:00:00 2001 From: Job Bautista Date: Fri, 3 Mar 2023 20:07:55 +0800 Subject: [PATCH] Issue #1693 - Use scoped enums for IDBTransaction. Based on a patch from Mozilla bug 1598164. Needed due to identifier collision between NSS and IDBTransaction. Co-authored by: Simon Giesecke Co-authored by: Matt A. Tobin --- dom/indexedDB/ActorsChild.h | 2 +- dom/indexedDB/ActorsParent.cpp | 98 +++++++++---------- dom/indexedDB/IDBCursor.cpp | 2 +- dom/indexedDB/IDBDatabase.cpp | 26 ++--- dom/indexedDB/IDBIndex.cpp | 2 +- dom/indexedDB/IDBObjectStore.cpp | 8 +- dom/indexedDB/IDBTransaction.cpp | 82 ++++++++-------- dom/indexedDB/IDBTransaction.h | 45 ++++----- dom/indexedDB/ProfilerHelpers.h | 10 +- dom/indexedDB/SerializationHelpers.h | 4 +- .../test_file_cross_database_copying.html | 4 +- dom/indexedDB/test/test_file_delete.html | 8 +- dom/indexedDB/test/test_file_os_delete.html | 4 +- dom/indexedDB/test/test_file_put_deleted.html | 4 +- .../test/test_file_put_get_object.html | 2 +- .../test/test_file_put_get_values.html | 6 +- .../test/test_file_resurrection_delete.html | 10 +- ...t_file_resurrection_transaction_abort.html | 6 +- dom/indexedDB/test/test_file_sharing.html | 4 +- .../test/test_file_transaction_abort.html | 4 +- .../test/test_filehandle_serialization.html | 6 +- .../test/test_filehandle_store_snapshot.html | 4 +- dom/indexedDB/test/unit/test_clear.js | 4 +- .../test/unit/test_setVersion_exclusion.js | 2 +- .../test/unit/test_transaction_abort.js | 10 +- 25 files changed, 175 insertions(+), 182 deletions(-) diff --git a/dom/indexedDB/ActorsChild.h b/dom/indexedDB/ActorsChild.h index 5dfa4f8cf3..1a59993898 100644 --- a/dom/indexedDB/ActorsChild.h +++ b/dom/indexedDB/ActorsChild.h @@ -110,7 +110,7 @@ public: MOZ_ASSERT(mLoggingInfo.nextVersionChangeTransactionSerialNumber() > INT64_MIN); - if (aMode == IDBTransaction::VERSION_CHANGE) { + if (aMode == IDBTransaction::Mode::VersionChange) { return mLoggingInfo.nextVersionChangeTransactionSerialNumber()--; } diff --git a/dom/indexedDB/ActorsParent.cpp b/dom/indexedDB/ActorsParent.cpp index 0e6944e8ef..0c6bd1ee1d 100644 --- a/dom/indexedDB/ActorsParent.cpp +++ b/dom/indexedDB/ActorsParent.cpp @@ -9005,7 +9005,7 @@ public: MOZ_ASSERT(mLoggingInfo.nextVersionChangeTransactionSerialNumber() > INT64_MIN); - if (aMode == IDBTransaction::VERSION_CHANGE) { + if (aMode == IDBTransaction::Mode::VersionChange) { return mLoggingInfo.nextVersionChangeTransactionSerialNumber()--; } @@ -11330,11 +11330,11 @@ AutoSavepoint::~AutoSavepoint() if (mConnection) { mConnection->AssertIsOnConnectionThread(); MOZ_ASSERT(mDEBUGTransaction); - MOZ_ASSERT(mDEBUGTransaction->GetMode() == IDBTransaction::READ_WRITE || + MOZ_ASSERT(mDEBUGTransaction->GetMode() == IDBTransaction::Mode::ReadWrite || mDEBUGTransaction->GetMode() == - IDBTransaction::READ_WRITE_FLUSH || - mDEBUGTransaction->GetMode() == IDBTransaction::CLEANUP || - mDEBUGTransaction->GetMode() == IDBTransaction::VERSION_CHANGE); + IDBTransaction::Mode::ReadWriteFlush || + mDEBUGTransaction->GetMode() == IDBTransaction::Mode::Cleanup || + mDEBUGTransaction->GetMode() == IDBTransaction::Mode::VersionChange); if (NS_FAILED(mConnection->RollbackSavepoint())) { NS_WARNING("Failed to rollback savepoint!"); @@ -11347,10 +11347,10 @@ DatabaseConnection:: AutoSavepoint::Start(const TransactionBase* aTransaction) { MOZ_ASSERT(aTransaction); - MOZ_ASSERT(aTransaction->GetMode() == IDBTransaction::READ_WRITE || - aTransaction->GetMode() == IDBTransaction::READ_WRITE_FLUSH || - aTransaction->GetMode() == IDBTransaction::CLEANUP || - aTransaction->GetMode() == IDBTransaction::VERSION_CHANGE); + MOZ_ASSERT(aTransaction->GetMode() == IDBTransaction::Mode::ReadWrite || + aTransaction->GetMode() == IDBTransaction::Mode::ReadWriteFlush || + aTransaction->GetMode() == IDBTransaction::Mode::Cleanup || + aTransaction->GetMode() == IDBTransaction::Mode::VersionChange); DatabaseConnection* connection = aTransaction->GetDatabase()->GetConnection(); MOZ_ASSERT(connection); @@ -14478,19 +14478,19 @@ Database::AllocPBackgroundIDBTransactionParent( return nullptr; } - if (NS_WARN_IF(aMode != IDBTransaction::READ_ONLY && - aMode != IDBTransaction::READ_WRITE && - aMode != IDBTransaction::READ_WRITE_FLUSH && - aMode != IDBTransaction::CLEANUP)) { + if (NS_WARN_IF(aMode != IDBTransaction::Mode::ReadOnly && + aMode != IDBTransaction::Mode::ReadWrite && + aMode != IDBTransaction::Mode::ReadWriteFlush && + aMode != IDBTransaction::Mode::Cleanup)) { ASSERT_UNLESS_FUZZING(); return nullptr; } // If this is a readwrite transaction to a chrome database make sure the child // has write access. - if (NS_WARN_IF((aMode == IDBTransaction::READ_WRITE || - aMode == IDBTransaction::READ_WRITE_FLUSH || - aMode == IDBTransaction::CLEANUP) && + if (NS_WARN_IF((aMode == IDBTransaction::Mode::ReadWrite || + aMode == IDBTransaction::Mode::ReadWriteFlush || + aMode == IDBTransaction::Mode::Cleanup) && mPrincipalInfo.type() == PrincipalInfo::TSystemPrincipalInfo && !mChromeWriteAccessAllowed)) { return nullptr; @@ -14553,10 +14553,10 @@ Database::RecvPBackgroundIDBTransactionConstructor( AssertIsOnBackgroundThread(); MOZ_ASSERT(aActor); MOZ_ASSERT(!aObjectStoreNames.IsEmpty()); - MOZ_ASSERT(aMode == IDBTransaction::READ_ONLY || - aMode == IDBTransaction::READ_WRITE || - aMode == IDBTransaction::READ_WRITE_FLUSH || - aMode == IDBTransaction::CLEANUP); + MOZ_ASSERT(aMode == IDBTransaction::Mode::ReadOnly || + aMode == IDBTransaction::Mode::ReadWrite || + aMode == IDBTransaction::Mode::ReadWriteFlush || + aMode == IDBTransaction::Mode::Cleanup); MOZ_ASSERT(!mClosed); if (IsInvalidated()) { @@ -14578,7 +14578,7 @@ Database::RecvPBackgroundIDBTransactionConstructor( mMetadata->mDatabaseId, transaction->LoggingSerialNumber(), aObjectStoreNames, - aMode != IDBTransaction::READ_ONLY); + aMode != IDBTransaction::Mode::ReadOnly); transaction->SetActive(transactionId); @@ -14715,14 +14715,14 @@ StartTransactionOp::DoDatabaseWork(DatabaseConnection* aConnection) Transaction()->SetActiveOnConnectionThread(); - if (Transaction()->GetMode() == IDBTransaction::CLEANUP) { + if (Transaction()->GetMode() == IDBTransaction::Mode::Cleanup) { nsresult rv = aConnection->DisableQuotaChecks(); if (NS_WARN_IF(NS_FAILED(rv))) { return rv; } } - if (Transaction()->GetMode() != IDBTransaction::READ_ONLY) { + if (Transaction()->GetMode() != IDBTransaction::Mode::ReadOnly) { nsresult rv = aConnection->BeginWriteTransaction(); if (NS_WARN_IF(NS_FAILED(rv))) { return rv; @@ -15032,10 +15032,10 @@ TransactionBase::VerifyRequestParams(const RequestParams& aParams) const } case RequestParams::TObjectStoreDeleteParams: { - if (NS_WARN_IF(mMode != IDBTransaction::READ_WRITE && - mMode != IDBTransaction::READ_WRITE_FLUSH && - mMode != IDBTransaction::CLEANUP && - mMode != IDBTransaction::VERSION_CHANGE)) { + if (NS_WARN_IF(mMode != IDBTransaction::Mode::ReadWrite && + mMode != IDBTransaction::Mode::ReadWriteFlush && + mMode != IDBTransaction::Mode::Cleanup && + mMode != IDBTransaction::Mode::VersionChange)) { ASSERT_UNLESS_FUZZING(); return false; } @@ -15056,10 +15056,10 @@ TransactionBase::VerifyRequestParams(const RequestParams& aParams) const } case RequestParams::TObjectStoreClearParams: { - if (NS_WARN_IF(mMode != IDBTransaction::READ_WRITE && - mMode != IDBTransaction::READ_WRITE_FLUSH && - mMode != IDBTransaction::CLEANUP && - mMode != IDBTransaction::VERSION_CHANGE)) { + if (NS_WARN_IF(mMode != IDBTransaction::Mode::ReadWrite && + mMode != IDBTransaction::Mode::ReadWriteFlush && + mMode != IDBTransaction::Mode::Cleanup && + mMode != IDBTransaction::Mode::VersionChange)) { ASSERT_UNLESS_FUZZING(); return false; } @@ -15243,9 +15243,9 @@ TransactionBase::VerifyRequestParams(const ObjectStoreAddPutParams& aParams) { AssertIsOnBackgroundThread(); - if (NS_WARN_IF(mMode != IDBTransaction::READ_WRITE && - mMode != IDBTransaction::READ_WRITE_FLUSH && - mMode != IDBTransaction::VERSION_CHANGE)) { + if (NS_WARN_IF(mMode != IDBTransaction::Mode::ReadWrite && + mMode != IDBTransaction::Mode::ReadWriteFlush && + mMode != IDBTransaction::Mode::VersionChange)) { ASSERT_UNLESS_FUZZING(); return false; } @@ -15864,7 +15864,7 @@ NormalTransaction::DeallocPBackgroundIDBCursorParent( VersionChangeTransaction::VersionChangeTransaction( OpenDatabaseOp* aOpenDatabaseOp) : TransactionBase(aOpenDatabaseOp->mDatabase, - IDBTransaction::VERSION_CHANGE) + IDBTransaction::Mode::VersionChange) , mOpenDatabaseOp(aOpenDatabaseOp) , mActorWasAlive(false) { @@ -22234,7 +22234,7 @@ OpenDatabaseOp::DispatchToWorkThread() MOZ_ASSERT(mState == State::WaitingForTransactionsToComplete); MOZ_ASSERT(mVersionChangeTransaction); MOZ_ASSERT(mVersionChangeTransaction->GetMode() == - IDBTransaction::VERSION_CHANGE); + IDBTransaction::Mode::VersionChange); MOZ_ASSERT(mMaybeBlockedDatabases.IsEmpty()); if (NS_WARN_IF(QuotaClient::IsShuttingDownOnBackgroundThread()) || @@ -23739,10 +23739,10 @@ CommitOp::WriteAutoIncrementCounts() { MOZ_ASSERT(mTransaction); mTransaction->AssertIsOnConnectionThread(); - MOZ_ASSERT(mTransaction->GetMode() == IDBTransaction::READ_WRITE || - mTransaction->GetMode() == IDBTransaction::READ_WRITE_FLUSH || - mTransaction->GetMode() == IDBTransaction::CLEANUP || - mTransaction->GetMode() == IDBTransaction::VERSION_CHANGE); + MOZ_ASSERT(mTransaction->GetMode() == IDBTransaction::Mode::ReadWrite || + mTransaction->GetMode() == IDBTransaction::Mode::ReadWriteFlush || + mTransaction->GetMode() == IDBTransaction::Mode::Cleanup || + mTransaction->GetMode() == IDBTransaction::Mode::VersionChange); const nsTArray>& metadataArray = mTransaction->mModifiedAutoIncrementObjectStoreMetadataArray; @@ -23807,10 +23807,10 @@ CommitOp::CommitOrRollbackAutoIncrementCounts() { MOZ_ASSERT(mTransaction); mTransaction->AssertIsOnConnectionThread(); - MOZ_ASSERT(mTransaction->GetMode() == IDBTransaction::READ_WRITE || - mTransaction->GetMode() == IDBTransaction::READ_WRITE_FLUSH || - mTransaction->GetMode() == IDBTransaction::CLEANUP || - mTransaction->GetMode() == IDBTransaction::VERSION_CHANGE); + MOZ_ASSERT(mTransaction->GetMode() == IDBTransaction::Mode::ReadWrite || + mTransaction->GetMode() == IDBTransaction::Mode::ReadWriteFlush || + mTransaction->GetMode() == IDBTransaction::Mode::Cleanup || + mTransaction->GetMode() == IDBTransaction::Mode::VersionChange); nsTArray>& metadataArray = mTransaction->mModifiedAutoIncrementObjectStoreMetadataArray; @@ -23841,7 +23841,7 @@ CommitOp::AssertForeignKeyConsistency(DatabaseConnection* aConnection) MOZ_ASSERT(aConnection); MOZ_ASSERT(mTransaction); mTransaction->AssertIsOnConnectionThread(); - MOZ_ASSERT(mTransaction->GetMode() != IDBTransaction::READ_ONLY); + MOZ_ASSERT(mTransaction->GetMode() != IDBTransaction::Mode::ReadOnly); DatabaseConnection::CachedStatement pragmaStmt; MOZ_ALWAYS_SUCCEEDS( @@ -23891,7 +23891,7 @@ CommitOp::Run() mTransaction->LoggingSerialNumber(), mLoggingSerialNumber); - if (mTransaction->GetMode() != IDBTransaction::READ_ONLY && + if (mTransaction->GetMode() != IDBTransaction::Mode::ReadOnly && mTransaction->mHasBeenActiveOnConnectionThread) { Database* database = mTransaction->GetDatabase(); MOZ_ASSERT(database); @@ -23920,7 +23920,7 @@ CommitOp::Run() NS_WARNING_ASSERTION(NS_SUCCEEDED(mResultCode), "Commit failed!"); if (NS_SUCCEEDED(mResultCode) && - mTransaction->GetMode() == IDBTransaction::READ_WRITE_FLUSH) { + mTransaction->GetMode() == IDBTransaction::Mode::ReadWriteFlush) { mResultCode = connection->Checkpoint(); } @@ -23943,7 +23943,7 @@ CommitOp::Run() connection->FinishWriteTransaction(); - if (mTransaction->GetMode() == IDBTransaction::CLEANUP) { + if (mTransaction->GetMode() == IDBTransaction::Mode::Cleanup) { connection->DoIdleProcessing(/* aNeedsCheckpoint */ true); connection->EnableQuotaChecks(); @@ -25789,7 +25789,7 @@ NormalTransactionOp::ObjectStoreHasIndexes(NormalTransactionOp* aOp, MOZ_ASSERT(aHasIndexes); bool hasIndexes; - if (aOp->Transaction()->GetMode() == IDBTransaction::VERSION_CHANGE && + if (aOp->Transaction()->GetMode() == IDBTransaction::Mode::VersionChange && aMayHaveIndexes) { // If this is a version change transaction then mObjectStoreMayHaveIndexes // could be wrong (e.g. if a unique index failed to be created due to a diff --git a/dom/indexedDB/IDBCursor.cpp b/dom/indexedDB/IDBCursor.cpp index c657fb4aef..befc19f207 100644 --- a/dom/indexedDB/IDBCursor.cpp +++ b/dom/indexedDB/IDBCursor.cpp @@ -685,7 +685,7 @@ IDBCursor::Update(JSContext* aCx, JS::Handle aValue, return nullptr; } - if (mTransaction->GetMode() == IDBTransaction::CLEANUP || + if (mTransaction->GetMode() == IDBTransaction::Mode::Cleanup || IsSourceDeleted() || !mHaveValue || mType == Type_ObjectStoreKey || diff --git a/dom/indexedDB/IDBDatabase.cpp b/dom/indexedDB/IDBDatabase.cpp index 6c27efdf79..30fd956f2a 100644 --- a/dom/indexedDB/IDBDatabase.cpp +++ b/dom/indexedDB/IDBDatabase.cpp @@ -425,7 +425,7 @@ IDBDatabase::CreateObjectStore( IDBTransaction* transaction = IDBTransaction::GetCurrent(); if (!transaction || transaction->Database() != this || - transaction->GetMode() != IDBTransaction::VERSION_CHANGE) { + transaction->GetMode() != IDBTransaction::Mode::VersionChange) { aRv.Throw(NS_ERROR_DOM_INDEXEDDB_NOT_ALLOWED_ERR); return nullptr; } @@ -503,7 +503,7 @@ IDBDatabase::DeleteObjectStore(const nsAString& aName, ErrorResult& aRv) IDBTransaction* transaction = IDBTransaction::GetCurrent(); if (!transaction || transaction->Database() != this || - transaction->GetMode() != IDBTransaction::VERSION_CHANGE) { + transaction->GetMode() != IDBTransaction::Mode::VersionChange) { aRv.Throw(NS_ERROR_DOM_INDEXEDDB_NOT_ALLOWED_ERR); return; } @@ -666,21 +666,21 @@ IDBDatabase::Transaction(JSContext* aCx, IDBTransaction::Mode mode; switch (aMode) { case IDBTransactionMode::Readonly: - mode = IDBTransaction::READ_ONLY; + mode = IDBTransaction::Mode::ReadOnly; break; case IDBTransactionMode::Readwrite: if (mQuotaExceeded) { - mode = IDBTransaction::CLEANUP; + mode = IDBTransaction::Mode::Cleanup; mQuotaExceeded = false; } else { - mode = IDBTransaction::READ_WRITE; + mode = IDBTransaction::Mode::ReadWrite; } break; case IDBTransactionMode::Readwriteflush: - mode = IDBTransaction::READ_WRITE_FLUSH; + mode = IDBTransaction::Mode::ReadWriteFlush; break; case IDBTransactionMode::Cleanup: - mode = IDBTransaction::CLEANUP; + mode = IDBTransaction::Mode::Cleanup; mQuotaExceeded = false; break; case IDBTransactionMode::Versionchange: @@ -715,7 +715,7 @@ IDBDatabase::Transaction(JSContext* aCx, transaction->SetBackgroundActor(actor); - if (mode == IDBTransaction::CLEANUP) { + if (mode == IDBTransaction::Mode::Cleanup) { ExpireFileActors(/* aExpireAll */ true); } @@ -859,14 +859,14 @@ IDBDatabase::AbortTransactions(bool aShouldWarn) if (aShouldWarn) { switch (transaction->GetMode()) { // We ignore transactions that could not have written any data. - case IDBTransaction::READ_ONLY: + case IDBTransaction::Mode::ReadOnly: break; // We warn for any transactions that could have written data. - case IDBTransaction::READ_WRITE: - case IDBTransaction::READ_WRITE_FLUSH: - case IDBTransaction::CLEANUP: - case IDBTransaction::VERSION_CHANGE: + case IDBTransaction::Mode::ReadWrite: + case IDBTransaction::Mode::ReadWriteFlush: + case IDBTransaction::Mode::Cleanup: + case IDBTransaction::Mode::VersionChange: transactionsThatNeedWarning.AppendElement(transaction); break; diff --git a/dom/indexedDB/IDBIndex.cpp b/dom/indexedDB/IDBIndex.cpp index a77b20ff1a..c55974f228 100644 --- a/dom/indexedDB/IDBIndex.cpp +++ b/dom/indexedDB/IDBIndex.cpp @@ -158,7 +158,7 @@ IDBIndex::SetName(const nsAString& aName, ErrorResult& aRv) IDBTransaction* transaction = mObjectStore->Transaction(); - if (transaction->GetMode() != IDBTransaction::VERSION_CHANGE || + if (transaction->GetMode() != IDBTransaction::Mode::VersionChange || mDeletedMetadata) { aRv.Throw(NS_ERROR_DOM_INVALID_STATE_ERR); return; diff --git a/dom/indexedDB/IDBObjectStore.cpp b/dom/indexedDB/IDBObjectStore.cpp index c80b59cf3c..b48fa17063 100644 --- a/dom/indexedDB/IDBObjectStore.cpp +++ b/dom/indexedDB/IDBObjectStore.cpp @@ -1407,7 +1407,7 @@ IDBObjectStore::AddOrPut(JSContext* aCx, MOZ_ASSERT(aCx); MOZ_ASSERT_IF(aFromCursor, aOverwrite); - if (mTransaction->GetMode() == IDBTransaction::CLEANUP || + if (mTransaction->GetMode() == IDBTransaction::Mode::Cleanup || mDeletedSpec) { aRv.Throw(NS_ERROR_DOM_INDEXEDDB_NOT_ALLOWED_ERR); return nullptr; @@ -1991,7 +1991,7 @@ IDBObjectStore::CreateIndex(const nsAString& aName, { AssertIsOnOwningThread(); - if (mTransaction->GetMode() != IDBTransaction::VERSION_CHANGE || + if (mTransaction->GetMode() != IDBTransaction::Mode::VersionChange || mDeletedSpec) { aRv.Throw(NS_ERROR_DOM_INDEXEDDB_NOT_ALLOWED_ERR); return nullptr; @@ -2101,7 +2101,7 @@ IDBObjectStore::DeleteIndex(const nsAString& aName, ErrorResult& aRv) { AssertIsOnOwningThread(); - if (mTransaction->GetMode() != IDBTransaction::VERSION_CHANGE || + if (mTransaction->GetMode() != IDBTransaction::Mode::VersionChange || mDeletedSpec) { aRv.Throw(NS_ERROR_DOM_INDEXEDDB_NOT_ALLOWED_ERR); return; @@ -2424,7 +2424,7 @@ IDBObjectStore::SetName(const nsAString& aName, ErrorResult& aRv) { AssertIsOnOwningThread(); - if (mTransaction->GetMode() != IDBTransaction::VERSION_CHANGE || + if (mTransaction->GetMode() != IDBTransaction::Mode::VersionChange || mDeletedSpec) { aRv.Throw(NS_ERROR_DOM_INVALID_STATE_ERR); return; diff --git a/dom/indexedDB/IDBTransaction.cpp b/dom/indexedDB/IDBTransaction.cpp index 4962433ff7..4ee6239a25 100644 --- a/dom/indexedDB/IDBTransaction.cpp +++ b/dom/indexedDB/IDBTransaction.cpp @@ -82,7 +82,7 @@ IDBTransaction::IDBTransaction(IDBDatabase* aDatabase, , mPendingRequestCount(0) , mLineNo(0) , mColumn(0) - , mReadyState(IDBTransaction::INITIAL) + , mReadyState(IDBTransaction::ReadyState::Initial) , mMode(aMode) , mCreating(false) , mRegistered(false) @@ -134,10 +134,10 @@ IDBTransaction::~IDBTransaction() MOZ_ASSERT(!mPendingRequestCount); MOZ_ASSERT(!mCreating); MOZ_ASSERT(mSentCommitOrAbort); - MOZ_ASSERT_IF(mMode == VERSION_CHANGE && + MOZ_ASSERT_IF(mMode == Mode::VersionChange && mBackgroundActor.mVersionChangeBackgroundActor, mFiredCompleteOrAbort); - MOZ_ASSERT_IF(mMode != VERSION_CHANGE && + MOZ_ASSERT_IF(mMode != Mode::VersionChange && mBackgroundActor.mNormalBackgroundActor, mFiredCompleteOrAbort); @@ -148,7 +148,7 @@ IDBTransaction::~IDBTransaction() #endif } - if (mMode == VERSION_CHANGE) { + if (mMode == Mode::VersionChange) { if (auto* actor = mBackgroundActor.mVersionChangeBackgroundActor) { actor->SendDeleteMeInternal(/* aFailedConstructor */ false); @@ -184,7 +184,7 @@ IDBTransaction::CreateVersionChange( RefPtr transaction = new IDBTransaction(aDatabase, emptyObjectStoreNames, - VERSION_CHANGE); + Mode::VersionChange); aOpenRequest->GetCallerLocation(transaction->mFilename, &transaction->mLineNo, &transaction->mColumn); @@ -213,10 +213,10 @@ IDBTransaction::Create(JSContext* aCx, IDBDatabase* aDatabase, MOZ_ASSERT(aDatabase); aDatabase->AssertIsOnOwningThread(); MOZ_ASSERT(!aObjectStoreNames.IsEmpty()); - MOZ_ASSERT(aMode == READ_ONLY || - aMode == READ_WRITE || - aMode == READ_WRITE_FLUSH || - aMode == CLEANUP); + MOZ_ASSERT(aMode == Mode::ReadOnly || + aMode == Mode::ReadWrite || + aMode == Mode::ReadWriteFlush || + aMode == Mode::Cleanup); RefPtr transaction = new IDBTransaction(aDatabase, aObjectStoreNames, aMode); @@ -281,7 +281,7 @@ IDBTransaction::SetBackgroundActor(indexedDB::BackgroundTransactionChild* aBackg AssertIsOnOwningThread(); MOZ_ASSERT(aBackgroundActor); MOZ_ASSERT(!mBackgroundActor.mNormalBackgroundActor); - MOZ_ASSERT(mMode != VERSION_CHANGE); + MOZ_ASSERT(mMode != Mode::VersionChange); mBackgroundActor.mNormalBackgroundActor = aBackgroundActor; } @@ -295,7 +295,7 @@ IDBTransaction::StartRequest(IDBRequest* aRequest, const RequestParams& aParams) BackgroundRequestChild* actor = new BackgroundRequestChild(aRequest); - if (mMode == VERSION_CHANGE) { + if (mMode == Mode::VersionChange) { MOZ_ASSERT(mBackgroundActor.mVersionChangeBackgroundActor); mBackgroundActor.mVersionChangeBackgroundActor-> @@ -321,7 +321,7 @@ IDBTransaction::OpenCursor(BackgroundCursorChild* aBackgroundActor, MOZ_ASSERT(aBackgroundActor); MOZ_ASSERT(aParams.type() != OpenCursorParams::T__None); - if (mMode == VERSION_CHANGE) { + if (mMode == Mode::VersionChange) { MOZ_ASSERT(mBackgroundActor.mVersionChangeBackgroundActor); mBackgroundActor.mVersionChangeBackgroundActor-> @@ -361,8 +361,8 @@ IDBTransaction::OnNewRequest() AssertIsOnOwningThread(); if (!mPendingRequestCount) { - MOZ_ASSERT(INITIAL == mReadyState); - mReadyState = LOADING; + MOZ_ASSERT(ReadyState::Initial == mReadyState); + mReadyState = ReadyState::Loading; } ++mPendingRequestCount; @@ -377,7 +377,7 @@ IDBTransaction::OnRequestFinished(bool aActorDestroyedNormally) --mPendingRequestCount; if (!mPendingRequestCount) { - mReadyState = COMMITTING; + mReadyState = ReadyState::Committing; if (aActorDestroyedNormally) { if (NS_SUCCEEDED(mAbortCode)) { @@ -421,7 +421,7 @@ IDBTransaction::SendCommit() LoggingSerialNumber(), requestSerialNumber); - if (mMode == VERSION_CHANGE) { + if (mMode == Mode::VersionChange) { MOZ_ASSERT(mBackgroundActor.mVersionChangeBackgroundActor); mBackgroundActor.mVersionChangeBackgroundActor->SendCommit(); } else { @@ -454,7 +454,7 @@ IDBTransaction::SendAbort(nsresult aResultCode) requestSerialNumber, aResultCode); - if (mMode == VERSION_CHANGE) { + if (mMode == Mode::VersionChange) { MOZ_ASSERT(mBackgroundActor.mVersionChangeBackgroundActor); mBackgroundActor.mVersionChangeBackgroundActor->SendAbort(aResultCode); } else { @@ -473,7 +473,7 @@ IDBTransaction::IsOpen() const AssertIsOnOwningThread(); // If we haven't started anything then we're open. - if (mReadyState == IDBTransaction::INITIAL) { + if (mReadyState == IDBTransaction::ReadyState::Initial) { return true; } @@ -482,7 +482,7 @@ IDBTransaction::IsOpen() const // from the time we were created) then we are open. Otherwise check the // currently running transaction to see if it's the same. We only allow other // requests to be made if this transaction is currently running. - if (mReadyState == IDBTransaction::LOADING && + if (mReadyState == IDBTransaction::ReadyState::Loading && (mCreating || GetCurrent() == this)) { return true; } @@ -508,7 +508,7 @@ IDBTransaction::CreateObjectStore(const ObjectStoreSpec& aSpec) { AssertIsOnOwningThread(); MOZ_ASSERT(aSpec.metadata().id()); - MOZ_ASSERT(VERSION_CHANGE == mMode); + MOZ_ASSERT(Mode::VersionChange == mMode); MOZ_ASSERT(mBackgroundActor.mVersionChangeBackgroundActor); MOZ_ASSERT(IsOpen()); @@ -540,7 +540,7 @@ IDBTransaction::DeleteObjectStore(int64_t aObjectStoreId) { AssertIsOnOwningThread(); MOZ_ASSERT(aObjectStoreId); - MOZ_ASSERT(VERSION_CHANGE == mMode); + MOZ_ASSERT(Mode::VersionChange == mMode); MOZ_ASSERT(mBackgroundActor.mVersionChangeBackgroundActor); MOZ_ASSERT(IsOpen()); @@ -571,7 +571,7 @@ IDBTransaction::RenameObjectStore(int64_t aObjectStoreId, { AssertIsOnOwningThread(); MOZ_ASSERT(aObjectStoreId); - MOZ_ASSERT(VERSION_CHANGE == mMode); + MOZ_ASSERT(Mode::VersionChange == mMode); MOZ_ASSERT(mBackgroundActor.mVersionChangeBackgroundActor); MOZ_ASSERT(IsOpen()); @@ -586,7 +586,7 @@ IDBTransaction::CreateIndex(IDBObjectStore* aObjectStore, AssertIsOnOwningThread(); MOZ_ASSERT(aObjectStore); MOZ_ASSERT(aMetadata.id()); - MOZ_ASSERT(VERSION_CHANGE == mMode); + MOZ_ASSERT(Mode::VersionChange == mMode); MOZ_ASSERT(mBackgroundActor.mVersionChangeBackgroundActor); MOZ_ASSERT(IsOpen()); @@ -601,7 +601,7 @@ IDBTransaction::DeleteIndex(IDBObjectStore* aObjectStore, AssertIsOnOwningThread(); MOZ_ASSERT(aObjectStore); MOZ_ASSERT(aIndexId); - MOZ_ASSERT(VERSION_CHANGE == mMode); + MOZ_ASSERT(Mode::VersionChange == mMode); MOZ_ASSERT(mBackgroundActor.mVersionChangeBackgroundActor); MOZ_ASSERT(IsOpen()); @@ -617,7 +617,7 @@ IDBTransaction::RenameIndex(IDBObjectStore* aObjectStore, AssertIsOnOwningThread(); MOZ_ASSERT(aObjectStore); MOZ_ASSERT(aIndexId); - MOZ_ASSERT(VERSION_CHANGE == mMode); + MOZ_ASSERT(Mode::VersionChange == mMode); MOZ_ASSERT(mBackgroundActor.mVersionChangeBackgroundActor); MOZ_ASSERT(IsOpen()); @@ -637,12 +637,12 @@ IDBTransaction::AbortInternal(nsresult aAbortCode, RefPtr error = aError; - const bool isVersionChange = mMode == VERSION_CHANGE; + const bool isVersionChange = mMode == Mode::VersionChange; const bool isInvalidated = mDatabase->IsInvalidated(); - bool needToSendAbort = mReadyState == INITIAL; + bool needToSendAbort = mReadyState == ReadyState::Initial; mAbortCode = aAbortCode; - mReadyState = DONE; + mReadyState = ReadyState::Done; mError = error.forget(); if (isVersionChange) { @@ -775,7 +775,7 @@ IDBTransaction::FireCompleteOrAbortEvents(nsresult aResult) AssertIsOnOwningThread(); MOZ_ASSERT(!mFiredCompleteOrAbort); - mReadyState = DONE; + mReadyState = ReadyState::Done; #ifdef DEBUG mFiredCompleteOrAbort = true; @@ -834,7 +834,7 @@ int64_t IDBTransaction::NextObjectStoreId() { AssertIsOnOwningThread(); - MOZ_ASSERT(VERSION_CHANGE == mMode); + MOZ_ASSERT(Mode::VersionChange == mMode); return mNextObjectStoreId++; } @@ -843,7 +843,7 @@ int64_t IDBTransaction::NextIndexId() { AssertIsOnOwningThread(); - MOZ_ASSERT(VERSION_CHANGE == mMode); + MOZ_ASSERT(Mode::VersionChange == mMode); return mNextIndexId++; } @@ -862,22 +862,22 @@ IDBTransaction::GetMode(ErrorResult& aRv) const AssertIsOnOwningThread(); switch (mMode) { - case READ_ONLY: + case Mode::ReadOnly: return IDBTransactionMode::Readonly; - case READ_WRITE: + case Mode::ReadWrite: return IDBTransactionMode::Readwrite; - case READ_WRITE_FLUSH: + case Mode::ReadWriteFlush: return IDBTransactionMode::Readwriteflush; - case CLEANUP: + case Mode::Cleanup: return IDBTransactionMode::Cleanup; - case VERSION_CHANGE: + case Mode::VersionChange: return IDBTransactionMode::Versionchange; - case MODE_INVALID: + case Mode::Invalid: default: MOZ_CRASH("Bad mode!"); } @@ -896,7 +896,7 @@ IDBTransaction::ObjectStoreNames() const { AssertIsOnOwningThread(); - if (mMode == IDBTransaction::VERSION_CHANGE) { + if (mMode == IDBTransaction::Mode::VersionChange) { return mDatabase->ObjectStoreNames(); } @@ -917,7 +917,7 @@ IDBTransaction::ObjectStore(const nsAString& aName, ErrorResult& aRv) const ObjectStoreSpec* spec = nullptr; - if (IDBTransaction::VERSION_CHANGE == mMode || + if (IDBTransaction::Mode::VersionChange == mMode || mObjectStoreNames.Contains(aName)) { const nsTArray& objectStores = mDatabase->Spec()->objectStores(); @@ -1014,8 +1014,8 @@ IDBTransaction::Run() mCreating = false; // Maybe commit if there were no requests generated. - if (mReadyState == IDBTransaction::INITIAL) { - mReadyState = DONE; + if (mReadyState == IDBTransaction::ReadyState::Initial) { + mReadyState = ReadyState::Done; SendCommit(); } diff --git a/dom/indexedDB/IDBTransaction.h b/dom/indexedDB/IDBTransaction.h index c8434c2ffd..5685db7047 100644 --- a/dom/indexedDB/IDBTransaction.h +++ b/dom/indexedDB/IDBTransaction.h @@ -53,25 +53,18 @@ class IDBTransaction final friend class WorkerHolder; public: - enum Mode - { - READ_ONLY = 0, - READ_WRITE, - READ_WRITE_FLUSH, - CLEANUP, - VERSION_CHANGE, + enum struct Mode { + ReadOnly = 0, + ReadWrite, + ReadWriteFlush, + Cleanup, + VersionChange, // Only needed for IPC serialization helper, should never be used in code. - MODE_INVALID + Invalid }; - enum ReadyState - { - INITIAL = 0, - LOADING, - COMMITTING, - DONE - }; + enum struct ReadyState { Initial = 0, Loading, Inactive, Committing, Done }; private: RefPtr mDatabase; @@ -81,7 +74,7 @@ private: nsTArray> mDeletedObjectStores; nsAutoPtr mWorkerHolder; - // Tagged with mMode. If mMode is VERSION_CHANGE then mBackgroundActor will be + // Tagged with mMode. If mMode is Mode::VersionChange then mBackgroundActor will be // a BackgroundVersionChangeTransactionChild. Otherwise it will be a // BackgroundTransactionChild. union { @@ -91,7 +84,7 @@ private: const int64_t mLoggingSerialNumber; - // Only used for VERSION_CHANGE transactions. + // Only used for Mode::VersionChange transactions. int64_t mNextObjectStoreId; int64_t mNextIndexId; @@ -146,7 +139,7 @@ public: { AssertIsOnOwningThread(); - if (mMode == VERSION_CHANGE) { + if (mMode == Mode::VersionChange) { mBackgroundActor.mVersionChangeBackgroundActor = nullptr; } else { mBackgroundActor.mNormalBackgroundActor = nullptr; @@ -171,7 +164,7 @@ public: { AssertIsOnOwningThread(); - return mReadyState == COMMITTING || mReadyState == DONE; + return mReadyState == ReadyState::Committing || mReadyState == ReadyState::Done; } bool @@ -179,17 +172,17 @@ public: { AssertIsOnOwningThread(); - return mReadyState == DONE; + return mReadyState == ReadyState::Done; } bool IsWriteAllowed() const { AssertIsOnOwningThread(); - return mMode == READ_WRITE || - mMode == READ_WRITE_FLUSH || - mMode == CLEANUP || - mMode == VERSION_CHANGE; + return mMode == Mode::ReadWrite || + mMode == Mode::ReadWriteFlush || + mMode == Mode::Cleanup || + mMode == Mode::VersionChange; } bool @@ -295,11 +288,11 @@ public: void FireCompleteOrAbortEvents(nsresult aResult); - // Only for VERSION_CHANGE transactions. + // Only for Mode::VersionChange transactions. int64_t NextObjectStoreId(); - // Only for VERSION_CHANGE transactions. + // Only for Mode::VersionChange transactions. int64_t NextIndexId(); diff --git a/dom/indexedDB/ProfilerHelpers.h b/dom/indexedDB/ProfilerHelpers.h index 41bdfc85e4..29f48a1d8f 100644 --- a/dom/indexedDB/ProfilerHelpers.h +++ b/dom/indexedDB/ProfilerHelpers.h @@ -119,19 +119,19 @@ public: Append(kCommaSpace); switch (aTransaction->GetMode()) { - case IDBTransaction::READ_ONLY: + case IDBTransaction::Mode::ReadOnly: AppendLiteral("\"readonly\""); break; - case IDBTransaction::READ_WRITE: + case IDBTransaction::Mode::ReadWrite: AppendLiteral("\"readwrite\""); break; - case IDBTransaction::READ_WRITE_FLUSH: + case IDBTransaction::Mode::ReadWriteFlush: AppendLiteral("\"readwriteflush\""); break; - case IDBTransaction::CLEANUP: + case IDBTransaction::Mode::Cleanup: AppendLiteral("\"cleanup\""); break; - case IDBTransaction::VERSION_CHANGE: + case IDBTransaction::Mode::VersionChange: AppendLiteral("\"versionchange\""); break; default: diff --git a/dom/indexedDB/SerializationHelpers.h b/dom/indexedDB/SerializationHelpers.h index 5be10580e4..2870d58360 100644 --- a/dom/indexedDB/SerializationHelpers.h +++ b/dom/indexedDB/SerializationHelpers.h @@ -86,8 +86,8 @@ template <> struct ParamTraits : public ContiguousEnumSerializer< mozilla::dom::IDBTransaction::Mode, - mozilla::dom::IDBTransaction::READ_ONLY, - mozilla::dom::IDBTransaction::MODE_INVALID> + mozilla::dom::IDBTransaction::Mode::ReadOnly, + mozilla::dom::IDBTransaction::Mode::Invalid> { }; } // namespace IPC diff --git a/dom/indexedDB/test/test_file_cross_database_copying.html b/dom/indexedDB/test/test_file_cross_database_copying.html index bf65a3a6be..3149fd3f5c 100644 --- a/dom/indexedDB/test/test_file_cross_database_copying.html +++ b/dom/indexedDB/test/test_file_cross_database_copying.html @@ -12,7 +12,7 @@