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

Side by Side 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 unified diff | 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 »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/renderer/service_worker/service_worker_context_client.h" 5 #include "content/renderer/service_worker/service_worker_context_client.h"
6 6
7 #include "base/lazy_instance.h" 7 #include "base/lazy_instance.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "base/metrics/histogram.h" 9 #include "base/metrics/histogram.h"
10 #include "base/strings/utf_string_conversions.h" 10 #include "base/strings/utf_string_conversions.h"
(...skipping 232 matching lines...) Expand 10 before | Expand all | Expand 10 after
243 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_ActivateEvent, OnActivateEvent) 243 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_ActivateEvent, OnActivateEvent)
244 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_FetchEvent, OnFetchEvent) 244 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_FetchEvent, OnFetchEvent)
245 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_InstallEvent, OnInstallEvent) 245 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_InstallEvent, OnInstallEvent)
246 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_SyncEvent, OnSyncEvent) 246 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_SyncEvent, OnSyncEvent)
247 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_NotificationClickEvent, 247 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_NotificationClickEvent,
248 OnNotificationClickEvent) 248 OnNotificationClickEvent)
249 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_PushEvent, OnPushEvent) 249 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_PushEvent, OnPushEvent)
250 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_GeofencingEvent, OnGeofencingEvent) 250 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_GeofencingEvent, OnGeofencingEvent)
251 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_CrossOriginConnectEvent, 251 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_CrossOriginConnectEvent,
252 OnCrossOriginConnectEvent) 252 OnCrossOriginConnectEvent)
253 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_MessageToWorker, OnPostMessage) 253 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_ClientMessageEvent,
254 OnClientMessageEvent)
255 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_WorkerMessageEvent,
256 OnWorkerMessageEvent)
254 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_CrossOriginMessageToWorker, 257 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_CrossOriginMessageToWorker,
255 OnCrossOriginMessageToWorker) 258 OnCrossOriginMessageToWorker)
256 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_SendStashedMessagePorts, 259 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_SendStashedMessagePorts,
257 OnSendStashedMessagePorts) 260 OnSendStashedMessagePorts)
258 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_DidGetClients, OnDidGetClients) 261 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_DidGetClients, OnDidGetClients)
259 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_OpenWindowResponse, 262 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_OpenWindowResponse,
260 OnOpenWindowResponse) 263 OnOpenWindowResponse)
261 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_OpenWindowError, 264 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_OpenWindowError,
262 OnOpenWindowError) 265 OnOpenWindowError)
263 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_FocusClientResponse, 266 IPC_MESSAGE_HANDLER(ServiceWorkerMsg_FocusClientResponse,
(...skipping 261 matching lines...) Expand 10 before | Expand all | Expand 10 after
525 result)); 528 result));
526 } 529 }
527 530
528 void ServiceWorkerContextClient::didHandleCrossOriginConnectEvent( 531 void ServiceWorkerContextClient::didHandleCrossOriginConnectEvent(
529 int request_id, 532 int request_id,
530 bool accept_connection) { 533 bool accept_connection) {
531 Send(new ServiceWorkerHostMsg_CrossOriginConnectEventFinished( 534 Send(new ServiceWorkerHostMsg_CrossOriginConnectEventFinished(
532 GetRoutingID(), request_id, accept_connection)); 535 GetRoutingID(), request_id, accept_connection));
533 } 536 }
534 537
538 void ServiceWorkerContextClient::didHandleMessageEvent(
539 int request_id,
540 blink::WebServiceWorkerEventResult result) {
541 Send(new ServiceWorkerHostMsg_MessageEventFinished(GetRoutingID(),
542 request_id));
543 }
544
535 blink::WebServiceWorkerNetworkProvider* 545 blink::WebServiceWorkerNetworkProvider*
536 ServiceWorkerContextClient::createServiceWorkerNetworkProvider( 546 ServiceWorkerContextClient::createServiceWorkerNetworkProvider(
537 blink::WebDataSource* data_source) { 547 blink::WebDataSource* data_source) {
538 DCHECK(main_thread_task_runner_->RunsTasksOnCurrentThread()); 548 DCHECK(main_thread_task_runner_->RunsTasksOnCurrentThread());
539 549
540 // Create a content::ServiceWorkerNetworkProvider for this data source so 550 // Create a content::ServiceWorkerNetworkProvider for this data source so
541 // we can observe its requests. 551 // we can observe its requests.
542 scoped_ptr<ServiceWorkerNetworkProvider> provider( 552 scoped_ptr<ServiceWorkerNetworkProvider> provider(
543 new ServiceWorkerNetworkProvider( 553 new ServiceWorkerNetworkProvider(
544 MSG_ROUTING_NONE, SERVICE_WORKER_PROVIDER_FOR_CONTROLLER)); 554 MSG_ROUTING_NONE, SERVICE_WORKER_PROVIDER_FOR_CONTROLLER));
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after
666 if (!found) 676 if (!found)
667 return; // Cannot be associated with a registration in some tests. 677 return; // Cannot be associated with a registration in some tests.
668 678
669 ServiceWorkerDispatcher* dispatcher = 679 ServiceWorkerDispatcher* dispatcher =
670 ServiceWorkerDispatcher::GetOrCreateThreadSpecificInstance(sender_.get()); 680 ServiceWorkerDispatcher::GetOrCreateThreadSpecificInstance(sender_.get());
671 681
672 // Register a registration and its version attributes with the dispatcher 682 // Register a registration and its version attributes with the dispatcher
673 // living on the worker thread. 683 // living on the worker thread.
674 scoped_ptr<WebServiceWorkerRegistrationImpl> registration( 684 scoped_ptr<WebServiceWorkerRegistrationImpl> registration(
675 dispatcher->CreateServiceWorkerRegistration(info, false)); 685 dispatcher->CreateServiceWorkerRegistration(info, false));
686 int provider_id = provider_context_->provider_id();
676 registration->SetInstalling( 687 registration->SetInstalling(
677 dispatcher->GetServiceWorker(attrs.installing, false)); 688 dispatcher->GetServiceWorker(attrs.installing, provider_id, false));
678 registration->SetWaiting( 689 registration->SetWaiting(
679 dispatcher->GetServiceWorker(attrs.waiting, false)); 690 dispatcher->GetServiceWorker(attrs.waiting, provider_id, false));
680 registration->SetActive( 691 registration->SetActive(
681 dispatcher->GetServiceWorker(attrs.active, false)); 692 dispatcher->GetServiceWorker(attrs.active, provider_id, false));
682 693
683 proxy_->setRegistration(registration.release()); 694 proxy_->setRegistration(registration.release());
684 } 695 }
685 696
686 void ServiceWorkerContextClient::OnActivateEvent(int request_id) { 697 void ServiceWorkerContextClient::OnActivateEvent(int request_id) {
687 TRACE_EVENT0("ServiceWorker", 698 TRACE_EVENT0("ServiceWorker",
688 "ServiceWorkerContextClient::OnActivateEvent"); 699 "ServiceWorkerContextClient::OnActivateEvent");
689 activate_start_timings_[request_id] = base::TimeTicks::Now(); 700 activate_start_timings_[request_id] = base::TimeTicks::Now();
690 proxy_->dispatchActivateEvent(request_id); 701 proxy_->dispatchActivateEvent(request_id);
691 } 702 }
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
774 const NavigatorConnectClient& client) { 785 const NavigatorConnectClient& client) {
775 TRACE_EVENT0("ServiceWorker", 786 TRACE_EVENT0("ServiceWorker",
776 "ServiceWorkerContextClient::OnCrossOriginConnectEvent"); 787 "ServiceWorkerContextClient::OnCrossOriginConnectEvent");
777 blink::WebCrossOriginServiceWorkerClient web_client; 788 blink::WebCrossOriginServiceWorkerClient web_client;
778 web_client.origin = client.origin; 789 web_client.origin = client.origin;
779 web_client.targetURL = client.target_url; 790 web_client.targetURL = client.target_url;
780 web_client.clientID = client.message_port_id; 791 web_client.clientID = client.message_port_id;
781 proxy_->dispatchCrossOriginConnectEvent(request_id, web_client); 792 proxy_->dispatchCrossOriginConnectEvent(request_id, web_client);
782 } 793 }
783 794
784 void ServiceWorkerContextClient::OnPostMessage( 795 void ServiceWorkerContextClient::OnClientMessageEvent(
796 int request_id,
797 const ServiceWorkerClientInfo& client,
785 const base::string16& message, 798 const base::string16& message,
786 const std::vector<TransferredMessagePort>& sent_message_ports, 799 const std::vector<TransferredMessagePort>& sent_message_ports,
787 const std::vector<int>& new_routing_ids) { 800 const std::vector<int>& new_routing_ids) {
788 TRACE_EVENT0("ServiceWorker", 801 TRACE_EVENT0("ServiceWorker",
789 "ServiceWorkerContextClient::OnPostEvent"); 802 "ServiceWorkerContextClient::OnClientMessageEvent");
790 blink::WebMessagePortChannelArray ports = 803 blink::WebMessagePortChannelArray ports =
791 WebMessagePortChannelImpl::CreatePorts( 804 WebMessagePortChannelImpl::CreatePorts(
792 sent_message_ports, new_routing_ids, 805 sent_message_ports, new_routing_ids,
793 main_thread_task_runner_); 806 main_thread_task_runner_);
794 807
795 // dispatchMessageEvent is expected to execute onmessage function 808 // dispatchMessageEvent is expected to execute onmessage function
796 // synchronously. 809 // synchronously.
797 base::TimeTicks before = base::TimeTicks::Now(); 810 base::TimeTicks before = base::TimeTicks::Now();
798 proxy_->dispatchMessageEvent(message, ports); 811 blink::WebServiceWorkerClientInfo web_client =
799 UMA_HISTOGRAM_MEDIUM_TIMES( 812 ToWebServiceWorkerClientInfo(client);
800 "ServiceWorker.MessageEvent.Time", 813 proxy_->dispatchMessageEvent(request_id, web_client, message, ports);
801 base::TimeTicks::Now() - before); 814 UMA_HISTOGRAM_MEDIUM_TIMES("ServiceWorker.MessageEvent.Time",
815 base::TimeTicks::Now() - before);
816 }
817
818 void ServiceWorkerContextClient::OnWorkerMessageEvent(
819 int request_id,
820 const ServiceWorkerObjectInfo& worker,
821 const base::string16& message,
822 const std::vector<TransferredMessagePort>& sent_message_ports,
823 const std::vector<int>& new_routing_ids) {
824 TRACE_EVENT0("ServiceWorker",
825 "ServiceWorkerContextClient::OnWorkerMessageEvent");
826 blink::WebMessagePortChannelArray ports =
827 WebMessagePortChannelImpl::CreatePorts(
828 sent_message_ports, new_routing_ids, main_thread_task_runner_);
829
830 // dispatchMessageEvent is expected to execute onmessage function
831 // synchronously.
832 base::TimeTicks before = base::TimeTicks::Now();
833 ServiceWorkerDispatcher* dispatcher =
834 ServiceWorkerDispatcher::GetOrCreateThreadSpecificInstance(sender_.get());
835 blink::WebServiceWorker* service_worker = dispatcher->GetServiceWorker(
836 worker, provider_context_->provider_id(), false);
837 proxy_->dispatchMessageEvent(request_id, service_worker, message, ports);
838 UMA_HISTOGRAM_MEDIUM_TIMES("ServiceWorker.MessageEvent.Time",
839 base::TimeTicks::Now() - before);
802 } 840 }
803 841
804 void ServiceWorkerContextClient::OnCrossOriginMessageToWorker( 842 void ServiceWorkerContextClient::OnCrossOriginMessageToWorker(
805 const NavigatorConnectClient& client, 843 const NavigatorConnectClient& client,
806 const base::string16& message, 844 const base::string16& message,
807 const std::vector<TransferredMessagePort>& sent_message_ports, 845 const std::vector<TransferredMessagePort>& sent_message_ports,
808 const std::vector<int>& new_routing_ids) { 846 const std::vector<int>& new_routing_ids) {
809 TRACE_EVENT0("ServiceWorker", 847 TRACE_EVENT0("ServiceWorker",
810 "ServiceWorkerContextClient::OnCrossOriginMessageToWorker"); 848 "ServiceWorkerContextClient::OnCrossOriginMessageToWorker");
811 blink::WebMessagePortChannelArray ports = 849 blink::WebMessagePortChannelArray ports =
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after
971 } 1009 }
972 1010
973 base::WeakPtr<ServiceWorkerContextClient> 1011 base::WeakPtr<ServiceWorkerContextClient>
974 ServiceWorkerContextClient::GetWeakPtr() { 1012 ServiceWorkerContextClient::GetWeakPtr() {
975 DCHECK(worker_task_runner_->RunsTasksOnCurrentThread()); 1013 DCHECK(worker_task_runner_->RunsTasksOnCurrentThread());
976 DCHECK(context_); 1014 DCHECK(context_);
977 return context_->weak_factory.GetWeakPtr(); 1015 return context_->weak_factory.GetWeakPtr();
978 } 1016 }
979 1017
980 } // namespace content 1018 } // namespace content
OLDNEW
« 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