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

Unified Diff: net/http/http_response_headers.cc

Issue 10809011: Fix removal of headers (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 5 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 side-by-side diff with in-line comments
Download patch
Index: net/http/http_response_headers.cc
diff --git a/net/http/http_response_headers.cc b/net/http/http_response_headers.cc
index 6fe8e2fd7ceba8b502a6fbdea1dd1446ec2958a0..1b4ab28e0852b9b8636f5a81d964709b514c8290 100644
--- a/net/http/http_response_headers.cc
+++ b/net/http/http_response_headers.cc
@@ -359,13 +359,43 @@ void HttpResponseHeaders::RemoveHeader(const std::string& name) {
MergeWithHeaders(new_raw_headers, to_remove);
}
-void HttpResponseHeaders::RemoveHeaderWithValue(const std::string& name,
- const std::string& value) {
+void HttpResponseHeaders::RemoveHeaderLine(const std::string& name,
+ const std::string& values) {
+ std::string name_lowercase(name);
+ StringToLowerASCII(&name_lowercase);
+
// Copy up to the null byte. This just copies the status line.
std::string new_raw_headers(raw_headers_.c_str());
new_raw_headers.push_back('\0');
- MergeWithHeadersWithValue(new_raw_headers, name, value);
+ new_raw_headers.reserve(raw_headers_.size());
+
+ HttpUtil::HeadersIterator headers(
rvargas (doing something else) 2012/07/19 19:11:02 Shouldn't this code use EnumerateHeaderLines?
battre 2012/07/23 13:31:11 Done.
+ raw_headers_.begin() + new_raw_headers.size(),
+ raw_headers_.end(),
+ std::string(1, '\0'));
+ while (headers.GetNext()) {
+ std::string old_header_name(headers.name());
+ std::string old_header_values(headers.values());
+ std::string old_header_name_lowercase(name);
+ StringToLowerASCII(&old_header_name_lowercase);
+
+ if (name_lowercase == old_header_name_lowercase &&
+ values == old_header_values)
+ continue;
+
+ new_raw_headers.append(old_header_name);
+ new_raw_headers.push_back(':');
+ new_raw_headers.push_back(' ');
+ new_raw_headers.append(old_header_values);
+ new_raw_headers.push_back('\0');
+ }
+ new_raw_headers.push_back('\0');
+
+ // Make this object hold the new data.
+ raw_headers_.clear();
+ parsed_.clear();
+ Parse(new_raw_headers);
}
void HttpResponseHeaders::AddHeader(const std::string& header) {

Powered by Google App Engine
This is Rietveld 408576698