 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/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 92351588d6b265e9c88b9093d1bb694b352c3e74..55c39932aa5ae33dbd15a2a0f548cf207593ef1f 100644 | 
| --- a/content/browser/service_worker/embedded_worker_instance.cc | 
| +++ b/content/browser/service_worker/embedded_worker_instance.cc | 
| @@ -470,7 +470,6 @@ void EmbeddedWorkerInstance::Start( | 
| mojo::MakeRequest(&client_); | 
| client_.set_connection_error_handler( | 
| base::Bind(&CallDetach, base::Unretained(this))); | 
| - | 
| pending_dispatcher_request_ = std::move(dispatcher_request); | 
| inflight_start_task_.reset( | 
| @@ -589,15 +588,22 @@ ServiceWorkerStatusCode EmbeddedWorkerInstance::SendStartWorker( | 
| std::unique_ptr<EmbeddedWorkerStartParams> params) { | 
| if (!context_) | 
| return SERVICE_WORKER_ERROR_ABORT; | 
| + DCHECK(pending_dispatcher_request_.is_pending()); | 
| DCHECK(!instance_host_binding_.is_bound()); | 
| mojom::EmbeddedWorkerInstanceHostAssociatedPtrInfo host_ptr_info; | 
| instance_host_binding_.Bind(mojo::MakeRequest(&host_ptr_info)); | 
| - DCHECK(pending_dispatcher_request_.is_pending()); | 
| + mojom::ServiceWorkerProviderClientInfoPtr provider_client_info = | 
| + mojom::ServiceWorkerProviderClientInfo::New(); | 
| + params->controller_provider->CompleteStartWorkerPreparation( | 
| + process_id(), &provider_client_info); | 
| 
kinuko
2017/06/13 06:21:40
This feels a bit puzzling to me as well... params
 
shimazu
2017/06/14 07:24:40
Done.
 | 
| + | 
| client_->StartWorker(*params, std::move(pending_dispatcher_request_), | 
| - std::move(host_ptr_info)); | 
| + std::move(host_ptr_info), | 
| + std::move(provider_client_info)); | 
| registry_->BindWorkerToProcess(process_id(), embedded_worker_id()); | 
| + | 
| OnStartWorkerMessageSent(); | 
| // Once the start worker message is received, renderer side will prepare a | 
| // shadow page for getting worker script. | 
| @@ -701,20 +707,10 @@ void EmbeddedWorkerInstance::OnWorkerVersionDoomed() { | 
| devtools_proxy_->NotifyWorkerVersionDoomed(); | 
| } | 
| -void EmbeddedWorkerInstance::OnThreadStarted(int thread_id, int provider_id) { | 
| +void EmbeddedWorkerInstance::OnThreadStarted(int thread_id) { | 
| if (!context_ || !inflight_start_task_) | 
| return; | 
| - ServiceWorkerProviderHost* provider_host = | 
| - context_->GetProviderHost(process_id(), provider_id); | 
| - if (!provider_host) { | 
| - bad_message::ReceivedBadMessage( | 
| - process_id(), bad_message::SWDH_WORKER_SCRIPT_LOAD_NO_HOST); | 
| - return; | 
| - } | 
| - | 
| - provider_host->SetReadyToSendMessagesToWorker(thread_id); | 
| - | 
| TRACE_EVENT_NESTABLE_ASYNC_END0("ServiceWorker", "LAUNCHING_WORKER_THREAD", | 
| this); | 
| // Renderer side has started to evaluate the loaded worker script. | 
| @@ -811,6 +807,8 @@ void EmbeddedWorkerInstance::OnDetached() { | 
| } | 
| void EmbeddedWorkerInstance::Detach() { | 
| + if (status() == EmbeddedWorkerStatus::STOPPED) | 
| + return; | 
| registry_->DetachWorker(process_id(), embedded_worker_id()); | 
| OnDetached(); | 
| } | 
| @@ -892,7 +890,6 @@ void EmbeddedWorkerInstance::ReleaseProcess() { | 
| // Abort an inflight start task. | 
| inflight_start_task_.reset(); | 
| - client_.reset(); | 
| instance_host_binding_.Close(); | 
| devtools_proxy_.reset(); | 
| process_handle_.reset(); |