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

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: Fixed error in tests 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 340 matching lines...) Expand 10 before | Expand all | Expand 10 after
464 base::MessageLoop::current()->PostTask( 423 base::MessageLoop::current()->PostTask(
465 FROM_HERE, base::Bind(&Context::HandleDataURL, this)); 424 FROM_HERE, base::Bind(&Context::HandleDataURL, this));
466 } 425 }
467 return; 426 return;
468 } 427 }
469 428
470 GURL referrer_url( 429 GURL referrer_url(
471 request.httpHeaderField(WebString::fromUTF8("Referer")).latin1()); 430 request.httpHeaderField(WebString::fromUTF8("Referer")).latin1());
472 const std::string& method = request.httpMethod().latin1(); 431 const std::string& method = request.httpMethod().latin1();
473 432
474 int load_flags = net::LOAD_NORMAL;
475 switch (request.cachePolicy()) {
476 case WebURLRequest::ReloadIgnoringCacheData:
477 // Required by LayoutTests/http/tests/misc/refresh-headers.php
478 load_flags |= net::LOAD_VALIDATE_CACHE;
479 break;
480 case WebURLRequest::ReloadBypassingCache:
481 load_flags |= net::LOAD_BYPASS_CACHE;
482 break;
483 case WebURLRequest::ReturnCacheDataElseLoad:
484 load_flags |= net::LOAD_PREFERRING_CACHE;
485 break;
486 case WebURLRequest::ReturnCacheDataDontLoad:
487 load_flags |= net::LOAD_ONLY_FROM_CACHE;
488 break;
489 case WebURLRequest::UseProtocolCachePolicy:
490 break;
491 default:
492 NOTREACHED();
493 }
494
495 if (request.reportUploadProgress())
496 load_flags |= net::LOAD_ENABLE_UPLOAD_PROGRESS;
497 if (request.reportRawHeaders())
498 load_flags |= net::LOAD_REPORT_RAW_HEADERS;
499
500 if (!request.allowStoredCredentials()) {
501 load_flags |= net::LOAD_DO_NOT_SAVE_COOKIES;
502 load_flags |= net::LOAD_DO_NOT_SEND_COOKIES;
503 }
504
505 if (!request.allowStoredCredentials())
506 load_flags |= net::LOAD_DO_NOT_SEND_AUTH_DATA;
507
508 if (request.requestContext() == WebURLRequest::RequestContextXMLHttpRequest &&
509 (url.has_username() || url.has_password())) {
510 load_flags |= net::LOAD_DO_NOT_PROMPT_FOR_LOGIN;
511 }
512
513 HeaderFlattener flattener;
514 request.visitHTTPHeaderFields(&flattener);
515
516 // TODO(brettw) this should take parameter encoding into account when 433 // TODO(brettw) this should take parameter encoding into account when
517 // creating the GURLs. 434 // creating the GURLs.
518 435
519 // TODO(horo): Check credentials flag is unset when credentials mode is omit. 436 // TODO(horo): Check credentials flag is unset when credentials mode is omit.
520 // Check credentials flag is set when credentials mode is include. 437 // Check credentials flag is set when credentials mode is include.
521 438
522 RequestInfo request_info; 439 RequestInfo request_info;
523 request_info.method = method; 440 request_info.method = method;
524 request_info.url = url; 441 request_info.url = url;
525 request_info.first_party_for_cookies = request.firstPartyForCookies(); 442 request_info.first_party_for_cookies = request.firstPartyForCookies();
526 request_info.referrer = referrer_url; 443 request_info.referrer = referrer_url;
527 request_info.headers = flattener.GetBuffer(); 444 request_info.headers = GetWebURLRequestHeaders(request);
528 request_info.load_flags = load_flags; 445 ;
446 request_info.load_flags = GetLoadFlagsForWebURLRequest(request);
529 request_info.enable_load_timing = true; 447 request_info.enable_load_timing = true;
530 // requestor_pid only needs to be non-zero if the request originates outside 448 // requestor_pid only needs to be non-zero if the request originates outside
531 // the render process, so we can use requestorProcessID even for requests 449 // the render process, so we can use requestorProcessID even for requests
532 // from in-process plugins. 450 // from in-process plugins.
533 request_info.requestor_pid = request.requestorProcessID(); 451 request_info.requestor_pid = request.requestorProcessID();
534 request_info.request_type = WebURLRequestToResourceType(request); 452 request_info.request_type = WebURLRequestToResourceType(request);
535 request_info.priority = 453 request_info.priority =
536 ConvertWebKitPriorityToNetPriority(request.priority()); 454 ConvertWebKitPriorityToNetPriority(request.priority());
537 request_info.appcache_host_id = request.appCacheHostID(); 455 request_info.appcache_host_id = request.appCacheHostID();
538 request_info.routing_id = request.requestorID(); 456 request_info.routing_id = request.requestorID();
(...skipping 524 matching lines...) Expand 10 before | Expand all | Expand 10 after
1063 int intra_priority_value) { 981 int intra_priority_value) {
1064 context_->DidChangePriority(new_priority, intra_priority_value); 982 context_->DidChangePriority(new_priority, intra_priority_value);
1065 } 983 }
1066 984
1067 bool WebURLLoaderImpl::attachThreadedDataReceiver( 985 bool WebURLLoaderImpl::attachThreadedDataReceiver(
1068 blink::WebThreadedDataReceiver* threaded_data_receiver) { 986 blink::WebThreadedDataReceiver* threaded_data_receiver) {
1069 return context_->AttachThreadedDataReceiver(threaded_data_receiver); 987 return context_->AttachThreadedDataReceiver(threaded_data_receiver);
1070 } 988 }
1071 989
1072 } // namespace content 990 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/frame_host/render_frame_host_impl.cc ('k') | content/child/web_url_request_util.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698