Bug 1867997 - Move nsIPrincipal/PrincipalInfo helpers to separate files; r=dom-storage-reviewers,jari
Differential Revision: https://phabricator.services.mozilla.com/D223992
This commit is contained in:
@@ -94,7 +94,7 @@
|
||||
#include "mozilla/dom/PermissionMessageUtils.h"
|
||||
#include "mozilla/dom/Text.h"
|
||||
#include "mozilla/dom/quota/PersistenceType.h"
|
||||
#include "mozilla/dom/quota/QuotaManager.h"
|
||||
#include "mozilla/dom/quota/PrincipalUtils.h"
|
||||
#include "mozilla/dom/ContentChild.h"
|
||||
#include "mozilla/layers/FrameUniformityData.h"
|
||||
#include "nsPrintfCString.h"
|
||||
@@ -3496,8 +3496,7 @@ nsDOMWindowUtils::GetFileReferences(const nsAString& aDatabaseName, int64_t aId,
|
||||
NS_ENSURE_TRUE(window, NS_ERROR_FAILURE);
|
||||
|
||||
quota::PrincipalMetadata principalMetadata;
|
||||
MOZ_TRY_VAR(principalMetadata,
|
||||
quota::QuotaManager::GetInfoFromWindow(window));
|
||||
MOZ_TRY_VAR(principalMetadata, quota::GetInfoFromWindow(window));
|
||||
|
||||
RefPtr<IndexedDatabaseManager> mgr = IndexedDatabaseManager::Get();
|
||||
if (mgr) {
|
||||
|
||||
7
dom/cache/CacheStorage.cpp
vendored
7
dom/cache/CacheStorage.cpp
vendored
@@ -22,7 +22,7 @@
|
||||
#include "mozilla/dom/cache/PCacheChild.h"
|
||||
#include "mozilla/dom/cache/ReadStream.h"
|
||||
#include "mozilla/dom/cache/TypeUtils.h"
|
||||
#include "mozilla/dom/quota/QuotaManager.h"
|
||||
#include "mozilla/dom/quota/PrincipalUtils.h"
|
||||
#include "mozilla/dom/quota/ResultExtensions.h"
|
||||
#include "mozilla/dom/WorkerPrivate.h"
|
||||
#include "mozilla/ipc/BackgroundChild.h"
|
||||
@@ -42,7 +42,6 @@
|
||||
namespace mozilla::dom::cache {
|
||||
|
||||
using mozilla::ErrorResult;
|
||||
using mozilla::dom::quota::QuotaManager;
|
||||
using mozilla::ipc::BackgroundChild;
|
||||
using mozilla::ipc::PBackgroundChild;
|
||||
using mozilla::ipc::PrincipalInfo;
|
||||
@@ -145,7 +144,7 @@ already_AddRefed<CacheStorage> CacheStorage::CreateOnMainThread(
|
||||
QM_TRY(MOZ_TO_RESULT(PrincipalToPrincipalInfo(aPrincipal, &principalInfo)),
|
||||
nullptr, [&aRv](const nsresult rv) { aRv.Throw(rv); });
|
||||
|
||||
QM_TRY(OkIf(QuotaManager::IsPrincipalInfoValid(principalInfo)),
|
||||
QM_TRY(OkIf(quota::IsPrincipalInfoValid(principalInfo)),
|
||||
RefPtr{new CacheStorage(NS_ERROR_DOM_SECURITY_ERR)}.forget(),
|
||||
[](const auto) {
|
||||
NS_WARNING("CacheStorage not supported on invalid origins.");
|
||||
@@ -193,7 +192,7 @@ already_AddRefed<CacheStorage> CacheStorage::CreateOnWorker(
|
||||
const PrincipalInfo& principalInfo =
|
||||
aWorkerPrivate->GetEffectiveStoragePrincipalInfo();
|
||||
|
||||
QM_TRY(OkIf(QuotaManager::IsPrincipalInfoValid(principalInfo)), nullptr,
|
||||
QM_TRY(OkIf(quota::IsPrincipalInfoValid(principalInfo)), nullptr,
|
||||
[&aRv](const auto) { aRv.Throw(NS_ERROR_FAILURE); });
|
||||
|
||||
// We have a number of cases where we want to skip the https scheme
|
||||
|
||||
5
dom/cache/CacheStorageParent.cpp
vendored
5
dom/cache/CacheStorageParent.cpp
vendored
@@ -11,12 +11,11 @@
|
||||
#include "mozilla/dom/cache/ActorUtils.h"
|
||||
#include "mozilla/dom/cache/CacheOpParent.h"
|
||||
#include "mozilla/dom/cache/ManagerId.h"
|
||||
#include "mozilla/dom/quota/QuotaManager.h"
|
||||
#include "mozilla/dom/quota/PrincipalUtils.h"
|
||||
#include "mozilla/ipc/PBackgroundParent.h"
|
||||
|
||||
namespace mozilla::dom::cache {
|
||||
|
||||
using mozilla::dom::quota::QuotaManager;
|
||||
using mozilla::ipc::PBackgroundParent;
|
||||
using mozilla::ipc::PrincipalInfo;
|
||||
|
||||
@@ -24,7 +23,7 @@ using mozilla::ipc::PrincipalInfo;
|
||||
already_AddRefed<PCacheStorageParent> AllocPCacheStorageParent(
|
||||
PBackgroundParent* aManagingActor, Namespace aNamespace,
|
||||
const mozilla::ipc::PrincipalInfo& aPrincipalInfo) {
|
||||
if (NS_WARN_IF(!QuotaManager::IsPrincipalInfoValid(aPrincipalInfo))) {
|
||||
if (NS_WARN_IF(!quota::IsPrincipalInfoValid(aPrincipalInfo))) {
|
||||
MOZ_ASSERT(false);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
5
dom/cache/Context.cpp
vendored
5
dom/cache/Context.cpp
vendored
@@ -17,6 +17,7 @@
|
||||
#include "mozilla/dom/quota/Assertions.h"
|
||||
#include "mozilla/dom/quota/DirectoryLock.h"
|
||||
#include "mozilla/dom/quota/DirectoryLockInlines.h"
|
||||
#include "mozilla/dom/quota/PrincipalUtils.h"
|
||||
#include "mozilla/dom/quota/QuotaManager.h"
|
||||
#include "mozilla/dom/quota/ResultExtensions.h"
|
||||
#include "mozilla/dom/quota/ThreadUtils.h"
|
||||
@@ -371,8 +372,8 @@ Context::QuotaInitRunnable::Run() {
|
||||
MOZ_DIAGNOSTIC_ASSERT(quotaManager);
|
||||
|
||||
QM_TRY_UNWRAP(auto principalMetadata,
|
||||
QuotaManager::GetInfoFromValidatedPrincipalInfo(
|
||||
*quotaManager, *mPrincipalInfo));
|
||||
quota::GetInfoFromValidatedPrincipalInfo(*quotaManager,
|
||||
*mPrincipalInfo));
|
||||
|
||||
mDirectoryMetadata.emplace(std::move(principalMetadata));
|
||||
|
||||
|
||||
6
dom/cache/ManagerId.cpp
vendored
6
dom/cache/ManagerId.cpp
vendored
@@ -8,7 +8,7 @@
|
||||
|
||||
#include "CacheCommon.h"
|
||||
|
||||
#include "mozilla/dom/quota/QuotaManager.h"
|
||||
#include "mozilla/dom/quota/PrincipalUtils.h"
|
||||
#include "nsIPrincipal.h"
|
||||
#include "nsProxyRelease.h"
|
||||
#include "mozilla/RefPtr.h"
|
||||
@@ -23,11 +23,11 @@ Result<SafeRefPtr<ManagerId>, nsresult> ManagerId::Create(
|
||||
nsIPrincipal* aPrincipal) {
|
||||
MOZ_ASSERT(NS_IsMainThread());
|
||||
|
||||
// QuotaManager::GetOriginFromPrincipal() has special logic for system
|
||||
// mozilla::dom::quota::GetOriginFromPrincipal() has special logic for system
|
||||
// and about: principals. We need to use the same modified origin in
|
||||
// order to interpret calls from QM correctly.
|
||||
QM_TRY_INSPECT(const auto& quotaOrigin,
|
||||
QuotaManager::GetOriginFromPrincipal(aPrincipal));
|
||||
quota::GetOriginFromPrincipal(aPrincipal));
|
||||
|
||||
return MakeSafeRefPtr<ManagerId>(aPrincipal, quotaOrigin, ConstructorGuard{});
|
||||
}
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
#include "mozilla/dom/FileSystemLog.h"
|
||||
#include "mozilla/dom/FileSystemManagerParent.h"
|
||||
#include "mozilla/dom/FileSystemTypes.h"
|
||||
#include "mozilla/dom/quota/PrincipalUtils.h"
|
||||
#include "mozilla/dom/quota/QuotaCommon.h"
|
||||
#include "mozilla/dom/quota/QuotaManager.h"
|
||||
#include "mozilla/dom/quota/ResultExtensions.h"
|
||||
@@ -34,8 +35,7 @@ mozilla::ipc::IPCResult CreateFileSystemManagerParent(
|
||||
[aResolver](const auto&) { aResolver(NS_ERROR_INVALID_ARG); });
|
||||
|
||||
// This blocks Null and Expanded principals
|
||||
QM_TRY(OkIf(quota::QuotaManager::IsPrincipalInfoValid(aPrincipalInfo)),
|
||||
IPC_OK(),
|
||||
QM_TRY(OkIf(quota::IsPrincipalInfoValid(aPrincipalInfo)), IPC_OK(),
|
||||
[aResolver](const auto&) { aResolver(NS_ERROR_DOM_SECURITY_ERR); });
|
||||
|
||||
QM_TRY(quota::QuotaManager::EnsureCreated(), IPC_OK(),
|
||||
@@ -44,10 +44,10 @@ mozilla::ipc::IPCResult CreateFileSystemManagerParent(
|
||||
auto* const quotaManager = quota::QuotaManager::Get();
|
||||
MOZ_ASSERT(quotaManager);
|
||||
|
||||
QM_TRY_UNWRAP(auto principalMetadata,
|
||||
quota::QuotaManager::GetInfoFromValidatedPrincipalInfo(
|
||||
*quotaManager, aPrincipalInfo),
|
||||
IPC_OK(), [aResolver](const auto rv) { aResolver(rv); });
|
||||
QM_TRY_UNWRAP(
|
||||
auto principalMetadata,
|
||||
quota::GetInfoFromValidatedPrincipalInfo(*quotaManager, aPrincipalInfo),
|
||||
IPC_OK(), [aResolver](const auto rv) { aResolver(rv); });
|
||||
|
||||
quota::OriginMetadata originMetadata(std::move(principalMetadata),
|
||||
quota::PERSISTENCE_TYPE_DEFAULT);
|
||||
|
||||
@@ -133,6 +133,7 @@
|
||||
#include "mozilla/dom/quota/OriginScope.h"
|
||||
#include "mozilla/dom/quota/PersistenceScope.h"
|
||||
#include "mozilla/dom/quota/PersistenceType.h"
|
||||
#include "mozilla/dom/quota/PrincipalUtils.h"
|
||||
#include "mozilla/dom/quota/QuotaCommon.h"
|
||||
#include "mozilla/dom/quota/QuotaManager.h"
|
||||
#include "mozilla/dom/quota/QuotaObject.h"
|
||||
@@ -9035,7 +9036,7 @@ Factory::AllocPBackgroundIDBFactoryRequestParent(
|
||||
|
||||
const PrincipalInfo& principalInfo = commonParams->principalInfo();
|
||||
|
||||
if (NS_AUUF_OR_WARN_IF(!QuotaManager::IsPrincipalInfoValid(principalInfo))) {
|
||||
if (NS_AUUF_OR_WARN_IF(!quota::IsPrincipalInfoValid(principalInfo))) {
|
||||
IPC_FAIL(this, "Invalid principal!");
|
||||
return nullptr;
|
||||
}
|
||||
@@ -9119,7 +9120,7 @@ mozilla::ipc::IPCResult Factory::RecvGetDatabases(
|
||||
QM_TRY(MOZ_TO_RESULT(IsValidPersistenceType(aPersistenceType)),
|
||||
QM_IPC_FAIL(this));
|
||||
|
||||
QM_TRY(MOZ_TO_RESULT(QuotaManager::IsPrincipalInfoValid(aPrincipalInfo)),
|
||||
QM_TRY(MOZ_TO_RESULT(quota::IsPrincipalInfoValid(aPrincipalInfo)),
|
||||
QM_IPC_FAIL(this));
|
||||
|
||||
MOZ_ASSERT(aPrincipalInfo.type() == PrincipalInfo::TSystemPrincipalInfo ||
|
||||
@@ -14756,9 +14757,9 @@ nsresult FactoryOp::Open() {
|
||||
QuotaManager* const quotaManager = QuotaManager::Get();
|
||||
MOZ_ASSERT(quotaManager);
|
||||
|
||||
QM_TRY_UNWRAP(auto principalMetadata,
|
||||
QuotaManager::GetInfoFromValidatedPrincipalInfo(
|
||||
*quotaManager, mPrincipalInfo));
|
||||
QM_TRY_UNWRAP(
|
||||
auto principalMetadata,
|
||||
quota::GetInfoFromValidatedPrincipalInfo(*quotaManager, mPrincipalInfo));
|
||||
|
||||
mOriginMetadata = {std::move(principalMetadata), mPersistenceType};
|
||||
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
#include "mozilla/dom/Document.h"
|
||||
#include "mozilla/dom/IDBFactoryBinding.h"
|
||||
#include "mozilla/dom/Promise.h"
|
||||
#include "mozilla/dom/quota/PrincipalUtils.h"
|
||||
#include "mozilla/dom/quota/QuotaManager.h"
|
||||
#include "mozilla/dom/quota/ResultExtensions.h"
|
||||
#include "mozilla/dom/BrowserChild.h"
|
||||
@@ -129,7 +130,7 @@ Result<RefPtr<IDBFactory>, nsresult> IDBFactory::CreateForWindow(
|
||||
MOZ_ASSERT(principalInfo->type() == PrincipalInfo::TContentPrincipalInfo ||
|
||||
principalInfo->type() == PrincipalInfo::TSystemPrincipalInfo);
|
||||
|
||||
if (NS_WARN_IF(!QuotaManager::IsPrincipalInfoValid(*principalInfo))) {
|
||||
if (NS_WARN_IF(!quota::IsPrincipalInfoValid(*principalInfo))) {
|
||||
IDB_REPORT_INTERNAL_ERR();
|
||||
return Err(NS_ERROR_DOM_INDEXEDDB_UNKNOWN_ERR);
|
||||
}
|
||||
@@ -180,7 +181,7 @@ Result<RefPtr<IDBFactory>, nsresult> IDBFactory::CreateForMainThreadJS(
|
||||
return Err(rv);
|
||||
}
|
||||
|
||||
if (NS_WARN_IF(!QuotaManager::IsPrincipalInfoValid(*principalInfo))) {
|
||||
if (NS_WARN_IF(!quota::IsPrincipalInfoValid(*principalInfo))) {
|
||||
return Err(NS_ERROR_DOM_INDEXEDDB_UNKNOWN_ERR);
|
||||
}
|
||||
|
||||
@@ -705,7 +706,7 @@ RefPtr<IDBOpenDBRequest> IDBFactory::OpenInternal(
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
if (NS_WARN_IF(!QuotaManager::IsPrincipalInfoValid(principalInfo))) {
|
||||
if (NS_WARN_IF(!quota::IsPrincipalInfoValid(principalInfo))) {
|
||||
IDB_REPORT_INTERNAL_ERR();
|
||||
aRv.Throw(NS_ERROR_DOM_INDEXEDDB_UNKNOWN_ERR);
|
||||
return nullptr;
|
||||
|
||||
@@ -83,6 +83,7 @@
|
||||
#include "mozilla/dom/quota/OriginScope.h"
|
||||
#include "mozilla/dom/quota/PersistenceScope.h"
|
||||
#include "mozilla/dom/quota/PersistenceType.h"
|
||||
#include "mozilla/dom/quota/PrincipalUtils.h"
|
||||
#include "mozilla/dom/quota/QuotaCommon.h"
|
||||
#include "mozilla/dom/quota/StorageHelpers.h"
|
||||
#include "mozilla/dom/quota/QuotaManager.h"
|
||||
@@ -3091,7 +3092,7 @@ bool VerifyPrincipalInfo(const PrincipalInfo& aPrincipalInfo,
|
||||
bool aCheckClientPrincipal) {
|
||||
AssertIsOnBackgroundThread();
|
||||
|
||||
if (NS_WARN_IF(!QuotaManager::IsPrincipalInfoValid(aPrincipalInfo))) {
|
||||
if (NS_WARN_IF(!quota::IsPrincipalInfoValid(aPrincipalInfo))) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -6706,14 +6707,13 @@ nsresult PrepareDatastoreOp::Start() {
|
||||
commonParams.storagePrincipalInfo();
|
||||
|
||||
if (storagePrincipalInfo.type() == PrincipalInfo::TSystemPrincipalInfo) {
|
||||
mOriginMetadata = {QuotaManager::GetInfoForChrome(),
|
||||
PERSISTENCE_TYPE_DEFAULT};
|
||||
mOriginMetadata = {quota::GetInfoForChrome(), PERSISTENCE_TYPE_DEFAULT};
|
||||
} else {
|
||||
MOZ_ASSERT(storagePrincipalInfo.type() ==
|
||||
PrincipalInfo::TContentPrincipalInfo);
|
||||
|
||||
QM_TRY_UNWRAP(auto principalMetadata,
|
||||
QuotaManager::GetInfoFromValidatedPrincipalInfo(
|
||||
quota::GetInfoFromValidatedPrincipalInfo(
|
||||
*QuotaManager::Get(), storagePrincipalInfo));
|
||||
|
||||
mOriginMetadata.mSuffix = std::move(principalMetadata.mSuffix);
|
||||
@@ -7918,13 +7918,12 @@ nsresult PrepareObserverOp::Start() {
|
||||
const PrincipalInfo& storagePrincipalInfo = params.storagePrincipalInfo();
|
||||
|
||||
if (storagePrincipalInfo.type() == PrincipalInfo::TSystemPrincipalInfo) {
|
||||
mOrigin = QuotaManager::GetOriginForChrome();
|
||||
mOrigin = quota::GetOriginForChrome();
|
||||
} else {
|
||||
MOZ_ASSERT(storagePrincipalInfo.type() ==
|
||||
PrincipalInfo::TContentPrincipalInfo);
|
||||
|
||||
mOrigin =
|
||||
QuotaManager::GetOriginFromValidatedPrincipalInfo(storagePrincipalInfo);
|
||||
mOrigin = quota::GetOriginFromValidatedPrincipalInfo(storagePrincipalInfo);
|
||||
}
|
||||
|
||||
mState = State::SendingReadyMessage;
|
||||
@@ -8132,10 +8131,10 @@ nsresult PreloadedOp::Start() {
|
||||
MOZ_ASSERT(
|
||||
storagePrincipalInfo.type() == PrincipalInfo::TSystemPrincipalInfo ||
|
||||
storagePrincipalInfo.type() == PrincipalInfo::TContentPrincipalInfo);
|
||||
mOrigin = storagePrincipalInfo.type() == PrincipalInfo::TSystemPrincipalInfo
|
||||
? nsCString{QuotaManager::GetOriginForChrome()}
|
||||
: QuotaManager::GetOriginFromValidatedPrincipalInfo(
|
||||
storagePrincipalInfo);
|
||||
mOrigin =
|
||||
storagePrincipalInfo.type() == PrincipalInfo::TSystemPrincipalInfo
|
||||
? nsCString{quota::GetOriginForChrome()}
|
||||
: quota::GetOriginFromValidatedPrincipalInfo(storagePrincipalInfo);
|
||||
|
||||
mState = State::SendingResults;
|
||||
MOZ_ALWAYS_SUCCEEDS(OwningEventTarget()->Dispatch(this, NS_DISPATCH_NORMAL));
|
||||
@@ -8189,10 +8188,10 @@ nsresult GetStateOp::Start() {
|
||||
MOZ_ASSERT(
|
||||
storagePrincipalInfo.type() == PrincipalInfo::TSystemPrincipalInfo ||
|
||||
storagePrincipalInfo.type() == PrincipalInfo::TContentPrincipalInfo);
|
||||
mOrigin = storagePrincipalInfo.type() == PrincipalInfo::TSystemPrincipalInfo
|
||||
? nsCString{QuotaManager::GetOriginForChrome()}
|
||||
: QuotaManager::GetOriginFromValidatedPrincipalInfo(
|
||||
storagePrincipalInfo);
|
||||
mOrigin =
|
||||
storagePrincipalInfo.type() == PrincipalInfo::TSystemPrincipalInfo
|
||||
? nsCString{quota::GetOriginForChrome()}
|
||||
: quota::GetOriginFromValidatedPrincipalInfo(storagePrincipalInfo);
|
||||
|
||||
mState = State::SendingResults;
|
||||
MOZ_ALWAYS_SUCCEEDS(OwningEventTarget()->Dispatch(this, NS_DISPATCH_NORMAL));
|
||||
@@ -8596,7 +8595,7 @@ nsresult QuotaClient::AboutToClearOrigins(
|
||||
// `CreateAerchivedOriginScope` because it calls `GenerateOriginKey2` which
|
||||
// doesn't support the system principal.
|
||||
if (aOriginScope.IsOrigin() &&
|
||||
aOriginScope.GetOrigin() == QuotaManager::GetOriginForChrome()) {
|
||||
aOriginScope.GetOrigin() == quota::GetOriginForChrome()) {
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
#include "mozilla/dom/LocalStorageCommon.h"
|
||||
#include "mozilla/dom/PBackgroundLSRequest.h"
|
||||
#include "mozilla/dom/PBackgroundLSSharedTypes.h"
|
||||
#include "mozilla/dom/quota/QuotaManager.h"
|
||||
#include "mozilla/dom/quota/PrincipalUtils.h"
|
||||
#include "mozilla/glean/GleanMetrics.h"
|
||||
#include "mozilla/ipc/BackgroundChild.h"
|
||||
#include "mozilla/ipc/BackgroundUtils.h"
|
||||
@@ -278,23 +278,20 @@ nsresult LSObject::CreateForWindow(nsPIDOMWindowInner* aWindow,
|
||||
MOZ_ASSERT(storagePrincipalInfo->type() ==
|
||||
PrincipalInfo::TContentPrincipalInfo);
|
||||
|
||||
if (NS_WARN_IF(
|
||||
!quota::QuotaManager::IsPrincipalInfoValid(*storagePrincipalInfo))) {
|
||||
if (NS_WARN_IF(!quota::IsPrincipalInfoValid(*storagePrincipalInfo))) {
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
#ifdef DEBUG
|
||||
QM_TRY_INSPECT(
|
||||
const auto& principalMetadata,
|
||||
quota::QuotaManager::GetInfoFromPrincipal(storagePrincipal.get()));
|
||||
QM_TRY_INSPECT(const auto& principalMetadata,
|
||||
quota::GetInfoFromPrincipal(storagePrincipal.get()));
|
||||
|
||||
MOZ_ASSERT(originAttrSuffix == principalMetadata.mSuffix);
|
||||
|
||||
const auto& origin = principalMetadata.mOrigin;
|
||||
#else
|
||||
QM_TRY_INSPECT(
|
||||
const auto& origin,
|
||||
quota::QuotaManager::GetOriginFromPrincipal(storagePrincipal.get()));
|
||||
QM_TRY_INSPECT(const auto& origin,
|
||||
quota::GetOriginFromPrincipal(storagePrincipal.get()));
|
||||
#endif
|
||||
|
||||
uint32_t privateBrowsingId;
|
||||
@@ -373,8 +370,7 @@ nsresult LSObject::CreateForPrincipal(nsPIDOMWindowInner* aWindow,
|
||||
storagePrincipalInfo->type() == PrincipalInfo::TContentPrincipalInfo ||
|
||||
storagePrincipalInfo->type() == PrincipalInfo::TSystemPrincipalInfo);
|
||||
|
||||
if (NS_WARN_IF(
|
||||
!quota::QuotaManager::IsPrincipalInfoValid(*storagePrincipalInfo))) {
|
||||
if (NS_WARN_IF(!quota::IsPrincipalInfoValid(*storagePrincipalInfo))) {
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
@@ -385,26 +381,26 @@ nsresult LSObject::CreateForPrincipal(nsPIDOMWindowInner* aWindow,
|
||||
&aPrincipal]() -> Result<quota::PrincipalMetadata, nsresult> {
|
||||
if (storagePrincipalInfo->type() ==
|
||||
PrincipalInfo::TSystemPrincipalInfo) {
|
||||
return quota::QuotaManager::GetInfoForChrome();
|
||||
return quota::GetInfoForChrome();
|
||||
}
|
||||
|
||||
QM_TRY_RETURN(quota::QuotaManager::GetInfoFromPrincipal(aPrincipal));
|
||||
QM_TRY_RETURN(quota::GetInfoFromPrincipal(aPrincipal));
|
||||
}()));
|
||||
|
||||
MOZ_ASSERT(originAttrSuffix == principalMetadata.mSuffix);
|
||||
|
||||
const auto& origin = principalMetadata.mOrigin;
|
||||
#else
|
||||
QM_TRY_INSPECT(
|
||||
const auto& origin, ([&storagePrincipalInfo,
|
||||
&aPrincipal]() -> Result<nsAutoCString, nsresult> {
|
||||
if (storagePrincipalInfo->type() ==
|
||||
PrincipalInfo::TSystemPrincipalInfo) {
|
||||
return nsAutoCString{quota::QuotaManager::GetOriginForChrome()};
|
||||
}
|
||||
QM_TRY_INSPECT(const auto& origin,
|
||||
([&storagePrincipalInfo,
|
||||
&aPrincipal]() -> Result<nsAutoCString, nsresult> {
|
||||
if (storagePrincipalInfo->type() ==
|
||||
PrincipalInfo::TSystemPrincipalInfo) {
|
||||
return nsAutoCString{quota::GetOriginForChrome()};
|
||||
}
|
||||
|
||||
QM_TRY_RETURN(quota::QuotaManager::GetOriginFromPrincipal(aPrincipal));
|
||||
}()));
|
||||
QM_TRY_RETURN(quota::GetOriginFromPrincipal(aPrincipal));
|
||||
}()));
|
||||
#endif
|
||||
|
||||
Maybe<nsID> clientId;
|
||||
|
||||
@@ -25,8 +25,8 @@
|
||||
#include "mozilla/dom/PBackgroundLSSharedTypes.h"
|
||||
#include "mozilla/dom/PBackgroundLSSimpleRequest.h"
|
||||
#include "mozilla/dom/Promise.h"
|
||||
#include "mozilla/dom/quota/PrincipalUtils.h"
|
||||
#include "mozilla/dom/quota/PromiseUtils.h"
|
||||
#include "mozilla/dom/quota/QuotaManager.h"
|
||||
#include "mozilla/ipc/BackgroundChild.h"
|
||||
#include "mozilla/ipc/BackgroundUtils.h"
|
||||
#include "mozilla/ipc/PBackgroundChild.h"
|
||||
@@ -165,7 +165,7 @@ nsresult CheckedPrincipalToPrincipalInfo(
|
||||
return rv;
|
||||
}
|
||||
|
||||
if (NS_WARN_IF(!quota::QuotaManager::IsPrincipalInfoValid(aPrincipalInfo))) {
|
||||
if (NS_WARN_IF(!quota::IsPrincipalInfoValid(aPrincipalInfo))) {
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
|
||||
@@ -99,6 +99,7 @@
|
||||
#include "mozilla/dom/quota/FileUtils.h"
|
||||
#include "mozilla/dom/quota/MozPromiseUtils.h"
|
||||
#include "mozilla/dom/quota/PersistenceType.h"
|
||||
#include "mozilla/dom/quota/PrincipalUtils.h"
|
||||
#include "mozilla/dom/quota/QuotaManagerImpl.h"
|
||||
#include "mozilla/dom/quota/QuotaManagerService.h"
|
||||
#include "mozilla/dom/quota/ResultExtensions.h"
|
||||
@@ -109,7 +110,6 @@
|
||||
#include "mozilla/ipc/BackgroundChild.h"
|
||||
#include "mozilla/ipc/BackgroundParent.h"
|
||||
#include "mozilla/ipc/PBackgroundChild.h"
|
||||
#include "mozilla/ipc/PBackgroundSharedTypes.h"
|
||||
#include "mozilla/ipc/ProtocolUtils.h"
|
||||
#include "mozilla/net/ExtensionProtocolHandler.h"
|
||||
#include "mozilla/StorageOriginAttributes.h"
|
||||
@@ -141,7 +141,6 @@
|
||||
#include "nsIPlatformInfo.h"
|
||||
#include "nsIPrincipal.h"
|
||||
#include "nsIRunnable.h"
|
||||
#include "nsIScriptObjectPrincipal.h"
|
||||
#include "nsISupports.h"
|
||||
#include "nsIThread.h"
|
||||
#include "nsITimer.h"
|
||||
@@ -149,7 +148,6 @@
|
||||
#include "nsIWidget.h"
|
||||
#include "nsLiteralString.h"
|
||||
#include "nsNetUtil.h"
|
||||
#include "nsPIDOMWindow.h"
|
||||
#include "nsPrintfCString.h"
|
||||
#include "nsStandardURL.h"
|
||||
#include "nsServiceManagerUtils.h"
|
||||
@@ -6515,297 +6513,6 @@ void QuotaManager::GetStorageId(PersistenceType aPersistenceType,
|
||||
aDatabaseId = str;
|
||||
}
|
||||
|
||||
// static
|
||||
bool QuotaManager::IsPrincipalInfoValid(const PrincipalInfo& aPrincipalInfo) {
|
||||
switch (aPrincipalInfo.type()) {
|
||||
// A system principal is acceptable.
|
||||
case PrincipalInfo::TSystemPrincipalInfo: {
|
||||
return true;
|
||||
}
|
||||
|
||||
// Validate content principals to ensure that the spec, originNoSuffix and
|
||||
// baseDomain are sane.
|
||||
case PrincipalInfo::TContentPrincipalInfo: {
|
||||
const ContentPrincipalInfo& info =
|
||||
aPrincipalInfo.get_ContentPrincipalInfo();
|
||||
|
||||
// Verify the principal spec parses.
|
||||
nsCOMPtr<nsIURI> uri;
|
||||
QM_TRY(MOZ_TO_RESULT(NS_NewURI(getter_AddRefs(uri), info.spec())), false);
|
||||
|
||||
nsCOMPtr<nsIPrincipal> principal =
|
||||
BasePrincipal::CreateContentPrincipal(uri, info.attrs());
|
||||
QM_TRY(MOZ_TO_RESULT(principal), false);
|
||||
|
||||
// Verify the principal originNoSuffix matches spec.
|
||||
QM_TRY_INSPECT(const auto& originNoSuffix,
|
||||
MOZ_TO_RESULT_INVOKE_MEMBER_TYPED(nsAutoCString, principal,
|
||||
GetOriginNoSuffix),
|
||||
false);
|
||||
|
||||
if (NS_WARN_IF(originNoSuffix != info.originNoSuffix())) {
|
||||
QM_WARNING("originNoSuffix (%s) doesn't match passed one (%s)!",
|
||||
originNoSuffix.get(), info.originNoSuffix().get());
|
||||
return false;
|
||||
}
|
||||
|
||||
if (NS_WARN_IF(info.originNoSuffix().EqualsLiteral(kChromeOrigin))) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (NS_WARN_IF(info.originNoSuffix().FindChar('^', 0) != -1)) {
|
||||
QM_WARNING("originNoSuffix (%s) contains the '^' character!",
|
||||
info.originNoSuffix().get());
|
||||
return false;
|
||||
}
|
||||
|
||||
// Verify the principal baseDomain exists.
|
||||
if (NS_WARN_IF(info.baseDomain().IsVoid())) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Verify the principal baseDomain matches spec.
|
||||
QM_TRY_INSPECT(const auto& baseDomain,
|
||||
MOZ_TO_RESULT_INVOKE_MEMBER_TYPED(nsAutoCString, principal,
|
||||
GetBaseDomain),
|
||||
false);
|
||||
|
||||
if (NS_WARN_IF(baseDomain != info.baseDomain())) {
|
||||
QM_WARNING("baseDomain (%s) doesn't match passed one (%s)!",
|
||||
baseDomain.get(), info.baseDomain().get());
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
default: {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Null and expanded principals are not acceptable.
|
||||
return false;
|
||||
}
|
||||
|
||||
// static
|
||||
Result<PrincipalMetadata, nsresult>
|
||||
QuotaManager::GetInfoFromValidatedPrincipalInfo(
|
||||
QuotaManager& aQuotaManager, const PrincipalInfo& aPrincipalInfo) {
|
||||
MOZ_ASSERT(IsPrincipalInfoValid(aPrincipalInfo));
|
||||
|
||||
switch (aPrincipalInfo.type()) {
|
||||
case PrincipalInfo::TSystemPrincipalInfo: {
|
||||
return GetInfoForChrome();
|
||||
}
|
||||
|
||||
case PrincipalInfo::TContentPrincipalInfo: {
|
||||
const ContentPrincipalInfo& info =
|
||||
aPrincipalInfo.get_ContentPrincipalInfo();
|
||||
|
||||
nsCString suffix;
|
||||
info.attrs().CreateSuffix(suffix);
|
||||
|
||||
nsCString origin = info.originNoSuffix() + suffix;
|
||||
|
||||
if (IsUUIDOrigin(origin)) {
|
||||
QM_TRY_INSPECT(const auto& originalOrigin,
|
||||
aQuotaManager.GetOriginFromStorageOrigin(origin));
|
||||
|
||||
nsCOMPtr<nsIPrincipal> principal =
|
||||
BasePrincipal::CreateContentPrincipal(originalOrigin);
|
||||
QM_TRY(MOZ_TO_RESULT(principal));
|
||||
|
||||
PrincipalInfo principalInfo;
|
||||
QM_TRY(
|
||||
MOZ_TO_RESULT(PrincipalToPrincipalInfo(principal, &principalInfo)));
|
||||
|
||||
return GetInfoFromValidatedPrincipalInfo(aQuotaManager, principalInfo);
|
||||
}
|
||||
|
||||
PrincipalMetadata principalMetadata;
|
||||
|
||||
principalMetadata.mSuffix = suffix;
|
||||
|
||||
principalMetadata.mGroup = info.baseDomain() + suffix;
|
||||
|
||||
principalMetadata.mOrigin = origin;
|
||||
|
||||
if (info.attrs().IsPrivateBrowsing()) {
|
||||
QM_TRY_UNWRAP(principalMetadata.mStorageOrigin,
|
||||
aQuotaManager.EnsureStorageOriginFromOrigin(origin));
|
||||
} else {
|
||||
principalMetadata.mStorageOrigin = origin;
|
||||
}
|
||||
|
||||
principalMetadata.mIsPrivate = info.attrs().IsPrivateBrowsing();
|
||||
|
||||
return principalMetadata;
|
||||
}
|
||||
|
||||
default: {
|
||||
MOZ_ASSERT_UNREACHABLE("Should never get here!");
|
||||
return Err(NS_ERROR_UNEXPECTED);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// static
|
||||
Result<PrincipalInfo, nsresult> QuotaManager::PrincipalMetadataToPrincipalInfo(
|
||||
const PrincipalMetadata& aPrincipalMetadata) {
|
||||
QM_TRY_INSPECT(
|
||||
const auto& principal,
|
||||
([&aPrincipalMetadata]() -> Result<nsCOMPtr<nsIPrincipal>, nsresult> {
|
||||
if (aPrincipalMetadata.mOrigin.EqualsLiteral(kChromeOrigin)) {
|
||||
return nsCOMPtr<nsIPrincipal>(SystemPrincipal::Get());
|
||||
}
|
||||
|
||||
return nsCOMPtr<nsIPrincipal>(
|
||||
BasePrincipal::CreateContentPrincipal(aPrincipalMetadata.mOrigin));
|
||||
}()));
|
||||
QM_TRY(MOZ_TO_RESULT(principal));
|
||||
|
||||
PrincipalInfo principalInfo;
|
||||
QM_TRY(MOZ_TO_RESULT(PrincipalToPrincipalInfo(principal, &principalInfo)));
|
||||
|
||||
return std::move(principalInfo);
|
||||
}
|
||||
|
||||
// static
|
||||
nsAutoCString QuotaManager::GetOriginFromValidatedPrincipalInfo(
|
||||
const PrincipalInfo& aPrincipalInfo) {
|
||||
MOZ_ASSERT(IsPrincipalInfoValid(aPrincipalInfo));
|
||||
|
||||
switch (aPrincipalInfo.type()) {
|
||||
case PrincipalInfo::TSystemPrincipalInfo: {
|
||||
return nsAutoCString{GetOriginForChrome()};
|
||||
}
|
||||
|
||||
case PrincipalInfo::TContentPrincipalInfo: {
|
||||
const ContentPrincipalInfo& info =
|
||||
aPrincipalInfo.get_ContentPrincipalInfo();
|
||||
|
||||
nsAutoCString suffix;
|
||||
|
||||
info.attrs().CreateSuffix(suffix);
|
||||
|
||||
return info.originNoSuffix() + suffix;
|
||||
}
|
||||
|
||||
default: {
|
||||
MOZ_CRASH("Should never get here!");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// static
|
||||
Result<PrincipalMetadata, nsresult> QuotaManager::GetInfoFromPrincipal(
|
||||
nsIPrincipal* aPrincipal) {
|
||||
MOZ_ASSERT(aPrincipal);
|
||||
|
||||
if (aPrincipal->IsSystemPrincipal()) {
|
||||
return GetInfoForChrome();
|
||||
}
|
||||
|
||||
if (aPrincipal->GetIsNullPrincipal()) {
|
||||
NS_WARNING("IndexedDB not supported from this principal!");
|
||||
return Err(NS_ERROR_FAILURE);
|
||||
}
|
||||
|
||||
PrincipalMetadata principalMetadata;
|
||||
|
||||
QM_TRY(MOZ_TO_RESULT(aPrincipal->GetOrigin(principalMetadata.mOrigin)));
|
||||
|
||||
if (principalMetadata.mOrigin.EqualsLiteral(kChromeOrigin)) {
|
||||
NS_WARNING("Non-chrome principal can't use chrome origin!");
|
||||
return Err(NS_ERROR_FAILURE);
|
||||
}
|
||||
|
||||
aPrincipal->OriginAttributesRef().CreateSuffix(principalMetadata.mSuffix);
|
||||
|
||||
nsAutoCString baseDomain;
|
||||
QM_TRY(MOZ_TO_RESULT(aPrincipal->GetBaseDomain(baseDomain)));
|
||||
|
||||
MOZ_ASSERT(!baseDomain.IsEmpty());
|
||||
|
||||
principalMetadata.mGroup = baseDomain + principalMetadata.mSuffix;
|
||||
|
||||
principalMetadata.mStorageOrigin = principalMetadata.mOrigin;
|
||||
|
||||
principalMetadata.mIsPrivate = aPrincipal->GetIsInPrivateBrowsing();
|
||||
|
||||
return principalMetadata;
|
||||
}
|
||||
|
||||
Result<PrincipalMetadata, nsresult> QuotaManager::GetInfoFromWindow(
|
||||
nsPIDOMWindowOuter* aWindow) {
|
||||
MOZ_ASSERT(NS_IsMainThread());
|
||||
MOZ_ASSERT(aWindow);
|
||||
|
||||
nsCOMPtr<nsIScriptObjectPrincipal> sop = do_QueryInterface(aWindow);
|
||||
QM_TRY(OkIf(sop), Err(NS_ERROR_FAILURE));
|
||||
|
||||
nsCOMPtr<nsIPrincipal> principal = sop->GetPrincipal();
|
||||
QM_TRY(OkIf(principal), Err(NS_ERROR_FAILURE));
|
||||
|
||||
return GetInfoFromPrincipal(principal);
|
||||
}
|
||||
|
||||
// static
|
||||
Result<nsAutoCString, nsresult> QuotaManager::GetOriginFromPrincipal(
|
||||
nsIPrincipal* aPrincipal) {
|
||||
MOZ_ASSERT(NS_IsMainThread());
|
||||
MOZ_ASSERT(aPrincipal);
|
||||
|
||||
if (aPrincipal->IsSystemPrincipal()) {
|
||||
return nsAutoCString{GetOriginForChrome()};
|
||||
}
|
||||
|
||||
if (aPrincipal->GetIsNullPrincipal()) {
|
||||
NS_WARNING("IndexedDB not supported from this principal!");
|
||||
return Err(NS_ERROR_FAILURE);
|
||||
}
|
||||
|
||||
QM_TRY_UNWRAP(const auto origin, MOZ_TO_RESULT_INVOKE_MEMBER_TYPED(
|
||||
nsAutoCString, aPrincipal, GetOrigin));
|
||||
|
||||
if (origin.EqualsLiteral(kChromeOrigin)) {
|
||||
NS_WARNING("Non-chrome principal can't use chrome origin!");
|
||||
return Err(NS_ERROR_FAILURE);
|
||||
}
|
||||
|
||||
return origin;
|
||||
}
|
||||
|
||||
// static
|
||||
Result<nsAutoCString, nsresult> QuotaManager::GetOriginFromWindow(
|
||||
nsPIDOMWindowOuter* aWindow) {
|
||||
MOZ_ASSERT(NS_IsMainThread());
|
||||
MOZ_ASSERT(aWindow);
|
||||
|
||||
nsCOMPtr<nsIScriptObjectPrincipal> sop = do_QueryInterface(aWindow);
|
||||
QM_TRY(OkIf(sop), Err(NS_ERROR_FAILURE));
|
||||
|
||||
nsCOMPtr<nsIPrincipal> principal = sop->GetPrincipal();
|
||||
QM_TRY(OkIf(principal), Err(NS_ERROR_FAILURE));
|
||||
|
||||
QM_TRY_RETURN(GetOriginFromPrincipal(principal));
|
||||
}
|
||||
|
||||
// static
|
||||
PrincipalMetadata QuotaManager::GetInfoForChrome() {
|
||||
return {{},
|
||||
GetOriginForChrome(),
|
||||
GetOriginForChrome(),
|
||||
GetOriginForChrome(),
|
||||
false};
|
||||
}
|
||||
|
||||
// static
|
||||
nsLiteralCString QuotaManager::GetOriginForChrome() {
|
||||
return nsLiteralCString{kChromeOrigin};
|
||||
}
|
||||
|
||||
// static
|
||||
bool QuotaManager::IsOriginInternal(const nsACString& aOrigin) {
|
||||
MOZ_ASSERT(!aOrigin.IsEmpty());
|
||||
@@ -7792,7 +7499,7 @@ nsresult StorageOperationBase::ProcessOriginDirectories() {
|
||||
for (auto& originProps : mOriginProps) {
|
||||
switch (originProps.mType) {
|
||||
case OriginProps::eChrome: {
|
||||
originProps.mOriginMetadata = {QuotaManager::GetInfoForChrome(),
|
||||
originProps.mOriginMetadata = {GetInfoForChrome(),
|
||||
*originProps.mPersistenceType};
|
||||
break;
|
||||
}
|
||||
@@ -7811,8 +7518,7 @@ nsresult StorageOperationBase::ProcessOriginDirectories() {
|
||||
MOZ_TO_RESULT(PrincipalToPrincipalInfo(principal, &principalInfo)));
|
||||
|
||||
QM_WARNONLY_TRY_UNWRAP(
|
||||
auto valid,
|
||||
MOZ_TO_RESULT(quotaManager->IsPrincipalInfoValid(principalInfo)));
|
||||
auto valid, MOZ_TO_RESULT(IsPrincipalInfoValid(principalInfo)));
|
||||
|
||||
if (!valid) {
|
||||
// Unknown directories during upgrade are allowed. Just warn if we
|
||||
@@ -7822,9 +7528,9 @@ nsresult StorageOperationBase::ProcessOriginDirectories() {
|
||||
break;
|
||||
}
|
||||
|
||||
QM_TRY_UNWRAP(auto principalMetadata,
|
||||
QuotaManager::GetInfoFromValidatedPrincipalInfo(
|
||||
*quotaManager, principalInfo));
|
||||
QM_TRY_UNWRAP(
|
||||
auto principalMetadata,
|
||||
GetInfoFromValidatedPrincipalInfo(*quotaManager, principalInfo));
|
||||
|
||||
originProps.mOriginMetadata = {std::move(principalMetadata),
|
||||
*originProps.mPersistenceType};
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
#include "mozilla/dom/quota/DirectoryLock.h"
|
||||
#include "mozilla/dom/quota/DirectoryLockInlines.h"
|
||||
#include "mozilla/dom/quota/PersistenceType.h"
|
||||
#include "mozilla/dom/quota/PrincipalUtils.h"
|
||||
#include "mozilla/dom/quota/PQuota.h"
|
||||
#include "mozilla/dom/quota/PQuotaRequest.h"
|
||||
#include "mozilla/dom/quota/PQuotaUsageRequest.h"
|
||||
@@ -1661,9 +1662,8 @@ GetOriginUsageOp::GetOriginUsageOp(
|
||||
nsresult GetOriginUsageOp::DoInit(QuotaManager& aQuotaManager) {
|
||||
AssertIsOnOwningThread();
|
||||
|
||||
QM_TRY_UNWRAP(mPrincipalMetadata,
|
||||
QuotaManager::GetInfoFromValidatedPrincipalInfo(
|
||||
aQuotaManager, mPrincipalInfo));
|
||||
QM_TRY_UNWRAP(mPrincipalMetadata, GetInfoFromValidatedPrincipalInfo(
|
||||
aQuotaManager, mPrincipalInfo));
|
||||
|
||||
mPrincipalMetadata.AssertInvariants();
|
||||
|
||||
@@ -1831,9 +1831,8 @@ InitializedOriginRequestBase::InitializedOriginRequestBase(
|
||||
nsresult InitializedOriginRequestBase::DoInit(QuotaManager& aQuotaManager) {
|
||||
AssertIsOnOwningThread();
|
||||
|
||||
QM_TRY_UNWRAP(mPrincipalMetadata,
|
||||
QuotaManager::GetInfoFromValidatedPrincipalInfo(
|
||||
aQuotaManager, mPrincipalInfo));
|
||||
QM_TRY_UNWRAP(mPrincipalMetadata, GetInfoFromValidatedPrincipalInfo(
|
||||
aQuotaManager, mPrincipalInfo));
|
||||
|
||||
mPrincipalMetadata.AssertInvariants();
|
||||
|
||||
@@ -2037,9 +2036,8 @@ InitializeOriginRequestBase::InitializeOriginRequestBase(
|
||||
nsresult InitializeOriginRequestBase::DoInit(QuotaManager& aQuotaManager) {
|
||||
AssertIsOnOwningThread();
|
||||
|
||||
QM_TRY_UNWRAP(mPrincipalMetadata,
|
||||
QuotaManager::GetInfoFromValidatedPrincipalInfo(
|
||||
aQuotaManager, mPrincipalInfo));
|
||||
QM_TRY_UNWRAP(mPrincipalMetadata, GetInfoFromValidatedPrincipalInfo(
|
||||
aQuotaManager, mPrincipalInfo));
|
||||
|
||||
mPrincipalMetadata.AssertInvariants();
|
||||
|
||||
@@ -2149,9 +2147,9 @@ InitializeClientBase::InitializeClientBase(
|
||||
nsresult InitializeClientBase::DoInit(QuotaManager& aQuotaManager) {
|
||||
AssertIsOnOwningThread();
|
||||
|
||||
QM_TRY_UNWRAP(PrincipalMetadata principalMetadata,
|
||||
QuotaManager::GetInfoFromValidatedPrincipalInfo(
|
||||
aQuotaManager, mPrincipalInfo));
|
||||
QM_TRY_UNWRAP(
|
||||
PrincipalMetadata principalMetadata,
|
||||
GetInfoFromValidatedPrincipalInfo(aQuotaManager, mPrincipalInfo));
|
||||
|
||||
principalMetadata.AssertInvariants();
|
||||
|
||||
@@ -2268,8 +2266,8 @@ nsresult GetFullOriginMetadataOp::DoInit(QuotaManager& aQuotaManager) {
|
||||
AssertIsOnOwningThread();
|
||||
|
||||
QM_TRY_UNWRAP(PrincipalMetadata principalMetadata,
|
||||
QuotaManager::GetInfoFromValidatedPrincipalInfo(
|
||||
aQuotaManager, mParams.principalInfo()));
|
||||
GetInfoFromValidatedPrincipalInfo(aQuotaManager,
|
||||
mParams.principalInfo()));
|
||||
|
||||
principalMetadata.AssertInvariants();
|
||||
|
||||
@@ -2329,9 +2327,8 @@ GetCachedOriginUsageOp::GetCachedOriginUsageOp(
|
||||
nsresult GetCachedOriginUsageOp::DoInit(QuotaManager& aQuotaManager) {
|
||||
AssertIsOnOwningThread();
|
||||
|
||||
QM_TRY_UNWRAP(mPrincipalMetadata,
|
||||
QuotaManager::GetInfoFromValidatedPrincipalInfo(
|
||||
aQuotaManager, mPrincipalInfo));
|
||||
QM_TRY_UNWRAP(mPrincipalMetadata, GetInfoFromValidatedPrincipalInfo(
|
||||
aQuotaManager, mPrincipalInfo));
|
||||
|
||||
mPrincipalMetadata.AssertInvariants();
|
||||
|
||||
@@ -2748,9 +2745,8 @@ ClearOriginOp::ClearOriginOp(
|
||||
nsresult ClearOriginOp::DoInit(QuotaManager& aQuotaManager) {
|
||||
AssertIsOnOwningThread();
|
||||
|
||||
QM_TRY_UNWRAP(mPrincipalMetadata,
|
||||
QuotaManager::GetInfoFromValidatedPrincipalInfo(
|
||||
aQuotaManager, mPrincipalInfo));
|
||||
QM_TRY_UNWRAP(mPrincipalMetadata, GetInfoFromValidatedPrincipalInfo(
|
||||
aQuotaManager, mPrincipalInfo));
|
||||
|
||||
mPrincipalMetadata.AssertInvariants();
|
||||
|
||||
@@ -2815,9 +2811,8 @@ ClearClientOp::ClearClientOp(MovingNotNull<RefPtr<QuotaManager>> aQuotaManager,
|
||||
nsresult ClearClientOp::DoInit(QuotaManager& aQuotaManager) {
|
||||
AssertIsOnOwningThread();
|
||||
|
||||
QM_TRY_UNWRAP(mPrincipalMetadata,
|
||||
QuotaManager::GetInfoFromValidatedPrincipalInfo(
|
||||
aQuotaManager, mPrincipalInfo));
|
||||
QM_TRY_UNWRAP(mPrincipalMetadata, GetInfoFromValidatedPrincipalInfo(
|
||||
aQuotaManager, mPrincipalInfo));
|
||||
|
||||
mPrincipalMetadata.AssertInvariants();
|
||||
|
||||
@@ -2926,9 +2921,8 @@ ClearStoragesForOriginPrefixOp::ClearStoragesForOriginPrefixOp(
|
||||
nsresult ClearStoragesForOriginPrefixOp::DoInit(QuotaManager& aQuotaManager) {
|
||||
AssertIsOnOwningThread();
|
||||
|
||||
QM_TRY_UNWRAP(mPrincipalMetadata,
|
||||
QuotaManager::GetInfoFromValidatedPrincipalInfo(
|
||||
aQuotaManager, mPrincipalInfo));
|
||||
QM_TRY_UNWRAP(mPrincipalMetadata, GetInfoFromValidatedPrincipalInfo(
|
||||
aQuotaManager, mPrincipalInfo));
|
||||
|
||||
mPrincipalMetadata.AssertInvariants();
|
||||
|
||||
@@ -3031,9 +3025,8 @@ ShutdownOriginOp::ShutdownOriginOp(
|
||||
nsresult ShutdownOriginOp::DoInit(QuotaManager& aQuotaManager) {
|
||||
AssertIsOnOwningThread();
|
||||
|
||||
QM_TRY_UNWRAP(mPrincipalMetadata,
|
||||
QuotaManager::GetInfoFromValidatedPrincipalInfo(
|
||||
aQuotaManager, mPrincipalInfo));
|
||||
QM_TRY_UNWRAP(mPrincipalMetadata, GetInfoFromValidatedPrincipalInfo(
|
||||
aQuotaManager, mPrincipalInfo));
|
||||
|
||||
mPrincipalMetadata.AssertInvariants();
|
||||
|
||||
@@ -3120,9 +3113,8 @@ ShutdownClientOp::ShutdownClientOp(
|
||||
nsresult ShutdownClientOp::DoInit(QuotaManager& aQuotaManager) {
|
||||
AssertIsOnOwningThread();
|
||||
|
||||
QM_TRY_UNWRAP(mPrincipalMetadata,
|
||||
QuotaManager::GetInfoFromValidatedPrincipalInfo(
|
||||
aQuotaManager, mPrincipalInfo));
|
||||
QM_TRY_UNWRAP(mPrincipalMetadata, GetInfoFromValidatedPrincipalInfo(
|
||||
aQuotaManager, mPrincipalInfo));
|
||||
|
||||
mPrincipalMetadata.AssertInvariants();
|
||||
|
||||
@@ -3176,9 +3168,8 @@ nsresult PersistRequestBase::DoInit(QuotaManager& aQuotaManager) {
|
||||
AssertIsOnOwningThread();
|
||||
|
||||
// Figure out which origin we're dealing with.
|
||||
QM_TRY_UNWRAP(mPrincipalMetadata,
|
||||
QuotaManager::GetInfoFromValidatedPrincipalInfo(
|
||||
aQuotaManager, mPrincipalInfo));
|
||||
QM_TRY_UNWRAP(mPrincipalMetadata, GetInfoFromValidatedPrincipalInfo(
|
||||
aQuotaManager, mPrincipalInfo));
|
||||
|
||||
mPrincipalMetadata.AssertInvariants();
|
||||
|
||||
@@ -3403,8 +3394,8 @@ nsresult EstimateOp::DoInit(QuotaManager& aQuotaManager) {
|
||||
AssertIsOnOwningThread();
|
||||
|
||||
QM_TRY_UNWRAP(PrincipalMetadata principalMetadata,
|
||||
QuotaManager::GetInfoFromValidatedPrincipalInfo(
|
||||
aQuotaManager, mParams.principalInfo()));
|
||||
GetInfoFromValidatedPrincipalInfo(aQuotaManager,
|
||||
mParams.principalInfo()));
|
||||
|
||||
principalMetadata.AssertInvariants();
|
||||
|
||||
|
||||
306
dom/quota/PrincipalUtils.cpp
Normal file
306
dom/quota/PrincipalUtils.cpp
Normal file
@@ -0,0 +1,306 @@
|
||||
/* -*- 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/. */
|
||||
|
||||
#include "mozilla/dom/quota/PrincipalUtils.h"
|
||||
|
||||
#include "mozilla/SystemPrincipal.h"
|
||||
#include "mozilla/dom/quota/Constants.h"
|
||||
#include "mozilla/dom/quota/CommonMetadata.h"
|
||||
#include "mozilla/dom/quota/QuotaCommon.h"
|
||||
#include "mozilla/dom/quota/QuotaManager.h"
|
||||
#include "mozilla/dom/quota/ResultExtensions.h"
|
||||
#include "mozilla/ipc/PBackgroundSharedTypes.h"
|
||||
#include "nsIScriptObjectPrincipal.h"
|
||||
#include "nsNetUtil.h"
|
||||
#include "nsPIDOMWindow.h"
|
||||
#include "OriginParser.h"
|
||||
|
||||
namespace mozilla::dom::quota {
|
||||
|
||||
using namespace mozilla::ipc;
|
||||
|
||||
bool IsPrincipalInfoValid(const PrincipalInfo& aPrincipalInfo) {
|
||||
switch (aPrincipalInfo.type()) {
|
||||
// A system principal is acceptable.
|
||||
case PrincipalInfo::TSystemPrincipalInfo: {
|
||||
return true;
|
||||
}
|
||||
|
||||
// Validate content principals to ensure that the spec, originNoSuffix and
|
||||
// baseDomain are sane.
|
||||
case PrincipalInfo::TContentPrincipalInfo: {
|
||||
const ContentPrincipalInfo& info =
|
||||
aPrincipalInfo.get_ContentPrincipalInfo();
|
||||
|
||||
// Verify the principal spec parses.
|
||||
nsCOMPtr<nsIURI> uri;
|
||||
QM_TRY(MOZ_TO_RESULT(NS_NewURI(getter_AddRefs(uri), info.spec())), false);
|
||||
|
||||
nsCOMPtr<nsIPrincipal> principal =
|
||||
BasePrincipal::CreateContentPrincipal(uri, info.attrs());
|
||||
QM_TRY(MOZ_TO_RESULT(principal), false);
|
||||
|
||||
// Verify the principal originNoSuffix matches spec.
|
||||
QM_TRY_INSPECT(const auto& originNoSuffix,
|
||||
MOZ_TO_RESULT_INVOKE_MEMBER_TYPED(nsAutoCString, principal,
|
||||
GetOriginNoSuffix),
|
||||
false);
|
||||
|
||||
if (NS_WARN_IF(originNoSuffix != info.originNoSuffix())) {
|
||||
QM_WARNING("originNoSuffix (%s) doesn't match passed one (%s)!",
|
||||
originNoSuffix.get(), info.originNoSuffix().get());
|
||||
return false;
|
||||
}
|
||||
|
||||
if (NS_WARN_IF(info.originNoSuffix().EqualsLiteral(kChromeOrigin))) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (NS_WARN_IF(info.originNoSuffix().FindChar('^', 0) != -1)) {
|
||||
QM_WARNING("originNoSuffix (%s) contains the '^' character!",
|
||||
info.originNoSuffix().get());
|
||||
return false;
|
||||
}
|
||||
|
||||
// Verify the principal baseDomain exists.
|
||||
if (NS_WARN_IF(info.baseDomain().IsVoid())) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Verify the principal baseDomain matches spec.
|
||||
QM_TRY_INSPECT(const auto& baseDomain,
|
||||
MOZ_TO_RESULT_INVOKE_MEMBER_TYPED(nsAutoCString, principal,
|
||||
GetBaseDomain),
|
||||
false);
|
||||
|
||||
if (NS_WARN_IF(baseDomain != info.baseDomain())) {
|
||||
QM_WARNING("baseDomain (%s) doesn't match passed one (%s)!",
|
||||
baseDomain.get(), info.baseDomain().get());
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
default: {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Null and expanded principals are not acceptable.
|
||||
return false;
|
||||
}
|
||||
|
||||
Result<PrincipalMetadata, nsresult> GetInfoFromValidatedPrincipalInfo(
|
||||
QuotaManager& aQuotaManager, const PrincipalInfo& aPrincipalInfo) {
|
||||
MOZ_ASSERT(IsPrincipalInfoValid(aPrincipalInfo));
|
||||
|
||||
switch (aPrincipalInfo.type()) {
|
||||
case PrincipalInfo::TSystemPrincipalInfo: {
|
||||
return GetInfoForChrome();
|
||||
}
|
||||
|
||||
case PrincipalInfo::TContentPrincipalInfo: {
|
||||
const ContentPrincipalInfo& info =
|
||||
aPrincipalInfo.get_ContentPrincipalInfo();
|
||||
|
||||
nsCString suffix;
|
||||
info.attrs().CreateSuffix(suffix);
|
||||
|
||||
nsCString origin = info.originNoSuffix() + suffix;
|
||||
|
||||
if (IsUUIDOrigin(origin)) {
|
||||
QM_TRY_INSPECT(const auto& originalOrigin,
|
||||
aQuotaManager.GetOriginFromStorageOrigin(origin));
|
||||
|
||||
nsCOMPtr<nsIPrincipal> principal =
|
||||
BasePrincipal::CreateContentPrincipal(originalOrigin);
|
||||
QM_TRY(MOZ_TO_RESULT(principal));
|
||||
|
||||
PrincipalInfo principalInfo;
|
||||
QM_TRY(
|
||||
MOZ_TO_RESULT(PrincipalToPrincipalInfo(principal, &principalInfo)));
|
||||
|
||||
return GetInfoFromValidatedPrincipalInfo(aQuotaManager, principalInfo);
|
||||
}
|
||||
|
||||
PrincipalMetadata principalMetadata;
|
||||
|
||||
principalMetadata.mSuffix = suffix;
|
||||
|
||||
principalMetadata.mGroup = info.baseDomain() + suffix;
|
||||
|
||||
principalMetadata.mOrigin = origin;
|
||||
|
||||
if (info.attrs().IsPrivateBrowsing()) {
|
||||
QM_TRY_UNWRAP(principalMetadata.mStorageOrigin,
|
||||
aQuotaManager.EnsureStorageOriginFromOrigin(origin));
|
||||
} else {
|
||||
principalMetadata.mStorageOrigin = origin;
|
||||
}
|
||||
|
||||
principalMetadata.mIsPrivate = info.attrs().IsPrivateBrowsing();
|
||||
|
||||
return principalMetadata;
|
||||
}
|
||||
|
||||
default: {
|
||||
MOZ_ASSERT_UNREACHABLE("Should never get here!");
|
||||
return Err(NS_ERROR_UNEXPECTED);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Result<PrincipalInfo, nsresult> PrincipalMetadataToPrincipalInfo(
|
||||
const PrincipalMetadata& aPrincipalMetadata) {
|
||||
QM_TRY_INSPECT(
|
||||
const auto& principal,
|
||||
([&aPrincipalMetadata]() -> Result<nsCOMPtr<nsIPrincipal>, nsresult> {
|
||||
if (aPrincipalMetadata.mOrigin.EqualsLiteral(kChromeOrigin)) {
|
||||
return nsCOMPtr<nsIPrincipal>(SystemPrincipal::Get());
|
||||
}
|
||||
|
||||
return nsCOMPtr<nsIPrincipal>(
|
||||
BasePrincipal::CreateContentPrincipal(aPrincipalMetadata.mOrigin));
|
||||
}()));
|
||||
QM_TRY(MOZ_TO_RESULT(principal));
|
||||
|
||||
PrincipalInfo principalInfo;
|
||||
QM_TRY(MOZ_TO_RESULT(PrincipalToPrincipalInfo(principal, &principalInfo)));
|
||||
|
||||
return std::move(principalInfo);
|
||||
}
|
||||
|
||||
nsAutoCString GetOriginFromValidatedPrincipalInfo(
|
||||
const PrincipalInfo& aPrincipalInfo) {
|
||||
MOZ_ASSERT(IsPrincipalInfoValid(aPrincipalInfo));
|
||||
|
||||
switch (aPrincipalInfo.type()) {
|
||||
case PrincipalInfo::TSystemPrincipalInfo: {
|
||||
return nsAutoCString{GetOriginForChrome()};
|
||||
}
|
||||
|
||||
case PrincipalInfo::TContentPrincipalInfo: {
|
||||
const ContentPrincipalInfo& info =
|
||||
aPrincipalInfo.get_ContentPrincipalInfo();
|
||||
|
||||
nsAutoCString suffix;
|
||||
|
||||
info.attrs().CreateSuffix(suffix);
|
||||
|
||||
return info.originNoSuffix() + suffix;
|
||||
}
|
||||
|
||||
default: {
|
||||
MOZ_CRASH("Should never get here!");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Result<PrincipalMetadata, nsresult> GetInfoFromPrincipal(
|
||||
nsIPrincipal* aPrincipal) {
|
||||
MOZ_ASSERT(aPrincipal);
|
||||
|
||||
if (aPrincipal->IsSystemPrincipal()) {
|
||||
return GetInfoForChrome();
|
||||
}
|
||||
|
||||
if (aPrincipal->GetIsNullPrincipal()) {
|
||||
NS_WARNING("IndexedDB not supported from this principal!");
|
||||
return Err(NS_ERROR_FAILURE);
|
||||
}
|
||||
|
||||
PrincipalMetadata principalMetadata;
|
||||
|
||||
QM_TRY(MOZ_TO_RESULT(aPrincipal->GetOrigin(principalMetadata.mOrigin)));
|
||||
|
||||
if (principalMetadata.mOrigin.EqualsLiteral(kChromeOrigin)) {
|
||||
NS_WARNING("Non-chrome principal can't use chrome origin!");
|
||||
return Err(NS_ERROR_FAILURE);
|
||||
}
|
||||
|
||||
aPrincipal->OriginAttributesRef().CreateSuffix(principalMetadata.mSuffix);
|
||||
|
||||
nsAutoCString baseDomain;
|
||||
QM_TRY(MOZ_TO_RESULT(aPrincipal->GetBaseDomain(baseDomain)));
|
||||
|
||||
MOZ_ASSERT(!baseDomain.IsEmpty());
|
||||
|
||||
principalMetadata.mGroup = baseDomain + principalMetadata.mSuffix;
|
||||
|
||||
principalMetadata.mStorageOrigin = principalMetadata.mOrigin;
|
||||
|
||||
principalMetadata.mIsPrivate = aPrincipal->GetIsInPrivateBrowsing();
|
||||
|
||||
return principalMetadata;
|
||||
}
|
||||
|
||||
Result<PrincipalMetadata, nsresult> GetInfoFromWindow(
|
||||
nsPIDOMWindowOuter* aWindow) {
|
||||
MOZ_ASSERT(NS_IsMainThread());
|
||||
MOZ_ASSERT(aWindow);
|
||||
|
||||
nsCOMPtr<nsIScriptObjectPrincipal> sop = do_QueryInterface(aWindow);
|
||||
QM_TRY(OkIf(sop), Err(NS_ERROR_FAILURE));
|
||||
|
||||
nsCOMPtr<nsIPrincipal> principal = sop->GetPrincipal();
|
||||
QM_TRY(OkIf(principal), Err(NS_ERROR_FAILURE));
|
||||
|
||||
return GetInfoFromPrincipal(principal);
|
||||
}
|
||||
|
||||
Result<nsAutoCString, nsresult> GetOriginFromPrincipal(
|
||||
nsIPrincipal* aPrincipal) {
|
||||
MOZ_ASSERT(NS_IsMainThread());
|
||||
MOZ_ASSERT(aPrincipal);
|
||||
|
||||
if (aPrincipal->IsSystemPrincipal()) {
|
||||
return nsAutoCString{GetOriginForChrome()};
|
||||
}
|
||||
|
||||
if (aPrincipal->GetIsNullPrincipal()) {
|
||||
NS_WARNING("IndexedDB not supported from this principal!");
|
||||
return Err(NS_ERROR_FAILURE);
|
||||
}
|
||||
|
||||
QM_TRY_UNWRAP(const auto origin, MOZ_TO_RESULT_INVOKE_MEMBER_TYPED(
|
||||
nsAutoCString, aPrincipal, GetOrigin));
|
||||
|
||||
if (origin.EqualsLiteral(kChromeOrigin)) {
|
||||
NS_WARNING("Non-chrome principal can't use chrome origin!");
|
||||
return Err(NS_ERROR_FAILURE);
|
||||
}
|
||||
|
||||
return origin;
|
||||
}
|
||||
|
||||
Result<nsAutoCString, nsresult> GetOriginFromWindow(
|
||||
nsPIDOMWindowOuter* aWindow) {
|
||||
MOZ_ASSERT(NS_IsMainThread());
|
||||
MOZ_ASSERT(aWindow);
|
||||
|
||||
nsCOMPtr<nsIScriptObjectPrincipal> sop = do_QueryInterface(aWindow);
|
||||
QM_TRY(OkIf(sop), Err(NS_ERROR_FAILURE));
|
||||
|
||||
nsCOMPtr<nsIPrincipal> principal = sop->GetPrincipal();
|
||||
QM_TRY(OkIf(principal), Err(NS_ERROR_FAILURE));
|
||||
|
||||
QM_TRY_RETURN(GetOriginFromPrincipal(principal));
|
||||
}
|
||||
|
||||
PrincipalMetadata GetInfoForChrome() {
|
||||
return {{},
|
||||
GetOriginForChrome(),
|
||||
GetOriginForChrome(),
|
||||
GetOriginForChrome(),
|
||||
false};
|
||||
}
|
||||
|
||||
nsLiteralCString GetOriginForChrome() {
|
||||
return nsLiteralCString{kChromeOrigin};
|
||||
}
|
||||
|
||||
} // namespace mozilla::dom::quota
|
||||
66
dom/quota/PrincipalUtils.h
Normal file
66
dom/quota/PrincipalUtils.h
Normal file
@@ -0,0 +1,66 @@
|
||||
/* -*- 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 DOM_QUOTA_PRINCIPALUTILS_H_
|
||||
#define DOM_QUOTA_PRINCIPALUTILS_H_
|
||||
|
||||
#include <cstdint>
|
||||
|
||||
#include "nsStringFwd.h"
|
||||
|
||||
class nsIPrincipal;
|
||||
class nsPIDOMWindowOuter;
|
||||
enum class nsresult : uint32_t;
|
||||
|
||||
namespace mozilla {
|
||||
|
||||
template <typename V, typename E>
|
||||
class Result;
|
||||
|
||||
}
|
||||
|
||||
namespace mozilla::ipc {
|
||||
|
||||
class PrincipalInfo;
|
||||
|
||||
}
|
||||
|
||||
namespace mozilla::dom::quota {
|
||||
|
||||
struct PrincipalMetadata;
|
||||
class QuotaManager;
|
||||
|
||||
bool IsPrincipalInfoValid(const mozilla::ipc::PrincipalInfo& aPrincipalInfo);
|
||||
|
||||
Result<PrincipalMetadata, nsresult> GetInfoFromValidatedPrincipalInfo(
|
||||
QuotaManager& aQuotaManager,
|
||||
const mozilla::ipc::PrincipalInfo& aPrincipalInfo);
|
||||
|
||||
Result<mozilla::ipc::PrincipalInfo, nsresult> PrincipalMetadataToPrincipalInfo(
|
||||
const PrincipalMetadata& aPrincipalMetadata);
|
||||
|
||||
nsAutoCString GetOriginFromValidatedPrincipalInfo(
|
||||
const mozilla::ipc::PrincipalInfo& aPrincipalInfo);
|
||||
|
||||
Result<PrincipalMetadata, nsresult> GetInfoFromPrincipal(
|
||||
nsIPrincipal* aPrincipal);
|
||||
|
||||
Result<PrincipalMetadata, nsresult> GetInfoFromWindow(
|
||||
nsPIDOMWindowOuter* aWindow);
|
||||
|
||||
Result<nsAutoCString, nsresult> GetOriginFromPrincipal(
|
||||
nsIPrincipal* aPrincipal);
|
||||
|
||||
Result<nsAutoCString, nsresult> GetOriginFromWindow(
|
||||
nsPIDOMWindowOuter* aWindow);
|
||||
|
||||
nsLiteralCString GetOriginForChrome();
|
||||
|
||||
PrincipalMetadata GetInfoForChrome();
|
||||
|
||||
} // namespace mozilla::dom::quota
|
||||
|
||||
#endif // DOM_QUOTA_PRINCIPALUTILS_H_
|
||||
@@ -47,11 +47,9 @@
|
||||
class mozIStorageConnection;
|
||||
class nsIEventTarget;
|
||||
class nsIFile;
|
||||
class nsIPrincipal;
|
||||
class nsIRunnable;
|
||||
class nsIThread;
|
||||
class nsITimer;
|
||||
class nsPIDOMWindowOuter;
|
||||
|
||||
namespace mozilla {
|
||||
|
||||
@@ -95,6 +93,10 @@ class QuotaManager final : public BackgroundThreadObject {
|
||||
friend class OriginInfo;
|
||||
friend class ShutdownStorageOp;
|
||||
|
||||
friend Result<PrincipalMetadata, nsresult> GetInfoFromValidatedPrincipalInfo(
|
||||
QuotaManager& aQuotaManager,
|
||||
const mozilla::ipc::PrincipalInfo& aPrincipalInfo);
|
||||
|
||||
using PrincipalInfo = mozilla::ipc::PrincipalInfo;
|
||||
using DirectoryLockTable =
|
||||
nsClassHashtable<nsCStringHashKey, nsTArray<NotNull<DirectoryLockImpl*>>>;
|
||||
@@ -614,33 +616,6 @@ class QuotaManager final : public BackgroundThreadObject {
|
||||
const nsACString& aOrigin, Client::Type aClientType,
|
||||
nsACString& aDatabaseId);
|
||||
|
||||
static bool IsPrincipalInfoValid(const PrincipalInfo& aPrincipalInfo);
|
||||
|
||||
static Result<PrincipalMetadata, nsresult> GetInfoFromValidatedPrincipalInfo(
|
||||
QuotaManager& aQuotaManager, const PrincipalInfo& aPrincipalInfo);
|
||||
|
||||
static Result<PrincipalInfo, nsresult> PrincipalMetadataToPrincipalInfo(
|
||||
const PrincipalMetadata& aPrincipalMetadata);
|
||||
|
||||
static nsAutoCString GetOriginFromValidatedPrincipalInfo(
|
||||
const PrincipalInfo& aPrincipalInfo);
|
||||
|
||||
static Result<PrincipalMetadata, nsresult> GetInfoFromPrincipal(
|
||||
nsIPrincipal* aPrincipal);
|
||||
|
||||
static Result<PrincipalMetadata, nsresult> GetInfoFromWindow(
|
||||
nsPIDOMWindowOuter* aWindow);
|
||||
|
||||
static Result<nsAutoCString, nsresult> GetOriginFromPrincipal(
|
||||
nsIPrincipal* aPrincipal);
|
||||
|
||||
static Result<nsAutoCString, nsresult> GetOriginFromWindow(
|
||||
nsPIDOMWindowOuter* aWindow);
|
||||
|
||||
static nsLiteralCString GetOriginForChrome();
|
||||
|
||||
static PrincipalMetadata GetInfoForChrome();
|
||||
|
||||
static bool IsOriginInternal(const nsACString& aOrigin);
|
||||
|
||||
static bool AreOriginsEqualOnDisk(const nsACString& aOrigin1,
|
||||
|
||||
@@ -31,6 +31,7 @@
|
||||
#include "mozilla/StaticPtr.h"
|
||||
#include "mozilla/Unused.h"
|
||||
#include "mozilla/Variant.h"
|
||||
#include "mozilla/dom/quota/PrincipalUtils.h"
|
||||
#include "mozilla/dom/quota/PQuota.h"
|
||||
#include "mozilla/dom/quota/PersistenceType.h"
|
||||
#include "mozilla/dom/quota/QuotaUsageRequestChild.h"
|
||||
@@ -83,7 +84,7 @@ nsresult CheckedPrincipalToPrincipalInfo(nsIPrincipal* aPrincipal,
|
||||
return rv;
|
||||
}
|
||||
|
||||
if (NS_WARN_IF(!QuotaManager::IsPrincipalInfoValid(aPrincipalInfo))) {
|
||||
if (NS_WARN_IF(!IsPrincipalInfoValid(aPrincipalInfo))) {
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
@@ -577,18 +578,17 @@ QuotaManagerService::PersistentOriginInitialized(nsIPrincipal* aPrincipal,
|
||||
|
||||
QM_TRY(MOZ_TO_RESULT(EnsureBackgroundActor()));
|
||||
|
||||
QM_TRY_INSPECT(
|
||||
const auto& principalInfo,
|
||||
([&aPrincipal]() -> Result<PrincipalInfo, nsresult> {
|
||||
PrincipalInfo principalInfo;
|
||||
QM_TRY(MOZ_TO_RESULT(
|
||||
PrincipalToPrincipalInfo(aPrincipal, &principalInfo)));
|
||||
QM_TRY_INSPECT(const auto& principalInfo,
|
||||
([&aPrincipal]() -> Result<PrincipalInfo, nsresult> {
|
||||
PrincipalInfo principalInfo;
|
||||
QM_TRY(MOZ_TO_RESULT(
|
||||
PrincipalToPrincipalInfo(aPrincipal, &principalInfo)));
|
||||
|
||||
QM_TRY(MOZ_TO_RESULT(QuotaManager::IsPrincipalInfoValid(principalInfo)),
|
||||
Err(NS_ERROR_INVALID_ARG));
|
||||
QM_TRY(MOZ_TO_RESULT(IsPrincipalInfoValid(principalInfo)),
|
||||
Err(NS_ERROR_INVALID_ARG));
|
||||
|
||||
return principalInfo;
|
||||
}()));
|
||||
return principalInfo;
|
||||
}()));
|
||||
|
||||
RefPtr<Request> request = new Request();
|
||||
|
||||
@@ -628,18 +628,17 @@ QuotaManagerService::TemporaryOriginInitialized(
|
||||
return persistenceType.ref();
|
||||
}()));
|
||||
|
||||
QM_TRY_INSPECT(
|
||||
const auto& principalInfo,
|
||||
([&aPrincipal]() -> Result<PrincipalInfo, nsresult> {
|
||||
PrincipalInfo principalInfo;
|
||||
QM_TRY(MOZ_TO_RESULT(
|
||||
PrincipalToPrincipalInfo(aPrincipal, &principalInfo)));
|
||||
QM_TRY_INSPECT(const auto& principalInfo,
|
||||
([&aPrincipal]() -> Result<PrincipalInfo, nsresult> {
|
||||
PrincipalInfo principalInfo;
|
||||
QM_TRY(MOZ_TO_RESULT(
|
||||
PrincipalToPrincipalInfo(aPrincipal, &principalInfo)));
|
||||
|
||||
QM_TRY(MOZ_TO_RESULT(QuotaManager::IsPrincipalInfoValid(principalInfo)),
|
||||
Err(NS_ERROR_INVALID_ARG));
|
||||
QM_TRY(MOZ_TO_RESULT(IsPrincipalInfoValid(principalInfo)),
|
||||
Err(NS_ERROR_INVALID_ARG));
|
||||
|
||||
return principalInfo;
|
||||
}()));
|
||||
return principalInfo;
|
||||
}()));
|
||||
|
||||
RefPtr<Request> request = new Request();
|
||||
|
||||
@@ -727,18 +726,17 @@ QuotaManagerService::InitializePersistentOrigin(nsIPrincipal* aPrincipal,
|
||||
|
||||
QM_TRY(MOZ_TO_RESULT(EnsureBackgroundActor()));
|
||||
|
||||
QM_TRY_INSPECT(
|
||||
const auto& principalInfo,
|
||||
([&aPrincipal]() -> Result<PrincipalInfo, nsresult> {
|
||||
PrincipalInfo principalInfo;
|
||||
QM_TRY(MOZ_TO_RESULT(
|
||||
PrincipalToPrincipalInfo(aPrincipal, &principalInfo)));
|
||||
QM_TRY_INSPECT(const auto& principalInfo,
|
||||
([&aPrincipal]() -> Result<PrincipalInfo, nsresult> {
|
||||
PrincipalInfo principalInfo;
|
||||
QM_TRY(MOZ_TO_RESULT(
|
||||
PrincipalToPrincipalInfo(aPrincipal, &principalInfo)));
|
||||
|
||||
QM_TRY(MOZ_TO_RESULT(QuotaManager::IsPrincipalInfoValid(principalInfo)),
|
||||
Err(NS_ERROR_INVALID_ARG));
|
||||
QM_TRY(MOZ_TO_RESULT(IsPrincipalInfoValid(principalInfo)),
|
||||
Err(NS_ERROR_INVALID_ARG));
|
||||
|
||||
return principalInfo;
|
||||
}()));
|
||||
return principalInfo;
|
||||
}()));
|
||||
|
||||
auto request = MakeRefPtr<Request>();
|
||||
|
||||
@@ -778,18 +776,17 @@ QuotaManagerService::InitializeTemporaryOrigin(
|
||||
return persistenceType.ref();
|
||||
}()));
|
||||
|
||||
QM_TRY_INSPECT(
|
||||
const auto& principalInfo,
|
||||
([&aPrincipal]() -> Result<PrincipalInfo, nsresult> {
|
||||
PrincipalInfo principalInfo;
|
||||
QM_TRY(MOZ_TO_RESULT(
|
||||
PrincipalToPrincipalInfo(aPrincipal, &principalInfo)));
|
||||
QM_TRY_INSPECT(const auto& principalInfo,
|
||||
([&aPrincipal]() -> Result<PrincipalInfo, nsresult> {
|
||||
PrincipalInfo principalInfo;
|
||||
QM_TRY(MOZ_TO_RESULT(
|
||||
PrincipalToPrincipalInfo(aPrincipal, &principalInfo)));
|
||||
|
||||
QM_TRY(MOZ_TO_RESULT(QuotaManager::IsPrincipalInfoValid(principalInfo)),
|
||||
Err(NS_ERROR_INVALID_ARG));
|
||||
QM_TRY(MOZ_TO_RESULT(IsPrincipalInfoValid(principalInfo)),
|
||||
Err(NS_ERROR_INVALID_ARG));
|
||||
|
||||
return principalInfo;
|
||||
}()));
|
||||
return principalInfo;
|
||||
}()));
|
||||
|
||||
auto request = MakeRefPtr<Request>();
|
||||
|
||||
@@ -816,18 +813,17 @@ QuotaManagerService::InitializePersistentClient(nsIPrincipal* aPrincipal,
|
||||
|
||||
QM_TRY(MOZ_TO_RESULT(EnsureBackgroundActor()));
|
||||
|
||||
QM_TRY_INSPECT(
|
||||
const auto& principalInfo,
|
||||
([&aPrincipal]() -> Result<PrincipalInfo, nsresult> {
|
||||
PrincipalInfo principalInfo;
|
||||
QM_TRY(MOZ_TO_RESULT(
|
||||
PrincipalToPrincipalInfo(aPrincipal, &principalInfo)));
|
||||
QM_TRY_INSPECT(const auto& principalInfo,
|
||||
([&aPrincipal]() -> Result<PrincipalInfo, nsresult> {
|
||||
PrincipalInfo principalInfo;
|
||||
QM_TRY(MOZ_TO_RESULT(
|
||||
PrincipalToPrincipalInfo(aPrincipal, &principalInfo)));
|
||||
|
||||
QM_TRY(MOZ_TO_RESULT(QuotaManager::IsPrincipalInfoValid(principalInfo)),
|
||||
Err(NS_ERROR_INVALID_ARG));
|
||||
QM_TRY(MOZ_TO_RESULT(IsPrincipalInfoValid(principalInfo)),
|
||||
Err(NS_ERROR_INVALID_ARG));
|
||||
|
||||
return principalInfo;
|
||||
}()));
|
||||
return principalInfo;
|
||||
}()));
|
||||
|
||||
QM_TRY_INSPECT(const auto& clientType,
|
||||
([&aClientType]() -> Result<Client::Type, nsresult> {
|
||||
@@ -877,18 +873,17 @@ QuotaManagerService::InitializeTemporaryClient(
|
||||
return persistenceType.ref();
|
||||
}()));
|
||||
|
||||
QM_TRY_INSPECT(
|
||||
const auto& principalInfo,
|
||||
([&aPrincipal]() -> Result<PrincipalInfo, nsresult> {
|
||||
PrincipalInfo principalInfo;
|
||||
QM_TRY(MOZ_TO_RESULT(
|
||||
PrincipalToPrincipalInfo(aPrincipal, &principalInfo)));
|
||||
QM_TRY_INSPECT(const auto& principalInfo,
|
||||
([&aPrincipal]() -> Result<PrincipalInfo, nsresult> {
|
||||
PrincipalInfo principalInfo;
|
||||
QM_TRY(MOZ_TO_RESULT(
|
||||
PrincipalToPrincipalInfo(aPrincipal, &principalInfo)));
|
||||
|
||||
QM_TRY(MOZ_TO_RESULT(QuotaManager::IsPrincipalInfoValid(principalInfo)),
|
||||
Err(NS_ERROR_INVALID_ARG));
|
||||
QM_TRY(MOZ_TO_RESULT(IsPrincipalInfoValid(principalInfo)),
|
||||
Err(NS_ERROR_INVALID_ARG));
|
||||
|
||||
return principalInfo;
|
||||
}()));
|
||||
return principalInfo;
|
||||
}()));
|
||||
|
||||
QM_TRY_INSPECT(const auto& clientType,
|
||||
([&aClientType]() -> Result<Client::Type, nsresult> {
|
||||
@@ -929,8 +924,7 @@ QuotaManagerService::GetFullOriginMetadata(const nsACString& aPersistenceType,
|
||||
|
||||
PrincipalInfo principalInfo;
|
||||
QM_TRY(MOZ_TO_RESULT(PrincipalToPrincipalInfo(aPrincipal, &principalInfo)));
|
||||
QM_TRY(OkIf(QuotaManager::IsPrincipalInfoValid(principalInfo)),
|
||||
NS_ERROR_INVALID_ARG);
|
||||
QM_TRY(OkIf(IsPrincipalInfoValid(principalInfo)), NS_ERROR_INVALID_ARG);
|
||||
|
||||
RefPtr<Request> request = new Request();
|
||||
|
||||
@@ -985,18 +979,17 @@ QuotaManagerService::GetUsageForPrincipal(nsIPrincipal* aPrincipal,
|
||||
|
||||
QM_TRY(MOZ_TO_RESULT(EnsureBackgroundActor()));
|
||||
|
||||
QM_TRY_INSPECT(
|
||||
const auto& principalInfo,
|
||||
([&aPrincipal]() -> Result<PrincipalInfo, nsresult> {
|
||||
PrincipalInfo principalInfo;
|
||||
QM_TRY(MOZ_TO_RESULT(
|
||||
PrincipalToPrincipalInfo(aPrincipal, &principalInfo)));
|
||||
QM_TRY_INSPECT(const auto& principalInfo,
|
||||
([&aPrincipal]() -> Result<PrincipalInfo, nsresult> {
|
||||
PrincipalInfo principalInfo;
|
||||
QM_TRY(MOZ_TO_RESULT(
|
||||
PrincipalToPrincipalInfo(aPrincipal, &principalInfo)));
|
||||
|
||||
QM_TRY(MOZ_TO_RESULT(QuotaManager::IsPrincipalInfoValid(principalInfo)),
|
||||
Err(NS_ERROR_INVALID_ARG));
|
||||
QM_TRY(MOZ_TO_RESULT(IsPrincipalInfoValid(principalInfo)),
|
||||
Err(NS_ERROR_INVALID_ARG));
|
||||
|
||||
return principalInfo;
|
||||
}()));
|
||||
return principalInfo;
|
||||
}()));
|
||||
|
||||
RefPtr<UsageRequest> request = new UsageRequest(aPrincipal, aCallback);
|
||||
|
||||
@@ -1026,18 +1019,17 @@ QuotaManagerService::GetCachedUsageForPrincipal(nsIPrincipal* aPrincipal,
|
||||
|
||||
QM_TRY(MOZ_TO_RESULT(EnsureBackgroundActor()));
|
||||
|
||||
QM_TRY_INSPECT(
|
||||
const auto& principalInfo,
|
||||
([&aPrincipal]() -> Result<PrincipalInfo, nsresult> {
|
||||
PrincipalInfo principalInfo;
|
||||
QM_TRY(MOZ_TO_RESULT(
|
||||
PrincipalToPrincipalInfo(aPrincipal, &principalInfo)));
|
||||
QM_TRY_INSPECT(const auto& principalInfo,
|
||||
([&aPrincipal]() -> Result<PrincipalInfo, nsresult> {
|
||||
PrincipalInfo principalInfo;
|
||||
QM_TRY(MOZ_TO_RESULT(
|
||||
PrincipalToPrincipalInfo(aPrincipal, &principalInfo)));
|
||||
|
||||
QM_TRY(MOZ_TO_RESULT(QuotaManager::IsPrincipalInfoValid(principalInfo)),
|
||||
Err(NS_ERROR_INVALID_ARG));
|
||||
QM_TRY(MOZ_TO_RESULT(IsPrincipalInfoValid(principalInfo)),
|
||||
Err(NS_ERROR_INVALID_ARG));
|
||||
|
||||
return principalInfo;
|
||||
}()));
|
||||
return principalInfo;
|
||||
}()));
|
||||
|
||||
RefPtr<Request> request = new Request();
|
||||
|
||||
@@ -1130,18 +1122,17 @@ QuotaManagerService::ClearStoragesForPrincipal(
|
||||
return persistenceType;
|
||||
}()));
|
||||
|
||||
QM_TRY_INSPECT(
|
||||
const auto& principalInfo,
|
||||
([&aPrincipal]() -> Result<PrincipalInfo, nsresult> {
|
||||
PrincipalInfo principalInfo;
|
||||
QM_TRY(MOZ_TO_RESULT(
|
||||
PrincipalToPrincipalInfo(aPrincipal, &principalInfo)));
|
||||
QM_TRY_INSPECT(const auto& principalInfo,
|
||||
([&aPrincipal]() -> Result<PrincipalInfo, nsresult> {
|
||||
PrincipalInfo principalInfo;
|
||||
QM_TRY(MOZ_TO_RESULT(
|
||||
PrincipalToPrincipalInfo(aPrincipal, &principalInfo)));
|
||||
|
||||
QM_TRY(MOZ_TO_RESULT(QuotaManager::IsPrincipalInfoValid(principalInfo)),
|
||||
Err(NS_ERROR_INVALID_ARG));
|
||||
QM_TRY(MOZ_TO_RESULT(IsPrincipalInfoValid(principalInfo)),
|
||||
Err(NS_ERROR_INVALID_ARG));
|
||||
|
||||
return principalInfo;
|
||||
}()));
|
||||
return principalInfo;
|
||||
}()));
|
||||
|
||||
RefPtr<Request> request = new Request();
|
||||
|
||||
@@ -1178,18 +1169,17 @@ QuotaManagerService::ClearStoragesForClient(nsIPrincipal* aPrincipal,
|
||||
return persistenceType;
|
||||
}()));
|
||||
|
||||
QM_TRY_INSPECT(
|
||||
const auto& principalInfo,
|
||||
([&aPrincipal]() -> Result<PrincipalInfo, nsresult> {
|
||||
PrincipalInfo principalInfo;
|
||||
QM_TRY(MOZ_TO_RESULT(
|
||||
PrincipalToPrincipalInfo(aPrincipal, &principalInfo)));
|
||||
QM_TRY_INSPECT(const auto& principalInfo,
|
||||
([&aPrincipal]() -> Result<PrincipalInfo, nsresult> {
|
||||
PrincipalInfo principalInfo;
|
||||
QM_TRY(MOZ_TO_RESULT(
|
||||
PrincipalToPrincipalInfo(aPrincipal, &principalInfo)));
|
||||
|
||||
QM_TRY(MOZ_TO_RESULT(QuotaManager::IsPrincipalInfoValid(principalInfo)),
|
||||
Err(NS_ERROR_INVALID_ARG));
|
||||
QM_TRY(MOZ_TO_RESULT(IsPrincipalInfoValid(principalInfo)),
|
||||
Err(NS_ERROR_INVALID_ARG));
|
||||
|
||||
return principalInfo;
|
||||
}()));
|
||||
return principalInfo;
|
||||
}()));
|
||||
|
||||
QM_TRY_INSPECT(const auto& clientType,
|
||||
([&aClientType]() -> Result<Client::Type, nsresult> {
|
||||
@@ -1243,7 +1233,7 @@ QuotaManagerService::ClearStoragesForOriginPrefix(
|
||||
QM_TRY(MOZ_TO_RESULT(
|
||||
PrincipalToPrincipalInfo(aPrincipal, &principalInfo)));
|
||||
|
||||
QM_TRY(MOZ_TO_RESULT(QuotaManager::IsPrincipalInfoValid(principalInfo)),
|
||||
QM_TRY(MOZ_TO_RESULT(IsPrincipalInfoValid(principalInfo)),
|
||||
Err(NS_ERROR_INVALID_ARG));
|
||||
|
||||
if (principalInfo.type() == PrincipalInfo::TContentPrincipalInfo) {
|
||||
@@ -1311,18 +1301,17 @@ QuotaManagerService::ResetStoragesForPrincipal(
|
||||
return persistenceType;
|
||||
}()));
|
||||
|
||||
QM_TRY_INSPECT(
|
||||
const auto& principalInfo,
|
||||
([&aPrincipal]() -> Result<PrincipalInfo, nsresult> {
|
||||
PrincipalInfo principalInfo;
|
||||
QM_TRY(MOZ_TO_RESULT(
|
||||
PrincipalToPrincipalInfo(aPrincipal, &principalInfo)));
|
||||
QM_TRY_INSPECT(const auto& principalInfo,
|
||||
([&aPrincipal]() -> Result<PrincipalInfo, nsresult> {
|
||||
PrincipalInfo principalInfo;
|
||||
QM_TRY(MOZ_TO_RESULT(
|
||||
PrincipalToPrincipalInfo(aPrincipal, &principalInfo)));
|
||||
|
||||
QM_TRY(MOZ_TO_RESULT(QuotaManager::IsPrincipalInfoValid(principalInfo)),
|
||||
Err(NS_ERROR_INVALID_ARG));
|
||||
QM_TRY(MOZ_TO_RESULT(IsPrincipalInfoValid(principalInfo)),
|
||||
Err(NS_ERROR_INVALID_ARG));
|
||||
|
||||
return principalInfo;
|
||||
}()));
|
||||
return principalInfo;
|
||||
}()));
|
||||
|
||||
RefPtr<Request> request = new Request();
|
||||
|
||||
@@ -1360,18 +1349,17 @@ QuotaManagerService::ResetStoragesForClient(nsIPrincipal* aPrincipal,
|
||||
return persistenceType;
|
||||
}()));
|
||||
|
||||
QM_TRY_INSPECT(
|
||||
const auto& principalInfo,
|
||||
([&aPrincipal]() -> Result<PrincipalInfo, nsresult> {
|
||||
PrincipalInfo principalInfo;
|
||||
QM_TRY(MOZ_TO_RESULT(
|
||||
PrincipalToPrincipalInfo(aPrincipal, &principalInfo)));
|
||||
QM_TRY_INSPECT(const auto& principalInfo,
|
||||
([&aPrincipal]() -> Result<PrincipalInfo, nsresult> {
|
||||
PrincipalInfo principalInfo;
|
||||
QM_TRY(MOZ_TO_RESULT(
|
||||
PrincipalToPrincipalInfo(aPrincipal, &principalInfo)));
|
||||
|
||||
QM_TRY(MOZ_TO_RESULT(QuotaManager::IsPrincipalInfoValid(principalInfo)),
|
||||
Err(NS_ERROR_INVALID_ARG));
|
||||
QM_TRY(MOZ_TO_RESULT(IsPrincipalInfoValid(principalInfo)),
|
||||
Err(NS_ERROR_INVALID_ARG));
|
||||
|
||||
return principalInfo;
|
||||
}()));
|
||||
return principalInfo;
|
||||
}()));
|
||||
|
||||
QM_TRY_INSPECT(const auto& clientType,
|
||||
([&aClientType]() -> Result<Client::Type, nsresult> {
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
#include <mozilla/Assertions.h>
|
||||
#include "mozilla/RefPtr.h"
|
||||
#include "mozilla/dom/quota/ErrorHandling.h"
|
||||
#include "mozilla/dom/quota/PrincipalUtils.h"
|
||||
#include "mozilla/dom/quota/QuotaManager.h"
|
||||
#include "mozilla/dom/quota/PQuota.h"
|
||||
#include "mozilla/dom/quota/PQuotaRequestParent.h"
|
||||
@@ -171,8 +172,7 @@ bool Quota::VerifyRequestParams(const RequestParams& aParams) const {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (NS_WARN_IF(
|
||||
!QuotaManager::IsPrincipalInfoValid(params.principalInfo()))) {
|
||||
if (NS_WARN_IF(!IsPrincipalInfoValid(params.principalInfo()))) {
|
||||
MOZ_CRASH_UNLESS_FUZZING();
|
||||
return false;
|
||||
}
|
||||
@@ -186,8 +186,7 @@ bool Quota::VerifyRequestParams(const RequestParams& aParams) const {
|
||||
case RequestParams::TPersistedParams: {
|
||||
const PersistedParams& params = aParams.get_PersistedParams();
|
||||
|
||||
if (NS_WARN_IF(
|
||||
!QuotaManager::IsPrincipalInfoValid(params.principalInfo()))) {
|
||||
if (NS_WARN_IF(!IsPrincipalInfoValid(params.principalInfo()))) {
|
||||
MOZ_CRASH_UNLESS_FUZZING();
|
||||
return false;
|
||||
}
|
||||
@@ -198,8 +197,7 @@ bool Quota::VerifyRequestParams(const RequestParams& aParams) const {
|
||||
case RequestParams::TPersistParams: {
|
||||
const PersistParams& params = aParams.get_PersistParams();
|
||||
|
||||
if (NS_WARN_IF(
|
||||
!QuotaManager::IsPrincipalInfoValid(params.principalInfo()))) {
|
||||
if (NS_WARN_IF(!IsPrincipalInfoValid(params.principalInfo()))) {
|
||||
MOZ_CRASH_UNLESS_FUZZING();
|
||||
return false;
|
||||
}
|
||||
@@ -210,8 +208,7 @@ bool Quota::VerifyRequestParams(const RequestParams& aParams) const {
|
||||
case RequestParams::TEstimateParams: {
|
||||
const EstimateParams& params = aParams.get_EstimateParams();
|
||||
|
||||
if (NS_WARN_IF(
|
||||
!QuotaManager::IsPrincipalInfoValid(params.principalInfo()))) {
|
||||
if (NS_WARN_IF(!IsPrincipalInfoValid(params.principalInfo()))) {
|
||||
MOZ_CRASH_UNLESS_FUZZING();
|
||||
return false;
|
||||
}
|
||||
@@ -371,7 +368,7 @@ mozilla::ipc::IPCResult Quota::RecvPersistentOriginInitialized(
|
||||
ResolveBoolResponseAndReturn(aResolve));
|
||||
|
||||
if (!TrustParams()) {
|
||||
QM_TRY(MOZ_TO_RESULT(QuotaManager::IsPrincipalInfoValid(aPrincipalInfo)),
|
||||
QM_TRY(MOZ_TO_RESULT(IsPrincipalInfoValid(aPrincipalInfo)),
|
||||
QM_CUF_AND_IPC_FAIL(this));
|
||||
}
|
||||
|
||||
@@ -399,7 +396,7 @@ mozilla::ipc::IPCResult Quota::RecvTemporaryOriginInitialized(
|
||||
QM_TRY(MOZ_TO_RESULT(IsValidPersistenceType(aPersistenceType)),
|
||||
QM_CUF_AND_IPC_FAIL(this));
|
||||
|
||||
QM_TRY(MOZ_TO_RESULT(QuotaManager::IsPrincipalInfoValid(aPrincipalInfo)),
|
||||
QM_TRY(MOZ_TO_RESULT(IsPrincipalInfoValid(aPrincipalInfo)),
|
||||
QM_CUF_AND_IPC_FAIL(this));
|
||||
}
|
||||
|
||||
@@ -459,7 +456,7 @@ mozilla::ipc::IPCResult Quota::RecvInitializePersistentOrigin(
|
||||
ResolveBoolResponseAndReturn(aResolve));
|
||||
|
||||
if (!TrustParams()) {
|
||||
QM_TRY(MOZ_TO_RESULT(QuotaManager::IsPrincipalInfoValid(aPrincipalInfo)),
|
||||
QM_TRY(MOZ_TO_RESULT(IsPrincipalInfoValid(aPrincipalInfo)),
|
||||
QM_CUF_AND_IPC_FAIL(this));
|
||||
}
|
||||
|
||||
@@ -487,7 +484,7 @@ mozilla::ipc::IPCResult Quota::RecvInitializeTemporaryOrigin(
|
||||
QM_TRY(MOZ_TO_RESULT(IsValidPersistenceType(aPersistenceType)),
|
||||
QM_CUF_AND_IPC_FAIL(this));
|
||||
|
||||
QM_TRY(MOZ_TO_RESULT(QuotaManager::IsPrincipalInfoValid(aPrincipalInfo)),
|
||||
QM_TRY(MOZ_TO_RESULT(IsPrincipalInfoValid(aPrincipalInfo)),
|
||||
QM_CUF_AND_IPC_FAIL(this));
|
||||
}
|
||||
|
||||
@@ -513,7 +510,7 @@ mozilla::ipc::IPCResult Quota::RecvInitializePersistentClient(
|
||||
ResolveBoolResponseAndReturn(aResolve));
|
||||
|
||||
if (!TrustParams()) {
|
||||
QM_TRY(MOZ_TO_RESULT(QuotaManager::IsPrincipalInfoValid(aPrincipalInfo)),
|
||||
QM_TRY(MOZ_TO_RESULT(IsPrincipalInfoValid(aPrincipalInfo)),
|
||||
QM_CUF_AND_IPC_FAIL(this));
|
||||
|
||||
QM_TRY(MOZ_TO_RESULT(Client::IsValidType(aClientType)),
|
||||
@@ -544,7 +541,7 @@ mozilla::ipc::IPCResult Quota::RecvInitializeTemporaryClient(
|
||||
QM_TRY(MOZ_TO_RESULT(IsValidPersistenceType(aPersistenceType)),
|
||||
QM_CUF_AND_IPC_FAIL(this));
|
||||
|
||||
QM_TRY(MOZ_TO_RESULT(QuotaManager::IsPrincipalInfoValid(aPrincipalInfo)),
|
||||
QM_TRY(MOZ_TO_RESULT(IsPrincipalInfoValid(aPrincipalInfo)),
|
||||
QM_CUF_AND_IPC_FAIL(this));
|
||||
|
||||
QM_TRY(MOZ_TO_RESULT(Client::IsValidType(aClientType)),
|
||||
@@ -629,7 +626,7 @@ mozilla::ipc::IPCResult Quota::RecvGetOriginUsage(
|
||||
ResolveUsageInfoResponseAndReturn(aResolve));
|
||||
|
||||
if (!TrustParams()) {
|
||||
QM_TRY(MOZ_TO_RESULT(QuotaManager::IsPrincipalInfoValid(aPrincipalInfo)),
|
||||
QM_TRY(MOZ_TO_RESULT(IsPrincipalInfoValid(aPrincipalInfo)),
|
||||
QM_CUF_AND_IPC_FAIL(this));
|
||||
}
|
||||
|
||||
@@ -669,7 +666,7 @@ mozilla::ipc::IPCResult Quota::RecvGetCachedOriginUsage(
|
||||
ResolveUInt64ResponseAndReturn(aResolver));
|
||||
|
||||
if (!TrustParams()) {
|
||||
QM_TRY(MOZ_TO_RESULT(QuotaManager::IsPrincipalInfoValid(aPrincipalInfo)),
|
||||
QM_TRY(MOZ_TO_RESULT(IsPrincipalInfoValid(aPrincipalInfo)),
|
||||
QM_CUF_AND_IPC_FAIL(this));
|
||||
}
|
||||
|
||||
@@ -699,7 +696,7 @@ mozilla::ipc::IPCResult Quota::RecvClearStoragesForOrigin(
|
||||
QM_CUF_AND_IPC_FAIL(this));
|
||||
}
|
||||
|
||||
QM_TRY(MOZ_TO_RESULT(QuotaManager::IsPrincipalInfoValid(aPrincipalInfo)),
|
||||
QM_TRY(MOZ_TO_RESULT(IsPrincipalInfoValid(aPrincipalInfo)),
|
||||
QM_CUF_AND_IPC_FAIL(this));
|
||||
}
|
||||
|
||||
@@ -729,7 +726,7 @@ mozilla::ipc::IPCResult Quota::RecvClearStoragesForClient(
|
||||
QM_CUF_AND_IPC_FAIL(this));
|
||||
}
|
||||
|
||||
QM_TRY(MOZ_TO_RESULT(QuotaManager::IsPrincipalInfoValid(aPrincipalInfo)),
|
||||
QM_TRY(MOZ_TO_RESULT(IsPrincipalInfoValid(aPrincipalInfo)),
|
||||
QM_CUF_AND_IPC_FAIL(this));
|
||||
|
||||
QM_TRY(MOZ_TO_RESULT(Client::IsValidType(aClientType)),
|
||||
@@ -763,7 +760,7 @@ mozilla::ipc::IPCResult Quota::RecvClearStoragesForOriginPrefix(
|
||||
QM_CUF_AND_IPC_FAIL(this));
|
||||
}
|
||||
|
||||
QM_TRY(MOZ_TO_RESULT(QuotaManager::IsPrincipalInfoValid(aPrincipalInfo)),
|
||||
QM_TRY(MOZ_TO_RESULT(IsPrincipalInfoValid(aPrincipalInfo)),
|
||||
QM_CUF_AND_IPC_FAIL(this));
|
||||
}
|
||||
|
||||
@@ -858,7 +855,7 @@ mozilla::ipc::IPCResult Quota::RecvShutdownStoragesForOrigin(
|
||||
QM_CUF_AND_IPC_FAIL(this));
|
||||
}
|
||||
|
||||
QM_TRY(MOZ_TO_RESULT(QuotaManager::IsPrincipalInfoValid(aPrincipalInfo)),
|
||||
QM_TRY(MOZ_TO_RESULT(IsPrincipalInfoValid(aPrincipalInfo)),
|
||||
QM_CUF_AND_IPC_FAIL(this));
|
||||
}
|
||||
|
||||
@@ -888,7 +885,7 @@ mozilla::ipc::IPCResult Quota::RecvShutdownStoragesForClient(
|
||||
QM_CUF_AND_IPC_FAIL(this));
|
||||
}
|
||||
|
||||
QM_TRY(MOZ_TO_RESULT(QuotaManager::IsPrincipalInfoValid(aPrincipalInfo)),
|
||||
QM_TRY(MOZ_TO_RESULT(IsPrincipalInfoValid(aPrincipalInfo)),
|
||||
QM_CUF_AND_IPC_FAIL(this));
|
||||
|
||||
QM_TRY(MOZ_TO_RESULT(Client::IsValidType(aClientType)),
|
||||
|
||||
@@ -70,6 +70,7 @@ EXPORTS.mozilla.dom.quota += [
|
||||
"OriginScope.h",
|
||||
"PersistenceScope.h",
|
||||
"PersistenceType.h",
|
||||
"PrincipalUtils.h",
|
||||
"PromiseUtils.h",
|
||||
"QuotaCommon.h",
|
||||
"QuotaManager.h",
|
||||
@@ -125,6 +126,7 @@ UNIFIED_SOURCES += [
|
||||
"OriginParser.cpp",
|
||||
"PersistenceScope.cpp",
|
||||
"PersistenceType.cpp",
|
||||
"PrincipalUtils.cpp",
|
||||
"PromiseUtils.cpp",
|
||||
"QMResult.cpp",
|
||||
"QuotaCommon.cpp",
|
||||
|
||||
@@ -39,6 +39,7 @@
|
||||
#include "mozilla/dom/quota/DirectoryLock.h"
|
||||
#include "mozilla/dom/quota/DirectoryLockInlines.h"
|
||||
#include "mozilla/dom/quota/FileStreams.h"
|
||||
#include "mozilla/dom/quota/PrincipalUtils.h"
|
||||
#include "mozilla/dom/quota/QuotaCommon.h"
|
||||
#include "mozilla/dom/quota/QuotaManager.h"
|
||||
#include "mozilla/dom/quota/ResultExtensions.h"
|
||||
@@ -547,7 +548,7 @@ AllocPBackgroundSDBConnectionParent(const PersistenceType& aPersistenceType,
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
if (NS_WARN_IF(!QuotaManager::IsPrincipalInfoValid(aPrincipalInfo))) {
|
||||
if (NS_WARN_IF(!quota::IsPrincipalInfoValid(aPrincipalInfo))) {
|
||||
MOZ_CRASH_UNLESS_FUZZING();
|
||||
return nullptr;
|
||||
}
|
||||
@@ -1102,13 +1103,13 @@ nsresult OpenOp::FinishOpen() {
|
||||
PersistenceType persistenceType = GetConnection()->GetPersistenceType();
|
||||
|
||||
if (principalInfo.type() == PrincipalInfo::TSystemPrincipalInfo) {
|
||||
mOriginMetadata = {QuotaManager::GetInfoForChrome(), persistenceType};
|
||||
mOriginMetadata = {quota::GetInfoForChrome(), persistenceType};
|
||||
} else {
|
||||
MOZ_ASSERT(principalInfo.type() == PrincipalInfo::TContentPrincipalInfo);
|
||||
|
||||
QM_TRY_UNWRAP(auto principalMetadata,
|
||||
QuotaManager::GetInfoFromValidatedPrincipalInfo(
|
||||
*quotaManager, principalInfo));
|
||||
QM_TRY_UNWRAP(
|
||||
auto principalMetadata,
|
||||
quota::GetInfoFromValidatedPrincipalInfo(*quotaManager, principalInfo));
|
||||
|
||||
mOriginMetadata = {std::move(principalMetadata), persistenceType};
|
||||
}
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
#include "mozilla/Variant.h"
|
||||
#include "mozilla/dom/PBackgroundSDBConnection.h"
|
||||
#include "mozilla/dom/TypedArray.h"
|
||||
#include "mozilla/dom/quota/QuotaManager.h"
|
||||
#include "mozilla/dom/quota/PrincipalUtils.h"
|
||||
#include "mozilla/fallible.h"
|
||||
#include "mozilla/ipc/BackgroundChild.h"
|
||||
#include "mozilla/ipc/BackgroundUtils.h"
|
||||
@@ -250,7 +250,7 @@ SDBConnection::Init(nsIPrincipal* aPrincipal,
|
||||
return NS_ERROR_INVALID_ARG;
|
||||
}
|
||||
|
||||
if (NS_WARN_IF(!quota::QuotaManager::IsPrincipalInfoValid(*principalInfo))) {
|
||||
if (NS_WARN_IF(!quota::IsPrincipalInfoValid(*principalInfo))) {
|
||||
return NS_ERROR_INVALID_ARG;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user