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

Unified Diff: chrome/browser/website_settings_model_unittest.cc

Issue 9378014: Add website settings backend v 0.1 (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Remove unrelated changes Created 8 years, 10 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/website_settings_model.cc ('k') | chrome/chrome_browser.gypi » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/website_settings_model_unittest.cc
diff --git a/chrome/browser/website_settings_model_unittest.cc b/chrome/browser/website_settings_model_unittest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..29baeb7f71d77e4bbd5138e5d27f0e451b139dd6
--- /dev/null
+++ b/chrome/browser/website_settings_model_unittest.cc
@@ -0,0 +1,224 @@
+// Copyright (c) 2012 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 "chrome/browser/website_settings_model.h"
+
+#include "base/at_exit.h"
+#include "base/utf_string_conversions.h"
+#include "chrome/test/base/testing_profile.h"
+#include "content/browser/cert_store.h"
+#include "content/public/common/ssl_status.h"
+#include "net/base/cert_status_flags.h"
+#include "net/base/ssl_connection_status_flags.h"
+#include "net/base/test_certificate_data.h"
+#include "net/base/x509_certificate.h"
+#include "testing/gmock/include/gmock/gmock.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+using content::SSLStatus;
+using namespace testing;
+
+namespace {
+
+// SSL cipher suite like specified in RFC5246 Appendix A.5. "The Cipher Suite".
+static int TLS_RSA_WITH_AES_256_CBC_SHA256 = 0x3D;
+
+int SetSSLVersion(int connection_status, int version) {
+ // Clear SSL version bits (Bits 20, 21 and 22).
+ connection_status &=
+ ~(net::SSL_CONNECTION_VERSION_MASK << net::SSL_CONNECTION_VERSION_SHIFT);
+ int bitmask = version << net::SSL_CONNECTION_VERSION_SHIFT;
+ return bitmask | connection_status;
+}
+
+int SetSSLCipherSuite(int connection_status, int cipher_suite) {
+ // Clear cipher suite bits (the 16 lowest bits).
+ connection_status &= ~net::SSL_CONNECTION_CIPHERSUITE_MASK;
+ return cipher_suite | connection_status;
+}
+
+class MockCertStore : public CertStore {
+ public:
+ virtual ~MockCertStore() {}
+ MOCK_METHOD2(StoreCert, int(net::X509Certificate*, int));
+ MOCK_METHOD2(RetrieveCert, bool(int, scoped_refptr<net::X509Certificate>*));
+ MOCK_METHOD1(RemoveCertsForRenderProcesHost, void(int));
+};
+
+class WebsiteSettingsModelTest : public testing::Test {
+ public:
+ WebsiteSettingsModelTest() : testing::Test(),
+ profile_(new TestingProfile()),
+ cert_id_(0) {
+ }
+
+ virtual ~WebsiteSettingsModelTest() {
+ }
+
+ virtual void SetUp() {
+ cert_id_ = 1;
+
+ base::Time start_date = base::Time::Now();
+ base::Time expiration_date = base::Time::FromInternalValue(
+ start_date.ToInternalValue() + base::Time::kMicrosecondsPerWeek);
+ cert_ = new net::X509Certificate("subject",
+ "issuer",
+ start_date,
+ expiration_date);
+
+ EXPECT_CALL(cert_store_, RetrieveCert(cert_id_, _) )
+ .Times(AnyNumber())
+ .WillRepeatedly(DoAll(SetArgPointee<1>(cert_), Return(true)));
+ }
+
+ virtual void TearDown() OVERRIDE {
+ EXPECT_TRUE(Mock::VerifyAndClear(&cert_store_));
+ }
+
+ Profile* profile() const { return profile_.get(); }
+
+ scoped_ptr<Profile> profile_;
+ int cert_id_;
+ scoped_refptr<net::X509Certificate> cert_;
+ MockCertStore cert_store_;
+};
+
+} // namespace
+
+TEST_F(WebsiteSettingsModelTest, HTTPConnection) {
+ GURL url = GURL("http://www.example.com");
+ SSLStatus ssl;
+ ssl.security_style = content::SECURITY_STYLE_UNAUTHENTICATED;
+
+ scoped_ptr<WebsiteSettingsModel> model(
+ new WebsiteSettingsModel(profile(), url, ssl, &cert_store_));
+ EXPECT_EQ(WebsiteSettingsModel::SITE_CONNECTION_STATUS_UNENCRYPTED,
+ model->site_connection_status());
+ EXPECT_EQ(WebsiteSettingsModel::SITE_IDENTITY_STATUS_NO_CERT,
+ model->site_identity_status());
+ EXPECT_EQ(string16(), model->organization_name());
+}
+
+TEST_F(WebsiteSettingsModelTest, HTTPSConnection) {
+ GURL url = GURL("https://www.example.com");
+
+ SSLStatus ssl;
+ ssl.security_style = content::SECURITY_STYLE_AUTHENTICATED;
+ ssl.cert_id = cert_id_;
+ ssl.cert_status = 0;
+ ssl.security_bits = 81; // No error if > 80.
+ int status = 0;
+ status = SetSSLVersion(status, net::SSL_CONNECTION_VERSION_TLS1);
+ status = SetSSLCipherSuite(status, TLS_RSA_WITH_AES_256_CBC_SHA256);
+ ssl.connection_status = status;
+
+ scoped_ptr<WebsiteSettingsModel> model(
+ new WebsiteSettingsModel(profile(), url, ssl, &cert_store_));
+ EXPECT_EQ(WebsiteSettingsModel::SITE_CONNECTION_STATUS_ENCRYPTED,
+ model->site_connection_status());
+ EXPECT_EQ(WebsiteSettingsModel::SITE_IDENTITY_STATUS_CERT,
+ model->site_identity_status());
+ EXPECT_EQ(string16(), model->organization_name());
+}
+
+TEST_F(WebsiteSettingsModelTest, HTTPSMixedContent) {
+ GURL url = GURL("https://www.example.com");
+
+ SSLStatus ssl;
+ ssl.security_style = content::SECURITY_STYLE_AUTHENTICATED;
+ ssl.cert_id = cert_id_;
+ ssl.cert_status = 0;
+ ssl.security_bits = 81; // No error if > 80.
+ ssl.content_status = SSLStatus::DISPLAYED_INSECURE_CONTENT;
+ int status = 0;
+ status = SetSSLVersion(status, net::SSL_CONNECTION_VERSION_TLS1);
+ status = SetSSLCipherSuite(status, TLS_RSA_WITH_AES_256_CBC_SHA256);
+ ssl.connection_status = status;
+
+ scoped_ptr<WebsiteSettingsModel> model(
+ new WebsiteSettingsModel(profile(), url, ssl, &cert_store_));
+ EXPECT_EQ(WebsiteSettingsModel::SITE_CONNECTION_STATUS_MIXED_CONTENT,
+ model->site_connection_status());
+ EXPECT_EQ(WebsiteSettingsModel::SITE_IDENTITY_STATUS_CERT,
+ model->site_identity_status());
+ EXPECT_EQ(string16(), model->organization_name());
+}
+
+TEST_F(WebsiteSettingsModelTest, HTTPSEVCert) {
+ GURL url = GURL("https://www.example.com");
+
+ scoped_refptr<net::X509Certificate> ev_cert =
+ net::X509Certificate::CreateFromBytes(
+ reinterpret_cast<const char*>(google_der),
+ sizeof(google_der));
+ int ev_cert_id = 1;
+ MockCertStore tmp_cert_store;
+ EXPECT_CALL(tmp_cert_store, RetrieveCert(ev_cert_id, _) ).WillRepeatedly(
+ DoAll(SetArgPointee<1>(ev_cert),
+ Return(true)));
+
+ SSLStatus ssl;
+ ssl.security_style = content::SECURITY_STYLE_AUTHENTICATED;
+ ssl.cert_id = ev_cert_id;
+ ssl.cert_status = net::CERT_STATUS_IS_EV;
+ ssl.security_bits = 81; // No error if > 80.
+ ssl.content_status = SSLStatus::DISPLAYED_INSECURE_CONTENT;
+ int status = 0;
+ status = SetSSLVersion(status, net::SSL_CONNECTION_VERSION_TLS1);
+ status = SetSSLCipherSuite(status, TLS_RSA_WITH_AES_256_CBC_SHA256);
+ ssl.connection_status = status;
+
+ scoped_ptr<WebsiteSettingsModel> model(
+ new WebsiteSettingsModel(profile(), url, ssl, &tmp_cert_store));
+ EXPECT_EQ(WebsiteSettingsModel::SITE_CONNECTION_STATUS_MIXED_CONTENT,
+ model->site_connection_status());
+ EXPECT_EQ(WebsiteSettingsModel::SITE_IDENTITY_STATUS_EV_CERT,
+ model->site_identity_status());
+ EXPECT_EQ(UTF8ToUTF16("Google Inc"), model->organization_name());
+ EXPECT_TRUE(Mock::VerifyAndClear(&tmp_cert_store));
+}
+
+TEST_F(WebsiteSettingsModelTest, HTTPSRevocationError) {
+ GURL url = GURL("https://www.example.com");
+
+ SSLStatus ssl;
+ ssl.security_style = content::SECURITY_STYLE_AUTHENTICATED;
+ ssl.cert_id = cert_id_;
+ ssl.cert_status = net::CERT_STATUS_UNABLE_TO_CHECK_REVOCATION;
+ ssl.security_bits = 81; // No error if > 80.
+ int status = 0;
+ status = SetSSLVersion(status, net::SSL_CONNECTION_VERSION_TLS1);
+ status = SetSSLCipherSuite(status, TLS_RSA_WITH_AES_256_CBC_SHA256);
+ ssl.connection_status = status;
+
+ scoped_ptr<WebsiteSettingsModel> model(
+ new WebsiteSettingsModel(profile(), url, ssl, &cert_store_));
+ EXPECT_EQ(WebsiteSettingsModel::SITE_CONNECTION_STATUS_ENCRYPTED,
+ model->site_connection_status());
+ EXPECT_EQ(WebsiteSettingsModel::SITE_IDENTITY_STATUS_CERT_REVOCATION_UNKNOWN,
+ model->site_identity_status());
+ EXPECT_EQ(string16(), model->organization_name());
+}
+
+TEST_F(WebsiteSettingsModelTest, HTTPSConnectionError) {
+ GURL url = GURL("https://www.example.com");
+
+ SSLStatus ssl;
+ ssl.security_style = content::SECURITY_STYLE_AUTHENTICATED;
+ ssl.cert_id = cert_id_;
+ ssl.cert_status = 0;
+ ssl.security_bits = 1;
+ int status = 0;
+ status = SetSSLVersion(status, net::SSL_CONNECTION_VERSION_TLS1);
+ status = SetSSLCipherSuite(status, TLS_RSA_WITH_AES_256_CBC_SHA256);
+ ssl.connection_status = status;
+
+ scoped_ptr<WebsiteSettingsModel> model(
+ new WebsiteSettingsModel(profile(), url, ssl, &cert_store_));
+ EXPECT_EQ(WebsiteSettingsModel::SITE_CONNECTION_STATUS_ENCRYPTED_ERROR,
+ model->site_connection_status());
+ EXPECT_EQ(WebsiteSettingsModel::SITE_IDENTITY_STATUS_CERT,
+ model->site_identity_status());
+ EXPECT_EQ(string16(), model->organization_name());
+}
« no previous file with comments | « chrome/browser/website_settings_model.cc ('k') | chrome/chrome_browser.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698