| Index: content/common/ssl_status_serialization.cc
|
| diff --git a/content/common/ssl_status_serialization.cc b/content/common/ssl_status_serialization.cc
|
| index c60564ff09b616d0f4f001b32b1f6d79877ea300..ebbe9d7253af85534eb8cd80615b4d35abf1fe77 100644
|
| --- a/content/common/ssl_status_serialization.cc
|
| +++ b/content/common/ssl_status_serialization.cc
|
| @@ -13,13 +13,20 @@ std::string SerializeSecurityInfo(int cert_id,
|
| net::CertStatus cert_status,
|
| int security_bits,
|
| int ssl_connection_status,
|
| - int signed_certificate_timestamp_id) {
|
| + const SCTIdStatusList&
|
| + 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_id);
|
| + pickle.WriteInt(signed_certificate_timestamp_ids.size());
|
| + for (SCTIdStatusList::const_iterator iter =
|
| + signed_certificate_timestamp_ids.begin();
|
| + iter != signed_certificate_timestamp_ids.end(); ++iter) {
|
| + pickle.WriteInt(iter->first); // sct_id
|
| + pickle.WriteUInt16(iter->second); // verification status
|
| + }
|
| return std::string(static_cast<const char*>(pickle.data()), pickle.size());
|
| }
|
|
|
| @@ -28,7 +35,8 @@ bool DeserializeSecurityInfo(const std::string& state,
|
| net::CertStatus* cert_status,
|
| int* security_bits,
|
| int* ssl_connection_status,
|
| - int* signed_certificate_timestamp_id) {
|
| + SCTIdStatusList*
|
| + signed_certificate_timestamp_ids) {
|
| DCHECK(cert_id && cert_status && security_bits && ssl_connection_status);
|
| if (state.empty()) {
|
| // No SSL used.
|
| @@ -37,17 +45,31 @@ bool DeserializeSecurityInfo(const std::string& state,
|
| *cert_status = 0;
|
| *security_bits = -1;
|
| *ssl_connection_status = 0;
|
| - *signed_certificate_timestamp_id = 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) &&
|
| - pickle.ReadInt(&iter, signed_certificate_timestamp_id);
|
| + 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) {
|
| + int num_scts_to_read;
|
| + pickle_read_ok = pickle.ReadInt(&iter, &num_scts_to_read);
|
| + int id;
|
| + net::SignedCertificateTimestampVerificationStatus status;
|
| + for (; num_scts_to_read > 0 && pickle_read_ok; --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(
|
| + std::make_pair(id, status));
|
| + }
|
| + }
|
| +
|
| + return pickle_read_ok;
|
| }
|
|
|
| } // namespace content
|
|
|