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

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

Issue 2865003: Working towards -Wextra... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 10 years, 6 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 | « net/base/cookie_monster.cc ('k') | 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) 2006-2009 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2006-2009 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"
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
130 // This copies the status line w/ terminator null. 130 // This copies the status line w/ terminator null.
131 // Note raw_headers_ has embedded nulls instead of \n, 131 // Note raw_headers_ has embedded nulls instead of \n,
132 // so this just copies the first header line. 132 // so this just copies the first header line.
133 blob.assign(raw_headers_.c_str(), strlen(raw_headers_.c_str()) + 1); 133 blob.assign(raw_headers_.c_str(), strlen(raw_headers_.c_str()) + 1);
134 134
135 for (size_t i = 0; i < parsed_.size(); ++i) { 135 for (size_t i = 0; i < parsed_.size(); ++i) {
136 DCHECK(!parsed_[i].is_continuation()); 136 DCHECK(!parsed_[i].is_continuation());
137 137
138 // Locate the start of the next header. 138 // Locate the start of the next header.
139 size_t k = i; 139 size_t k = i;
140 while (++k < parsed_.size() && parsed_[k].is_continuation()); 140 while (++k < parsed_.size() && parsed_[k].is_continuation()) {}
141 --k; 141 --k;
142 142
143 std::string header_name(parsed_[i].name_begin, parsed_[i].name_end); 143 std::string header_name(parsed_[i].name_begin, parsed_[i].name_end);
144 StringToLowerASCII(&header_name); 144 StringToLowerASCII(&header_name);
145 145
146 if (filter_headers.find(header_name) == filter_headers.end()) { 146 if (filter_headers.find(header_name) == filter_headers.end()) {
147 // Make sure there is a null after the value. 147 // Make sure there is a null after the value.
148 blob.append(parsed_[i].name_begin, parsed_[k].value_end); 148 blob.append(parsed_[i].name_begin, parsed_[k].value_end);
149 blob.push_back('\0'); 149 blob.push_back('\0');
150 } 150 }
(...skipping 19 matching lines...) Expand all
170 // order should not matter. 170 // order should not matter.
171 171
172 // Figure out which headers we want to take from new_headers: 172 // Figure out which headers we want to take from new_headers:
173 for (size_t i = 0; i < new_headers.parsed_.size(); ++i) { 173 for (size_t i = 0; i < new_headers.parsed_.size(); ++i) {
174 const HeaderList& new_parsed = new_headers.parsed_; 174 const HeaderList& new_parsed = new_headers.parsed_;
175 175
176 DCHECK(!new_parsed[i].is_continuation()); 176 DCHECK(!new_parsed[i].is_continuation());
177 177
178 // Locate the start of the next header. 178 // Locate the start of the next header.
179 size_t k = i; 179 size_t k = i;
180 while (++k < new_parsed.size() && new_parsed[k].is_continuation()); 180 while (++k < new_parsed.size() && new_parsed[k].is_continuation()) {}
181 --k; 181 --k;
182 182
183 const std::string::const_iterator& name_begin = new_parsed[i].name_begin; 183 const std::string::const_iterator& name_begin = new_parsed[i].name_begin;
184 const std::string::const_iterator& name_end = new_parsed[i].name_end; 184 const std::string::const_iterator& name_end = new_parsed[i].name_end;
185 if (ShouldUpdateHeader(name_begin, name_end)) { 185 if (ShouldUpdateHeader(name_begin, name_end)) {
186 std::string name(name_begin, name_end); 186 std::string name(name_begin, name_end);
187 StringToLowerASCII(&name); 187 StringToLowerASCII(&name);
188 updated_headers.insert(name); 188 updated_headers.insert(name);
189 189
190 // Preserve this header line in the merged result, making sure there is 190 // Preserve this header line in the merged result, making sure there is
(...skipping 10 matching lines...) Expand all
201 } 201 }
202 202
203 void HttpResponseHeaders::MergeWithHeaders(const std::string& raw_headers, 203 void HttpResponseHeaders::MergeWithHeaders(const std::string& raw_headers,
204 const HeaderSet& headers_to_remove) { 204 const HeaderSet& headers_to_remove) {
205 std::string new_raw_headers(raw_headers); 205 std::string new_raw_headers(raw_headers);
206 for (size_t i = 0; i < parsed_.size(); ++i) { 206 for (size_t i = 0; i < parsed_.size(); ++i) {
207 DCHECK(!parsed_[i].is_continuation()); 207 DCHECK(!parsed_[i].is_continuation());
208 208
209 // Locate the start of the next header. 209 // Locate the start of the next header.
210 size_t k = i; 210 size_t k = i;
211 while (++k < parsed_.size() && parsed_[k].is_continuation()); 211 while (++k < parsed_.size() && parsed_[k].is_continuation()) {}
212 --k; 212 --k;
213 213
214 std::string name(parsed_[i].name_begin, parsed_[i].name_end); 214 std::string name(parsed_[i].name_begin, parsed_[i].name_end);
215 StringToLowerASCII(&name); 215 StringToLowerASCII(&name);
216 if (headers_to_remove.find(name) == headers_to_remove.end()) { 216 if (headers_to_remove.find(name) == headers_to_remove.end()) {
217 // It's ok to preserve this header in the final result. 217 // It's ok to preserve this header in the final result.
218 new_raw_headers.append(parsed_[i].name_begin, parsed_[k].value_end); 218 new_raw_headers.append(parsed_[i].name_begin, parsed_[k].value_end);
219 new_raw_headers.push_back('\0'); 219 new_raw_headers.push_back('\0');
220 } 220 }
221 221
(...skipping 938 matching lines...) Expand 10 before | Expand all | Expand 10 after
1160 // We have all the values; let's verify that they make sense for a 206 1160 // We have all the values; let's verify that they make sense for a 206
1161 // response. 1161 // response.
1162 if (*first_byte_position < 0 || *last_byte_position < 0 || 1162 if (*first_byte_position < 0 || *last_byte_position < 0 ||
1163 *instance_length < 0 || *instance_length - 1 < *last_byte_position) 1163 *instance_length < 0 || *instance_length - 1 < *last_byte_position)
1164 return false; 1164 return false;
1165 1165
1166 return true; 1166 return true;
1167 } 1167 }
1168 1168
1169 } // namespace net 1169 } // namespace net
OLDNEW
« no previous file with comments | « net/base/cookie_monster.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698