| 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 |
| 17 void RecordQuicServerInfoFailure(net::QuicServerInfo::FailureReason failure) { | 24 void RecordQuicServerInfoFailure(net::QuicServerInfo::FailureReason failure) { |
| 18 UMA_HISTOGRAM_ENUMERATION( | 25 UMA_HISTOGRAM_ENUMERATION( |
| 19 "Net.QuicDiskCache.FailureReason.PropertiesBasedCache", failure, | 26 "Net.QuicDiskCache.FailureReason.PropertiesBasedCache", failure, |
| 20 net::QuicServerInfo::NUM_OF_FAILURES); | 27 net::QuicServerInfo::NUM_OF_FAILURES); |
| 21 } | 28 } |
| 22 | 29 |
| 23 } // namespace | 30 } // namespace |
| 24 | 31 |
| 25 namespace net { | 32 namespace net { |
| 26 | 33 |
| 27 PropertiesBasedQuicServerInfo::PropertiesBasedQuicServerInfo( | 34 PropertiesBasedQuicServerInfo::PropertiesBasedQuicServerInfo( |
| 28 const QuicServerId& server_id, | 35 const QuicServerId& server_id, |
| 29 HttpServerProperties* http_server_properties) | 36 HttpServerProperties* http_server_properties) |
| 30 : QuicServerInfo(server_id), | 37 : QuicServerInfo(server_id), |
| 31 http_server_properties_(http_server_properties) { | 38 http_server_properties_(http_server_properties) { |
| 32 DCHECK(http_server_properties_); | 39 DCHECK(http_server_properties_); |
| 33 } | 40 } |
| 34 | 41 |
| 35 PropertiesBasedQuicServerInfo::~PropertiesBasedQuicServerInfo() {} | 42 PropertiesBasedQuicServerInfo::~PropertiesBasedQuicServerInfo() {} |
| 36 | 43 |
| 37 bool PropertiesBasedQuicServerInfo::Load() { | 44 void PropertiesBasedQuicServerInfo::Start() { |
| 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); |
| 38 const string* data = http_server_properties_->GetQuicServerInfo(server_id_); | 51 const string* data = http_server_properties_->GetQuicServerInfo(server_id_); |
| 39 string decoded; | 52 string decoded; |
| 40 if (!data) { | 53 if (!data) { |
| 41 RecordQuicServerInfoFailure(PARSE_NO_DATA_FAILURE); | 54 RecordQuicServerInfoFailure(PARSE_NO_DATA_FAILURE); |
| 42 return false; | 55 return ERR_FAILED; |
| 43 } | 56 } |
| 44 if (!base::Base64Decode(*data, &decoded)) { | 57 if (!base::Base64Decode(*data, &decoded)) { |
| 45 RecordQuicServerInfoFailure(PARSE_DATA_DECODE_FAILURE); | 58 RecordQuicServerInfoFailure(PARSE_DATA_DECODE_FAILURE); |
| 46 return false; | 59 return ERR_FAILED; |
| 47 } | 60 } |
| 61 RecordQuicServerInfoStatus(QUIC_SERVER_INFO_PARSE); |
| 48 if (!Parse(decoded)) { | 62 if (!Parse(decoded)) { |
| 49 RecordQuicServerInfoFailure(PARSE_FAILURE); | 63 RecordQuicServerInfoFailure(PARSE_FAILURE); |
| 50 return false; | 64 return ERR_FAILED; |
| 51 } | 65 } |
| 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() { |
| 52 return true; | 78 return true; |
| 53 } | 79 } |
| 54 | 80 |
| 81 bool PropertiesBasedQuicServerInfo::IsReadyToPersist() { |
| 82 RecordQuicServerInfoStatus(QUIC_SERVER_INFO_READY_TO_PERSIST); |
| 83 return true; |
| 84 } |
| 55 | 85 |
| 56 void PropertiesBasedQuicServerInfo::Persist() { | 86 void PropertiesBasedQuicServerInfo::Persist() { |
| 87 RecordQuicServerInfoStatus(QUIC_SERVER_INFO_PERSIST); |
| 57 string encoded; | 88 string encoded; |
| 58 base::Base64Encode(Serialize(), &encoded); | 89 base::Base64Encode(Serialize(), &encoded); |
| 59 http_server_properties_->SetQuicServerInfo(server_id_, encoded); | 90 http_server_properties_->SetQuicServerInfo(server_id_, encoded); |
| 60 } | 91 } |
| 61 | 92 |
| 93 void PropertiesBasedQuicServerInfo::OnExternalCacheHit() { |
| 94 RecordQuicServerInfoStatus(QUIC_SERVER_INFO_EXTERNAL_CACHE_HIT); |
| 95 } |
| 96 |
| 62 size_t PropertiesBasedQuicServerInfo::EstimateMemoryUsage() const { | 97 size_t PropertiesBasedQuicServerInfo::EstimateMemoryUsage() const { |
| 63 return 0; | 98 return 0; |
| 64 } | 99 } |
| 65 | 100 |
| 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 |
| 66 } // namespace net | 114 } // namespace net |
| OLD | NEW |