15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/common/ssl_status_serialization.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/logging.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/pickle.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content {
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string SerializeSecurityInfo(int cert_id,
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                  net::CertStatus cert_status,
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                  int security_bits,
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                  int ssl_connection_status) {
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Pickle pickle;
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  pickle.WriteInt(cert_id);
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  pickle.WriteUInt32(cert_status);
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  pickle.WriteInt(security_bits);
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  pickle.WriteInt(ssl_connection_status);
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return std::string(static_cast<const char*>(pickle.data()), pickle.size());
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool DeserializeSecurityInfo(const std::string& state,
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                             int* cert_id,
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                             net::CertStatus* cert_status,
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                             int* security_bits,
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                             int* ssl_connection_status) {
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DCHECK(cert_id && cert_status && security_bits && ssl_connection_status);
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (state.empty()) {
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // No SSL used.
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    *cert_id = 0;
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // The following are not applicable and are set to the default values.
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    *cert_status = 0;
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    *security_bits = -1;
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    *ssl_connection_status = 0;
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return false;
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Pickle pickle(state.data(), static_cast<int>(state.size()));
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PickleIterator iter(pickle);
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return pickle.ReadInt(&iter, cert_id) &&
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)         pickle.ReadUInt32(&iter, cert_status) &&
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)         pickle.ReadInt(&iter, security_bits) &&
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)         pickle.ReadInt(&iter, ssl_connection_status);
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace content
49