diff --git a/dom/workers/ScriptLoader.cpp b/dom/workers/ScriptLoader.cpp index 6b036b3cff..ae023b520e 100644 --- a/dom/workers/ScriptLoader.cpp +++ b/dom/workers/ScriptLoader.cpp @@ -464,6 +464,8 @@ private: nsCOMPtr mBaseURI; mozilla::dom::ChannelInfo mChannelInfo; UniquePtr mPrincipalInfo; + nsCString mCSPHeaderValue; + nsCString mCSPReportOnlyHeaderValue; }; NS_IMPL_ISUPPORTS(CacheScriptLoader, nsIStreamLoaderObserver) @@ -1231,7 +1233,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()); @@ -1286,6 +1290,10 @@ private: mWorkerPrivate->InitChannelInfo(aChannelInfo); mWorkerPrivate->SetPrincipal(responsePrincipal, loadGroup); + + rv = mWorkerPrivate->SetCSPFromHeaderValues(aCSPHeaderValue, + aCSPReportOnlyHeaderValue); + MOZ_DIAGNOSTIC_ASSERT(NS_SUCCEEDED(rv)); } if (NS_SUCCEEDED(rv)) { @@ -1699,6 +1707,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(); @@ -1710,7 +1726,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; } @@ -1770,7 +1787,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; }