| 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 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 76 MaybeStartRequest(); | 76 MaybeStartRequest(); |
| 77 } | 77 } |
| 78 | 78 |
| 79 void ServiceWorkerURLRequestJob::Start() { | 79 void ServiceWorkerURLRequestJob::Start() { |
| 80 is_started_ = true; | 80 is_started_ = true; |
| 81 MaybeStartRequest(); | 81 MaybeStartRequest(); |
| 82 } | 82 } |
| 83 | 83 |
| 84 void ServiceWorkerURLRequestJob::Kill() { | 84 void ServiceWorkerURLRequestJob::Kill() { |
| 85 net::URLRequestJob::Kill(); | 85 net::URLRequestJob::Kill(); |
| 86 if (stream_ || !waiting_stream_url_.is_empty()) { | 86 ClearStream(); |
| 87 if (ServiceWorkerVersion* active_version = provider_host_->active_version()) | |
| 88 active_version->RemoveStreamingURLRequestJob(this); | |
| 89 } | |
| 90 if (stream_) { | |
| 91 stream_->RemoveReadObserver(this); | |
| 92 stream_->Abort(); | |
| 93 stream_ = nullptr; | |
| 94 } | |
| 95 if (!waiting_stream_url_.is_empty()) { | |
| 96 StreamRegistry* stream_registry = | |
| 97 GetStreamContextForResourceContext(resource_context_)->registry(); | |
| 98 stream_registry->RemoveRegisterObserver(waiting_stream_url_); | |
| 99 stream_registry->AbortPendingStream(waiting_stream_url_); | |
| 100 } | |
| 101 fetch_dispatcher_.reset(); | 87 fetch_dispatcher_.reset(); |
| 102 blob_request_.reset(); | 88 blob_request_.reset(); |
| 103 weak_factory_.InvalidateWeakPtrs(); | 89 weak_factory_.InvalidateWeakPtrs(); |
| 104 } | 90 } |
| 105 | 91 |
| 106 net::LoadState ServiceWorkerURLRequestJob::GetLoadState() const { | 92 net::LoadState ServiceWorkerURLRequestJob::GetLoadState() const { |
| 107 // TODO(kinuko): refine this for better debug. | 93 // TODO(kinuko): refine this for better debug. |
| 108 return net::URLRequestJob::GetLoadState(); | 94 return net::URLRequestJob::GetLoadState(); |
| 109 } | 95 } |
| 110 | 96 |
| (...skipping 223 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 334 *was_fallback_required_by_service_worker = fall_back_required_; | 320 *was_fallback_required_by_service_worker = fall_back_required_; |
| 335 *original_url_via_service_worker = response_url_; | 321 *original_url_via_service_worker = response_url_; |
| 336 *response_type_via_service_worker = service_worker_response_type_; | 322 *response_type_via_service_worker = service_worker_response_type_; |
| 337 *fetch_start_time = fetch_start_time_; | 323 *fetch_start_time = fetch_start_time_; |
| 338 *fetch_ready_time = fetch_ready_time_; | 324 *fetch_ready_time = fetch_ready_time_; |
| 339 *fetch_end_time = fetch_end_time_; | 325 *fetch_end_time = fetch_end_time_; |
| 340 } | 326 } |
| 341 | 327 |
| 342 | 328 |
| 343 ServiceWorkerURLRequestJob::~ServiceWorkerURLRequestJob() { | 329 ServiceWorkerURLRequestJob::~ServiceWorkerURLRequestJob() { |
| 330 ClearStream(); |
| 344 } | 331 } |
| 345 | 332 |
| 346 void ServiceWorkerURLRequestJob::MaybeStartRequest() { | 333 void ServiceWorkerURLRequestJob::MaybeStartRequest() { |
| 347 if (is_started_ && response_type_ != NOT_DETERMINED) { | 334 if (is_started_ && response_type_ != NOT_DETERMINED) { |
| 348 // Start asynchronously. | 335 // Start asynchronously. |
| 349 base::MessageLoop::current()->PostTask( | 336 base::MessageLoop::current()->PostTask( |
| 350 FROM_HERE, | 337 FROM_HERE, |
| 351 base::Bind(&ServiceWorkerURLRequestJob::StartRequest, | 338 base::Bind(&ServiceWorkerURLRequestJob::StartRequest, |
| 352 weak_factory_.GetWeakPtr())); | 339 weak_factory_.GetWeakPtr())); |
| 353 } | 340 } |
| (...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 532 return; | 519 return; |
| 533 } | 520 } |
| 534 | 521 |
| 535 fetch_end_time_ = base::TimeTicks::Now(); | 522 fetch_end_time_ = base::TimeTicks::Now(); |
| 536 load_timing_info_.send_end = fetch_end_time_; | 523 load_timing_info_.send_end = fetch_end_time_; |
| 537 | 524 |
| 538 // Set up a request for reading the stream. | 525 // Set up a request for reading the stream. |
| 539 if (response.stream_url.is_valid()) { | 526 if (response.stream_url.is_valid()) { |
| 540 DCHECK(response.blob_uuid.empty()); | 527 DCHECK(response.blob_uuid.empty()); |
| 541 DCHECK(provider_host_->active_version()); | 528 DCHECK(provider_host_->active_version()); |
| 542 provider_host_->active_version()->AddStreamingURLRequestJob(this); | 529 streaming_version_ = provider_host_->active_version(); |
| 530 streaming_version_->AddStreamingURLRequestJob(this); |
| 543 response_url_ = response.url; | 531 response_url_ = response.url; |
| 544 service_worker_response_type_ = response.response_type; | 532 service_worker_response_type_ = response.response_type; |
| 545 CreateResponseHeader( | 533 CreateResponseHeader( |
| 546 response.status_code, response.status_text, response.headers); | 534 response.status_code, response.status_text, response.headers); |
| 547 load_timing_info_.receive_headers_end = base::TimeTicks::Now(); | 535 load_timing_info_.receive_headers_end = base::TimeTicks::Now(); |
| 548 StreamContext* stream_context = | 536 StreamContext* stream_context = |
| 549 GetStreamContextForResourceContext(resource_context_); | 537 GetStreamContextForResourceContext(resource_context_); |
| 550 stream_ = | 538 stream_ = |
| 551 stream_context->registry()->GetStream(response.stream_url); | 539 stream_context->registry()->GetStream(response.stream_url); |
| 552 if (!stream_.get()) { | 540 if (!stream_.get()) { |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 612 } | 600 } |
| 613 | 601 |
| 614 void ServiceWorkerURLRequestJob::DeliverErrorResponse() { | 602 void ServiceWorkerURLRequestJob::DeliverErrorResponse() { |
| 615 // TODO(falken): Print an error to the console of the ServiceWorker and of | 603 // TODO(falken): Print an error to the console of the ServiceWorker and of |
| 616 // the requesting page. | 604 // the requesting page. |
| 617 CreateResponseHeader( | 605 CreateResponseHeader( |
| 618 500, "Service Worker Response Error", ServiceWorkerHeaderMap()); | 606 500, "Service Worker Response Error", ServiceWorkerHeaderMap()); |
| 619 CommitResponseHeader(); | 607 CommitResponseHeader(); |
| 620 } | 608 } |
| 621 | 609 |
| 610 void ServiceWorkerURLRequestJob::ClearStream() { |
| 611 if (streaming_version_) { |
| 612 streaming_version_->RemoveStreamingURLRequestJob(this); |
| 613 streaming_version_ = nullptr; |
| 614 } |
| 615 if (stream_) { |
| 616 stream_->RemoveReadObserver(this); |
| 617 stream_->Abort(); |
| 618 stream_ = nullptr; |
| 619 } |
| 620 if (!waiting_stream_url_.is_empty()) { |
| 621 StreamRegistry* stream_registry = |
| 622 GetStreamContextForResourceContext(resource_context_)->registry(); |
| 623 stream_registry->RemoveRegisterObserver(waiting_stream_url_); |
| 624 stream_registry->AbortPendingStream(waiting_stream_url_); |
| 625 } |
| 626 } |
| 627 |
| 622 } // namespace content | 628 } // namespace content |
| OLD | NEW |