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

Unified Diff: content/renderer/service_worker/embedded_worker_instance_client_impl.cc

Issue 2578023002: ServiceWorker: Stop don't send a message before connection established (Closed)
Patch Set: comment from falken@ Created 3 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 side-by-side diff with in-line comments
Download patch
Index: content/renderer/service_worker/embedded_worker_instance_client_impl.cc
diff --git a/content/renderer/service_worker/embedded_worker_instance_client_impl.cc b/content/renderer/service_worker/embedded_worker_instance_client_impl.cc
index 38014c8cc62640fcf7258ef9d588d784c2c0b1c3..93880f750237400938236101a3d5c623cbdaed56 100644
--- a/content/renderer/service_worker/embedded_worker_instance_client_impl.cc
+++ b/content/renderer/service_worker/embedded_worker_instance_client_impl.cc
@@ -31,9 +31,9 @@ void EmbeddedWorkerInstanceClientImpl::StopWorkerCompleted() {
dispatcher_->UnregisterWorker(embedded_worker_id_.value());
embedded_worker_id_.reset();
stop_callback_.Run();
+ stop_callback_.Reset();
TRACE_EVENT0("ServiceWorker",
"EmbeddedWorkerInstanceClientImpl::StopWorkerCompleted");
- stop_callback_.Reset();
wrapper_ = nullptr;
}
@@ -42,6 +42,7 @@ void EmbeddedWorkerInstanceClientImpl::StartWorker(
mojom::ServiceWorkerEventDispatcherRequest dispatcher_request) {
DCHECK(ChildThreadImpl::current());
DCHECK(!wrapper_);
+ DCHECK(!embedded_worker_id_);
TRACE_EVENT0("ServiceWorker",
"EmbeddedWorkerInstanceClientImpl::StartWorker");
embedded_worker_id_ = params.embedded_worker_id;
@@ -60,13 +61,14 @@ void EmbeddedWorkerInstanceClientImpl::StartWorker(
void EmbeddedWorkerInstanceClientImpl::StopWorker(
const StopWorkerCallback& callback) {
+ // StopWorker must be called after StartWorker is called.
DCHECK(ChildThreadImpl::current());
+ DCHECK(wrapper_);
DCHECK(embedded_worker_id_);
- // StopWorker is possible to be called twice or before StartWorker().
- if (stop_callback_ || !wrapper_)
- return;
+ DCHECK(!stop_callback_);
+
TRACE_EVENT0("ServiceWorker", "EmbeddedWorkerInstanceClientImpl::StopWorker");
- stop_callback_ = std::move(callback);
+ stop_callback_ = callback;
dispatcher_->RecordStopWorkerTimer(embedded_worker_id_.value());
wrapper_->worker()->terminateWorkerContext();
}

Powered by Google App Engine
This is Rietveld 408576698