diff --git a/dom/security/nsCSPService.cpp b/dom/security/nsCSPService.cpp index d559836b0d..056580461d 100644 --- a/dom/security/nsCSPService.cpp +++ b/dom/security/nsCSPService.cpp @@ -249,6 +249,9 @@ CSPService::ShouldProcess(uint32_t aContentType, nsIPrincipal *aRequestPrincipal, int16_t *aDecision) { + MOZ_ASSERT(aContentType == nsContentUtils::InternalContentPolicyTypeToExternal(aContentType), + "We should only see external content policy types here."); + if (!aContentLocation) return NS_ERROR_FAILURE; @@ -306,7 +309,8 @@ CSPService::AsyncOnChannelRedirect(nsIChannel *oldChannel, nsCOMPtr originalUri; rv = oldChannel->GetOriginalURI(getter_AddRefs(originalUri)); NS_ENSURE_SUCCESS(rv, rv); - nsContentPolicyType policyType = loadInfo->InternalContentPolicyType(); + nsContentPolicyType policyType = + nsContentUtils::InternalContentPolicyTypeToExternal(loadInfo->InternalContentPolicyType()); int16_t aDecision = nsIContentPolicy::ACCEPT; csp->ShouldLoad(policyType, // load type per nsIContentPolicy (uint32_t) diff --git a/dom/workers/RuntimeService.cpp b/dom/workers/RuntimeService.cpp index e657d2a3e3..98498d1cd7 100644 --- a/dom/workers/RuntimeService.cpp +++ b/dom/workers/RuntimeService.cpp @@ -1498,6 +1498,9 @@ RuntimeService::RegisterWorker(JSContext* aCx, WorkerPrivate* aWorkerPrivate) else if (parent) { domainInfo->mChildWorkerCount++; } + else if (isServiceWorker) { + domainInfo->mActiveServiceWorkers.AppendElement(aWorkerPrivate); + } else { domainInfo->mActiveWorkers.AppendElement(aWorkerPrivate); } @@ -1602,12 +1605,17 @@ RuntimeService::UnregisterWorker(JSContext* aCx, WorkerPrivate* aWorkerPrivate) domainInfo->mQueuedWorkers.RemoveElementAt(index); } else if (parent) { - NS_ASSERTION(domainInfo->mChildWorkerCount, "Must be non-zero!"); + MOZ_ASSERT(domainInfo->mChildWorkerCount, "Must be non-zero!"); domainInfo->mChildWorkerCount--; } + else if (aWorkerPrivate->IsServiceWorker()) { + MOZ_ASSERT(domainInfo->mActiveServiceWorkers.Contains(aWorkerPrivate), + "Don't know about this worker!"); + domainInfo->mActiveServiceWorkers.RemoveElement(aWorkerPrivate); + } else { - NS_ASSERTION(domainInfo->mActiveWorkers.Contains(aWorkerPrivate), - "Don't know about this worker!"); + MOZ_ASSERT(domainInfo->mActiveWorkers.Contains(aWorkerPrivate), + "Don't know about this worker!"); domainInfo->mActiveWorkers.RemoveElement(aWorkerPrivate); } @@ -1641,6 +1649,9 @@ RuntimeService::UnregisterWorker(JSContext* aCx, WorkerPrivate* aWorkerPrivate) if (queuedWorker->GetParent()) { domainInfo->mChildWorkerCount++; } + else if (queuedWorker->IsServiceWorker()) { + domainInfo->mActiveServiceWorkers.AppendElement(queuedWorker); + } else { domainInfo->mActiveWorkers.AppendElement(queuedWorker); } @@ -2215,12 +2226,17 @@ RuntimeService::AddAllTopLevelWorkersToArray(const nsACString& aKey, #ifdef DEBUG for (uint32_t index = 0; index < aData->mActiveWorkers.Length(); index++) { - NS_ASSERTION(!aData->mActiveWorkers[index]->GetParent(), - "Shouldn't have a parent in this list!"); + MOZ_ASSERT(!aData->mActiveWorkers[index]->GetParent(), + "Shouldn't have a parent in this list!"); + } + for (uint32_t index = 0; index < aData->mActiveServiceWorkers.Length(); index++) { + MOZ_ASSERT(!aData->mActiveServiceWorkers[index]->GetParent(), + "Shouldn't have a parent in this list!"); } #endif array->AppendElements(aData->mActiveWorkers); + array->AppendElements(aData->mActiveServiceWorkers); // These might not be top-level workers... for (uint32_t index = 0; index < aData->mQueuedWorkers.Length(); index++) { diff --git a/dom/workers/RuntimeService.h b/dom/workers/RuntimeService.h index ab435327f3..aa27cc085b 100644 --- a/dom/workers/RuntimeService.h +++ b/dom/workers/RuntimeService.h @@ -43,6 +43,7 @@ class RuntimeService final : public nsIObserver { nsCString mDomain; nsTArray mActiveWorkers; + nsTArray mActiveServiceWorkers; nsTArray mQueuedWorkers; nsClassHashtable mSharedWorkerInfos; uint32_t mChildWorkerCount; @@ -54,7 +55,9 @@ class RuntimeService final : public nsIObserver uint32_t ActiveWorkerCount() const { - return mActiveWorkers.Length() + mChildWorkerCount; + return mActiveWorkers.Length() + + mActiveServiceWorkers.Length() + + mChildWorkerCount; } }; diff --git a/extensions/permissions/nsContentBlocker.cpp b/extensions/permissions/nsContentBlocker.cpp index 53e7793517..ea10dae972 100644 --- a/extensions/permissions/nsContentBlocker.cpp +++ b/extensions/permissions/nsContentBlocker.cpp @@ -14,6 +14,7 @@ #include "nsContentPolicyUtils.h" #include "nsIObjectLoadingContent.h" #include "mozilla/ArrayUtils.h" +#include "nsContentUtils.h" // Possible behavior pref values // Those map to the nsIPermissionManager values where possible