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

Unified Diff: chrome/browser/net/ssl_config_service_manager_pref.cc

Issue 1320533007: Componentize ssl_config_service_manager_pref.cc (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Resolve -Wnewline-eof mac_chromium bot failure Created 5 years, 2 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
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);
-}
« no previous file with comments | « chrome/browser/net/ssl_config_service_manager.h ('k') | chrome/browser/net/ssl_config_service_manager_pref_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698