Index: content/common/ssl_status_serialization.cc |
diff --git a/content/common/ssl_status_serialization.cc b/content/common/ssl_status_serialization.cc |
index 87593a595a2589e4b2d962dbb968b998e097af96..c15beb8e5dde3fda6b7fdd032cedf1977d5f7463 100644 |
--- a/content/common/ssl_status_serialization.cc |
+++ b/content/common/ssl_status_serialization.cc |
@@ -9,15 +9,25 @@ |
namespace content { |
-std::string SerializeSecurityInfo(int cert_id, |
- net::CertStatus cert_status, |
- int security_bits, |
- int ssl_connection_status) { |
+std::string SerializeSecurityInfo( |
+ int cert_id, |
+ net::CertStatus cert_status, |
+ int security_bits, |
+ int ssl_connection_status, |
+ const SignedCertificateTimestampIDStatusList& |
+ signed_certificate_timestamp_ids) { |
Pickle pickle; |
pickle.WriteInt(cert_id); |
pickle.WriteUInt32(cert_status); |
pickle.WriteInt(security_bits); |
pickle.WriteInt(ssl_connection_status); |
+ pickle.WriteInt(signed_certificate_timestamp_ids.size()); |
+ for (SignedCertificateTimestampIDStatusList::const_iterator iter = |
+ signed_certificate_timestamp_ids.begin(); |
+ iter != signed_certificate_timestamp_ids.end(); ++iter) { |
+ pickle.WriteInt(iter->id); |
+ pickle.WriteUInt16(iter->status); |
+ } |
return std::string(static_cast<const char*>(pickle.data()), pickle.size()); |
} |
@@ -25,8 +35,11 @@ bool DeserializeSecurityInfo(const std::string& state, |
int* cert_id, |
net::CertStatus* cert_status, |
int* security_bits, |
- int* ssl_connection_status) { |
- DCHECK(cert_id && cert_status && security_bits && ssl_connection_status); |
+ int* ssl_connection_status, |
+ SignedCertificateTimestampIDStatusList* |
+ signed_certificate_timestamp_ids) { |
+ DCHECK(cert_id && cert_status && security_bits && ssl_connection_status && |
+ signed_certificate_timestamp_ids); |
if (state.empty()) { |
// No SSL used. |
*cert_id = 0; |
@@ -34,15 +47,35 @@ bool DeserializeSecurityInfo(const std::string& state, |
*cert_status = 0; |
*security_bits = -1; |
*ssl_connection_status = 0; |
+ signed_certificate_timestamp_ids->clear(); |
return false; |
} |
Pickle pickle(state.data(), static_cast<int>(state.size())); |
PickleIterator iter(pickle); |
- return pickle.ReadInt(&iter, cert_id) && |
- pickle.ReadUInt32(&iter, cert_status) && |
- pickle.ReadInt(&iter, security_bits) && |
- pickle.ReadInt(&iter, ssl_connection_status); |
+ bool pickle_read_ok = pickle.ReadInt(&iter, cert_id) && |
+ pickle.ReadUInt32(&iter, cert_status) && |
+ pickle.ReadInt(&iter, security_bits) && |
+ pickle.ReadInt(&iter, ssl_connection_status); |
+ if (!pickle_read_ok) |
+ return pickle_read_ok; |
+ |
+ int num_scts_to_read; |
+ pickle_read_ok = pickle.ReadInt(&iter, &num_scts_to_read); |
+ int id; |
+ uint16 status; |
+ for (; pickle_read_ok && num_scts_to_read > 0; --num_scts_to_read) { |
+ pickle_read_ok = pickle.ReadInt(&iter, &id) && |
+ pickle.ReadUInt16(&iter, &status); |
+ if (pickle_read_ok) { |
+ signed_certificate_timestamp_ids->push_back( |
+ SignedCertificateTimestampIDAndStatus( |
+ id, |
+ static_cast<net::ct::SCTVerifyStatus>(status))); |
+ } |
+ } |
+ |
+ return pickle_read_ok; |
} |
} // namespace content |