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 "base/command_line.h" | 7 #include "base/command_line.h" |
8 #include "base/message_loop/message_loop.h" | 8 #include "base/message_loop/message_loop.h" |
9 #include "base/metrics/histogram.h" | 9 #include "base/metrics/histogram.h" |
10 #include "base/time/time.h" | 10 #include "base/time/time.h" |
(...skipping 20 matching lines...) Expand all Loading... |
31 #include "net/http/http_response_headers.h" | 31 #include "net/http/http_response_headers.h" |
32 #include "net/ssl/client_cert_store.h" | 32 #include "net/ssl/client_cert_store.h" |
33 #include "net/url_request/url_request_status.h" | 33 #include "net/url_request/url_request_status.h" |
34 | 34 |
35 using base::TimeDelta; | 35 using base::TimeDelta; |
36 using base::TimeTicks; | 36 using base::TimeTicks; |
37 | 37 |
38 namespace content { | 38 namespace content { |
39 namespace { | 39 namespace { |
40 | 40 |
41 void PopulateResourceResponse(net::URLRequest* request, | 41 void PopulateResourceResponse(ResourceRequestInfoImpl* info, |
| 42 net::URLRequest* request, |
42 ResourceResponse* response) { | 43 ResourceResponse* response) { |
43 response->head.error_code = request->status().error(); | 44 response->head.error_code = request->status().error(); |
44 response->head.request_time = request->request_time(); | 45 response->head.request_time = request->request_time(); |
45 response->head.response_time = request->response_time(); | 46 response->head.response_time = request->response_time(); |
46 response->head.headers = request->response_headers(); | 47 response->head.headers = request->response_headers(); |
47 request->GetCharset(&response->head.charset); | 48 request->GetCharset(&response->head.charset); |
48 response->head.content_length = request->GetExpectedContentSize(); | 49 response->head.content_length = request->GetExpectedContentSize(); |
49 request->GetMimeType(&response->head.mime_type); | 50 request->GetMimeType(&response->head.mime_type); |
50 net::HttpResponseInfo response_info = request->response_info(); | 51 net::HttpResponseInfo response_info = request->response_info(); |
51 response->head.was_fetched_via_spdy = response_info.was_fetched_via_spdy; | 52 response->head.was_fetched_via_spdy = response_info.was_fetched_via_spdy; |
52 response->head.was_npn_negotiated = response_info.was_npn_negotiated; | 53 response->head.was_npn_negotiated = response_info.was_npn_negotiated; |
53 response->head.npn_negotiated_protocol = | 54 response->head.npn_negotiated_protocol = |
54 response_info.npn_negotiated_protocol; | 55 response_info.npn_negotiated_protocol; |
55 response->head.connection_info = response_info.connection_info; | 56 response->head.connection_info = response_info.connection_info; |
56 response->head.was_fetched_via_proxy = request->was_fetched_via_proxy(); | 57 response->head.was_fetched_via_proxy = request->was_fetched_via_proxy(); |
57 response->head.socket_address = request->GetSocketAddress(); | 58 response->head.socket_address = request->GetSocketAddress(); |
58 if (ServiceWorkerRequestHandler* handler = | 59 if (ServiceWorkerRequestHandler* handler = |
59 ServiceWorkerRequestHandler::GetHandler(request)) { | 60 ServiceWorkerRequestHandler::GetHandler(request)) { |
60 handler->GetExtraResponseInfo( | 61 handler->GetExtraResponseInfo( |
61 &response->head.was_fetched_via_service_worker, | 62 &response->head.was_fetched_via_service_worker, |
62 &response->head.original_url_via_service_worker); | 63 &response->head.original_url_via_service_worker); |
63 } | 64 } |
64 AppCacheInterceptor::GetExtraResponseInfo( | 65 AppCacheInterceptor::GetExtraResponseInfo( |
65 request, | 66 request, |
66 &response->head.appcache_id, | 67 &response->head.appcache_id, |
67 &response->head.appcache_manifest_url); | 68 &response->head.appcache_manifest_url); |
68 // TODO(mmenke): Figure out if LOAD_ENABLE_LOAD_TIMING is safe to remove. | 69 if (info->is_load_timing_enabled()) |
69 if (request->load_flags() & net::LOAD_ENABLE_LOAD_TIMING) | |
70 request->GetLoadTimingInfo(&response->head.load_timing); | 70 request->GetLoadTimingInfo(&response->head.load_timing); |
71 } | 71 } |
72 | 72 |
73 } // namespace | 73 } // namespace |
74 | 74 |
75 ResourceLoader::ResourceLoader(scoped_ptr<net::URLRequest> request, | 75 ResourceLoader::ResourceLoader(scoped_ptr<net::URLRequest> request, |
76 scoped_ptr<ResourceHandler> handler, | 76 scoped_ptr<ResourceHandler> handler, |
77 ResourceLoaderDelegate* delegate) | 77 ResourceLoaderDelegate* delegate) |
78 : deferred_stage_(DEFERRED_NONE), | 78 : deferred_stage_(DEFERRED_NONE), |
79 request_(request.Pass()), | 79 request_(request.Pass()), |
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
221 | 221 |
222 delegate_->DidReceiveRedirect(this, new_url); | 222 delegate_->DidReceiveRedirect(this, new_url); |
223 | 223 |
224 if (delegate_->HandleExternalProtocol(this, new_url)) { | 224 if (delegate_->HandleExternalProtocol(this, new_url)) { |
225 // The request is complete so we can remove it. | 225 // The request is complete so we can remove it. |
226 CancelAndIgnore(); | 226 CancelAndIgnore(); |
227 return; | 227 return; |
228 } | 228 } |
229 | 229 |
230 scoped_refptr<ResourceResponse> response(new ResourceResponse()); | 230 scoped_refptr<ResourceResponse> response(new ResourceResponse()); |
231 PopulateResourceResponse(request_.get(), response.get()); | 231 PopulateResourceResponse(info, request_.get(), response.get()); |
232 | 232 |
233 if (!handler_->OnRequestRedirected(new_url, response.get(), defer)) { | 233 if (!handler_->OnRequestRedirected(new_url, response.get(), defer)) { |
234 Cancel(); | 234 Cancel(); |
235 } else if (*defer) { | 235 } else if (*defer) { |
236 deferred_stage_ = DEFERRED_REDIRECT; // Follow redirect when resumed. | 236 deferred_stage_ = DEFERRED_REDIRECT; // Follow redirect when resumed. |
237 } | 237 } |
238 } | 238 } |
239 | 239 |
240 void ResourceLoader::OnAuthRequired(net::URLRequest* unused, | 240 void ResourceLoader::OnAuthRequired(net::URLRequest* unused, |
241 net::AuthChallengeInfo* auth_info) { | 241 net::AuthChallengeInfo* auth_info) { |
(...skipping 278 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
520 const int sct_id(sct_store->Store(iter->sct, process_id)); | 520 const int sct_id(sct_store->Store(iter->sct, process_id)); |
521 sct_ids->push_back( | 521 sct_ids->push_back( |
522 SignedCertificateTimestampIDAndStatus(sct_id, iter->status)); | 522 SignedCertificateTimestampIDAndStatus(sct_id, iter->status)); |
523 } | 523 } |
524 } | 524 } |
525 | 525 |
526 void ResourceLoader::CompleteResponseStarted() { | 526 void ResourceLoader::CompleteResponseStarted() { |
527 ResourceRequestInfoImpl* info = GetRequestInfo(); | 527 ResourceRequestInfoImpl* info = GetRequestInfo(); |
528 | 528 |
529 scoped_refptr<ResourceResponse> response(new ResourceResponse()); | 529 scoped_refptr<ResourceResponse> response(new ResourceResponse()); |
530 PopulateResourceResponse(request_.get(), response.get()); | 530 PopulateResourceResponse(info, request_.get(), response.get()); |
531 | 531 |
532 if (request_->ssl_info().cert.get()) { | 532 if (request_->ssl_info().cert.get()) { |
533 int cert_id = CertStore::GetInstance()->StoreCert( | 533 int cert_id = CertStore::GetInstance()->StoreCert( |
534 request_->ssl_info().cert.get(), info->GetChildID()); | 534 request_->ssl_info().cert.get(), info->GetChildID()); |
535 | 535 |
536 SignedCertificateTimestampIDStatusList signed_certificate_timestamp_ids; | 536 SignedCertificateTimestampIDStatusList signed_certificate_timestamp_ids; |
537 StoreSignedCertificateTimestamps( | 537 StoreSignedCertificateTimestamps( |
538 request_->ssl_info().signed_certificate_timestamps, | 538 request_->ssl_info().signed_certificate_timestamps, |
539 info->GetChildID(), | 539 info->GetChildID(), |
540 &signed_certificate_timestamp_ids); | 540 &signed_certificate_timestamp_ids); |
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
703 case net::URLRequestStatus::FAILED: | 703 case net::URLRequestStatus::FAILED: |
704 status = STATUS_UNDEFINED; | 704 status = STATUS_UNDEFINED; |
705 break; | 705 break; |
706 } | 706 } |
707 | 707 |
708 UMA_HISTOGRAM_ENUMERATION("Net.Prefetch.Pattern", status, STATUS_MAX); | 708 UMA_HISTOGRAM_ENUMERATION("Net.Prefetch.Pattern", status, STATUS_MAX); |
709 } | 709 } |
710 } | 710 } |
711 | 711 |
712 } // namespace content | 712 } // namespace content |
OLD | NEW |