 Chromium Code Reviews
 Chromium Code Reviews Issue 2779763004:
  Create ServiceWorkerProviderHost before starting worker  (Closed)
    
  
    Issue 2779763004:
  Create ServiceWorkerProviderHost before starting worker  (Closed) 
  | 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( |