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

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

Issue 2307543002: ServiceWorker: Mojofication of EWInstance::StopWorker (Closed)
Patch Set: Added a unittest file Created 4 years, 3 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 89b9612837853b74f90ccdb976f4caf51523620c..c1f90dc56f80c3f653e25ee9a8b4266360b814b0 100644
--- a/content/renderer/service_worker/embedded_worker_instance_client_impl.cc
+++ b/content/renderer/service_worker/embedded_worker_instance_client_impl.cc
@@ -24,18 +24,31 @@ void EmbeddedWorkerInstanceClientImpl::Create(
new EmbeddedWorkerInstanceClientImpl(dispatcher, std::move(request));
}
+void EmbeddedWorkerInstanceClientImpl::StopWorkerCompleted() {
+ DCHECK(embedded_worker_id_);
horo 2016/09/05 08:05:57 DCHECK(stop_callback_);
shimazu 2016/09/06 08:53:59 Done.
+ dispatcher_->UnregisterWorker(embedded_worker_id_.value());
+ embedded_worker_id_.reset();
+ stop_callback_.Run();
+ TRACE_EVENT0("ServiceWorker",
+ "EmbeddedWorkerInstanceClientImpl::StopWorkerCompleted");
+ stop_callback_.Reset();
+}
+
void EmbeddedWorkerInstanceClientImpl::StartWorker(
mojom::EmbeddedWorkerStartWorkerParamsPtr params) {
TRACE_EVENT0("ServiceWorker",
"EmbeddedWorkerInstanceClientImpl::StartWorker");
+ embedded_worker_id_ = params->embedded_worker_id;
+
std::unique_ptr<EmbeddedWorkerDispatcher::WorkerWrapper> wrapper(
new EmbeddedWorkerDispatcher::WorkerWrapper(
blink::WebEmbeddedWorker::create(
new ServiceWorkerContextClient(
params->embedded_worker_id, params->service_worker_version_id,
params->scope, params->script_url,
- params->worker_devtools_agent_route_id),
+ params->worker_devtools_agent_route_id,
+ std::move(temporal_self_)),
NULL),
params->worker_devtools_agent_route_id));
@@ -59,10 +72,23 @@ void EmbeddedWorkerInstanceClientImpl::StartWorker(
dispatcher_->RegisterWorker(params->embedded_worker_id, std::move(wrapper));
}
+void EmbeddedWorkerInstanceClientImpl::StopWorker(
+ const StopWorkerCallback& callback) {
+ if (stop_callback_)
horo 2016/09/05 08:05:57 Is it possible to call StopWorker() twice? If not,
shimazu 2016/09/06 08:53:59 No, is not. Changed it.
+ return;
+ DCHECK(embedded_worker_id_);
+ TRACE_EVENT0("ServiceWorker", "EmbeddedWorkerInstanceClientImpl::StopWorker");
+ stop_callback_ = std::move(callback);
+ dispatcher_->SetStopWorkerTimer(embedded_worker_id_.value());
+ wrapper_->worker()->terminateWorkerContext();
+}
+
EmbeddedWorkerInstanceClientImpl::EmbeddedWorkerInstanceClientImpl(
EmbeddedWorkerDispatcher* dispatcher,
mojo::InterfaceRequest<mojom::EmbeddedWorkerInstanceClient> request)
- : dispatcher_(dispatcher), binding_(this, std::move(request)) {
+ : dispatcher_(dispatcher),
+ binding_(this, std::move(request)),
+ temporal_self_(std::unique_ptr<EmbeddedWorkerInstanceClientImpl>(this)) {
binding_.set_connection_error_handler(base::Bind(
&EmbeddedWorkerInstanceClientImpl::OnError, base::Unretained(this)));
}
@@ -70,8 +96,8 @@ EmbeddedWorkerInstanceClientImpl::EmbeddedWorkerInstanceClientImpl(
EmbeddedWorkerInstanceClientImpl::~EmbeddedWorkerInstanceClientImpl() {}
void EmbeddedWorkerInstanceClientImpl::OnError() {
- // TODO(shimazu): Implement here
- DVLOG(2) << __FUNCTION__;
+ // Removes myself if it's owned by myself
+ temporal_self_.reset();
}
} // namespace content

Powered by Google App Engine
This is Rietveld 408576698