// Copyright 2015 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "net/quic/chromium/properties_based_quic_server_info.h" #include "base/base64.h" #include "base/metrics/histogram_macros.h" #include "net/base/net_errors.h" #include "net/http/http_server_properties.h" using std::string; namespace { void RecordQuicServerInfoFailure(net::QuicServerInfo::FailureReason failure) { UMA_HISTOGRAM_ENUMERATION( "Net.QuicDiskCache.FailureReason.PropertiesBasedCache", failure, net::QuicServerInfo::NUM_OF_FAILURES); } } // namespace namespace net { PropertiesBasedQuicServerInfo::PropertiesBasedQuicServerInfo( const QuicServerId& server_id, HttpServerProperties* http_server_properties) : QuicServerInfo(server_id), http_server_properties_(http_server_properties) { DCHECK(http_server_properties_); } PropertiesBasedQuicServerInfo::~PropertiesBasedQuicServerInfo() {} bool PropertiesBasedQuicServerInfo::Load() { const string* data = http_server_properties_->GetQuicServerInfo(server_id_); string decoded; if (!data) { RecordQuicServerInfoFailure(PARSE_NO_DATA_FAILURE); return false; } if (!base::Base64Decode(*data, &decoded)) { RecordQuicServerInfoFailure(PARSE_DATA_DECODE_FAILURE); return false; } if (!Parse(decoded)) { RecordQuicServerInfoFailure(PARSE_FAILURE); return false; } return true; } void PropertiesBasedQuicServerInfo::Persist() { string encoded; base::Base64Encode(Serialize(), &encoded); http_server_properties_->SetQuicServerInfo(server_id_, encoded); } size_t PropertiesBasedQuicServerInfo::EstimateMemoryUsage() const { return 0; } } // namespace net