Line data Source code
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/. */
6 :
7 : #ifndef mozilla_dom_indexeddb_filemanager_h__
8 : #define mozilla_dom_indexeddb_filemanager_h__
9 :
10 : #include "mozilla/Attributes.h"
11 : #include "mozilla/dom/quota/PersistenceType.h"
12 : #include "nsDataHashtable.h"
13 : #include "nsHashKeys.h"
14 : #include "nsISupportsImpl.h"
15 :
16 : class nsIFile;
17 : class mozIStorageConnection;
18 :
19 : namespace mozilla {
20 : namespace dom {
21 : namespace indexedDB {
22 :
23 : class FileInfo;
24 :
25 : // Implemented in ActorsParent.cpp.
26 : class FileManager final
27 : {
28 : friend class FileInfo;
29 :
30 : typedef mozilla::dom::quota::PersistenceType PersistenceType;
31 :
32 : PersistenceType mPersistenceType;
33 : nsCString mGroup;
34 : nsCString mOrigin;
35 : nsString mDatabaseName;
36 :
37 : nsString mDirectoryPath;
38 : nsString mJournalDirectoryPath;
39 :
40 : int64_t mLastFileId;
41 :
42 : // Protected by IndexedDatabaseManager::FileMutex()
43 : nsDataHashtable<nsUint64HashKey, FileInfo*> mFileInfos;
44 :
45 : const bool mEnforcingQuota;
46 : bool mInvalidated;
47 :
48 : public:
49 : static already_AddRefed<nsIFile>
50 : GetFileForId(nsIFile* aDirectory, int64_t aId);
51 :
52 : static already_AddRefed<nsIFile>
53 : GetCheckedFileForId(nsIFile* aDirectory, int64_t aId);
54 :
55 : static nsresult
56 : InitDirectory(nsIFile* aDirectory,
57 : nsIFile* aDatabaseFile,
58 : PersistenceType aPersistenceType,
59 : const nsACString& aGroup,
60 : const nsACString& aOrigin,
61 : uint32_t aTelemetryId);
62 :
63 : static nsresult
64 : GetUsage(nsIFile* aDirectory, uint64_t* aUsage);
65 :
66 : FileManager(PersistenceType aPersistenceType,
67 : const nsACString& aGroup,
68 : const nsACString& aOrigin,
69 : const nsAString& aDatabaseName,
70 : bool aEnforcingQuota);
71 :
72 : PersistenceType
73 0 : Type() const
74 : {
75 0 : return mPersistenceType;
76 : }
77 :
78 : const nsACString&
79 0 : Group() const
80 : {
81 0 : return mGroup;
82 : }
83 :
84 : const nsACString&
85 0 : Origin() const
86 : {
87 0 : return mOrigin;
88 : }
89 :
90 : const nsAString&
91 0 : DatabaseName() const
92 : {
93 0 : return mDatabaseName;
94 : }
95 :
96 : bool
97 0 : EnforcingQuota() const
98 : {
99 0 : return mEnforcingQuota;
100 : }
101 :
102 : bool
103 0 : Invalidated() const
104 : {
105 0 : return mInvalidated;
106 : }
107 :
108 : nsresult
109 : Init(nsIFile* aDirectory, mozIStorageConnection* aConnection);
110 :
111 : nsresult
112 : Invalidate();
113 :
114 : already_AddRefed<nsIFile>
115 : GetDirectory();
116 :
117 : already_AddRefed<nsIFile>
118 : GetCheckedDirectory();
119 :
120 : already_AddRefed<nsIFile>
121 : GetJournalDirectory();
122 :
123 : already_AddRefed<nsIFile>
124 : EnsureJournalDirectory();
125 :
126 : already_AddRefed<FileInfo>
127 : GetFileInfo(int64_t aId);
128 :
129 : already_AddRefed<FileInfo>
130 : GetNewFileInfo();
131 :
132 0 : NS_INLINE_DECL_THREADSAFE_REFCOUNTING(FileManager)
133 :
134 : private:
135 0 : ~FileManager() = default;
136 : };
137 :
138 : } // namespace indexedDB
139 : } // namespace dom
140 : } // namespace mozilla
141 :
142 : #endif // mozilla_dom_indexeddb_filemanager_h__
|