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

Unified Diff: content/child/web_url_request_util.cc

Issue 2355023002: Preserving Content-Type header from http request in OpenURL path. (Closed)
Patch Set: Rebasing... Created 4 years, 3 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: 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();
}

Powered by Google App Engine
This is Rietveld 408576698