Chromium Code Reviews| Index: content/child/web_url_request_util.cc |
| diff --git a/content/child/web_url_request_util.cc b/content/child/web_url_request_util.cc |
| index 51830c388fc82894eaf085e36dc777c19276fb24..6b1f3ab15480248d9d9a77b2efda6ed66f3de2db 100644 |
| --- a/content/child/web_url_request_util.cc |
| +++ b/content/child/web_url_request_util.cc |
| @@ -7,7 +7,10 @@ |
| #include <stddef.h> |
| #include <stdint.h> |
| +#include <algorithm> |
| #include <limits> |
| +#include <string> |
| +#include <vector> |
| #include "base/logging.h" |
| #include "base/strings/string_util.h" |
| @@ -42,15 +45,26 @@ class HeaderFlattener : public blink::WebHTTPHeaderVisitor { |
| HeaderFlattener() {} |
| ~HeaderFlattener() override {} |
| + void FilterOutHeader(std::string header_name) { |
| + // |header_name| needs to be lower-case - otherwise |
| + // base::LowerCaseEqualsASCII won't work properly. |
| + DCHECK(base::LowerCaseEqualsASCII(header_name, header_name)); |
| + |
| + header_names_to_filter_out_.push_back(std::move(header_name)); |
| + } |
| + |
| void visitHeader(const WebString& name, const WebString& value) override { |
| // Headers are latin1. |
| const std::string& name_latin1 = name.latin1(); |
| const std::string& value_latin1 = value.latin1(); |
| - // Skip over referrer headers found in the header map because we already |
| - // pulled it out as a separate parameter. |
| - if (base::LowerCaseEqualsASCII(name_latin1, "referer")) |
| + if (std::any_of(header_names_to_filter_out_.begin(), |
| + header_names_to_filter_out_.end(), |
| + [&name_latin1](const std::string& filter) { |
| + return base::LowerCaseEqualsASCII(name_latin1, filter); |
| + })) { |
| return; |
| + } |
| if (!buffer_.empty()) |
| buffer_.append("\r\n"); |
| @@ -63,6 +77,7 @@ class HeaderFlattener : public blink::WebHTTPHeaderVisitor { |
| private: |
| std::string buffer_; |
| + std::vector<std::string> header_names_to_filter_out_; |
| }; |
| } // namespace |
| @@ -182,8 +197,28 @@ ResourceType WebURLRequestToResourceType(const WebURLRequest& request) { |
| } |
| } |
| -std::string GetWebURLRequestHeaders(const blink::WebURLRequest& request) { |
| +std::string GetWebURLRequestHeadersForResourceRequest( |
| + const blink::WebURLRequest& request) { |
| HeaderFlattener flattener; |
| + |
| + // Skip over referrer headers found in the header map because we already |
| + // pulled it out as a separate parameter. |
| + flattener.FilterOutHeader("referer"); |
| + |
| + request.visitHTTPHeaderFields(&flattener); |
| + return flattener.GetBuffer(); |
| +} |
| + |
| +std::string GetWebURLRequestHeadersForOpenURLParams( |
| + const blink::WebURLRequest& request) { |
| + HeaderFlattener flattener; |
| + |
| + // Skip over headers added by Blink on top of |extra_headers| passed from the |
| + // browser, so that OpenURLParams IPC contains only the headers that the |
| + // browser would have passed. |
| + flattener.FilterOutHeader("referer"); |
| + flattener.FilterOutHeader("upgrade-insecure-requests"); |
|
Łukasz Anforowicz
2016/09/22 21:23:16
The filtering is needed, so that NavigationControl
Charlie Reis
2016/09/30 21:31:55
Still, it seems hard to maintain this if Blink add
Łukasz Anforowicz
2016/09/30 23:17:00
Ack.
Charlie Reis
2016/09/30 23:44:44
Yeah, I see how it's a bit awkward regardless of t
|
| + |
| request.visitHTTPHeaderFields(&flattener); |
| return flattener.GetBuffer(); |
| } |