Chromium Code Reviews| 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); |