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

Side by Side Diff: content/child/web_url_loader_impl.cc

Issue 559613002: PlzNavigate: Implement RequestNavigation on the renderer side (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@commit-navigation-renderer
Patch Set: Created 6 years, 2 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 // An implementation of WebURLLoader in terms of ResourceLoaderBridge. 5 // An implementation of WebURLLoader in terms of ResourceLoaderBridge.
6 6
7 #include "content/child/web_url_loader_impl.h" 7 #include "content/child/web_url_loader_impl.h"
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/command_line.h" 10 #include "base/command_line.h"
(...skipping 10 matching lines...) Expand all
21 #include "content/child/resource_loader_bridge.h" 21 #include "content/child/resource_loader_bridge.h"
22 #include "content/child/sync_load_response.h" 22 #include "content/child/sync_load_response.h"
23 #include "content/child/web_url_request_util.h" 23 #include "content/child/web_url_request_util.h"
24 #include "content/child/weburlresponse_extradata_impl.h" 24 #include "content/child/weburlresponse_extradata_impl.h"
25 #include "content/common/resource_request_body.h" 25 #include "content/common/resource_request_body.h"
26 #include "content/common/service_worker/service_worker_types.h" 26 #include "content/common/service_worker/service_worker_types.h"
27 #include "content/public/child/request_peer.h" 27 #include "content/public/child/request_peer.h"
28 #include "content/public/common/content_switches.h" 28 #include "content/public/common/content_switches.h"
29 #include "net/base/data_url.h" 29 #include "net/base/data_url.h"
30 #include "net/base/filename_util.h" 30 #include "net/base/filename_util.h"
31 #include "net/base/load_flags.h"
32 #include "net/base/mime_util.h" 31 #include "net/base/mime_util.h"
33 #include "net/base/net_errors.h" 32 #include "net/base/net_errors.h"
34 #include "net/http/http_response_headers.h" 33 #include "net/http/http_response_headers.h"
35 #include "net/http/http_util.h" 34 #include "net/http/http_util.h"
36 #include "net/url_request/redirect_info.h" 35 #include "net/url_request/redirect_info.h"
37 #include "net/url_request/url_request_data_job.h" 36 #include "net/url_request/url_request_data_job.h"
38 #include "third_party/WebKit/public/platform/WebHTTPHeaderVisitor.h"
39 #include "third_party/WebKit/public/platform/WebHTTPLoadInfo.h" 37 #include "third_party/WebKit/public/platform/WebHTTPLoadInfo.h"
40 #include "third_party/WebKit/public/platform/WebURL.h" 38 #include "third_party/WebKit/public/platform/WebURL.h"
41 #include "third_party/WebKit/public/platform/WebURLError.h" 39 #include "third_party/WebKit/public/platform/WebURLError.h"
42 #include "third_party/WebKit/public/platform/WebURLLoadTiming.h" 40 #include "third_party/WebKit/public/platform/WebURLLoadTiming.h"
43 #include "third_party/WebKit/public/platform/WebURLLoaderClient.h" 41 #include "third_party/WebKit/public/platform/WebURLLoaderClient.h"
44 #include "third_party/WebKit/public/platform/WebURLRequest.h" 42 #include "third_party/WebKit/public/platform/WebURLRequest.h"
45 #include "third_party/WebKit/public/platform/WebURLResponse.h" 43 #include "third_party/WebKit/public/platform/WebURLResponse.h"
46 #include "third_party/WebKit/public/web/WebSecurityPolicy.h" 44 #include "third_party/WebKit/public/web/WebSecurityPolicy.h"
47 45
48 using base::Time; 46 using base::Time;
(...skipping 16 matching lines...) Expand all
65 namespace content { 63 namespace content {
66 64
67 // Utilities ------------------------------------------------------------------ 65 // Utilities ------------------------------------------------------------------
68 66
69 namespace { 67 namespace {
70 68
71 const char kThrottledErrorDescription[] = 69 const char kThrottledErrorDescription[] =
72 "Request throttled. Visit http://dev.chromium.org/throttling for more " 70 "Request throttled. Visit http://dev.chromium.org/throttling for more "
73 "information."; 71 "information.";
74 72
75 class HeaderFlattener : public WebHTTPHeaderVisitor {
76 public:
77 HeaderFlattener() : has_accept_header_(false) {}
78
79 virtual void visitHeader(const WebString& name, const WebString& value) {
80 // Headers are latin1.
81 const std::string& name_latin1 = name.latin1();
82 const std::string& value_latin1 = value.latin1();
83
84 // Skip over referrer headers found in the header map because we already
85 // pulled it out as a separate parameter.
86 if (LowerCaseEqualsASCII(name_latin1, "referer"))
87 return;
88
89 if (LowerCaseEqualsASCII(name_latin1, "accept"))
90 has_accept_header_ = true;
91
92 if (!buffer_.empty())
93 buffer_.append("\r\n");
94 buffer_.append(name_latin1 + ": " + value_latin1);
95 }
96
97 const std::string& GetBuffer() {
98 // In some cases, WebKit doesn't add an Accept header, but not having the
99 // header confuses some web servers. See bug 808613.
100 if (!has_accept_header_) {
101 if (!buffer_.empty())
102 buffer_.append("\r\n");
103 buffer_.append("Accept: */*");
104 has_accept_header_ = true;
105 }
106 return buffer_;
107 }
108
109 private:
110 std::string buffer_;
111 bool has_accept_header_;
112 };
113
114 typedef ResourceDevToolsInfo::HeadersVector HeadersVector; 73 typedef ResourceDevToolsInfo::HeadersVector HeadersVector;
115 74
116 // Converts timing data from |load_timing| to the format used by WebKit. 75 // Converts timing data from |load_timing| to the format used by WebKit.
117 void PopulateURLLoadTiming(const net::LoadTimingInfo& load_timing, 76 void PopulateURLLoadTiming(const net::LoadTimingInfo& load_timing,
118 WebURLLoadTiming* url_timing) { 77 WebURLLoadTiming* url_timing) {
119 DCHECK(!load_timing.request_start.is_null()); 78 DCHECK(!load_timing.request_start.is_null());
120 79
121 const TimeTicks kNullTicks; 80 const TimeTicks kNullTicks;
122 url_timing->initialize(); 81 url_timing->initialize();
123 url_timing->setRequestTime( 82 url_timing->setRequestTime(
(...skipping 337 matching lines...) Expand 10 before | Expand all | Expand 10 after
461 base::MessageLoop::current()->PostTask( 420 base::MessageLoop::current()->PostTask(
462 FROM_HERE, base::Bind(&Context::HandleDataURL, this)); 421 FROM_HERE, base::Bind(&Context::HandleDataURL, this));
463 } 422 }
464 return; 423 return;
465 } 424 }
466 425
467 GURL referrer_url( 426 GURL referrer_url(
468 request.httpHeaderField(WebString::fromUTF8("Referer")).latin1()); 427 request.httpHeaderField(WebString::fromUTF8("Referer")).latin1());
469 const std::string& method = request.httpMethod().latin1(); 428 const std::string& method = request.httpMethod().latin1();
470 429
471 int load_flags = net::LOAD_NORMAL;
472 switch (request.cachePolicy()) {
473 case WebURLRequest::ReloadIgnoringCacheData:
474 // Required by LayoutTests/http/tests/misc/refresh-headers.php
475 load_flags |= net::LOAD_VALIDATE_CACHE;
476 break;
477 case WebURLRequest::ReloadBypassingCache:
478 load_flags |= net::LOAD_BYPASS_CACHE;
479 break;
480 case WebURLRequest::ReturnCacheDataElseLoad:
481 load_flags |= net::LOAD_PREFERRING_CACHE;
482 break;
483 case WebURLRequest::ReturnCacheDataDontLoad:
484 load_flags |= net::LOAD_ONLY_FROM_CACHE;
485 break;
486 case WebURLRequest::UseProtocolCachePolicy:
487 break;
488 default:
489 NOTREACHED();
490 }
491
492 if (request.reportUploadProgress())
493 load_flags |= net::LOAD_ENABLE_UPLOAD_PROGRESS;
494 if (request.reportRawHeaders())
495 load_flags |= net::LOAD_REPORT_RAW_HEADERS;
496
497 if (!request.allowStoredCredentials()) {
498 load_flags |= net::LOAD_DO_NOT_SAVE_COOKIES;
499 load_flags |= net::LOAD_DO_NOT_SEND_COOKIES;
500 }
501
502 if (!request.allowStoredCredentials())
503 load_flags |= net::LOAD_DO_NOT_SEND_AUTH_DATA;
504
505 if (request.requestContext() == WebURLRequest::RequestContextXMLHttpRequest &&
506 (url.has_username() || url.has_password())) {
507 load_flags |= net::LOAD_DO_NOT_PROMPT_FOR_LOGIN;
508 }
509
510 HeaderFlattener flattener;
511 request.visitHTTPHeaderFields(&flattener);
512
513 // TODO(brettw) this should take parameter encoding into account when 430 // TODO(brettw) this should take parameter encoding into account when
514 // creating the GURLs. 431 // creating the GURLs.
515 432
516 // TODO(horo): Check credentials flag is unset when credentials mode is omit. 433 // TODO(horo): Check credentials flag is unset when credentials mode is omit.
517 // Check credentials flag is set when credentials mode is include. 434 // Check credentials flag is set when credentials mode is include.
518 435
519 RequestInfo request_info; 436 RequestInfo request_info;
520 request_info.method = method; 437 request_info.method = method;
521 request_info.url = url; 438 request_info.url = url;
522 request_info.first_party_for_cookies = request.firstPartyForCookies(); 439 request_info.first_party_for_cookies = request.firstPartyForCookies();
523 request_info.referrer = referrer_url; 440 request_info.referrer = referrer_url;
524 request_info.headers = flattener.GetBuffer(); 441 request_info.headers = GetWebURLRequestHeaders(request);
525 request_info.load_flags = load_flags; 442 ;
443 request_info.load_flags = GetLoadFlagsForWebURLRequest(request);
526 request_info.enable_load_timing = true; 444 request_info.enable_load_timing = true;
527 // requestor_pid only needs to be non-zero if the request originates outside 445 // requestor_pid only needs to be non-zero if the request originates outside
528 // the render process, so we can use requestorProcessID even for requests 446 // the render process, so we can use requestorProcessID even for requests
529 // from in-process plugins. 447 // from in-process plugins.
530 request_info.requestor_pid = request.requestorProcessID(); 448 request_info.requestor_pid = request.requestorProcessID();
531 request_info.request_type = WebURLRequestToResourceType(request); 449 request_info.request_type = WebURLRequestToResourceType(request);
532 request_info.priority = 450 request_info.priority =
533 ConvertWebKitPriorityToNetPriority(request.priority()); 451 ConvertWebKitPriorityToNetPriority(request.priority());
534 request_info.appcache_host_id = request.appCacheHostID(); 452 request_info.appcache_host_id = request.appCacheHostID();
535 request_info.routing_id = request.requestorID(); 453 request_info.routing_id = request.requestorID();
(...skipping 524 matching lines...) Expand 10 before | Expand all | Expand 10 after
1060 int intra_priority_value) { 978 int intra_priority_value) {
1061 context_->DidChangePriority(new_priority, intra_priority_value); 979 context_->DidChangePriority(new_priority, intra_priority_value);
1062 } 980 }
1063 981
1064 bool WebURLLoaderImpl::attachThreadedDataReceiver( 982 bool WebURLLoaderImpl::attachThreadedDataReceiver(
1065 blink::WebThreadedDataReceiver* threaded_data_receiver) { 983 blink::WebThreadedDataReceiver* threaded_data_receiver) {
1066 return context_->AttachThreadedDataReceiver(threaded_data_receiver); 984 return context_->AttachThreadedDataReceiver(threaded_data_receiver);
1067 } 985 }
1068 986
1069 } // namespace content 987 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698