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() { |