OLD | NEW |
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 #include "content/browser/service_worker/service_worker_url_request_job.h" | 5 #include "content/browser/service_worker/service_worker_url_request_job.h" |
6 | 6 |
7 #include <map> | 7 #include <map> |
8 #include <string> | 8 #include <string> |
9 #include <vector> | 9 #include <vector> |
10 | 10 |
(...skipping 278 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
289 if (range_response_info_) | 289 if (range_response_info_) |
290 return range_response_info_.get(); | 290 return range_response_info_.get(); |
291 return http_response_info_.get(); | 291 return http_response_info_.get(); |
292 } | 292 } |
293 | 293 |
294 void ServiceWorkerURLRequestJob::GetExtraResponseInfo( | 294 void ServiceWorkerURLRequestJob::GetExtraResponseInfo( |
295 bool* was_fetched_via_service_worker, | 295 bool* was_fetched_via_service_worker, |
296 bool* was_fallback_required_by_service_worker, | 296 bool* was_fallback_required_by_service_worker, |
297 GURL* original_url_via_service_worker, | 297 GURL* original_url_via_service_worker, |
298 blink::WebServiceWorkerResponseType* response_type_via_service_worker, | 298 blink::WebServiceWorkerResponseType* response_type_via_service_worker, |
299 base::TimeTicks* fetch_start_time, | 299 base::TimeTicks* worker_start_time) const { |
300 base::TimeTicks* fetch_ready_time, | |
301 base::TimeTicks* fetch_end_time) const { | |
302 if (response_type_ != FORWARD_TO_SERVICE_WORKER) { | 300 if (response_type_ != FORWARD_TO_SERVICE_WORKER) { |
303 *was_fetched_via_service_worker = false; | 301 *was_fetched_via_service_worker = false; |
304 *was_fallback_required_by_service_worker = false; | 302 *was_fallback_required_by_service_worker = false; |
305 *original_url_via_service_worker = GURL(); | 303 *original_url_via_service_worker = GURL(); |
306 *response_type_via_service_worker = | 304 *response_type_via_service_worker = |
307 blink::WebServiceWorkerResponseTypeDefault; | 305 blink::WebServiceWorkerResponseTypeDefault; |
308 return; | 306 return; |
309 } | 307 } |
310 *was_fetched_via_service_worker = true; | 308 *was_fetched_via_service_worker = true; |
311 *was_fallback_required_by_service_worker = fall_back_required_; | 309 *was_fallback_required_by_service_worker = fall_back_required_; |
312 *original_url_via_service_worker = response_url_; | 310 *original_url_via_service_worker = response_url_; |
313 *response_type_via_service_worker = service_worker_response_type_; | 311 *response_type_via_service_worker = service_worker_response_type_; |
314 *fetch_start_time = fetch_start_time_; | 312 *worker_start_time = worker_start_time_; |
315 *fetch_ready_time = fetch_ready_time_; | |
316 *fetch_end_time = fetch_end_time_; | |
317 } | 313 } |
318 | 314 |
319 | 315 |
320 ServiceWorkerURLRequestJob::~ServiceWorkerURLRequestJob() { | 316 ServiceWorkerURLRequestJob::~ServiceWorkerURLRequestJob() { |
321 ClearStream(); | 317 ClearStream(); |
322 } | 318 } |
323 | 319 |
324 void ServiceWorkerURLRequestJob::MaybeStartRequest() { | 320 void ServiceWorkerURLRequestJob::MaybeStartRequest() { |
325 if (is_started_ && response_type_ != NOT_DETERMINED) { | 321 if (is_started_ && response_type_ != NOT_DETERMINED) { |
326 // Start asynchronously. | 322 // Start asynchronously. |
(...skipping 22 matching lines...) Expand all Loading... |
349 DCHECK(!fetch_dispatcher_); | 345 DCHECK(!fetch_dispatcher_); |
350 // Send a fetch event to the ServiceWorker associated to the | 346 // Send a fetch event to the ServiceWorker associated to the |
351 // provider_host. | 347 // provider_host. |
352 fetch_dispatcher_.reset(new ServiceWorkerFetchDispatcher( | 348 fetch_dispatcher_.reset(new ServiceWorkerFetchDispatcher( |
353 CreateFetchRequest(), | 349 CreateFetchRequest(), |
354 provider_host_->active_version(), | 350 provider_host_->active_version(), |
355 base::Bind(&ServiceWorkerURLRequestJob::DidPrepareFetchEvent, | 351 base::Bind(&ServiceWorkerURLRequestJob::DidPrepareFetchEvent, |
356 weak_factory_.GetWeakPtr()), | 352 weak_factory_.GetWeakPtr()), |
357 base::Bind(&ServiceWorkerURLRequestJob::DidDispatchFetchEvent, | 353 base::Bind(&ServiceWorkerURLRequestJob::DidDispatchFetchEvent, |
358 weak_factory_.GetWeakPtr()))); | 354 weak_factory_.GetWeakPtr()))); |
359 fetch_start_time_ = base::TimeTicks::Now(); | 355 worker_start_time_ = base::TimeTicks::Now(); |
360 fetch_dispatcher_->Run(); | 356 fetch_dispatcher_->Run(); |
361 return; | 357 return; |
362 } | 358 } |
363 | 359 |
364 NOTREACHED(); | 360 NOTREACHED(); |
365 } | 361 } |
366 | 362 |
367 scoped_ptr<ServiceWorkerFetchRequest> | 363 scoped_ptr<ServiceWorkerFetchRequest> |
368 ServiceWorkerURLRequestJob::CreateFetchRequest() { | 364 ServiceWorkerURLRequestJob::CreateFetchRequest() { |
369 std::string blob_uuid; | 365 std::string blob_uuid; |
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
465 } | 461 } |
466 | 462 |
467 request_body_blob_data_handle_ = | 463 request_body_blob_data_handle_ = |
468 blob_storage_context_->AddFinishedBlob(&blob_builder); | 464 blob_storage_context_->AddFinishedBlob(&blob_builder); |
469 *blob_uuid = uuid; | 465 *blob_uuid = uuid; |
470 *blob_size = total_size; | 466 *blob_size = total_size; |
471 return true; | 467 return true; |
472 } | 468 } |
473 | 469 |
474 void ServiceWorkerURLRequestJob::DidPrepareFetchEvent() { | 470 void ServiceWorkerURLRequestJob::DidPrepareFetchEvent() { |
475 fetch_ready_time_ = base::TimeTicks::Now(); | 471 load_timing_info_.send_start = base::TimeTicks::Now(); |
476 load_timing_info_.send_start = fetch_ready_time_; | |
477 } | 472 } |
478 | 473 |
479 void ServiceWorkerURLRequestJob::DidDispatchFetchEvent( | 474 void ServiceWorkerURLRequestJob::DidDispatchFetchEvent( |
480 ServiceWorkerStatusCode status, | 475 ServiceWorkerStatusCode status, |
481 ServiceWorkerFetchEventResult fetch_result, | 476 ServiceWorkerFetchEventResult fetch_result, |
482 const ServiceWorkerResponse& response, | 477 const ServiceWorkerResponse& response, |
483 scoped_refptr<ServiceWorkerVersion> version) { | 478 scoped_refptr<ServiceWorkerVersion> version) { |
484 fetch_dispatcher_.reset(); | 479 fetch_dispatcher_.reset(); |
485 | 480 |
486 // Check if we're not orphaned. | 481 // Check if we're not orphaned. |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
521 // We should have a response now. | 516 // We should have a response now. |
522 DCHECK_EQ(SERVICE_WORKER_FETCH_EVENT_RESULT_RESPONSE, fetch_result); | 517 DCHECK_EQ(SERVICE_WORKER_FETCH_EVENT_RESULT_RESPONSE, fetch_result); |
523 | 518 |
524 // Treat a response whose status is 0 as a Network Error. | 519 // Treat a response whose status is 0 as a Network Error. |
525 if (response.status_code == 0) { | 520 if (response.status_code == 0) { |
526 NotifyDone( | 521 NotifyDone( |
527 net::URLRequestStatus(net::URLRequestStatus::FAILED, net::ERR_FAILED)); | 522 net::URLRequestStatus(net::URLRequestStatus::FAILED, net::ERR_FAILED)); |
528 return; | 523 return; |
529 } | 524 } |
530 | 525 |
531 fetch_end_time_ = base::TimeTicks::Now(); | 526 load_timing_info_.send_end = base::TimeTicks::Now(); |
532 load_timing_info_.send_end = fetch_end_time_; | |
533 | 527 |
534 // Creates a new HttpResponseInfo using the the ServiceWorker script's | 528 // Creates a new HttpResponseInfo using the the ServiceWorker script's |
535 // HttpResponseInfo to show HTTPS padlock. | 529 // HttpResponseInfo to show HTTPS padlock. |
536 // TODO(horo): When we support mixed-content (HTTP) no-cors requests from a | 530 // TODO(horo): When we support mixed-content (HTTP) no-cors requests from a |
537 // ServiceWorker, we have to check the security level of the responses. | 531 // ServiceWorker, we have to check the security level of the responses. |
538 DCHECK(!http_response_info_); | 532 DCHECK(!http_response_info_); |
539 DCHECK(version); | 533 DCHECK(version); |
540 const net::HttpResponseInfo* main_script_http_info = | 534 const net::HttpResponseInfo* main_script_http_info = |
541 version->GetMainScriptHttpResponseInfo(); | 535 version->GetMainScriptHttpResponseInfo(); |
542 if (main_script_http_info) { | 536 if (main_script_http_info) { |
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
647 } | 641 } |
648 if (!waiting_stream_url_.is_empty()) { | 642 if (!waiting_stream_url_.is_empty()) { |
649 StreamRegistry* stream_registry = | 643 StreamRegistry* stream_registry = |
650 GetStreamContextForResourceContext(resource_context_)->registry(); | 644 GetStreamContextForResourceContext(resource_context_)->registry(); |
651 stream_registry->RemoveRegisterObserver(waiting_stream_url_); | 645 stream_registry->RemoveRegisterObserver(waiting_stream_url_); |
652 stream_registry->AbortPendingStream(waiting_stream_url_); | 646 stream_registry->AbortPendingStream(waiting_stream_url_); |
653 } | 647 } |
654 } | 648 } |
655 | 649 |
656 } // namespace content | 650 } // namespace content |
OLD | NEW |