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 <utility> | 7 #include <utility> |
8 | 8 |
9 #include "base/logging.h" | 9 #include "base/logging.h" |
10 #include "base/macros.h" | 10 #include "base/macros.h" |
(...skipping 565 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
576 if (!GetContentClient()->browser()->AllowServiceWorker( | 576 if (!GetContentClient()->browser()->AllowServiceWorker( |
577 provider_host->document_url(), provider_host->topmost_frame_url(), | 577 provider_host->document_url(), provider_host->topmost_frame_url(), |
578 resource_context_, render_process_id_, provider_host->frame_id())) { | 578 resource_context_, render_process_id_, provider_host->frame_id())) { |
579 Send(new ServiceWorkerMsg_ServiceWorkerGetRegistrationError( | 579 Send(new ServiceWorkerMsg_ServiceWorkerGetRegistrationError( |
580 thread_id, request_id, WebServiceWorkerError::ErrorTypeUnknown, | 580 thread_id, request_id, WebServiceWorkerError::ErrorTypeUnknown, |
581 base::ASCIIToUTF16(kServiceWorkerGetRegistrationErrorPrefix) + | 581 base::ASCIIToUTF16(kServiceWorkerGetRegistrationErrorPrefix) + |
582 base::ASCIIToUTF16(kUserDeniedPermissionMessage))); | 582 base::ASCIIToUTF16(kUserDeniedPermissionMessage))); |
583 return; | 583 return; |
584 } | 584 } |
585 | 585 |
586 if (GetContext()->storage()->IsDisabled()) { | |
587 SendGetRegistrationError(thread_id, request_id, SERVICE_WORKER_ERROR_ABORT); | |
588 return; | |
589 } | |
590 | |
591 TRACE_EVENT_ASYNC_BEGIN1( | 586 TRACE_EVENT_ASYNC_BEGIN1( |
592 "ServiceWorker", | 587 "ServiceWorker", |
593 "ServiceWorkerDispatcherHost::GetRegistration", | 588 "ServiceWorkerDispatcherHost::GetRegistration", |
594 request_id, | 589 request_id, |
595 "Document URL", document_url.spec()); | 590 "Document URL", document_url.spec()); |
596 | 591 |
597 GetContext()->storage()->FindRegistrationForDocument( | 592 GetContext()->storage()->FindRegistrationForDocument( |
598 document_url, | 593 document_url, |
599 base::Bind(&ServiceWorkerDispatcherHost::GetRegistrationComplete, | 594 base::Bind(&ServiceWorkerDispatcherHost::GetRegistrationComplete, |
600 this, | 595 this, |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
649 if (!GetContentClient()->browser()->AllowServiceWorker( | 644 if (!GetContentClient()->browser()->AllowServiceWorker( |
650 provider_host->document_url(), provider_host->topmost_frame_url(), | 645 provider_host->document_url(), provider_host->topmost_frame_url(), |
651 resource_context_, render_process_id_, provider_host->frame_id())) { | 646 resource_context_, render_process_id_, provider_host->frame_id())) { |
652 Send(new ServiceWorkerMsg_ServiceWorkerGetRegistrationsError( | 647 Send(new ServiceWorkerMsg_ServiceWorkerGetRegistrationsError( |
653 thread_id, request_id, WebServiceWorkerError::ErrorTypeUnknown, | 648 thread_id, request_id, WebServiceWorkerError::ErrorTypeUnknown, |
654 base::ASCIIToUTF16(kServiceWorkerGetRegistrationsErrorPrefix) + | 649 base::ASCIIToUTF16(kServiceWorkerGetRegistrationsErrorPrefix) + |
655 base::ASCIIToUTF16(kUserDeniedPermissionMessage))); | 650 base::ASCIIToUTF16(kUserDeniedPermissionMessage))); |
656 return; | 651 return; |
657 } | 652 } |
658 | 653 |
659 if (GetContext()->storage()->IsDisabled()) { | |
660 SendGetRegistrationsError(thread_id, request_id, | |
661 SERVICE_WORKER_ERROR_ABORT); | |
662 return; | |
663 } | |
664 | |
665 TRACE_EVENT_ASYNC_BEGIN0("ServiceWorker", | 654 TRACE_EVENT_ASYNC_BEGIN0("ServiceWorker", |
666 "ServiceWorkerDispatcherHost::GetRegistrations", | 655 "ServiceWorkerDispatcherHost::GetRegistrations", |
667 request_id); | 656 request_id); |
668 | 657 |
669 GetContext()->storage()->GetRegistrationsForOrigin( | 658 GetContext()->storage()->GetRegistrationsForOrigin( |
670 provider_host->document_url().GetOrigin(), | 659 provider_host->document_url().GetOrigin(), |
671 base::Bind(&ServiceWorkerDispatcherHost::GetRegistrationsComplete, this, | 660 base::Bind(&ServiceWorkerDispatcherHost::GetRegistrationsComplete, this, |
672 thread_id, provider_id, request_id)); | 661 thread_id, provider_id, request_id)); |
673 } | 662 } |
674 | 663 |
(...skipping 532 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1207 } | 1196 } |
1208 | 1197 |
1209 Send(new ServiceWorkerMsg_DidGetRegistration( | 1198 Send(new ServiceWorkerMsg_DidGetRegistration( |
1210 thread_id, request_id, info, attrs)); | 1199 thread_id, request_id, info, attrs)); |
1211 } | 1200 } |
1212 | 1201 |
1213 void ServiceWorkerDispatcherHost::GetRegistrationsComplete( | 1202 void ServiceWorkerDispatcherHost::GetRegistrationsComplete( |
1214 int thread_id, | 1203 int thread_id, |
1215 int provider_id, | 1204 int provider_id, |
1216 int request_id, | 1205 int request_id, |
| 1206 ServiceWorkerStatusCode status, |
1217 const std::vector<scoped_refptr<ServiceWorkerRegistration>>& | 1207 const std::vector<scoped_refptr<ServiceWorkerRegistration>>& |
1218 registrations) { | 1208 registrations) { |
1219 TRACE_EVENT_ASYNC_END0("ServiceWorker", | 1209 TRACE_EVENT_ASYNC_END0("ServiceWorker", |
1220 "ServiceWorkerDispatcherHost::GetRegistrations", | 1210 "ServiceWorkerDispatcherHost::GetRegistrations", |
1221 request_id); | 1211 request_id); |
1222 if (!GetContext()) | 1212 if (!GetContext()) |
1223 return; | 1213 return; |
1224 | 1214 |
1225 ServiceWorkerProviderHost* provider_host = | 1215 ServiceWorkerProviderHost* provider_host = |
1226 GetContext()->GetProviderHost(render_process_id_, provider_id); | 1216 GetContext()->GetProviderHost(render_process_id_, provider_id); |
1227 if (!provider_host) | 1217 if (!provider_host) |
1228 return; // The provider has already been destroyed. | 1218 return; // The provider has already been destroyed. |
1229 | 1219 |
| 1220 if (status != SERVICE_WORKER_OK) { |
| 1221 SendGetRegistrationsError(thread_id, request_id, status); |
| 1222 return; |
| 1223 } |
| 1224 |
1230 std::vector<ServiceWorkerRegistrationObjectInfo> object_infos; | 1225 std::vector<ServiceWorkerRegistrationObjectInfo> object_infos; |
1231 std::vector<ServiceWorkerVersionAttributes> version_attrs; | 1226 std::vector<ServiceWorkerVersionAttributes> version_attrs; |
1232 | 1227 |
1233 for (const auto& registration : registrations) { | 1228 for (const auto& registration : registrations) { |
1234 DCHECK(registration.get()); | 1229 DCHECK(registration.get()); |
1235 if (!registration->is_uninstalling()) { | 1230 if (!registration->is_uninstalling()) { |
1236 ServiceWorkerRegistrationObjectInfo object_info; | 1231 ServiceWorkerRegistrationObjectInfo object_info; |
1237 ServiceWorkerVersionAttributes version_attr; | 1232 ServiceWorkerVersionAttributes version_attr; |
1238 GetRegistrationObjectInfoAndVersionAttributes( | 1233 GetRegistrationObjectInfoAndVersionAttributes( |
1239 provider_host->AsWeakPtr(), registration.get(), &object_info, | 1234 provider_host->AsWeakPtr(), registration.get(), &object_info, |
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1351 if (!handle) { | 1346 if (!handle) { |
1352 bad_message::ReceivedBadMessage(this, | 1347 bad_message::ReceivedBadMessage(this, |
1353 bad_message::SWDH_TERMINATE_BAD_HANDLE); | 1348 bad_message::SWDH_TERMINATE_BAD_HANDLE); |
1354 return; | 1349 return; |
1355 } | 1350 } |
1356 handle->version()->StopWorker( | 1351 handle->version()->StopWorker( |
1357 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback)); | 1352 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback)); |
1358 } | 1353 } |
1359 | 1354 |
1360 } // namespace content | 1355 } // namespace content |
OLD | NEW |