Chromium Code Reviews| Index: content/browser/service_worker/service_worker_register_job.cc |
| diff --git a/content/browser/service_worker/service_worker_register_job.cc b/content/browser/service_worker/service_worker_register_job.cc |
| index 6eba2e8ab82a714235f7a0b97f6822f8e3f089cd..f0d8d53546ef2d92fc7837e2b8f6a635dda06e4b 100644 |
| --- a/content/browser/service_worker/service_worker_register_job.cc |
| +++ b/content/browser/service_worker/service_worker_register_job.cc |
| @@ -38,7 +38,8 @@ ServiceWorkerRegisterJob::ServiceWorkerRegisterJob( |
| weak_factory_(this) {} |
| ServiceWorkerRegisterJob::~ServiceWorkerRegisterJob() { |
| - DCHECK(!context_ || phase_ == INITIAL || phase_ == COMPLETE) |
| + DCHECK(!context_ || |
| + phase_ == INITIAL || phase_ == COMPLETE || phase_ == ABORT) |
| << "Jobs should only be interrupted during shutdown."; |
| } |
| @@ -64,6 +65,12 @@ void ServiceWorkerRegisterJob::Start() { |
| weak_factory_.GetWeakPtr())); |
| } |
| +void ServiceWorkerRegisterJob::Abort() { |
| + SetPhase(ABORT); |
| + SetPhase(COMPLETE); |
|
falken
2014/06/19 08:10:56
This looks awkward, can we remove the SetPhase(COM
nhiroki
2014/06/19 10:04:05
Done.
|
| + CompleteInternal(SERVICE_WORKER_ERROR_ABORT); |
| +} |
| + |
| bool ServiceWorkerRegisterJob::Equals(ServiceWorkerRegisterJobBase* job) { |
| if (job->GetType() != GetType()) |
| return false; |
| @@ -131,6 +138,8 @@ void ServiceWorkerRegisterJob::SetPhase(Phase phase) { |
| case COMPLETE: |
| DCHECK(phase_ != INITIAL && phase_ != COMPLETE) << phase_; |
| break; |
| + case ABORT: |
| + break; |
| } |
| phase_ = phase; |
| } |
| @@ -360,6 +369,13 @@ void ServiceWorkerRegisterJob::OnActivateFinished( |
| void ServiceWorkerRegisterJob::Complete(ServiceWorkerStatusCode status) { |
| SetPhase(COMPLETE); |
| + CompleteInternal(status); |
| + context_->job_coordinator()->FinishJob(pattern_, this); |
|
falken
2014/06/19 08:10:56
I think this is OK. Another option could be to kee
nhiroki
2014/06/19 10:04:05
Updated. I think new code looks simpler than the p
|
| +} |
| + |
| +void ServiceWorkerRegisterJob::CompleteInternal( |
| + ServiceWorkerStatusCode status) { |
| + DCHECK_EQ(COMPLETE, phase_); |
| if (status != SERVICE_WORKER_OK) { |
| if (registration() && registration()->waiting_version()) { |
| DisassociateWaitingVersionFromDocuments( |
| @@ -380,7 +396,6 @@ void ServiceWorkerRegisterJob::Complete(ServiceWorkerStatusCode status) { |
| context_->storage()->NotifyDoneInstallingRegistration( |
| registration(), pending_version(), status); |
| } |
| - context_->job_coordinator()->FinishJob(pattern_, this); |
| } |
| void ServiceWorkerRegisterJob::ResolvePromise( |