| OLD | NEW |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 |
| OLD | NEW |