| 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");
|
| +
|
| request.visitHTTPHeaderFields(&flattener);
|
| return flattener.GetBuffer();
|
| }
|
|
|