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/debug/crash_logging.h" | 9 #include "base/debug/crash_logging.h" |
10 #include "base/logging.h" | 10 #include "base/logging.h" |
(...skipping 1022 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1033 if (ServiceWorkerUtils::IsBrowserAssignedProviderId(info.provider_id)) { | 1033 if (ServiceWorkerUtils::IsBrowserAssignedProviderId(info.provider_id)) { |
1034 bad_message::ReceivedBadMessage( | 1034 bad_message::ReceivedBadMessage( |
1035 this, bad_message::SWDH_PROVIDER_CREATED_NO_HOST); | 1035 this, bad_message::SWDH_PROVIDER_CREATED_NO_HOST); |
1036 return; | 1036 return; |
1037 } | 1037 } |
1038 GetContext()->AddProviderHost(ServiceWorkerProviderHost::Create( | 1038 GetContext()->AddProviderHost(ServiceWorkerProviderHost::Create( |
1039 render_process_id_, std::move(info), GetContext()->AsWeakPtr(), this)); | 1039 render_process_id_, std::move(info), GetContext()->AsWeakPtr(), this)); |
1040 } | 1040 } |
1041 } | 1041 } |
1042 | 1042 |
1043 void ServiceWorkerDispatcherHost::OnProviderDestroyed(int provider_id) { | |
1044 TRACE_EVENT0("ServiceWorker", | |
1045 "ServiceWorkerDispatcherHost::OnProviderDestroyed"); | |
1046 if (!GetContext()) | |
1047 return; | |
1048 if (!GetContext()->GetProviderHost(render_process_id_, provider_id)) { | |
1049 // PlzNavigate: in some cancellation of navigation cases, it is possible | |
1050 // for the pre-created hoist to have been destroyed before being claimed by | |
1051 // the renderer. The provider is then destroyed in the renderer, and no | |
1052 // matching host will be found. | |
1053 if (!IsBrowserSideNavigationEnabled() || | |
1054 !ServiceWorkerUtils::IsBrowserAssignedProviderId(provider_id)) { | |
1055 bad_message::ReceivedBadMessage( | |
1056 this, bad_message::SWDH_PROVIDER_DESTROYED_NO_HOST); | |
1057 } | |
1058 return; | |
1059 } | |
1060 GetContext()->RemoveProviderHost(render_process_id_, provider_id); | |
1061 } | |
1062 | |
1063 void ServiceWorkerDispatcherHost::OnSetHostedVersionId(int provider_id, | 1043 void ServiceWorkerDispatcherHost::OnSetHostedVersionId(int provider_id, |
1064 int64_t version_id, | 1044 int64_t version_id, |
1065 int embedded_worker_id) { | 1045 int embedded_worker_id) { |
1066 TRACE_EVENT0("ServiceWorker", | 1046 TRACE_EVENT0("ServiceWorker", |
1067 "ServiceWorkerDispatcherHost::OnSetHostedVersionId"); | 1047 "ServiceWorkerDispatcherHost::OnSetHostedVersionId"); |
1068 if (!GetContext()) | 1048 if (!GetContext()) |
1069 return; | 1049 return; |
1070 ServiceWorkerProviderHost* provider_host = | 1050 ServiceWorkerProviderHost* provider_host = |
1071 GetContext()->GetProviderHost(render_process_id_, provider_id); | 1051 GetContext()->GetProviderHost(render_process_id_, provider_id); |
1072 if (!provider_host) { | 1052 if (!provider_host) { |
(...skipping 707 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1780 if (!handle) { | 1760 if (!handle) { |
1781 bad_message::ReceivedBadMessage(this, | 1761 bad_message::ReceivedBadMessage(this, |
1782 bad_message::SWDH_TERMINATE_BAD_HANDLE); | 1762 bad_message::SWDH_TERMINATE_BAD_HANDLE); |
1783 return; | 1763 return; |
1784 } | 1764 } |
1785 handle->version()->StopWorker( | 1765 handle->version()->StopWorker( |
1786 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback)); | 1766 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback)); |
1787 } | 1767 } |
1788 | 1768 |
1789 } // namespace content | 1769 } // namespace content |
OLD | NEW |