| 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 <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 23 matching lines...) Expand all Loading... |
| 34 #include "net/cert/cert_status_flags.h" | 34 #include "net/cert/cert_status_flags.h" |
| 35 #include "net/cert/x509_certificate.h" | 35 #include "net/cert/x509_certificate.h" |
| 36 #include "net/ssl/ssl_connection_status_flags.h" | 36 #include "net/ssl/ssl_connection_status_flags.h" |
| 37 #include "net/test/cert_test_util.h" | 37 #include "net/test/cert_test_util.h" |
| 38 #include "net/test/test_certificate_data.h" | 38 #include "net/test/test_certificate_data.h" |
| 39 #include "net/test/test_data_directory.h" | 39 #include "net/test/test_data_directory.h" |
| 40 #include "testing/gmock/include/gmock/gmock.h" | 40 #include "testing/gmock/include/gmock/gmock.h" |
| 41 #include "testing/gtest/include/gtest/gtest.h" | 41 #include "testing/gtest/include/gtest/gtest.h" |
| 42 | 42 |
| 43 using content::SSLStatus; | 43 using content::SSLStatus; |
| 44 using security_state::SecurityStateModel; | |
| 45 using testing::_; | 44 using testing::_; |
| 46 using testing::AnyNumber; | 45 using testing::AnyNumber; |
| 47 using testing::Invoke; | 46 using testing::Invoke; |
| 48 using testing::Return; | 47 using testing::Return; |
| 49 using testing::SetArgPointee; | 48 using testing::SetArgPointee; |
| 50 | 49 |
| 51 namespace { | 50 namespace { |
| 52 | 51 |
| 53 // SSL cipher suite like specified in RFC5246 Appendix A.5. "The Cipher Suite". | 52 // SSL cipher suite like specified in RFC5246 Appendix A.5. "The Cipher Suite". |
| 54 // Without the CR_ prefix, this clashes with the OS X 10.8 headers. | 53 // Without the CR_ prefix, this clashes with the OS X 10.8 headers. |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 94 class WebsiteSettingsTest : public ChromeRenderViewHostTestHarness { | 93 class WebsiteSettingsTest : public ChromeRenderViewHostTestHarness { |
| 95 public: | 94 public: |
| 96 WebsiteSettingsTest() : url_("http://www.example.com") {} | 95 WebsiteSettingsTest() : url_("http://www.example.com") {} |
| 97 | 96 |
| 98 ~WebsiteSettingsTest() override {} | 97 ~WebsiteSettingsTest() override {} |
| 99 | 98 |
| 100 void SetUp() override { | 99 void SetUp() override { |
| 101 ChromeRenderViewHostTestHarness::SetUp(); | 100 ChromeRenderViewHostTestHarness::SetUp(); |
| 102 | 101 |
| 103 // Setup stub SSLStatus. | 102 // Setup stub SSLStatus. |
| 104 security_info_.security_level = SecurityStateModel::NONE; | 103 security_info_.security_level = security_state::NONE; |
| 105 | 104 |
| 106 // Create the certificate. | 105 // Create the certificate. |
| 107 cert_ = | 106 cert_ = |
| 108 net::ImportCertFromFile(net::GetTestCertsDirectory(), "ok_cert.pem"); | 107 net::ImportCertFromFile(net::GetTestCertsDirectory(), "ok_cert.pem"); |
| 109 ASSERT_TRUE(cert_); | 108 ASSERT_TRUE(cert_); |
| 110 | 109 |
| 111 TabSpecificContentSettings::CreateForWebContents(web_contents()); | 110 TabSpecificContentSettings::CreateForWebContents(web_contents()); |
| 112 InfoBarService::CreateForWebContents(web_contents()); | 111 InfoBarService::CreateForWebContents(web_contents()); |
| 113 | 112 |
| 114 // Setup mock ui. | 113 // Setup mock ui. |
| (...skipping 27 matching lines...) Expand all Loading... |
| 142 last_chosen_object_info_.push_back(std::move(chosen_object_info)); | 141 last_chosen_object_info_.push_back(std::move(chosen_object_info)); |
| 143 } | 142 } |
| 144 | 143 |
| 145 void ResetMockUI() { mock_ui_.reset(new MockWebsiteSettingsUI()); } | 144 void ResetMockUI() { mock_ui_.reset(new MockWebsiteSettingsUI()); } |
| 146 | 145 |
| 147 void ClearWebsiteSettings() { website_settings_.reset(nullptr); } | 146 void ClearWebsiteSettings() { website_settings_.reset(nullptr); } |
| 148 | 147 |
| 149 const GURL& url() const { return url_; } | 148 const GURL& url() const { return url_; } |
| 150 scoped_refptr<net::X509Certificate> cert() { return cert_; } | 149 scoped_refptr<net::X509Certificate> cert() { return cert_; } |
| 151 MockWebsiteSettingsUI* mock_ui() { return mock_ui_.get(); } | 150 MockWebsiteSettingsUI* mock_ui() { return mock_ui_.get(); } |
| 152 const SecurityStateModel::SecurityInfo& security_info() { | 151 const security_state::SecurityInfo& security_info() { |
| 153 return security_info_; | 152 return security_info_; |
| 154 } | 153 } |
| 155 const std::vector<std::unique_ptr<WebsiteSettingsUI::ChosenObjectInfo>>& | 154 const std::vector<std::unique_ptr<WebsiteSettingsUI::ChosenObjectInfo>>& |
| 156 last_chosen_object_info() { | 155 last_chosen_object_info() { |
| 157 return last_chosen_object_info_; | 156 return last_chosen_object_info_; |
| 158 } | 157 } |
| 159 TabSpecificContentSettings* tab_specific_content_settings() { | 158 TabSpecificContentSettings* tab_specific_content_settings() { |
| 160 return TabSpecificContentSettings::FromWebContents(web_contents()); | 159 return TabSpecificContentSettings::FromWebContents(web_contents()); |
| 161 } | 160 } |
| 162 InfoBarService* infobar_service() { | 161 InfoBarService* infobar_service() { |
| 163 return InfoBarService::FromWebContents(web_contents()); | 162 return InfoBarService::FromWebContents(web_contents()); |
| 164 } | 163 } |
| 165 | 164 |
| 166 WebsiteSettings* website_settings() { | 165 WebsiteSettings* website_settings() { |
| 167 if (!website_settings_.get()) { | 166 if (!website_settings_.get()) { |
| 168 website_settings_.reset(new WebsiteSettings( | 167 website_settings_.reset(new WebsiteSettings( |
| 169 mock_ui(), profile(), tab_specific_content_settings(), web_contents(), | 168 mock_ui(), profile(), tab_specific_content_settings(), web_contents(), |
| 170 url(), security_info())); | 169 url(), security_info())); |
| 171 } | 170 } |
| 172 return website_settings_.get(); | 171 return website_settings_.get(); |
| 173 } | 172 } |
| 174 | 173 |
| 175 device::MockUsbService& usb_service() { | 174 device::MockUsbService& usb_service() { |
| 176 return *device_client_.usb_service(); | 175 return *device_client_.usb_service(); |
| 177 } | 176 } |
| 178 | 177 |
| 179 SecurityStateModel::SecurityInfo security_info_; | 178 security_state::SecurityInfo security_info_; |
| 180 | 179 |
| 181 private: | 180 private: |
| 182 device::MockDeviceClient device_client_; | 181 device::MockDeviceClient device_client_; |
| 183 std::unique_ptr<WebsiteSettings> website_settings_; | 182 std::unique_ptr<WebsiteSettings> website_settings_; |
| 184 std::unique_ptr<MockWebsiteSettingsUI> mock_ui_; | 183 std::unique_ptr<MockWebsiteSettingsUI> mock_ui_; |
| 185 scoped_refptr<net::X509Certificate> cert_; | 184 scoped_refptr<net::X509Certificate> cert_; |
| 186 GURL url_; | 185 GURL url_; |
| 187 std::vector<std::unique_ptr<WebsiteSettingsUI::ChosenObjectInfo>> | 186 std::vector<std::unique_ptr<WebsiteSettingsUI::ChosenObjectInfo>> |
| 188 last_chosen_object_info_; | 187 last_chosen_object_info_; |
| 189 }; | 188 }; |
| (...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 352 EXPECT_CALL(*mock_ui(), SetSelectedTab( | 351 EXPECT_CALL(*mock_ui(), SetSelectedTab( |
| 353 WebsiteSettingsUI::TAB_ID_PERMISSIONS)); | 352 WebsiteSettingsUI::TAB_ID_PERMISSIONS)); |
| 354 EXPECT_EQ(WebsiteSettings::SITE_CONNECTION_STATUS_UNENCRYPTED, | 353 EXPECT_EQ(WebsiteSettings::SITE_CONNECTION_STATUS_UNENCRYPTED, |
| 355 website_settings()->site_connection_status()); | 354 website_settings()->site_connection_status()); |
| 356 EXPECT_EQ(WebsiteSettings::SITE_IDENTITY_STATUS_NO_CERT, | 355 EXPECT_EQ(WebsiteSettings::SITE_IDENTITY_STATUS_NO_CERT, |
| 357 website_settings()->site_identity_status()); | 356 website_settings()->site_identity_status()); |
| 358 EXPECT_EQ(base::string16(), website_settings()->organization_name()); | 357 EXPECT_EQ(base::string16(), website_settings()->organization_name()); |
| 359 } | 358 } |
| 360 | 359 |
| 361 TEST_F(WebsiteSettingsTest, HTTPSConnection) { | 360 TEST_F(WebsiteSettingsTest, HTTPSConnection) { |
| 362 security_info_.security_level = SecurityStateModel::SECURE; | 361 security_info_.security_level = security_state::SECURE; |
| 363 security_info_.scheme_is_cryptographic = true; | 362 security_info_.scheme_is_cryptographic = true; |
| 364 security_info_.certificate = cert(); | 363 security_info_.certificate = cert(); |
| 365 security_info_.cert_status = 0; | 364 security_info_.cert_status = 0; |
| 366 security_info_.security_bits = 81; // No error if > 80. | 365 security_info_.security_bits = 81; // No error if > 80. |
| 367 int status = 0; | 366 int status = 0; |
| 368 status = SetSSLVersion(status, net::SSL_CONNECTION_VERSION_TLS1); | 367 status = SetSSLVersion(status, net::SSL_CONNECTION_VERSION_TLS1); |
| 369 status = SetSSLCipherSuite(status, CR_TLS_RSA_WITH_AES_256_CBC_SHA256); | 368 status = SetSSLCipherSuite(status, CR_TLS_RSA_WITH_AES_256_CBC_SHA256); |
| 370 security_info_.connection_status = status; | 369 security_info_.connection_status = status; |
| 371 | 370 |
| 372 SetDefaultUIExpectations(mock_ui()); | 371 SetDefaultUIExpectations(mock_ui()); |
| 373 EXPECT_CALL(*mock_ui(), SetSelectedTab( | 372 EXPECT_CALL(*mock_ui(), SetSelectedTab( |
| 374 WebsiteSettingsUI::TAB_ID_PERMISSIONS)); | 373 WebsiteSettingsUI::TAB_ID_PERMISSIONS)); |
| 375 | 374 |
| 376 EXPECT_EQ(WebsiteSettings::SITE_CONNECTION_STATUS_ENCRYPTED, | 375 EXPECT_EQ(WebsiteSettings::SITE_CONNECTION_STATUS_ENCRYPTED, |
| 377 website_settings()->site_connection_status()); | 376 website_settings()->site_connection_status()); |
| 378 EXPECT_EQ(WebsiteSettings::SITE_IDENTITY_STATUS_CERT, | 377 EXPECT_EQ(WebsiteSettings::SITE_IDENTITY_STATUS_CERT, |
| 379 website_settings()->site_identity_status()); | 378 website_settings()->site_identity_status()); |
| 380 EXPECT_EQ(base::string16(), website_settings()->organization_name()); | 379 EXPECT_EQ(base::string16(), website_settings()->organization_name()); |
| 381 } | 380 } |
| 382 | 381 |
| 383 TEST_F(WebsiteSettingsTest, InsecureContent) { | 382 TEST_F(WebsiteSettingsTest, InsecureContent) { |
| 384 struct TestCase { | 383 struct TestCase { |
| 385 SecurityStateModel::SecurityLevel security_level; | 384 security_state::SecurityLevel security_level; |
| 386 net::CertStatus cert_status; | 385 net::CertStatus cert_status; |
| 387 SecurityStateModel::ContentStatus mixed_content_status; | 386 security_state::ContentStatus mixed_content_status; |
| 388 SecurityStateModel::ContentStatus content_with_cert_errors_status; | 387 security_state::ContentStatus content_with_cert_errors_status; |
| 389 WebsiteSettings::SiteConnectionStatus expected_site_connection_status; | 388 WebsiteSettings::SiteConnectionStatus expected_site_connection_status; |
| 390 WebsiteSettings::SiteIdentityStatus expected_site_identity_status; | 389 WebsiteSettings::SiteIdentityStatus expected_site_identity_status; |
| 391 int expected_connection_icon_id; | 390 int expected_connection_icon_id; |
| 392 }; | 391 }; |
| 393 | 392 |
| 394 const TestCase kTestCases[] = { | 393 const TestCase kTestCases[] = { |
| 395 // Passive mixed content. | 394 // Passive mixed content. |
| 396 {SecurityStateModel::NONE, 0, | 395 {security_state::NONE, 0, security_state::CONTENT_STATUS_DISPLAYED, |
| 397 SecurityStateModel::CONTENT_STATUS_DISPLAYED, | 396 security_state::CONTENT_STATUS_NONE, |
| 398 SecurityStateModel::CONTENT_STATUS_NONE, | |
| 399 WebsiteSettings::SITE_CONNECTION_STATUS_INSECURE_PASSIVE_SUBRESOURCE, | 397 WebsiteSettings::SITE_CONNECTION_STATUS_INSECURE_PASSIVE_SUBRESOURCE, |
| 400 WebsiteSettings::SITE_IDENTITY_STATUS_CERT, IDR_PAGEINFO_WARNING_MINOR}, | 398 WebsiteSettings::SITE_IDENTITY_STATUS_CERT, IDR_PAGEINFO_WARNING_MINOR}, |
| 401 // Passive mixed content with a cert error on the main resource. | 399 // Passive mixed content with a cert error on the main resource. |
| 402 {SecurityStateModel::DANGEROUS, net::CERT_STATUS_DATE_INVALID, | 400 {security_state::DANGEROUS, net::CERT_STATUS_DATE_INVALID, |
| 403 SecurityStateModel::CONTENT_STATUS_DISPLAYED, | 401 security_state::CONTENT_STATUS_DISPLAYED, |
| 404 SecurityStateModel::CONTENT_STATUS_NONE, | 402 security_state::CONTENT_STATUS_NONE, |
| 405 WebsiteSettings::SITE_CONNECTION_STATUS_INSECURE_PASSIVE_SUBRESOURCE, | 403 WebsiteSettings::SITE_CONNECTION_STATUS_INSECURE_PASSIVE_SUBRESOURCE, |
| 406 WebsiteSettings::SITE_IDENTITY_STATUS_ERROR, IDR_PAGEINFO_WARNING_MINOR}, | 404 WebsiteSettings::SITE_IDENTITY_STATUS_ERROR, IDR_PAGEINFO_WARNING_MINOR}, |
| 407 // Active and passive mixed content. | 405 // Active and passive mixed content. |
| 408 {SecurityStateModel::DANGEROUS, 0, | 406 {security_state::DANGEROUS, 0, |
| 409 SecurityStateModel::CONTENT_STATUS_DISPLAYED_AND_RAN, | 407 security_state::CONTENT_STATUS_DISPLAYED_AND_RAN, |
| 410 SecurityStateModel::CONTENT_STATUS_NONE, | 408 security_state::CONTENT_STATUS_NONE, |
| 411 WebsiteSettings::SITE_CONNECTION_STATUS_INSECURE_ACTIVE_SUBRESOURCE, | 409 WebsiteSettings::SITE_CONNECTION_STATUS_INSECURE_ACTIVE_SUBRESOURCE, |
| 412 WebsiteSettings::SITE_IDENTITY_STATUS_CERT, IDR_PAGEINFO_BAD}, | 410 WebsiteSettings::SITE_IDENTITY_STATUS_CERT, IDR_PAGEINFO_BAD}, |
| 413 // Active and passive mixed content with a cert error on the main | 411 // Active and passive mixed content with a cert error on the main |
| 414 // resource. | 412 // resource. |
| 415 {SecurityStateModel::DANGEROUS, net::CERT_STATUS_DATE_INVALID, | 413 {security_state::DANGEROUS, net::CERT_STATUS_DATE_INVALID, |
| 416 SecurityStateModel::CONTENT_STATUS_DISPLAYED_AND_RAN, | 414 security_state::CONTENT_STATUS_DISPLAYED_AND_RAN, |
| 417 SecurityStateModel::CONTENT_STATUS_NONE, | 415 security_state::CONTENT_STATUS_NONE, |
| 418 WebsiteSettings::SITE_CONNECTION_STATUS_INSECURE_ACTIVE_SUBRESOURCE, | 416 WebsiteSettings::SITE_CONNECTION_STATUS_INSECURE_ACTIVE_SUBRESOURCE, |
| 419 WebsiteSettings::SITE_IDENTITY_STATUS_ERROR, IDR_PAGEINFO_BAD}, | 417 WebsiteSettings::SITE_IDENTITY_STATUS_ERROR, IDR_PAGEINFO_BAD}, |
| 420 // Active mixed content. | 418 // Active mixed content. |
| 421 {SecurityStateModel::DANGEROUS, 0, SecurityStateModel::CONTENT_STATUS_RAN, | 419 {security_state::DANGEROUS, 0, security_state::CONTENT_STATUS_RAN, |
| 422 SecurityStateModel::CONTENT_STATUS_NONE, | 420 security_state::CONTENT_STATUS_NONE, |
| 423 WebsiteSettings::SITE_CONNECTION_STATUS_INSECURE_ACTIVE_SUBRESOURCE, | 421 WebsiteSettings::SITE_CONNECTION_STATUS_INSECURE_ACTIVE_SUBRESOURCE, |
| 424 WebsiteSettings::SITE_IDENTITY_STATUS_CERT, IDR_PAGEINFO_BAD}, | 422 WebsiteSettings::SITE_IDENTITY_STATUS_CERT, IDR_PAGEINFO_BAD}, |
| 425 // Active mixed content with a cert error on the main resource. | 423 // Active mixed content with a cert error on the main resource. |
| 426 {SecurityStateModel::DANGEROUS, net::CERT_STATUS_DATE_INVALID, | 424 {security_state::DANGEROUS, net::CERT_STATUS_DATE_INVALID, |
| 427 SecurityStateModel::CONTENT_STATUS_RAN, | 425 security_state::CONTENT_STATUS_RAN, security_state::CONTENT_STATUS_NONE, |
| 428 SecurityStateModel::CONTENT_STATUS_NONE, | |
| 429 WebsiteSettings::SITE_CONNECTION_STATUS_INSECURE_ACTIVE_SUBRESOURCE, | 426 WebsiteSettings::SITE_CONNECTION_STATUS_INSECURE_ACTIVE_SUBRESOURCE, |
| 430 WebsiteSettings::SITE_IDENTITY_STATUS_ERROR, IDR_PAGEINFO_BAD}, | 427 WebsiteSettings::SITE_IDENTITY_STATUS_ERROR, IDR_PAGEINFO_BAD}, |
| 431 | 428 |
| 432 // Passive subresources with cert errors. | 429 // Passive subresources with cert errors. |
| 433 {SecurityStateModel::NONE, 0, SecurityStateModel::CONTENT_STATUS_NONE, | 430 {security_state::NONE, 0, security_state::CONTENT_STATUS_NONE, |
| 434 SecurityStateModel::CONTENT_STATUS_DISPLAYED, | 431 security_state::CONTENT_STATUS_DISPLAYED, |
| 435 WebsiteSettings::SITE_CONNECTION_STATUS_INSECURE_PASSIVE_SUBRESOURCE, | 432 WebsiteSettings::SITE_CONNECTION_STATUS_INSECURE_PASSIVE_SUBRESOURCE, |
| 436 WebsiteSettings::SITE_IDENTITY_STATUS_CERT, IDR_PAGEINFO_WARNING_MINOR}, | 433 WebsiteSettings::SITE_IDENTITY_STATUS_CERT, IDR_PAGEINFO_WARNING_MINOR}, |
| 437 // Passive subresources with cert errors, with a cert error on the | 434 // Passive subresources with cert errors, with a cert error on the |
| 438 // main resource also. In this case, the subresources with | 435 // main resource also. In this case, the subresources with |
| 439 // certificate errors are ignored: if the main resource had a cert | 436 // certificate errors are ignored: if the main resource had a cert |
| 440 // error, it's not that useful to warn about subresources with cert | 437 // error, it's not that useful to warn about subresources with cert |
| 441 // errors as well. | 438 // errors as well. |
| 442 {SecurityStateModel::DANGEROUS, net::CERT_STATUS_DATE_INVALID, | 439 {security_state::DANGEROUS, net::CERT_STATUS_DATE_INVALID, |
| 443 SecurityStateModel::CONTENT_STATUS_NONE, | 440 security_state::CONTENT_STATUS_NONE, |
| 444 SecurityStateModel::CONTENT_STATUS_DISPLAYED, | 441 security_state::CONTENT_STATUS_DISPLAYED, |
| 445 WebsiteSettings::SITE_CONNECTION_STATUS_ENCRYPTED, | 442 WebsiteSettings::SITE_CONNECTION_STATUS_ENCRYPTED, |
| 446 WebsiteSettings::SITE_IDENTITY_STATUS_ERROR, IDR_PAGEINFO_GOOD}, | 443 WebsiteSettings::SITE_IDENTITY_STATUS_ERROR, IDR_PAGEINFO_GOOD}, |
| 447 // Passive and active subresources with cert errors. | 444 // Passive and active subresources with cert errors. |
| 448 {SecurityStateModel::DANGEROUS, 0, | 445 {security_state::DANGEROUS, 0, security_state::CONTENT_STATUS_NONE, |
| 449 SecurityStateModel::CONTENT_STATUS_NONE, | 446 security_state::CONTENT_STATUS_DISPLAYED_AND_RAN, |
| 450 SecurityStateModel::CONTENT_STATUS_DISPLAYED_AND_RAN, | |
| 451 WebsiteSettings::SITE_CONNECTION_STATUS_INSECURE_ACTIVE_SUBRESOURCE, | 447 WebsiteSettings::SITE_CONNECTION_STATUS_INSECURE_ACTIVE_SUBRESOURCE, |
| 452 WebsiteSettings::SITE_IDENTITY_STATUS_CERT, IDR_PAGEINFO_BAD}, | 448 WebsiteSettings::SITE_IDENTITY_STATUS_CERT, IDR_PAGEINFO_BAD}, |
| 453 // Passive and active subresources with cert errors, with a cert | 449 // Passive and active subresources with cert errors, with a cert |
| 454 // error on the main resource also. | 450 // error on the main resource also. |
| 455 {SecurityStateModel::DANGEROUS, net::CERT_STATUS_DATE_INVALID, | 451 {security_state::DANGEROUS, net::CERT_STATUS_DATE_INVALID, |
| 456 SecurityStateModel::CONTENT_STATUS_NONE, | 452 security_state::CONTENT_STATUS_NONE, |
| 457 SecurityStateModel::CONTENT_STATUS_DISPLAYED_AND_RAN, | 453 security_state::CONTENT_STATUS_DISPLAYED_AND_RAN, |
| 458 WebsiteSettings::SITE_CONNECTION_STATUS_ENCRYPTED, | 454 WebsiteSettings::SITE_CONNECTION_STATUS_ENCRYPTED, |
| 459 WebsiteSettings::SITE_IDENTITY_STATUS_ERROR, IDR_PAGEINFO_GOOD}, | 455 WebsiteSettings::SITE_IDENTITY_STATUS_ERROR, IDR_PAGEINFO_GOOD}, |
| 460 // Active subresources with cert errors. | 456 // Active subresources with cert errors. |
| 461 {SecurityStateModel::DANGEROUS, 0, | 457 {security_state::DANGEROUS, 0, security_state::CONTENT_STATUS_NONE, |
| 462 SecurityStateModel::CONTENT_STATUS_NONE, | 458 security_state::CONTENT_STATUS_RAN, |
| 463 SecurityStateModel::CONTENT_STATUS_RAN, | |
| 464 WebsiteSettings::SITE_CONNECTION_STATUS_INSECURE_ACTIVE_SUBRESOURCE, | 459 WebsiteSettings::SITE_CONNECTION_STATUS_INSECURE_ACTIVE_SUBRESOURCE, |
| 465 WebsiteSettings::SITE_IDENTITY_STATUS_CERT, IDR_PAGEINFO_BAD}, | 460 WebsiteSettings::SITE_IDENTITY_STATUS_CERT, IDR_PAGEINFO_BAD}, |
| 466 // Active subresources with cert errors, with a cert error on the main | 461 // Active subresources with cert errors, with a cert error on the main |
| 467 // resource also. | 462 // resource also. |
| 468 {SecurityStateModel::DANGEROUS, net::CERT_STATUS_DATE_INVALID, | 463 {security_state::DANGEROUS, net::CERT_STATUS_DATE_INVALID, |
| 469 SecurityStateModel::CONTENT_STATUS_NONE, | 464 security_state::CONTENT_STATUS_NONE, security_state::CONTENT_STATUS_RAN, |
| 470 SecurityStateModel::CONTENT_STATUS_RAN, | |
| 471 WebsiteSettings::SITE_CONNECTION_STATUS_ENCRYPTED, | 465 WebsiteSettings::SITE_CONNECTION_STATUS_ENCRYPTED, |
| 472 WebsiteSettings::SITE_IDENTITY_STATUS_ERROR, IDR_PAGEINFO_GOOD}, | 466 WebsiteSettings::SITE_IDENTITY_STATUS_ERROR, IDR_PAGEINFO_GOOD}, |
| 473 | 467 |
| 474 // Passive mixed content and subresources with cert errors. | 468 // Passive mixed content and subresources with cert errors. |
| 475 {SecurityStateModel::NONE, 0, | 469 {security_state::NONE, 0, security_state::CONTENT_STATUS_DISPLAYED, |
| 476 SecurityStateModel::CONTENT_STATUS_DISPLAYED, | 470 security_state::CONTENT_STATUS_DISPLAYED, |
| 477 SecurityStateModel::CONTENT_STATUS_DISPLAYED, | |
| 478 WebsiteSettings::SITE_CONNECTION_STATUS_INSECURE_PASSIVE_SUBRESOURCE, | 471 WebsiteSettings::SITE_CONNECTION_STATUS_INSECURE_PASSIVE_SUBRESOURCE, |
| 479 WebsiteSettings::SITE_IDENTITY_STATUS_CERT, IDR_PAGEINFO_WARNING_MINOR}, | 472 WebsiteSettings::SITE_IDENTITY_STATUS_CERT, IDR_PAGEINFO_WARNING_MINOR}, |
| 480 // Passive mixed content and active subresources with cert errors. | 473 // Passive mixed content and active subresources with cert errors. |
| 481 {SecurityStateModel::DANGEROUS, 0, | 474 {security_state::DANGEROUS, 0, security_state::CONTENT_STATUS_DISPLAYED, |
| 482 SecurityStateModel::CONTENT_STATUS_DISPLAYED, | 475 security_state::CONTENT_STATUS_RAN, |
| 483 SecurityStateModel::CONTENT_STATUS_RAN, | |
| 484 WebsiteSettings::SITE_CONNECTION_STATUS_INSECURE_ACTIVE_SUBRESOURCE, | 476 WebsiteSettings::SITE_CONNECTION_STATUS_INSECURE_ACTIVE_SUBRESOURCE, |
| 485 WebsiteSettings::SITE_IDENTITY_STATUS_CERT, IDR_PAGEINFO_BAD}, | 477 WebsiteSettings::SITE_IDENTITY_STATUS_CERT, IDR_PAGEINFO_BAD}, |
| 486 // Active mixed content and passive subresources with cert errors. | 478 // Active mixed content and passive subresources with cert errors. |
| 487 {SecurityStateModel::DANGEROUS, 0, SecurityStateModel::CONTENT_STATUS_RAN, | 479 {security_state::DANGEROUS, 0, security_state::CONTENT_STATUS_RAN, |
| 488 SecurityStateModel::CONTENT_STATUS_DISPLAYED, | 480 security_state::CONTENT_STATUS_DISPLAYED, |
| 489 WebsiteSettings::SITE_CONNECTION_STATUS_INSECURE_ACTIVE_SUBRESOURCE, | 481 WebsiteSettings::SITE_CONNECTION_STATUS_INSECURE_ACTIVE_SUBRESOURCE, |
| 490 WebsiteSettings::SITE_IDENTITY_STATUS_CERT, IDR_PAGEINFO_BAD}, | 482 WebsiteSettings::SITE_IDENTITY_STATUS_CERT, IDR_PAGEINFO_BAD}, |
| 491 // Passive mixed content, active subresources with cert errors, and a cert | 483 // Passive mixed content, active subresources with cert errors, and a cert |
| 492 // error on the main resource. | 484 // error on the main resource. |
| 493 {SecurityStateModel::DANGEROUS, net::CERT_STATUS_DATE_INVALID, | 485 {security_state::DANGEROUS, net::CERT_STATUS_DATE_INVALID, |
| 494 SecurityStateModel::CONTENT_STATUS_DISPLAYED, | 486 security_state::CONTENT_STATUS_DISPLAYED, |
| 495 SecurityStateModel::CONTENT_STATUS_RAN, | 487 security_state::CONTENT_STATUS_RAN, |
| 496 WebsiteSettings::SITE_CONNECTION_STATUS_INSECURE_PASSIVE_SUBRESOURCE, | 488 WebsiteSettings::SITE_CONNECTION_STATUS_INSECURE_PASSIVE_SUBRESOURCE, |
| 497 WebsiteSettings::SITE_IDENTITY_STATUS_ERROR, IDR_PAGEINFO_WARNING_MINOR}, | 489 WebsiteSettings::SITE_IDENTITY_STATUS_ERROR, IDR_PAGEINFO_WARNING_MINOR}, |
| 498 }; | 490 }; |
| 499 | 491 |
| 500 for (const auto& test : kTestCases) { | 492 for (const auto& test : kTestCases) { |
| 501 ResetMockUI(); | 493 ResetMockUI(); |
| 502 ClearWebsiteSettings(); | 494 ClearWebsiteSettings(); |
| 503 security_info_ = SecurityStateModel::SecurityInfo(); | 495 security_info_ = security_state::SecurityInfo(); |
| 504 security_info_.security_level = test.security_level; | 496 security_info_.security_level = test.security_level; |
| 505 security_info_.scheme_is_cryptographic = true; | 497 security_info_.scheme_is_cryptographic = true; |
| 506 security_info_.certificate = cert(); | 498 security_info_.certificate = cert(); |
| 507 security_info_.cert_status = test.cert_status; | 499 security_info_.cert_status = test.cert_status; |
| 508 security_info_.security_bits = 81; // No error if > 80. | 500 security_info_.security_bits = 81; // No error if > 80. |
| 509 security_info_.mixed_content_status = test.mixed_content_status; | 501 security_info_.mixed_content_status = test.mixed_content_status; |
| 510 security_info_.content_with_cert_errors_status = | 502 security_info_.content_with_cert_errors_status = |
| 511 test.content_with_cert_errors_status; | 503 test.content_with_cert_errors_status; |
| 512 int status = 0; | 504 int status = 0; |
| 513 status = SetSSLVersion(status, net::SSL_CONNECTION_VERSION_TLS1); | 505 status = SetSSLVersion(status, net::SSL_CONNECTION_VERSION_TLS1); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 528 EXPECT_EQ(base::string16(), website_settings()->organization_name()); | 520 EXPECT_EQ(base::string16(), website_settings()->organization_name()); |
| 529 } | 521 } |
| 530 } | 522 } |
| 531 | 523 |
| 532 TEST_F(WebsiteSettingsTest, HTTPSEVCert) { | 524 TEST_F(WebsiteSettingsTest, HTTPSEVCert) { |
| 533 scoped_refptr<net::X509Certificate> ev_cert = | 525 scoped_refptr<net::X509Certificate> ev_cert = |
| 534 net::X509Certificate::CreateFromBytes( | 526 net::X509Certificate::CreateFromBytes( |
| 535 reinterpret_cast<const char*>(google_der), | 527 reinterpret_cast<const char*>(google_der), |
| 536 sizeof(google_der)); | 528 sizeof(google_der)); |
| 537 | 529 |
| 538 security_info_.security_level = SecurityStateModel::NONE; | 530 security_info_.security_level = security_state::NONE; |
| 539 security_info_.scheme_is_cryptographic = true; | 531 security_info_.scheme_is_cryptographic = true; |
| 540 security_info_.certificate = ev_cert; | 532 security_info_.certificate = ev_cert; |
| 541 security_info_.cert_status = net::CERT_STATUS_IS_EV; | 533 security_info_.cert_status = net::CERT_STATUS_IS_EV; |
| 542 security_info_.security_bits = 81; // No error if > 80. | 534 security_info_.security_bits = 81; // No error if > 80. |
| 543 security_info_.mixed_content_status = | 535 security_info_.mixed_content_status = |
| 544 SecurityStateModel::CONTENT_STATUS_DISPLAYED; | 536 security_state::CONTENT_STATUS_DISPLAYED; |
| 545 int status = 0; | 537 int status = 0; |
| 546 status = SetSSLVersion(status, net::SSL_CONNECTION_VERSION_TLS1); | 538 status = SetSSLVersion(status, net::SSL_CONNECTION_VERSION_TLS1); |
| 547 status = SetSSLCipherSuite(status, CR_TLS_RSA_WITH_AES_256_CBC_SHA256); | 539 status = SetSSLCipherSuite(status, CR_TLS_RSA_WITH_AES_256_CBC_SHA256); |
| 548 security_info_.connection_status = status; | 540 security_info_.connection_status = status; |
| 549 | 541 |
| 550 SetDefaultUIExpectations(mock_ui()); | 542 SetDefaultUIExpectations(mock_ui()); |
| 551 EXPECT_CALL(*mock_ui(), SetSelectedTab(WebsiteSettingsUI::TAB_ID_CONNECTION)); | 543 EXPECT_CALL(*mock_ui(), SetSelectedTab(WebsiteSettingsUI::TAB_ID_CONNECTION)); |
| 552 | 544 |
| 553 EXPECT_EQ( | 545 EXPECT_EQ( |
| 554 WebsiteSettings::SITE_CONNECTION_STATUS_INSECURE_PASSIVE_SUBRESOURCE, | 546 WebsiteSettings::SITE_CONNECTION_STATUS_INSECURE_PASSIVE_SUBRESOURCE, |
| 555 website_settings()->site_connection_status()); | 547 website_settings()->site_connection_status()); |
| 556 EXPECT_EQ(WebsiteSettings::SITE_IDENTITY_STATUS_EV_CERT, | 548 EXPECT_EQ(WebsiteSettings::SITE_IDENTITY_STATUS_EV_CERT, |
| 557 website_settings()->site_identity_status()); | 549 website_settings()->site_identity_status()); |
| 558 EXPECT_EQ(base::UTF8ToUTF16("Google Inc"), | 550 EXPECT_EQ(base::UTF8ToUTF16("Google Inc"), |
| 559 website_settings()->organization_name()); | 551 website_settings()->organization_name()); |
| 560 } | 552 } |
| 561 | 553 |
| 562 TEST_F(WebsiteSettingsTest, HTTPSRevocationError) { | 554 TEST_F(WebsiteSettingsTest, HTTPSRevocationError) { |
| 563 security_info_.security_level = SecurityStateModel::SECURE; | 555 security_info_.security_level = security_state::SECURE; |
| 564 security_info_.scheme_is_cryptographic = true; | 556 security_info_.scheme_is_cryptographic = true; |
| 565 security_info_.certificate = cert(); | 557 security_info_.certificate = cert(); |
| 566 security_info_.cert_status = net::CERT_STATUS_UNABLE_TO_CHECK_REVOCATION; | 558 security_info_.cert_status = net::CERT_STATUS_UNABLE_TO_CHECK_REVOCATION; |
| 567 security_info_.security_bits = 81; // No error if > 80. | 559 security_info_.security_bits = 81; // No error if > 80. |
| 568 int status = 0; | 560 int status = 0; |
| 569 status = SetSSLVersion(status, net::SSL_CONNECTION_VERSION_TLS1); | 561 status = SetSSLVersion(status, net::SSL_CONNECTION_VERSION_TLS1); |
| 570 status = SetSSLCipherSuite(status, CR_TLS_RSA_WITH_AES_256_CBC_SHA256); | 562 status = SetSSLCipherSuite(status, CR_TLS_RSA_WITH_AES_256_CBC_SHA256); |
| 571 security_info_.connection_status = status; | 563 security_info_.connection_status = status; |
| 572 | 564 |
| 573 SetDefaultUIExpectations(mock_ui()); | 565 SetDefaultUIExpectations(mock_ui()); |
| 574 EXPECT_CALL(*mock_ui(), SetSelectedTab(WebsiteSettingsUI::TAB_ID_CONNECTION)); | 566 EXPECT_CALL(*mock_ui(), SetSelectedTab(WebsiteSettingsUI::TAB_ID_CONNECTION)); |
| 575 | 567 |
| 576 EXPECT_EQ(WebsiteSettings::SITE_CONNECTION_STATUS_ENCRYPTED, | 568 EXPECT_EQ(WebsiteSettings::SITE_CONNECTION_STATUS_ENCRYPTED, |
| 577 website_settings()->site_connection_status()); | 569 website_settings()->site_connection_status()); |
| 578 EXPECT_EQ(WebsiteSettings::SITE_IDENTITY_STATUS_CERT_REVOCATION_UNKNOWN, | 570 EXPECT_EQ(WebsiteSettings::SITE_IDENTITY_STATUS_CERT_REVOCATION_UNKNOWN, |
| 579 website_settings()->site_identity_status()); | 571 website_settings()->site_identity_status()); |
| 580 EXPECT_EQ(base::string16(), website_settings()->organization_name()); | 572 EXPECT_EQ(base::string16(), website_settings()->organization_name()); |
| 581 } | 573 } |
| 582 | 574 |
| 583 TEST_F(WebsiteSettingsTest, HTTPSConnectionError) { | 575 TEST_F(WebsiteSettingsTest, HTTPSConnectionError) { |
| 584 security_info_.security_level = SecurityStateModel::SECURE; | 576 security_info_.security_level = security_state::SECURE; |
| 585 security_info_.scheme_is_cryptographic = true; | 577 security_info_.scheme_is_cryptographic = true; |
| 586 security_info_.certificate = cert(); | 578 security_info_.certificate = cert(); |
| 587 security_info_.cert_status = 0; | 579 security_info_.cert_status = 0; |
| 588 security_info_.security_bits = -1; | 580 security_info_.security_bits = -1; |
| 589 int status = 0; | 581 int status = 0; |
| 590 status = SetSSLVersion(status, net::SSL_CONNECTION_VERSION_TLS1); | 582 status = SetSSLVersion(status, net::SSL_CONNECTION_VERSION_TLS1); |
| 591 status = SetSSLCipherSuite(status, CR_TLS_RSA_WITH_AES_256_CBC_SHA256); | 583 status = SetSSLCipherSuite(status, CR_TLS_RSA_WITH_AES_256_CBC_SHA256); |
| 592 security_info_.connection_status = status; | 584 security_info_.connection_status = status; |
| 593 | 585 |
| 594 SetDefaultUIExpectations(mock_ui()); | 586 SetDefaultUIExpectations(mock_ui()); |
| 595 EXPECT_CALL(*mock_ui(), SetSelectedTab(WebsiteSettingsUI::TAB_ID_CONNECTION)); | 587 EXPECT_CALL(*mock_ui(), SetSelectedTab(WebsiteSettingsUI::TAB_ID_CONNECTION)); |
| 596 | 588 |
| 597 EXPECT_EQ(WebsiteSettings::SITE_CONNECTION_STATUS_ENCRYPTED_ERROR, | 589 EXPECT_EQ(WebsiteSettings::SITE_CONNECTION_STATUS_ENCRYPTED_ERROR, |
| 598 website_settings()->site_connection_status()); | 590 website_settings()->site_connection_status()); |
| 599 EXPECT_EQ(WebsiteSettings::SITE_IDENTITY_STATUS_CERT, | 591 EXPECT_EQ(WebsiteSettings::SITE_IDENTITY_STATUS_CERT, |
| 600 website_settings()->site_identity_status()); | 592 website_settings()->site_identity_status()); |
| 601 EXPECT_EQ(base::string16(), website_settings()->organization_name()); | 593 EXPECT_EQ(base::string16(), website_settings()->organization_name()); |
| 602 } | 594 } |
| 603 | 595 |
| 604 TEST_F(WebsiteSettingsTest, HTTPSPolicyCertConnection) { | 596 TEST_F(WebsiteSettingsTest, HTTPSPolicyCertConnection) { |
| 605 security_info_.security_level = | 597 security_info_.security_level = |
| 606 SecurityStateModel::SECURE_WITH_POLICY_INSTALLED_CERT; | 598 security_state::SECURE_WITH_POLICY_INSTALLED_CERT; |
| 607 security_info_.scheme_is_cryptographic = true; | 599 security_info_.scheme_is_cryptographic = true; |
| 608 security_info_.certificate = cert(); | 600 security_info_.certificate = cert(); |
| 609 security_info_.cert_status = 0; | 601 security_info_.cert_status = 0; |
| 610 security_info_.security_bits = 81; // No error if > 80. | 602 security_info_.security_bits = 81; // No error if > 80. |
| 611 int status = 0; | 603 int status = 0; |
| 612 status = SetSSLVersion(status, net::SSL_CONNECTION_VERSION_TLS1); | 604 status = SetSSLVersion(status, net::SSL_CONNECTION_VERSION_TLS1); |
| 613 status = SetSSLCipherSuite(status, CR_TLS_RSA_WITH_AES_256_CBC_SHA256); | 605 status = SetSSLCipherSuite(status, CR_TLS_RSA_WITH_AES_256_CBC_SHA256); |
| 614 security_info_.connection_status = status; | 606 security_info_.connection_status = status; |
| 615 | 607 |
| 616 SetDefaultUIExpectations(mock_ui()); | 608 SetDefaultUIExpectations(mock_ui()); |
| 617 EXPECT_CALL(*mock_ui(), SetSelectedTab(WebsiteSettingsUI::TAB_ID_CONNECTION)); | 609 EXPECT_CALL(*mock_ui(), SetSelectedTab(WebsiteSettingsUI::TAB_ID_CONNECTION)); |
| 618 | 610 |
| 619 EXPECT_EQ(WebsiteSettings::SITE_CONNECTION_STATUS_ENCRYPTED, | 611 EXPECT_EQ(WebsiteSettings::SITE_CONNECTION_STATUS_ENCRYPTED, |
| 620 website_settings()->site_connection_status()); | 612 website_settings()->site_connection_status()); |
| 621 EXPECT_EQ(WebsiteSettings::SITE_IDENTITY_STATUS_ADMIN_PROVIDED_CERT, | 613 EXPECT_EQ(WebsiteSettings::SITE_IDENTITY_STATUS_ADMIN_PROVIDED_CERT, |
| 622 website_settings()->site_identity_status()); | 614 website_settings()->site_identity_status()); |
| 623 EXPECT_EQ(base::string16(), website_settings()->organization_name()); | 615 EXPECT_EQ(base::string16(), website_settings()->organization_name()); |
| 624 } | 616 } |
| 625 | 617 |
| 626 TEST_F(WebsiteSettingsTest, HTTPSSHA1Minor) { | 618 TEST_F(WebsiteSettingsTest, HTTPSSHA1Minor) { |
| 627 security_info_.security_level = SecurityStateModel::NONE; | 619 security_info_.security_level = security_state::NONE; |
| 628 security_info_.scheme_is_cryptographic = true; | 620 security_info_.scheme_is_cryptographic = true; |
| 629 security_info_.certificate = cert(); | 621 security_info_.certificate = cert(); |
| 630 security_info_.cert_status = 0; | 622 security_info_.cert_status = 0; |
| 631 security_info_.security_bits = 81; // No error if > 80. | 623 security_info_.security_bits = 81; // No error if > 80. |
| 632 int status = 0; | 624 int status = 0; |
| 633 status = SetSSLVersion(status, net::SSL_CONNECTION_VERSION_TLS1); | 625 status = SetSSLVersion(status, net::SSL_CONNECTION_VERSION_TLS1); |
| 634 status = SetSSLCipherSuite(status, CR_TLS_RSA_WITH_AES_256_CBC_SHA256); | 626 status = SetSSLCipherSuite(status, CR_TLS_RSA_WITH_AES_256_CBC_SHA256); |
| 635 security_info_.connection_status = status; | 627 security_info_.connection_status = status; |
| 636 security_info_.sha1_deprecation_status = | 628 security_info_.sha1_deprecation_status = |
| 637 SecurityStateModel::DEPRECATED_SHA1_MINOR; | 629 security_state::DEPRECATED_SHA1_MINOR; |
| 638 | 630 |
| 639 SetDefaultUIExpectations(mock_ui()); | 631 SetDefaultUIExpectations(mock_ui()); |
| 640 EXPECT_CALL(*mock_ui(), SetSelectedTab(WebsiteSettingsUI::TAB_ID_CONNECTION)); | 632 EXPECT_CALL(*mock_ui(), SetSelectedTab(WebsiteSettingsUI::TAB_ID_CONNECTION)); |
| 641 | 633 |
| 642 EXPECT_EQ(WebsiteSettings::SITE_CONNECTION_STATUS_ENCRYPTED, | 634 EXPECT_EQ(WebsiteSettings::SITE_CONNECTION_STATUS_ENCRYPTED, |
| 643 website_settings()->site_connection_status()); | 635 website_settings()->site_connection_status()); |
| 644 EXPECT_EQ(WebsiteSettings:: | 636 EXPECT_EQ(WebsiteSettings:: |
| 645 SITE_IDENTITY_STATUS_DEPRECATED_SIGNATURE_ALGORITHM_MINOR, | 637 SITE_IDENTITY_STATUS_DEPRECATED_SIGNATURE_ALGORITHM_MINOR, |
| 646 website_settings()->site_identity_status()); | 638 website_settings()->site_identity_status()); |
| 647 EXPECT_EQ(base::string16(), website_settings()->organization_name()); | 639 EXPECT_EQ(base::string16(), website_settings()->organization_name()); |
| 648 EXPECT_EQ(IDR_PAGEINFO_WARNING_MINOR, | 640 EXPECT_EQ(IDR_PAGEINFO_WARNING_MINOR, |
| 649 WebsiteSettingsUI::GetIdentityIconID( | 641 WebsiteSettingsUI::GetIdentityIconID( |
| 650 website_settings()->site_identity_status())); | 642 website_settings()->site_identity_status())); |
| 651 } | 643 } |
| 652 | 644 |
| 653 TEST_F(WebsiteSettingsTest, HTTPSSHA1Major) { | 645 TEST_F(WebsiteSettingsTest, HTTPSSHA1Major) { |
| 654 security_info_.security_level = SecurityStateModel::NONE; | 646 security_info_.security_level = security_state::NONE; |
| 655 security_info_.scheme_is_cryptographic = true; | 647 security_info_.scheme_is_cryptographic = true; |
| 656 security_info_.certificate = cert(); | 648 security_info_.certificate = cert(); |
| 657 security_info_.cert_status = 0; | 649 security_info_.cert_status = 0; |
| 658 security_info_.security_bits = 81; // No error if > 80. | 650 security_info_.security_bits = 81; // No error if > 80. |
| 659 int status = 0; | 651 int status = 0; |
| 660 status = SetSSLVersion(status, net::SSL_CONNECTION_VERSION_TLS1); | 652 status = SetSSLVersion(status, net::SSL_CONNECTION_VERSION_TLS1); |
| 661 status = SetSSLCipherSuite(status, CR_TLS_RSA_WITH_AES_256_CBC_SHA256); | 653 status = SetSSLCipherSuite(status, CR_TLS_RSA_WITH_AES_256_CBC_SHA256); |
| 662 security_info_.connection_status = status; | 654 security_info_.connection_status = status; |
| 663 security_info_.sha1_deprecation_status = | 655 security_info_.sha1_deprecation_status = |
| 664 SecurityStateModel::DEPRECATED_SHA1_MAJOR; | 656 security_state::DEPRECATED_SHA1_MAJOR; |
| 665 | 657 |
| 666 SetDefaultUIExpectations(mock_ui()); | 658 SetDefaultUIExpectations(mock_ui()); |
| 667 EXPECT_CALL(*mock_ui(), SetSelectedTab(WebsiteSettingsUI::TAB_ID_CONNECTION)); | 659 EXPECT_CALL(*mock_ui(), SetSelectedTab(WebsiteSettingsUI::TAB_ID_CONNECTION)); |
| 668 | 660 |
| 669 EXPECT_EQ(WebsiteSettings::SITE_CONNECTION_STATUS_ENCRYPTED, | 661 EXPECT_EQ(WebsiteSettings::SITE_CONNECTION_STATUS_ENCRYPTED, |
| 670 website_settings()->site_connection_status()); | 662 website_settings()->site_connection_status()); |
| 671 EXPECT_EQ(WebsiteSettings:: | 663 EXPECT_EQ(WebsiteSettings:: |
| 672 SITE_IDENTITY_STATUS_DEPRECATED_SIGNATURE_ALGORITHM_MAJOR, | 664 SITE_IDENTITY_STATUS_DEPRECATED_SIGNATURE_ALGORITHM_MAJOR, |
| 673 website_settings()->site_identity_status()); | 665 website_settings()->site_identity_status()); |
| 674 EXPECT_EQ(base::string16(), website_settings()->organization_name()); | 666 EXPECT_EQ(base::string16(), website_settings()->organization_name()); |
| 675 EXPECT_EQ(IDR_PAGEINFO_BAD, | 667 EXPECT_EQ(IDR_PAGEINFO_BAD, |
| 676 WebsiteSettingsUI::GetIdentityIconID( | 668 WebsiteSettingsUI::GetIdentityIconID( |
| 677 website_settings()->site_identity_status())); | 669 website_settings()->site_identity_status())); |
| 678 } | 670 } |
| 679 | 671 |
| 680 // All SCTs are from unknown logs. | 672 // All SCTs are from unknown logs. |
| 681 TEST_F(WebsiteSettingsTest, UnknownSCTs) { | 673 TEST_F(WebsiteSettingsTest, UnknownSCTs) { |
| 682 security_info_.security_level = SecurityStateModel::SECURE; | 674 security_info_.security_level = security_state::SECURE; |
| 683 security_info_.scheme_is_cryptographic = true; | 675 security_info_.scheme_is_cryptographic = true; |
| 684 security_info_.certificate = cert(); | 676 security_info_.certificate = cert(); |
| 685 security_info_.cert_status = 0; | 677 security_info_.cert_status = 0; |
| 686 security_info_.security_bits = 81; // No error if > 80. | 678 security_info_.security_bits = 81; // No error if > 80. |
| 687 int status = 0; | 679 int status = 0; |
| 688 status = SetSSLVersion(status, net::SSL_CONNECTION_VERSION_TLS1); | 680 status = SetSSLVersion(status, net::SSL_CONNECTION_VERSION_TLS1); |
| 689 status = SetSSLCipherSuite(status, CR_TLS_RSA_WITH_AES_256_CBC_SHA256); | 681 status = SetSSLCipherSuite(status, CR_TLS_RSA_WITH_AES_256_CBC_SHA256); |
| 690 security_info_.connection_status = status; | 682 security_info_.connection_status = status; |
| 691 | 683 |
| 692 security_info_.sct_verify_statuses.push_back(net::ct::SCT_STATUS_LOG_UNKNOWN); | 684 security_info_.sct_verify_statuses.push_back(net::ct::SCT_STATUS_LOG_UNKNOWN); |
| 693 security_info_.sct_verify_statuses.push_back(net::ct::SCT_STATUS_LOG_UNKNOWN); | 685 security_info_.sct_verify_statuses.push_back(net::ct::SCT_STATUS_LOG_UNKNOWN); |
| 694 | 686 |
| 695 SetDefaultUIExpectations(mock_ui()); | 687 SetDefaultUIExpectations(mock_ui()); |
| 696 EXPECT_CALL(*mock_ui(), SetSelectedTab(WebsiteSettingsUI::TAB_ID_CONNECTION)); | 688 EXPECT_CALL(*mock_ui(), SetSelectedTab(WebsiteSettingsUI::TAB_ID_CONNECTION)); |
| 697 | 689 |
| 698 EXPECT_EQ(WebsiteSettings::SITE_CONNECTION_STATUS_ENCRYPTED, | 690 EXPECT_EQ(WebsiteSettings::SITE_CONNECTION_STATUS_ENCRYPTED, |
| 699 website_settings()->site_connection_status()); | 691 website_settings()->site_connection_status()); |
| 700 EXPECT_EQ(WebsiteSettings::SITE_IDENTITY_STATUS_CT_ERROR, | 692 EXPECT_EQ(WebsiteSettings::SITE_IDENTITY_STATUS_CT_ERROR, |
| 701 website_settings()->site_identity_status()); | 693 website_settings()->site_identity_status()); |
| 702 EXPECT_EQ(IDR_PAGEINFO_BAD, WebsiteSettingsUI::GetIdentityIconID( | 694 EXPECT_EQ(IDR_PAGEINFO_BAD, WebsiteSettingsUI::GetIdentityIconID( |
| 703 website_settings()->site_identity_status())); | 695 website_settings()->site_identity_status())); |
| 704 } | 696 } |
| 705 | 697 |
| 706 // All SCTs are invalid. | 698 // All SCTs are invalid. |
| 707 TEST_F(WebsiteSettingsTest, InvalidSCTs) { | 699 TEST_F(WebsiteSettingsTest, InvalidSCTs) { |
| 708 security_info_.security_level = SecurityStateModel::SECURE; | 700 security_info_.security_level = security_state::SECURE; |
| 709 security_info_.scheme_is_cryptographic = true; | 701 security_info_.scheme_is_cryptographic = true; |
| 710 security_info_.certificate = cert(); | 702 security_info_.certificate = cert(); |
| 711 security_info_.cert_status = 0; | 703 security_info_.cert_status = 0; |
| 712 security_info_.security_bits = 81; // No error if > 80. | 704 security_info_.security_bits = 81; // No error if > 80. |
| 713 int status = 0; | 705 int status = 0; |
| 714 status = SetSSLVersion(status, net::SSL_CONNECTION_VERSION_TLS1); | 706 status = SetSSLVersion(status, net::SSL_CONNECTION_VERSION_TLS1); |
| 715 status = SetSSLCipherSuite(status, CR_TLS_RSA_WITH_AES_256_CBC_SHA256); | 707 status = SetSSLCipherSuite(status, CR_TLS_RSA_WITH_AES_256_CBC_SHA256); |
| 716 security_info_.connection_status = status; | 708 security_info_.connection_status = status; |
| 717 | 709 |
| 718 security_info_.sct_verify_statuses.push_back( | 710 security_info_.sct_verify_statuses.push_back( |
| 719 net::ct::SCT_STATUS_INVALID_TIMESTAMP); | 711 net::ct::SCT_STATUS_INVALID_TIMESTAMP); |
| 720 security_info_.sct_verify_statuses.push_back( | 712 security_info_.sct_verify_statuses.push_back( |
| 721 net::ct::SCT_STATUS_INVALID_SIGNATURE); | 713 net::ct::SCT_STATUS_INVALID_SIGNATURE); |
| 722 | 714 |
| 723 SetDefaultUIExpectations(mock_ui()); | 715 SetDefaultUIExpectations(mock_ui()); |
| 724 EXPECT_CALL(*mock_ui(), SetSelectedTab(WebsiteSettingsUI::TAB_ID_CONNECTION)); | 716 EXPECT_CALL(*mock_ui(), SetSelectedTab(WebsiteSettingsUI::TAB_ID_CONNECTION)); |
| 725 | 717 |
| 726 EXPECT_EQ(WebsiteSettings::SITE_CONNECTION_STATUS_ENCRYPTED, | 718 EXPECT_EQ(WebsiteSettings::SITE_CONNECTION_STATUS_ENCRYPTED, |
| 727 website_settings()->site_connection_status()); | 719 website_settings()->site_connection_status()); |
| 728 EXPECT_EQ(WebsiteSettings::SITE_IDENTITY_STATUS_CT_ERROR, | 720 EXPECT_EQ(WebsiteSettings::SITE_IDENTITY_STATUS_CT_ERROR, |
| 729 website_settings()->site_identity_status()); | 721 website_settings()->site_identity_status()); |
| 730 EXPECT_EQ(IDR_PAGEINFO_BAD, WebsiteSettingsUI::GetIdentityIconID( | 722 EXPECT_EQ(IDR_PAGEINFO_BAD, WebsiteSettingsUI::GetIdentityIconID( |
| 731 website_settings()->site_identity_status())); | 723 website_settings()->site_identity_status())); |
| 732 } | 724 } |
| 733 | 725 |
| 734 // All SCTs are valid. | 726 // All SCTs are valid. |
| 735 TEST_F(WebsiteSettingsTest, ValidSCTs) { | 727 TEST_F(WebsiteSettingsTest, ValidSCTs) { |
| 736 security_info_.security_level = SecurityStateModel::SECURE; | 728 security_info_.security_level = security_state::SECURE; |
| 737 security_info_.scheme_is_cryptographic = true; | 729 security_info_.scheme_is_cryptographic = true; |
| 738 security_info_.certificate = cert(); | 730 security_info_.certificate = cert(); |
| 739 security_info_.cert_status = 0; | 731 security_info_.cert_status = 0; |
| 740 security_info_.security_bits = 81; // No error if > 80. | 732 security_info_.security_bits = 81; // No error if > 80. |
| 741 int status = 0; | 733 int status = 0; |
| 742 status = SetSSLVersion(status, net::SSL_CONNECTION_VERSION_TLS1); | 734 status = SetSSLVersion(status, net::SSL_CONNECTION_VERSION_TLS1); |
| 743 status = SetSSLCipherSuite(status, CR_TLS_RSA_WITH_AES_256_CBC_SHA256); | 735 status = SetSSLCipherSuite(status, CR_TLS_RSA_WITH_AES_256_CBC_SHA256); |
| 744 security_info_.connection_status = status; | 736 security_info_.connection_status = status; |
| 745 | 737 |
| 746 security_info_.sct_verify_statuses.push_back(net::ct::SCT_STATUS_OK); | 738 security_info_.sct_verify_statuses.push_back(net::ct::SCT_STATUS_OK); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 757 EXPECT_EQ(IDR_PAGEINFO_GOOD, WebsiteSettingsUI::GetIdentityIconID( | 749 EXPECT_EQ(IDR_PAGEINFO_GOOD, WebsiteSettingsUI::GetIdentityIconID( |
| 758 website_settings()->site_identity_status())); | 750 website_settings()->site_identity_status())); |
| 759 } | 751 } |
| 760 | 752 |
| 761 // All SCTs are valid for an EV cert. | 753 // All SCTs are valid for an EV cert. |
| 762 TEST_F(WebsiteSettingsTest, ValidSCTsEV) { | 754 TEST_F(WebsiteSettingsTest, ValidSCTsEV) { |
| 763 scoped_refptr<net::X509Certificate> ev_cert = | 755 scoped_refptr<net::X509Certificate> ev_cert = |
| 764 net::X509Certificate::CreateFromBytes( | 756 net::X509Certificate::CreateFromBytes( |
| 765 reinterpret_cast<const char*>(google_der), sizeof(google_der)); | 757 reinterpret_cast<const char*>(google_der), sizeof(google_der)); |
| 766 | 758 |
| 767 security_info_.security_level = SecurityStateModel::SECURE; | 759 security_info_.security_level = security_state::SECURE; |
| 768 security_info_.scheme_is_cryptographic = true; | 760 security_info_.scheme_is_cryptographic = true; |
| 769 security_info_.certificate = ev_cert; | 761 security_info_.certificate = ev_cert; |
| 770 security_info_.cert_status = net::CERT_STATUS_IS_EV; | 762 security_info_.cert_status = net::CERT_STATUS_IS_EV; |
| 771 security_info_.security_bits = 81; // No error if > 80. | 763 security_info_.security_bits = 81; // No error if > 80. |
| 772 int status = 0; | 764 int status = 0; |
| 773 status = SetSSLVersion(status, net::SSL_CONNECTION_VERSION_TLS1); | 765 status = SetSSLVersion(status, net::SSL_CONNECTION_VERSION_TLS1); |
| 774 status = SetSSLCipherSuite(status, CR_TLS_RSA_WITH_AES_256_CBC_SHA256); | 766 status = SetSSLCipherSuite(status, CR_TLS_RSA_WITH_AES_256_CBC_SHA256); |
| 775 security_info_.connection_status = status; | 767 security_info_.connection_status = status; |
| 776 | 768 |
| 777 security_info_.sct_verify_statuses.push_back(net::ct::SCT_STATUS_OK); | 769 security_info_.sct_verify_statuses.push_back(net::ct::SCT_STATUS_OK); |
| 778 security_info_.sct_verify_statuses.push_back(net::ct::SCT_STATUS_OK); | 770 security_info_.sct_verify_statuses.push_back(net::ct::SCT_STATUS_OK); |
| 779 | 771 |
| 780 SetDefaultUIExpectations(mock_ui()); | 772 SetDefaultUIExpectations(mock_ui()); |
| 781 EXPECT_CALL(*mock_ui(), | 773 EXPECT_CALL(*mock_ui(), |
| 782 SetSelectedTab(WebsiteSettingsUI::TAB_ID_PERMISSIONS)); | 774 SetSelectedTab(WebsiteSettingsUI::TAB_ID_PERMISSIONS)); |
| 783 | 775 |
| 784 EXPECT_EQ(WebsiteSettings::SITE_CONNECTION_STATUS_ENCRYPTED, | 776 EXPECT_EQ(WebsiteSettings::SITE_CONNECTION_STATUS_ENCRYPTED, |
| 785 website_settings()->site_connection_status()); | 777 website_settings()->site_connection_status()); |
| 786 EXPECT_EQ(WebsiteSettings::SITE_IDENTITY_STATUS_EV_CERT, | 778 EXPECT_EQ(WebsiteSettings::SITE_IDENTITY_STATUS_EV_CERT, |
| 787 website_settings()->site_identity_status()); | 779 website_settings()->site_identity_status()); |
| 788 EXPECT_EQ(IDR_PAGEINFO_GOOD, WebsiteSettingsUI::GetIdentityIconID( | 780 EXPECT_EQ(IDR_PAGEINFO_GOOD, WebsiteSettingsUI::GetIdentityIconID( |
| 789 website_settings()->site_identity_status())); | 781 website_settings()->site_identity_status())); |
| 790 } | 782 } |
| 791 | 783 |
| 792 // A mix of unknown and invalid SCTs. | 784 // A mix of unknown and invalid SCTs. |
| 793 TEST_F(WebsiteSettingsTest, UnknownAndInvalidSCTs) { | 785 TEST_F(WebsiteSettingsTest, UnknownAndInvalidSCTs) { |
| 794 security_info_.security_level = SecurityStateModel::SECURE; | 786 security_info_.security_level = security_state::SECURE; |
| 795 security_info_.scheme_is_cryptographic = true; | 787 security_info_.scheme_is_cryptographic = true; |
| 796 security_info_.certificate = cert(); | 788 security_info_.certificate = cert(); |
| 797 security_info_.cert_status = 0; | 789 security_info_.cert_status = 0; |
| 798 security_info_.security_bits = 81; // No error if > 80. | 790 security_info_.security_bits = 81; // No error if > 80. |
| 799 int status = 0; | 791 int status = 0; |
| 800 status = SetSSLVersion(status, net::SSL_CONNECTION_VERSION_TLS1); | 792 status = SetSSLVersion(status, net::SSL_CONNECTION_VERSION_TLS1); |
| 801 status = SetSSLCipherSuite(status, CR_TLS_RSA_WITH_AES_256_CBC_SHA256); | 793 status = SetSSLCipherSuite(status, CR_TLS_RSA_WITH_AES_256_CBC_SHA256); |
| 802 security_info_.connection_status = status; | 794 security_info_.connection_status = status; |
| 803 | 795 |
| 804 security_info_.sct_verify_statuses.push_back(net::ct::SCT_STATUS_LOG_UNKNOWN); | 796 security_info_.sct_verify_statuses.push_back(net::ct::SCT_STATUS_LOG_UNKNOWN); |
| 805 security_info_.sct_verify_statuses.push_back( | 797 security_info_.sct_verify_statuses.push_back( |
| 806 net::ct::SCT_STATUS_INVALID_SIGNATURE); | 798 net::ct::SCT_STATUS_INVALID_SIGNATURE); |
| 807 | 799 |
| 808 SetDefaultUIExpectations(mock_ui()); | 800 SetDefaultUIExpectations(mock_ui()); |
| 809 EXPECT_CALL(*mock_ui(), SetSelectedTab(WebsiteSettingsUI::TAB_ID_CONNECTION)); | 801 EXPECT_CALL(*mock_ui(), SetSelectedTab(WebsiteSettingsUI::TAB_ID_CONNECTION)); |
| 810 | 802 |
| 811 EXPECT_EQ(WebsiteSettings::SITE_CONNECTION_STATUS_ENCRYPTED, | 803 EXPECT_EQ(WebsiteSettings::SITE_CONNECTION_STATUS_ENCRYPTED, |
| 812 website_settings()->site_connection_status()); | 804 website_settings()->site_connection_status()); |
| 813 EXPECT_EQ(WebsiteSettings::SITE_IDENTITY_STATUS_CT_ERROR, | 805 EXPECT_EQ(WebsiteSettings::SITE_IDENTITY_STATUS_CT_ERROR, |
| 814 website_settings()->site_identity_status()); | 806 website_settings()->site_identity_status()); |
| 815 EXPECT_EQ(IDR_PAGEINFO_BAD, WebsiteSettingsUI::GetIdentityIconID( | 807 EXPECT_EQ(IDR_PAGEINFO_BAD, WebsiteSettingsUI::GetIdentityIconID( |
| 816 website_settings()->site_identity_status())); | 808 website_settings()->site_identity_status())); |
| 817 } | 809 } |
| 818 | 810 |
| 819 // At least one SCT is valid and one is from an unknown log. | 811 // At least one SCT is valid and one is from an unknown log. |
| 820 TEST_F(WebsiteSettingsTest, ValidAndUnknownSCTs) { | 812 TEST_F(WebsiteSettingsTest, ValidAndUnknownSCTs) { |
| 821 security_info_.security_level = SecurityStateModel::SECURE; | 813 security_info_.security_level = security_state::SECURE; |
| 822 security_info_.scheme_is_cryptographic = true; | 814 security_info_.scheme_is_cryptographic = true; |
| 823 security_info_.certificate = cert(); | 815 security_info_.certificate = cert(); |
| 824 security_info_.cert_status = 0; | 816 security_info_.cert_status = 0; |
| 825 security_info_.security_bits = 81; // No error if > 80. | 817 security_info_.security_bits = 81; // No error if > 80. |
| 826 int status = 0; | 818 int status = 0; |
| 827 status = SetSSLVersion(status, net::SSL_CONNECTION_VERSION_TLS1); | 819 status = SetSSLVersion(status, net::SSL_CONNECTION_VERSION_TLS1); |
| 828 status = SetSSLCipherSuite(status, CR_TLS_RSA_WITH_AES_256_CBC_SHA256); | 820 status = SetSSLCipherSuite(status, CR_TLS_RSA_WITH_AES_256_CBC_SHA256); |
| 829 security_info_.connection_status = status; | 821 security_info_.connection_status = status; |
| 830 | 822 |
| 831 security_info_.sct_verify_statuses.push_back(net::ct::SCT_STATUS_OK); | 823 security_info_.sct_verify_statuses.push_back(net::ct::SCT_STATUS_OK); |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 893 website_settings()->site_identity_status()); | 885 website_settings()->site_identity_status()); |
| 894 EXPECT_EQ(base::string16(), website_settings()->organization_name()); | 886 EXPECT_EQ(base::string16(), website_settings()->organization_name()); |
| 895 } | 887 } |
| 896 #endif | 888 #endif |
| 897 | 889 |
| 898 // Tests that metrics are recorded on a WebsiteSettings for pages with | 890 // Tests that metrics are recorded on a WebsiteSettings for pages with |
| 899 // various security levels. | 891 // various security levels. |
| 900 TEST_F(WebsiteSettingsTest, SecurityLevelMetrics) { | 892 TEST_F(WebsiteSettingsTest, SecurityLevelMetrics) { |
| 901 struct TestCase { | 893 struct TestCase { |
| 902 const std::string url; | 894 const std::string url; |
| 903 const SecurityStateModel::SecurityLevel security_level; | 895 const security_state::SecurityLevel security_level; |
| 904 const std::string histogram_name; | 896 const std::string histogram_name; |
| 905 }; | 897 }; |
| 906 const char kGenericHistogram[] = "WebsiteSettings.Action"; | 898 const char kGenericHistogram[] = "WebsiteSettings.Action"; |
| 907 | 899 |
| 908 const TestCase kTestCases[] = { | 900 const TestCase kTestCases[] = { |
| 909 {"https://example.test", SecurityStateModel::SECURE, | 901 {"https://example.test", security_state::SECURE, |
| 910 "Security.PageInfo.Action.HttpsUrl.Valid"}, | 902 "Security.PageInfo.Action.HttpsUrl.Valid"}, |
| 911 {"https://example.test", SecurityStateModel::EV_SECURE, | 903 {"https://example.test", security_state::EV_SECURE, |
| 912 "Security.PageInfo.Action.HttpsUrl.Valid"}, | 904 "Security.PageInfo.Action.HttpsUrl.Valid"}, |
| 913 {"https://example2.test", SecurityStateModel::NONE, | 905 {"https://example2.test", security_state::NONE, |
| 914 "Security.PageInfo.Action.HttpsUrl.Downgraded"}, | 906 "Security.PageInfo.Action.HttpsUrl.Downgraded"}, |
| 915 {"https://example.test", SecurityStateModel::DANGEROUS, | 907 {"https://example.test", security_state::DANGEROUS, |
| 916 "Security.PageInfo.Action.HttpsUrl.Dangerous"}, | 908 "Security.PageInfo.Action.HttpsUrl.Dangerous"}, |
| 917 {"http://example.test", SecurityStateModel::HTTP_SHOW_WARNING, | 909 {"http://example.test", security_state::HTTP_SHOW_WARNING, |
| 918 "Security.PageInfo.Action.HttpUrl.Warning"}, | 910 "Security.PageInfo.Action.HttpUrl.Warning"}, |
| 919 {"http://example.test", SecurityStateModel::DANGEROUS, | 911 {"http://example.test", security_state::DANGEROUS, |
| 920 "Security.PageInfo.Action.HttpUrl.Dangerous"}, | 912 "Security.PageInfo.Action.HttpUrl.Dangerous"}, |
| 921 {"http://example.test", SecurityStateModel::NONE, | 913 {"http://example.test", security_state::NONE, |
| 922 "Security.PageInfo.Action.HttpUrl.Neutral"}, | 914 "Security.PageInfo.Action.HttpUrl.Neutral"}, |
| 923 }; | 915 }; |
| 924 | 916 |
| 925 for (const auto& test : kTestCases) { | 917 for (const auto& test : kTestCases) { |
| 926 base::HistogramTester histograms; | 918 base::HistogramTester histograms; |
| 927 SetURL(test.url); | 919 SetURL(test.url); |
| 928 security_info_.security_level = test.security_level; | 920 security_info_.security_level = test.security_level; |
| 929 ResetMockUI(); | 921 ResetMockUI(); |
| 930 ClearWebsiteSettings(); | 922 ClearWebsiteSettings(); |
| 931 SetDefaultUIExpectations(mock_ui()); | 923 SetDefaultUIExpectations(mock_ui()); |
| (...skipping 20 matching lines...) Expand all Loading... |
| 952 histograms.ExpectTotalCount(test.histogram_name, 2); | 944 histograms.ExpectTotalCount(test.histogram_name, 2); |
| 953 histograms.ExpectBucketCount( | 945 histograms.ExpectBucketCount( |
| 954 test.histogram_name, | 946 test.histogram_name, |
| 955 WebsiteSettings::WebsiteSettingsAction::WEBSITE_SETTINGS_OPENED, 1); | 947 WebsiteSettings::WebsiteSettingsAction::WEBSITE_SETTINGS_OPENED, 1); |
| 956 histograms.ExpectBucketCount(test.histogram_name, | 948 histograms.ExpectBucketCount(test.histogram_name, |
| 957 WebsiteSettings::WebsiteSettingsAction:: | 949 WebsiteSettings::WebsiteSettingsAction:: |
| 958 WEBSITE_SETTINGS_PERMISSIONS_TAB_SELECTED, | 950 WEBSITE_SETTINGS_PERMISSIONS_TAB_SELECTED, |
| 959 1); | 951 1); |
| 960 } | 952 } |
| 961 } | 953 } |
| OLD | NEW |