| 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 |