Chromium Code Reviews| Index: content/browser/loader/resource_loader.cc |
| diff --git a/content/browser/loader/resource_loader.cc b/content/browser/loader/resource_loader.cc |
| index eee044c6aaf87a0119371de0a8722a239657692f..89bd842db73cdb89737a432370ffbdabdad8ddd5 100644 |
| --- a/content/browser/loader/resource_loader.cc |
| +++ b/content/browser/loader/resource_loader.cc |
| @@ -19,20 +19,21 @@ |
| #include "content/browser/loader/detachable_resource_handler.h" |
| #include "content/browser/loader/resource_loader_delegate.h" |
| #include "content/browser/loader/resource_request_info_impl.h" |
| #include "content/browser/service_worker/service_worker_request_handler.h" |
| #include "content/browser/ssl/ssl_client_auth_handler.h" |
| #include "content/browser/ssl/ssl_manager.h" |
| #include "content/browser/ssl/ssl_policy.h" |
| #include "content/common/ssl_status_serialization.h" |
| #include "content/public/browser/cert_store.h" |
| #include "content/public/browser/resource_context.h" |
| +#include "content/public/browser/resource_dispatcher_host_delegate.h" |
| #include "content/public/browser/resource_dispatcher_host_login_delegate.h" |
| #include "content/public/browser/signed_certificate_timestamp_store.h" |
| #include "content/public/common/content_client.h" |
| #include "content/public/common/content_switches.h" |
| #include "content/public/common/process_type.h" |
| #include "content/public/common/resource_response.h" |
| #include "content/public/common/security_style.h" |
| #include "net/base/io_buffer.h" |
| #include "net/base/load_flags.h" |
| #include "net/http/http_response_headers.h" |
| @@ -75,40 +76,50 @@ void GetSSLStatusForRequest(const GURL& url, |
| StoreSignedCertificateTimestamps(ssl_info.signed_certificate_timestamps, |
| child_id, &signed_certificate_timestamp_ids); |
| *ssl_status = SSLStatus(SSLPolicy::GetSecurityStyleForResource( |
| url, cert_id, ssl_info.cert_status), |
| cert_id, signed_certificate_timestamp_ids, ssl_info); |
| } |
| void PopulateResourceResponse(ResourceRequestInfoImpl* info, |
| net::URLRequest* request, |
| + ResourceDispatcherHostDelegate* host_delegate, |
| + ResourceContext* resource_context, |
| ResourceResponse* response) { |
| response->head.request_time = request->request_time(); |
| response->head.response_time = request->response_time(); |
| response->head.headers = request->response_headers(); |
| request->GetCharset(&response->head.charset); |
| response->head.content_length = request->GetExpectedContentSize(); |
| request->GetMimeType(&response->head.mime_type); |
| net::HttpResponseInfo response_info = request->response_info(); |
| response->head.was_fetched_via_spdy = response_info.was_fetched_via_spdy; |
| response->head.was_npn_negotiated = response_info.was_npn_negotiated; |
| response->head.npn_negotiated_protocol = |
| response_info.npn_negotiated_protocol; |
| response->head.connection_info = response_info.connection_info; |
| response->head.was_fetched_via_proxy = request->was_fetched_via_proxy(); |
| + |
|
tbansal1
2016/03/07 18:05:05
nit: remove the line break.
RyanSturm
2016/03/08 19:47:42
Done.
|
| response->head.proxy_server = response_info.proxy_server; |
| response->head.socket_address = request->GetSocketAddress(); |
| const content::ResourceRequestInfo* request_info = |
| content::ResourceRequestInfo::ForRequest(request); |
| if (request_info) |
| response->head.is_using_lofi = request_info->IsUsingLoFi(); |
| + if (resource_context && host_delegate) { |
| + response->head.used_data_reduction_proxy = |
|
tbansal1
2016/03/07 18:05:05
simplify to:
response->head.used_data_reduction_pr
RyanSturm
2016/03/08 19:47:42
Done.
|
| + host_delegate->UsedDataReductionProxy(request->proxy_server(), |
| + resource_context); |
| + } else { |
| + response->head.used_data_reduction_proxy = false; |
| + } |
| if (ServiceWorkerRequestHandler* handler = |
| ServiceWorkerRequestHandler::GetHandler(request)) { |
| handler->GetExtraResponseInfo(&response->head); |
| } |
| AppCacheInterceptor::GetExtraResponseInfo( |
| request, &response->head.appcache_id, |
| &response->head.appcache_manifest_url); |
| if (info->is_load_timing_enabled()) |
| request->GetLoadTimingInfo(&response->head.load_timing); |
| @@ -126,25 +137,29 @@ void PopulateResourceResponse(ResourceRequestInfoImpl* info, |
| DCHECK_EQ(request->ssl_info().security_bits, -1); |
| DCHECK_EQ(request->ssl_info().key_exchange_info, 0); |
| DCHECK(!request->ssl_info().connection_status); |
| } |
| } |
| } // namespace |
| ResourceLoader::ResourceLoader(scoped_ptr<net::URLRequest> request, |
| scoped_ptr<ResourceHandler> handler, |
| - ResourceLoaderDelegate* delegate) |
| + ResourceLoaderDelegate* delegate, |
| + ResourceDispatcherHostDelegate* host_delegate, |
| + ResourceContext* resource_context) |
| : deferred_stage_(DEFERRED_NONE), |
| request_(std::move(request)), |
| handler_(std::move(handler)), |
| delegate_(delegate), |
| + host_delegate_(host_delegate), |
| + resource_context_(resource_context), |
| is_transferring_(false), |
| times_cancelled_before_request_start_(0), |
| started_request_(false), |
| times_cancelled_after_request_start_(0), |
| weak_ptr_factory_(this) { |
| request_->set_delegate(this); |
| handler_->SetController(this); |
| } |
| ResourceLoader::~ResourceLoader() { |
| @@ -259,21 +274,22 @@ void ResourceLoader::OnReceivedRedirect(net::URLRequest* unused, |
| delegate_->DidReceiveRedirect(this, redirect_info.new_url); |
| if (delegate_->HandleExternalProtocol(this, redirect_info.new_url)) { |
| // The request is complete so we can remove it. |
| CancelAndIgnore(); |
| return; |
| } |
| scoped_refptr<ResourceResponse> response(new ResourceResponse()); |
| - PopulateResourceResponse(info, request_.get(), response.get()); |
| + PopulateResourceResponse(info, request_.get(), host_delegate_, |
| + resource_context_, response.get()); |
| if (!handler_->OnRequestRedirected(redirect_info, response.get(), defer)) { |
| Cancel(); |
| } else if (*defer) { |
| deferred_stage_ = DEFERRED_REDIRECT; // Follow redirect when resumed. |
| } |
| } |
| void ResourceLoader::OnAuthRequired(net::URLRequest* unused, |
| net::AuthChallengeInfo* auth_info) { |
| DCHECK_EQ(request_.get(), unused); |
| @@ -531,21 +547,22 @@ void ResourceLoader::CancelRequestInternal(int error, bool from_renderer) { |
| // this request. |
| base::ThreadTaskRunnerHandle::Get()->PostTask( |
| FROM_HERE, base::Bind(&ResourceLoader::ResponseCompleted, |
| weak_ptr_factory_.GetWeakPtr())); |
| } |
| } |
| void ResourceLoader::CompleteResponseStarted() { |
| ResourceRequestInfoImpl* info = GetRequestInfo(); |
| scoped_refptr<ResourceResponse> response(new ResourceResponse()); |
| - PopulateResourceResponse(info, request_.get(), response.get()); |
| + PopulateResourceResponse(info, request_.get(), host_delegate_, |
| + resource_context_, response.get()); |
| delegate_->DidReceiveResponse(this); |
| // TODO(darin): Remove ScopedTracker below once crbug.com/475761 is fixed. |
| tracked_objects::ScopedTracker tracking_profile( |
| FROM_HERE_WITH_EXPLICIT_FUNCTION("475761 OnResponseStarted()")); |
| bool defer = false; |
| if (!handler_->OnResponseStarted(response.get(), &defer)) { |
| Cancel(); |