Chromium Code Reviews| Index: content/renderer/service_worker/service_worker_context_client.cc |
| diff --git a/content/renderer/service_worker/service_worker_context_client.cc b/content/renderer/service_worker/service_worker_context_client.cc |
| index bbb0b982f8f2a227abea46ece45c88492524a639..7e4723135aa7c751217eaba4486884aa70116e28 100644 |
| --- a/content/renderer/service_worker/service_worker_context_client.cc |
| +++ b/content/renderer/service_worker/service_worker_context_client.cc |
| @@ -205,7 +205,9 @@ struct ServiceWorkerContextClient::WorkerContextData { |
| SyncEventCallbacksMap sync_event_callbacks; |
| shell::InterfaceRegistry interface_registry; |
| - shell::InterfaceProvider remote_interfaces; |
| + |
| + // Reference to a browser-side object corresponding to EmbeddedWorkerInstance |
| + mojom::EmbeddedWorkerInstancePtr embedded_worker_host; |
| base::ThreadChecker thread_checker; |
| base::WeakPtrFactory<ServiceWorkerContextClient> weak_factory; |
| @@ -223,7 +225,7 @@ ServiceWorkerContextClient::ServiceWorkerContextClient( |
| const GURL& service_worker_scope, |
| const GURL& script_url, |
| int worker_devtools_agent_route_id, |
| - std::unique_ptr<EmbeddedWorkerInstanceClientImpl> embedded_worker) |
| + std::unique_ptr<EmbeddedWorkerInstanceClientImpl> embedded_worker_client) |
| : embedded_worker_id_(embedded_worker_id), |
| service_worker_version_id_(service_worker_version_id), |
| service_worker_scope_(service_worker_scope), |
| @@ -232,7 +234,7 @@ ServiceWorkerContextClient::ServiceWorkerContextClient( |
| sender_(ChildThreadImpl::current()->thread_safe_sender()), |
| main_thread_task_runner_(base::ThreadTaskRunnerHandle::Get()), |
| proxy_(nullptr), |
| - embedded_worker_(std::move(embedded_worker)) { |
| + embedded_worker_client_(std::move(embedded_worker_client)) { |
| TRACE_EVENT_ASYNC_BEGIN0("ServiceWorker", |
| "ServiceWorkerContextClient::StartingWorkerContext", |
| this); |
| @@ -287,7 +289,6 @@ void ServiceWorkerContextClient::BindInterfaceProviders( |
| shell::mojom::InterfaceProviderRequest request, |
| shell::mojom::InterfaceProviderPtr remote_interfaces) { |
| context_->interface_registry.Bind(std::move(request)); |
| - context_->remote_interfaces.Bind(std::move(remote_interfaces)); |
| } |
| blink::WebURL ServiceWorkerContextClient::scope() const { |
| @@ -388,6 +389,12 @@ void ServiceWorkerContextClient::workerContextStarted( |
| // Register Mojo interfaces. |
| context_->interface_registry.AddInterface( |
| base::Bind(&BackgroundSyncClientImpl::Create)); |
| + if (embedded_worker_client_) { |
| + embedded_worker_client_->GetInterfaceOnMainThread( |
| + GetProxy(&context_->embedded_worker_host), |
| + base::Bind(&ServiceWorkerContextClient::OnDidGetEmbeddedWorkerInstance, |
| + GetWeakPtr())); |
| + } |
| SetRegistrationInServiceWorkerGlobalScope(registration_info, version_attrs); |
| @@ -445,11 +452,11 @@ void ServiceWorkerContextClient::workerContextDestroyed() { |
| DCHECK(g_worker_client_tls.Pointer()->Get() == NULL); |
| // Check if mojo is enabled |
| - if (embedded_worker_) { |
| + if (embedded_worker_client_) { |
| main_thread_task_runner_->PostTask( |
| FROM_HERE, |
| base::Bind(&EmbeddedWorkerInstanceClientImpl::StopWorkerCompleted, |
| - base::Passed(std::move(embedded_worker_)))); |
| + base::Passed(std::move(embedded_worker_client_)))); |
| return; |
| } |
| @@ -1068,6 +1075,13 @@ void ServiceWorkerContextClient::OnPing() { |
| Send(new ServiceWorkerHostMsg_Pong(GetRoutingID())); |
| } |
| +void ServiceWorkerContextClient::OnDidGetEmbeddedWorkerInstance() { |
|
nhiroki
2016/09/06 01:38:05
DCHECK(worker_task_runner_->RunsTasksOnCurrentThre
shimazu
2016/09/21 07:00:51
Done.
|
| + shell::mojom::InterfaceProviderPtr interfaces; |
| + context_->interface_registry.Bind(GetProxy(&interfaces)); |
| + context_->embedded_worker_host->AttachClientInterfaceProvider( |
| + std::move(interfaces)); |
| +} |
| + |
| base::WeakPtr<ServiceWorkerContextClient> |
| ServiceWorkerContextClient::GetWeakPtr() { |
| DCHECK(worker_task_runner_->RunsTasksOnCurrentThread()); |