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

Unified Diff: content/browser/service_worker/service_worker_job_coordinator.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_job_coordinator.cc
diff --git a/content/browser/service_worker/service_worker_job_coordinator.cc b/content/browser/service_worker/service_worker_job_coordinator.cc
index f2b54389d1175e19292c0a9ed8ef78fad7ddf458..8152b4902721df56d780c8e3ff968701968dbd3d 100644
--- a/content/browser/service_worker/service_worker_job_coordinator.cc
+++ b/content/browser/service_worker/service_worker_job_coordinator.cc
@@ -41,6 +41,12 @@ void ServiceWorkerJobCoordinator::JobQueue::Pop(
jobs_.front()->Start();
}
+void ServiceWorkerJobCoordinator::JobQueue::AbortAll() {
+ for (size_t i = 0; i < jobs_.size(); ++i)
+ jobs_[i]->Abort();
+ STLDeleteElements(&jobs_);
+}
+
void ServiceWorkerJobCoordinator::JobQueue::ClearForShutdown() {
STLDeleteElements(&jobs_);
}
@@ -52,14 +58,14 @@ ServiceWorkerJobCoordinator::ServiceWorkerJobCoordinator(
ServiceWorkerJobCoordinator::~ServiceWorkerJobCoordinator() {
if (!context_) {
- for (RegistrationJobMap::iterator it = jobs_.begin(); it != jobs_.end();
- ++it) {
+ for (RegistrationJobMap::iterator it = job_queues_.begin();
+ it != job_queues_.end(); ++it) {
it->second.ClearForShutdown();
}
- jobs_.clear();
+ job_queues_.clear();
}
- DCHECK(jobs_.empty()) << "Destroying ServiceWorkerJobCoordinator with "
- << jobs_.size() << " job queues";
+ DCHECK(job_queues_.empty()) << "Destroying ServiceWorkerJobCoordinator with "
+ << job_queues_.size() << " job queues";
}
void ServiceWorkerJobCoordinator::Register(
@@ -70,7 +76,8 @@ void ServiceWorkerJobCoordinator::Register(
scoped_ptr<ServiceWorkerRegisterJobBase> job(
new ServiceWorkerRegisterJob(context_, pattern, script_url));
ServiceWorkerRegisterJob* queued_job =
- static_cast<ServiceWorkerRegisterJob*>(jobs_[pattern].Push(job.Pass()));
+ static_cast<ServiceWorkerRegisterJob*>(
+ job_queues_[pattern].Push(job.Pass()));
queued_job->AddCallback(callback, source_process_id);
}
@@ -80,17 +87,26 @@ void ServiceWorkerJobCoordinator::Unregister(
scoped_ptr<ServiceWorkerRegisterJobBase> job(
new ServiceWorkerUnregisterJob(context_, pattern));
ServiceWorkerUnregisterJob* queued_job =
- static_cast<ServiceWorkerUnregisterJob*>(jobs_[pattern].Push(job.Pass()));
+ static_cast<ServiceWorkerUnregisterJob*>(
+ job_queues_[pattern].Push(job.Pass()));
queued_job->AddCallback(callback);
}
+void ServiceWorkerJobCoordinator::AbortAll() {
+ for (RegistrationJobMap::iterator it = job_queues_.begin();
+ it != job_queues_.end(); ++it) {
+ it->second.AbortAll();
+ }
+ job_queues_.clear();
+}
+
void ServiceWorkerJobCoordinator::FinishJob(const GURL& pattern,
ServiceWorkerRegisterJobBase* job) {
- RegistrationJobMap::iterator pending_jobs = jobs_.find(pattern);
- DCHECK(pending_jobs != jobs_.end()) << "Deleting non-existent job.";
+ RegistrationJobMap::iterator pending_jobs = job_queues_.find(pattern);
+ DCHECK(pending_jobs != job_queues_.end()) << "Deleting non-existent job.";
pending_jobs->second.Pop(job);
if (pending_jobs->second.empty())
- jobs_.erase(pending_jobs);
+ job_queues_.erase(pending_jobs);
}
} // namespace content

Powered by Google App Engine
This is Rietveld 408576698