| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "net/quic/chromium/properties_based_quic_server_info.h" | 5 #include "net/quic/chromium/properties_based_quic_server_info.h" |
| 6 | 6 |
| 7 #include "base/base64.h" | 7 #include "base/base64.h" |
| 8 #include "base/memory/ptr_util.h" | 8 #include "base/memory/ptr_util.h" |
| 9 #include "base/metrics/histogram_macros.h" | 9 #include "base/metrics/histogram_macros.h" |
| 10 #include "net/base/net_errors.h" | 10 #include "net/base/net_errors.h" |
| 11 #include "net/http/http_server_properties.h" | 11 #include "net/http/http_server_properties.h" |
| 12 | 12 |
| 13 using std::string; | 13 using std::string; |
| 14 | 14 |
| 15 namespace { | 15 namespace { |
| 16 | 16 |
| 17 void RecordQuicServerInfoStatus( | |
| 18 net::QuicServerInfo::QuicServerInfoAPICall call) { | |
| 19 UMA_HISTOGRAM_ENUMERATION( | |
| 20 "Net.QuicDiskCache.APICall.PropertiesBasedCache", call, | |
| 21 net::QuicServerInfo::QUIC_SERVER_INFO_NUM_OF_API_CALLS); | |
| 22 } | |
| 23 | |
| 24 void RecordQuicServerInfoFailure(net::QuicServerInfo::FailureReason failure) { | 17 void RecordQuicServerInfoFailure(net::QuicServerInfo::FailureReason failure) { |
| 25 UMA_HISTOGRAM_ENUMERATION( | 18 UMA_HISTOGRAM_ENUMERATION( |
| 26 "Net.QuicDiskCache.FailureReason.PropertiesBasedCache", failure, | 19 "Net.QuicDiskCache.FailureReason.PropertiesBasedCache", failure, |
| 27 net::QuicServerInfo::NUM_OF_FAILURES); | 20 net::QuicServerInfo::NUM_OF_FAILURES); |
| 28 } | 21 } |
| 29 | 22 |
| 30 } // namespace | 23 } // namespace |
| 31 | 24 |
| 32 namespace net { | 25 namespace net { |
| 33 | 26 |
| 34 PropertiesBasedQuicServerInfo::PropertiesBasedQuicServerInfo( | 27 PropertiesBasedQuicServerInfo::PropertiesBasedQuicServerInfo( |
| 35 const QuicServerId& server_id, | 28 const QuicServerId& server_id, |
| 36 HttpServerProperties* http_server_properties) | 29 HttpServerProperties* http_server_properties) |
| 37 : QuicServerInfo(server_id), | 30 : QuicServerInfo(server_id), |
| 38 http_server_properties_(http_server_properties) { | 31 http_server_properties_(http_server_properties) { |
| 39 DCHECK(http_server_properties_); | 32 DCHECK(http_server_properties_); |
| 40 } | 33 } |
| 41 | 34 |
| 42 PropertiesBasedQuicServerInfo::~PropertiesBasedQuicServerInfo() {} | 35 PropertiesBasedQuicServerInfo::~PropertiesBasedQuicServerInfo() {} |
| 43 | 36 |
| 44 void PropertiesBasedQuicServerInfo::Start() { | 37 bool PropertiesBasedQuicServerInfo::Load() { |
| 45 RecordQuicServerInfoStatus(QUIC_SERVER_INFO_START); | |
| 46 } | |
| 47 | |
| 48 int PropertiesBasedQuicServerInfo::WaitForDataReady( | |
| 49 const CompletionCallback& callback) { | |
| 50 RecordQuicServerInfoStatus(QUIC_SERVER_INFO_WAIT_FOR_DATA_READY); | |
| 51 const string* data = http_server_properties_->GetQuicServerInfo(server_id_); | 38 const string* data = http_server_properties_->GetQuicServerInfo(server_id_); |
| 52 string decoded; | 39 string decoded; |
| 53 if (!data) { | 40 if (!data) { |
| 54 RecordQuicServerInfoFailure(PARSE_NO_DATA_FAILURE); | 41 RecordQuicServerInfoFailure(PARSE_NO_DATA_FAILURE); |
| 55 return ERR_FAILED; | 42 return false; |
| 56 } | 43 } |
| 57 if (!base::Base64Decode(*data, &decoded)) { | 44 if (!base::Base64Decode(*data, &decoded)) { |
| 58 RecordQuicServerInfoFailure(PARSE_DATA_DECODE_FAILURE); | 45 RecordQuicServerInfoFailure(PARSE_DATA_DECODE_FAILURE); |
| 59 return ERR_FAILED; | 46 return false; |
| 60 } | 47 } |
| 61 RecordQuicServerInfoStatus(QUIC_SERVER_INFO_PARSE); | |
| 62 if (!Parse(decoded)) { | 48 if (!Parse(decoded)) { |
| 63 RecordQuicServerInfoFailure(PARSE_FAILURE); | 49 RecordQuicServerInfoFailure(PARSE_FAILURE); |
| 64 return ERR_FAILED; | 50 return false; |
| 65 } | 51 } |
| 66 return OK; | |
| 67 } | |
| 68 | |
| 69 void PropertiesBasedQuicServerInfo::ResetWaitForDataReadyCallback() { | |
| 70 RecordQuicServerInfoStatus(QUIC_SERVER_INFO_RESET_WAIT_FOR_DATA_READY); | |
| 71 } | |
| 72 | |
| 73 void PropertiesBasedQuicServerInfo::CancelWaitForDataReadyCallback() { | |
| 74 RecordQuicServerInfoStatus(QUIC_SERVER_INFO_WAIT_FOR_DATA_READY_CANCEL); | |
| 75 } | |
| 76 | |
| 77 bool PropertiesBasedQuicServerInfo::IsDataReady() { | |
| 78 return true; | 52 return true; |
| 79 } | 53 } |
| 80 | 54 |
| 81 bool PropertiesBasedQuicServerInfo::IsReadyToPersist() { | |
| 82 RecordQuicServerInfoStatus(QUIC_SERVER_INFO_READY_TO_PERSIST); | |
| 83 return true; | |
| 84 } | |
| 85 | 55 |
| 86 void PropertiesBasedQuicServerInfo::Persist() { | 56 void PropertiesBasedQuicServerInfo::Persist() { |
| 87 RecordQuicServerInfoStatus(QUIC_SERVER_INFO_PERSIST); | |
| 88 string encoded; | 57 string encoded; |
| 89 base::Base64Encode(Serialize(), &encoded); | 58 base::Base64Encode(Serialize(), &encoded); |
| 90 http_server_properties_->SetQuicServerInfo(server_id_, encoded); | 59 http_server_properties_->SetQuicServerInfo(server_id_, encoded); |
| 91 } | 60 } |
| 92 | 61 |
| 93 void PropertiesBasedQuicServerInfo::OnExternalCacheHit() { | |
| 94 RecordQuicServerInfoStatus(QUIC_SERVER_INFO_EXTERNAL_CACHE_HIT); | |
| 95 } | |
| 96 | |
| 97 size_t PropertiesBasedQuicServerInfo::EstimateMemoryUsage() const { | 62 size_t PropertiesBasedQuicServerInfo::EstimateMemoryUsage() const { |
| 98 return 0; | 63 return 0; |
| 99 } | 64 } |
| 100 | 65 |
| 101 PropertiesBasedQuicServerInfoFactory::PropertiesBasedQuicServerInfoFactory( | |
| 102 HttpServerProperties* http_server_properties) | |
| 103 : http_server_properties_(http_server_properties) {} | |
| 104 | |
| 105 PropertiesBasedQuicServerInfoFactory::~PropertiesBasedQuicServerInfoFactory() {} | |
| 106 | |
| 107 std::unique_ptr<QuicServerInfo> | |
| 108 PropertiesBasedQuicServerInfoFactory::GetForServer( | |
| 109 const QuicServerId& server_id) { | |
| 110 return base::MakeUnique<PropertiesBasedQuicServerInfo>( | |
| 111 server_id, http_server_properties_); | |
| 112 } | |
| 113 | |
| 114 } // namespace net | 66 } // namespace net |
| OLD | NEW |