Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(106)

Side by Side Diff: content/browser/service_worker/service_worker_url_request_job.cc

Issue 844913002: [ServiceWorker] Refactor the codes for releasing the resources for streaming. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « content/browser/service_worker/service_worker_url_request_job.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
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
OLDNEW
« no previous file with comments | « content/browser/service_worker/service_worker_url_request_job.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698