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 |