Standardize usage of virtual/override/final specifiers in net/.
[chromium-blink-merge.git] / net / http / http_server_properties.cc
blob25725a8bd953e4c6ec6d3808316634af16e2a9bc
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "net/http/http_server_properties.h"
7 #include "base/logging.h"
8 #include "base/metrics/histogram.h"
9 #include "base/strings/stringprintf.h"
11 namespace net {
13 const char kAlternateProtocolHeader[] = "Alternate-Protocol";
15 namespace {
17 // The order of these strings much match the order of the enum definition
18 // for AlternateProtocol.
19 const char* const kAlternateProtocolStrings[] = {
20 "npn-spdy/2",
21 "npn-spdy/3",
22 "npn-spdy/3.1",
23 "npn-h2-14", // HTTP/2 draft-14. Called SPDY4 internally.
24 "npn-h2-15", // HTTP/2 draft-15. Called SPDY4 internally.
25 "quic"
28 COMPILE_ASSERT(
29 arraysize(kAlternateProtocolStrings) == NUM_VALID_ALTERNATE_PROTOCOLS,
30 kAlternateProtocolStringsSize_kNumValidAlternateProtocols_not_equal);
32 } // namespace
34 void HistogramAlternateProtocolUsage(AlternateProtocolUsage usage) {
35 UMA_HISTOGRAM_ENUMERATION("Net.AlternateProtocolUsage", usage,
36 ALTERNATE_PROTOCOL_USAGE_MAX);
39 void HistogramBrokenAlternateProtocolLocation(
40 BrokenAlternateProtocolLocation location){
41 UMA_HISTOGRAM_ENUMERATION("Net.AlternateProtocolBrokenLocation", location,
42 BROKEN_ALTERNATE_PROTOCOL_LOCATION_MAX);
45 bool IsAlternateProtocolValid(AlternateProtocol protocol) {
46 return protocol >= ALTERNATE_PROTOCOL_MINIMUM_VALID_VERSION &&
47 protocol <= ALTERNATE_PROTOCOL_MAXIMUM_VALID_VERSION;
50 const char* AlternateProtocolToString(AlternateProtocol protocol) {
51 switch (protocol) {
52 case DEPRECATED_NPN_SPDY_2:
53 case NPN_SPDY_3:
54 case NPN_SPDY_3_1:
55 case NPN_SPDY_4_14:
56 case NPN_SPDY_4_15:
57 case QUIC:
58 DCHECK(IsAlternateProtocolValid(protocol));
59 return kAlternateProtocolStrings[
60 protocol - ALTERNATE_PROTOCOL_MINIMUM_VALID_VERSION];
61 case UNINITIALIZED_ALTERNATE_PROTOCOL:
62 return "Uninitialized";
64 NOTREACHED();
65 return "";
68 AlternateProtocol AlternateProtocolFromString(const std::string& str) {
69 for (int i = ALTERNATE_PROTOCOL_MINIMUM_VALID_VERSION;
70 i <= ALTERNATE_PROTOCOL_MAXIMUM_VALID_VERSION; ++i) {
71 AlternateProtocol protocol = static_cast<AlternateProtocol>(i);
72 if (str == AlternateProtocolToString(protocol))
73 return protocol;
75 return UNINITIALIZED_ALTERNATE_PROTOCOL;
78 AlternateProtocol AlternateProtocolFromNextProto(NextProto next_proto) {
79 switch (next_proto) {
80 case kProtoDeprecatedSPDY2:
81 return DEPRECATED_NPN_SPDY_2;
82 case kProtoSPDY3:
83 return NPN_SPDY_3;
84 case kProtoSPDY31:
85 return NPN_SPDY_3_1;
86 case kProtoSPDY4_14:
87 return NPN_SPDY_4_14;
88 case kProtoSPDY4_15:
89 return NPN_SPDY_4_15;
90 case kProtoQUIC1SPDY3:
91 return QUIC;
93 case kProtoUnknown:
94 case kProtoHTTP11:
95 break;
98 NOTREACHED() << "Invalid NextProto: " << next_proto;
99 return UNINITIALIZED_ALTERNATE_PROTOCOL;
102 std::string AlternateProtocolInfo::ToString() const {
103 return base::StringPrintf("%d:%s p=%f%s", port,
104 AlternateProtocolToString(protocol),
105 probability,
106 is_broken ? " (broken)" : "");
109 } // namespace net