mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-10 03:45:46 +00:00
Bug 1722502 - P1 Implement the quota usage checking methods in ServiceWorker for quota usage mitigation. r=dom-worker-reviewers,asuth
This patch implements methods for ServiceWorkerRegistrationInfo to invoke the quota usage checking. ServiceWorkerRegistrationInfo::CheckQuotaUsage() is an internal using method, such that it is a private method. Differential Revision: https://phabricator.services.mozilla.com/D120964
This commit is contained in:
parent
1d8ba48f58
commit
780ca9d776
@ -2268,6 +2268,32 @@ int32_t ServiceWorkerManager::GetPrincipalQuotaUsageCheckCount(
|
||||
return data->mQuotaUsageCheckCount;
|
||||
}
|
||||
|
||||
void ServiceWorkerManager::CheckPrincipalQuotaUsage(nsIPrincipal* aPrincipal,
|
||||
const nsACString& aScope) {
|
||||
MOZ_ASSERT(NS_IsMainThread());
|
||||
MOZ_ASSERT(aPrincipal);
|
||||
|
||||
nsAutoCString scopeKey;
|
||||
nsresult rv = PrincipalToScopeKey(aPrincipal, scopeKey);
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
return;
|
||||
}
|
||||
|
||||
RegistrationDataPerPrincipal* data;
|
||||
if (!mRegistrationInfos.Get(scopeKey, &data)) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Had already schedule a quota usage check.
|
||||
if (data->mQuotaUsageCheckCount != 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
++data->mQuotaUsageCheckCount;
|
||||
|
||||
// Perform quota usage checking here with QuotaManager in the following patch.
|
||||
}
|
||||
|
||||
void ServiceWorkerManager::SoftUpdate(const OriginAttributes& aOriginAttributes,
|
||||
const nsACString& aScope) {
|
||||
MOZ_ASSERT(NS_IsMainThread());
|
||||
|
@ -254,6 +254,9 @@ class ServiceWorkerManager final : public nsIServiceWorkerManager,
|
||||
|
||||
int32_t GetPrincipalQuotaUsageCheckCount(nsIPrincipal* aPrincipal);
|
||||
|
||||
void CheckPrincipalQuotaUsage(nsIPrincipal* aPrincipal,
|
||||
const nsACString& aScope);
|
||||
|
||||
// Returns the shutdown state ID (may be an invalid ID if an
|
||||
// nsIAsyncShutdownBlocker is not used).
|
||||
uint32_t MaybeInitServiceWorkerShutdownProgress() const;
|
||||
|
@ -517,6 +517,7 @@ void ServiceWorkerRegistrationInfo::MaybeScheduleUpdate() {
|
||||
// Disable unregister mitigation when navigation fault threshold is 0.
|
||||
if (navigationFaultThreshold <= navigationFaultCount &&
|
||||
navigationFaultThreshold != 0) {
|
||||
CheckQuotaUsage();
|
||||
swm->Unregister(mPrincipal, nullptr, NS_ConvertUTF8toUTF16(Scope()));
|
||||
return;
|
||||
}
|
||||
@ -895,5 +896,14 @@ void ServiceWorkerRegistrationInfo::ForEachWorker(
|
||||
}
|
||||
}
|
||||
|
||||
void ServiceWorkerRegistrationInfo::CheckQuotaUsage() {
|
||||
MOZ_ASSERT(NS_IsMainThread());
|
||||
|
||||
RefPtr<ServiceWorkerManager> swm = ServiceWorkerManager::GetInstance();
|
||||
MOZ_ASSERT(swm);
|
||||
|
||||
swm->CheckPrincipalQuotaUsage(mPrincipal, Scope());
|
||||
}
|
||||
|
||||
} // namespace dom
|
||||
} // namespace mozilla
|
||||
|
@ -261,6 +261,8 @@ class ServiceWorkerRegistrationInfo final
|
||||
// call to `aFunc`, so `aFunc` will always get a reference to a non-null
|
||||
// pointer.
|
||||
void ForEachWorker(void (*aFunc)(RefPtr<ServiceWorkerInfo>&));
|
||||
|
||||
void CheckQuotaUsage();
|
||||
};
|
||||
|
||||
} // namespace dom
|
||||
|
Loading…
Reference in New Issue
Block a user