Index: chrome/browser/ui/webui/chrome_url_data_manager_backend.cc |
=================================================================== |
--- chrome/browser/ui/webui/chrome_url_data_manager_backend.cc (revision 152132) |
+++ chrome/browser/ui/webui/chrome_url_data_manager_backend.cc (working copy) |
@@ -88,23 +88,38 @@ |
} |
}; |
-// It is OK to add URLs to this set which slightly reduces the CSP for them. |
-class ChromeURLContentSecurityPolicyObjectTagSet |
- : public std::set<std::string> { |
+// It is OK to add URLs to these maps which map specific URLs to custom CSP |
+// directives thereby slightly reducing the protection applied to the page. |
+class ChromeURLObjectSrcExceptionMap |
+ : public std::map<std::string, std::string> { |
public: |
- ChromeURLContentSecurityPolicyObjectTagSet() : std::set<std::string>() { |
- insert(chrome::kChromeUIPrintHost); |
+ ChromeURLObjectSrcExceptionMap() : std::map<std::string, std::string>() { |
+ insert(std::pair<std::string, std::string>( |
+ chrome::kChromeUIPrintHost, "object-src 'self';")); |
} |
}; |
+class ChromeURLFrameSrcExceptionMap |
+ : public std::map<std::string, std::string> { |
+ public: |
+ ChromeURLFrameSrcExceptionMap() : std::map<std::string, std::string>() { |
+ insert(std::pair<std::string, std::string>( |
+ chrome::kChromeUIUberHost, "frame-src chrome:;")); |
+ insert(std::pair<std::string, std::string>( |
+ chrome::kChromeUIUberFrameHost, "frame-src chrome:;")); |
+ } |
+}; |
+ |
base::LazyInstance<ChromeURLContentSecurityPolicyExceptionSet> |
g_chrome_url_content_security_policy_exception_set = |
LAZY_INSTANCE_INITIALIZER; |
-base::LazyInstance<ChromeURLContentSecurityPolicyObjectTagSet> |
- g_chrome_url_content_security_policy_object_tag_set = |
- LAZY_INSTANCE_INITIALIZER; |
+base::LazyInstance<ChromeURLObjectSrcExceptionMap> |
+ g_chrome_url_object_src_exception_map = LAZY_INSTANCE_INITIALIZER; |
+base::LazyInstance<ChromeURLFrameSrcExceptionMap> |
+ g_chrome_url_frame_src_exception_map = LAZY_INSTANCE_INITIALIZER; |
+ |
// Determine the least-privileged content security policy header, if any, |
// that is compatible with a given WebUI URL, and append it to the existing |
// response headers. |
@@ -115,13 +130,21 @@ |
if (exceptions->find(url.host()) == exceptions->end()) { |
std::string base = kChromeURLContentSecurityPolicyHeaderBase; |
- ChromeURLContentSecurityPolicyObjectTagSet* object_tag_set = |
- g_chrome_url_content_security_policy_object_tag_set.Pointer(); |
- base.append(object_tag_set->find(url.host()) == object_tag_set->end() ? |
- "object-src 'none';" : |
- "object-src 'self';"); |
+ ChromeURLObjectSrcExceptionMap* object_map = |
+ g_chrome_url_object_src_exception_map.Pointer(); |
+ ChromeURLObjectSrcExceptionMap::iterator object_iter = |
+ object_map->find(url.host()); |
+ base.append(object_iter == object_map->end() ? |
+ "object-src 'none';" : object_iter->second); |
+ ChromeURLFrameSrcExceptionMap* frame_map = |
+ g_chrome_url_frame_src_exception_map.Pointer(); |
+ ChromeURLFrameSrcExceptionMap::iterator frame_iter = |
+ frame_map->find(url.host()); |
+ base.append(frame_iter == frame_map->end() ? |
+ "frame-src 'none';" : frame_iter->second); |
+ |
headers->AddHeader(base); |
} |
} |