Index: Source/core/frame/ContentSecurityPolicy.cpp |
diff --git a/Source/core/frame/ContentSecurityPolicy.cpp b/Source/core/frame/ContentSecurityPolicy.cpp |
index 5414ba717ea678f3b58df5eb6a5afd0a020a705d..fb98a69ecbe18d717b8e69f58da6c611131c0467 100644 |
--- a/Source/core/frame/ContentSecurityPolicy.cpp |
+++ b/Source/core/frame/ContentSecurityPolicy.cpp |
@@ -310,7 +310,7 @@ public: |
bool matches(const KURL&); |
bool allowInline() const { return m_allowInline; } |
- bool allowScriptEval() const { return m_allowScriptEval; } |
+ bool allowEval() const { return m_allowEval; } |
bool allowNonce(const String& nonce) const { return !nonce.isNull() && m_nonces.contains(nonce); } |
bool allowHash(const SourceHashValue& hashValue) const { return m_hashes.contains(hashValue); } |
uint8_t hashAlgorithmsUsed() const { return m_hashAlgorithmsUsed; } |
@@ -338,7 +338,7 @@ private: |
String m_directiveName; |
bool m_allowStar; |
bool m_allowInline; |
- bool m_allowScriptEval; |
+ bool m_allowEval; |
HashSet<String> m_nonces; |
HashSet<SourceHashValue> m_hashes; |
uint8_t m_hashAlgorithmsUsed; |
@@ -349,7 +349,7 @@ CSPSourceList::CSPSourceList(ContentSecurityPolicy* policy, const String& direct |
, m_directiveName(directiveName) |
, m_allowStar(false) |
, m_allowInline(false) |
- , m_allowScriptEval(false) |
+ , m_allowEval(false) |
, m_hashAlgorithmsUsed(0) |
{ |
} |
@@ -730,7 +730,7 @@ void CSPSourceList::addSourceUnsafeInline() |
void CSPSourceList::addSourceUnsafeEval() |
{ |
- m_allowScriptEval = true; |
+ m_allowEval = true; |
} |
void CSPSourceList::addSourceNonce(const String& nonce) |
@@ -858,7 +858,7 @@ public: |
} |
bool allowInline() const { return m_sourceList.allowInline(); } |
- bool allowScriptEval() const { return m_sourceList.allowScriptEval(); } |
+ bool allowEval() const { return m_sourceList.allowEval(); } |
bool allowNonce(const String& nonce) const { return m_sourceList.allowNonce(nonce.stripWhiteSpace()); } |
bool allowHash(const SourceHashValue& hashValue) const { return m_sourceList.allowHash(hashValue); } |
bool isHashOrNoncePresent() const { return m_sourceList.isHashOrNoncePresent(); } |
@@ -884,8 +884,7 @@ public: |
bool allowInlineEventHandlers(const String& contextURL, const WTF::OrdinalNumber& contextLine, ContentSecurityPolicy::ReportingStatus) const; |
bool allowInlineScript(const String& contextURL, const WTF::OrdinalNumber& contextLine, ContentSecurityPolicy::ReportingStatus) const; |
bool allowInlineStyle(const String& contextURL, const WTF::OrdinalNumber& contextLine, ContentSecurityPolicy::ReportingStatus) const; |
- bool allowScriptEval(ScriptState*, ContentSecurityPolicy::ReportingStatus) const; |
- bool allowStyleEval(ScriptState*, ContentSecurityPolicy::ReportingStatus) const; |
+ bool allowEval(ScriptState*, ContentSecurityPolicy::ReportingStatus) const; |
bool allowPluginType(const String& type, const String& typeAttribute, const KURL&, ContentSecurityPolicy::ReportingStatus) const; |
bool allowScriptFromSource(const KURL&, ContentSecurityPolicy::ReportingStatus) const; |
@@ -906,7 +905,6 @@ public: |
bool allowStyleHash(const SourceHashValue&) const; |
const String& evalDisabledErrorMessage() const { return m_evalDisabledErrorMessage; } |
- const String& styleEvalDisabledErrorMessage() const { return m_styleEvalDisabledErrorMessage; } |
ReflectedXSSDisposition reflectedXSSDisposition() const { return m_reflectedXSSDisposition; } |
ReferrerPolicy referrerPolicy() const { return m_referrerPolicy; } |
bool didSetReferrerPolicy() const { return m_didSetReferrerPolicy; } |
@@ -942,7 +940,6 @@ private: |
bool checkAncestors(SourceListDirective*, Frame*) const; |
void setEvalDisabledErrorMessage(const String& errorMessage) { m_evalDisabledErrorMessage = errorMessage; } |
- void setStyleEvalDisabledErrorMessage(const String& errorMessage) { m_styleEvalDisabledErrorMessage = errorMessage; } |
bool checkEvalAndReportViolation(SourceListDirective*, const String& consoleMessage, ScriptState*) const; |
bool checkInlineAndReportViolation(SourceListDirective*, const String& consoleMessage, const String& contextURL, const WTF::OrdinalNumber& contextLine, bool isScript) const; |
@@ -984,7 +981,6 @@ private: |
Vector<KURL> m_reportURIs; |
String m_evalDisabledErrorMessage; |
- String m_styleEvalDisabledErrorMessage; |
}; |
CSPDirectiveList::CSPDirectiveList(ContentSecurityPolicy* policy, ContentSecurityPolicy::HeaderType type, ContentSecurityPolicy::HeaderSource source) |
@@ -1005,10 +1001,10 @@ PassOwnPtr<CSPDirectiveList> CSPDirectiveList::create(ContentSecurityPolicy* pol |
OwnPtr<CSPDirectiveList> directives = adoptPtr(new CSPDirectiveList(policy, type, source)); |
directives->parse(begin, end); |
- if (!directives->checkEval(directives->operativeDirective(directives->m_scriptSrc.get()))) |
- directives->setEvalDisabledErrorMessage("Refused to evaluate a string as JavaScript because 'unsafe-eval' is not an allowed source of script in the following Content Security Policy directive: \"" + directives->operativeDirective(directives->m_scriptSrc.get())->text() + "\".\n"); |
- if (!directives->checkEval(directives->operativeDirective(directives->m_styleSrc.get()))) |
- directives->setStyleEvalDisabledErrorMessage("Refused to evaluate a string as CSS because 'unsafe-eval' is not an allowed source of style in the following Content Security Policy directive: \"" + directives->operativeDirective(directives->m_styleSrc.get())->text() + "\".\n"); |
+ if (!directives->checkEval(directives->operativeDirective(directives->m_scriptSrc.get()))) { |
+ String message = "Refused to evaluate a string as JavaScript because 'unsafe-eval' is not an allowed source of script in the following Content Security Policy directive: \"" + directives->operativeDirective(directives->m_scriptSrc.get())->text() + "\".\n"; |
+ directives->setEvalDisabledErrorMessage(message); |
+ } |
if (directives->isReportOnly() && directives->reportURIs().isEmpty()) |
policy->reportMissingReportURI(String(begin, end - begin)); |
@@ -1039,7 +1035,7 @@ void CSPDirectiveList::reportViolationWithState(const String& directiveText, con |
bool CSPDirectiveList::checkEval(SourceListDirective* directive) const |
{ |
- return !directive || directive->allowScriptEval(); |
+ return !directive || directive->allowEval(); |
} |
bool CSPDirectiveList::checkInline(SourceListDirective* directive) const |
@@ -1227,7 +1223,7 @@ bool CSPDirectiveList::allowInlineStyle(const String& contextURL, const WTF::Ord |
checkInline(operativeDirective(m_styleSrc.get())); |
} |
-bool CSPDirectiveList::allowScriptEval(ScriptState* state, ContentSecurityPolicy::ReportingStatus reportingStatus) const |
+bool CSPDirectiveList::allowEval(ScriptState* state, ContentSecurityPolicy::ReportingStatus reportingStatus) const |
{ |
DEFINE_STATIC_LOCAL(String, consoleMessage, ("Refused to evaluate a string as JavaScript because 'unsafe-eval' is not an allowed source of script in the following Content Security Policy directive: ")); |
@@ -1236,15 +1232,6 @@ bool CSPDirectiveList::allowScriptEval(ScriptState* state, ContentSecurityPolicy |
checkEval(operativeDirective(m_scriptSrc.get())); |
} |
-bool CSPDirectiveList::allowStyleEval(ScriptState* state, ContentSecurityPolicy::ReportingStatus reportingStatus) const |
-{ |
- DEFINE_STATIC_LOCAL(String, consoleMessage, ("Refused to evaluate a string as CSS because 'unsafe-eval' is not an allowed source of style in the following Content Security Policy directive: ")); |
- |
- return reportingStatus == ContentSecurityPolicy::SendReport ? |
- checkEvalAndReportViolation(operativeDirective(m_styleSrc.get()), consoleMessage, state) : |
- checkEval(operativeDirective(m_styleSrc.get())); |
-} |
- |
bool CSPDirectiveList::allowPluginType(const String& type, const String& typeAttribute, const KURL& url, ContentSecurityPolicy::ReportingStatus reportingStatus) const |
{ |
return reportingStatus == ContentSecurityPolicy::SendReport ? |
@@ -1725,7 +1712,7 @@ void ContentSecurityPolicy::addPolicyFromHeaderValue(const String& header, Heade |
OwnPtr<CSPDirectiveList> policy = CSPDirectiveList::create(this, begin, position, type, source); |
// We disable 'eval()' even in the case of report-only policies, and rely on the check in the V8Initializer::codeGenerationCheckCallbackInMainThread callback to determine whether the call should execute or not. |
- if (!policy->allowScriptEval(0, SuppressReport)) |
+ if (!policy->allowEval(0, SuppressReport)) |
m_client->disableEval(policy->evalDisabledErrorMessage()); |
m_policies.append(policy.release()); |
@@ -1850,39 +1837,20 @@ bool ContentSecurityPolicy::allowInlineStyle(const String& contextURL, const WTF |
return isAllowedByAllWithContext<&CSPDirectiveList::allowInlineStyle>(m_policies, contextURL, contextLine, reportingStatus); |
} |
-bool ContentSecurityPolicy::allowScriptEval(ScriptState* state, ContentSecurityPolicy::ReportingStatus reportingStatus) const |
+bool ContentSecurityPolicy::allowEval(ScriptState* state, ContentSecurityPolicy::ReportingStatus reportingStatus) const |
{ |
- return isAllowedByAllWithState<&CSPDirectiveList::allowScriptEval>(m_policies, state, reportingStatus); |
-} |
- |
-bool ContentSecurityPolicy::allowStyleEval(ScriptState* state, ContentSecurityPolicy::ReportingStatus reportingStatus) const |
-{ |
- if (!experimentalFeaturesEnabled()) { |
- if (Document* document = this->document()) |
- UseCounter::count(*document, UseCounter::UnsafeEvalBlocksCSSOM); |
- return true; |
- } |
- return isAllowedByAllWithState<&CSPDirectiveList::allowStyleEval>(m_policies, state, reportingStatus); |
+ return isAllowedByAllWithState<&CSPDirectiveList::allowEval>(m_policies, state, reportingStatus); |
} |
String ContentSecurityPolicy::evalDisabledErrorMessage() const |
{ |
for (size_t i = 0; i < m_policies.size(); ++i) { |
- if (!m_policies[i]->allowScriptEval(0, SuppressReport)) |
+ if (!m_policies[i]->allowEval(0, SuppressReport)) |
return m_policies[i]->evalDisabledErrorMessage(); |
} |
return String(); |
} |
-String ContentSecurityPolicy::styleEvalDisabledErrorMessage() const |
-{ |
- for (size_t i = 0; i < m_policies.size(); ++i) { |
- if (!m_policies[i]->allowStyleEval(0, SuppressReport)) |
- return m_policies[i]->styleEvalDisabledErrorMessage(); |
- } |
- return String(); |
-} |
- |
bool ContentSecurityPolicy::allowPluginType(const String& type, const String& typeAttribute, const KURL& url, ContentSecurityPolicy::ReportingStatus reportingStatus) const |
{ |
for (size_t i = 0; i < m_policies.size(); ++i) { |