Index: chrome/browser/net/transport_security_persister.cc |
diff --git a/chrome/browser/net/transport_security_persister.cc b/chrome/browser/net/transport_security_persister.cc |
index 140eb391242a845a3782d2666f747270a93aad28..8b70e8c73f7babf4899abb7f3818a6bd910125ab 100644 |
--- a/chrome/browser/net/transport_security_persister.cc |
+++ b/chrome/browser/net/transport_security_persister.cc |
@@ -78,6 +78,11 @@ const char kStrict[] = "strict"; |
const char kDefault[] = "default"; |
const char kPinningOnly[] = "pinning-only"; |
const char kCreated[] = "created"; |
+const char kSSLVersionMin[] = "ssl_version_min"; |
+const char kSSLVersion30[] = "sslv3.0"; |
agl
2013/04/11 13:48:57
We already have a convention for these strings I'm
|
+const char kTLSVersion10[] = "tlsv1.0"; |
+const char kTLSVersion11[] = "tlsv1.1"; |
+const char kTLSVersion12[] = "tlsv1.2"; |
} // namespace |
@@ -174,6 +179,25 @@ bool TransportSecurityPersister::SerializeData(std::string* output) { |
serialized->SetDouble(kDynamicSPKIHashesExpiry, |
domain_state.dynamic_spki_hashes_expiry.ToDoubleT()); |
+ switch (domain_state.ssl_version_min) { |
+ case net::SSL_CONNECTION_VERSION_SSL3: |
+ serialized->SetString(kSSLVersionMin, "sslv3.0"); |
+ break; |
+ case net::SSL_CONNECTION_VERSION_TLS1: |
+ serialized->SetString(kSSLVersionMin, "tlsv1.0"); |
+ break; |
+ case net::SSL_CONNECTION_VERSION_TLS1_1: |
+ serialized->SetString(kSSLVersionMin, "tlsv1.1"); |
+ break; |
+ case net::SSL_CONNECTION_VERSION_TLS1_2: |
+ serialized->SetString(kSSLVersionMin, "tlsv1.2"); |
+ break; |
+ default: |
+ NOTREACHED() << "DomainState with unknown ssl_version_min"; |
+ delete serialized; |
+ continue; |
+ } |
+ |
switch (domain_state.upgrade_mode) { |
case TransportSecurityState::DomainState::MODE_FORCE_HTTPS: |
serialized->SetString(kMode, kForceHTTPS); |
@@ -269,6 +293,19 @@ bool TransportSecurityPersister::Deserialize(const std::string& serialized, |
if (parsed->GetList(kDynamicSPKIHashes, &pins_list)) |
SPKIHashesFromListValue(*pins_list, &domain_state.dynamic_spki_hashes); |
+ std::string ssl_version_min; |
+ if (parsed->GetString(kSSLVersionMin, &ssl_version_min)) { |
+ if (ssl_version_min == kSSLVersion30) { |
+ domain_state.ssl_version_min = net::SSL_CONNECTION_VERSION_SSL3; |
+ } else if (ssl_version_min == kTLSVersion10) { |
+ domain_state.ssl_version_min = net::SSL_CONNECTION_VERSION_TLS1; |
+ } else if (ssl_version_min == kTLSVersion11) { |
+ domain_state.ssl_version_min = net::SSL_CONNECTION_VERSION_TLS1_1; |
+ } else if (ssl_version_min == kTLSVersion12) { |
+ domain_state.ssl_version_min = net::SSL_CONNECTION_VERSION_TLS1_2; |
+ } |
+ } |
+ |
if (mode_string == kForceHTTPS || mode_string == kStrict) { |
domain_state.upgrade_mode = |
TransportSecurityState::DomainState::MODE_FORCE_HTTPS; |