Commit 7cd2c6d4 authored by Becca Hughes's avatar Becca Hughes Committed by Commit Bot

Add "connect-src" to content security policy

Add connect-src to CSP so we can override it
in untrusted WebUI.

BUG=1087443

Change-Id: Ib93c326e629c2225ddfad0740c4befc26d39b757
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2246902
Commit-Queue: Becca Hughes <beccahughes@chromium.org>
Reviewed-by: default avatarNasko Oskov <nasko@chromium.org>
Reviewed-by: default avatarJeremy Roman <jbroman@chromium.org>
Reviewed-by: default avatarClark DuVall <cduvall@chromium.org>
Cr-Commit-Position: refs/heads/master@{#781352}
parent 582f4a6a
...@@ -174,7 +174,8 @@ scoped_refptr<net::HttpResponseHeaders> URLDataManagerBackend::GetHeaders( ...@@ -174,7 +174,8 @@ scoped_refptr<net::HttpResponseHeaders> URLDataManagerBackend::GetHeaders(
network::mojom::CSPDirectiveName::ObjectSrc, network::mojom::CSPDirectiveName::ObjectSrc,
network::mojom::CSPDirectiveName::ScriptSrc, network::mojom::CSPDirectiveName::ScriptSrc,
network::mojom::CSPDirectiveName::StyleSrc, network::mojom::CSPDirectiveName::StyleSrc,
network::mojom::CSPDirectiveName::WorkerSrc}; network::mojom::CSPDirectiveName::WorkerSrc,
network::mojom::CSPDirectiveName::ConnectSrc};
for (auto& directive : kAllDirectives) { for (auto& directive : kAllDirectives) {
csp_header.append(source->GetContentSecurityPolicy(directive)); csp_header.append(source->GetContentSecurityPolicy(directive));
......
...@@ -291,6 +291,8 @@ TEST_F(WebUIDataSourceTest, SetCspValues) { ...@@ -291,6 +291,8 @@ TEST_F(WebUIDataSourceTest, SetCspValues) {
network::mojom::CSPDirectiveName::ScriptSrc)); network::mojom::CSPDirectiveName::ScriptSrc));
EXPECT_EQ("", url_data_source->GetContentSecurityPolicy( EXPECT_EQ("", url_data_source->GetContentSecurityPolicy(
network::mojom::CSPDirectiveName::StyleSrc)); network::mojom::CSPDirectiveName::StyleSrc));
EXPECT_EQ("", url_data_source->GetContentSecurityPolicy(
network::mojom::CSPDirectiveName::ConnectSrc));
// Override each directive and test it updates the underlying URLDataSource. // Override each directive and test it updates the underlying URLDataSource.
source()->OverrideContentSecurityPolicy( source()->OverrideContentSecurityPolicy(
...@@ -336,6 +338,13 @@ TEST_F(WebUIDataSourceTest, SetCspValues) { ...@@ -336,6 +338,13 @@ TEST_F(WebUIDataSourceTest, SetCspValues) {
EXPECT_EQ("style-src 'self' 'unsafe-inline';", EXPECT_EQ("style-src 'self' 'unsafe-inline';",
url_data_source->GetContentSecurityPolicy( url_data_source->GetContentSecurityPolicy(
network::mojom::CSPDirectiveName::StyleSrc)); network::mojom::CSPDirectiveName::StyleSrc));
source()->OverrideContentSecurityPolicy(
network::mojom::CSPDirectiveName::ConnectSrc,
"connect-src 'self' 'unsafe-inline';");
EXPECT_EQ("connect-src 'self' 'unsafe-inline';",
url_data_source->GetContentSecurityPolicy(
network::mojom::CSPDirectiveName::ConnectSrc));
} }
} // namespace content } // namespace content
...@@ -91,6 +91,7 @@ std::string URLDataSource::GetContentSecurityPolicy( ...@@ -91,6 +91,7 @@ std::string URLDataSource::GetContentSecurityPolicy(
return "script-src chrome://resources 'self';"; return "script-src chrome://resources 'self';";
case network::mojom::CSPDirectiveName::FrameAncestors: case network::mojom::CSPDirectiveName::FrameAncestors:
return "frame-ancestors 'none';"; return "frame-ancestors 'none';";
case network::mojom::CSPDirectiveName::ConnectSrc:
case network::mojom::CSPDirectiveName::FormAction: case network::mojom::CSPDirectiveName::FormAction:
case network::mojom::CSPDirectiveName::FrameSrc: case network::mojom::CSPDirectiveName::FrameSrc:
case network::mojom::CSPDirectiveName::ImgSrc: case network::mojom::CSPDirectiveName::ImgSrc:
......
...@@ -41,6 +41,7 @@ static CSPDirectiveName CSPFallback(CSPDirectiveName directive) { ...@@ -41,6 +41,7 @@ static CSPDirectiveName CSPFallback(CSPDirectiveName directive) {
case CSPDirectiveName::ScriptSrc: case CSPDirectiveName::ScriptSrc:
case CSPDirectiveName::StyleSrc: case CSPDirectiveName::StyleSrc:
case CSPDirectiveName::WorkerSrc: case CSPDirectiveName::WorkerSrc:
case CSPDirectiveName::ConnectSrc:
return CSPDirectiveName::Unknown; return CSPDirectiveName::Unknown;
case CSPDirectiveName::FrameSrc: case CSPDirectiveName::FrameSrc:
...@@ -90,6 +91,7 @@ const char* ErrorMessage(CSPDirectiveName directive) { ...@@ -90,6 +91,7 @@ const char* ErrorMessage(CSPDirectiveName directive) {
case CSPDirectiveName::ScriptSrc: case CSPDirectiveName::ScriptSrc:
case CSPDirectiveName::StyleSrc: case CSPDirectiveName::StyleSrc:
case CSPDirectiveName::WorkerSrc: case CSPDirectiveName::WorkerSrc:
case CSPDirectiveName::ConnectSrc:
NOTREACHED(); NOTREACHED();
return nullptr; return nullptr;
}; };
...@@ -638,6 +640,8 @@ CSPDirectiveName ToCSPDirectiveName(const std::string& name) { ...@@ -638,6 +640,8 @@ CSPDirectiveName ToCSPDirectiveName(const std::string& name) {
return CSPDirectiveName::StyleSrc; return CSPDirectiveName::StyleSrc;
if (name == "worker-src") if (name == "worker-src")
return CSPDirectiveName::WorkerSrc; return CSPDirectiveName::WorkerSrc;
if (name == "connect-src")
return CSPDirectiveName::ConnectSrc;
return CSPDirectiveName::Unknown; return CSPDirectiveName::Unknown;
} }
...@@ -667,6 +671,8 @@ std::string ToString(CSPDirectiveName name) { ...@@ -667,6 +671,8 @@ std::string ToString(CSPDirectiveName name) {
return "style-src"; return "style-src";
case CSPDirectiveName::WorkerSrc: case CSPDirectiveName::WorkerSrc:
return "worker-src"; return "worker-src";
case CSPDirectiveName::ConnectSrc:
return "connect-src";
case CSPDirectiveName::Unknown: case CSPDirectiveName::Unknown:
return ""; return "";
} }
......
...@@ -86,7 +86,8 @@ enum CSPDirectiveName { ...@@ -86,7 +86,8 @@ enum CSPDirectiveName {
ObjectSrc, ObjectSrc,
ScriptSrc, ScriptSrc,
StyleSrc, StyleSrc,
WorkerSrc WorkerSrc,
ConnectSrc
}; };
struct ContentSecurityPolicy { struct ContentSecurityPolicy {
......
...@@ -217,6 +217,8 @@ WebString ConvertToPublic( ...@@ -217,6 +217,8 @@ WebString ConvertToPublic(
return "style-src"; return "style-src";
case CSPDirectiveName::WorkerSrc: case CSPDirectiveName::WorkerSrc:
return "worker-src"; return "worker-src";
case CSPDirectiveName::ConnectSrc:
return "connect-src";
case CSPDirectiveName::Unknown: case CSPDirectiveName::Unknown:
NOTREACHED(); NOTREACHED();
return ""; return "";
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment