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 |