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

Unified Diff: content/browser/service_worker/service_worker_register_job.cc

Issue 345583002: ServiceWorker: Add a function to abort all pending jobs in SWJobCoordinator (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: address comments and add test cases Created 6 years, 6 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 side-by-side diff with in-line comments
Download patch
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(

Powered by Google App Engine
This is Rietveld 408576698