Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 Loading... | |
| 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 Loading... | |
| 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 Loading... | |
| 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 |
| OLD | NEW |