Index: third_party/WebKit/Source/core/frame/csp/CSPDirectiveList.cpp |
diff --git a/third_party/WebKit/Source/core/frame/csp/CSPDirectiveList.cpp b/third_party/WebKit/Source/core/frame/csp/CSPDirectiveList.cpp |
index 88a1a283c59ca8a73b60b4dbfe3d79f794a6cf50..d90f9266bb2925e3255599e4c592c0aeadb5c845 100644 |
--- a/third_party/WebKit/Source/core/frame/csp/CSPDirectiveList.cpp |
+++ b/third_party/WebKit/Source/core/frame/csp/CSPDirectiveList.cpp |
@@ -120,7 +120,7 @@ bool CSPDirectiveList::checkInline(SourceListDirective* directive) const |
return !directive || (directive->allowInline() && !directive->isHashOrNoncePresent()); |
} |
-bool CSPDirectiveList::checkNonce(SourceListDirective* directive, const String& nonce) const |
+bool CSPDirectiveList::isMatchingNoncePresent(SourceListDirective* directive, const String& nonce) const |
{ |
return directive && directive->allowNonce(nonce); |
} |
@@ -320,19 +320,21 @@ bool CSPDirectiveList::allowInlineEventHandlers(const String& contextURL, const |
return checkInline(operativeDirective(m_scriptSrc.get())); |
} |
-bool CSPDirectiveList::allowInlineScript(const String& contextURL, const WTF::OrdinalNumber& contextLine, ContentSecurityPolicy::ReportingStatus reportingStatus, const String& content) const |
+bool CSPDirectiveList::allowInlineScript(const String& contextURL, const String& nonce, const WTF::OrdinalNumber& contextLine, ContentSecurityPolicy::ReportingStatus reportingStatus, const String& content) const |
{ |
- if (reportingStatus == ContentSecurityPolicy::SendReport) { |
+ if (isMatchingNoncePresent(operativeDirective(m_scriptSrc.get()), nonce)) |
+ return true; |
+ if (reportingStatus == ContentSecurityPolicy::SendReport) |
return checkInlineAndReportViolation(operativeDirective(m_scriptSrc.get()), "Refused to execute inline script because it violates the following Content Security Policy directive: ", contextURL, contextLine, true, getSha256String(content)); |
- } |
return checkInline(operativeDirective(m_scriptSrc.get())); |
} |
-bool CSPDirectiveList::allowInlineStyle(const String& contextURL, const WTF::OrdinalNumber& contextLine, ContentSecurityPolicy::ReportingStatus reportingStatus, const String& content) const |
+bool CSPDirectiveList::allowInlineStyle(const String& contextURL, const String& nonce, const WTF::OrdinalNumber& contextLine, ContentSecurityPolicy::ReportingStatus reportingStatus, const String& content) const |
{ |
- if (reportingStatus == ContentSecurityPolicy::SendReport) { |
+ if (isMatchingNoncePresent(operativeDirective(m_styleSrc.get()), nonce)) |
+ return true; |
+ if (reportingStatus == ContentSecurityPolicy::SendReport) |
return checkInlineAndReportViolation(operativeDirective(m_styleSrc.get()), "Refused to apply inline style because it violates the following Content Security Policy directive: ", contextURL, contextLine, false, getSha256String(content)); |
- } |
return checkInline(operativeDirective(m_styleSrc.get())); |
} |
@@ -351,8 +353,10 @@ bool CSPDirectiveList::allowPluginType(const String& type, const String& typeAtt |
checkMediaType(m_pluginTypes.get(), type, typeAttribute); |
} |
-bool CSPDirectiveList::allowScriptFromSource(const KURL& url, ResourceRequest::RedirectStatus redirectStatus, ContentSecurityPolicy::ReportingStatus reportingStatus) const |
+bool CSPDirectiveList::allowScriptFromSource(const KURL& url, const String& nonce, ResourceRequest::RedirectStatus redirectStatus, ContentSecurityPolicy::ReportingStatus reportingStatus) const |
{ |
+ if (isMatchingNoncePresent(operativeDirective(m_scriptSrc.get()), nonce)) |
+ return true; |
return reportingStatus == ContentSecurityPolicy::SendReport ? checkSourceAndReportViolation(operativeDirective(m_scriptSrc.get()), url, ContentSecurityPolicy::ScriptSrc, redirectStatus) : checkSource(operativeDirective(m_scriptSrc.get()), url, redirectStatus); |
} |
@@ -382,8 +386,10 @@ bool CSPDirectiveList::allowImageFromSource(const KURL& url, ResourceRequest::Re |
return reportingStatus == ContentSecurityPolicy::SendReport ? checkSourceAndReportViolation(operativeDirective(m_imgSrc.get()), url, ContentSecurityPolicy::ImgSrc, redirectStatus) : checkSource(operativeDirective(m_imgSrc.get()), url, redirectStatus); |
} |
-bool CSPDirectiveList::allowStyleFromSource(const KURL& url, ResourceRequest::RedirectStatus redirectStatus, ContentSecurityPolicy::ReportingStatus reportingStatus) const |
+bool CSPDirectiveList::allowStyleFromSource(const KURL& url, const String& nonce, ResourceRequest::RedirectStatus redirectStatus, ContentSecurityPolicy::ReportingStatus reportingStatus) const |
{ |
+ if (isMatchingNoncePresent(operativeDirective(m_styleSrc.get()), nonce)) |
+ return true; |
return reportingStatus == ContentSecurityPolicy::SendReport ? checkSourceAndReportViolation(operativeDirective(m_styleSrc.get()), url, ContentSecurityPolicy::StyleSrc, redirectStatus) : checkSource(operativeDirective(m_styleSrc.get()), url, redirectStatus); |
} |
@@ -427,22 +433,6 @@ bool CSPDirectiveList::allowAncestors(LocalFrame* frame, const KURL& url, Conten |
return reportingStatus == ContentSecurityPolicy::SendReport ? checkAncestorsAndReportViolation(m_frameAncestors.get(), frame, url) : checkAncestors(m_frameAncestors.get(), frame); |
} |
-CSPDirectiveList::NoncePolicyDisposition CSPDirectiveList::allowScriptNonce(const String& nonce) const |
-{ |
- SourceListDirective* directive = operativeDirective(m_scriptSrc.get()); |
- if (!directive) |
- return NoncePolicyDisposition::NoDirective; |
- return checkNonce(directive, nonce) ? NoncePolicyDisposition::Allowed : NoncePolicyDisposition::Denied; |
-} |
- |
-CSPDirectiveList::NoncePolicyDisposition CSPDirectiveList::allowStyleNonce(const String& nonce) const |
-{ |
- SourceListDirective* directive = operativeDirective(m_styleSrc.get()); |
- if (!directive) |
- return NoncePolicyDisposition::NoDirective; |
- return checkNonce(directive, nonce) ? NoncePolicyDisposition::Allowed : NoncePolicyDisposition::Denied; |
-} |
- |
bool CSPDirectiveList::allowScriptHash(const CSPHashValue& hashValue, ContentSecurityPolicy::InlineType type) const |
{ |
if (type == ContentSecurityPolicy::InlineType::Attribute) { |