Index: Source/core/frame/csp/CSPDirectiveList.cpp |
diff --git a/Source/core/frame/csp/CSPDirectiveList.cpp b/Source/core/frame/csp/CSPDirectiveList.cpp |
index 4ea6b5046615a3ee61c4d4b570ab1ac00f98ff84..62ad141fb92a35e58bfd5cb20e5eca9646dbdfe9 100644 |
--- a/Source/core/frame/csp/CSPDirectiveList.cpp |
+++ b/Source/core/frame/csp/CSPDirectiveList.cpp |
@@ -18,6 +18,7 @@ CSPDirectiveList::CSPDirectiveList(ContentSecurityPolicy* policy, ContentSecurit |
, m_headerSource(source) |
, m_reportOnly(false) |
, m_haveSandboxPolicy(false) |
+ , m_haveSuboriginPolicy(false) |
, m_reflectedXSSDisposition(ReflectedXSSUnset) |
, m_didSetReferrerPolicy(false) |
, m_referrerPolicy(ReferrerPolicyDefault) |
@@ -524,6 +525,19 @@ void CSPDirectiveList::applySandboxPolicy(const String& name, const String& sand |
m_policy->reportInvalidSandboxFlags(invalidTokens); |
} |
+void CSPDirectiveList::applySuboriginPolicy(const String& name, const String& suboriginPolicy) |
+{ |
+ if (m_haveSuboriginPolicy) { |
+ m_policy->reportDuplicateDirective(name); |
+ return; |
+ } |
+ m_haveSuboriginPolicy = true; |
+ String invalidTokens; |
+ m_policy->enforceSuborigin(parseSuboriginName(suboriginPolicy, invalidTokens)); |
abarth-chromium
2014/07/31 04:56:47
parseSuboriginName <-- This function should be wit
jww
2014/10/21 23:51:06
Done.
|
+ if (!invalidTokens.isNull()) |
+ m_policy->reportInvalidSuboriginFlags(invalidTokens); |
+} |
+ |
void CSPDirectiveList::parseReflectedXSS(const String& name, const String& value) |
{ |
if (m_reflectedXSSDisposition != ReflectedXSSUnset) { |
@@ -668,6 +682,8 @@ void CSPDirectiveList::addDirective(const String& name, const String& value) |
parseReflectedXSS(name, value); |
else if (equalIgnoringCase(name, ContentSecurityPolicy::Referrer)) |
parseReferrer(name, value); |
+ else if (equalIgnoringCase(name, ContentSecurityPolicy::Suborigin)) |
+ applySuboriginPolicy(name, value); |
else |
m_policy->reportUnsupportedDirective(name); |
} else { |