| 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
|
|
|