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