Bug 1866217 - Replace uses of Nullable<PersistenceType> type with PersistenceScope; r=dom-storage-reviewers,jari

Nullable<PersistenceType> only allows to specify a concrete persistence type or
all persistence types while PersistenceScope is intended to allow specification
of multiple persistence types as well. Support for that will be added in a
separate patch. This patch is about using the new type especially in directory
locks.

Differential Revision: https://phabricator.services.mozilla.com/D195373
This commit is contained in:
Jan Varga
2024-08-14 12:46:14 +00:00
parent 302dbe3a64
commit d0a8f8f6a6
11 changed files with 153 additions and 148 deletions

View File

@@ -131,6 +131,7 @@
#include "mozilla/dom/quota/ErrorHandling.h" #include "mozilla/dom/quota/ErrorHandling.h"
#include "mozilla/dom/quota/FileStreams.h" #include "mozilla/dom/quota/FileStreams.h"
#include "mozilla/dom/quota/OriginScope.h" #include "mozilla/dom/quota/OriginScope.h"
#include "mozilla/dom/quota/PersistenceScope.h"
#include "mozilla/dom/quota/PersistenceType.h" #include "mozilla/dom/quota/PersistenceType.h"
#include "mozilla/dom/quota/QuotaCommon.h" #include "mozilla/dom/quota/QuotaCommon.h"
#include "mozilla/dom/quota/QuotaManager.h" #include "mozilla/dom/quota/QuotaManager.h"
@@ -13044,7 +13045,7 @@ nsresult Maintenance::OpenDirectory() {
quotaManager quotaManager
->OpenStorageDirectory( ->OpenStorageDirectory(
Nullable<PersistenceType>(), OriginScope::FromNull(), PersistenceScope::CreateFromNull(), OriginScope::FromNull(),
Nullable<Client::Type>(Client::IDB), /* aExclusive */ false, Nullable<Client::Type>(Client::IDB), /* aExclusive */ false,
DirectoryLockCategory::None, SomeRef(mPendingDirectoryLock)) DirectoryLockCategory::None, SomeRef(mPendingDirectoryLock))
->Then(GetCurrentSerialEventTarget(), __func__, ->Then(GetCurrentSerialEventTarget(), __func__,

View File

@@ -80,6 +80,7 @@
#include "mozilla/dom/quota/DirectoryLockInlines.h" #include "mozilla/dom/quota/DirectoryLockInlines.h"
#include "mozilla/dom/quota/FirstInitializationAttemptsImpl.h" #include "mozilla/dom/quota/FirstInitializationAttemptsImpl.h"
#include "mozilla/dom/quota/OriginScope.h" #include "mozilla/dom/quota/OriginScope.h"
#include "mozilla/dom/quota/PersistenceScope.h"
#include "mozilla/dom/quota/PersistenceType.h" #include "mozilla/dom/quota/PersistenceType.h"
#include "mozilla/dom/quota/QuotaCommon.h" #include "mozilla/dom/quota/QuotaCommon.h"
#include "mozilla/dom/quota/StorageHelpers.h" #include "mozilla/dom/quota/StorageHelpers.h"
@@ -2637,8 +2638,7 @@ class QuotaClient final : public mozilla::dom::quota::Client {
PersistenceType aPersistenceType, const OriginMetadata& aOriginMetadata, PersistenceType aPersistenceType, const OriginMetadata& aOriginMetadata,
const AtomicBool& aCanceled) override; const AtomicBool& aCanceled) override;
nsresult AboutToClearOrigins( nsresult AboutToClearOrigins(const PersistenceScope& aPersistenceScope,
const Nullable<PersistenceType>& aPersistenceType,
const OriginScope& aOriginScope) override; const OriginScope& aOriginScope) override;
void OnOriginClearCompleted(PersistenceType aPersistenceType, void OnOriginClearCompleted(PersistenceType aPersistenceType,
@@ -8458,7 +8458,7 @@ Result<UsageInfo, nsresult> QuotaClient::GetUsageForOrigin(
} }
nsresult QuotaClient::AboutToClearOrigins( nsresult QuotaClient::AboutToClearOrigins(
const Nullable<PersistenceType>& aPersistenceType, const PersistenceScope& aPersistenceScope,
const OriginScope& aOriginScope) { const OriginScope& aOriginScope) {
AssertIsOnIOThread(); AssertIsOnIOThread();
@@ -8476,8 +8476,8 @@ nsresult QuotaClient::AboutToClearOrigins(
// So this method clears the archived data and shadow database entries for // So this method clears the archived data and shadow database entries for
// given origin scope, but only if it's a privacy-related origin clearing. // given origin scope, but only if it's a privacy-related origin clearing.
if (!aPersistenceType.IsNull() && if (!aPersistenceScope.IsNull() &&
aPersistenceType.Value() != PERSISTENCE_TYPE_DEFAULT) { aPersistenceScope.GetValue() != PERSISTENCE_TYPE_DEFAULT) {
return NS_OK; return NS_OK;
} }

View File

@@ -1960,20 +1960,19 @@ uint64_t QuotaManager::CollectOriginsForEviction(
nsTArray<NotNull<const DirectoryLockImpl*>> privateStorageLocks; nsTArray<NotNull<const DirectoryLockImpl*>> privateStorageLocks;
for (NotNull<const DirectoryLockImpl*> const lock : mDirectoryLocks) { for (NotNull<const DirectoryLockImpl*> const lock : mDirectoryLocks) {
const Nullable<PersistenceType>& persistenceType = const PersistenceScope& persistenceScope = lock->PersistenceScopeRef();
lock->NullablePersistenceType();
if (persistenceType.IsNull()) { if (persistenceScope.IsNull()) {
temporaryStorageLocks.AppendElement(lock); temporaryStorageLocks.AppendElement(lock);
defaultStorageLocks.AppendElement(lock); defaultStorageLocks.AppendElement(lock);
} else if (persistenceType.Value() == PERSISTENCE_TYPE_TEMPORARY) { } else if (persistenceScope.GetValue() == PERSISTENCE_TYPE_TEMPORARY) {
temporaryStorageLocks.AppendElement(lock); temporaryStorageLocks.AppendElement(lock);
} else if (persistenceType.Value() == PERSISTENCE_TYPE_DEFAULT) { } else if (persistenceScope.GetValue() == PERSISTENCE_TYPE_DEFAULT) {
defaultStorageLocks.AppendElement(lock); defaultStorageLocks.AppendElement(lock);
} else if (persistenceType.Value() == PERSISTENCE_TYPE_PRIVATE) { } else if (persistenceScope.GetValue() == PERSISTENCE_TYPE_PRIVATE) {
privateStorageLocks.AppendElement(lock); privateStorageLocks.AppendElement(lock);
} else { } else {
MOZ_ASSERT(persistenceType.Value() == PERSISTENCE_TYPE_PERSISTENT); MOZ_ASSERT(persistenceScope.GetValue() == PERSISTENCE_TYPE_PERSISTENT);
// Do nothing here, persistent origins don't need to be collected ever. // Do nothing here, persistent origins don't need to be collected ever.
} }
@@ -4949,7 +4948,7 @@ RefPtr<BoolPromise> QuotaManager::InitializeStorage() {
AssertIsOnOwningThread(); AssertIsOnOwningThread();
RefPtr<UniversalDirectoryLock> directoryLock = CreateDirectoryLockInternal( RefPtr<UniversalDirectoryLock> directoryLock = CreateDirectoryLockInternal(
Nullable<PersistenceType>(), OriginScope::FromNull(), PersistenceScope::CreateFromNull(), OriginScope::FromNull(),
Nullable<Client::Type>(), Nullable<Client::Type>(),
/* aExclusive */ false); /* aExclusive */ false);
@@ -5124,14 +5123,14 @@ RefPtr<BoolPromise> QuotaManager::TemporaryStorageInitialized() {
} }
RefPtr<UniversalDirectoryLockPromise> QuotaManager::OpenStorageDirectory( RefPtr<UniversalDirectoryLockPromise> QuotaManager::OpenStorageDirectory(
const Nullable<PersistenceType>& aPersistenceType, const PersistenceScope& aPersistenceScope, const OriginScope& aOriginScope,
const OriginScope& aOriginScope, const Nullable<Client::Type>& aClientType, const Nullable<Client::Type>& aClientType, bool aExclusive,
bool aExclusive, DirectoryLockCategory aCategory, DirectoryLockCategory aCategory,
Maybe<RefPtr<UniversalDirectoryLock>&> aPendingDirectoryLockOut) { Maybe<RefPtr<UniversalDirectoryLock>&> aPendingDirectoryLockOut) {
AssertIsOnOwningThread(); AssertIsOnOwningThread();
RefPtr<UniversalDirectoryLock> storageDirectoryLock = RefPtr<UniversalDirectoryLock> storageDirectoryLock =
CreateDirectoryLockInternal(Nullable<PersistenceType>(), CreateDirectoryLockInternal(PersistenceScope::CreateFromNull(),
OriginScope::FromNull(), OriginScope::FromNull(),
Nullable<Client::Type>(), Nullable<Client::Type>(),
/* aExclusive */ false); /* aExclusive */ false);
@@ -5147,7 +5146,7 @@ RefPtr<UniversalDirectoryLockPromise> QuotaManager::OpenStorageDirectory(
} }
RefPtr<UniversalDirectoryLock> universalDirectoryLock = RefPtr<UniversalDirectoryLock> universalDirectoryLock =
CreateDirectoryLockInternal(aPersistenceType, aOriginScope, aClientType, CreateDirectoryLockInternal(aPersistenceScope, aOriginScope, aClientType,
aExclusive, aCategory); aExclusive, aCategory);
RefPtr<BoolPromise> universalDirectoryLockPromise = RefPtr<BoolPromise> universalDirectoryLockPromise =
@@ -5209,7 +5208,7 @@ RefPtr<ClientDirectoryLockPromise> QuotaManager::OpenClientDirectory(
nsTArray<RefPtr<BoolPromise>> promises; nsTArray<RefPtr<BoolPromise>> promises;
RefPtr<UniversalDirectoryLock> storageDirectoryLock = RefPtr<UniversalDirectoryLock> storageDirectoryLock =
CreateDirectoryLockInternal(Nullable<PersistenceType>(), CreateDirectoryLockInternal(PersistenceScope::CreateFromNull(),
OriginScope::FromNull(), OriginScope::FromNull(),
Nullable<Client::Type>(), Nullable<Client::Type>(),
/* aExclusive */ false); /* aExclusive */ false);
@@ -5280,13 +5279,13 @@ RefPtr<ClientDirectoryLock> QuotaManager::CreateDirectoryLock(
} }
RefPtr<UniversalDirectoryLock> QuotaManager::CreateDirectoryLockInternal( RefPtr<UniversalDirectoryLock> QuotaManager::CreateDirectoryLockInternal(
const Nullable<PersistenceType>& aPersistenceType, const PersistenceScope& aPersistenceScope, const OriginScope& aOriginScope,
const OriginScope& aOriginScope, const Nullable<Client::Type>& aClientType, const Nullable<Client::Type>& aClientType, bool aExclusive,
bool aExclusive, DirectoryLockCategory aCategory) { DirectoryLockCategory aCategory) {
AssertIsOnOwningThread(); AssertIsOnOwningThread();
return DirectoryLockImpl::CreateInternal(WrapNotNullUnchecked(this), return DirectoryLockImpl::CreateInternal(WrapNotNullUnchecked(this),
aPersistenceType, aOriginScope, aPersistenceScope, aOriginScope,
aClientType, aExclusive, aCategory); aClientType, aExclusive, aCategory);
} }
@@ -5304,7 +5303,7 @@ RefPtr<BoolPromise> QuotaManager::InitializePersistentOrigin(
// thread). // thread).
RefPtr<UniversalDirectoryLock> directoryLock = CreateDirectoryLockInternal( RefPtr<UniversalDirectoryLock> directoryLock = CreateDirectoryLockInternal(
Nullable<PersistenceType>(PERSISTENCE_TYPE_PERSISTENT), PersistenceScope::CreateFromValue(PERSISTENCE_TYPE_PERSISTENT),
OriginScope::FromOrigin(principalMetadata.mOrigin), OriginScope::FromOrigin(principalMetadata.mOrigin),
Nullable<Client::Type>(), /* aExclusive */ false); Nullable<Client::Type>(), /* aExclusive */ false);
@@ -5413,7 +5412,7 @@ RefPtr<BoolPromise> QuotaManager::InitializeTemporaryOrigin(
// thread). // thread).
RefPtr<UniversalDirectoryLock> directoryLock = CreateDirectoryLockInternal( RefPtr<UniversalDirectoryLock> directoryLock = CreateDirectoryLockInternal(
Nullable<PersistenceType>(aPersistenceType), PersistenceScope::CreateFromValue(aPersistenceType),
OriginScope::FromOrigin(principalMetadata.mOrigin), OriginScope::FromOrigin(principalMetadata.mOrigin),
Nullable<Client::Type>(), /* aExclusive */ false); Nullable<Client::Type>(), /* aExclusive */ false);
@@ -5576,7 +5575,7 @@ RefPtr<BoolPromise> QuotaManager::InitializeTemporaryStorage() {
AssertIsOnOwningThread(); AssertIsOnOwningThread();
RefPtr<UniversalDirectoryLock> directoryLock = CreateDirectoryLockInternal( RefPtr<UniversalDirectoryLock> directoryLock = CreateDirectoryLockInternal(
Nullable<PersistenceType>(), OriginScope::FromNull(), PersistenceScope::CreateFromNull(), OriginScope::FromNull(),
Nullable<Client::Type>(), Nullable<Client::Type>(),
/* aExclusive */ false); /* aExclusive */ false);
@@ -5921,19 +5920,18 @@ Result<bool, nsresult> QuotaManager::EnsureOriginDirectory(
} }
nsresult QuotaManager::AboutToClearOrigins( nsresult QuotaManager::AboutToClearOrigins(
const Nullable<PersistenceType>& aPersistenceType, const PersistenceScope& aPersistenceScope, const OriginScope& aOriginScope,
const OriginScope& aOriginScope,
const Nullable<Client::Type>& aClientType) { const Nullable<Client::Type>& aClientType) {
AssertIsOnIOThread(); AssertIsOnIOThread();
if (aClientType.IsNull()) { if (aClientType.IsNull()) {
for (Client::Type type : AllClientTypes()) { for (Client::Type type : AllClientTypes()) {
QM_TRY(MOZ_TO_RESULT((*mClients)[type]->AboutToClearOrigins( QM_TRY(MOZ_TO_RESULT((*mClients)[type]->AboutToClearOrigins(
aPersistenceType, aOriginScope))); aPersistenceScope, aOriginScope)));
} }
} else { } else {
QM_TRY(MOZ_TO_RESULT((*mClients)[aClientType.Value()]->AboutToClearOrigins( QM_TRY(MOZ_TO_RESULT((*mClients)[aClientType.Value()]->AboutToClearOrigins(
aPersistenceType, aOriginScope))); aPersistenceScope, aOriginScope)));
} }
return NS_OK; return NS_OK;

View File

@@ -40,6 +40,7 @@ namespace mozilla::dom::quota {
struct OriginMetadata; struct OriginMetadata;
class OriginScope; class OriginScope;
class PersistenceScope;
class QuotaManager; class QuotaManager;
class UsageInfo; class UsageInfo;
@@ -140,7 +141,7 @@ class Client {
// This method is called when origins are about to be cleared // This method is called when origins are about to be cleared
// (except the case when clearing is triggered by the origin eviction). // (except the case when clearing is triggered by the origin eviction).
virtual nsresult AboutToClearOrigins( virtual nsresult AboutToClearOrigins(
const Nullable<PersistenceType>& aPersistenceType, const PersistenceScope& aPersistenceScope,
const OriginScope& aOriginScope) { const OriginScope& aOriginScope) {
return NS_OK; return NS_OK;
} }

View File

@@ -83,8 +83,7 @@ class NS_NO_VTABLE ClientDirectoryLock : public OriginDirectoryLock {
// and its subdirectories. // and its subdirectories.
class UniversalDirectoryLock : public DirectoryLock { class UniversalDirectoryLock : public DirectoryLock {
public: public:
// XXX Rename to NullablePersistenceTypeRef. virtual const PersistenceScope& PersistenceScopeRef() const = 0;
virtual const Nullable<PersistenceType>& NullablePersistenceType() const = 0;
// XXX Rename to OriginScopeRef. // XXX Rename to OriginScopeRef.
virtual const OriginScope& GetOriginScope() const = 0; virtual const OriginScope& GetOriginScope() const = 0;

View File

@@ -14,15 +14,15 @@ namespace mozilla::dom::quota {
DirectoryLockImpl::DirectoryLockImpl( DirectoryLockImpl::DirectoryLockImpl(
MovingNotNull<RefPtr<QuotaManager>> aQuotaManager, MovingNotNull<RefPtr<QuotaManager>> aQuotaManager,
const Nullable<PersistenceType>& aPersistenceType, const PersistenceScope& aPersistenceScope, const nsACString& aSuffix,
const nsACString& aSuffix, const nsACString& aGroup, const nsACString& aGroup, const OriginScope& aOriginScope,
const OriginScope& aOriginScope, const nsACString& aStorageOrigin, const nsACString& aStorageOrigin, bool aIsPrivate,
bool aIsPrivate, const Nullable<Client::Type>& aClientType, const Nullable<Client::Type>& aClientType, const bool aExclusive,
const bool aExclusive, const bool aInternal, const bool aInternal,
const ShouldUpdateLockIdTableFlag aShouldUpdateLockIdTableFlag, const ShouldUpdateLockIdTableFlag aShouldUpdateLockIdTableFlag,
const DirectoryLockCategory aCategory) const DirectoryLockCategory aCategory)
: mQuotaManager(std::move(aQuotaManager)), : mQuotaManager(std::move(aQuotaManager)),
mPersistenceType(aPersistenceType), mPersistenceScope(aPersistenceScope),
mSuffix(aSuffix), mSuffix(aSuffix),
mGroup(aGroup), mGroup(aGroup),
mOriginScope(aOriginScope), mOriginScope(aOriginScope),
@@ -38,9 +38,9 @@ DirectoryLockImpl::DirectoryLockImpl(
mRegistered(false) { mRegistered(false) {
AssertIsOnOwningThread(); AssertIsOnOwningThread();
MOZ_ASSERT_IF(aOriginScope.IsOrigin(), !aOriginScope.GetOrigin().IsEmpty()); MOZ_ASSERT_IF(aOriginScope.IsOrigin(), !aOriginScope.GetOrigin().IsEmpty());
MOZ_ASSERT_IF(!aInternal, !aPersistenceType.IsNull()); MOZ_ASSERT_IF(!aInternal, !aPersistenceScope.IsNull());
MOZ_ASSERT_IF(!aInternal, MOZ_ASSERT_IF(!aInternal,
aPersistenceType.Value() != PERSISTENCE_TYPE_INVALID); aPersistenceScope.GetValue() != PERSISTENCE_TYPE_INVALID);
MOZ_ASSERT_IF(!aInternal, !aGroup.IsEmpty()); MOZ_ASSERT_IF(!aInternal, !aGroup.IsEmpty());
MOZ_ASSERT_IF(!aInternal, aOriginScope.IsOrigin()); MOZ_ASSERT_IF(!aInternal, aOriginScope.IsOrigin());
MOZ_ASSERT_IF(!aInternal, !aStorageOrigin.IsEmpty()); MOZ_ASSERT_IF(!aInternal, !aStorageOrigin.IsEmpty());
@@ -69,13 +69,13 @@ bool DirectoryLockImpl::Overlaps(const DirectoryLockImpl& aLock) const {
AssertIsOnOwningThread(); AssertIsOnOwningThread();
// If the persistence types don't overlap, the op can proceed. // If the persistence types don't overlap, the op can proceed.
if (!aLock.mPersistenceType.IsNull() && !mPersistenceType.IsNull() && bool match = aLock.mPersistenceScope.Matches(mPersistenceScope);
aLock.mPersistenceType.Value() != mPersistenceType.Value()) { if (!match) {
return false; return false;
} }
// If the origin scopes don't overlap, the op can proceed. // If the origin scopes don't overlap, the op can proceed.
bool match = aLock.mOriginScope.Matches(mOriginScope); match = aLock.mOriginScope.Matches(mOriginScope);
if (!match) { if (!match) {
return false; return false;
} }
@@ -332,7 +332,7 @@ RefPtr<ClientDirectoryLock> DirectoryLockImpl::SpecializeForClient(
} }
RefPtr<DirectoryLockImpl> lock = RefPtr<DirectoryLockImpl> lock =
Create(mQuotaManager, Nullable<PersistenceType>(aPersistenceType), Create(mQuotaManager, PersistenceScope::CreateFromValue(aPersistenceType),
aOriginMetadata.mSuffix, aOriginMetadata.mGroup, aOriginMetadata.mSuffix, aOriginMetadata.mGroup,
OriginScope::FromOrigin(aOriginMetadata.mOrigin), OriginScope::FromOrigin(aOriginMetadata.mOrigin),
aOriginMetadata.mStorageOrigin, aOriginMetadata.mIsPrivate, aOriginMetadata.mStorageOrigin, aOriginMetadata.mIsPrivate,
@@ -378,10 +378,11 @@ void DirectoryLockImpl::Log() const {
QM_LOG(("DirectoryLockImpl [%p]", this)); QM_LOG(("DirectoryLockImpl [%p]", this));
nsCString persistenceType; nsCString persistenceType;
if (mPersistenceType.IsNull()) { if (mPersistenceScope.IsNull()) {
persistenceType.AssignLiteral("null"); persistenceType.AssignLiteral("null");
} else { } else {
persistenceType.Assign(PersistenceTypeToString(mPersistenceType.Value())); persistenceType.Assign(
PersistenceTypeToString(mPersistenceScope.GetValue()));
} }
QM_LOG((" mPersistenceType: %s", persistenceType.get())); QM_LOG((" mPersistenceType: %s", persistenceType.get()));

View File

@@ -13,6 +13,7 @@
#include "mozilla/dom/quota/DirectoryLock.h" #include "mozilla/dom/quota/DirectoryLock.h"
#include "mozilla/dom/quota/DirectoryLockCategory.h" #include "mozilla/dom/quota/DirectoryLockCategory.h"
#include "mozilla/dom/quota/OriginScope.h" #include "mozilla/dom/quota/OriginScope.h"
#include "mozilla/dom/quota/PersistenceScope.h"
namespace mozilla::dom::quota { namespace mozilla::dom::quota {
@@ -22,7 +23,7 @@ class DirectoryLockImpl final : public ClientDirectoryLock,
public UniversalDirectoryLock { public UniversalDirectoryLock {
const NotNull<RefPtr<QuotaManager>> mQuotaManager; const NotNull<RefPtr<QuotaManager>> mQuotaManager;
const Nullable<PersistenceType> mPersistenceType; const PersistenceScope mPersistenceScope;
const nsCString mSuffix; const nsCString mSuffix;
const nsCString mGroup; const nsCString mGroup;
const OriginScope mOriginScope; const OriginScope mOriginScope;
@@ -56,7 +57,7 @@ class DirectoryLockImpl final : public ClientDirectoryLock,
public: public:
DirectoryLockImpl(MovingNotNull<RefPtr<QuotaManager>> aQuotaManager, DirectoryLockImpl(MovingNotNull<RefPtr<QuotaManager>> aQuotaManager,
const Nullable<PersistenceType>& aPersistenceType, const PersistenceScope& aPersistenceScope,
const nsACString& aSuffix, const nsACString& aGroup, const nsACString& aSuffix, const nsACString& aGroup,
const OriginScope& aOriginScope, const OriginScope& aOriginScope,
const nsACString& aStorageOrigin, bool aIsPrivate, const nsACString& aStorageOrigin, bool aIsPrivate,
@@ -70,13 +71,14 @@ class DirectoryLockImpl final : public ClientDirectoryLock,
PersistenceType aPersistenceType, PersistenceType aPersistenceType,
const quota::OriginMetadata& aOriginMetadata, Client::Type aClientType, const quota::OriginMetadata& aOriginMetadata, Client::Type aClientType,
bool aExclusive) { bool aExclusive) {
return Create( return Create(std::move(aQuotaManager),
std::move(aQuotaManager), Nullable<PersistenceType>(aPersistenceType), PersistenceScope::CreateFromValue(aPersistenceType),
aOriginMetadata.mSuffix, aOriginMetadata.mGroup, aOriginMetadata.mSuffix, aOriginMetadata.mGroup,
OriginScope::FromOrigin(aOriginMetadata.mOrigin), OriginScope::FromOrigin(aOriginMetadata.mOrigin),
aOriginMetadata.mStorageOrigin, aOriginMetadata.mIsPrivate, aOriginMetadata.mStorageOrigin, aOriginMetadata.mIsPrivate,
Nullable<Client::Type>(aClientType), aExclusive, false, Nullable<Client::Type>(aClientType), aExclusive, false,
ShouldUpdateLockIdTableFlag::Yes, DirectoryLockCategory::None); ShouldUpdateLockIdTableFlag::Yes,
DirectoryLockCategory::None);
} }
static RefPtr<OriginDirectoryLock> CreateForEviction( static RefPtr<OriginDirectoryLock> CreateForEviction(
@@ -88,7 +90,7 @@ class DirectoryLockImpl final : public ClientDirectoryLock,
MOZ_ASSERT(!aOriginMetadata.mStorageOrigin.IsEmpty()); MOZ_ASSERT(!aOriginMetadata.mStorageOrigin.IsEmpty());
return Create(std::move(aQuotaManager), return Create(std::move(aQuotaManager),
Nullable<PersistenceType>(aPersistenceType), PersistenceScope::CreateFromValue(aPersistenceType),
aOriginMetadata.mSuffix, aOriginMetadata.mGroup, aOriginMetadata.mSuffix, aOriginMetadata.mGroup,
OriginScope::FromOrigin(aOriginMetadata.mOrigin), OriginScope::FromOrigin(aOriginMetadata.mOrigin),
aOriginMetadata.mStorageOrigin, aOriginMetadata.mIsPrivate, aOriginMetadata.mStorageOrigin, aOriginMetadata.mIsPrivate,
@@ -99,11 +101,11 @@ class DirectoryLockImpl final : public ClientDirectoryLock,
static RefPtr<UniversalDirectoryLock> CreateInternal( static RefPtr<UniversalDirectoryLock> CreateInternal(
MovingNotNull<RefPtr<QuotaManager>> aQuotaManager, MovingNotNull<RefPtr<QuotaManager>> aQuotaManager,
const Nullable<PersistenceType>& aPersistenceType, const PersistenceScope& aPersistenceScope,
const OriginScope& aOriginScope, const OriginScope& aOriginScope,
const Nullable<Client::Type>& aClientType, bool aExclusive, const Nullable<Client::Type>& aClientType, bool aExclusive,
DirectoryLockCategory aCategory) { DirectoryLockCategory aCategory) {
return Create(std::move(aQuotaManager), aPersistenceType, ""_ns, ""_ns, return Create(std::move(aQuotaManager), aPersistenceScope, ""_ns, ""_ns,
aOriginScope, ""_ns, false, aClientType, aExclusive, true, aOriginScope, ""_ns, false, aClientType, aExclusive, true,
ShouldUpdateLockIdTableFlag::Yes, aCategory); ShouldUpdateLockIdTableFlag::Yes, aCategory);
} }
@@ -135,7 +137,7 @@ class DirectoryLockImpl final : public ClientDirectoryLock,
bool ShouldUpdateLockTable() { bool ShouldUpdateLockTable() {
return !mInternal && return !mInternal &&
mPersistenceType.Value() != PERSISTENCE_TYPE_PERSISTENT; mPersistenceScope.GetValue() != PERSISTENCE_TYPE_PERSISTENT;
} }
bool Overlaps(const DirectoryLockImpl& aLock) const; bool Overlaps(const DirectoryLockImpl& aLock) const;
@@ -211,9 +213,9 @@ class DirectoryLockImpl final : public ClientDirectoryLock,
// OriginDirectoryLock interface // OriginDirectoryLock interface
PersistenceType GetPersistenceType() const override { PersistenceType GetPersistenceType() const override {
MOZ_DIAGNOSTIC_ASSERT(!mPersistenceType.IsNull()); MOZ_DIAGNOSTIC_ASSERT(!mPersistenceScope.IsNull());
return mPersistenceType.Value(); return mPersistenceScope.GetValue();
} }
quota::OriginMetadata OriginMetadata() const override { quota::OriginMetadata OriginMetadata() const override {
@@ -242,8 +244,8 @@ class DirectoryLockImpl final : public ClientDirectoryLock,
// UniversalDirectoryLock interface // UniversalDirectoryLock interface
const Nullable<PersistenceType>& NullablePersistenceType() const override { const PersistenceScope& PersistenceScopeRef() const override {
return mPersistenceType; return mPersistenceScope;
} }
const OriginScope& GetOriginScope() const override { return mOriginScope; } const OriginScope& GetOriginScope() const override { return mOriginScope; }
@@ -262,17 +264,16 @@ class DirectoryLockImpl final : public ClientDirectoryLock,
static RefPtr<DirectoryLockImpl> Create( static RefPtr<DirectoryLockImpl> Create(
MovingNotNull<RefPtr<QuotaManager>> aQuotaManager, MovingNotNull<RefPtr<QuotaManager>> aQuotaManager,
const Nullable<PersistenceType>& aPersistenceType, const PersistenceScope& aPersistenceScope, const nsACString& aSuffix,
const nsACString& aSuffix, const nsACString& aGroup, const nsACString& aGroup, const OriginScope& aOriginScope,
const OriginScope& aOriginScope, const nsACString& aStorageOrigin, const nsACString& aStorageOrigin, bool aIsPrivate,
bool aIsPrivate, const Nullable<Client::Type>& aClientType, const Nullable<Client::Type>& aClientType, bool aExclusive,
bool aExclusive, bool aInternal, bool aInternal, ShouldUpdateLockIdTableFlag aShouldUpdateLockIdTableFlag,
ShouldUpdateLockIdTableFlag aShouldUpdateLockIdTableFlag,
DirectoryLockCategory aCategory) { DirectoryLockCategory aCategory) {
MOZ_ASSERT_IF(aOriginScope.IsOrigin(), !aOriginScope.GetOrigin().IsEmpty()); MOZ_ASSERT_IF(aOriginScope.IsOrigin(), !aOriginScope.GetOrigin().IsEmpty());
MOZ_ASSERT_IF(!aInternal, !aPersistenceType.IsNull()); MOZ_ASSERT_IF(!aInternal, !aPersistenceScope.IsNull());
MOZ_ASSERT_IF(!aInternal, MOZ_ASSERT_IF(!aInternal,
aPersistenceType.Value() != PERSISTENCE_TYPE_INVALID); aPersistenceScope.GetValue() != PERSISTENCE_TYPE_INVALID);
MOZ_ASSERT_IF(!aInternal, !aGroup.IsEmpty()); MOZ_ASSERT_IF(!aInternal, !aGroup.IsEmpty());
MOZ_ASSERT_IF(!aInternal, aOriginScope.IsOrigin()); MOZ_ASSERT_IF(!aInternal, aOriginScope.IsOrigin());
MOZ_ASSERT_IF(!aInternal, !aStorageOrigin.IsEmpty()); MOZ_ASSERT_IF(!aInternal, !aStorageOrigin.IsEmpty());
@@ -280,7 +281,7 @@ class DirectoryLockImpl final : public ClientDirectoryLock,
MOZ_ASSERT_IF(!aInternal, aClientType.Value() < Client::TypeMax()); MOZ_ASSERT_IF(!aInternal, aClientType.Value() < Client::TypeMax());
return MakeRefPtr<DirectoryLockImpl>( return MakeRefPtr<DirectoryLockImpl>(
std::move(aQuotaManager), aPersistenceType, aSuffix, aGroup, std::move(aQuotaManager), aPersistenceScope, aSuffix, aGroup,
aOriginScope, aStorageOrigin, aIsPrivate, aClientType, aExclusive, aOriginScope, aStorageOrigin, aIsPrivate, aClientType, aExclusive,
aInternal, aShouldUpdateLockIdTableFlag, aCategory); aInternal, aShouldUpdateLockIdTableFlag, aCategory);
} }

View File

@@ -33,6 +33,7 @@
#include "mozilla/dom/quota/PQuotaRequest.h" #include "mozilla/dom/quota/PQuotaRequest.h"
#include "mozilla/dom/quota/PQuotaUsageRequest.h" #include "mozilla/dom/quota/PQuotaUsageRequest.h"
#include "mozilla/dom/quota/OriginScope.h" #include "mozilla/dom/quota/OriginScope.h"
#include "mozilla/dom/quota/PersistenceScope.h"
#include "mozilla/dom/quota/QuotaCommon.h" #include "mozilla/dom/quota/QuotaCommon.h"
#include "mozilla/dom/quota/QuotaManager.h" #include "mozilla/dom/quota/QuotaManager.h"
#include "mozilla/dom/quota/QuotaManagerImpl.h" #include "mozilla/dom/quota/QuotaManagerImpl.h"
@@ -75,7 +76,7 @@ class OpenStorageDirectoryHelper : public Base {
: Base(std::move(aQuotaManager), aName) {} : Base(std::move(aQuotaManager), aName) {}
RefPtr<BoolPromise> OpenStorageDirectory( RefPtr<BoolPromise> OpenStorageDirectory(
const Nullable<PersistenceType>& aPersistenceType, const PersistenceScope& aPersistenceScope,
const OriginScope& aOriginScope, const OriginScope& aOriginScope,
const Nullable<Client::Type>& aClientType, bool aExclusive, const Nullable<Client::Type>& aClientType, bool aExclusive,
DirectoryLockCategory aCategory = DirectoryLockCategory::None); DirectoryLockCategory aCategory = DirectoryLockCategory::None);
@@ -599,7 +600,7 @@ class ClearRequestBase
class ClearOriginOp final : public ClearRequestBase { class ClearOriginOp final : public ClearRequestBase {
const PrincipalInfo mPrincipalInfo; const PrincipalInfo mPrincipalInfo;
PrincipalMetadata mPrincipalMetadata; PrincipalMetadata mPrincipalMetadata;
const Nullable<PersistenceType> mPersistenceType; const PersistenceScope mPersistenceScope;
const Nullable<Client::Type> mClientType; const Nullable<Client::Type> mClientType;
public: public:
@@ -625,7 +626,7 @@ class ClearOriginOp final : public ClearRequestBase {
class ClearStoragesForOriginPrefixOp final class ClearStoragesForOriginPrefixOp final
: public OpenStorageDirectoryHelper<ClearRequestBase> { : public OpenStorageDirectoryHelper<ClearRequestBase> {
const nsCString mPrefix; const nsCString mPrefix;
const Nullable<PersistenceType> mPersistenceType; const PersistenceScope mPersistenceScope;
public: public:
ClearStoragesForOriginPrefixOp( ClearStoragesForOriginPrefixOp(
@@ -667,7 +668,7 @@ class ClearDataOp final : public ClearRequestBase {
class ResetOriginOp final : public QuotaRequestBase { class ResetOriginOp final : public QuotaRequestBase {
nsCString mOrigin; nsCString mOrigin;
RefPtr<UniversalDirectoryLock> mDirectoryLock; RefPtr<UniversalDirectoryLock> mDirectoryLock;
Nullable<PersistenceType> mPersistenceType; PersistenceScope mPersistenceScope;
Nullable<Client::Type> mClientType; Nullable<Client::Type> mClientType;
public: public:
@@ -951,11 +952,11 @@ RefPtr<QuotaRequestBase> CreateListOriginsOp(
template <class Base> template <class Base>
RefPtr<BoolPromise> OpenStorageDirectoryHelper<Base>::OpenStorageDirectory( RefPtr<BoolPromise> OpenStorageDirectoryHelper<Base>::OpenStorageDirectory(
const Nullable<PersistenceType>& aPersistenceType, const PersistenceScope& aPersistenceScope, const OriginScope& aOriginScope,
const OriginScope& aOriginScope, const Nullable<Client::Type>& aClientType, const Nullable<Client::Type>& aClientType, bool aExclusive,
bool aExclusive, const DirectoryLockCategory aCategory) { const DirectoryLockCategory aCategory) {
return Base::mQuotaManager return Base::mQuotaManager
->OpenStorageDirectory(aPersistenceType, aOriginScope, aClientType, ->OpenStorageDirectory(aPersistenceScope, aOriginScope, aClientType,
aExclusive, aCategory) aExclusive, aCategory)
->Then(GetCurrentSerialEventTarget(), __func__, ->Then(GetCurrentSerialEventTarget(), __func__,
[self = RefPtr(this)]( [self = RefPtr(this)](
@@ -1005,7 +1006,7 @@ RefPtr<BoolPromise> SaveOriginAccessTimeOp::OpenDirectory() {
AssertIsOnOwningThread(); AssertIsOnOwningThread();
return OpenStorageDirectory( return OpenStorageDirectory(
Nullable<PersistenceType>(mOriginMetadata.mPersistenceType), PersistenceScope::CreateFromValue(mOriginMetadata.mPersistenceType),
OriginScope::FromOrigin(mOriginMetadata.mOrigin), OriginScope::FromOrigin(mOriginMetadata.mOrigin),
Nullable<Client::Type>(), Nullable<Client::Type>(),
/* aExclusive */ false); /* aExclusive */ false);
@@ -1051,7 +1052,7 @@ RefPtr<BoolPromise> ClearPrivateRepositoryOp::OpenDirectory() {
AssertIsOnOwningThread(); AssertIsOnOwningThread();
return OpenStorageDirectory( return OpenStorageDirectory(
Nullable<PersistenceType>(PERSISTENCE_TYPE_PRIVATE), PersistenceScope::CreateFromValue(PERSISTENCE_TYPE_PRIVATE),
OriginScope::FromNull(), Nullable<Client::Type>(), OriginScope::FromNull(), Nullable<Client::Type>(),
/* aExclusive */ true); /* aExclusive */ true);
} }
@@ -1097,7 +1098,7 @@ RefPtr<BoolPromise> ShutdownStorageOp::OpenDirectory() {
mQuotaManager->ClearDirectoryLockTables(); mQuotaManager->ClearDirectoryLockTables();
mDirectoryLock = mQuotaManager->CreateDirectoryLockInternal( mDirectoryLock = mQuotaManager->CreateDirectoryLockInternal(
Nullable<PersistenceType>(), OriginScope::FromNull(), PersistenceScope::CreateFromNull(), OriginScope::FromNull(),
Nullable<Client::Type>(), Nullable<Client::Type>(),
/* aExclusive */ true, DirectoryLockCategory::UninitStorage); /* aExclusive */ true, DirectoryLockCategory::UninitStorage);
@@ -1392,7 +1393,7 @@ nsresult GetUsageOp::ProcessOrigin(QuotaManager& aQuotaManager,
RefPtr<BoolPromise> GetUsageOp::OpenDirectory() { RefPtr<BoolPromise> GetUsageOp::OpenDirectory() {
AssertIsOnOwningThread(); AssertIsOnOwningThread();
return OpenStorageDirectory(Nullable<PersistenceType>(), return OpenStorageDirectory(PersistenceScope::CreateFromNull(),
OriginScope::FromNull(), Nullable<Client::Type>(), OriginScope::FromNull(), Nullable<Client::Type>(),
/* aExclusive */ false); /* aExclusive */ false);
} }
@@ -1465,7 +1466,7 @@ RefPtr<BoolPromise> GetOriginUsageOp::OpenDirectory() {
AssertIsOnOwningThread(); AssertIsOnOwningThread();
return OpenStorageDirectory( return OpenStorageDirectory(
Nullable<PersistenceType>(), PersistenceScope::CreateFromNull(),
OriginScope::FromOrigin(mPrincipalMetadata.mOrigin), OriginScope::FromOrigin(mPrincipalMetadata.mOrigin),
Nullable<Client::Type>(), Nullable<Client::Type>(),
/* aExclusive */ false); /* aExclusive */ false);
@@ -1810,7 +1811,7 @@ RefPtr<BoolPromise> InitializeClientBase::OpenDirectory() {
AssertIsOnOwningThread(); AssertIsOnOwningThread();
mDirectoryLock = mQuotaManager->CreateDirectoryLockInternal( mDirectoryLock = mQuotaManager->CreateDirectoryLockInternal(
Nullable(mPersistenceType), PersistenceScope::CreateFromValue(mPersistenceType),
OriginScope::FromOrigin(mClientMetadata.mOrigin), OriginScope::FromOrigin(mClientMetadata.mOrigin),
Nullable(mClientMetadata.mClientType), /* aExclusive */ false); Nullable(mClientMetadata.mClientType), /* aExclusive */ false);
@@ -1926,7 +1927,7 @@ RefPtr<BoolPromise> GetFullOriginMetadataOp::OpenDirectory() {
AssertIsOnOwningThread(); AssertIsOnOwningThread();
return OpenStorageDirectory( return OpenStorageDirectory(
Nullable<PersistenceType>(mOriginMetadata.mPersistenceType), PersistenceScope::CreateFromValue(mOriginMetadata.mPersistenceType),
OriginScope::FromOrigin(mOriginMetadata.mOrigin), OriginScope::FromOrigin(mOriginMetadata.mOrigin),
Nullable<Client::Type>(), Nullable<Client::Type>(),
/* aExclusive */ false); /* aExclusive */ false);
@@ -1992,7 +1993,7 @@ RefPtr<BoolPromise> GetCachedOriginUsageOp::OpenDirectory() {
AssertIsOnOwningThread(); AssertIsOnOwningThread();
return OpenStorageDirectory( return OpenStorageDirectory(
Nullable<PersistenceType>(), PersistenceScope::CreateFromNull(),
OriginScope::FromOrigin(mPrincipalMetadata.mOrigin), OriginScope::FromOrigin(mPrincipalMetadata.mOrigin),
Nullable<Client::Type>(), Nullable<Client::Type>(),
/* aExclusive */ false); /* aExclusive */ false);
@@ -2041,8 +2042,8 @@ ClearStorageOp::ClearStorageOp(
void ClearStorageOp::DeleteFiles(QuotaManager& aQuotaManager) { void ClearStorageOp::DeleteFiles(QuotaManager& aQuotaManager) {
AssertIsOnIOThread(); AssertIsOnIOThread();
nsresult rv = aQuotaManager.AboutToClearOrigins(Nullable<PersistenceType>(), nsresult rv = aQuotaManager.AboutToClearOrigins(
OriginScope::FromNull(), PersistenceScope::CreateFromNull(), OriginScope::FromNull(),
Nullable<Client::Type>()); Nullable<Client::Type>());
if (NS_WARN_IF(NS_FAILED(rv))) { if (NS_WARN_IF(NS_FAILED(rv))) {
return; return;
@@ -2090,7 +2091,7 @@ RefPtr<BoolPromise> ClearStorageOp::OpenDirectory() {
// storage again in the end. // storage again in the end.
mQuotaManager->ClearDirectoryLockTables(); mQuotaManager->ClearDirectoryLockTables();
return OpenStorageDirectory(Nullable<PersistenceType>(), return OpenStorageDirectory(PersistenceScope::CreateFromNull(),
OriginScope::FromNull(), Nullable<Client::Type>(), OriginScope::FromNull(), Nullable<Client::Type>(),
/* aExclusive */ true, /* aExclusive */ true,
DirectoryLockCategory::UninitStorage); DirectoryLockCategory::UninitStorage);
@@ -2184,7 +2185,7 @@ void ClearRequestBase::DeleteFilesInternal(
AssertIsOnIOThread(); AssertIsOnIOThread();
QM_TRY(MOZ_TO_RESULT(aQuotaManager.AboutToClearOrigins( QM_TRY(MOZ_TO_RESULT(aQuotaManager.AboutToClearOrigins(
Nullable<PersistenceType>(aPersistenceType), aOriginScope, PersistenceScope::CreateFromValue(aPersistenceType), aOriginScope,
aClientType)), aClientType)),
QM_VOID); QM_VOID);
@@ -2361,9 +2362,9 @@ ClearOriginOp::ClearOriginOp(
const mozilla::Maybe<Client::Type>& aClientType) const mozilla::Maybe<Client::Type>& aClientType)
: ClearRequestBase(std::move(aQuotaManager), "dom::quota::ClearOriginOp"), : ClearRequestBase(std::move(aQuotaManager), "dom::quota::ClearOriginOp"),
mPrincipalInfo(aPrincipalInfo), mPrincipalInfo(aPrincipalInfo),
mPersistenceType(aPersistenceType mPersistenceScope(aPersistenceType ? PersistenceScope::CreateFromValue(
? Nullable<PersistenceType>(*aPersistenceType) *aPersistenceType)
: Nullable<PersistenceType>()), : PersistenceScope::CreateFromNull()),
mClientType(aClientType ? Nullable<Client::Type>(*aClientType) mClientType(aClientType ? Nullable<Client::Type>(*aClientType)
: Nullable<Client::Type>()) { : Nullable<Client::Type>()) {
AssertIsOnOwningThread(); AssertIsOnOwningThread();
@@ -2385,7 +2386,7 @@ RefPtr<BoolPromise> ClearOriginOp::OpenDirectory() {
AssertIsOnOwningThread(); AssertIsOnOwningThread();
return OpenStorageDirectory( return OpenStorageDirectory(
mPersistenceType, OriginScope::FromOrigin(mPrincipalMetadata.mOrigin), mPersistenceScope, OriginScope::FromOrigin(mPrincipalMetadata.mOrigin),
mClientType, mClientType,
/* aExclusive */ true); /* aExclusive */ true);
} }
@@ -2396,14 +2397,15 @@ nsresult ClearOriginOp::DoDirectoryWork(QuotaManager& aQuotaManager) {
AUTO_PROFILER_LABEL("ClearRequestBase::DoDirectoryWork", OTHER); AUTO_PROFILER_LABEL("ClearRequestBase::DoDirectoryWork", OTHER);
if (mPersistenceType.IsNull()) { if (mPersistenceScope.IsNull()) {
for (const PersistenceType type : kAllPersistenceTypes) { for (const PersistenceType type : kAllPersistenceTypes) {
DeleteFiles(aQuotaManager, OriginMetadata(mPrincipalMetadata, type), DeleteFiles(aQuotaManager, OriginMetadata(mPrincipalMetadata, type),
mClientType); mClientType);
} }
} else { } else {
DeleteFiles(aQuotaManager, DeleteFiles(
OriginMetadata(mPrincipalMetadata, mPersistenceType.Value()), aQuotaManager,
OriginMetadata(mPrincipalMetadata, mPersistenceScope.GetValue()),
mClientType); mClientType);
} }
@@ -2430,16 +2432,16 @@ ClearStoragesForOriginPrefixOp::ClearStoragesForOriginPrefixOp(
"dom::quota::ClearStoragesForOriginPrefixOp"), "dom::quota::ClearStoragesForOriginPrefixOp"),
mPrefix( mPrefix(
QuotaManager::GetOriginFromValidatedPrincipalInfo(aPrincipalInfo)), QuotaManager::GetOriginFromValidatedPrincipalInfo(aPrincipalInfo)),
mPersistenceType(aPersistenceType mPersistenceScope(aPersistenceType ? PersistenceScope::CreateFromValue(
? Nullable<PersistenceType>(*aPersistenceType) *aPersistenceType)
: Nullable<PersistenceType>()) { : PersistenceScope::CreateFromNull()) {
AssertIsOnOwningThread(); AssertIsOnOwningThread();
} }
RefPtr<BoolPromise> ClearStoragesForOriginPrefixOp::OpenDirectory() { RefPtr<BoolPromise> ClearStoragesForOriginPrefixOp::OpenDirectory() {
AssertIsOnOwningThread(); AssertIsOnOwningThread();
return OpenStorageDirectory(mPersistenceType, return OpenStorageDirectory(mPersistenceScope,
OriginScope::FromPrefix(mPrefix), OriginScope::FromPrefix(mPrefix),
Nullable<Client::Type>(), Nullable<Client::Type>(),
/* aExclusive */ true); /* aExclusive */ true);
@@ -2451,13 +2453,13 @@ nsresult ClearStoragesForOriginPrefixOp::DoDirectoryWork(
AUTO_PROFILER_LABEL("ClearStoragesForOriginPrefixOp::DoDirectoryWork", OTHER); AUTO_PROFILER_LABEL("ClearStoragesForOriginPrefixOp::DoDirectoryWork", OTHER);
if (mPersistenceType.IsNull()) { if (mPersistenceScope.IsNull()) {
for (const PersistenceType type : kAllPersistenceTypes) { for (const PersistenceType type : kAllPersistenceTypes) {
DeleteFiles(aQuotaManager, type, OriginScope::FromPrefix(mPrefix), DeleteFiles(aQuotaManager, type, OriginScope::FromPrefix(mPrefix),
Nullable<Client::Type>()); Nullable<Client::Type>());
} }
} else { } else {
DeleteFiles(aQuotaManager, mPersistenceType.Value(), DeleteFiles(aQuotaManager, mPersistenceScope.GetValue(),
OriginScope::FromPrefix(mPrefix), Nullable<Client::Type>()); OriginScope::FromPrefix(mPrefix), Nullable<Client::Type>());
} }
@@ -2484,7 +2486,7 @@ ClearDataOp::ClearDataOp(MovingNotNull<RefPtr<QuotaManager>> aQuotaManager,
RefPtr<BoolPromise> ClearDataOp::OpenDirectory() { RefPtr<BoolPromise> ClearDataOp::OpenDirectory() {
AssertIsOnOwningThread(); AssertIsOnOwningThread();
return OpenStorageDirectory(Nullable<PersistenceType>(), return OpenStorageDirectory(PersistenceScope::CreateFromNull(),
OriginScope::FromPattern(mPattern), OriginScope::FromPattern(mPattern),
Nullable<Client::Type>(), Nullable<Client::Type>(),
/* aExclusive */ true); /* aExclusive */ true);
@@ -2528,7 +2530,7 @@ ResetOriginOp::ResetOriginOp(MovingNotNull<RefPtr<QuotaManager>> aQuotaManager,
QuotaManager::GetOriginFromValidatedPrincipalInfo(params.principalInfo()); QuotaManager::GetOriginFromValidatedPrincipalInfo(params.principalInfo());
if (params.persistenceTypeIsExplicit()) { if (params.persistenceTypeIsExplicit()) {
mPersistenceType.SetValue(params.persistenceType()); mPersistenceScope.SetFromValue(params.persistenceType());
} }
if (params.clientTypeIsExplicit()) { if (params.clientTypeIsExplicit()) {
@@ -2540,7 +2542,7 @@ RefPtr<BoolPromise> ResetOriginOp::OpenDirectory() {
AssertIsOnOwningThread(); AssertIsOnOwningThread();
mDirectoryLock = mQuotaManager->CreateDirectoryLockInternal( mDirectoryLock = mQuotaManager->CreateDirectoryLockInternal(
mPersistenceType, OriginScope::FromOrigin(mOrigin), mClientType, mPersistenceScope, OriginScope::FromOrigin(mOrigin), mClientType,
/* aExclusive */ true); /* aExclusive */ true);
return mDirectoryLock->Acquire(); return mDirectoryLock->Acquire();
@@ -2596,7 +2598,7 @@ RefPtr<BoolPromise> PersistRequestBase::OpenDirectory() {
AssertIsOnOwningThread(); AssertIsOnOwningThread();
return OpenStorageDirectory( return OpenStorageDirectory(
Nullable<PersistenceType>(PERSISTENCE_TYPE_DEFAULT), PersistenceScope::CreateFromValue(PERSISTENCE_TYPE_DEFAULT),
OriginScope::FromOrigin(mPrincipalMetadata.mOrigin), OriginScope::FromOrigin(mPrincipalMetadata.mOrigin),
Nullable<Client::Type>(), Nullable<Client::Type>(),
/* aExclusive */ false); /* aExclusive */ false);
@@ -2769,7 +2771,7 @@ RefPtr<BoolPromise> EstimateOp::OpenDirectory() {
// XXX In theory, we should be locking entire group, not just one origin. // XXX In theory, we should be locking entire group, not just one origin.
return OpenStorageDirectory( return OpenStorageDirectory(
Nullable<PersistenceType>(mOriginMetadata.mPersistenceType), PersistenceScope::CreateFromValue(mOriginMetadata.mPersistenceType),
OriginScope::FromOrigin(mOriginMetadata.mOrigin), OriginScope::FromOrigin(mOriginMetadata.mOrigin),
Nullable<Client::Type>(), Nullable<Client::Type>(),
/* aExclusive */ false); /* aExclusive */ false);
@@ -2820,7 +2822,7 @@ ListOriginsOp::ListOriginsOp(MovingNotNull<RefPtr<QuotaManager>> aQuotaManager)
RefPtr<BoolPromise> ListOriginsOp::OpenDirectory() { RefPtr<BoolPromise> ListOriginsOp::OpenDirectory() {
AssertIsOnOwningThread(); AssertIsOnOwningThread();
return OpenStorageDirectory(Nullable<PersistenceType>(), return OpenStorageDirectory(PersistenceScope::CreateFromNull(),
OriginScope::FromNull(), Nullable<Client::Type>(), OriginScope::FromNull(), Nullable<Client::Type>(),
/* aExclusive */ false); /* aExclusive */ false);
} }

View File

@@ -273,7 +273,7 @@ class QuotaManager final : public BackgroundThreadObject {
const ClientMetadata& aClientMetadata) const; const ClientMetadata& aClientMetadata) const;
RefPtr<UniversalDirectoryLockPromise> OpenStorageDirectory( RefPtr<UniversalDirectoryLockPromise> OpenStorageDirectory(
const Nullable<PersistenceType>& aPersistenceType, const PersistenceScope& aPersistenceScope,
const OriginScope& aOriginScope, const OriginScope& aOriginScope,
const Nullable<Client::Type>& aClientType, bool aExclusive, const Nullable<Client::Type>& aClientType, bool aExclusive,
DirectoryLockCategory aCategory = DirectoryLockCategory::None, DirectoryLockCategory aCategory = DirectoryLockCategory::None,
@@ -304,7 +304,7 @@ class QuotaManager final : public BackgroundThreadObject {
// XXX RemoveMe once bug 1170279 gets fixed. // XXX RemoveMe once bug 1170279 gets fixed.
RefPtr<UniversalDirectoryLock> CreateDirectoryLockInternal( RefPtr<UniversalDirectoryLock> CreateDirectoryLockInternal(
const Nullable<PersistenceType>& aPersistenceType, const PersistenceScope& aPersistenceScope,
const OriginScope& aOriginScope, const OriginScope& aOriginScope,
const Nullable<Client::Type>& aClientType, bool aExclusive, const Nullable<Client::Type>& aClientType, bool aExclusive,
DirectoryLockCategory aCategory = DirectoryLockCategory::None); DirectoryLockCategory aCategory = DirectoryLockCategory::None);
@@ -453,8 +453,7 @@ class QuotaManager final : public BackgroundThreadObject {
// Returns a bool indicating whether the directory was newly created. // Returns a bool indicating whether the directory was newly created.
Result<bool, nsresult> EnsureOriginDirectory(nsIFile& aDirectory); Result<bool, nsresult> EnsureOriginDirectory(nsIFile& aDirectory);
nsresult AboutToClearOrigins( nsresult AboutToClearOrigins(const PersistenceScope& aPersistenceScope,
const Nullable<PersistenceType>& aPersistenceType,
const OriginScope& aOriginScope, const OriginScope& aOriginScope,
const Nullable<Client::Type>& aClientType); const Nullable<Client::Type>& aClientType);

View File

@@ -27,8 +27,9 @@ TEST_F(DOM_Quota_DirectoryLock, Drop_Timing) {
RefPtr<UniversalDirectoryLock> exclusiveDirectoryLock = RefPtr<UniversalDirectoryLock> exclusiveDirectoryLock =
DirectoryLockImpl::CreateInternal( DirectoryLockImpl::CreateInternal(
WrapNotNullUnchecked(quotaManager), Nullable<PersistenceType>(), WrapNotNullUnchecked(quotaManager),
OriginScope::FromNull(), Nullable<Client::Type>(), PersistenceScope::CreateFromNull(), OriginScope::FromNull(),
Nullable<Client::Type>(),
/* aExclusive */ true, DirectoryLockCategory::None); /* aExclusive */ true, DirectoryLockCategory::None);
bool done = false; bool done = false;
@@ -46,8 +47,9 @@ TEST_F(DOM_Quota_DirectoryLock, Drop_Timing) {
RefPtr<UniversalDirectoryLock> sharedDirectoryLock = RefPtr<UniversalDirectoryLock> sharedDirectoryLock =
DirectoryLockImpl::CreateInternal( DirectoryLockImpl::CreateInternal(
WrapNotNullUnchecked(quotaManager), Nullable<PersistenceType>(), WrapNotNullUnchecked(quotaManager),
OriginScope::FromNull(), Nullable<Client::Type>(), PersistenceScope::CreateFromNull(), OriginScope::FromNull(),
Nullable<Client::Type>(),
/* aExclusive */ false, DirectoryLockCategory::None); /* aExclusive */ false, DirectoryLockCategory::None);
ASSERT_TRUE(sharedDirectoryLock->MustWait()); ASSERT_TRUE(sharedDirectoryLock->MustWait());

View File

@@ -11,6 +11,7 @@
#include "mozilla/dom/quota/DirectoryLock.h" #include "mozilla/dom/quota/DirectoryLock.h"
#include "mozilla/dom/quota/DirectoryLockInlines.h" #include "mozilla/dom/quota/DirectoryLockInlines.h"
#include "mozilla/dom/quota/OriginScope.h" #include "mozilla/dom/quota/OriginScope.h"
#include "mozilla/dom/quota/PersistenceScope.h"
#include "mozilla/dom/quota/QuotaManager.h" #include "mozilla/dom/quota/QuotaManager.h"
#include "mozilla/dom/quota/ResultExtensions.h" #include "mozilla/dom/quota/ResultExtensions.h"
#include "mozilla/gtest/MozAssertions.h" #include "mozilla/gtest/MozAssertions.h"
@@ -43,7 +44,7 @@ TEST_F(TestQuotaManager, OpenStorageDirectory_OngoingWithScheduledShutdown) {
promises.AppendElement( promises.AppendElement(
quotaManager quotaManager
->OpenStorageDirectory( ->OpenStorageDirectory(
Nullable<PersistenceType>(PERSISTENCE_TYPE_PERSISTENT), PersistenceScope::CreateFromValue(PERSISTENCE_TYPE_PERSISTENT),
OriginScope::FromNull(), Nullable<Client::Type>(), OriginScope::FromNull(), Nullable<Client::Type>(),
/* aExclusive */ false) /* aExclusive */ false)
->Then(GetCurrentSerialEventTarget(), __func__, ->Then(GetCurrentSerialEventTarget(), __func__,
@@ -94,7 +95,7 @@ TEST_F(TestQuotaManager, OpenStorageDirectory_OngoingWithScheduledShutdown) {
promises.AppendElement( promises.AppendElement(
quotaManager quotaManager
->OpenStorageDirectory( ->OpenStorageDirectory(
Nullable<PersistenceType>(PERSISTENCE_TYPE_PERSISTENT), PersistenceScope::CreateFromValue(PERSISTENCE_TYPE_PERSISTENT),
OriginScope::FromNull(), Nullable<Client::Type>(), OriginScope::FromNull(), Nullable<Client::Type>(),
/* aExclusive */ false) /* aExclusive */ false)
->Then(GetCurrentSerialEventTarget(), __func__, ->Then(GetCurrentSerialEventTarget(), __func__,
@@ -152,8 +153,8 @@ TEST_F(TestQuotaManager,
ASSERT_TRUE(quotaManager); ASSERT_TRUE(quotaManager);
RefPtr<UniversalDirectoryLock> directoryLock = RefPtr<UniversalDirectoryLock> directoryLock =
quotaManager->CreateDirectoryLockInternal(Nullable<PersistenceType>(), quotaManager->CreateDirectoryLockInternal(
OriginScope::FromNull(), PersistenceScope::CreateFromNull(), OriginScope::FromNull(),
Nullable<Client::Type>(), Nullable<Client::Type>(),
/* aExclusive */ true); /* aExclusive */ true);
@@ -162,7 +163,7 @@ TEST_F(TestQuotaManager,
promises.AppendElement( promises.AppendElement(
quotaManager quotaManager
->OpenStorageDirectory( ->OpenStorageDirectory(
Nullable<PersistenceType>(PERSISTENCE_TYPE_PERSISTENT), PersistenceScope::CreateFromValue(PERSISTENCE_TYPE_PERSISTENT),
OriginScope::FromNull(), Nullable<Client::Type>(), OriginScope::FromNull(), Nullable<Client::Type>(),
/* aExclusive */ false) /* aExclusive */ false)
->Then(GetCurrentSerialEventTarget(), __func__, ->Then(GetCurrentSerialEventTarget(), __func__,
@@ -186,7 +187,7 @@ TEST_F(TestQuotaManager,
promises.AppendElement( promises.AppendElement(
quotaManager quotaManager
->OpenStorageDirectory( ->OpenStorageDirectory(
Nullable<PersistenceType>(PERSISTENCE_TYPE_PERSISTENT), PersistenceScope::CreateFromValue(PERSISTENCE_TYPE_PERSISTENT),
OriginScope::FromNull(), Nullable<Client::Type>(), OriginScope::FromNull(), Nullable<Client::Type>(),
/* aExclusive */ false) /* aExclusive */ false)
->Then(GetCurrentSerialEventTarget(), __func__, ->Then(GetCurrentSerialEventTarget(), __func__,
@@ -246,7 +247,7 @@ TEST_F(TestQuotaManager, OpenStorageDirectory_Finished) {
quotaManager quotaManager
->OpenStorageDirectory( ->OpenStorageDirectory(
Nullable<PersistenceType>(PERSISTENCE_TYPE_PERSISTENT), PersistenceScope::CreateFromValue(PERSISTENCE_TYPE_PERSISTENT),
OriginScope::FromNull(), Nullable<Client::Type>(), OriginScope::FromNull(), Nullable<Client::Type>(),
/* aExclusive */ false) /* aExclusive */ false)
->Then( ->Then(
@@ -273,7 +274,7 @@ TEST_F(TestQuotaManager, OpenStorageDirectory_Finished) {
quotaManager quotaManager
->OpenStorageDirectory( ->OpenStorageDirectory(
Nullable<PersistenceType>(PERSISTENCE_TYPE_PERSISTENT), PersistenceScope::CreateFromValue(PERSISTENCE_TYPE_PERSISTENT),
OriginScope::FromNull(), Nullable<Client::Type>(), OriginScope::FromNull(), Nullable<Client::Type>(),
/* aExclusive */ false) /* aExclusive */ false)
->Then( ->Then(
@@ -317,7 +318,7 @@ TEST_F(TestQuotaManager, OpenStorageDirectory_FinishedWithScheduledShutdown) {
quotaManager quotaManager
->OpenStorageDirectory( ->OpenStorageDirectory(
Nullable<PersistenceType>(PERSISTENCE_TYPE_PERSISTENT), PersistenceScope::CreateFromValue(PERSISTENCE_TYPE_PERSISTENT),
OriginScope::FromNull(), Nullable<Client::Type>(), OriginScope::FromNull(), Nullable<Client::Type>(),
/* aExclusive */ false) /* aExclusive */ false)
->Then( ->Then(
@@ -346,7 +347,7 @@ TEST_F(TestQuotaManager, OpenStorageDirectory_FinishedWithScheduledShutdown) {
promises.AppendElement( promises.AppendElement(
quotaManager quotaManager
->OpenStorageDirectory( ->OpenStorageDirectory(
Nullable<PersistenceType>(PERSISTENCE_TYPE_PERSISTENT), PersistenceScope::CreateFromValue(PERSISTENCE_TYPE_PERSISTENT),
OriginScope::FromNull(), Nullable<Client::Type>(), OriginScope::FromNull(), Nullable<Client::Type>(),
/* aExclusive */ false) /* aExclusive */ false)
->Then(GetCurrentSerialEventTarget(), __func__, ->Then(GetCurrentSerialEventTarget(), __func__,
@@ -408,7 +409,7 @@ TEST_F(TestQuotaManager,
quotaManager quotaManager
->OpenStorageDirectory( ->OpenStorageDirectory(
Nullable<PersistenceType>(PERSISTENCE_TYPE_PERSISTENT), PersistenceScope::CreateFromValue(PERSISTENCE_TYPE_PERSISTENT),
OriginScope::FromNull(), Nullable<Client::Type>(), OriginScope::FromNull(), Nullable<Client::Type>(),
/* aExclusive */ false) /* aExclusive */ false)
->Then( ->Then(
@@ -449,7 +450,7 @@ TEST_F(TestQuotaManager,
quotaManager quotaManager
->OpenStorageDirectory( ->OpenStorageDirectory(
Nullable<PersistenceType>(PERSISTENCE_TYPE_PERSISTENT), PersistenceScope::CreateFromValue(PERSISTENCE_TYPE_PERSISTENT),
OriginScope::FromNull(), Nullable<Client::Type>(), OriginScope::FromNull(), Nullable<Client::Type>(),
/* aExclusive */ false) /* aExclusive */ false)
->Then( ->Then(
@@ -599,8 +600,8 @@ TEST_F(TestQuotaManager,
ASSERT_TRUE(quotaManager); ASSERT_TRUE(quotaManager);
RefPtr<UniversalDirectoryLock> directoryLock = RefPtr<UniversalDirectoryLock> directoryLock =
quotaManager->CreateDirectoryLockInternal(Nullable<PersistenceType>(), quotaManager->CreateDirectoryLockInternal(
OriginScope::FromNull(), PersistenceScope::CreateFromNull(), OriginScope::FromNull(),
Nullable<Client::Type>(), Nullable<Client::Type>(),
/* aExclusive */ true); /* aExclusive */ true);
@@ -1079,8 +1080,8 @@ TEST_F(TestQuotaManager, InitializeStorage_OngoingWithExclusiveDirectoryLock) {
ASSERT_TRUE(quotaManager); ASSERT_TRUE(quotaManager);
RefPtr<UniversalDirectoryLock> directoryLock = RefPtr<UniversalDirectoryLock> directoryLock =
quotaManager->CreateDirectoryLockInternal(Nullable<PersistenceType>(), quotaManager->CreateDirectoryLockInternal(
OriginScope::FromNull(), PersistenceScope::CreateFromNull(), OriginScope::FromNull(),
Nullable<Client::Type>(), Nullable<Client::Type>(),
/* aExclusive */ true); /* aExclusive */ true);