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()); |