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 949 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
960 if (provider_host == nullptr) { | 960 if (provider_host == nullptr) { |
961 GetContext()->AddProviderHost( | 961 GetContext()->AddProviderHost( |
962 ServiceWorkerProviderHost::Create(render_process_id_, std::move(info), | 962 ServiceWorkerProviderHost::Create(render_process_id_, std::move(info), |
963 GetContext()->AsWeakPtr(), this)); | 963 GetContext()->AsWeakPtr(), this)); |
964 return; | 964 return; |
965 } | 965 } |
966 | 966 |
967 // Otherwise, completed the initialization of the pre-created host. | 967 // Otherwise, completed the initialization of the pre-created host. |
968 DCHECK_EQ(SERVICE_WORKER_PROVIDER_FOR_WINDOW, info.type); | 968 DCHECK_EQ(SERVICE_WORKER_PROVIDER_FOR_WINDOW, info.type); |
969 provider_host->CompleteNavigationInitialized(render_process_id_, | 969 provider_host->CompleteNavigationInitialized(render_process_id_, |
970 info.route_id, this); | 970 std::move(info), this); |
971 GetContext()->AddProviderHost(std::move(provider_host)); | 971 GetContext()->AddProviderHost(std::move(provider_host)); |
972 } else { | 972 } else { |
973 if (ServiceWorkerUtils::IsBrowserAssignedProviderId(info.provider_id)) { | 973 if (ServiceWorkerUtils::IsBrowserAssignedProviderId(info.provider_id)) { |
974 bad_message::ReceivedBadMessage( | 974 bad_message::ReceivedBadMessage( |
975 this, bad_message::SWDH_PROVIDER_CREATED_NO_HOST); | 975 this, bad_message::SWDH_PROVIDER_CREATED_NO_HOST); |
976 return; | 976 return; |
977 } | 977 } |
978 GetContext()->AddProviderHost(ServiceWorkerProviderHost::Create( | 978 GetContext()->AddProviderHost(ServiceWorkerProviderHost::Create( |
979 render_process_id_, std::move(info), GetContext()->AsWeakPtr(), this)); | 979 render_process_id_, std::move(info), GetContext()->AsWeakPtr(), this)); |
980 } | 980 } |
981 } | 981 } |
982 | 982 |
983 void ServiceWorkerDispatcherHost::OnProviderDestroyed(int provider_id) { | |
984 TRACE_EVENT0("ServiceWorker", | |
985 "ServiceWorkerDispatcherHost::OnProviderDestroyed"); | |
986 if (!GetContext()) | |
987 return; | |
988 if (!GetContext()->GetProviderHost(render_process_id_, provider_id)) { | |
989 // PlzNavigate: in some cancellation of navigation cases, it is possible | |
990 // for the pre-created hoist to have been destroyed before being claimed by | |
991 // the renderer. The provider is then destroyed in the renderer, and no | |
992 // matching host will be found. | |
993 if (!IsBrowserSideNavigationEnabled() || | |
994 !ServiceWorkerUtils::IsBrowserAssignedProviderId(provider_id)) { | |
995 bad_message::ReceivedBadMessage( | |
996 this, bad_message::SWDH_PROVIDER_DESTROYED_NO_HOST); | |
997 } | |
998 return; | |
999 } | |
1000 GetContext()->RemoveProviderHost(render_process_id_, provider_id); | |
1001 } | |
1002 | |
1003 void ServiceWorkerDispatcherHost::OnSetHostedVersionId(int provider_id, | 983 void ServiceWorkerDispatcherHost::OnSetHostedVersionId(int provider_id, |
1004 int64_t version_id, | 984 int64_t version_id, |
1005 int embedded_worker_id) { | 985 int embedded_worker_id) { |
1006 TRACE_EVENT0("ServiceWorker", | 986 TRACE_EVENT0("ServiceWorker", |
1007 "ServiceWorkerDispatcherHost::OnSetHostedVersionId"); | 987 "ServiceWorkerDispatcherHost::OnSetHostedVersionId"); |
1008 if (!GetContext()) | 988 if (!GetContext()) |
1009 return; | 989 return; |
1010 ServiceWorkerProviderHost* provider_host = | 990 ServiceWorkerProviderHost* provider_host = |
1011 GetContext()->GetProviderHost(render_process_id_, provider_id); | 991 GetContext()->GetProviderHost(render_process_id_, provider_id); |
1012 if (!provider_host) { | 992 if (!provider_host) { |
(...skipping 576 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1589 if (!handle) { | 1569 if (!handle) { |
1590 bad_message::ReceivedBadMessage(this, | 1570 bad_message::ReceivedBadMessage(this, |
1591 bad_message::SWDH_TERMINATE_BAD_HANDLE); | 1571 bad_message::SWDH_TERMINATE_BAD_HANDLE); |
1592 return; | 1572 return; |
1593 } | 1573 } |
1594 handle->version()->StopWorker( | 1574 handle->version()->StopWorker( |
1595 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback)); | 1575 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback)); |
1596 } | 1576 } |
1597 | 1577 |
1598 } // namespace content | 1578 } // namespace content |
OLD | NEW |