From f0a515b51b8b215bb71b9ef96dfde2781b116f2c Mon Sep 17 00:00:00 2001 From: Jari Jalkanen Date: Wed, 5 Jul 2023 06:42:15 +0000 Subject: [PATCH] Bug 1841726 - Clean up OPFS datamodel files. r=dom-storage-reviewers,janv Differential Revision: https://phabricator.services.mozilla.com/D182755 --- .../datamodel/FileSystemDataManager.cpp | 10 ++++----- .../parent/datamodel/FileSystemDataManager.h | 2 +- .../FileSystemDatabaseManagerVersion002.cpp | 22 +++++++++++++------ .../datamodel/FileSystemFileManager.cpp | 2 +- 4 files changed, 22 insertions(+), 14 deletions(-) diff --git a/dom/fs/parent/datamodel/FileSystemDataManager.cpp b/dom/fs/parent/datamodel/FileSystemDataManager.cpp index cef05308edba..d322e5eb7f10 100644 --- a/dom/fs/parent/datamodel/FileSystemDataManager.cpp +++ b/dom/fs/parent/datamodel/FileSystemDataManager.cpp @@ -167,8 +167,8 @@ FileSystemDataManager::FileSystemDataManager( mIOTarget(std::move(aIOTarget)), mIOTaskQueue(std::move(aIOTaskQueue)), mRegCount(0), - mState(State::Initial), - mVersion(0) {} + mVersion(0), + mState(State::Initial) {} FileSystemDataManager::~FileSystemDataManager() { NS_ASSERT_OWNINGTHREAD(FileSystemDataManager); @@ -403,14 +403,14 @@ Result FileSystemDataManager::IsLocked( Result FileSystemDataManager::LockExclusive( const EntryId& aEntryId) { - QM_TRY_INSPECT(const FileId& fileId, - mDatabaseManager->EnsureFileId(aEntryId)); - QM_TRY_UNWRAP(const bool isLocked, IsLocked(aEntryId)); if (isLocked) { return Err(QMResult(NS_ERROR_DOM_NO_MODIFICATION_ALLOWED_ERR)); } + QM_TRY_INSPECT(const FileId& fileId, + mDatabaseManager->EnsureFileId(aEntryId)); + // If the file has been removed, we should get a file not found error. // Otherwise, if usage tracking cannot be started because file size is not // known and attempts to read it are failing, lock is denied to freeze the diff --git a/dom/fs/parent/datamodel/FileSystemDataManager.h b/dom/fs/parent/datamodel/FileSystemDataManager.h index fb23addd79d8..68bbaa2388d2 100644 --- a/dom/fs/parent/datamodel/FileSystemDataManager.h +++ b/dom/fs/parent/datamodel/FileSystemDataManager.h @@ -171,8 +171,8 @@ class FileSystemDataManager MozPromiseHolder mOpenPromiseHolder; MozPromiseHolder mClosePromiseHolder; uint32_t mRegCount; - State mState; DatabaseVersion mVersion; + State mState; }; } // namespace fs::data diff --git a/dom/fs/parent/datamodel/FileSystemDatabaseManagerVersion002.cpp b/dom/fs/parent/datamodel/FileSystemDatabaseManagerVersion002.cpp index 79e7e19c1446..4681be71b08d 100644 --- a/dom/fs/parent/datamodel/FileSystemDatabaseManagerVersion002.cpp +++ b/dom/fs/parent/datamodel/FileSystemDatabaseManagerVersion002.cpp @@ -587,14 +587,22 @@ Result FileSystemDatabaseManagerVersion002::EnsureFileId( return Err(QMResult(NS_ERROR_DOM_NOT_FOUND_ERR)); } - auto mainFileRes = GetFileId(aEntryId); - if (mainFileRes.isOk()) { - return mainFileRes.unwrap(); - } + QM_TRY_UNWRAP(Maybe maybeMainFileId, + QM_OR_ELSE_LOG_VERBOSE_IF( + // Expression. + GetFileId(aEntryId).map([](auto mainFileId) { + return Some(std::move(mainFileId)); + }), + // Predicate. + IsSpecificError, + // Fallback. + ([](const auto&) -> Result, QMResult> { + return Maybe{}; + }))); - QM_TRY( - OkIf(ToNSResult(mainFileRes.inspectErr()) == NS_ERROR_DOM_NOT_FOUND_ERR), - Err(mainFileRes.unwrapErr())); + if (maybeMainFileId) { + return *maybeMainFileId; + } QM_TRY_UNWRAP(auto transaction, StartedTransaction::Create(mConnection)); diff --git a/dom/fs/parent/datamodel/FileSystemFileManager.cpp b/dom/fs/parent/datamodel/FileSystemFileManager.cpp index b820104b397a..028c8c984047 100644 --- a/dom/fs/parent/datamodel/FileSystemFileManager.cpp +++ b/dom/fs/parent/datamodel/FileSystemFileManager.cpp @@ -21,7 +21,6 @@ #include "nsIFile.h" #include "nsIFileProtocolHandler.h" #include "nsIFileURL.h" -#include "nsILocalFileWin.h" #include "nsIURIMutator.h" #include "nsTHashMap.h" #include "nsXPCOM.h" @@ -285,6 +284,7 @@ Result, QMResult> FileSystemFileManager::CreateFileFrom( const FileId& aDestinationFileId, const FileId& aSourceFileId) { MOZ_ASSERT(!aDestinationFileId.IsEmpty()); MOZ_ASSERT(!aSourceFileId.IsEmpty()); + QM_TRY_UNWRAP(nsCOMPtr original, GetFile(aSourceFileId)); QM_TRY_UNWRAP(nsCOMPtr destination,