Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(574)

Unified Diff: Source/core/fetch/ResourceFetcher.cpp

Issue 1009583003: Add CSP header for resources with an active policy (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: test tweaks Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: Source/core/fetch/ResourceFetcher.cpp
diff --git a/Source/core/fetch/ResourceFetcher.cpp b/Source/core/fetch/ResourceFetcher.cpp
index dbb5b13878cb8bcad01e57183e89664436b0b989..a05263b735c3444645aefe040beb675498cf804a 100644
--- a/Source/core/fetch/ResourceFetcher.cpp
+++ b/Source/core/fetch/ResourceFetcher.cpp
@@ -685,7 +685,8 @@ ResourcePtr<Resource> ResourceFetcher::requestResource(Resource::Type type, Fetc
TRACE_EVENT0("blink", "ResourceFetcher::requestResource");
upgradeInsecureRequest(request);
- addClientHintsIfNeccessary(request);
+ addClientHintsIfNecessary(request);
+ addCSPHeaderIfNecessary(type, request);
KURL url = request.resourceRequest().url();
@@ -859,7 +860,7 @@ void ResourceFetcher::upgradeInsecureRequest(FetchRequest& fetchRequest)
}
}
-void ResourceFetcher::addClientHintsIfNeccessary(FetchRequest& fetchRequest)
+void ResourceFetcher::addClientHintsIfNecessary(FetchRequest& fetchRequest)
{
if (!RuntimeEnabledFeatures::clientHintsEnabled() || !document() || !frame())
return;
@@ -872,6 +873,58 @@ void ResourceFetcher::addClientHintsIfNeccessary(FetchRequest& fetchRequest)
fetchRequest.mutableResourceRequest().addHTTPHeaderField("RW", AtomicString(String::number(frame()->view()->viewportWidth())));
}
+void ResourceFetcher::addCSPHeaderIfNecessary(Resource::Type type, FetchRequest& fetchRequest)
Mike West 2015/03/16 10:39:10 japhet@ has been refactoring things; I think this
estark 2015/03/17 18:27:34 Done.
+{
+ if (!document() || !frame())
+ return;
+
+ const ContentSecurityPolicy* csp = document()->contentSecurityPolicy();
+
+ switch (type) {
+ case Resource::XSLStyleSheet:
+ ASSERT(RuntimeEnabledFeatures::xsltEnabled());
+ if (!csp->hasScriptPolicy())
+ return;
+ break;
+ case Resource::Script:
+ case Resource::ImportResource:
+ if (!csp->hasScriptPolicy())
+ return;
+ break;
+ case Resource::CSSStyleSheet:
+ if (!csp->hasStylePolicy())
+ return;
+ break;
+ case Resource::SVGDocument:
+ case Resource::Image:
+ if (!csp->hasImagePolicy())
+ return;
+ break;
+ case Resource::Font:
+ if (!csp->hasFontPolicy())
+ return;
+ break;
+ case Resource::Media:
+ case Resource::TextTrack:
+ if (!csp->hasMediaPolicy())
+ return;
+ break;
+ case Resource::Raw:
+ // As long as there is a plugin policy in effect, send the CSP
+ // header. This request might not be for a plugin, but sending it
+ // on non-plugin elements can't hurt.
+ if (!csp->hasPluginPolicy())
+ return;
+ break;
+ case Resource::MainResource:
+ case Resource::LinkPrefetch:
+ case Resource::LinkSubresource:
+ return;
+ }
Mike West 2015/03/16 10:39:10 I'd suggest moving this switch into CSP, basically
estark 2015/03/17 18:27:34 Done. I made the method called |shouldSendCSPHeade
+
+ fetchRequest.mutableResourceRequest().addHTTPHeaderField("CSP", "active");
+}
+
ResourcePtr<Resource> ResourceFetcher::createResourceForRevalidation(const FetchRequest& request, Resource* resource)
{
ASSERT(resource);

Powered by Google App Engine
This is Rietveld 408576698