Index: Source/core/frame/csp/CSPDirectiveList.cpp |
diff --git a/Source/core/frame/csp/CSPDirectiveList.cpp b/Source/core/frame/csp/CSPDirectiveList.cpp |
index 1f8bd418ed1300c5a8c2fd50f4e55857023ce2b6..2354f9d1905494abcdd5c0e9e30139a05e877613 100644 |
--- a/Source/core/frame/csp/CSPDirectiveList.cpp |
+++ b/Source/core/frame/csp/CSPDirectiveList.cpp |
@@ -414,6 +414,39 @@ const String& CSPDirectiveList::pluginTypesText() const |
return m_pluginTypes->text(); |
} |
+bool CSPDirectiveList::shouldSendCSPHeader(Resource::Type type) const |
+{ |
+ switch (type) { |
+ case Resource::XSLStyleSheet: |
+ ASSERT(RuntimeEnabledFeatures::xsltEnabled()); |
+ return !!operativeDirective(m_scriptSrc.get()); |
+ case Resource::Script: |
+ case Resource::ImportResource: |
+ return !!operativeDirective(m_scriptSrc.get()); |
+ case Resource::CSSStyleSheet: |
+ return !!operativeDirective(m_styleSrc.get()); |
+ case Resource::SVGDocument: |
+ case Resource::Image: |
+ return !!operativeDirective(m_imgSrc.get()); |
+ case Resource::Font: |
+ return !!operativeDirective(m_fontSrc.get()); |
+ case Resource::Media: |
+ case Resource::TextTrack: |
+ return !!operativeDirective(m_mediaSrc.get()); |
+ case Resource::Raw: |
+ // This request could be for a plugin, a child frame, a worker, or |
+ // something else. If there any potentially relevant policies, |
+ // send the CSP header; sending it unnecessarily can't hurt. |
+ return !!operativeDirective(m_objectSrc.get()) || !!m_pluginTypes.get() || !!operativeDirective(m_childSrc.get()) || !!operativeDirective(m_frameSrc.get()) || !!operativeDirective(m_connectSrc.get()) || !!operativeDirective(m_manifestSrc.get()) || !!m_formAction.get(); |
+ case Resource::MainResource: |
+ case Resource::LinkPrefetch: |
+ case Resource::LinkSubresource: |
+ return false; |
+ } |
+ ASSERT_NOT_REACHED(); |
+ return false; |
+} |
+ |
// policy = directive-list |
// directive-list = [ directive *( ";" [ directive ] ) ] |
// |