diff --git a/dom/workers/ScriptLoader.cpp b/dom/workers/ScriptLoader.cpp index e69c183e8ce1..30dcf26d2fd9 100644 --- a/dom/workers/ScriptLoader.cpp +++ b/dom/workers/ScriptLoader.cpp @@ -470,6 +470,8 @@ private: nsCOMPtr mBaseURI; mozilla::dom::ChannelInfo mChannelInfo; UniquePtr mPrincipalInfo; + nsCString mCSPHeaderValue; + nsCString mCSPReportOnlyHeaderValue; }; NS_IMPL_ISUPPORTS(CacheScriptLoader, nsIStreamLoaderObserver) @@ -1162,7 +1164,9 @@ private: DataReceivedFromCache(uint32_t aIndex, const uint8_t* aString, uint32_t aStringLen, const mozilla::dom::ChannelInfo& aChannelInfo, - UniquePtr aPrincipalInfo) + UniquePtr aPrincipalInfo, + const nsACString& aCSPHeaderValue, + const nsACString& aCSPReportOnlyHeaderValue) { AssertIsOnMainThread(); MOZ_ASSERT(aIndex < mLoadInfos.Length()); @@ -1218,6 +1222,10 @@ private: mWorkerPrivate->InitChannelInfo(aChannelInfo); rv = mWorkerPrivate->SetPrincipalOnMainThread(responsePrincipal, loadGroup); MOZ_DIAGNOSTIC_ASSERT(NS_SUCCEEDED(rv)); + + rv = mWorkerPrivate->SetCSPFromHeaderValues(aCSPHeaderValue, + aCSPReportOnlyHeaderValue); + MOZ_DIAGNOSTIC_ASSERT(NS_SUCCEEDED(rv)); } if (NS_SUCCEEDED(rv)) { @@ -1626,6 +1634,14 @@ CacheScriptLoader::ResolvedCallback(JSContext* aCx, return; } + InternalHeaders* headers = response->GetInternalHeaders(); + + IgnoredErrorResult ignored; + headers->Get(NS_LITERAL_CSTRING("content-security-policy"), + mCSPHeaderValue, ignored); + headers->Get(NS_LITERAL_CSTRING("content-security-policy-report-only"), + mCSPReportOnlyHeaderValue, ignored); + nsCOMPtr inputStream; response->GetBody(getter_AddRefs(inputStream)); mChannelInfo = response->GetChannelInfo(); @@ -1637,7 +1653,8 @@ CacheScriptLoader::ResolvedCallback(JSContext* aCx, if (!inputStream) { mLoadInfo.mCacheStatus = ScriptLoadInfo::Cached; mRunnable->DataReceivedFromCache(mIndex, (uint8_t*)"", 0, mChannelInfo, - Move(mPrincipalInfo)); + Move(mPrincipalInfo), mCSPHeaderValue, + mCSPReportOnlyHeaderValue); return; } @@ -1697,7 +1714,8 @@ CacheScriptLoader::OnStreamComplete(nsIStreamLoader* aLoader, nsISupports* aCont MOZ_ASSERT(mPrincipalInfo); mRunnable->DataReceivedFromCache(mIndex, aString, aStringLen, mChannelInfo, - Move(mPrincipalInfo)); + Move(mPrincipalInfo), mCSPHeaderValue, + mCSPReportOnlyHeaderValue); return NS_OK; }