Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(656)

Unified Diff: content/renderer/service_worker/service_worker_context_client.cc

Issue 1235803003: ServiceWorker: Introduce ExtendableMessageEvent to replace MessageEvent Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « content/renderer/service_worker/service_worker_context_client.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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(
« no previous file with comments | « content/renderer/service_worker/service_worker_context_client.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698