Bug 1493629 - Better management of CSP EventListener for workers, r=ckerschb

This commit is contained in:
Andrea Marchesini 2018-10-05 07:41:12 +02:00
parent 40ca28382a
commit 8bf0b5f63b

View File

@ -1471,9 +1471,9 @@ WorkerPrivate::SetCSP(nsIContentSecurityPolicy* aCSP)
return;
}
aCSP->EnsureEventTarget(mMainThreadEventTarget);
aCSP->SetEventListener(mCSPEventListener);
mLoadInfo.mCSP = aCSP;
EnsureCSPEventListener();
}
nsresult
@ -1493,7 +1493,6 @@ WorkerPrivate::SetCSPFromHeaderValues(const nsACString& aCSPHeaderValue,
}
csp->EnsureEventTarget(mMainThreadEventTarget);
csp->SetEventListener(mCSPEventListener);
// If there's a CSP header, apply it.
if (!cspHeaderValue.IsEmpty()) {
@ -1515,6 +1514,7 @@ WorkerPrivate::SetCSPFromHeaderValues(const nsACString& aCSPHeaderValue,
mLoadInfo.mCSP = csp;
mLoadInfo.mEvalAllowed = evalAllowed;
mLoadInfo.mReportCSPViolations = reportEvalViolations;
EnsureCSPEventListener();
return NS_OK;
}
@ -3445,9 +3445,11 @@ WorkerPrivate::EnsureClientSource()
bool
WorkerPrivate::EnsureCSPEventListener()
{
mCSPEventListener = WorkerCSPEventListener::Create(this);
if (NS_WARN_IF(!mCSPEventListener)) {
return false;
if (!mCSPEventListener) {
mCSPEventListener = WorkerCSPEventListener::Create(this);
if (NS_WARN_IF(!mCSPEventListener)) {
return false;
}
}
if (mLoadInfo.mCSP) {