| 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..90766ba9c8fc76a785ee84b4b88176f3ada7ede9 100644
|
| --- a/net/http/http_response_headers.cc
|
| +++ b/net/http/http_response_headers.cc
|
| @@ -311,42 +311,6 @@ void HttpResponseHeaders::MergeWithHeaders(const std::string& raw_headers,
|
| Parse(new_raw_headers);
|
| }
|
|
|
| -void HttpResponseHeaders::MergeWithHeadersWithValue(
|
| - const std::string& raw_headers,
|
| - const std::string& header_to_remove_name,
|
| - const std::string& header_to_remove_value) {
|
| - std::string header_to_remove_name_lowercase(header_to_remove_name);
|
| - StringToLowerASCII(&header_to_remove_name_lowercase);
|
| -
|
| - std::string new_raw_headers(raw_headers);
|
| - for (size_t i = 0; i < parsed_.size(); ++i) {
|
| - DCHECK(!parsed_[i].is_continuation());
|
| -
|
| - // Locate the start of the next header.
|
| - size_t k = i;
|
| - while (++k < parsed_.size() && parsed_[k].is_continuation()) {}
|
| - --k;
|
| -
|
| - std::string name(parsed_[i].name_begin, parsed_[i].name_end);
|
| - StringToLowerASCII(&name);
|
| - std::string value(parsed_[i].value_begin, parsed_[i].value_end);
|
| - if (name != header_to_remove_name_lowercase ||
|
| - value != header_to_remove_value) {
|
| - // It's ok to preserve this header in the final result.
|
| - new_raw_headers.append(parsed_[i].name_begin, parsed_[k].value_end);
|
| - new_raw_headers.push_back('\0');
|
| - }
|
| -
|
| - i = k;
|
| - }
|
| - new_raw_headers.push_back('\0');
|
| -
|
| - // Make this object hold the new data.
|
| - raw_headers_.clear();
|
| - parsed_.clear();
|
| - Parse(new_raw_headers);
|
| -}
|
| -
|
| void HttpResponseHeaders::RemoveHeader(const std::string& name) {
|
| // Copy up to the null byte. This just copies the status line.
|
| std::string new_raw_headers(raw_headers_.c_str());
|
| @@ -359,13 +323,39 @@ void HttpResponseHeaders::RemoveHeader(const std::string& name) {
|
| MergeWithHeaders(new_raw_headers, to_remove);
|
| }
|
|
|
| -void HttpResponseHeaders::RemoveHeaderWithValue(const std::string& name,
|
| - const std::string& value) {
|
| - // Copy up to the null byte. This just copies the status line.
|
| - std::string new_raw_headers(raw_headers_.c_str());
|
| +void HttpResponseHeaders::RemoveHeaderLine(const std::string& name,
|
| + const std::string& value) {
|
| + std::string name_lowercase(name);
|
| + StringToLowerASCII(&name_lowercase);
|
| +
|
| + std::string new_raw_headers(GetStatusLine());
|
| + new_raw_headers.push_back('\0');
|
| +
|
| + new_raw_headers.reserve(raw_headers_.size());
|
| +
|
| + void* iter = NULL;
|
| + std::string old_header_name;
|
| + std::string old_header_value;
|
| + while (EnumerateHeaderLines(&iter, &old_header_name, &old_header_value)) {
|
| + std::string old_header_name_lowercase(name);
|
| + StringToLowerASCII(&old_header_name_lowercase);
|
| +
|
| + if (name_lowercase == old_header_name_lowercase &&
|
| + value == old_header_value)
|
| + continue;
|
| +
|
| + new_raw_headers.append(old_header_name);
|
| + new_raw_headers.push_back(':');
|
| + new_raw_headers.push_back(' ');
|
| + new_raw_headers.append(old_header_value);
|
| + new_raw_headers.push_back('\0');
|
| + }
|
| new_raw_headers.push_back('\0');
|
|
|
| - MergeWithHeadersWithValue(new_raw_headers, name, value);
|
| + // Make this object hold the new data.
|
| + raw_headers_.clear();
|
| + parsed_.clear();
|
| + Parse(new_raw_headers);
|
| }
|
|
|
| void HttpResponseHeaders::AddHeader(const std::string& header) {
|
|
|