Chromium Code Reviews| Index: content/browser/service_worker/service_worker_url_request_job.cc |
| diff --git a/content/browser/service_worker/service_worker_url_request_job.cc b/content/browser/service_worker/service_worker_url_request_job.cc |
| index aa1cf1ffff75baa73649d11c78f81ef36dfad55e..49b2b445433acf0eadf860af41c634c78ed093ca 100644 |
| --- a/content/browser/service_worker/service_worker_url_request_job.cc |
| +++ b/content/browser/service_worker/service_worker_url_request_job.cc |
| @@ -11,6 +11,7 @@ |
| #include "base/bind.h" |
| #include "base/guid.h" |
| #include "base/strings/stringprintf.h" |
| +#include "base/time/time.h" |
| #include "content/browser/service_worker/service_worker_fetch_dispatcher.h" |
| #include "content/browser/service_worker/service_worker_provider_host.h" |
| #include "content/common/resource_request_body.h" |
| @@ -26,6 +27,9 @@ |
| #include "webkit/browser/blob/blob_storage_context.h" |
| #include "webkit/browser/blob/blob_url_request_job_factory.h" |
| +using base::Time; |
| +using base::TimeTicks; |
| + |
| namespace content { |
| ServiceWorkerURLRequestJob::ServiceWorkerURLRequestJob( |
| @@ -88,6 +92,12 @@ void ServiceWorkerURLRequestJob::GetResponseInfo(net::HttpResponseInfo* info) { |
| if (!http_info()) |
| return; |
| *info = *http_info(); |
| + info->response_time = response_time_; |
| +} |
| + |
| +void ServiceWorkerURLRequestJob::GetLoadTimingInfo( |
| + net::LoadTimingInfo* load_timing_info) const { |
| + *load_timing_info = load_timing_info_; |
| } |
| int ServiceWorkerURLRequestJob::GetResponseCode() const { |
| @@ -159,6 +169,7 @@ void ServiceWorkerURLRequestJob::OnBeforeNetworkStart(net::URLRequest* request, |
| void ServiceWorkerURLRequestJob::OnResponseStarted(net::URLRequest* request) { |
| // TODO(falken): Add Content-Length, Content-Type if they were not provided in |
| // the ServiceWorkerResponse. |
| + response_time_ = base::Time::Now(); |
| CommitResponseHeader(); |
| } |
| @@ -222,6 +233,8 @@ void ServiceWorkerURLRequestJob::StartRequest() { |
| return; |
| case FORWARD_TO_SERVICE_WORKER: |
| + load_timing_info_.request_start_time = base::Time::Now(); |
| + load_timing_info_.request_start = base::TimeTicks::Now(); |
| DCHECK(provider_host_ && provider_host_->active_version()); |
| DCHECK(!fetch_dispatcher_); |
| // Send a fetch event to the ServiceWorker associated to the |
| @@ -233,6 +246,8 @@ void ServiceWorkerURLRequestJob::StartRequest() { |
| weak_factory_.GetWeakPtr()), |
| base::Bind(&ServiceWorkerURLRequestJob::DidDispatchFetchEvent, |
| weak_factory_.GetWeakPtr()))); |
| + load_timing_info_.serviceworker_timing.fetch_start = |
| + base::TimeTicks::Now(); |
| fetch_dispatcher_->Run(); |
| return; |
| } |
| @@ -324,8 +339,8 @@ bool ServiceWorkerURLRequestJob::CreateRequestBodyBlob(std::string* blob_uuid, |
| } |
| void ServiceWorkerURLRequestJob::DidPrepareFetchEvent() { |
| - // TODO(shimazu): Set the timestamp to measure the time to launch SW |
| - // This is related to this (http://crbug.com/401389) |
| + load_timing_info_.serviceworker_timing.launch_serviceworker = |
|
horo
2014/08/28 07:00:08
"launch_serviceworker" is not appropriate.
Service
shimazu
2014/08/29 02:16:33
Done.
|
| + base::TimeTicks::Now(); |
| } |
| void ServiceWorkerURLRequestJob::DidDispatchFetchEvent( |
| @@ -359,6 +374,7 @@ void ServiceWorkerURLRequestJob::DidDispatchFetchEvent( |
| // We should have a response now. |
| DCHECK_EQ(SERVICE_WORKER_FETCH_EVENT_RESULT_RESPONSE, fetch_result); |
| + load_timing_info_.serviceworker_timing.fetch_end = base::TimeTicks::Now(); |
| // Set up a request for reading the blob. |
| if (!response.blob_uuid.empty() && blob_storage_context_) { |
| @@ -377,14 +393,15 @@ void ServiceWorkerURLRequestJob::DidDispatchFetchEvent( |
| response_url_ = response.url; |
| CreateResponseHeader( |
| response.status_code, response.status_text, response.headers); |
| + load_timing_info_.receive_headers_end = base::TimeTicks::Now(); |
| if (!blob_request_) |
| CommitResponseHeader(); |
| } |
| void ServiceWorkerURLRequestJob::CreateResponseHeader( |
| - int status_code, |
| - const std::string& status_text, |
| - const std::map<std::string, std::string>& headers) { |
| + int status_code, |
| + const std::string& status_text, |
| + const std::map<std::string, std::string>& headers) { |
| // TODO(kinuko): If the response has an identifier to on-disk cache entry, |
| // pull response header from the disk. |
| std::string status_line( |