Bug 1867997 - Add nsIQuotaManagerService::TemporaryGroupInitialized and nsIQuotaManagerService::InitializeTemporaryGroup methods; r=dom-storage-reviewers,jari
Google tests can use quota manager methods directly on the PBackground thread, but xpcshell tests can only access quota manager via quota manager service, so this patch adds support for writting xpcshell tests involving temporary group initialization. Differential Revision: https://phabricator.services.mozilla.com/D198355
This commit is contained in:
@@ -131,6 +131,9 @@ parent:
|
||||
async TemporaryStorageInitialized()
|
||||
returns(BoolResponse response);
|
||||
|
||||
async TemporaryGroupInitialized(PrincipalInfo principalInfo)
|
||||
returns(BoolResponse response);
|
||||
|
||||
async PersistentOriginInitialized(PrincipalInfo principalInfo)
|
||||
returns(BoolResponse response);
|
||||
|
||||
@@ -144,6 +147,9 @@ parent:
|
||||
async InitializePersistentStorage()
|
||||
returns(BoolResponse response);
|
||||
|
||||
async InitializeTemporaryGroup(PrincipalInfo principalInfo)
|
||||
returns(BoolResponse response);
|
||||
|
||||
async InitializePersistentOrigin(PrincipalInfo principalInfo)
|
||||
returns(BoolResponse response);
|
||||
|
||||
|
||||
@@ -566,6 +566,40 @@ QuotaManagerService::TemporaryStorageInitialized(nsIQuotaRequest** _retval) {
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
QuotaManagerService::TemporaryGroupInitialized(nsIPrincipal* aPrincipal,
|
||||
nsIQuotaRequest** _retval) {
|
||||
MOZ_ASSERT(NS_IsMainThread());
|
||||
MOZ_ASSERT(aPrincipal);
|
||||
MOZ_ASSERT(nsContentUtils::IsCallerChrome());
|
||||
|
||||
QM_TRY(MOZ_TO_RESULT(StaticPrefs::dom_quotaManager_testing()),
|
||||
NS_ERROR_UNEXPECTED);
|
||||
|
||||
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(MOZ_TO_RESULT(IsPrincipalInfoValid(principalInfo)),
|
||||
Err(NS_ERROR_INVALID_ARG));
|
||||
|
||||
return principalInfo;
|
||||
}()));
|
||||
|
||||
RefPtr<Request> request = new Request();
|
||||
|
||||
mBackgroundActor->SendTemporaryGroupInitialized(principalInfo)
|
||||
->Then(GetCurrentSerialEventTarget(), __func__,
|
||||
BoolResponsePromiseResolveOrRejectCallback(request));
|
||||
|
||||
request.forget(_retval);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
QuotaManagerService::PersistentOriginInitialized(nsIPrincipal* aPrincipal,
|
||||
nsIQuotaRequest** _retval) {
|
||||
@@ -714,6 +748,40 @@ QuotaManagerService::InitTemporaryStorage(nsIQuotaRequest** _retval) {
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
QuotaManagerService::InitializeTemporaryGroup(nsIPrincipal* aPrincipal,
|
||||
nsIQuotaRequest** _retval) {
|
||||
MOZ_ASSERT(NS_IsMainThread());
|
||||
MOZ_ASSERT(aPrincipal);
|
||||
MOZ_ASSERT(nsContentUtils::IsCallerChrome());
|
||||
|
||||
QM_TRY(MOZ_TO_RESULT(StaticPrefs::dom_quotaManager_testing()),
|
||||
NS_ERROR_UNEXPECTED);
|
||||
|
||||
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(MOZ_TO_RESULT(IsPrincipalInfoValid(principalInfo)),
|
||||
Err(NS_ERROR_INVALID_ARG));
|
||||
|
||||
return principalInfo;
|
||||
}()));
|
||||
|
||||
RefPtr<Request> request = new Request();
|
||||
|
||||
mBackgroundActor->SendInitializeTemporaryGroup(principalInfo)
|
||||
->Then(GetCurrentSerialEventTarget(), __func__,
|
||||
BoolResponsePromiseResolveOrRejectCallback(request));
|
||||
|
||||
request.forget(_retval);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
QuotaManagerService::InitializePersistentOrigin(nsIPrincipal* aPrincipal,
|
||||
nsIQuotaRequest** _retval) {
|
||||
|
||||
@@ -359,6 +359,30 @@ mozilla::ipc::IPCResult Quota::RecvTemporaryStorageInitialized(
|
||||
return IPC_OK();
|
||||
}
|
||||
|
||||
mozilla::ipc::IPCResult Quota::RecvTemporaryGroupInitialized(
|
||||
const PrincipalInfo& aPrincipalInfo,
|
||||
TemporaryOriginInitializedResolver&& aResolve) {
|
||||
AssertIsOnBackgroundThread();
|
||||
|
||||
QM_TRY(MOZ_TO_RESULT(!QuotaManager::IsShuttingDown()),
|
||||
ResolveBoolResponseAndReturn(aResolve));
|
||||
|
||||
if (!TrustParams()) {
|
||||
QM_TRY(MOZ_TO_RESULT(IsPrincipalInfoValid(aPrincipalInfo)),
|
||||
QM_CUF_AND_IPC_FAIL(this));
|
||||
}
|
||||
|
||||
QM_TRY_UNWRAP(const NotNull<RefPtr<QuotaManager>> quotaManager,
|
||||
QuotaManager::GetOrCreate(),
|
||||
ResolveBoolResponseAndReturn(aResolve));
|
||||
|
||||
quotaManager->TemporaryGroupInitialized(aPrincipalInfo)
|
||||
->Then(GetCurrentSerialEventTarget(), __func__,
|
||||
BoolPromiseResolveOrRejectCallback(this, std::move(aResolve)));
|
||||
|
||||
return IPC_OK();
|
||||
}
|
||||
|
||||
mozilla::ipc::IPCResult Quota::RecvPersistentOriginInitialized(
|
||||
const PrincipalInfo& aPrincipalInfo,
|
||||
PersistentOriginInitializedResolver&& aResolve) {
|
||||
@@ -447,6 +471,30 @@ mozilla::ipc::IPCResult Quota::RecvInitializePersistentStorage(
|
||||
return IPC_OK();
|
||||
}
|
||||
|
||||
mozilla::ipc::IPCResult Quota::RecvInitializeTemporaryGroup(
|
||||
const PrincipalInfo& aPrincipalInfo,
|
||||
InitializeTemporaryOriginResolver&& aResolve) {
|
||||
AssertIsOnBackgroundThread();
|
||||
|
||||
QM_TRY(MOZ_TO_RESULT(!QuotaManager::IsShuttingDown()),
|
||||
ResolveBoolResponseAndReturn(aResolve));
|
||||
|
||||
if (!TrustParams()) {
|
||||
QM_TRY(MOZ_TO_RESULT(IsPrincipalInfoValid(aPrincipalInfo)),
|
||||
QM_CUF_AND_IPC_FAIL(this));
|
||||
}
|
||||
|
||||
QM_TRY_UNWRAP(const NotNull<RefPtr<QuotaManager>> quotaManager,
|
||||
QuotaManager::GetOrCreate(),
|
||||
ResolveBoolResponseAndReturn(aResolve));
|
||||
|
||||
quotaManager->InitializeTemporaryGroup(aPrincipalInfo)
|
||||
->Then(GetCurrentSerialEventTarget(), __func__,
|
||||
BoolPromiseResolveOrRejectCallback(this, std::move(aResolve)));
|
||||
|
||||
return IPC_OK();
|
||||
}
|
||||
|
||||
mozilla::ipc::IPCResult Quota::RecvInitializePersistentOrigin(
|
||||
const PrincipalInfo& aPrincipalInfo,
|
||||
InitializePersistentOriginResolver&& aResolve) {
|
||||
|
||||
@@ -49,6 +49,10 @@ class Quota final : public PQuotaParent {
|
||||
virtual mozilla::ipc::IPCResult RecvTemporaryStorageInitialized(
|
||||
TemporaryStorageInitializedResolver&& aResolver) override;
|
||||
|
||||
virtual mozilla::ipc::IPCResult RecvTemporaryGroupInitialized(
|
||||
const PrincipalInfo& aPrincipalInfo,
|
||||
TemporaryGroupInitializedResolver&& aResolve) override;
|
||||
|
||||
virtual mozilla::ipc::IPCResult RecvPersistentOriginInitialized(
|
||||
const PrincipalInfo& aPrincipalInfo,
|
||||
PersistentOriginInitializedResolver&& aResolve) override;
|
||||
@@ -64,6 +68,10 @@ class Quota final : public PQuotaParent {
|
||||
virtual mozilla::ipc::IPCResult RecvInitializePersistentStorage(
|
||||
InitializePersistentStorageResolver&& aResolver) override;
|
||||
|
||||
virtual mozilla::ipc::IPCResult RecvInitializeTemporaryGroup(
|
||||
const PrincipalInfo& aPrincipalInfo,
|
||||
InitializeTemporaryGroupResolver&& aResolve) override;
|
||||
|
||||
virtual mozilla::ipc::IPCResult RecvInitializePersistentOrigin(
|
||||
const PrincipalInfo& aPrincipalInfo,
|
||||
InitializePersistentOriginResolver&& aResolve) override;
|
||||
|
||||
@@ -51,6 +51,15 @@ interface nsIQuotaManagerService : nsISupports
|
||||
[must_use] nsIQuotaRequest
|
||||
temporaryStorageInitialized();
|
||||
|
||||
/**
|
||||
* Check if temporary group is initialized.
|
||||
*
|
||||
* If the dom.quotaManager.testing preference is not true the call will be
|
||||
* a no-op.
|
||||
*/
|
||||
[must_use] nsIQuotaRequest
|
||||
temporaryGroupInitialized(in nsIPrincipal aPrincipal);
|
||||
|
||||
/**
|
||||
* Check if persistent origin is initialized.
|
||||
*
|
||||
@@ -109,6 +118,20 @@ interface nsIQuotaManagerService : nsISupports
|
||||
[must_use] nsIQuotaRequest
|
||||
initTemporaryStorage();
|
||||
|
||||
/**
|
||||
* Initializes temporary origin directories for the given group. This can be
|
||||
* used in tests to verify group initialization.
|
||||
*
|
||||
* If the dom.quotaManager.testing preference is not true the call will be
|
||||
* a no-op.
|
||||
*
|
||||
* @param aPrincipal
|
||||
* A principal for the group whose origin directories are to be
|
||||
* initialized.
|
||||
*/
|
||||
[must_use] nsIQuotaRequest
|
||||
initializeTemporaryGroup(in nsIPrincipal aPrincipal);
|
||||
|
||||
/**
|
||||
* Initializes persistent origin directory for the given origin. This can be
|
||||
* used in tests to verify origin initialization.
|
||||
|
||||
Reference in New Issue
Block a user