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()
|
async TemporaryStorageInitialized()
|
||||||
returns(BoolResponse response);
|
returns(BoolResponse response);
|
||||||
|
|
||||||
|
async TemporaryGroupInitialized(PrincipalInfo principalInfo)
|
||||||
|
returns(BoolResponse response);
|
||||||
|
|
||||||
async PersistentOriginInitialized(PrincipalInfo principalInfo)
|
async PersistentOriginInitialized(PrincipalInfo principalInfo)
|
||||||
returns(BoolResponse response);
|
returns(BoolResponse response);
|
||||||
|
|
||||||
@@ -144,6 +147,9 @@ parent:
|
|||||||
async InitializePersistentStorage()
|
async InitializePersistentStorage()
|
||||||
returns(BoolResponse response);
|
returns(BoolResponse response);
|
||||||
|
|
||||||
|
async InitializeTemporaryGroup(PrincipalInfo principalInfo)
|
||||||
|
returns(BoolResponse response);
|
||||||
|
|
||||||
async InitializePersistentOrigin(PrincipalInfo principalInfo)
|
async InitializePersistentOrigin(PrincipalInfo principalInfo)
|
||||||
returns(BoolResponse response);
|
returns(BoolResponse response);
|
||||||
|
|
||||||
|
|||||||
@@ -566,6 +566,40 @@ QuotaManagerService::TemporaryStorageInitialized(nsIQuotaRequest** _retval) {
|
|||||||
return NS_OK;
|
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
|
NS_IMETHODIMP
|
||||||
QuotaManagerService::PersistentOriginInitialized(nsIPrincipal* aPrincipal,
|
QuotaManagerService::PersistentOriginInitialized(nsIPrincipal* aPrincipal,
|
||||||
nsIQuotaRequest** _retval) {
|
nsIQuotaRequest** _retval) {
|
||||||
@@ -714,6 +748,40 @@ QuotaManagerService::InitTemporaryStorage(nsIQuotaRequest** _retval) {
|
|||||||
return NS_OK;
|
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
|
NS_IMETHODIMP
|
||||||
QuotaManagerService::InitializePersistentOrigin(nsIPrincipal* aPrincipal,
|
QuotaManagerService::InitializePersistentOrigin(nsIPrincipal* aPrincipal,
|
||||||
nsIQuotaRequest** _retval) {
|
nsIQuotaRequest** _retval) {
|
||||||
|
|||||||
@@ -359,6 +359,30 @@ mozilla::ipc::IPCResult Quota::RecvTemporaryStorageInitialized(
|
|||||||
return IPC_OK();
|
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(
|
mozilla::ipc::IPCResult Quota::RecvPersistentOriginInitialized(
|
||||||
const PrincipalInfo& aPrincipalInfo,
|
const PrincipalInfo& aPrincipalInfo,
|
||||||
PersistentOriginInitializedResolver&& aResolve) {
|
PersistentOriginInitializedResolver&& aResolve) {
|
||||||
@@ -447,6 +471,30 @@ mozilla::ipc::IPCResult Quota::RecvInitializePersistentStorage(
|
|||||||
return IPC_OK();
|
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(
|
mozilla::ipc::IPCResult Quota::RecvInitializePersistentOrigin(
|
||||||
const PrincipalInfo& aPrincipalInfo,
|
const PrincipalInfo& aPrincipalInfo,
|
||||||
InitializePersistentOriginResolver&& aResolve) {
|
InitializePersistentOriginResolver&& aResolve) {
|
||||||
|
|||||||
@@ -49,6 +49,10 @@ class Quota final : public PQuotaParent {
|
|||||||
virtual mozilla::ipc::IPCResult RecvTemporaryStorageInitialized(
|
virtual mozilla::ipc::IPCResult RecvTemporaryStorageInitialized(
|
||||||
TemporaryStorageInitializedResolver&& aResolver) override;
|
TemporaryStorageInitializedResolver&& aResolver) override;
|
||||||
|
|
||||||
|
virtual mozilla::ipc::IPCResult RecvTemporaryGroupInitialized(
|
||||||
|
const PrincipalInfo& aPrincipalInfo,
|
||||||
|
TemporaryGroupInitializedResolver&& aResolve) override;
|
||||||
|
|
||||||
virtual mozilla::ipc::IPCResult RecvPersistentOriginInitialized(
|
virtual mozilla::ipc::IPCResult RecvPersistentOriginInitialized(
|
||||||
const PrincipalInfo& aPrincipalInfo,
|
const PrincipalInfo& aPrincipalInfo,
|
||||||
PersistentOriginInitializedResolver&& aResolve) override;
|
PersistentOriginInitializedResolver&& aResolve) override;
|
||||||
@@ -64,6 +68,10 @@ class Quota final : public PQuotaParent {
|
|||||||
virtual mozilla::ipc::IPCResult RecvInitializePersistentStorage(
|
virtual mozilla::ipc::IPCResult RecvInitializePersistentStorage(
|
||||||
InitializePersistentStorageResolver&& aResolver) override;
|
InitializePersistentStorageResolver&& aResolver) override;
|
||||||
|
|
||||||
|
virtual mozilla::ipc::IPCResult RecvInitializeTemporaryGroup(
|
||||||
|
const PrincipalInfo& aPrincipalInfo,
|
||||||
|
InitializeTemporaryGroupResolver&& aResolve) override;
|
||||||
|
|
||||||
virtual mozilla::ipc::IPCResult RecvInitializePersistentOrigin(
|
virtual mozilla::ipc::IPCResult RecvInitializePersistentOrigin(
|
||||||
const PrincipalInfo& aPrincipalInfo,
|
const PrincipalInfo& aPrincipalInfo,
|
||||||
InitializePersistentOriginResolver&& aResolve) override;
|
InitializePersistentOriginResolver&& aResolve) override;
|
||||||
|
|||||||
@@ -51,6 +51,15 @@ interface nsIQuotaManagerService : nsISupports
|
|||||||
[must_use] nsIQuotaRequest
|
[must_use] nsIQuotaRequest
|
||||||
temporaryStorageInitialized();
|
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.
|
* Check if persistent origin is initialized.
|
||||||
*
|
*
|
||||||
@@ -109,6 +118,20 @@ interface nsIQuotaManagerService : nsISupports
|
|||||||
[must_use] nsIQuotaRequest
|
[must_use] nsIQuotaRequest
|
||||||
initTemporaryStorage();
|
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
|
* Initializes persistent origin directory for the given origin. This can be
|
||||||
* used in tests to verify origin initialization.
|
* used in tests to verify origin initialization.
|
||||||
|
|||||||
Reference in New Issue
Block a user