Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / net / http / http_server_properties.cc
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.
4
5 #include "net/http/http_server_properties.h"
6
7 #include "base/logging.h"
8 #include "base/metrics/histogram.h"
9 #include "base/strings/stringprintf.h"
10
11 namespace net {
12
13 const char kAlternateProtocolHeader[] = "Alternate-Protocol";
14
15 namespace {
16
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   "quic"
25 };
26
27 COMPILE_ASSERT(
28     arraysize(kAlternateProtocolStrings) == NUM_VALID_ALTERNATE_PROTOCOLS,
29     kAlternateProtocolStringsSize_kNumValidAlternateProtocols_not_equal);
30
31 }  // namespace
32
33 void HistogramAlternateProtocolUsage(AlternateProtocolUsage usage) {
34   UMA_HISTOGRAM_ENUMERATION("Net.AlternateProtocolUsage", usage,
35                             ALTERNATE_PROTOCOL_USAGE_MAX);
36 }
37
38 void HistogramBrokenAlternateProtocolLocation(
39     BrokenAlternateProtocolLocation location){
40   UMA_HISTOGRAM_ENUMERATION("Net.AlternateProtocolBrokenLocation", location,
41                             BROKEN_ALTERNATE_PROTOCOL_LOCATION_MAX);
42 }
43
44 bool IsAlternateProtocolValid(AlternateProtocol protocol) {
45   return protocol >= ALTERNATE_PROTOCOL_MINIMUM_VALID_VERSION &&
46       protocol <= ALTERNATE_PROTOCOL_MAXIMUM_VALID_VERSION;
47 }
48
49 const char* AlternateProtocolToString(AlternateProtocol protocol) {
50   switch (protocol) {
51     case DEPRECATED_NPN_SPDY_2:
52     case NPN_SPDY_3:
53     case NPN_SPDY_3_1:
54     case NPN_SPDY_4:
55     case QUIC:
56       DCHECK(IsAlternateProtocolValid(protocol));
57       return kAlternateProtocolStrings[
58           protocol - ALTERNATE_PROTOCOL_MINIMUM_VALID_VERSION];
59     case UNINITIALIZED_ALTERNATE_PROTOCOL:
60       return "Uninitialized";
61   }
62   NOTREACHED();
63   return "";
64 }
65
66 AlternateProtocol AlternateProtocolFromString(const std::string& str) {
67   for (int i = ALTERNATE_PROTOCOL_MINIMUM_VALID_VERSION;
68        i <= ALTERNATE_PROTOCOL_MAXIMUM_VALID_VERSION; ++i) {
69     AlternateProtocol protocol = static_cast<AlternateProtocol>(i);
70     if (str == AlternateProtocolToString(protocol))
71       return protocol;
72   }
73   return UNINITIALIZED_ALTERNATE_PROTOCOL;
74 }
75
76 AlternateProtocol AlternateProtocolFromNextProto(NextProto next_proto) {
77   switch (next_proto) {
78     case kProtoDeprecatedSPDY2:
79       return DEPRECATED_NPN_SPDY_2;
80     case kProtoSPDY3:
81       return NPN_SPDY_3;
82     case kProtoSPDY31:
83       return NPN_SPDY_3_1;
84     case kProtoSPDY4:
85       return NPN_SPDY_4;
86     case kProtoQUIC1SPDY3:
87       return QUIC;
88
89     case kProtoUnknown:
90     case kProtoHTTP11:
91       break;
92   }
93
94   NOTREACHED() << "Invalid NextProto: " << next_proto;
95   return UNINITIALIZED_ALTERNATE_PROTOCOL;
96 }
97
98 std::string AlternateProtocolInfo::ToString() const {
99   return base::StringPrintf("%d:%s p=%f%s", port,
100                             AlternateProtocolToString(protocol),
101                             probability,
102                             is_broken ? " (broken)" : "");
103 }
104
105 }  // namespace net