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