| Index: content/browser/service_worker/embedded_worker_instance.cc
|
| diff --git a/content/browser/service_worker/embedded_worker_instance.cc b/content/browser/service_worker/embedded_worker_instance.cc
|
| index eabb07abe2eabde3b8ee28553ad5cbfab763eeca..3b2e856a90556be02511ff7ec2727c4107d75635 100644
|
| --- a/content/browser/service_worker/embedded_worker_instance.cc
|
| +++ b/content/browser/service_worker/embedded_worker_instance.cc
|
| @@ -375,7 +375,7 @@ class EmbeddedWorkerInstance::StartTask {
|
| params->wait_for_debugger = wait_for_debugger;
|
|
|
| if (ServiceWorkerUtils::IsMojoForServiceWorkerEnabled())
|
| - instance_->SendMojoStartWorker(std::move(params));
|
| + SendMojoStartWorker(std::move(params));
|
| else
|
| SendStartWorker(std::move(params));
|
| }
|
| @@ -400,6 +400,18 @@ class EmbeddedWorkerInstance::StartTask {
|
| // is evaluated.
|
| }
|
|
|
| + void SendMojoStartWorker(std::unique_ptr<EmbeddedWorkerStartParams> params) {
|
| + ServiceWorkerStatusCode status =
|
| + instance_->SendMojoStartWorker(std::move(params));
|
| + if (status != SERVICE_WORKER_OK) {
|
| + StatusCallback callback = start_callback_;
|
| + start_callback_.Reset();
|
| + instance_->OnStartFailed(callback, status);
|
| + // |this| may be destroyed.
|
| + return;
|
| + }
|
| + }
|
| +
|
| // |instance_| must outlive |this|.
|
| EmbeddedWorkerInstance* instance_;
|
|
|
| @@ -601,8 +613,10 @@ void EmbeddedWorkerInstance::OnRegisteredToDevToolsManager(
|
| observer.OnRegisteredToDevToolsManager();
|
| }
|
|
|
| -void EmbeddedWorkerInstance::SendMojoStartWorker(
|
| +ServiceWorkerStatusCode EmbeddedWorkerInstance::SendMojoStartWorker(
|
| std::unique_ptr<EmbeddedWorkerStartParams> params) {
|
| + if (!context_)
|
| + return SERVICE_WORKER_ERROR_ABORT;
|
| service_manager::mojom::InterfaceProviderPtr remote_interfaces;
|
| service_manager::mojom::InterfaceProviderRequest request =
|
| mojo::GetProxy(&remote_interfaces);
|
| @@ -615,6 +629,7 @@ void EmbeddedWorkerInstance::SendMojoStartWorker(
|
| TRACE_EVENT_ASYNC_STEP_PAST1("ServiceWorker", "EmbeddedWorkerInstance::Start",
|
| this, "SendStartWorker", "Status", "mojo");
|
| OnStartWorkerMessageSent();
|
| + return SERVICE_WORKER_OK;
|
| }
|
|
|
| void EmbeddedWorkerInstance::OnStartWorkerMessageSent() {
|
|
|