OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "chrome/browser/ui/website_settings/website_settings.h" | 5 #include "chrome/browser/ui/website_settings/website_settings.h" |
6 | 6 |
7 #include "base/at_exit.h" | 7 #include "base/at_exit.h" |
8 #include "base/message_loop.h" | 8 #include "base/message_loop.h" |
9 #include "base/string16.h" | 9 #include "base/string16.h" |
10 #include "base/utf_string_conversions.h" | 10 #include "base/utf_string_conversions.h" |
(...skipping 13 matching lines...) Expand all Loading... |
24 #include "net/base/x509_certificate.h" | 24 #include "net/base/x509_certificate.h" |
25 #include "testing/gmock/include/gmock/gmock.h" | 25 #include "testing/gmock/include/gmock/gmock.h" |
26 #include "testing/gtest/include/gtest/gtest.h" | 26 #include "testing/gtest/include/gtest/gtest.h" |
27 | 27 |
28 using content::SSLStatus; | 28 using content::SSLStatus; |
29 using namespace testing; | 29 using namespace testing; |
30 | 30 |
31 namespace { | 31 namespace { |
32 | 32 |
33 // SSL cipher suite like specified in RFC5246 Appendix A.5. "The Cipher Suite". | 33 // SSL cipher suite like specified in RFC5246 Appendix A.5. "The Cipher Suite". |
34 static int TLS_RSA_WITH_AES_256_CBC_SHA256 = 0x3D; | 34 // Without the CR_ prefix, this clashes with the OS X 10.8 headers. |
| 35 int CR_TLS_RSA_WITH_AES_256_CBC_SHA256 = 0x3D; |
35 | 36 |
36 int SetSSLVersion(int connection_status, int version) { | 37 int SetSSLVersion(int connection_status, int version) { |
37 // Clear SSL version bits (Bits 20, 21 and 22). | 38 // Clear SSL version bits (Bits 20, 21 and 22). |
38 connection_status &= | 39 connection_status &= |
39 ~(net::SSL_CONNECTION_VERSION_MASK << net::SSL_CONNECTION_VERSION_SHIFT); | 40 ~(net::SSL_CONNECTION_VERSION_MASK << net::SSL_CONNECTION_VERSION_SHIFT); |
40 int bitmask = version << net::SSL_CONNECTION_VERSION_SHIFT; | 41 int bitmask = version << net::SSL_CONNECTION_VERSION_SHIFT; |
41 return bitmask | connection_status; | 42 return bitmask | connection_status; |
42 } | 43 } |
43 | 44 |
44 int SetSSLCipherSuite(int connection_status, int cipher_suite) { | 45 int SetSSLCipherSuite(int connection_status, int cipher_suite) { |
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
215 EXPECT_EQ(string16(), website_settings()->organization_name()); | 216 EXPECT_EQ(string16(), website_settings()->organization_name()); |
216 } | 217 } |
217 | 218 |
218 TEST_F(WebsiteSettingsTest, HTTPSConnection) { | 219 TEST_F(WebsiteSettingsTest, HTTPSConnection) { |
219 ssl_.security_style = content::SECURITY_STYLE_AUTHENTICATED; | 220 ssl_.security_style = content::SECURITY_STYLE_AUTHENTICATED; |
220 ssl_.cert_id = cert_id(); | 221 ssl_.cert_id = cert_id(); |
221 ssl_.cert_status = 0; | 222 ssl_.cert_status = 0; |
222 ssl_.security_bits = 81; // No error if > 80. | 223 ssl_.security_bits = 81; // No error if > 80. |
223 int status = 0; | 224 int status = 0; |
224 status = SetSSLVersion(status, net::SSL_CONNECTION_VERSION_TLS1); | 225 status = SetSSLVersion(status, net::SSL_CONNECTION_VERSION_TLS1); |
225 status = SetSSLCipherSuite(status, TLS_RSA_WITH_AES_256_CBC_SHA256); | 226 status = SetSSLCipherSuite(status, CR_TLS_RSA_WITH_AES_256_CBC_SHA256); |
226 ssl_.connection_status = status; | 227 ssl_.connection_status = status; |
227 | 228 |
228 SetDefaultUIExpectations(mock_ui()); | 229 SetDefaultUIExpectations(mock_ui()); |
229 | 230 |
230 EXPECT_EQ(WebsiteSettings::SITE_CONNECTION_STATUS_ENCRYPTED, | 231 EXPECT_EQ(WebsiteSettings::SITE_CONNECTION_STATUS_ENCRYPTED, |
231 website_settings()->site_connection_status()); | 232 website_settings()->site_connection_status()); |
232 EXPECT_EQ(WebsiteSettings::SITE_IDENTITY_STATUS_CERT, | 233 EXPECT_EQ(WebsiteSettings::SITE_IDENTITY_STATUS_CERT, |
233 website_settings()->site_identity_status()); | 234 website_settings()->site_identity_status()); |
234 EXPECT_EQ(string16(), website_settings()->organization_name()); | 235 EXPECT_EQ(string16(), website_settings()->organization_name()); |
235 } | 236 } |
236 | 237 |
237 TEST_F(WebsiteSettingsTest, HTTPSMixedContent) { | 238 TEST_F(WebsiteSettingsTest, HTTPSMixedContent) { |
238 ssl_.security_style = content::SECURITY_STYLE_AUTHENTICATED; | 239 ssl_.security_style = content::SECURITY_STYLE_AUTHENTICATED; |
239 ssl_.cert_id = cert_id(); | 240 ssl_.cert_id = cert_id(); |
240 ssl_.cert_status = 0; | 241 ssl_.cert_status = 0; |
241 ssl_.security_bits = 81; // No error if > 80. | 242 ssl_.security_bits = 81; // No error if > 80. |
242 ssl_.content_status = SSLStatus::DISPLAYED_INSECURE_CONTENT; | 243 ssl_.content_status = SSLStatus::DISPLAYED_INSECURE_CONTENT; |
243 int status = 0; | 244 int status = 0; |
244 status = SetSSLVersion(status, net::SSL_CONNECTION_VERSION_TLS1); | 245 status = SetSSLVersion(status, net::SSL_CONNECTION_VERSION_TLS1); |
245 status = SetSSLCipherSuite(status, TLS_RSA_WITH_AES_256_CBC_SHA256); | 246 status = SetSSLCipherSuite(status, CR_TLS_RSA_WITH_AES_256_CBC_SHA256); |
246 ssl_.connection_status = status; | 247 ssl_.connection_status = status; |
247 | 248 |
248 SetDefaultUIExpectations(mock_ui()); | 249 SetDefaultUIExpectations(mock_ui()); |
249 | 250 |
250 EXPECT_EQ(WebsiteSettings::SITE_CONNECTION_STATUS_MIXED_CONTENT, | 251 EXPECT_EQ(WebsiteSettings::SITE_CONNECTION_STATUS_MIXED_CONTENT, |
251 website_settings()->site_connection_status()); | 252 website_settings()->site_connection_status()); |
252 EXPECT_EQ(WebsiteSettings::SITE_IDENTITY_STATUS_CERT, | 253 EXPECT_EQ(WebsiteSettings::SITE_IDENTITY_STATUS_CERT, |
253 website_settings()->site_identity_status()); | 254 website_settings()->site_identity_status()); |
254 EXPECT_EQ(string16(), website_settings()->organization_name()); | 255 EXPECT_EQ(string16(), website_settings()->organization_name()); |
255 } | 256 } |
256 | 257 |
257 TEST_F(WebsiteSettingsTest, HTTPSEVCert) { | 258 TEST_F(WebsiteSettingsTest, HTTPSEVCert) { |
258 scoped_refptr<net::X509Certificate> ev_cert = | 259 scoped_refptr<net::X509Certificate> ev_cert = |
259 net::X509Certificate::CreateFromBytes( | 260 net::X509Certificate::CreateFromBytes( |
260 reinterpret_cast<const char*>(google_der), | 261 reinterpret_cast<const char*>(google_der), |
261 sizeof(google_der)); | 262 sizeof(google_der)); |
262 int ev_cert_id = 1; | 263 int ev_cert_id = 1; |
263 EXPECT_CALL(*cert_store(), RetrieveCert(ev_cert_id, _)).WillRepeatedly( | 264 EXPECT_CALL(*cert_store(), RetrieveCert(ev_cert_id, _)).WillRepeatedly( |
264 DoAll(SetArgPointee<1>(ev_cert), Return(true))); | 265 DoAll(SetArgPointee<1>(ev_cert), Return(true))); |
265 | 266 |
266 ssl_.security_style = content::SECURITY_STYLE_AUTHENTICATED; | 267 ssl_.security_style = content::SECURITY_STYLE_AUTHENTICATED; |
267 ssl_.cert_id = ev_cert_id; | 268 ssl_.cert_id = ev_cert_id; |
268 ssl_.cert_status = net::CERT_STATUS_IS_EV; | 269 ssl_.cert_status = net::CERT_STATUS_IS_EV; |
269 ssl_.security_bits = 81; // No error if > 80. | 270 ssl_.security_bits = 81; // No error if > 80. |
270 ssl_.content_status = SSLStatus::DISPLAYED_INSECURE_CONTENT; | 271 ssl_.content_status = SSLStatus::DISPLAYED_INSECURE_CONTENT; |
271 int status = 0; | 272 int status = 0; |
272 status = SetSSLVersion(status, net::SSL_CONNECTION_VERSION_TLS1); | 273 status = SetSSLVersion(status, net::SSL_CONNECTION_VERSION_TLS1); |
273 status = SetSSLCipherSuite(status, TLS_RSA_WITH_AES_256_CBC_SHA256); | 274 status = SetSSLCipherSuite(status, CR_TLS_RSA_WITH_AES_256_CBC_SHA256); |
274 ssl_.connection_status = status; | 275 ssl_.connection_status = status; |
275 | 276 |
276 SetDefaultUIExpectations(mock_ui()); | 277 SetDefaultUIExpectations(mock_ui()); |
277 | 278 |
278 EXPECT_EQ(WebsiteSettings::SITE_CONNECTION_STATUS_MIXED_CONTENT, | 279 EXPECT_EQ(WebsiteSettings::SITE_CONNECTION_STATUS_MIXED_CONTENT, |
279 website_settings()->site_connection_status()); | 280 website_settings()->site_connection_status()); |
280 EXPECT_EQ(WebsiteSettings::SITE_IDENTITY_STATUS_EV_CERT, | 281 EXPECT_EQ(WebsiteSettings::SITE_IDENTITY_STATUS_EV_CERT, |
281 website_settings()->site_identity_status()); | 282 website_settings()->site_identity_status()); |
282 EXPECT_EQ(UTF8ToUTF16("Google Inc"), website_settings()->organization_name()); | 283 EXPECT_EQ(UTF8ToUTF16("Google Inc"), website_settings()->organization_name()); |
283 } | 284 } |
284 | 285 |
285 TEST_F(WebsiteSettingsTest, HTTPSRevocationError) { | 286 TEST_F(WebsiteSettingsTest, HTTPSRevocationError) { |
286 ssl_.security_style = content::SECURITY_STYLE_AUTHENTICATED; | 287 ssl_.security_style = content::SECURITY_STYLE_AUTHENTICATED; |
287 ssl_.cert_id = cert_id(); | 288 ssl_.cert_id = cert_id(); |
288 ssl_.cert_status = net::CERT_STATUS_UNABLE_TO_CHECK_REVOCATION; | 289 ssl_.cert_status = net::CERT_STATUS_UNABLE_TO_CHECK_REVOCATION; |
289 ssl_.security_bits = 81; // No error if > 80. | 290 ssl_.security_bits = 81; // No error if > 80. |
290 int status = 0; | 291 int status = 0; |
291 status = SetSSLVersion(status, net::SSL_CONNECTION_VERSION_TLS1); | 292 status = SetSSLVersion(status, net::SSL_CONNECTION_VERSION_TLS1); |
292 status = SetSSLCipherSuite(status, TLS_RSA_WITH_AES_256_CBC_SHA256); | 293 status = SetSSLCipherSuite(status, CR_TLS_RSA_WITH_AES_256_CBC_SHA256); |
293 ssl_.connection_status = status; | 294 ssl_.connection_status = status; |
294 | 295 |
295 SetDefaultUIExpectations(mock_ui()); | 296 SetDefaultUIExpectations(mock_ui()); |
296 | 297 |
297 EXPECT_EQ(WebsiteSettings::SITE_CONNECTION_STATUS_ENCRYPTED, | 298 EXPECT_EQ(WebsiteSettings::SITE_CONNECTION_STATUS_ENCRYPTED, |
298 website_settings()->site_connection_status()); | 299 website_settings()->site_connection_status()); |
299 EXPECT_EQ(WebsiteSettings::SITE_IDENTITY_STATUS_CERT_REVOCATION_UNKNOWN, | 300 EXPECT_EQ(WebsiteSettings::SITE_IDENTITY_STATUS_CERT_REVOCATION_UNKNOWN, |
300 website_settings()->site_identity_status()); | 301 website_settings()->site_identity_status()); |
301 EXPECT_EQ(string16(), website_settings()->organization_name()); | 302 EXPECT_EQ(string16(), website_settings()->organization_name()); |
302 } | 303 } |
303 | 304 |
304 TEST_F(WebsiteSettingsTest, HTTPSConnectionError) { | 305 TEST_F(WebsiteSettingsTest, HTTPSConnectionError) { |
305 ssl_.security_style = content::SECURITY_STYLE_AUTHENTICATED; | 306 ssl_.security_style = content::SECURITY_STYLE_AUTHENTICATED; |
306 ssl_.cert_id = cert_id(); | 307 ssl_.cert_id = cert_id(); |
307 ssl_.cert_status = 0; | 308 ssl_.cert_status = 0; |
308 ssl_.security_bits = 1; | 309 ssl_.security_bits = 1; |
309 int status = 0; | 310 int status = 0; |
310 status = SetSSLVersion(status, net::SSL_CONNECTION_VERSION_TLS1); | 311 status = SetSSLVersion(status, net::SSL_CONNECTION_VERSION_TLS1); |
311 status = SetSSLCipherSuite(status, TLS_RSA_WITH_AES_256_CBC_SHA256); | 312 status = SetSSLCipherSuite(status, CR_TLS_RSA_WITH_AES_256_CBC_SHA256); |
312 ssl_.connection_status = status; | 313 ssl_.connection_status = status; |
313 | 314 |
314 SetDefaultUIExpectations(mock_ui()); | 315 SetDefaultUIExpectations(mock_ui()); |
315 | 316 |
316 EXPECT_EQ(WebsiteSettings::SITE_CONNECTION_STATUS_ENCRYPTED_ERROR, | 317 EXPECT_EQ(WebsiteSettings::SITE_CONNECTION_STATUS_ENCRYPTED_ERROR, |
317 website_settings()->site_connection_status()); | 318 website_settings()->site_connection_status()); |
318 EXPECT_EQ(WebsiteSettings::SITE_IDENTITY_STATUS_CERT, | 319 EXPECT_EQ(WebsiteSettings::SITE_IDENTITY_STATUS_CERT, |
319 website_settings()->site_identity_status()); | 320 website_settings()->site_identity_status()); |
320 EXPECT_EQ(string16(), website_settings()->organization_name()); | 321 EXPECT_EQ(string16(), website_settings()->organization_name()); |
321 } | 322 } |
OLD | NEW |