| 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 93edf9847eca5c96a45939f8004dace04551a531..c541b486c830fcf5b77da50bbd890154db8bf4d6 100644
|
| --- a/content/renderer/service_worker/service_worker_context_client.cc
|
| +++ b/content/renderer/service_worker/service_worker_context_client.cc
|
| @@ -250,7 +250,10 @@ void ServiceWorkerContextClient::OnMessageReceived(
|
| IPC_MESSAGE_HANDLER(ServiceWorkerMsg_GeofencingEvent, OnGeofencingEvent)
|
| IPC_MESSAGE_HANDLER(ServiceWorkerMsg_CrossOriginConnectEvent,
|
| OnCrossOriginConnectEvent)
|
| - IPC_MESSAGE_HANDLER(ServiceWorkerMsg_MessageToWorker, OnPostMessage)
|
| + IPC_MESSAGE_HANDLER(ServiceWorkerMsg_ClientMessageEvent,
|
| + OnClientMessageEvent)
|
| + IPC_MESSAGE_HANDLER(ServiceWorkerMsg_WorkerMessageEvent,
|
| + OnWorkerMessageEvent)
|
| IPC_MESSAGE_HANDLER(ServiceWorkerMsg_CrossOriginMessageToWorker,
|
| OnCrossOriginMessageToWorker)
|
| IPC_MESSAGE_HANDLER(ServiceWorkerMsg_SendStashedMessagePorts,
|
| @@ -532,6 +535,13 @@ void ServiceWorkerContextClient::didHandleCrossOriginConnectEvent(
|
| GetRoutingID(), request_id, accept_connection));
|
| }
|
|
|
| +void ServiceWorkerContextClient::didHandleMessageEvent(
|
| + int request_id,
|
| + blink::WebServiceWorkerEventResult result) {
|
| + Send(new ServiceWorkerHostMsg_MessageEventFinished(GetRoutingID(),
|
| + request_id));
|
| +}
|
| +
|
| blink::WebServiceWorkerNetworkProvider*
|
| ServiceWorkerContextClient::createServiceWorkerNetworkProvider(
|
| blink::WebDataSource* data_source) {
|
| @@ -673,12 +683,13 @@ void ServiceWorkerContextClient::SetRegistrationInServiceWorkerGlobalScope() {
|
| // living on the worker thread.
|
| scoped_ptr<WebServiceWorkerRegistrationImpl> registration(
|
| dispatcher->CreateServiceWorkerRegistration(info, false));
|
| + int provider_id = provider_context_->provider_id();
|
| registration->SetInstalling(
|
| - dispatcher->GetServiceWorker(attrs.installing, false));
|
| + dispatcher->GetServiceWorker(attrs.installing, provider_id, false));
|
| registration->SetWaiting(
|
| - dispatcher->GetServiceWorker(attrs.waiting, false));
|
| + dispatcher->GetServiceWorker(attrs.waiting, provider_id, false));
|
| registration->SetActive(
|
| - dispatcher->GetServiceWorker(attrs.active, false));
|
| + dispatcher->GetServiceWorker(attrs.active, provider_id, false));
|
|
|
| proxy_->setRegistration(registration.release());
|
| }
|
| @@ -781,12 +792,14 @@ void ServiceWorkerContextClient::OnCrossOriginConnectEvent(
|
| proxy_->dispatchCrossOriginConnectEvent(request_id, web_client);
|
| }
|
|
|
| -void ServiceWorkerContextClient::OnPostMessage(
|
| +void ServiceWorkerContextClient::OnClientMessageEvent(
|
| + int request_id,
|
| + const ServiceWorkerClientInfo& client,
|
| const base::string16& message,
|
| const std::vector<TransferredMessagePort>& sent_message_ports,
|
| const std::vector<int>& new_routing_ids) {
|
| TRACE_EVENT0("ServiceWorker",
|
| - "ServiceWorkerContextClient::OnPostEvent");
|
| + "ServiceWorkerContextClient::OnClientMessageEvent");
|
| blink::WebMessagePortChannelArray ports =
|
| WebMessagePortChannelImpl::CreatePorts(
|
| sent_message_ports, new_routing_ids,
|
| @@ -795,10 +808,35 @@ void ServiceWorkerContextClient::OnPostMessage(
|
| // dispatchMessageEvent is expected to execute onmessage function
|
| // synchronously.
|
| base::TimeTicks before = base::TimeTicks::Now();
|
| - proxy_->dispatchMessageEvent(message, ports);
|
| - UMA_HISTOGRAM_MEDIUM_TIMES(
|
| - "ServiceWorker.MessageEvent.Time",
|
| - base::TimeTicks::Now() - before);
|
| + blink::WebServiceWorkerClientInfo web_client =
|
| + ToWebServiceWorkerClientInfo(client);
|
| + proxy_->dispatchMessageEvent(request_id, web_client, message, ports);
|
| + UMA_HISTOGRAM_MEDIUM_TIMES("ServiceWorker.MessageEvent.Time",
|
| + base::TimeTicks::Now() - before);
|
| +}
|
| +
|
| +void ServiceWorkerContextClient::OnWorkerMessageEvent(
|
| + int request_id,
|
| + const ServiceWorkerObjectInfo& worker,
|
| + const base::string16& message,
|
| + const std::vector<TransferredMessagePort>& sent_message_ports,
|
| + const std::vector<int>& new_routing_ids) {
|
| + TRACE_EVENT0("ServiceWorker",
|
| + "ServiceWorkerContextClient::OnWorkerMessageEvent");
|
| + blink::WebMessagePortChannelArray ports =
|
| + WebMessagePortChannelImpl::CreatePorts(
|
| + sent_message_ports, new_routing_ids, main_thread_task_runner_);
|
| +
|
| + // dispatchMessageEvent is expected to execute onmessage function
|
| + // synchronously.
|
| + base::TimeTicks before = base::TimeTicks::Now();
|
| + ServiceWorkerDispatcher* dispatcher =
|
| + ServiceWorkerDispatcher::GetOrCreateThreadSpecificInstance(sender_.get());
|
| + blink::WebServiceWorker* service_worker = dispatcher->GetServiceWorker(
|
| + worker, provider_context_->provider_id(), false);
|
| + proxy_->dispatchMessageEvent(request_id, service_worker, message, ports);
|
| + UMA_HISTOGRAM_MEDIUM_TIMES("ServiceWorker.MessageEvent.Time",
|
| + base::TimeTicks::Now() - before);
|
| }
|
|
|
| void ServiceWorkerContextClient::OnCrossOriginMessageToWorker(
|
|
|