Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(206)

Side by Side Diff: net/http/http_response_headers.cc

Issue 6317011: Add histogram for HTTP response codes (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: remedation to reivew Created 9 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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 // The rules for header parsing were borrowed from Firefox: 5 // The rules for header parsing were borrowed from Firefox:
6 // http://lxr.mozilla.org/seamonkey/source/netwerk/protocol/http/src/nsHttpRespo nseHead.cpp 6 // http://lxr.mozilla.org/seamonkey/source/netwerk/protocol/http/src/nsHttpRespo nseHead.cpp
7 // The rules for parsing content-types were also borrowed from Firefox: 7 // The rules for parsing content-types were also borrowed from Firefox:
8 // http://lxr.mozilla.org/mozilla/source/netwerk/base/src/nsURLHelper.cpp#834 8 // http://lxr.mozilla.org/mozilla/source/netwerk/base/src/nsURLHelper.cpp#834
9 9
10 #include "net/http/http_response_headers.h" 10 #include "net/http/http_response_headers.h"
11 11
12 #include <algorithm> 12 #include <algorithm>
13 13
14 #include "base/logging.h" 14 #include "base/logging.h"
15 #include "base/metrics/histogram.h"
15 #include "base/pickle.h" 16 #include "base/pickle.h"
16 #include "base/string_number_conversions.h" 17 #include "base/string_number_conversions.h"
17 #include "base/string_util.h" 18 #include "base/string_util.h"
18 #include "base/time.h" 19 #include "base/time.h"
19 #include "net/base/escape.h" 20 #include "net/base/escape.h"
20 #include "net/http/http_util.h" 21 #include "net/http/http_util.h"
21 22
22 using base::Time; 23 using base::Time;
23 using base::TimeDelta; 24 using base::TimeDelta;
24 25
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
78 79
79 bool ShouldUpdateHeader(const std::string::const_iterator& name_begin, 80 bool ShouldUpdateHeader(const std::string::const_iterator& name_begin,
80 const std::string::const_iterator& name_end) { 81 const std::string::const_iterator& name_end) {
81 for (size_t i = 0; i < arraysize(kNonUpdatedHeaders); ++i) { 82 for (size_t i = 0; i < arraysize(kNonUpdatedHeaders); ++i) {
82 if (LowerCaseEqualsASCII(name_begin, name_end, kNonUpdatedHeaders[i])) 83 if (LowerCaseEqualsASCII(name_begin, name_end, kNonUpdatedHeaders[i]))
83 return false; 84 return false;
84 } 85 }
85 return true; 86 return true;
86 } 87 }
87 88
89 // Functions for histogram initialization. The code 0 is put in the
90 // response map to track response codes that are invalid.
91 // TODO(gavinp): Greatly prune the collected codes once we learn which
92 // ares are not sent in practice, to reduce upload size & memory use.
wtc 2011/01/26 19:03:11 Typo: remove 'ares', or change it to 'ones'
gavinp 2011/01/27 00:04:36 Done.
93
94 enum { kHistogramMinHttpResponseCode = 100,
95 kHistogramMaxHttpResponseCode = 599,
wtc 2011/01/26 19:03:11 The formatting is still wrong. It should be: enu
jar (doing other things) 2011/01/26 21:33:14 nit: On Chrome, we use MACRO_STYLE_NAMING for enum
gavinp 2011/01/27 00:04:36 Done.
gavinp 2011/01/27 00:04:36 Done.
96 };
97
98 std::vector<int> GetAllHttpResponseCodes() {
99 std::vector<int> codes;
100 codes.reserve(
101 kHistogramMaxHttpResponseCode - kHistogramMinHttpResponseCode + 2);
102 // The 0 histogram value is used to return results that are not in the
103 // range [kHistogramMinHttpResponseCode, kHistogramMaxHttpResponseCode].
wtc 2011/01/26 19:03:11 I see that you already explained the 0 histogram v
gavinp 2011/01/27 00:04:36 Done.
104 codes.push_back(0);
105 for (int i = kHistogramMinHttpResponseCode;
106 i <= kHistogramMaxHttpResponseCode; ++i)
107 codes.push_back(i);
108 return codes;
109 }
110
111 int MapHttpResponseCode(int code) {
112 if (kHistogramMinHttpResponseCode <= code &&
113 code <= kHistogramMaxHttpResponseCode)
114 return code;
115 return 0;
116 }
117
88 } // namespace 118 } // namespace
89 119
90 struct HttpResponseHeaders::ParsedHeader { 120 struct HttpResponseHeaders::ParsedHeader {
91 // A header "continuation" contains only a subsequent value for the 121 // A header "continuation" contains only a subsequent value for the
92 // preceding header. (Header values are comma separated.) 122 // preceding header. (Header values are comma separated.)
93 bool is_continuation() const { return name_begin == name_end; } 123 bool is_continuation() const { return name_begin == name_end; }
94 124
95 std::string::const_iterator name_begin; 125 std::string::const_iterator name_begin;
96 std::string::const_iterator name_end; 126 std::string::const_iterator name_end;
97 std::string::const_iterator value_begin; 127 std::string::const_iterator value_begin;
98 std::string::const_iterator value_end; 128 std::string::const_iterator value_end;
99 }; 129 };
100 130
101 //----------------------------------------------------------------------------- 131 //-----------------------------------------------------------------------------
102 132
103 HttpResponseHeaders::HttpResponseHeaders(const std::string& raw_input) 133 HttpResponseHeaders::HttpResponseHeaders(const std::string& raw_input)
104 : response_code_(-1) { 134 : response_code_(-1) {
105 Parse(raw_input); 135 Parse(raw_input);
136
137 // The most important thing to do with this histogram is find out the
138 // existence of unusual HTTP response codes. As it happens right now,
139 // there aren't double-constructions of response headers using this
140 // constructor, so our counts should also be accurate, without
141 // instantiating the histogram in two places.
wtc 2011/01/26 19:03:11 You should also explain why the other constructors
gavinp 2011/01/27 00:04:36 Done.
142 UMA_HISTOGRAM_CUSTOM_ENUMERATION("Net.HttpResponseCode",
143 MapHttpResponseCode(response_code_),
144 // Note the third argument is only
145 // evaluated once, see macro def'n
146 // for details.
147 GetAllHttpResponseCodes());
106 } 148 }
107 149
108 HttpResponseHeaders::HttpResponseHeaders(const Pickle& pickle, void** iter) 150 HttpResponseHeaders::HttpResponseHeaders(const Pickle& pickle, void** iter)
109 : response_code_(-1) { 151 : response_code_(-1) {
110 std::string raw_input; 152 std::string raw_input;
111 if (pickle.ReadString(iter, &raw_input)) 153 if (pickle.ReadString(iter, &raw_input))
112 Parse(raw_input); 154 Parse(raw_input);
113 } 155 }
114 156
115 void HttpResponseHeaders::Persist(Pickle* pickle, PersistOptions options) { 157 void HttpResponseHeaders::Persist(Pickle* pickle, PersistOptions options) {
(...skipping 1091 matching lines...) Expand 10 before | Expand all | Expand 10 after
1207 // We have all the values; let's verify that they make sense for a 206 1249 // We have all the values; let's verify that they make sense for a 206
1208 // response. 1250 // response.
1209 if (*first_byte_position < 0 || *last_byte_position < 0 || 1251 if (*first_byte_position < 0 || *last_byte_position < 0 ||
1210 *instance_length < 0 || *instance_length - 1 < *last_byte_position) 1252 *instance_length < 0 || *instance_length - 1 < *last_byte_position)
1211 return false; 1253 return false;
1212 1254
1213 return true; 1255 return true;
1214 } 1256 }
1215 1257
1216 } // namespace net 1258 } // namespace net
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698