Index: chrome/browser/net/ssl_config_service_manager_pref.cc |
diff --git a/chrome/browser/net/ssl_config_service_manager_pref.cc b/chrome/browser/net/ssl_config_service_manager_pref.cc |
deleted file mode 100644 |
index 9a400ec275d0dee77974a6f770cad1d94a8c5347..0000000000000000000000000000000000000000 |
--- a/chrome/browser/net/ssl_config_service_manager_pref.cc |
+++ /dev/null |
@@ -1,296 +0,0 @@ |
-// 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/net/ssl_config_service_manager.h" |
- |
-#include <algorithm> |
-#include <string> |
-#include <vector> |
- |
-#include "base/basictypes.h" |
-#include "base/bind.h" |
-#include "base/metrics/field_trial.h" |
-#include "base/prefs/pref_change_registrar.h" |
-#include "base/prefs/pref_member.h" |
-#include "base/prefs/pref_registry_simple.h" |
-#include "base/prefs/pref_service.h" |
-#include "chrome/browser/chrome_notification_types.h" |
-#include "chrome/common/chrome_switches.h" |
-#include "chrome/common/pref_names.h" |
-#include "components/content_settings/core/browser/content_settings_utils.h" |
-#include "components/content_settings/core/common/content_settings.h" |
-#include "content/public/browser/browser_thread.h" |
-#include "net/ssl/ssl_cipher_suite_names.h" |
-#include "net/ssl/ssl_config_service.h" |
- |
-using content::BrowserThread; |
- |
-namespace { |
- |
-// Converts a ListValue of StringValues into a vector of strings. Any Values |
-// which cannot be converted will be skipped. |
-std::vector<std::string> ListValueToStringVector(const base::ListValue* value) { |
- std::vector<std::string> results; |
- results.reserve(value->GetSize()); |
- std::string s; |
- for (base::ListValue::const_iterator it = value->begin(); it != value->end(); |
- ++it) { |
- if (!(*it)->GetAsString(&s)) |
- continue; |
- results.push_back(s); |
- } |
- return results; |
-} |
- |
-// Parses a vector of cipher suite strings, returning a sorted vector |
-// containing the underlying SSL/TLS cipher suites. Unrecognized/invalid |
-// cipher suites will be ignored. |
-std::vector<uint16> ParseCipherSuites( |
- const std::vector<std::string>& cipher_strings) { |
- std::vector<uint16> cipher_suites; |
- cipher_suites.reserve(cipher_strings.size()); |
- |
- for (std::vector<std::string>::const_iterator it = cipher_strings.begin(); |
- it != cipher_strings.end(); ++it) { |
- uint16 cipher_suite = 0; |
- if (!net::ParseSSLCipherString(*it, &cipher_suite)) { |
- LOG(ERROR) << "Ignoring unrecognized or unparsable cipher suite: " |
- << *it; |
- continue; |
- } |
- cipher_suites.push_back(cipher_suite); |
- } |
- std::sort(cipher_suites.begin(), cipher_suites.end()); |
- return cipher_suites; |
-} |
- |
-// Returns the SSL protocol version (as a uint16) represented by a string. |
-// Returns 0 if the string is invalid. |
-uint16 SSLProtocolVersionFromString(const std::string& version_str) { |
- uint16 version = 0; // Invalid. |
- if (version_str == switches::kSSLVersionTLSv1) { |
- version = net::SSL_PROTOCOL_VERSION_TLS1; |
- } else if (version_str == switches::kSSLVersionTLSv11) { |
- version = net::SSL_PROTOCOL_VERSION_TLS1_1; |
- } else if (version_str == switches::kSSLVersionTLSv12) { |
- version = net::SSL_PROTOCOL_VERSION_TLS1_2; |
- } |
- return version; |
-} |
- |
-} // namespace |
- |
-//////////////////////////////////////////////////////////////////////////////// |
-// SSLConfigServicePref |
- |
-// An SSLConfigService which stores a cached version of the current SSLConfig |
-// prefs, which are updated by SSLConfigServiceManagerPref when the prefs |
-// change. |
-class SSLConfigServicePref : public net::SSLConfigService { |
- public: |
- SSLConfigServicePref() {} |
- |
- // Store SSL config settings in |config|. Must only be called from IO thread. |
- void GetSSLConfig(net::SSLConfig* config) override; |
- |
- private: |
- // Allow the pref watcher to update our internal state. |
- friend class SSLConfigServiceManagerPref; |
- |
- ~SSLConfigServicePref() override {} |
- |
- // This method is posted to the IO thread from the browser thread to carry the |
- // new config information. |
- void SetNewSSLConfig(const net::SSLConfig& new_config); |
- |
- // Cached value of prefs, should only be accessed from IO thread. |
- net::SSLConfig cached_config_; |
- |
- DISALLOW_COPY_AND_ASSIGN(SSLConfigServicePref); |
-}; |
- |
-void SSLConfigServicePref::GetSSLConfig(net::SSLConfig* config) { |
- DCHECK_CURRENTLY_ON(BrowserThread::IO); |
- *config = cached_config_; |
-} |
- |
-void SSLConfigServicePref::SetNewSSLConfig( |
- const net::SSLConfig& new_config) { |
- net::SSLConfig orig_config = cached_config_; |
- cached_config_ = new_config; |
- ProcessConfigUpdate(orig_config, new_config); |
-} |
- |
-//////////////////////////////////////////////////////////////////////////////// |
-// SSLConfigServiceManagerPref |
- |
-// The manager for holding and updating an SSLConfigServicePref instance. |
-class SSLConfigServiceManagerPref |
- : public SSLConfigServiceManager { |
- public: |
- explicit SSLConfigServiceManagerPref(PrefService* local_state); |
- ~SSLConfigServiceManagerPref() override {} |
- |
- // Register local_state SSL preferences. |
- static void RegisterPrefs(PrefRegistrySimple* registry); |
- |
- net::SSLConfigService* Get() override; |
- |
- private: |
- // Callback for preference changes. This will post the changes to the IO |
- // thread with SetNewSSLConfig. |
- void OnPreferenceChanged(PrefService* prefs, |
- const std::string& pref_name); |
- |
- // Store SSL config settings in |config|, directly from the preferences. Must |
- // only be called from UI thread. |
- void GetSSLConfigFromPrefs(net::SSLConfig* config); |
- |
- // Processes changes to the disabled cipher suites preference, updating the |
- // cached list of parsed SSL/TLS cipher suites that are disabled. |
- void OnDisabledCipherSuitesChange(PrefService* local_state); |
- |
- PrefChangeRegistrar local_state_change_registrar_; |
- |
- // The local_state prefs (should only be accessed from UI thread) |
- BooleanPrefMember rev_checking_enabled_; |
- BooleanPrefMember rev_checking_required_local_anchors_; |
- StringPrefMember ssl_version_min_; |
- StringPrefMember ssl_version_max_; |
- StringPrefMember ssl_version_fallback_min_; |
- |
- // The cached list of disabled SSL cipher suites. |
- std::vector<uint16> disabled_cipher_suites_; |
- |
- scoped_refptr<SSLConfigServicePref> ssl_config_service_; |
- |
- DISALLOW_COPY_AND_ASSIGN(SSLConfigServiceManagerPref); |
-}; |
- |
-SSLConfigServiceManagerPref::SSLConfigServiceManagerPref( |
- PrefService* local_state) |
- : ssl_config_service_(new SSLConfigServicePref()) { |
- DCHECK(local_state); |
- |
- PrefChangeRegistrar::NamedChangeCallback local_state_callback = base::Bind( |
- &SSLConfigServiceManagerPref::OnPreferenceChanged, |
- base::Unretained(this), |
- local_state); |
- |
- rev_checking_enabled_.Init( |
- prefs::kCertRevocationCheckingEnabled, local_state, local_state_callback); |
- rev_checking_required_local_anchors_.Init( |
- prefs::kCertRevocationCheckingRequiredLocalAnchors, |
- local_state, |
- local_state_callback); |
- ssl_version_min_.Init( |
- prefs::kSSLVersionMin, local_state, local_state_callback); |
- ssl_version_max_.Init( |
- prefs::kSSLVersionMax, local_state, local_state_callback); |
- ssl_version_fallback_min_.Init( |
- prefs::kSSLVersionFallbackMin, local_state, local_state_callback); |
- |
- local_state_change_registrar_.Init(local_state); |
- local_state_change_registrar_.Add( |
- prefs::kCipherSuiteBlacklist, local_state_callback); |
- |
- OnDisabledCipherSuitesChange(local_state); |
- |
- // Initialize from UI thread. This is okay as there shouldn't be anything on |
- // the IO thread trying to access it yet. |
- GetSSLConfigFromPrefs(&ssl_config_service_->cached_config_); |
-} |
- |
-// static |
-void SSLConfigServiceManagerPref::RegisterPrefs(PrefRegistrySimple* registry) { |
- net::SSLConfig default_config; |
- registry->RegisterBooleanPref(prefs::kCertRevocationCheckingEnabled, |
- default_config.rev_checking_enabled); |
- registry->RegisterBooleanPref( |
- prefs::kCertRevocationCheckingRequiredLocalAnchors, |
- default_config.rev_checking_required_local_anchors); |
- registry->RegisterStringPref(prefs::kSSLVersionMin, std::string()); |
- registry->RegisterStringPref(prefs::kSSLVersionMax, std::string()); |
- registry->RegisterStringPref(prefs::kSSLVersionFallbackMin, std::string()); |
- registry->RegisterListPref(prefs::kCipherSuiteBlacklist); |
-} |
- |
-net::SSLConfigService* SSLConfigServiceManagerPref::Get() { |
- return ssl_config_service_.get(); |
-} |
- |
-void SSLConfigServiceManagerPref::OnPreferenceChanged( |
- PrefService* prefs, |
- const std::string& pref_name_in) { |
- DCHECK_CURRENTLY_ON(BrowserThread::UI); |
- DCHECK(prefs); |
- if (pref_name_in == prefs::kCipherSuiteBlacklist) |
- OnDisabledCipherSuitesChange(prefs); |
- |
- net::SSLConfig new_config; |
- GetSSLConfigFromPrefs(&new_config); |
- |
- // Post a task to |io_loop| with the new configuration, so it can |
- // update |cached_config_|. |
- BrowserThread::PostTask( |
- BrowserThread::IO, |
- FROM_HERE, |
- base::Bind( |
- &SSLConfigServicePref::SetNewSSLConfig, |
- ssl_config_service_.get(), |
- new_config)); |
-} |
- |
-void SSLConfigServiceManagerPref::GetSSLConfigFromPrefs( |
- net::SSLConfig* config) { |
- // rev_checking_enabled was formerly a user-settable preference, but now |
- // it is managed-only. |
- if (rev_checking_enabled_.IsManaged()) |
- config->rev_checking_enabled = rev_checking_enabled_.GetValue(); |
- else |
- config->rev_checking_enabled = false; |
- config->rev_checking_required_local_anchors = |
- rev_checking_required_local_anchors_.GetValue(); |
- std::string version_min_str = ssl_version_min_.GetValue(); |
- std::string version_max_str = ssl_version_max_.GetValue(); |
- std::string version_fallback_min_str = ssl_version_fallback_min_.GetValue(); |
- config->version_min = net::kDefaultSSLVersionMin; |
- config->version_max = net::kDefaultSSLVersionMax; |
- config->version_fallback_min = net::kDefaultSSLVersionFallbackMin; |
- uint16 version_min = SSLProtocolVersionFromString(version_min_str); |
- uint16 version_max = SSLProtocolVersionFromString(version_max_str); |
- uint16 version_fallback_min = |
- SSLProtocolVersionFromString(version_fallback_min_str); |
- if (version_min) { |
- config->version_min = version_min; |
- } |
- if (version_max) { |
- uint16 supported_version_max = config->version_max; |
- config->version_max = std::min(supported_version_max, version_max); |
- } |
- if (version_fallback_min) { |
- config->version_fallback_min = version_fallback_min; |
- } |
- config->disabled_cipher_suites = disabled_cipher_suites_; |
-} |
- |
-void SSLConfigServiceManagerPref::OnDisabledCipherSuitesChange( |
- PrefService* local_state) { |
- const base::ListValue* value = |
- local_state->GetList(prefs::kCipherSuiteBlacklist); |
- disabled_cipher_suites_ = ParseCipherSuites(ListValueToStringVector(value)); |
-} |
- |
-//////////////////////////////////////////////////////////////////////////////// |
-// SSLConfigServiceManager |
- |
-// static |
-SSLConfigServiceManager* SSLConfigServiceManager::CreateDefaultManager( |
- PrefService* local_state) { |
- return new SSLConfigServiceManagerPref(local_state); |
-} |
- |
-// static |
-void SSLConfigServiceManager::RegisterPrefs(PrefRegistrySimple* registry) { |
- SSLConfigServiceManagerPref::RegisterPrefs(registry); |
-} |