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

Side by Side 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 unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/child/web_url_request_util.h" 5 #include "content/child/web_url_request_util.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include <algorithm>
10 #include <limits> 11 #include <limits>
12 #include <string>
13 #include <vector>
11 14
12 #include "base/logging.h" 15 #include "base/logging.h"
13 #include "base/strings/string_util.h" 16 #include "base/strings/string_util.h"
14 #include "content/child/request_extra_data.h" 17 #include "content/child/request_extra_data.h"
15 #include "net/base/load_flags.h" 18 #include "net/base/load_flags.h"
16 #include "net/base/net_errors.h" 19 #include "net/base/net_errors.h"
17 #include "third_party/WebKit/public/platform/FilePathConversion.h" 20 #include "third_party/WebKit/public/platform/FilePathConversion.h"
18 #include "third_party/WebKit/public/platform/WebCachePolicy.h" 21 #include "third_party/WebKit/public/platform/WebCachePolicy.h"
19 #include "third_party/WebKit/public/platform/WebData.h" 22 #include "third_party/WebKit/public/platform/WebData.h"
20 #include "third_party/WebKit/public/platform/WebHTTPHeaderVisitor.h" 23 #include "third_party/WebKit/public/platform/WebHTTPHeaderVisitor.h"
(...skipping 14 matching lines...) Expand all
35 38
36 const char kThrottledErrorDescription[] = 39 const char kThrottledErrorDescription[] =
37 "Request throttled. Visit http://dev.chromium.org/throttling for more " 40 "Request throttled. Visit http://dev.chromium.org/throttling for more "
38 "information."; 41 "information.";
39 42
40 class HeaderFlattener : public blink::WebHTTPHeaderVisitor { 43 class HeaderFlattener : public blink::WebHTTPHeaderVisitor {
41 public: 44 public:
42 HeaderFlattener() {} 45 HeaderFlattener() {}
43 ~HeaderFlattener() override {} 46 ~HeaderFlattener() override {}
44 47
48 void FilterOutHeader(std::string header_name) {
49 // |header_name| needs to be lower-case - otherwise
50 // base::LowerCaseEqualsASCII won't work properly.
51 DCHECK(base::LowerCaseEqualsASCII(header_name, header_name));
52
53 header_names_to_filter_out_.push_back(std::move(header_name));
54 }
55
45 void visitHeader(const WebString& name, const WebString& value) override { 56 void visitHeader(const WebString& name, const WebString& value) override {
46 // Headers are latin1. 57 // Headers are latin1.
47 const std::string& name_latin1 = name.latin1(); 58 const std::string& name_latin1 = name.latin1();
48 const std::string& value_latin1 = value.latin1(); 59 const std::string& value_latin1 = value.latin1();
49 60
50 // Skip over referrer headers found in the header map because we already 61 if (std::any_of(header_names_to_filter_out_.begin(),
51 // pulled it out as a separate parameter. 62 header_names_to_filter_out_.end(),
52 if (base::LowerCaseEqualsASCII(name_latin1, "referer")) 63 [&name_latin1](const std::string& filter) {
64 return base::LowerCaseEqualsASCII(name_latin1, filter);
65 })) {
53 return; 66 return;
67 }
54 68
55 if (!buffer_.empty()) 69 if (!buffer_.empty())
56 buffer_.append("\r\n"); 70 buffer_.append("\r\n");
57 buffer_.append(name_latin1 + ": " + value_latin1); 71 buffer_.append(name_latin1 + ": " + value_latin1);
58 } 72 }
59 73
60 const std::string& GetBuffer() const { 74 const std::string& GetBuffer() const {
61 return buffer_; 75 return buffer_;
62 } 76 }
63 77
64 private: 78 private:
65 std::string buffer_; 79 std::string buffer_;
80 std::vector<std::string> header_names_to_filter_out_;
66 }; 81 };
67 82
68 } // namespace 83 } // namespace
69 84
70 ResourceType WebURLRequestToResourceType(const WebURLRequest& request) { 85 ResourceType WebURLRequestToResourceType(const WebURLRequest& request) {
71 WebURLRequest::RequestContext requestContext = request.getRequestContext(); 86 WebURLRequest::RequestContext requestContext = request.getRequestContext();
72 if (request.getFrameType() != WebURLRequest::FrameTypeNone) { 87 if (request.getFrameType() != WebURLRequest::FrameTypeNone) {
73 DCHECK(requestContext == WebURLRequest::RequestContextForm || 88 DCHECK(requestContext == WebURLRequest::RequestContextForm ||
74 requestContext == WebURLRequest::RequestContextFrame || 89 requestContext == WebURLRequest::RequestContextFrame ||
75 requestContext == WebURLRequest::RequestContextHyperlink || 90 requestContext == WebURLRequest::RequestContextHyperlink ||
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
175 case WebURLRequest::RequestContextIframe: 190 case WebURLRequest::RequestContextIframe:
176 NOTREACHED(); 191 NOTREACHED();
177 return RESOURCE_TYPE_SUB_RESOURCE; 192 return RESOURCE_TYPE_SUB_RESOURCE;
178 193
179 default: 194 default:
180 NOTREACHED(); 195 NOTREACHED();
181 return RESOURCE_TYPE_SUB_RESOURCE; 196 return RESOURCE_TYPE_SUB_RESOURCE;
182 } 197 }
183 } 198 }
184 199
185 std::string GetWebURLRequestHeaders(const blink::WebURLRequest& request) { 200 std::string GetWebURLRequestHeadersForResourceRequest(
201 const blink::WebURLRequest& request) {
186 HeaderFlattener flattener; 202 HeaderFlattener flattener;
203
204 // Skip over referrer headers found in the header map because we already
205 // pulled it out as a separate parameter.
206 flattener.FilterOutHeader("referer");
207
187 request.visitHTTPHeaderFields(&flattener); 208 request.visitHTTPHeaderFields(&flattener);
188 return flattener.GetBuffer(); 209 return flattener.GetBuffer();
189 } 210 }
211
212 std::string GetWebURLRequestHeadersForOpenURLParams(
213 const blink::WebURLRequest& request) {
214 HeaderFlattener flattener;
215
216 // Skip over headers added by Blink on top of |extra_headers| passed from the
217 // browser, so that OpenURLParams IPC contains only the headers that the
218 // browser would have passed.
219 flattener.FilterOutHeader("referer");
220 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
221
222 request.visitHTTPHeaderFields(&flattener);
223 return flattener.GetBuffer();
224 }
190 225
191 int GetLoadFlagsForWebURLRequest(const blink::WebURLRequest& request) { 226 int GetLoadFlagsForWebURLRequest(const blink::WebURLRequest& request) {
192 int load_flags = net::LOAD_NORMAL; 227 int load_flags = net::LOAD_NORMAL;
193 GURL url = request.url(); 228 GURL url = request.url();
194 switch (request.getCachePolicy()) { 229 switch (request.getCachePolicy()) {
195 case WebCachePolicy::ValidatingCacheData: 230 case WebCachePolicy::ValidatingCacheData:
196 load_flags |= net::LOAD_VALIDATE_CACHE; 231 load_flags |= net::LOAD_VALIDATE_CACHE;
197 break; 232 break;
198 case WebCachePolicy::BypassingCache: 233 case WebCachePolicy::BypassingCache:
199 load_flags |= net::LOAD_BYPASS_CACHE; 234 load_flags |= net::LOAD_BYPASS_CACHE;
(...skipping 301 matching lines...) Expand 10 before | Expand all | Expand 10 after
501 bool stale_copy_in_cache, 536 bool stale_copy_in_cache,
502 int reason, 537 int reason,
503 bool was_ignored_by_handler) { 538 bool was_ignored_by_handler) {
504 blink::WebURLError error = 539 blink::WebURLError error =
505 CreateWebURLError(unreachable_url, stale_copy_in_cache, reason); 540 CreateWebURLError(unreachable_url, stale_copy_in_cache, reason);
506 error.wasIgnoredByHandler = was_ignored_by_handler; 541 error.wasIgnoredByHandler = was_ignored_by_handler;
507 return error; 542 return error;
508 } 543 }
509 544
510 } // namespace content 545 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698