| Index: chrome/browser/net/ssl_config_service_manager_pref_unittest.cc
|
| diff --git a/chrome/browser/net/ssl_config_service_manager_pref_unittest.cc b/chrome/browser/net/ssl_config_service_manager_pref_unittest.cc
|
| index 0d3e9061cab98a4f0af8aea25da24bae42dc7ced..525335b192e1f0d465cbe87492133b33162e04fb 100644
|
| --- a/chrome/browser/net/ssl_config_service_manager_pref_unittest.cc
|
| +++ b/chrome/browser/net/ssl_config_service_manager_pref_unittest.cc
|
| @@ -4,9 +4,14 @@
|
|
|
| #include "chrome/browser/net/pref_proxy_config_service.h"
|
|
|
| +#include "base/command_line.h"
|
| +#include "base/memory/ref_counted.h"
|
| #include "base/message_loop.h"
|
| #include "base/values.h"
|
| #include "chrome/browser/net/ssl_config_service_manager.h"
|
| +#include "chrome/browser/prefs/pref_service_mock_builder.h"
|
| +#include "chrome/browser/prefs/testing_pref_store.h"
|
| +#include "chrome/common/chrome_switches.h"
|
| #include "chrome/common/pref_names.h"
|
| #include "chrome/test/base/testing_pref_service.h"
|
| #include "content/test/test_browser_thread.h"
|
| @@ -20,37 +25,24 @@ using net::SSLConfigService;
|
|
|
| class SSLConfigServiceManagerPrefTest : public testing::Test {
|
| public:
|
| - SSLConfigServiceManagerPrefTest() {}
|
| -
|
| - virtual void SetUp() {
|
| - message_loop_.reset(new MessageLoop());
|
| - ui_thread_.reset(
|
| - new content::TestBrowserThread(BrowserThread::UI, message_loop_.get()));
|
| - io_thread_.reset(
|
| - new content::TestBrowserThread(BrowserThread::IO, message_loop_.get()));
|
| - pref_service_.reset(new TestingPrefService());
|
| - SSLConfigServiceManager::RegisterPrefs(pref_service_.get());
|
| - }
|
| -
|
| - virtual void TearDown() {
|
| - pref_service_.reset();
|
| - io_thread_.reset();
|
| - ui_thread_.reset();
|
| - message_loop_.reset();
|
| - }
|
| + SSLConfigServiceManagerPrefTest()
|
| + : ui_thread_(BrowserThread::UI, &message_loop_),
|
| + io_thread_(BrowserThread::IO, &message_loop_) {}
|
|
|
| protected:
|
| - scoped_ptr<MessageLoop> message_loop_;
|
| - scoped_ptr<content::TestBrowserThread> ui_thread_;
|
| - scoped_ptr<content::TestBrowserThread> io_thread_;
|
| - scoped_ptr<TestingPrefService> pref_service_;
|
| + MessageLoop message_loop_;
|
| + content::TestBrowserThread ui_thread_;
|
| + content::TestBrowserThread io_thread_;
|
| };
|
|
|
| // Test that cipher suites can be disabled. "Good" refers to the fact that
|
| // every value is expected to be successfully parsed into a cipher suite.
|
| TEST_F(SSLConfigServiceManagerPrefTest, GoodDisabledCipherSuites) {
|
| + TestingPrefService pref_service;
|
| + SSLConfigServiceManager::RegisterPrefs(&pref_service);
|
| +
|
| scoped_ptr<SSLConfigServiceManager> config_manager(
|
| - SSLConfigServiceManager::CreateDefaultManager(pref_service_.get()));
|
| + SSLConfigServiceManager::CreateDefaultManager(&pref_service));
|
| ASSERT_TRUE(config_manager.get());
|
| scoped_refptr<SSLConfigService> config_service(config_manager->Get());
|
| ASSERT_TRUE(config_service.get());
|
| @@ -62,11 +54,11 @@ TEST_F(SSLConfigServiceManagerPrefTest, GoodDisabledCipherSuites) {
|
| ListValue* list_value = new ListValue();
|
| list_value->Append(Value::CreateStringValue("0x0004"));
|
| list_value->Append(Value::CreateStringValue("0x0005"));
|
| - pref_service_->SetUserPref(prefs::kCipherSuiteBlacklist, list_value);
|
| + pref_service.SetUserPref(prefs::kCipherSuiteBlacklist, list_value);
|
|
|
| // Pump the message loop to notify the SSLConfigServiceManagerPref that the
|
| // preferences changed.
|
| - message_loop_->RunAllPending();
|
| + message_loop_.RunAllPending();
|
|
|
| SSLConfig config;
|
| config_service->GetSSLConfig(&config);
|
| @@ -81,8 +73,11 @@ TEST_F(SSLConfigServiceManagerPrefTest, GoodDisabledCipherSuites) {
|
| // there are one or more non-cipher suite strings in the preference. They
|
| // should be ignored.
|
| TEST_F(SSLConfigServiceManagerPrefTest, BadDisabledCipherSuites) {
|
| + TestingPrefService pref_service;
|
| + SSLConfigServiceManager::RegisterPrefs(&pref_service);
|
| +
|
| scoped_ptr<SSLConfigServiceManager> config_manager(
|
| - SSLConfigServiceManager::CreateDefaultManager(pref_service_.get()));
|
| + SSLConfigServiceManager::CreateDefaultManager(&pref_service));
|
| ASSERT_TRUE(config_manager.get());
|
| scoped_refptr<SSLConfigService> config_service(config_manager->Get());
|
| ASSERT_TRUE(config_service.get());
|
| @@ -96,11 +91,11 @@ TEST_F(SSLConfigServiceManagerPrefTest, BadDisabledCipherSuites) {
|
| list_value->Append(Value::CreateStringValue("TLS_NOT_WITH_A_CIPHER_SUITE"));
|
| list_value->Append(Value::CreateStringValue("0x0005"));
|
| list_value->Append(Value::CreateStringValue("0xBEEFY"));
|
| - pref_service_->SetUserPref(prefs::kCipherSuiteBlacklist, list_value);
|
| + pref_service.SetUserPref(prefs::kCipherSuiteBlacklist, list_value);
|
|
|
| // Pump the message loop to notify the SSLConfigServiceManagerPref that the
|
| // preferences changed.
|
| - message_loop_->RunAllPending();
|
| + message_loop_.RunAllPending();
|
|
|
| SSLConfig config;
|
| config_service->GetSSLConfig(&config);
|
| @@ -110,3 +105,110 @@ TEST_F(SSLConfigServiceManagerPrefTest, BadDisabledCipherSuites) {
|
| EXPECT_EQ(0x0004, config.disabled_cipher_suites[0]);
|
| EXPECT_EQ(0x0005, config.disabled_cipher_suites[1]);
|
| }
|
| +
|
| +// Test that existing user settings for TLS1.0/SSL3.0 are both ignored and
|
| +// cleared from user preferences.
|
| +TEST_F(SSLConfigServiceManagerPrefTest, IgnoreLegacySSLSettings) {
|
| + scoped_refptr<TestingPrefStore> user_prefs(new TestingPrefStore());
|
| +
|
| + // SSL3.0 and TLS1.0 used to be user-definable prefs. They are now used as
|
| + // command-line options. Ensure any existing user prefs are ignored in
|
| + // favour of the command-line flags.
|
| + user_prefs->SetBoolean(prefs::kSSL3Enabled, false);
|
| + user_prefs->SetBoolean(prefs::kTLS1Enabled, false);
|
| +
|
| + // Ensure the preferences exist initially.
|
| + bool is_ssl3_enabled = true;
|
| + EXPECT_TRUE(user_prefs->GetBoolean(prefs::kSSL3Enabled, &is_ssl3_enabled));
|
| + EXPECT_FALSE(is_ssl3_enabled);
|
| +
|
| + bool is_tls1_enabled = true;
|
| + EXPECT_TRUE(user_prefs->GetBoolean(prefs::kTLS1Enabled, &is_tls1_enabled));
|
| + EXPECT_FALSE(is_tls1_enabled);
|
| +
|
| + PrefServiceMockBuilder builder;
|
| + builder.WithUserPrefs(user_prefs.get());
|
| + scoped_ptr<PrefService> pref_service(builder.Create());
|
| +
|
| + SSLConfigServiceManager::RegisterPrefs(pref_service.get());
|
| +
|
| + scoped_ptr<SSLConfigServiceManager> config_manager(
|
| + SSLConfigServiceManager::CreateDefaultManager(pref_service.get()));
|
| + ASSERT_TRUE(config_manager.get());
|
| + scoped_refptr<SSLConfigService> config_service(config_manager->Get());
|
| + ASSERT_TRUE(config_service.get());
|
| +
|
| + SSLConfig ssl_config;
|
| + config_service->GetSSLConfig(&ssl_config);
|
| + // The default value in the absence of command-line options is that both
|
| + // protocols are enabled.
|
| + EXPECT_TRUE(ssl_config.ssl3_enabled);
|
| + EXPECT_TRUE(ssl_config.tls1_enabled);
|
| +
|
| + // The existing user settings should be removed from the pref_service.
|
| + EXPECT_FALSE(pref_service->HasPrefPath(prefs::kSSL3Enabled));
|
| + EXPECT_FALSE(pref_service->HasPrefPath(prefs::kTLS1Enabled));
|
| +
|
| + // Explicitly double-check the settings are not in the user preference
|
| + // store.
|
| + EXPECT_FALSE(user_prefs->GetBoolean(prefs::kSSL3Enabled, &is_ssl3_enabled));
|
| + EXPECT_FALSE(user_prefs->GetBoolean(prefs::kTLS1Enabled, &is_tls1_enabled));
|
| +}
|
| +
|
| +// Test that command-line settings for TLS1.0/SSL3.0 are respected, that they
|
| +// disregard any existing user preferences, and that they do not persist to
|
| +// the user preferences files.
|
| +TEST_F(SSLConfigServiceManagerPrefTest, CommandLineOverridesUserPrefs) {
|
| + scoped_refptr<TestingPrefStore> user_prefs(new TestingPrefStore());
|
| +
|
| + // Explicitly enable SSL3.0/TLS1.0 in the user preferences, to mirror the
|
| + // more common legacy file.
|
| + user_prefs->SetBoolean(prefs::kSSL3Enabled, true);
|
| + user_prefs->SetBoolean(prefs::kTLS1Enabled, true);
|
| +
|
| + // Ensure the preferences exist initially.
|
| + bool is_ssl3_enabled = false;
|
| + EXPECT_TRUE(user_prefs->GetBoolean(prefs::kSSL3Enabled, &is_ssl3_enabled));
|
| + EXPECT_TRUE(is_ssl3_enabled);
|
| +
|
| + bool is_tls1_enabled = false;
|
| + EXPECT_TRUE(user_prefs->GetBoolean(prefs::kTLS1Enabled, &is_tls1_enabled));
|
| + EXPECT_TRUE(is_tls1_enabled);
|
| +
|
| + CommandLine command_line(CommandLine::NO_PROGRAM);
|
| + command_line.AppendSwitch(switches::kDisableSSL3);
|
| + command_line.AppendSwitch(switches::kDisableTLS1);
|
| +
|
| + PrefServiceMockBuilder builder;
|
| + builder.WithUserPrefs(user_prefs.get());
|
| + builder.WithCommandLine(&command_line);
|
| + scoped_ptr<PrefService> pref_service(builder.Create());
|
| +
|
| + SSLConfigServiceManager::RegisterPrefs(pref_service.get());
|
| +
|
| + scoped_ptr<SSLConfigServiceManager> config_manager(
|
| + SSLConfigServiceManager::CreateDefaultManager(pref_service.get()));
|
| + ASSERT_TRUE(config_manager.get());
|
| + scoped_refptr<SSLConfigService> config_service(config_manager->Get());
|
| + ASSERT_TRUE(config_service.get());
|
| +
|
| + SSLConfig ssl_config;
|
| + config_service->GetSSLConfig(&ssl_config);
|
| + // Command-line flags to disable should override the user preferences to
|
| + // enable.
|
| + EXPECT_FALSE(ssl_config.ssl3_enabled);
|
| + EXPECT_FALSE(ssl_config.tls1_enabled);
|
| +
|
| + // Explicitly double-check the settings are not in the user preference
|
| + // store.
|
| + const PrefService::Preference* ssl3_enabled_pref =
|
| + pref_service->FindPreference(prefs::kSSL3Enabled);
|
| + EXPECT_FALSE(ssl3_enabled_pref->IsUserModifiable());
|
| +
|
| + const PrefService::Preference* tls1_enabled_pref =
|
| + pref_service->FindPreference(prefs::kTLS1Enabled);
|
| + EXPECT_FALSE(tls1_enabled_pref->IsUserModifiable());
|
| +
|
| + EXPECT_FALSE(user_prefs->GetBoolean(prefs::kSSL3Enabled, &is_ssl3_enabled));
|
| + EXPECT_FALSE(user_prefs->GetBoolean(prefs::kTLS1Enabled, &is_tls1_enabled));
|
| +}
|
|
|