OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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/browser/service_worker/service_worker_dispatcher_host.h" | 5 #include "content/browser/service_worker/service_worker_dispatcher_host.h" |
6 | 6 |
7 #include "base/logging.h" | 7 #include "base/logging.h" |
8 #include "base/profiler/scoped_tracker.h" | 8 #include "base/profiler/scoped_tracker.h" |
9 #include "base/strings/utf_string_conversions.h" | 9 #include "base/strings/utf_string_conversions.h" |
10 #include "base/trace_event/trace_event.h" | 10 #include "base/trace_event/trace_event.h" |
(...skipping 660 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
671 if (!provider_host->GetRegistrationForReady(base::Bind( | 671 if (!provider_host->GetRegistrationForReady(base::Bind( |
672 &ServiceWorkerDispatcherHost::GetRegistrationForReadyComplete, | 672 &ServiceWorkerDispatcherHost::GetRegistrationForReadyComplete, |
673 this, thread_id, request_id, provider_host->AsWeakPtr()))) { | 673 this, thread_id, request_id, provider_host->AsWeakPtr()))) { |
674 bad_message::ReceivedBadMessage( | 674 bad_message::ReceivedBadMessage( |
675 this, bad_message::SWDH_GET_REGISTRATION_FOR_READY_ALREADY_IN_PROGRESS); | 675 this, bad_message::SWDH_GET_REGISTRATION_FOR_READY_ALREADY_IN_PROGRESS); |
676 } | 676 } |
677 } | 677 } |
678 | 678 |
679 void ServiceWorkerDispatcherHost::OnPostMessageToWorker( | 679 void ServiceWorkerDispatcherHost::OnPostMessageToWorker( |
680 int handle_id, | 680 int handle_id, |
| 681 int provider_id, |
681 const base::string16& message, | 682 const base::string16& message, |
682 const std::vector<TransferredMessagePort>& sent_message_ports) { | 683 const std::vector<TransferredMessagePort>& sent_message_ports) { |
683 TRACE_EVENT0("ServiceWorker", | 684 TRACE_EVENT0("ServiceWorker", |
684 "ServiceWorkerDispatcherHost::OnPostMessageToWorker"); | 685 "ServiceWorkerDispatcherHost::OnPostMessageToWorker"); |
685 if (!GetContext()) | 686 if (!GetContext()) |
686 return; | 687 return; |
687 | 688 |
688 ServiceWorkerHandle* handle = handles_.Lookup(handle_id); | 689 ServiceWorkerHandle* handle = handles_.Lookup(handle_id); |
689 if (!handle) { | 690 if (!handle) { |
690 bad_message::ReceivedBadMessage(this, bad_message::SWDH_POST_MESSAGE); | 691 bad_message::ReceivedBadMessage(this, bad_message::SWDH_POST_MESSAGE); |
691 return; | 692 return; |
692 } | 693 } |
693 | 694 ServiceWorkerProviderHost* provider_host = |
| 695 GetContext()->GetProviderHost(render_process_id_, provider_id); |
| 696 if (!provider_host) { |
| 697 bad_message::ReceivedBadMessage(this, bad_message::SWDH_POST_MESSAGE); |
| 698 return; |
| 699 } |
694 handle->version()->DispatchMessageEvent( | 700 handle->version()->DispatchMessageEvent( |
695 message, sent_message_ports, | 701 provider_host, message, sent_message_ports, |
696 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback)); | 702 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback)); |
697 } | 703 } |
698 | 704 |
699 void ServiceWorkerDispatcherHost::OnProviderCreated( | 705 void ServiceWorkerDispatcherHost::OnProviderCreated( |
700 int provider_id, | 706 int provider_id, |
701 int route_id, | 707 int route_id, |
702 ServiceWorkerProviderType provider_type) { | 708 ServiceWorkerProviderType provider_type) { |
703 // TODO(pkasting): Remove ScopedTracker below once crbug.com/477117 is fixed. | 709 // TODO(pkasting): Remove ScopedTracker below once crbug.com/477117 is fixed. |
704 tracked_objects::ScopedTracker tracking_profile( | 710 tracked_objects::ScopedTracker tracking_profile( |
705 FROM_HERE_WITH_EXPLICIT_FUNCTION( | 711 FROM_HERE_WITH_EXPLICIT_FUNCTION( |
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
834 | 840 |
835 ServiceWorkerRegistration* registration = | 841 ServiceWorkerRegistration* registration = |
836 GetContext()->GetLiveRegistration(registration_id); | 842 GetContext()->GetLiveRegistration(registration_id); |
837 DCHECK(registration); | 843 DCHECK(registration); |
838 | 844 |
839 ServiceWorkerRegistrationObjectInfo info; | 845 ServiceWorkerRegistrationObjectInfo info; |
840 ServiceWorkerVersionAttributes attrs; | 846 ServiceWorkerVersionAttributes attrs; |
841 GetRegistrationObjectInfoAndVersionAttributes( | 847 GetRegistrationObjectInfoAndVersionAttributes( |
842 provider_host->AsWeakPtr(), registration, &info, &attrs); | 848 provider_host->AsWeakPtr(), registration, &info, &attrs); |
843 | 849 |
844 Send(new ServiceWorkerMsg_ServiceWorkerRegistered( | 850 Send(new ServiceWorkerMsg_ServiceWorkerRegistered(thread_id, request_id, |
845 thread_id, request_id, info, attrs)); | 851 provider_id, info, attrs)); |
846 TRACE_EVENT_ASYNC_END1("ServiceWorker", | 852 TRACE_EVENT_ASYNC_END1("ServiceWorker", |
847 "ServiceWorkerDispatcherHost::RegisterServiceWorker", | 853 "ServiceWorkerDispatcherHost::RegisterServiceWorker", |
848 request_id, | 854 request_id, |
849 "Registration ID", | 855 "Registration ID", |
850 registration_id); | 856 registration_id); |
851 } | 857 } |
852 | 858 |
853 void ServiceWorkerDispatcherHost::OnWorkerReadyForInspection( | 859 void ServiceWorkerDispatcherHost::OnWorkerReadyForInspection( |
854 int embedded_worker_id) { | 860 int embedded_worker_id) { |
855 TRACE_EVENT0("ServiceWorker", | 861 TRACE_EVENT0("ServiceWorker", |
(...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1090 ServiceWorkerRegistrationObjectInfo info; | 1096 ServiceWorkerRegistrationObjectInfo info; |
1091 ServiceWorkerVersionAttributes attrs; | 1097 ServiceWorkerVersionAttributes attrs; |
1092 if (status == SERVICE_WORKER_OK) { | 1098 if (status == SERVICE_WORKER_OK) { |
1093 DCHECK(registration.get()); | 1099 DCHECK(registration.get()); |
1094 if (!registration->is_uninstalling()) { | 1100 if (!registration->is_uninstalling()) { |
1095 GetRegistrationObjectInfoAndVersionAttributes( | 1101 GetRegistrationObjectInfoAndVersionAttributes( |
1096 provider_host->AsWeakPtr(), registration.get(), &info, &attrs); | 1102 provider_host->AsWeakPtr(), registration.get(), &info, &attrs); |
1097 } | 1103 } |
1098 } | 1104 } |
1099 | 1105 |
1100 Send(new ServiceWorkerMsg_DidGetRegistration( | 1106 Send(new ServiceWorkerMsg_DidGetRegistration(thread_id, request_id, |
1101 thread_id, request_id, info, attrs)); | 1107 provider_id, info, attrs)); |
1102 } | 1108 } |
1103 | 1109 |
1104 void ServiceWorkerDispatcherHost::GetRegistrationsComplete( | 1110 void ServiceWorkerDispatcherHost::GetRegistrationsComplete( |
1105 int thread_id, | 1111 int thread_id, |
1106 int provider_id, | 1112 int provider_id, |
1107 int request_id, | 1113 int request_id, |
1108 const std::vector<scoped_refptr<ServiceWorkerRegistration>>& | 1114 const std::vector<scoped_refptr<ServiceWorkerRegistration>>& |
1109 registrations) { | 1115 registrations) { |
1110 TRACE_EVENT_ASYNC_END0("ServiceWorker", | 1116 TRACE_EVENT_ASYNC_END0("ServiceWorker", |
1111 "ServiceWorkerDispatcherHost::GetRegistrations", | 1117 "ServiceWorkerDispatcherHost::GetRegistrations", |
(...skipping 15 matching lines...) Expand all Loading... |
1127 ServiceWorkerRegistrationObjectInfo object_info; | 1133 ServiceWorkerRegistrationObjectInfo object_info; |
1128 ServiceWorkerVersionAttributes version_attr; | 1134 ServiceWorkerVersionAttributes version_attr; |
1129 GetRegistrationObjectInfoAndVersionAttributes( | 1135 GetRegistrationObjectInfoAndVersionAttributes( |
1130 provider_host->AsWeakPtr(), registration.get(), &object_info, | 1136 provider_host->AsWeakPtr(), registration.get(), &object_info, |
1131 &version_attr); | 1137 &version_attr); |
1132 object_infos.push_back(object_info); | 1138 object_infos.push_back(object_info); |
1133 version_attrs.push_back(version_attr); | 1139 version_attrs.push_back(version_attr); |
1134 } | 1140 } |
1135 } | 1141 } |
1136 | 1142 |
1137 Send(new ServiceWorkerMsg_DidGetRegistrations(thread_id, request_id, | 1143 Send(new ServiceWorkerMsg_DidGetRegistrations( |
1138 object_infos, version_attrs)); | 1144 thread_id, request_id, provider_id, object_infos, version_attrs)); |
1139 } | 1145 } |
1140 | 1146 |
1141 void ServiceWorkerDispatcherHost::GetRegistrationForReadyComplete( | 1147 void ServiceWorkerDispatcherHost::GetRegistrationForReadyComplete( |
1142 int thread_id, | 1148 int thread_id, |
1143 int request_id, | 1149 int request_id, |
1144 base::WeakPtr<ServiceWorkerProviderHost> provider_host, | 1150 base::WeakPtr<ServiceWorkerProviderHost> provider_host, |
1145 ServiceWorkerRegistration* registration) { | 1151 ServiceWorkerRegistration* registration) { |
1146 DCHECK(registration); | 1152 DCHECK(registration); |
1147 TRACE_EVENT_ASYNC_END1("ServiceWorker", | 1153 TRACE_EVENT_ASYNC_END1("ServiceWorker", |
1148 "ServiceWorkerDispatcherHost::GetRegistrationForReady", | 1154 "ServiceWorkerDispatcherHost::GetRegistrationForReady", |
1149 request_id, | 1155 request_id, |
1150 "Registration ID", | 1156 "Registration ID", |
1151 registration ? registration->id() | 1157 registration ? registration->id() |
1152 : kInvalidServiceWorkerRegistrationId); | 1158 : kInvalidServiceWorkerRegistrationId); |
1153 | 1159 |
1154 if (!GetContext()) | 1160 if (!GetContext()) |
1155 return; | 1161 return; |
1156 | 1162 |
1157 ServiceWorkerRegistrationObjectInfo info; | 1163 ServiceWorkerRegistrationObjectInfo info; |
1158 ServiceWorkerVersionAttributes attrs; | 1164 ServiceWorkerVersionAttributes attrs; |
1159 GetRegistrationObjectInfoAndVersionAttributes( | 1165 GetRegistrationObjectInfoAndVersionAttributes( |
1160 provider_host, registration, &info, &attrs); | 1166 provider_host, registration, &info, &attrs); |
1161 Send(new ServiceWorkerMsg_DidGetRegistrationForReady( | 1167 Send(new ServiceWorkerMsg_DidGetRegistrationForReady( |
1162 thread_id, request_id, info, attrs)); | 1168 thread_id, request_id, provider_host->provider_id(), info, attrs)); |
1163 } | 1169 } |
1164 | 1170 |
1165 void ServiceWorkerDispatcherHost::SendRegistrationError( | 1171 void ServiceWorkerDispatcherHost::SendRegistrationError( |
1166 int thread_id, | 1172 int thread_id, |
1167 int request_id, | 1173 int request_id, |
1168 ServiceWorkerStatusCode status, | 1174 ServiceWorkerStatusCode status, |
1169 const std::string& status_message) { | 1175 const std::string& status_message) { |
1170 base::string16 error_message; | 1176 base::string16 error_message; |
1171 blink::WebServiceWorkerError::ErrorType error_type; | 1177 blink::WebServiceWorkerError::ErrorType error_type; |
1172 GetServiceWorkerRegistrationStatusResponse(status, status_message, | 1178 GetServiceWorkerRegistrationStatusResponse(status, status_message, |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1228 if (!handle) { | 1234 if (!handle) { |
1229 bad_message::ReceivedBadMessage(this, | 1235 bad_message::ReceivedBadMessage(this, |
1230 bad_message::SWDH_TERMINATE_BAD_HANDLE); | 1236 bad_message::SWDH_TERMINATE_BAD_HANDLE); |
1231 return; | 1237 return; |
1232 } | 1238 } |
1233 handle->version()->StopWorker( | 1239 handle->version()->StopWorker( |
1234 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback)); | 1240 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback)); |
1235 } | 1241 } |
1236 | 1242 |
1237 } // namespace content | 1243 } // namespace content |
OLD | NEW |