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

Side by Side Diff: chrome/browser/ui/website_settings/website_settings_unittest.cc

Issue 2244243002: Adjust WebsiteSettings statuses for subresources with cert errors (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: felt comment Created 4 years, 4 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
« no previous file with comments | « chrome/browser/ui/website_settings/website_settings_ui.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 <string> 7 #include <string>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/at_exit.h" 10 #include "base/at_exit.h"
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after
134 void SetURL(const std::string& url) { url_ = GURL(url); } 134 void SetURL(const std::string& url) { url_ = GURL(url); }
135 135
136 void SetPermissionInfo(const PermissionInfoList& permission_info_list, 136 void SetPermissionInfo(const PermissionInfoList& permission_info_list,
137 const ChosenObjectInfoList& chosen_object_info_list) { 137 const ChosenObjectInfoList& chosen_object_info_list) {
138 last_chosen_object_info_.clear(); 138 last_chosen_object_info_.clear();
139 for (WebsiteSettingsUI::ChosenObjectInfo* chosen_object_info : 139 for (WebsiteSettingsUI::ChosenObjectInfo* chosen_object_info :
140 chosen_object_info_list) 140 chosen_object_info_list)
141 last_chosen_object_info_.push_back(base::WrapUnique(chosen_object_info)); 141 last_chosen_object_info_.push_back(base::WrapUnique(chosen_object_info));
142 } 142 }
143 143
144 void ResetMockUI() { mock_ui_.reset(new MockWebsiteSettingsUI()); }
145
146 void ClearWebsiteSettings() { website_settings_.reset(nullptr); }
147
144 const GURL& url() const { return url_; } 148 const GURL& url() const { return url_; }
145 MockCertStore* cert_store() { return &cert_store_; } 149 MockCertStore* cert_store() { return &cert_store_; }
146 int cert_id() { return cert_id_; } 150 int cert_id() { return cert_id_; }
147 MockWebsiteSettingsUI* mock_ui() { return mock_ui_.get(); } 151 MockWebsiteSettingsUI* mock_ui() { return mock_ui_.get(); }
148 const SecurityStateModel::SecurityInfo& security_info() { 152 const SecurityStateModel::SecurityInfo& security_info() {
149 return security_info_; 153 return security_info_;
150 } 154 }
151 const std::vector<std::unique_ptr<WebsiteSettingsUI::ChosenObjectInfo>>& 155 const std::vector<std::unique_ptr<WebsiteSettingsUI::ChosenObjectInfo>>&
152 last_chosen_object_info() { 156 last_chosen_object_info() {
153 return last_chosen_object_info_; 157 return last_chosen_object_info_;
(...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after
371 EXPECT_CALL(*mock_ui(), SetSelectedTab( 375 EXPECT_CALL(*mock_ui(), SetSelectedTab(
372 WebsiteSettingsUI::TAB_ID_PERMISSIONS)); 376 WebsiteSettingsUI::TAB_ID_PERMISSIONS));
373 377
374 EXPECT_EQ(WebsiteSettings::SITE_CONNECTION_STATUS_ENCRYPTED, 378 EXPECT_EQ(WebsiteSettings::SITE_CONNECTION_STATUS_ENCRYPTED,
375 website_settings()->site_connection_status()); 379 website_settings()->site_connection_status());
376 EXPECT_EQ(WebsiteSettings::SITE_IDENTITY_STATUS_CERT, 380 EXPECT_EQ(WebsiteSettings::SITE_IDENTITY_STATUS_CERT,
377 website_settings()->site_identity_status()); 381 website_settings()->site_identity_status());
378 EXPECT_EQ(base::string16(), website_settings()->organization_name()); 382 EXPECT_EQ(base::string16(), website_settings()->organization_name());
379 } 383 }
380 384
381 TEST_F(WebsiteSettingsTest, HTTPSPassiveMixedContent) { 385 TEST_F(WebsiteSettingsTest, InsecureContent) {
382 security_info_.security_level = SecurityStateModel::NONE; 386 struct TestCase {
383 security_info_.scheme_is_cryptographic = true; 387 SecurityStateModel::SecurityLevel security_level;
384 security_info_.cert_id = cert_id(); 388 net::CertStatus cert_status;
385 security_info_.cert_status = 0; 389 SecurityStateModel::ContentStatus mixed_content_status;
386 security_info_.security_bits = 81; // No error if > 80. 390 SecurityStateModel::ContentStatus content_with_cert_errors_status;
387 security_info_.mixed_content_status = 391 WebsiteSettings::SiteConnectionStatus expected_site_connection_status;
388 SecurityStateModel::CONTENT_STATUS_DISPLAYED; 392 WebsiteSettings::SiteIdentityStatus expected_site_identity_status;
389 int status = 0; 393 int expected_connection_icon_id;
390 status = SetSSLVersion(status, net::SSL_CONNECTION_VERSION_TLS1); 394 };
391 status = SetSSLCipherSuite(status, CR_TLS_RSA_WITH_AES_256_CBC_SHA256);
392 security_info_.connection_status = status;
393 395
394 SetDefaultUIExpectations(mock_ui()); 396 const TestCase kTestCases[] = {
395 EXPECT_CALL(*mock_ui(), SetSelectedTab(WebsiteSettingsUI::TAB_ID_CONNECTION)); 397 // Passive mixed content.
398 {SecurityStateModel::NONE, 0,
399 SecurityStateModel::CONTENT_STATUS_DISPLAYED,
400 SecurityStateModel::CONTENT_STATUS_NONE,
401 WebsiteSettings::SITE_CONNECTION_STATUS_INSECURE_PASSIVE_SUBRESOURCE,
402 WebsiteSettings::SITE_IDENTITY_STATUS_CERT, IDR_PAGEINFO_WARNING_MINOR},
403 // Passive mixed content with a cert error on the main resource.
404 {SecurityStateModel::SECURITY_ERROR, net::CERT_STATUS_DATE_INVALID,
405 SecurityStateModel::CONTENT_STATUS_DISPLAYED,
406 SecurityStateModel::CONTENT_STATUS_NONE,
407 WebsiteSettings::SITE_CONNECTION_STATUS_INSECURE_PASSIVE_SUBRESOURCE,
408 WebsiteSettings::SITE_IDENTITY_STATUS_ERROR, IDR_PAGEINFO_WARNING_MINOR},
409 // Active and passive mixed content.
410 {SecurityStateModel::SECURITY_ERROR, 0,
411 SecurityStateModel::CONTENT_STATUS_DISPLAYED_AND_RAN,
412 SecurityStateModel::CONTENT_STATUS_NONE,
413 WebsiteSettings::SITE_CONNECTION_STATUS_INSECURE_ACTIVE_SUBRESOURCE,
414 WebsiteSettings::SITE_IDENTITY_STATUS_CERT, IDR_PAGEINFO_BAD},
415 // Active and passive mixed content with a cert error on the main
416 // resource.
417 {SecurityStateModel::SECURITY_ERROR, net::CERT_STATUS_DATE_INVALID,
418 SecurityStateModel::CONTENT_STATUS_DISPLAYED_AND_RAN,
419 SecurityStateModel::CONTENT_STATUS_NONE,
420 WebsiteSettings::SITE_CONNECTION_STATUS_INSECURE_ACTIVE_SUBRESOURCE,
421 WebsiteSettings::SITE_IDENTITY_STATUS_ERROR, IDR_PAGEINFO_BAD},
422 // Active mixed content.
423 {SecurityStateModel::SECURITY_ERROR, 0,
424 SecurityStateModel::CONTENT_STATUS_RAN,
425 SecurityStateModel::CONTENT_STATUS_NONE,
426 WebsiteSettings::SITE_CONNECTION_STATUS_INSECURE_ACTIVE_SUBRESOURCE,
427 WebsiteSettings::SITE_IDENTITY_STATUS_CERT, IDR_PAGEINFO_BAD},
428 // Active mixed content with a cert error on the main resource.
429 {SecurityStateModel::SECURITY_ERROR, net::CERT_STATUS_DATE_INVALID,
430 SecurityStateModel::CONTENT_STATUS_RAN,
431 SecurityStateModel::CONTENT_STATUS_NONE,
432 WebsiteSettings::SITE_CONNECTION_STATUS_INSECURE_ACTIVE_SUBRESOURCE,
433 WebsiteSettings::SITE_IDENTITY_STATUS_ERROR, IDR_PAGEINFO_BAD},
396 434
397 EXPECT_EQ(WebsiteSettings::SITE_CONNECTION_STATUS_MIXED_CONTENT, 435 // Passive subresources with cert errors.
398 website_settings()->site_connection_status()); 436 {SecurityStateModel::NONE, 0, SecurityStateModel::CONTENT_STATUS_NONE,
399 EXPECT_EQ(WebsiteSettings::SITE_IDENTITY_STATUS_CERT, 437 SecurityStateModel::CONTENT_STATUS_DISPLAYED,
400 website_settings()->site_identity_status()); 438 WebsiteSettings::SITE_CONNECTION_STATUS_INSECURE_PASSIVE_SUBRESOURCE,
401 EXPECT_EQ(IDR_PAGEINFO_WARNING_MINOR, 439 WebsiteSettings::SITE_IDENTITY_STATUS_CERT, IDR_PAGEINFO_WARNING_MINOR},
402 WebsiteSettingsUI::GetConnectionIconID( 440 // Passive subresources with cert errors, with a cert error on the
403 website_settings()->site_connection_status())); 441 // main resource also. In this case, the subresources with
404 EXPECT_EQ(base::string16(), website_settings()->organization_name()); 442 // certificate errors are ignored: if the main resource had a cert
405 } 443 // error, it's not that useful to warn about subresources with cert
444 // errors as well.
445 {SecurityStateModel::SECURITY_ERROR, net::CERT_STATUS_DATE_INVALID,
446 SecurityStateModel::CONTENT_STATUS_NONE,
447 SecurityStateModel::CONTENT_STATUS_DISPLAYED,
448 WebsiteSettings::SITE_CONNECTION_STATUS_ENCRYPTED,
449 WebsiteSettings::SITE_IDENTITY_STATUS_ERROR, IDR_PAGEINFO_GOOD},
450 // Passive and active subresources with cert errors.
451 {SecurityStateModel::SECURITY_ERROR, 0,
452 SecurityStateModel::CONTENT_STATUS_NONE,
453 SecurityStateModel::CONTENT_STATUS_DISPLAYED_AND_RAN,
454 WebsiteSettings::SITE_CONNECTION_STATUS_INSECURE_ACTIVE_SUBRESOURCE,
455 WebsiteSettings::SITE_IDENTITY_STATUS_CERT, IDR_PAGEINFO_BAD},
456 // Passive and active subresources with cert errors, with a cert
457 // error on the main resource also.
458 {SecurityStateModel::SECURITY_ERROR, net::CERT_STATUS_DATE_INVALID,
459 SecurityStateModel::CONTENT_STATUS_NONE,
460 SecurityStateModel::CONTENT_STATUS_DISPLAYED_AND_RAN,
461 WebsiteSettings::SITE_CONNECTION_STATUS_ENCRYPTED,
462 WebsiteSettings::SITE_IDENTITY_STATUS_ERROR, IDR_PAGEINFO_GOOD},
463 // Active subresources with cert errors.
464 {SecurityStateModel::SECURITY_ERROR, 0,
465 SecurityStateModel::CONTENT_STATUS_NONE,
466 SecurityStateModel::CONTENT_STATUS_RAN,
467 WebsiteSettings::SITE_CONNECTION_STATUS_INSECURE_ACTIVE_SUBRESOURCE,
468 WebsiteSettings::SITE_IDENTITY_STATUS_CERT, IDR_PAGEINFO_BAD},
469 // Active subresources with cert errors, with a cert error on the main
470 // resource also.
471 {SecurityStateModel::SECURITY_ERROR, net::CERT_STATUS_DATE_INVALID,
472 SecurityStateModel::CONTENT_STATUS_NONE,
473 SecurityStateModel::CONTENT_STATUS_RAN,
474 WebsiteSettings::SITE_CONNECTION_STATUS_ENCRYPTED,
475 WebsiteSettings::SITE_IDENTITY_STATUS_ERROR, IDR_PAGEINFO_GOOD},
406 476
407 TEST_F(WebsiteSettingsTest, HTTPSActiveMixedContent) { 477 // Passive mixed content and subresources with cert errors.
408 security_info_.security_level = SecurityStateModel::SECURITY_ERROR; 478 {SecurityStateModel::NONE, 0,
409 security_info_.scheme_is_cryptographic = true; 479 SecurityStateModel::CONTENT_STATUS_DISPLAYED,
410 security_info_.cert_id = cert_id(); 480 SecurityStateModel::CONTENT_STATUS_DISPLAYED,
411 security_info_.cert_status = 0; 481 WebsiteSettings::SITE_CONNECTION_STATUS_INSECURE_PASSIVE_SUBRESOURCE,
412 security_info_.security_bits = 81; // No error if > 80. 482 WebsiteSettings::SITE_IDENTITY_STATUS_CERT, IDR_PAGEINFO_WARNING_MINOR},
413 security_info_.mixed_content_status = 483 // Passive mixed content and active subresources with cert errors.
414 SecurityStateModel::CONTENT_STATUS_DISPLAYED_AND_RAN; 484 {SecurityStateModel::SECURITY_ERROR, 0,
415 int status = 0; 485 SecurityStateModel::CONTENT_STATUS_DISPLAYED,
416 status = SetSSLVersion(status, net::SSL_CONNECTION_VERSION_TLS1); 486 SecurityStateModel::CONTENT_STATUS_RAN,
417 status = SetSSLCipherSuite(status, CR_TLS_RSA_WITH_AES_256_CBC_SHA256); 487 WebsiteSettings::SITE_CONNECTION_STATUS_INSECURE_ACTIVE_SUBRESOURCE,
418 security_info_.connection_status = status; 488 WebsiteSettings::SITE_IDENTITY_STATUS_CERT, IDR_PAGEINFO_BAD},
489 // Active mixed content and passive subresources with cert errors.
490 {SecurityStateModel::SECURITY_ERROR, 0,
491 SecurityStateModel::CONTENT_STATUS_RAN,
492 SecurityStateModel::CONTENT_STATUS_DISPLAYED,
493 WebsiteSettings::SITE_CONNECTION_STATUS_INSECURE_ACTIVE_SUBRESOURCE,
494 WebsiteSettings::SITE_IDENTITY_STATUS_CERT, IDR_PAGEINFO_BAD},
495 // Passive mixed content, active subresources with cert errors, and a cert
496 // error on the main resource.
497 {SecurityStateModel::SECURITY_ERROR, net::CERT_STATUS_DATE_INVALID,
498 SecurityStateModel::CONTENT_STATUS_DISPLAYED,
499 SecurityStateModel::CONTENT_STATUS_RAN,
500 WebsiteSettings::SITE_CONNECTION_STATUS_INSECURE_PASSIVE_SUBRESOURCE,
501 WebsiteSettings::SITE_IDENTITY_STATUS_ERROR, IDR_PAGEINFO_WARNING_MINOR},
502 };
419 503
420 SetDefaultUIExpectations(mock_ui()); 504 for (const auto& test : kTestCases) {
421 EXPECT_CALL(*mock_ui(), SetSelectedTab(WebsiteSettingsUI::TAB_ID_CONNECTION)); 505 ResetMockUI();
506 ClearWebsiteSettings();
507 security_info_ = SecurityStateModel::SecurityInfo();
508 security_info_.security_level = test.security_level;
509 security_info_.scheme_is_cryptographic = true;
510 security_info_.cert_id = cert_id();
511 security_info_.cert_status = test.cert_status;
512 security_info_.security_bits = 81; // No error if > 80.
513 security_info_.mixed_content_status = test.mixed_content_status;
514 security_info_.content_with_cert_errors_status =
515 test.content_with_cert_errors_status;
516 int status = 0;
517 status = SetSSLVersion(status, net::SSL_CONNECTION_VERSION_TLS1);
518 status = SetSSLCipherSuite(status, CR_TLS_RSA_WITH_AES_256_CBC_SHA256);
519 security_info_.connection_status = status;
422 520
423 EXPECT_EQ(WebsiteSettings::SITE_CONNECTION_STATUS_MIXED_SCRIPT, 521 SetDefaultUIExpectations(mock_ui());
424 website_settings()->site_connection_status()); 522 EXPECT_CALL(*mock_ui(),
425 EXPECT_EQ(WebsiteSettings::SITE_IDENTITY_STATUS_CERT, 523 SetSelectedTab(WebsiteSettingsUI::TAB_ID_CONNECTION));
426 website_settings()->site_identity_status()); 524
427 EXPECT_EQ(IDR_PAGEINFO_BAD, 525 EXPECT_EQ(test.expected_site_connection_status,
428 WebsiteSettingsUI::GetConnectionIconID( 526 website_settings()->site_connection_status());
429 website_settings()->site_connection_status())); 527 EXPECT_EQ(test.expected_site_identity_status,
430 EXPECT_EQ(base::string16(), website_settings()->organization_name()); 528 website_settings()->site_identity_status());
529 EXPECT_EQ(test.expected_connection_icon_id,
530 WebsiteSettingsUI::GetConnectionIconID(
531 website_settings()->site_connection_status()));
532 EXPECT_EQ(base::string16(), website_settings()->organization_name());
533 }
431 } 534 }
432 535
433 TEST_F(WebsiteSettingsTest, HTTPSEVCert) { 536 TEST_F(WebsiteSettingsTest, HTTPSEVCert) {
434 scoped_refptr<net::X509Certificate> ev_cert = 537 scoped_refptr<net::X509Certificate> ev_cert =
435 net::X509Certificate::CreateFromBytes( 538 net::X509Certificate::CreateFromBytes(
436 reinterpret_cast<const char*>(google_der), 539 reinterpret_cast<const char*>(google_der),
437 sizeof(google_der)); 540 sizeof(google_der));
438 int ev_cert_id = 1; 541 int ev_cert_id = 1;
439 EXPECT_CALL(*cert_store(), RetrieveCert(ev_cert_id, _)).WillRepeatedly( 542 EXPECT_CALL(*cert_store(), RetrieveCert(ev_cert_id, _)).WillRepeatedly(
440 DoAll(SetArgPointee<1>(ev_cert), Return(true))); 543 DoAll(SetArgPointee<1>(ev_cert), Return(true)));
441 544
442 security_info_.security_level = SecurityStateModel::NONE; 545 security_info_.security_level = SecurityStateModel::NONE;
443 security_info_.scheme_is_cryptographic = true; 546 security_info_.scheme_is_cryptographic = true;
444 security_info_.cert_id = ev_cert_id; 547 security_info_.cert_id = ev_cert_id;
445 security_info_.cert_status = net::CERT_STATUS_IS_EV; 548 security_info_.cert_status = net::CERT_STATUS_IS_EV;
446 security_info_.security_bits = 81; // No error if > 80. 549 security_info_.security_bits = 81; // No error if > 80.
447 security_info_.mixed_content_status = 550 security_info_.mixed_content_status =
448 SecurityStateModel::CONTENT_STATUS_DISPLAYED; 551 SecurityStateModel::CONTENT_STATUS_DISPLAYED;
449 int status = 0; 552 int status = 0;
450 status = SetSSLVersion(status, net::SSL_CONNECTION_VERSION_TLS1); 553 status = SetSSLVersion(status, net::SSL_CONNECTION_VERSION_TLS1);
451 status = SetSSLCipherSuite(status, CR_TLS_RSA_WITH_AES_256_CBC_SHA256); 554 status = SetSSLCipherSuite(status, CR_TLS_RSA_WITH_AES_256_CBC_SHA256);
452 security_info_.connection_status = status; 555 security_info_.connection_status = status;
453 556
454 SetDefaultUIExpectations(mock_ui()); 557 SetDefaultUIExpectations(mock_ui());
455 EXPECT_CALL(*mock_ui(), SetSelectedTab(WebsiteSettingsUI::TAB_ID_CONNECTION)); 558 EXPECT_CALL(*mock_ui(), SetSelectedTab(WebsiteSettingsUI::TAB_ID_CONNECTION));
456 559
457 EXPECT_EQ(WebsiteSettings::SITE_CONNECTION_STATUS_MIXED_CONTENT, 560 EXPECT_EQ(
458 website_settings()->site_connection_status()); 561 WebsiteSettings::SITE_CONNECTION_STATUS_INSECURE_PASSIVE_SUBRESOURCE,
562 website_settings()->site_connection_status());
459 EXPECT_EQ(WebsiteSettings::SITE_IDENTITY_STATUS_EV_CERT, 563 EXPECT_EQ(WebsiteSettings::SITE_IDENTITY_STATUS_EV_CERT,
460 website_settings()->site_identity_status()); 564 website_settings()->site_identity_status());
461 EXPECT_EQ(base::UTF8ToUTF16("Google Inc"), 565 EXPECT_EQ(base::UTF8ToUTF16("Google Inc"),
462 website_settings()->organization_name()); 566 website_settings()->organization_name());
463 } 567 }
464 568
465 TEST_F(WebsiteSettingsTest, HTTPSRevocationError) { 569 TEST_F(WebsiteSettingsTest, HTTPSRevocationError) {
466 security_info_.security_level = SecurityStateModel::SECURE; 570 security_info_.security_level = SecurityStateModel::SECURE;
467 security_info_.scheme_is_cryptographic = true; 571 security_info_.scheme_is_cryptographic = true;
468 security_info_.cert_id = cert_id(); 572 security_info_.cert_id = cert_id();
(...skipping 316 matching lines...) Expand 10 before | Expand all | Expand 10 after
785 889
786 TEST_F(WebsiteSettingsTest, InternalPage) { 890 TEST_F(WebsiteSettingsTest, InternalPage) {
787 SetURL("chrome://bookmarks"); 891 SetURL("chrome://bookmarks");
788 SetDefaultUIExpectations(mock_ui()); 892 SetDefaultUIExpectations(mock_ui());
789 EXPECT_EQ(WebsiteSettings::SITE_CONNECTION_STATUS_INTERNAL_PAGE, 893 EXPECT_EQ(WebsiteSettings::SITE_CONNECTION_STATUS_INTERNAL_PAGE,
790 website_settings()->site_connection_status()); 894 website_settings()->site_connection_status());
791 EXPECT_EQ(WebsiteSettings::SITE_IDENTITY_STATUS_INTERNAL_PAGE, 895 EXPECT_EQ(WebsiteSettings::SITE_IDENTITY_STATUS_INTERNAL_PAGE,
792 website_settings()->site_identity_status()); 896 website_settings()->site_identity_status());
793 EXPECT_EQ(base::string16(), website_settings()->organization_name()); 897 EXPECT_EQ(base::string16(), website_settings()->organization_name());
794 } 898 }
OLDNEW
« no previous file with comments | « chrome/browser/ui/website_settings/website_settings_ui.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698