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 50adf19c784ffdcc79de8a15e9702d286bece151..915382afc8f6caaf35fff805998336f21240d103 100644 |
--- a/content/browser/service_worker/service_worker_version.cc |
+++ b/content/browser/service_worker/service_worker_version.cc |
@@ -200,6 +200,17 @@ void OnEventDispatcherConnectionError( |
} |
} |
+mojom::ServiceWorkerProviderClientInfoPtr CompleteProviderHostPreperation( |
falken
2017/06/16 15:44:46
typo: Preparation
shimazu
2017/06/19 03:53:30
Done.
|
+ ServiceWorkerVersion* version, |
+ std::unique_ptr<ServiceWorkerProviderHost> provider_host, |
+ base::WeakPtr<ServiceWorkerContextCore> context, |
+ int process_id) { |
+ auto info = |
+ provider_host->CompleteStartWorkerPreparation(process_id, version); |
+ context->AddProviderHost(std::move(provider_host)); |
+ return info; |
+} |
+ |
} // namespace |
const int ServiceWorkerVersion::kTimeoutTimerDelaySeconds = 30; |
@@ -847,6 +858,9 @@ ServiceWorkerVersion::PendingRequest::~PendingRequest() {} |
void ServiceWorkerVersion::OnThreadStarted() { |
DCHECK_EQ(EmbeddedWorkerStatus::STARTING, running_status()); |
+ DCHECK(provider_host_); |
+ provider_host_->SetReadyToSendMessagesToWorker( |
+ embedded_worker()->thread_id()); |
// Activate ping/pong now that JavaScript execution will start. |
ping_controller_->Activate(); |
} |
@@ -1466,6 +1480,10 @@ void ServiceWorkerVersion::StartWorkerInternal() { |
StartTimeoutTimer(); |
+ std::unique_ptr<ServiceWorkerProviderHost> pending_provider_host = |
+ ServiceWorkerProviderHost::PreCreateForController(context()); |
+ provider_host_ = pending_provider_host->AsWeakPtr(); |
+ |
auto params = base::MakeUnique<EmbeddedWorkerStartParams>(); |
params->service_worker_version_id = version_id_; |
params->scope = scope_; |
@@ -1474,7 +1492,10 @@ void ServiceWorkerVersion::StartWorkerInternal() { |
params->pause_after_download = pause_after_download_; |
embedded_worker_->Start( |
- std::move(params), mojo::MakeRequest(&event_dispatcher_), |
+ std::move(params), |
+ base::BindOnce(&CompleteProviderHostPreperation, base::Unretained(this), |
kinuko
2017/06/16 09:33:50
Maybe comment about why Unretained is fine (e.g. p
shimazu
2017/06/19 03:53:30
Done.
|
+ base::Passed(&pending_provider_host), context()), |
+ mojo::MakeRequest(&event_dispatcher_), |
base::Bind(&ServiceWorkerVersion::OnStartSentAndScriptEvaluated, |
weak_factory_.GetWeakPtr())); |
event_dispatcher_.set_connection_error_handler(base::Bind( |