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

Unified Diff: components/security_state/security_state_model_unittest.cc

Issue 1440303002: Componentize SecurityStateModel (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: android/cros fixes Created 5 years, 1 month 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « components/security_state/security_state_model_delegate.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: components/security_state/security_state_model_unittest.cc
diff --git a/components/security_state/security_state_model_unittest.cc b/components/security_state/security_state_model_unittest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..2b57580ba73b0b89a5b57f27f471203435cd2e88
--- /dev/null
+++ b/components/security_state/security_state_model_unittest.cc
@@ -0,0 +1,177 @@
+// Copyright 2015 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "components/security_state/security_state_model.h"
+
+#include "components/security_state/security_state_model_delegate.h"
+#include "net/base/test_data_directory.h"
+#include "net/cert/x509_certificate.h"
+#include "net/ssl/ssl_connection_status_flags.h"
+#include "net/test/cert_test_util.h"
+#include "net/test/test_certificate_data.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "url/gurl.h"
+
+namespace security_state {
+
+namespace {
+
+const char kUrl[] = "https://foo.test";
+
+class TestSHA1SecurityStateModelDelegate : public SecurityStateModelDelegate {
+ public:
+ TestSHA1SecurityStateModelDelegate()
+ : url_(kUrl),
+ cert_(net::ImportCertFromFile(net::GetTestCertsDirectory(),
+ "sha1_2016.pem")),
+ security_level_(SECURE),
+ cert_status_(net::CERT_STATUS_SHA1_SIGNATURE_PRESENT),
+ ran_mixed_content_(false),
+ displayed_mixed_content_(false) {}
+
+ ~TestSHA1SecurityStateModelDelegate() override {}
+
+ // SecurityStateModelDelegate overrides
+ bool VisibleSecurityStateChanged() override { return true; }
+ bool RetrieveCert(scoped_refptr<net::X509Certificate>* cert) override {
+ *cert = cert_;
+ return true;
+ }
+ SecurityLevel GetInitialSecurityLevel() override { return security_level_; }
+ SecurityLevel GetSecurityLevelForNonSecure(const GURL& url) override {
+ return NONE;
+ }
+ bool UsedKnownMITMCertificate() override { return false; }
+ int GetCertId() override { return 1; }
+ net::CertStatus GetCertStatus() override { return cert_status_; }
+ int GetConnectionStatus() override { return connection_status_; }
+ int GetSecurityBits() override { return 256; }
+ const GURL& GetURL() override { return url_; }
+ bool RanMixedContent() override { return ran_mixed_content_; }
+ bool DisplayedMixedContent() override { return displayed_mixed_content_; }
+ void GetSCTVerifyStatuses(
+ std::vector<net::ct::SCTVerifyStatus>* sct_verify_statuses) override {}
+
+ void AddCertStatus(net::CertStatus cert_status) {
+ cert_status_ |= cert_status;
+ }
+ void set_connection_status(int connection_status) {
+ connection_status_ = connection_status;
+ }
+ void SetCipherSuite(int ciphersuite) {
+ net::SSLConnectionStatusSetCipherSuite(ciphersuite, &connection_status_);
+ }
+ void set_security_level(SecurityLevel level) { security_level_ = level; }
+ void set_ran_mixed_content(bool ran_mixed_content) {
+ ran_mixed_content_ = ran_mixed_content;
+ }
+ void set_displayed_mixed_content(bool displayed_mixed_content) {
+ displayed_mixed_content_ = displayed_mixed_content;
+ }
+
+ private:
+ GURL url_;
+ scoped_refptr<net::X509Certificate> cert_;
+ SecurityLevel security_level_;
+ net::CertStatus cert_status_;
+ int connection_status_;
+ bool ran_mixed_content_;
+ bool displayed_mixed_content_;
+};
+
+// Tests that SHA1-signed certificates expiring in 2016 downgrade the
+// security state of the page.
+TEST(SecurityStateModelTest, SHA1Warning) {
+ TestSHA1SecurityStateModelDelegate delegate;
+ SecurityStateModel model;
+ model.SetDelegate(&delegate);
+ const SecurityInfo& security_info = model.GetSecurityInfo();
+ EXPECT_EQ(DEPRECATED_SHA1_MINOR, security_info.sha1_deprecation_status);
+ EXPECT_EQ(NONE, security_info.security_level);
+}
+
+// Tests that SHA1 warnings don't interfere with the handling of mixed
+// content.
+TEST(SecurityStateModelTest, SHA1WarningMixedContent) {
+ TestSHA1SecurityStateModelDelegate delegate;
+ SecurityStateModel model;
+ model.SetDelegate(&delegate);
+ delegate.set_displayed_mixed_content(true);
+ const SecurityInfo& security_info1 = model.GetSecurityInfo();
+ EXPECT_EQ(DEPRECATED_SHA1_MINOR, security_info1.sha1_deprecation_status);
+ EXPECT_EQ(DISPLAYED_MIXED_CONTENT, security_info1.mixed_content_status);
+ EXPECT_EQ(NONE, security_info1.security_level);
+
+ delegate.set_security_level(SECURITY_ERROR);
+ delegate.set_displayed_mixed_content(false);
+ delegate.set_ran_mixed_content(true);
+ const SecurityInfo& security_info2 = model.GetSecurityInfo();
+ EXPECT_EQ(DEPRECATED_SHA1_MINOR, security_info2.sha1_deprecation_status);
+ EXPECT_EQ(RAN_MIXED_CONTENT, security_info2.mixed_content_status);
+ EXPECT_EQ(SECURITY_ERROR, security_info2.security_level);
+}
+
+// Tests that SHA1 warnings don't interfere with the handling of major
+// cert errors.
+TEST(SecurityStateModelTest, SHA1WarningBrokenHTTPS) {
+ TestSHA1SecurityStateModelDelegate delegate;
+ SecurityStateModel model;
+ model.SetDelegate(&delegate);
+ delegate.set_security_level(SECURITY_ERROR);
+ delegate.AddCertStatus(net::CERT_STATUS_DATE_INVALID);
+ const SecurityInfo& security_info = model.GetSecurityInfo();
+ EXPECT_EQ(DEPRECATED_SHA1_MINOR, security_info.sha1_deprecation_status);
+ EXPECT_EQ(SECURITY_ERROR, security_info.security_level);
+}
+
+// Tests that |security_info.is_secure_protocol_and_ciphersuite| is
+// computed correctly.
+TEST(SecurityStateModelTest, SecureProtocolAndCiphersuite) {
+ TestSHA1SecurityStateModelDelegate delegate;
+ SecurityStateModel model;
+ model.SetDelegate(&delegate);
+ delegate.set_connection_status((net::SSL_CONNECTION_VERSION_TLS1_2
+ << net::SSL_CONNECTION_VERSION_SHIFT));
+ // TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 from
+ // http://www.iana.org/assignments/tls-parameters/tls-parameters.xml#tls-parameters-4
+ const uint16 ciphersuite = 0xc02f;
+ delegate.SetCipherSuite(ciphersuite);
+
+ const SecurityInfo& security_info = model.GetSecurityInfo();
+ EXPECT_TRUE(security_info.is_secure_protocol_and_ciphersuite);
+}
+
+TEST(SecurityStateModelTest, NonsecureProtocol) {
+ TestSHA1SecurityStateModelDelegate delegate;
+ SecurityStateModel model;
+ model.SetDelegate(&delegate);
+ delegate.set_connection_status((net::SSL_CONNECTION_VERSION_TLS1_1
+ << net::SSL_CONNECTION_VERSION_SHIFT));
+ // TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 from
+ // http://www.iana.org/assignments/tls-parameters/tls-parameters.xml#tls-parameters-4
+ const uint16 ciphersuite = 0xc02f;
+ delegate.SetCipherSuite(ciphersuite);
+
+ const SecurityInfo& security_info = model.GetSecurityInfo();
+ EXPECT_FALSE(security_info.is_secure_protocol_and_ciphersuite);
+}
+
+TEST(SecurityStateModelTest, NonsecureCiphersuite) {
+ TestSHA1SecurityStateModelDelegate delegate;
+ SecurityStateModel model;
+ model.SetDelegate(&delegate);
+ delegate.set_connection_status((net::SSL_CONNECTION_VERSION_TLS1_1
+ << net::SSL_CONNECTION_VERSION_SHIFT));
+ // TLS_RSA_WITH_AES_128_CCM_8 from
+ // http://www.iana.org/assignments/tls-parameters/tls-parameters.xml#tls-parameters-4
+ const uint16 ciphersuite = 0xc02f;
+ delegate.SetCipherSuite(ciphersuite);
+
+ const SecurityInfo& security_info = model.GetSecurityInfo();
+ EXPECT_FALSE(security_info.is_secure_protocol_and_ciphersuite);
+}
+
+} // namespace
+
+} // namespace security_state
« no previous file with comments | « components/security_state/security_state_model_delegate.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698