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

Side by Side Diff: content/common/content_security_policy/content_security_policy_unittest.cc

Issue 2764993002: CSP: group policies in didAddContentSecurityPolicy. (Closed)
Patch Set: Rebase. Created 3 years, 8 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 unified diff | Download patch
OLDNEW
1 // Copyright 2017 The Chromium Authors. All rights reserved. 1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/common/content_security_policy/csp_context.h" 5 #include "content/common/content_security_policy/csp_context.h"
6 #include "content/common/content_security_policy_header.h" 6 #include "content/common/content_security_policy_header.h"
7 #include "testing/gtest/include/gtest/gtest.h" 7 #include "testing/gtest/include/gtest/gtest.h"
8 8
9 namespace content { 9 namespace content {
10 10
11 namespace { 11 namespace {
12 class CSPContextTest : public CSPContext { 12 class CSPContextTest : public CSPContext {
13 public: 13 public:
14 const std::string& LastConsoleMessage() { return console_message_; } 14 const std::string& LastConsoleMessage() { return console_message_; }
15 15
16 private: 16 private:
17 void LogToConsole(const std::string& message) override { 17 void LogToConsole(const std::string& message) override {
18 console_message_ = message; 18 console_message_ = message;
19 } 19 }
20 std::string console_message_; 20 std::string console_message_;
21 }; 21 };
22 22
23 ContentSecurityPolicyHeader EmptyCspHeader() {
24 return ContentSecurityPolicyHeader(std::string(),
25 blink::WebContentSecurityPolicyTypeEnforce,
26 blink::WebContentSecurityPolicySourceHTTP);
27 }
28
23 } // namespace 29 } // namespace
24 30
25 TEST(ContentSecurityPolicy, NoDirective) { 31 TEST(ContentSecurityPolicy, NoDirective) {
26 CSPContextTest context; 32 CSPContextTest context;
27 std::vector<std::string> report_end_points; // empty 33 std::vector<std::string> report_end_points; // empty
28 ContentSecurityPolicy policy(blink::WebContentSecurityPolicyTypeEnforce, 34 ContentSecurityPolicy policy(EmptyCspHeader(), std::vector<CSPDirective>(),
29 blink::WebContentSecurityPolicySourceHTTP, 35 report_end_points);
30 std::vector<CSPDirective>(), report_end_points,
31 "" /* header */);
32 36
33 EXPECT_TRUE(ContentSecurityPolicy::Allow(policy, CSPDirective::FormAction, 37 EXPECT_TRUE(ContentSecurityPolicy::Allow(policy, CSPDirective::FormAction,
34 GURL("http://www.example.com"), 38 GURL("http://www.example.com"),
35 &context)); 39 &context));
36 EXPECT_EQ("", context.LastConsoleMessage()); 40 EXPECT_EQ("", context.LastConsoleMessage());
37 } 41 }
38 42
39 TEST(ContentSecurityPolicy, ReportViolation) { 43 TEST(ContentSecurityPolicy, ReportViolation) {
40 CSPContextTest context; 44 CSPContextTest context;
41 45
42 // source = "www.example.com" 46 // source = "www.example.com"
43 CSPSource source("", "www.example.com", false, url::PORT_UNSPECIFIED, false, 47 CSPSource source("", "www.example.com", false, url::PORT_UNSPECIFIED, false,
44 ""); 48 "");
45 CSPSourceList source_list(false, false, {source}); 49 CSPSourceList source_list(false, false, {source});
46 CSPDirective directive(CSPDirective::FormAction, source_list); 50 CSPDirective directive(CSPDirective::FormAction, source_list);
47 std::vector<std::string> report_end_points; // empty 51 std::vector<std::string> report_end_points; // empty
48 ContentSecurityPolicy policy(blink::WebContentSecurityPolicyTypeEnforce, 52 ContentSecurityPolicy policy(EmptyCspHeader(), {directive},
49 blink::WebContentSecurityPolicySourceHTTP, 53 report_end_points);
50 {directive}, report_end_points, "" /* header */);
51 54
52 EXPECT_FALSE(ContentSecurityPolicy::Allow(policy, CSPDirective::FormAction, 55 EXPECT_FALSE(ContentSecurityPolicy::Allow(policy, CSPDirective::FormAction,
53 GURL("http://www.not-example.com"), 56 GURL("http://www.not-example.com"),
54 &context)); 57 &context));
55 58
56 const char console_message[] = 59 const char console_message[] =
57 "Refused to send form data to 'http://www.not-example.com/' because it " 60 "Refused to send form data to 'http://www.not-example.com/' because it "
58 "violates the following Content Security Policy directive: \"form-action " 61 "violates the following Content Security Policy directive: \"form-action "
59 "www.example.com\".\n"; 62 "www.example.com\".\n";
60 EXPECT_EQ(console_message, context.LastConsoleMessage()); 63 EXPECT_EQ(console_message, context.LastConsoleMessage());
61 } 64 }
62 65
63 TEST(ContentSecurityPolicy, DirectiveFallback) { 66 TEST(ContentSecurityPolicy, DirectiveFallback) {
64 CSPSource source_a("http", "a.com", false, url::PORT_UNSPECIFIED, false, ""); 67 CSPSource source_a("http", "a.com", false, url::PORT_UNSPECIFIED, false, "");
65 CSPSource source_b("http", "b.com", false, url::PORT_UNSPECIFIED, false, ""); 68 CSPSource source_b("http", "b.com", false, url::PORT_UNSPECIFIED, false, "");
66 CSPSourceList source_list_a(false, false, {source_a}); 69 CSPSourceList source_list_a(false, false, {source_a});
67 CSPSourceList source_list_b(false, false, {source_b}); 70 CSPSourceList source_list_b(false, false, {source_b});
68 71
69 std::vector<std::string> report_end_points; // Empty. 72 std::vector<std::string> report_end_points; // Empty.
70 73
71 { 74 {
72 CSPContextTest context; 75 CSPContextTest context;
73 ContentSecurityPolicy policy( 76 ContentSecurityPolicy policy(
74 blink::WebContentSecurityPolicyTypeEnforce, 77 EmptyCspHeader(),
75 blink::WebContentSecurityPolicySourceHTTP,
76 {CSPDirective(CSPDirective::DefaultSrc, source_list_a)}, 78 {CSPDirective(CSPDirective::DefaultSrc, source_list_a)},
77 report_end_points, "" /* header */); 79 report_end_points);
78 EXPECT_FALSE(ContentSecurityPolicy::Allow(policy, CSPDirective::FrameSrc, 80 EXPECT_FALSE(ContentSecurityPolicy::Allow(policy, CSPDirective::FrameSrc,
79 GURL("http://b.com"), &context)); 81 GURL("http://b.com"), &context));
80 const char console_message[] = 82 const char console_message[] =
81 "Refused to frame 'http://b.com/' because it violates " 83 "Refused to frame 'http://b.com/' because it violates "
82 "the following Content Security Policy directive: \"default-src " 84 "the following Content Security Policy directive: \"default-src "
83 "http://a.com\". Note that 'frame-src' was not explicitly " 85 "http://a.com\". Note that 'frame-src' was not explicitly "
84 "set, so 'default-src' is used as a fallback.\n"; 86 "set, so 'default-src' is used as a fallback.\n";
85 EXPECT_EQ(console_message, context.LastConsoleMessage()); 87 EXPECT_EQ(console_message, context.LastConsoleMessage());
86 EXPECT_TRUE(ContentSecurityPolicy::Allow(policy, CSPDirective::FrameSrc, 88 EXPECT_TRUE(ContentSecurityPolicy::Allow(policy, CSPDirective::FrameSrc,
87 GURL("http://a.com"), &context)); 89 GURL("http://a.com"), &context));
88 } 90 }
89 { 91 {
90 CSPContextTest context; 92 CSPContextTest context;
91 ContentSecurityPolicy policy( 93 ContentSecurityPolicy policy(
92 blink::WebContentSecurityPolicyTypeEnforce, 94 EmptyCspHeader(), {CSPDirective(CSPDirective::ChildSrc, source_list_a)},
93 blink::WebContentSecurityPolicySourceHTTP, 95 report_end_points);
94 {CSPDirective(CSPDirective::ChildSrc, source_list_a)},
95 report_end_points, "" /* header */);
96 EXPECT_FALSE(ContentSecurityPolicy::Allow(policy, CSPDirective::FrameSrc, 96 EXPECT_FALSE(ContentSecurityPolicy::Allow(policy, CSPDirective::FrameSrc,
97 GURL("http://b.com"), &context)); 97 GURL("http://b.com"), &context));
98 const char console_message[] = 98 const char console_message[] =
99 "Refused to frame 'http://b.com/' because it violates " 99 "Refused to frame 'http://b.com/' because it violates "
100 "the following Content Security Policy directive: \"child-src " 100 "the following Content Security Policy directive: \"child-src "
101 "http://a.com\". Note that 'frame-src' was not explicitly " 101 "http://a.com\". Note that 'frame-src' was not explicitly "
102 "set, so 'child-src' is used as a fallback.\n"; 102 "set, so 'child-src' is used as a fallback.\n";
103 EXPECT_EQ(console_message, context.LastConsoleMessage()); 103 EXPECT_EQ(console_message, context.LastConsoleMessage());
104 EXPECT_TRUE(ContentSecurityPolicy::Allow(policy, CSPDirective::FrameSrc, 104 EXPECT_TRUE(ContentSecurityPolicy::Allow(policy, CSPDirective::FrameSrc,
105 GURL("http://a.com"), &context)); 105 GURL("http://a.com"), &context));
106 } 106 }
107 { 107 {
108 CSPContextTest context; 108 CSPContextTest context;
109 CSPSourceList source_list(false, false, {source_a, source_b}); 109 CSPSourceList source_list(false, false, {source_a, source_b});
110 ContentSecurityPolicy policy( 110 ContentSecurityPolicy policy(
111 blink::WebContentSecurityPolicyTypeEnforce, 111 EmptyCspHeader(),
112 blink::WebContentSecurityPolicySourceHTTP,
113 {CSPDirective(CSPDirective::FrameSrc, {source_list_a}), 112 {CSPDirective(CSPDirective::FrameSrc, {source_list_a}),
114 CSPDirective(CSPDirective::ChildSrc, {source_list_b})}, 113 CSPDirective(CSPDirective::ChildSrc, {source_list_b})},
115 report_end_points, "" /* header */); 114 report_end_points);
116 EXPECT_TRUE(ContentSecurityPolicy::Allow(policy, CSPDirective::FrameSrc, 115 EXPECT_TRUE(ContentSecurityPolicy::Allow(policy, CSPDirective::FrameSrc,
117 GURL("http://a.com"), &context)); 116 GURL("http://a.com"), &context));
118 EXPECT_FALSE(ContentSecurityPolicy::Allow(policy, CSPDirective::FrameSrc, 117 EXPECT_FALSE(ContentSecurityPolicy::Allow(policy, CSPDirective::FrameSrc,
119 GURL("http://b.com"), &context)); 118 GURL("http://b.com"), &context));
120 const char console_message[] = 119 const char console_message[] =
121 "Refused to frame 'http://b.com/' because it violates " 120 "Refused to frame 'http://b.com/' because it violates "
122 "the following Content Security Policy directive: \"frame-src " 121 "the following Content Security Policy directive: \"frame-src "
123 "http://a.com\".\n"; 122 "http://a.com\".\n";
124 EXPECT_EQ(console_message, context.LastConsoleMessage()); 123 EXPECT_EQ(console_message, context.LastConsoleMessage());
125 } 124 }
126 } 125 }
127 126
128 } // namespace content 127 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698