OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2011 Google, Inc. All rights reserved. | 2 * Copyright (C) 2011 Google, Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
6 * are met: | 6 * are met: |
7 * 1. Redistributions of source code must retain the above copyright | 7 * 1. Redistributions of source code must retain the above copyright |
8 * notice, this list of conditions and the following disclaimer. | 8 * notice, this list of conditions and the following disclaimer. |
9 * 2. Redistributions in binary form must reproduce the above copyright | 9 * 2. Redistributions in binary form must reproduce the above copyright |
10 * notice, this list of conditions and the following disclaimer in the | 10 * notice, this list of conditions and the following disclaimer in the |
(...skipping 403 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
414 if (algorithmMap.cspHashAlgorithm & hashAlgorithmsUsed) { | 414 if (algorithmMap.cspHashAlgorithm & hashAlgorithmsUsed) { |
415 bool digestSuccess = computeDigest(algorithmMap.algorithm, normalize
dSource.data(), normalizedSource.length(), digest); | 415 bool digestSuccess = computeDigest(algorithmMap.algorithm, normalize
dSource.data(), normalizedSource.length(), digest); |
416 if (digestSuccess && isAllowedByAllWithHash<allowed>(policies, CSPHa
shValue(algorithmMap.cspHashAlgorithm, digest))) | 416 if (digestSuccess && isAllowedByAllWithHash<allowed>(policies, CSPHa
shValue(algorithmMap.cspHashAlgorithm, digest))) |
417 return true; | 417 return true; |
418 } | 418 } |
419 } | 419 } |
420 | 420 |
421 return false; | 421 return false; |
422 } | 422 } |
423 | 423 |
| 424 template <bool (CSPDirectiveList::*hasPolicy)() const> |
| 425 bool hasAnyPolicy(const CSPDirectiveListVector& policies) |
| 426 { |
| 427 for (const auto& policy : policies) { |
| 428 if ((policy.get()->*hasPolicy)()) |
| 429 return true; |
| 430 } |
| 431 return false; |
| 432 } |
| 433 |
424 bool ContentSecurityPolicy::allowJavaScriptURLs(const String& contextURL, const
WTF::OrdinalNumber& contextLine, ContentSecurityPolicy::ReportingStatus reportin
gStatus) const | 434 bool ContentSecurityPolicy::allowJavaScriptURLs(const String& contextURL, const
WTF::OrdinalNumber& contextLine, ContentSecurityPolicy::ReportingStatus reportin
gStatus) const |
425 { | 435 { |
426 return isAllowedByAllWithContext<&CSPDirectiveList::allowJavaScriptURLs>(m_p
olicies, contextURL, contextLine, reportingStatus); | 436 return isAllowedByAllWithContext<&CSPDirectiveList::allowJavaScriptURLs>(m_p
olicies, contextURL, contextLine, reportingStatus); |
427 } | 437 } |
428 | 438 |
429 bool ContentSecurityPolicy::allowInlineEventHandlers(const String& contextURL, c
onst WTF::OrdinalNumber& contextLine, ContentSecurityPolicy::ReportingStatus rep
ortingStatus) const | 439 bool ContentSecurityPolicy::allowInlineEventHandlers(const String& contextURL, c
onst WTF::OrdinalNumber& contextLine, ContentSecurityPolicy::ReportingStatus rep
ortingStatus) const |
430 { | 440 { |
431 return isAllowedByAllWithContext<&CSPDirectiveList::allowInlineEventHandlers
>(m_policies, contextURL, contextLine, reportingStatus); | 441 return isAllowedByAllWithContext<&CSPDirectiveList::allowInlineEventHandlers
>(m_policies, contextURL, contextLine, reportingStatus); |
432 } | 442 } |
433 | 443 |
(...skipping 459 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
893 void ContentSecurityPolicy::reportBlockedScriptExecutionToInspector(const String
& directiveText) const | 903 void ContentSecurityPolicy::reportBlockedScriptExecutionToInspector(const String
& directiveText) const |
894 { | 904 { |
895 m_executionContext->reportBlockedScriptExecutionToInspector(directiveText); | 905 m_executionContext->reportBlockedScriptExecutionToInspector(directiveText); |
896 } | 906 } |
897 | 907 |
898 bool ContentSecurityPolicy::experimentalFeaturesEnabled() const | 908 bool ContentSecurityPolicy::experimentalFeaturesEnabled() const |
899 { | 909 { |
900 return RuntimeEnabledFeatures::experimentalContentSecurityPolicyFeaturesEnab
led(); | 910 return RuntimeEnabledFeatures::experimentalContentSecurityPolicyFeaturesEnab
led(); |
901 } | 911 } |
902 | 912 |
| 913 bool ContentSecurityPolicy::hasScriptPolicy() const |
| 914 { |
| 915 return hasAnyPolicy<&CSPDirectiveList::hasScriptPolicy>(m_policies); |
| 916 } |
| 917 |
| 918 bool ContentSecurityPolicy::hasStylePolicy() const |
| 919 { |
| 920 return hasAnyPolicy<&CSPDirectiveList::hasStylePolicy>(m_policies); |
| 921 } |
| 922 |
| 923 bool ContentSecurityPolicy::hasImagePolicy() const |
| 924 { |
| 925 return hasAnyPolicy<&CSPDirectiveList::hasImagePolicy>(m_policies); |
| 926 } |
| 927 |
| 928 bool ContentSecurityPolicy::hasFontPolicy() const |
| 929 { |
| 930 return hasAnyPolicy<&CSPDirectiveList::hasFontPolicy>(m_policies); |
| 931 } |
| 932 |
| 933 bool ContentSecurityPolicy::hasMediaPolicy() const |
| 934 { |
| 935 return hasAnyPolicy<&CSPDirectiveList::hasMediaPolicy>(m_policies); |
| 936 } |
| 937 |
| 938 bool ContentSecurityPolicy::hasPluginPolicy() const |
| 939 { |
| 940 return hasAnyPolicy<&CSPDirectiveList::hasPluginPolicy>(m_policies); |
| 941 } |
| 942 |
903 bool ContentSecurityPolicy::urlMatchesSelf(const KURL& url) const | 943 bool ContentSecurityPolicy::urlMatchesSelf(const KURL& url) const |
904 { | 944 { |
905 return m_selfSource->matches(url, DidNotRedirect); | 945 return m_selfSource->matches(url, DidNotRedirect); |
906 } | 946 } |
907 | 947 |
908 bool ContentSecurityPolicy::protocolMatchesSelf(const KURL& url) const | 948 bool ContentSecurityPolicy::protocolMatchesSelf(const KURL& url) const |
909 { | 949 { |
910 if (equalIgnoringCase("http", m_selfProtocol)) | 950 if (equalIgnoringCase("http", m_selfProtocol)) |
911 return url.protocolIsInHTTPFamily(); | 951 return url.protocolIsInHTTPFamily(); |
912 return equalIgnoringCase(url.protocol(), m_selfProtocol); | 952 return equalIgnoringCase(url.protocol(), m_selfProtocol); |
(...skipping 14 matching lines...) Expand all Loading... |
927 // Collisions have no security impact, so we can save space by storing only
the string's hash rather than the whole report. | 967 // Collisions have no security impact, so we can save space by storing only
the string's hash rather than the whole report. |
928 return !m_violationReportsSent.contains(report.impl()->hash()); | 968 return !m_violationReportsSent.contains(report.impl()->hash()); |
929 } | 969 } |
930 | 970 |
931 void ContentSecurityPolicy::didSendViolationReport(const String& report) | 971 void ContentSecurityPolicy::didSendViolationReport(const String& report) |
932 { | 972 { |
933 m_violationReportsSent.add(report.impl()->hash()); | 973 m_violationReportsSent.add(report.impl()->hash()); |
934 } | 974 } |
935 | 975 |
936 } // namespace blink | 976 } // namespace blink |
OLD | NEW |