Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/browser/loader/resource_loader.h" | 5 #include "content/browser/loader/resource_loader.h" |
| 6 | 6 |
| 7 #include <utility> | 7 #include <utility> |
| 8 | 8 |
| 9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
| 10 #include "base/location.h" | 10 #include "base/location.h" |
| 11 #include "base/metrics/histogram.h" | 11 #include "base/metrics/histogram.h" |
| 12 #include "base/profiler/scoped_tracker.h" | 12 #include "base/profiler/scoped_tracker.h" |
| 13 #include "base/single_thread_task_runner.h" | 13 #include "base/single_thread_task_runner.h" |
| 14 #include "base/thread_task_runner_handle.h" | 14 #include "base/thread_task_runner_handle.h" |
| 15 #include "base/time/time.h" | 15 #include "base/time/time.h" |
| 16 #include "content/browser/appcache/appcache_interceptor.h" | 16 #include "content/browser/appcache/appcache_interceptor.h" |
| 17 #include "content/browser/child_process_security_policy_impl.h" | 17 #include "content/browser/child_process_security_policy_impl.h" |
| 18 #include "content/browser/loader/cross_site_resource_handler.h" | 18 #include "content/browser/loader/cross_site_resource_handler.h" |
| 19 #include "content/browser/loader/detachable_resource_handler.h" | 19 #include "content/browser/loader/detachable_resource_handler.h" |
| 20 #include "content/browser/loader/resource_loader_delegate.h" | 20 #include "content/browser/loader/resource_loader_delegate.h" |
| 21 #include "content/browser/loader/resource_request_info_impl.h" | 21 #include "content/browser/loader/resource_request_info_impl.h" |
| 22 #include "content/browser/service_worker/service_worker_request_handler.h" | 22 #include "content/browser/service_worker/service_worker_request_handler.h" |
| 23 #include "content/browser/ssl/ssl_client_auth_handler.h" | 23 #include "content/browser/ssl/ssl_client_auth_handler.h" |
| 24 #include "content/browser/ssl/ssl_manager.h" | 24 #include "content/browser/ssl/ssl_manager.h" |
| 25 #include "content/browser/ssl/ssl_policy.h" | 25 #include "content/browser/ssl/ssl_policy.h" |
| 26 #include "content/common/ssl_status_serialization.h" | 26 #include "content/common/ssl_status_serialization.h" |
| 27 #include "content/public/browser/cert_store.h" | 27 #include "content/public/browser/cert_store.h" |
| 28 #include "content/public/browser/resource_context.h" | 28 #include "content/public/browser/resource_context.h" |
| 29 #include "content/public/browser/resource_dispatcher_host_delegate.h" | |
| 29 #include "content/public/browser/resource_dispatcher_host_login_delegate.h" | 30 #include "content/public/browser/resource_dispatcher_host_login_delegate.h" |
| 30 #include "content/public/browser/signed_certificate_timestamp_store.h" | 31 #include "content/public/browser/signed_certificate_timestamp_store.h" |
| 31 #include "content/public/common/content_client.h" | 32 #include "content/public/common/content_client.h" |
| 32 #include "content/public/common/content_switches.h" | 33 #include "content/public/common/content_switches.h" |
| 33 #include "content/public/common/process_type.h" | 34 #include "content/public/common/process_type.h" |
| 34 #include "content/public/common/resource_response.h" | 35 #include "content/public/common/resource_response.h" |
| 35 #include "content/public/common/security_style.h" | 36 #include "content/public/common/security_style.h" |
| 36 #include "net/base/io_buffer.h" | 37 #include "net/base/io_buffer.h" |
| 37 #include "net/base/load_flags.h" | 38 #include "net/base/load_flags.h" |
| 38 #include "net/http/http_response_headers.h" | 39 #include "net/http/http_response_headers.h" |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 75 StoreSignedCertificateTimestamps(ssl_info.signed_certificate_timestamps, | 76 StoreSignedCertificateTimestamps(ssl_info.signed_certificate_timestamps, |
| 76 child_id, &signed_certificate_timestamp_ids); | 77 child_id, &signed_certificate_timestamp_ids); |
| 77 | 78 |
| 78 *ssl_status = SSLStatus(SSLPolicy::GetSecurityStyleForResource( | 79 *ssl_status = SSLStatus(SSLPolicy::GetSecurityStyleForResource( |
| 79 url, cert_id, ssl_info.cert_status), | 80 url, cert_id, ssl_info.cert_status), |
| 80 cert_id, signed_certificate_timestamp_ids, ssl_info); | 81 cert_id, signed_certificate_timestamp_ids, ssl_info); |
| 81 } | 82 } |
| 82 | 83 |
| 83 void PopulateResourceResponse(ResourceRequestInfoImpl* info, | 84 void PopulateResourceResponse(ResourceRequestInfoImpl* info, |
| 84 net::URLRequest* request, | 85 net::URLRequest* request, |
| 86 ResourceDispatcherHostDelegate* host_delegate, | |
| 87 ResourceContext* resource_context, | |
| 85 ResourceResponse* response) { | 88 ResourceResponse* response) { |
| 86 response->head.request_time = request->request_time(); | 89 response->head.request_time = request->request_time(); |
| 87 response->head.response_time = request->response_time(); | 90 response->head.response_time = request->response_time(); |
| 88 response->head.headers = request->response_headers(); | 91 response->head.headers = request->response_headers(); |
| 89 request->GetCharset(&response->head.charset); | 92 request->GetCharset(&response->head.charset); |
| 90 response->head.content_length = request->GetExpectedContentSize(); | 93 response->head.content_length = request->GetExpectedContentSize(); |
| 91 request->GetMimeType(&response->head.mime_type); | 94 request->GetMimeType(&response->head.mime_type); |
| 92 net::HttpResponseInfo response_info = request->response_info(); | 95 net::HttpResponseInfo response_info = request->response_info(); |
| 93 response->head.was_fetched_via_spdy = response_info.was_fetched_via_spdy; | 96 response->head.was_fetched_via_spdy = response_info.was_fetched_via_spdy; |
| 94 response->head.was_npn_negotiated = response_info.was_npn_negotiated; | 97 response->head.was_npn_negotiated = response_info.was_npn_negotiated; |
| 95 response->head.npn_negotiated_protocol = | 98 response->head.npn_negotiated_protocol = |
| 96 response_info.npn_negotiated_protocol; | 99 response_info.npn_negotiated_protocol; |
| 97 response->head.connection_info = response_info.connection_info; | 100 response->head.connection_info = response_info.connection_info; |
| 98 response->head.was_fetched_via_proxy = request->was_fetched_via_proxy(); | 101 response->head.was_fetched_via_proxy = request->was_fetched_via_proxy(); |
| 102 | |
| 99 response->head.proxy_server = response_info.proxy_server; | 103 response->head.proxy_server = response_info.proxy_server; |
| 100 response->head.socket_address = request->GetSocketAddress(); | 104 response->head.socket_address = request->GetSocketAddress(); |
| 101 const content::ResourceRequestInfo* request_info = | 105 const content::ResourceRequestInfo* request_info = |
| 102 content::ResourceRequestInfo::ForRequest(request); | 106 content::ResourceRequestInfo::ForRequest(request); |
| 103 if (request_info) | 107 if (request_info) |
| 104 response->head.is_using_lofi = request_info->IsUsingLoFi(); | 108 response->head.is_using_lofi = request_info->IsUsingLoFi(); |
| 109 if (resource_context && host_delegate) | |
|
bengr
2016/02/26 22:53:57
Use curly braces.
RyanSturm
2016/03/01 19:36:04
Done.
| |
| 110 response->head.was_fetched_via_data_reduction_proxy = | |
| 111 host_delegate->WasFetchedViaDataReductionProxy(request->proxy_server(), | |
| 112 resource_context); | |
| 113 else | |
| 114 response->head.was_fetched_via_data_reduction_proxy = false; | |
| 105 if (ServiceWorkerRequestHandler* handler = | 115 if (ServiceWorkerRequestHandler* handler = |
| 106 ServiceWorkerRequestHandler::GetHandler(request)) { | 116 ServiceWorkerRequestHandler::GetHandler(request)) { |
| 107 handler->GetExtraResponseInfo(&response->head); | 117 handler->GetExtraResponseInfo(&response->head); |
| 108 } | 118 } |
| 109 AppCacheInterceptor::GetExtraResponseInfo( | 119 AppCacheInterceptor::GetExtraResponseInfo( |
| 110 request, &response->head.appcache_id, | 120 request, &response->head.appcache_id, |
| 111 &response->head.appcache_manifest_url); | 121 &response->head.appcache_manifest_url); |
| 112 if (info->is_load_timing_enabled()) | 122 if (info->is_load_timing_enabled()) |
| 113 request->GetLoadTimingInfo(&response->head.load_timing); | 123 request->GetLoadTimingInfo(&response->head.load_timing); |
| 114 | 124 |
| (...skipping 11 matching lines...) Expand all Loading... | |
| 126 DCHECK_EQ(request->ssl_info().security_bits, -1); | 136 DCHECK_EQ(request->ssl_info().security_bits, -1); |
| 127 DCHECK_EQ(request->ssl_info().key_exchange_info, 0); | 137 DCHECK_EQ(request->ssl_info().key_exchange_info, 0); |
| 128 DCHECK(!request->ssl_info().connection_status); | 138 DCHECK(!request->ssl_info().connection_status); |
| 129 } | 139 } |
| 130 } | 140 } |
| 131 | 141 |
| 132 } // namespace | 142 } // namespace |
| 133 | 143 |
| 134 ResourceLoader::ResourceLoader(scoped_ptr<net::URLRequest> request, | 144 ResourceLoader::ResourceLoader(scoped_ptr<net::URLRequest> request, |
| 135 scoped_ptr<ResourceHandler> handler, | 145 scoped_ptr<ResourceHandler> handler, |
| 136 ResourceLoaderDelegate* delegate) | 146 ResourceLoaderDelegate* delegate, |
| 147 ResourceDispatcherHostDelegate* host_delegate, | |
| 148 ResourceContext* resource_context) | |
| 137 : deferred_stage_(DEFERRED_NONE), | 149 : deferred_stage_(DEFERRED_NONE), |
| 138 request_(std::move(request)), | 150 request_(std::move(request)), |
| 139 handler_(std::move(handler)), | 151 handler_(std::move(handler)), |
| 140 delegate_(delegate), | 152 delegate_(delegate), |
| 153 host_delegate_(host_delegate), | |
| 154 resource_context_(resource_context), | |
| 141 is_transferring_(false), | 155 is_transferring_(false), |
| 142 times_cancelled_before_request_start_(0), | 156 times_cancelled_before_request_start_(0), |
| 143 started_request_(false), | 157 started_request_(false), |
| 144 times_cancelled_after_request_start_(0), | 158 times_cancelled_after_request_start_(0), |
| 145 weak_ptr_factory_(this) { | 159 weak_ptr_factory_(this) { |
| 146 request_->set_delegate(this); | 160 request_->set_delegate(this); |
| 147 handler_->SetController(this); | 161 handler_->SetController(this); |
| 148 } | 162 } |
| 149 | 163 |
| 150 ResourceLoader::~ResourceLoader() { | 164 ResourceLoader::~ResourceLoader() { |
| (...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 259 | 273 |
| 260 delegate_->DidReceiveRedirect(this, redirect_info.new_url); | 274 delegate_->DidReceiveRedirect(this, redirect_info.new_url); |
| 261 | 275 |
| 262 if (delegate_->HandleExternalProtocol(this, redirect_info.new_url)) { | 276 if (delegate_->HandleExternalProtocol(this, redirect_info.new_url)) { |
| 263 // The request is complete so we can remove it. | 277 // The request is complete so we can remove it. |
| 264 CancelAndIgnore(); | 278 CancelAndIgnore(); |
| 265 return; | 279 return; |
| 266 } | 280 } |
| 267 | 281 |
| 268 scoped_refptr<ResourceResponse> response(new ResourceResponse()); | 282 scoped_refptr<ResourceResponse> response(new ResourceResponse()); |
| 269 PopulateResourceResponse(info, request_.get(), response.get()); | 283 PopulateResourceResponse(info, request_.get(), host_delegate_, |
| 284 resource_context_, response.get()); | |
| 270 if (!handler_->OnRequestRedirected(redirect_info, response.get(), defer)) { | 285 if (!handler_->OnRequestRedirected(redirect_info, response.get(), defer)) { |
| 271 Cancel(); | 286 Cancel(); |
| 272 } else if (*defer) { | 287 } else if (*defer) { |
| 273 deferred_stage_ = DEFERRED_REDIRECT; // Follow redirect when resumed. | 288 deferred_stage_ = DEFERRED_REDIRECT; // Follow redirect when resumed. |
| 274 } | 289 } |
| 275 } | 290 } |
| 276 | 291 |
| 277 void ResourceLoader::OnAuthRequired(net::URLRequest* unused, | 292 void ResourceLoader::OnAuthRequired(net::URLRequest* unused, |
| 278 net::AuthChallengeInfo* auth_info) { | 293 net::AuthChallengeInfo* auth_info) { |
| 279 DCHECK_EQ(request_.get(), unused); | 294 DCHECK_EQ(request_.get(), unused); |
| (...skipping 251 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 531 // this request. | 546 // this request. |
| 532 base::ThreadTaskRunnerHandle::Get()->PostTask( | 547 base::ThreadTaskRunnerHandle::Get()->PostTask( |
| 533 FROM_HERE, base::Bind(&ResourceLoader::ResponseCompleted, | 548 FROM_HERE, base::Bind(&ResourceLoader::ResponseCompleted, |
| 534 weak_ptr_factory_.GetWeakPtr())); | 549 weak_ptr_factory_.GetWeakPtr())); |
| 535 } | 550 } |
| 536 } | 551 } |
| 537 | 552 |
| 538 void ResourceLoader::CompleteResponseStarted() { | 553 void ResourceLoader::CompleteResponseStarted() { |
| 539 ResourceRequestInfoImpl* info = GetRequestInfo(); | 554 ResourceRequestInfoImpl* info = GetRequestInfo(); |
| 540 scoped_refptr<ResourceResponse> response(new ResourceResponse()); | 555 scoped_refptr<ResourceResponse> response(new ResourceResponse()); |
| 541 PopulateResourceResponse(info, request_.get(), response.get()); | 556 PopulateResourceResponse(info, request_.get(), host_delegate_, |
| 557 resource_context_, response.get()); | |
| 542 | 558 |
| 543 delegate_->DidReceiveResponse(this); | 559 delegate_->DidReceiveResponse(this); |
| 544 | 560 |
| 545 // TODO(darin): Remove ScopedTracker below once crbug.com/475761 is fixed. | 561 // TODO(darin): Remove ScopedTracker below once crbug.com/475761 is fixed. |
| 546 tracked_objects::ScopedTracker tracking_profile( | 562 tracked_objects::ScopedTracker tracking_profile( |
| 547 FROM_HERE_WITH_EXPLICIT_FUNCTION("475761 OnResponseStarted()")); | 563 FROM_HERE_WITH_EXPLICIT_FUNCTION("475761 OnResponseStarted()")); |
| 548 | 564 |
| 549 bool defer = false; | 565 bool defer = false; |
| 550 if (!handler_->OnResponseStarted(response.get(), &defer)) { | 566 if (!handler_->OnResponseStarted(response.get(), &defer)) { |
| 551 Cancel(); | 567 Cancel(); |
| (...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 710 case net::URLRequestStatus::FAILED: | 726 case net::URLRequestStatus::FAILED: |
| 711 status = STATUS_UNDEFINED; | 727 status = STATUS_UNDEFINED; |
| 712 break; | 728 break; |
| 713 } | 729 } |
| 714 | 730 |
| 715 UMA_HISTOGRAM_ENUMERATION("Net.Prefetch.Pattern", status, STATUS_MAX); | 731 UMA_HISTOGRAM_ENUMERATION("Net.Prefetch.Pattern", status, STATUS_MAX); |
| 716 } | 732 } |
| 717 } | 733 } |
| 718 | 734 |
| 719 } // namespace content | 735 } // namespace content |
| OLD | NEW |