gecko-dev/dom/indexedDB/FileManager.h
Jan Varga 0e46119bb9 Bug 1563023 - Part 3: Change client usage type to support the null value; r=asuth
This patch wraps the uint64_t type in a Maybe container, so the client usage can
represent a state when there are no files on disk for the given client. Zero
usage then represents a state when there are some files but they are empty or
the client tracks logical size (not physical size of files on disk) and the
logical size is zero. This can be useful especially for LocalStorage.

Differential Revision: https://phabricator.services.mozilla.com/D38181

--HG--
extra : moz-landing-system : lando
2019-08-22 20:52:09 +00:00

107 lines
3.0 KiB
C++

/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set ts=8 sts=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 "mozilla/Attributes.h"
#include "mozilla/dom/quota/PersistenceType.h"
#include "nsDataHashtable.h"
#include "nsHashKeys.h"
#include "nsISupportsImpl.h"
class nsIFile;
class mozIStorageConnection;
namespace mozilla {
namespace dom {
namespace indexedDB {
class FileInfo;
// Implemented in ActorsParent.cpp.
class FileManager final {
friend class FileInfo;
typedef mozilla::dom::quota::PersistenceType PersistenceType;
PersistenceType mPersistenceType;
nsCString mGroup;
nsCString mOrigin;
nsString mDatabaseName;
nsString mDirectoryPath;
nsString mJournalDirectoryPath;
int64_t mLastFileId;
// Protected by IndexedDatabaseManager::FileMutex()
nsDataHashtable<nsUint64HashKey, FileInfo*> mFileInfos;
const bool mEnforcingQuota;
bool mInvalidated;
public:
static already_AddRefed<nsIFile> GetFileForId(nsIFile* aDirectory,
int64_t aId);
static already_AddRefed<nsIFile> GetCheckedFileForId(nsIFile* aDirectory,
int64_t aId);
static nsresult InitDirectory(nsIFile* aDirectory, nsIFile* aDatabaseFile,
PersistenceType aPersistenceType,
const nsACString& aGroup,
const nsACString& aOrigin,
uint32_t aTelemetryId);
static nsresult GetUsage(nsIFile* aDirectory, Maybe<uint64_t>& aUsage);
static nsresult GetUsage(nsIFile* aDirectory, uint64_t& aUsage);
FileManager(PersistenceType aPersistenceType, const nsACString& aGroup,
const nsACString& aOrigin, const nsAString& aDatabaseName,
bool aEnforcingQuota);
PersistenceType Type() const { return mPersistenceType; }
const nsACString& Group() const { return mGroup; }
const nsACString& Origin() const { return mOrigin; }
const nsAString& DatabaseName() const { return mDatabaseName; }
bool EnforcingQuota() const { return mEnforcingQuota; }
bool Invalidated() const { return mInvalidated; }
nsresult Init(nsIFile* aDirectory, mozIStorageConnection* aConnection);
nsresult Invalidate();
already_AddRefed<nsIFile> GetDirectory();
already_AddRefed<nsIFile> GetCheckedDirectory();
already_AddRefed<nsIFile> GetJournalDirectory();
already_AddRefed<nsIFile> EnsureJournalDirectory();
already_AddRefed<FileInfo> GetFileInfo(int64_t aId);
already_AddRefed<FileInfo> GetNewFileInfo();
NS_INLINE_DECL_THREADSAFE_REFCOUNTING(FileManager)
private:
~FileManager() = default;
};
} // namespace indexedDB
} // namespace dom
} // namespace mozilla
#endif // mozilla_dom_indexeddb_filemanager_h__