| 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 ff5045080bfbb722d3cf77dcb2c95157bd616f9d..c0094e002d26115a753cf281d6a93ddfbe8afc14 100644
|
| --- a/content/renderer/service_worker/embedded_worker_instance_client_impl.cc
|
| +++ b/content/renderer/service_worker/embedded_worker_instance_client_impl.cc
|
| @@ -24,26 +24,51 @@ void EmbeddedWorkerInstanceClientImpl::Create(
|
| new EmbeddedWorkerInstanceClientImpl(dispatcher, std::move(request));
|
| }
|
|
|
| +void EmbeddedWorkerInstanceClientImpl::StopWorkerCompleted() {
|
| + DCHECK(embedded_worker_id_);
|
| + DCHECK(stop_callback_);
|
| + dispatcher_->UnregisterWorker(embedded_worker_id_.value());
|
| + embedded_worker_id_.reset();
|
| + stop_callback_.Run();
|
| + TRACE_EVENT0("ServiceWorker",
|
| + "EmbeddedWorkerInstanceClientImpl::StopWorkerCompleted");
|
| + stop_callback_.Reset();
|
| +}
|
| +
|
| void EmbeddedWorkerInstanceClientImpl::StartWorker(
|
| const EmbeddedWorkerStartParams& params) {
|
| TRACE_EVENT0("ServiceWorker",
|
| "EmbeddedWorkerInstanceClientImpl::StartWorker");
|
|
|
| + embedded_worker_id_ = params.embedded_worker_id;
|
| +
|
| std::unique_ptr<EmbeddedWorkerDispatcher::WorkerWrapper> wrapper =
|
| dispatcher_->StartWorkerContext(
|
| - params,
|
| - base::MakeUnique<ServiceWorkerContextClient>(
|
| - params.embedded_worker_id, params.service_worker_version_id,
|
| - params.scope, params.script_url,
|
| - params.worker_devtools_agent_route_id));
|
| + params, base::MakeUnique<ServiceWorkerContextClient>(
|
| + params.embedded_worker_id,
|
| + params.service_worker_version_id, params.scope,
|
| + params.script_url, params.worker_devtools_agent_route_id,
|
| + std::move(temporal_self_)));
|
| wrapper_ = wrapper.get();
|
| dispatcher_->RegisterWorker(params.embedded_worker_id, std::move(wrapper));
|
| }
|
|
|
| +void EmbeddedWorkerInstanceClientImpl::StopWorker(
|
| + const StopWorkerCallback& callback) {
|
| + DCHECK(embedded_worker_id_);
|
| + DCHECK(!stop_callback_);
|
| + 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)));
|
| }
|
| @@ -51,9 +76,8 @@ EmbeddedWorkerInstanceClientImpl::EmbeddedWorkerInstanceClientImpl(
|
| EmbeddedWorkerInstanceClientImpl::~EmbeddedWorkerInstanceClientImpl() {}
|
|
|
| void EmbeddedWorkerInstanceClientImpl::OnError() {
|
| - // TODO(shimazu): Implement here
|
| - DVLOG(2) << __FUNCTION__;
|
| - NOTIMPLEMENTED();
|
| + // Removes myself if it's owned by myself
|
| + temporal_self_.reset();
|
| }
|
|
|
| } // namespace content
|
|
|