Chromium Code Reviews| 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( |