/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* vim: set ts=2 et sw=2 tw=80: */ /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #ifndef mozilla_dom_indexeddb_filemanager_h__ #define mozilla_dom_indexeddb_filemanager_h__ #include "IndexedDatabase.h" #include "nsIFile.h" #include "nsIDOMFile.h" #include "nsDataHashtable.h" class mozIStorageConnection; class mozIStorageServiceQuotaManagement; BEGIN_INDEXEDDB_NAMESPACE class FileInfo; class FileManager { friend class FileInfo; public: FileManager(const nsACString& aOrigin, const nsAString& aDatabaseName) : mOrigin(aOrigin), mDatabaseName(aDatabaseName), mLastFileId(0), mInvalidated(false) { } ~FileManager() { } NS_INLINE_DECL_THREADSAFE_REFCOUNTING(FileManager) const nsACString& Origin() const { return mOrigin; } const nsAString& DatabaseName() const { return mDatabaseName; } bool Invalidated() const { return mInvalidated; } nsresult Init(nsIFile* aDirectory, mozIStorageConnection* aConnection); nsresult Invalidate(); already_AddRefed GetDirectory(); already_AddRefed GetJournalDirectory(); already_AddRefed EnsureJournalDirectory(); already_AddRefed GetFileInfo(int64_t aId); already_AddRefed GetNewFileInfo(); static already_AddRefed GetFileForId(nsIFile* aDirectory, int64_t aId); static nsresult InitDirectory(mozIStorageServiceQuotaManagement* aService, nsIFile* aDirectory, nsIFile* aDatabaseFile, FactoryPrivilege aPrivilege); private: nsCString mOrigin; nsString mDatabaseName; nsString mDirectoryPath; nsString mJournalDirectoryPath; int64_t mLastFileId; // Protected by IndexedDatabaseManager::FileMutex() nsDataHashtable mFileInfos; bool mInvalidated; }; END_INDEXEDDB_NAMESPACE #endif // mozilla_dom_indexeddb_filemanager_h__