Index: content/browser/service_worker/service_worker_version.cc |
diff --git a/content/browser/service_worker/service_worker_version.cc b/content/browser/service_worker/service_worker_version.cc |
index e72bc88a66c8fa4c0c0fc0428b0c684a9fb9bc43..d2951d127d0e73eecf109b74c81ff50c4b60b424 100644 |
--- a/content/browser/service_worker/service_worker_version.cc |
+++ b/content/browser/service_worker/service_worker_version.cc |
@@ -826,6 +826,9 @@ ServiceWorkerVersion::PendingRequest::~PendingRequest() {} |
void ServiceWorkerVersion::OnThreadStarted() { |
DCHECK_EQ(EmbeddedWorkerStatus::STARTING, running_status()); |
+ DCHECK(running_controller_provider_); |
+ running_controller_provider_->SetReadyToSendMessagesToWorker( |
+ embedded_worker()->thread_id()); |
// Activate ping/pong now that JavaScript execution will start. |
ping_controller_->Activate(); |
} |
@@ -835,6 +838,11 @@ void ServiceWorkerVersion::OnStarting() { |
observer.OnRunningStateChanged(this); |
} |
+void ServiceWorkerVersion::OnStartWorkerMessageSent() { |
+ DCHECK(pending_controller_provider_); |
+ context()->AddProviderHost(std::move(pending_controller_provider_)); |
+} |
+ |
void ServiceWorkerVersion::OnStarted() { |
DCHECK_EQ(EmbeddedWorkerStatus::RUNNING, running_status()); |
RestartTick(&idle_time_); |
@@ -1427,12 +1435,18 @@ void ServiceWorkerVersion::StartWorkerInternal() { |
StartTimeoutTimer(); |
+ DCHECK(!pending_controller_provider_); |
+ pending_controller_provider_ = |
+ ServiceWorkerProviderHost::PreCreateForWorkerContext(this, context()); |
+ running_controller_provider_ = pending_controller_provider_->AsWeakPtr(); |
+ |
auto params = base::MakeUnique<EmbeddedWorkerStartParams>(); |
params->service_worker_version_id = version_id_; |
params->scope = scope_; |
params->script_url = script_url_; |
params->is_installed = IsInstalled(status_); |
params->pause_after_download = pause_after_download_; |
+ params->controller_provider = pending_controller_provider_.get(); |
embedded_worker_->Start( |
std::move(params), mojo::MakeRequest(&event_dispatcher_), |