OLD | NEW |
1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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 "components/security_state/content/content_utils.h" | 5 #include "components/security_state/content/content_utils.h" |
6 | 6 |
7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
8 #include "base/test/histogram_tester.h" | 8 #include "base/test/histogram_tester.h" |
9 #include "components/security_state/core/security_state.h" | 9 #include "components/security_state/core/security_state.h" |
10 #include "components/security_state/core/switches.h" | 10 #include "components/security_state/core/switches.h" |
| 11 #include "components/strings/grit/components_strings.h" |
11 #include "content/public/browser/security_style_explanation.h" | 12 #include "content/public/browser/security_style_explanation.h" |
12 #include "content/public/browser/security_style_explanations.h" | 13 #include "content/public/browser/security_style_explanations.h" |
13 #include "net/cert/cert_status_flags.h" | 14 #include "net/cert/cert_status_flags.h" |
14 #include "net/ssl/ssl_cipher_suite_names.h" | 15 #include "net/ssl/ssl_cipher_suite_names.h" |
15 #include "net/ssl/ssl_connection_status_flags.h" | 16 #include "net/ssl/ssl_connection_status_flags.h" |
16 #include "net/test/cert_test_util.h" | 17 #include "net/test/cert_test_util.h" |
17 #include "net/test/test_data_directory.h" | 18 #include "net/test/test_data_directory.h" |
18 #include "testing/gtest/include/gtest/gtest.h" | 19 #include "testing/gtest/include/gtest/gtest.h" |
| 20 #include "ui/base/l10n/l10n_util.h" |
19 | 21 |
20 namespace { | 22 namespace { |
21 | 23 |
22 using security_state::GetSecurityStyle; | 24 using security_state::GetSecurityStyle; |
23 | 25 |
24 // Tests that SecurityInfo flags for subresources with certificate | 26 // Tests that SecurityInfo flags for subresources with certificate |
25 // errors are reflected in the SecurityStyleExplanations produced by | 27 // errors are reflected in the SecurityStyleExplanations produced by |
26 // GetSecurityStyle. | 28 // GetSecurityStyle. |
27 TEST(SecurityStateContentUtilsTest, GetSecurityStyleForContentWithCertErrors) { | 29 TEST(SecurityStateContentUtilsTest, GetSecurityStyleForContentWithCertErrors) { |
28 content::SecurityStyleExplanations explanations; | 30 content::SecurityStyleExplanations explanations; |
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
143 | 145 |
144 security_info.contained_mixed_form = false; | 146 security_info.contained_mixed_form = false; |
145 security_info.mixed_content_status = security_state::CONTENT_STATUS_DISPLAYED; | 147 security_info.mixed_content_status = security_state::CONTENT_STATUS_DISPLAYED; |
146 GetSecurityStyle(security_info, &explanations); | 148 GetSecurityStyle(security_info, &explanations); |
147 EXPECT_FALSE(explanations.contained_mixed_form); | 149 EXPECT_FALSE(explanations.contained_mixed_form); |
148 EXPECT_TRUE(explanations.displayed_mixed_content); | 150 EXPECT_TRUE(explanations.displayed_mixed_content); |
149 } | 151 } |
150 | 152 |
151 bool FindSecurityStyleExplanation( | 153 bool FindSecurityStyleExplanation( |
152 const std::vector<content::SecurityStyleExplanation>& explanations, | 154 const std::vector<content::SecurityStyleExplanation>& explanations, |
153 const char* summary, | 155 const std::string& summary, |
154 content::SecurityStyleExplanation* explanation) { | 156 content::SecurityStyleExplanation* explanation) { |
155 for (const auto& entry : explanations) { | 157 for (const auto& entry : explanations) { |
156 if (entry.summary == summary) { | 158 if (entry.summary == summary) { |
157 *explanation = entry; | 159 *explanation = entry; |
158 return true; | 160 return true; |
159 } | 161 } |
160 } | 162 } |
161 | 163 |
162 return false; | 164 return false; |
163 } | 165 } |
(...skipping 10 matching lines...) Expand all Loading... |
174 &security_info.connection_status); | 176 &security_info.connection_status); |
175 net::SSLConnectionStatusSetVersion(net::SSL_CONNECTION_VERSION_TLS1_2, | 177 net::SSLConnectionStatusSetVersion(net::SSL_CONNECTION_VERSION_TLS1_2, |
176 &security_info.connection_status); | 178 &security_info.connection_status); |
177 security_info.key_exchange_group = 29; // X25519 | 179 security_info.key_exchange_group = 29; // X25519 |
178 | 180 |
179 { | 181 { |
180 content::SecurityStyleExplanations explanations; | 182 content::SecurityStyleExplanations explanations; |
181 GetSecurityStyle(security_info, &explanations); | 183 GetSecurityStyle(security_info, &explanations); |
182 content::SecurityStyleExplanation explanation; | 184 content::SecurityStyleExplanation explanation; |
183 ASSERT_TRUE(FindSecurityStyleExplanation( | 185 ASSERT_TRUE(FindSecurityStyleExplanation( |
184 explanations.secure_explanations, "Secure Connection", &explanation)); | 186 explanations.secure_explanations, |
| 187 l10n_util::GetStringUTF8(IDS_STRONG_SSL_SUMMARY), &explanation)); |
185 EXPECT_EQ( | 188 EXPECT_EQ( |
186 "The connection to this site is encrypted and authenticated using a " | 189 "The connection to this site is encrypted and authenticated using a " |
187 "strong protocol (TLS 1.2), a strong key exchange (ECDHE_RSA with " | 190 "strong protocol (TLS 1.2), a strong key exchange (ECDHE_RSA with " |
188 "X25519), and a strong cipher (CHACHA20_POLY1305).", | 191 "X25519), and a strong cipher (CHACHA20_POLY1305).", |
189 explanation.description); | 192 explanation.description); |
190 } | 193 } |
191 | 194 |
192 // Some older cache entries may be missing the key exchange group, despite | 195 // Some older cache entries may be missing the key exchange group, despite |
193 // having a cipher which should supply one. | 196 // having a cipher which should supply one. |
194 security_info.key_exchange_group = 0; | 197 security_info.key_exchange_group = 0; |
195 { | 198 { |
196 content::SecurityStyleExplanations explanations; | 199 content::SecurityStyleExplanations explanations; |
197 GetSecurityStyle(security_info, &explanations); | 200 GetSecurityStyle(security_info, &explanations); |
198 content::SecurityStyleExplanation explanation; | 201 content::SecurityStyleExplanation explanation; |
199 ASSERT_TRUE(FindSecurityStyleExplanation( | 202 ASSERT_TRUE(FindSecurityStyleExplanation( |
200 explanations.secure_explanations, "Secure Connection", &explanation)); | 203 explanations.secure_explanations, |
| 204 l10n_util::GetStringUTF8(IDS_STRONG_SSL_SUMMARY), &explanation)); |
201 EXPECT_EQ( | 205 EXPECT_EQ( |
202 "The connection to this site is encrypted and authenticated using a " | 206 "The connection to this site is encrypted and authenticated using a " |
203 "strong protocol (TLS 1.2), a strong key exchange (ECDHE_RSA), and a " | 207 "strong protocol (TLS 1.2), a strong key exchange (ECDHE_RSA), and a " |
204 "strong cipher (CHACHA20_POLY1305).", | 208 "strong cipher (CHACHA20_POLY1305).", |
205 explanation.description); | 209 explanation.description); |
206 } | 210 } |
207 | 211 |
208 // TLS 1.3 ciphers use the key exchange group exclusively. | 212 // TLS 1.3 ciphers use the key exchange group exclusively. |
209 net::SSLConnectionStatusSetCipherSuite(0x1301 /* TLS_AES_128_GCM_SHA256 */, | 213 net::SSLConnectionStatusSetCipherSuite(0x1301 /* TLS_AES_128_GCM_SHA256 */, |
210 &security_info.connection_status); | 214 &security_info.connection_status); |
211 net::SSLConnectionStatusSetVersion(net::SSL_CONNECTION_VERSION_TLS1_3, | 215 net::SSLConnectionStatusSetVersion(net::SSL_CONNECTION_VERSION_TLS1_3, |
212 &security_info.connection_status); | 216 &security_info.connection_status); |
213 security_info.key_exchange_group = 29; // X25519 | 217 security_info.key_exchange_group = 29; // X25519 |
214 { | 218 { |
215 content::SecurityStyleExplanations explanations; | 219 content::SecurityStyleExplanations explanations; |
216 GetSecurityStyle(security_info, &explanations); | 220 GetSecurityStyle(security_info, &explanations); |
217 content::SecurityStyleExplanation explanation; | 221 content::SecurityStyleExplanation explanation; |
218 ASSERT_TRUE(FindSecurityStyleExplanation( | 222 ASSERT_TRUE(FindSecurityStyleExplanation( |
219 explanations.secure_explanations, "Secure Connection", &explanation)); | 223 explanations.secure_explanations, |
| 224 l10n_util::GetStringUTF8(IDS_STRONG_SSL_SUMMARY), &explanation)); |
220 EXPECT_EQ( | 225 EXPECT_EQ( |
221 "The connection to this site is encrypted and authenticated using a " | 226 "The connection to this site is encrypted and authenticated using a " |
222 "strong protocol (TLS 1.3), a strong key exchange (X25519), and a " | 227 "strong protocol (TLS 1.3), a strong key exchange (X25519), and a " |
223 "strong cipher (AES_128_GCM).", | 228 "strong cipher (AES_128_GCM).", |
224 explanation.description); | 229 explanation.description); |
225 } | 230 } |
226 } | 231 } |
227 | 232 |
228 // Tests that a security level of HTTP_SHOW_WARNING produces | 233 // Tests that a security level of HTTP_SHOW_WARNING produces |
229 // blink::WebSecurityStyleNeutral and an explanation if appropriate. | 234 // blink::WebSecurityStyleNeutral and an explanation if appropriate. |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
273 EXPECT_EQ(1u, explanations.insecure_explanations.size()); | 278 EXPECT_EQ(1u, explanations.insecure_explanations.size()); |
274 | 279 |
275 explanations.insecure_explanations.clear(); | 280 explanations.insecure_explanations.clear(); |
276 security_info.cert_missing_subject_alt_name = false; | 281 security_info.cert_missing_subject_alt_name = false; |
277 GetSecurityStyle(security_info, &explanations); | 282 GetSecurityStyle(security_info, &explanations); |
278 // Verify that no explanation is shown if the subjectAltName is present. | 283 // Verify that no explanation is shown if the subjectAltName is present. |
279 EXPECT_EQ(0u, explanations.insecure_explanations.size()); | 284 EXPECT_EQ(0u, explanations.insecure_explanations.size()); |
280 } | 285 } |
281 | 286 |
282 } // namespace | 287 } // namespace |
OLD | NEW |