Bug 1878930 - s/RawBuffer/Span/: UniformData. r=gfx-reviewers,lsalzman
[gecko.git] / dom / indexedDB / DatabaseFileManager.h
blob62d11e95a5d6c5492cceb4dece0ad35921dd4492
1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* vim: set ts=8 sts=2 et sw=2 tw=80: */
3 /* This Source Code Form is subject to the terms of the Mozilla Public
4 * License, v. 2.0. If a copy of the MPL was not distributed with this
5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
7 #ifndef DOM_INDEXEDDB_DATABASEFILEMANAGER_H_
8 #define DOM_INDEXEDDB_DATABASEFILEMANAGER_H_
10 #include "FileInfoManager.h"
11 #include "IndexedDBCipherKeyManager.h"
12 #include "mozilla/dom/FlippedOnce.h"
13 #include "mozilla/dom/quota/CommonMetadata.h"
14 #include "mozilla/dom/quota/PersistenceType.h"
15 #include "mozilla/dom/quota/UsageInfo.h"
16 #include "mozilla/InitializedOnce.h"
18 class nsIFile;
19 class mozIStorageConnection;
21 namespace mozilla::dom::indexedDB {
23 // Implemented in ActorsParent.cpp.
24 class DatabaseFileManager final
25 : public FileInfoManager<DatabaseFileManager>,
26 public AtomicSafeRefCounted<DatabaseFileManager> {
27 using PersistenceType = mozilla::dom::quota::PersistenceType;
28 using FileInfoManager<DatabaseFileManager>::MutexType;
30 const PersistenceType mPersistenceType;
31 const quota::OriginMetadata mOriginMetadata;
32 const nsString mDatabaseName;
33 const nsCString mDatabaseID;
35 RefPtr<IndexedDBCipherKeyManager> mCipherKeyManager;
37 LazyInitializedOnce<const nsString> mDirectoryPath;
38 LazyInitializedOnce<const nsString> mJournalDirectoryPath;
40 const bool mEnforcingQuota;
41 const bool mIsInPrivateBrowsingMode;
43 FlippedOnce<false> mInitialized;
45 // Lock protecting DatabaseFileManager.mFileInfos.
46 // It's s also used to atomically update DatabaseFileInfo.mRefCnt and
47 // DatabaseFileInfo.mDBRefCnt
48 static MutexType sMutex;
50 public:
51 [[nodiscard]] static nsCOMPtr<nsIFile> GetFileForId(nsIFile* aDirectory,
52 int64_t aId);
54 [[nodiscard]] static nsCOMPtr<nsIFile> GetCheckedFileForId(
55 nsIFile* aDirectory, int64_t aId);
57 static nsresult InitDirectory(nsIFile& aDirectory, nsIFile& aDatabaseFile,
58 const nsACString& aOrigin,
59 uint32_t aTelemetryId);
61 template <typename KnownDirEntryOp, typename UnknownDirEntryOp>
62 static Result<Ok, nsresult> TraverseFiles(
63 nsIFile& aDirectory, KnownDirEntryOp&& aKnownDirEntryOp,
64 UnknownDirEntryOp&& aUnknownDirEntryOp);
66 static Result<quota::FileUsageType, nsresult> GetUsage(nsIFile* aDirectory);
68 DatabaseFileManager(PersistenceType aPersistenceType,
69 const quota::OriginMetadata& aOriginMetadata,
70 const nsAString& aDatabaseName,
71 const nsCString& aDatabaseID, bool aEnforcingQuota,
72 bool aIsInPrivateBrowsingMode);
74 PersistenceType Type() const { return mPersistenceType; }
76 const quota::OriginMetadata& OriginMetadata() const {
77 return mOriginMetadata;
80 const nsACString& Origin() const { return mOriginMetadata.mOrigin; }
82 const nsAString& DatabaseName() const { return mDatabaseName; }
84 const nsCString& DatabaseID() const { return mDatabaseID; }
86 IndexedDBCipherKeyManager& MutableCipherKeyManagerRef() const {
87 MOZ_ASSERT(mIsInPrivateBrowsingMode);
88 MOZ_ASSERT(mCipherKeyManager);
90 return *mCipherKeyManager;
93 auto IsInPrivateBrowsingMode() const { return mIsInPrivateBrowsingMode; }
95 bool EnforcingQuota() const { return mEnforcingQuota; }
97 bool Initialized() const { return mInitialized; }
99 nsresult Init(nsIFile* aDirectory, mozIStorageConnection& aConnection);
101 [[nodiscard]] nsCOMPtr<nsIFile> GetDirectory();
103 [[nodiscard]] nsCOMPtr<nsIFile> GetCheckedDirectory();
105 [[nodiscard]] nsCOMPtr<nsIFile> GetJournalDirectory();
107 [[nodiscard]] nsCOMPtr<nsIFile> EnsureJournalDirectory();
109 [[nodiscard]] nsresult SyncDeleteFile(int64_t aId);
111 // XXX When getting rid of FileHelper, this method should be removed/made
112 // private.
113 [[nodiscard]] nsresult SyncDeleteFile(nsIFile& aFile,
114 nsIFile& aJournalFile) const;
116 [[nodiscard]] nsresult AsyncDeleteFile(int64_t aFileId);
118 nsresult Invalidate() override;
120 MOZ_DECLARE_REFCOUNTED_TYPENAME(DatabaseFileManager)
122 static StaticMutex& Mutex() { return sMutex; }
124 ~DatabaseFileManager() = default;
127 } // namespace mozilla::dom::indexedDB
129 #endif // DOM_INDEXEDDB_DATABASEFILEMANAGER_H_