Index: content/browser/webui/url_data_manager_backend.cc |
diff --git a/content/browser/webui/url_data_manager_backend.cc b/content/browser/webui/url_data_manager_backend.cc |
index fe1015f87e445c77ae396386df9182b94fc81cd0..f2a6823a9ebe366e9fdd47a77c80b923218b10c1 100644 |
--- a/content/browser/webui/url_data_manager_backend.cc |
+++ b/content/browser/webui/url_data_manager_backend.cc |
@@ -53,7 +53,7 @@ namespace content { |
namespace { |
const char kChromeURLContentSecurityPolicyHeaderBase[] = |
- "Content-Security-Policy: script-src chrome://resources 'self'"; |
+ "Content-Security-Policy: "; |
const char kChromeURLXFrameOptionsHeader[] = "X-Frame-Options: DENY"; |
static const char kNetworkErrorKey[] = "netError"; |
@@ -153,11 +153,26 @@ class URLRequestChromeJob : public net::URLRequestJob { |
content_security_policy_object_source_ = data; |
} |
+ void set_content_security_policy_script_source( |
+ const std::string& data) { |
+ content_security_policy_script_source_ = data; |
+ } |
+ |
void set_content_security_policy_frame_source( |
const std::string& data) { |
content_security_policy_frame_source_ = data; |
} |
+ void set_content_security_policy_style_source( |
+ const std::string& data) { |
+ content_security_policy_style_source_ = data; |
+ } |
+ |
+ void set_content_security_policy_image_source( |
+ const std::string& data) { |
+ content_security_policy_image_source_ = data; |
+ } |
+ |
void set_deny_xframe_options(bool deny_xframe_options) { |
deny_xframe_options_ = deny_xframe_options; |
} |
@@ -188,9 +203,6 @@ class URLRequestChromeJob : public net::URLRequestJob { |
const GURL& url, |
const base::WeakPtr<URLRequestChromeJob>& job); |
- // Specific resources require unsafe-eval in the Content Security Policy. |
- bool RequiresUnsafeEval() const; |
- |
// Do the actual copy from data_ (the data we're serving) into |buf|. |
// Separate from ReadRawData so we can handle async I/O. Returns the number of |
// bytes read. |
@@ -215,8 +227,11 @@ class URLRequestChromeJob : public net::URLRequestJob { |
bool add_content_security_policy_; |
// These are used with the CSP. |
+ std::string content_security_policy_script_source_; |
std::string content_security_policy_object_source_; |
std::string content_security_policy_frame_source_; |
+ std::string content_security_policy_style_source_; |
+ std::string content_security_policy_image_source_; |
// If true, sets the "X-Frame-Options: DENY" header. |
bool deny_xframe_options_; |
@@ -248,8 +263,6 @@ URLRequestChromeJob::URLRequestChromeJob(net::URLRequest* request, |
pending_buf_size_(0), |
allow_caching_(true), |
add_content_security_policy_(true), |
- content_security_policy_object_source_("object-src 'none';"), |
- content_security_policy_frame_source_("frame-src 'none';"), |
deny_xframe_options_(true), |
send_content_type_header_(false), |
is_incognito_(is_incognito), |
@@ -326,9 +339,11 @@ void URLRequestChromeJob::GetResponseInfo(net::HttpResponseInfo* info) { |
// response headers. |
if (add_content_security_policy_) { |
std::string base = kChromeURLContentSecurityPolicyHeaderBase; |
- base.append(RequiresUnsafeEval() ? " 'unsafe-eval'; " : "; "); |
+ base.append(content_security_policy_script_source_); |
base.append(content_security_policy_object_source_); |
base.append(content_security_policy_frame_source_); |
+ base.append(content_security_policy_style_source_); |
+ base.append(content_security_policy_image_source_); |
info->headers->AddHeader(base); |
} |
@@ -438,12 +453,6 @@ void URLRequestChromeJob::StartAsync(bool allowed) { |
} |
} |
-// TODO(tsepez,mfoltz): Refine this method when tests have been fixed to not use |
-// eval()/new Function(). http://crbug.com/525224 |
-bool URLRequestChromeJob::RequiresUnsafeEval() const { |
- return true; |
-} |
- |
namespace { |
// Gets mime type for data that is available from |source| by |path|. |
@@ -636,10 +645,16 @@ bool URLDataManagerBackend::StartRequest(const net::URLRequest* request, |
job->set_allow_caching(source->source()->AllowCaching()); |
job->set_add_content_security_policy( |
source->source()->ShouldAddContentSecurityPolicy()); |
+ job->set_content_security_policy_script_source( |
+ source->source()->GetContentSecurityPolicyScriptSrc()); |
job->set_content_security_policy_object_source( |
source->source()->GetContentSecurityPolicyObjectSrc()); |
job->set_content_security_policy_frame_source( |
source->source()->GetContentSecurityPolicyFrameSrc()); |
+ job->set_content_security_policy_style_source( |
+ source->source()->GetContentSecurityPolicyStyleSrc()); |
+ job->set_content_security_policy_image_source( |
+ source->source()->GetContentSecurityPolicyImgSrc()); |
job->set_deny_xframe_options( |
source->source()->ShouldDenyXFrameOptions()); |
job->set_send_content_type_header( |