Chromium Code Reviews| 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 |