Chromium Code Reviews| 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 834 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 845 !ServiceWorkerUtils::IsBrowserAssignedProviderId(provider_id)) { | 845 !ServiceWorkerUtils::IsBrowserAssignedProviderId(provider_id)) { |
| 846 bad_message::ReceivedBadMessage( | 846 bad_message::ReceivedBadMessage( |
| 847 this, bad_message::SWDH_PROVIDER_DESTROYED_NO_HOST); | 847 this, bad_message::SWDH_PROVIDER_DESTROYED_NO_HOST); |
| 848 } | 848 } |
| 849 return; | 849 return; |
| 850 } | 850 } |
| 851 GetContext()->RemoveProviderHost(render_process_id_, provider_id); | 851 GetContext()->RemoveProviderHost(render_process_id_, provider_id); |
| 852 } | 852 } |
| 853 | 853 |
| 854 void ServiceWorkerDispatcherHost::OnSetHostedVersionId(int provider_id, | 854 void ServiceWorkerDispatcherHost::OnSetHostedVersionId(int provider_id, |
| 855 int64_t version_id) { | 855 int64_t version_id, |
| 856 int embedded_worker_id) { | |
| 856 TRACE_EVENT0("ServiceWorker", | 857 TRACE_EVENT0("ServiceWorker", |
| 857 "ServiceWorkerDispatcherHost::OnSetHostedVersionId"); | 858 "ServiceWorkerDispatcherHost::OnSetHostedVersionId"); |
| 858 if (!GetContext()) | 859 if (!GetContext()) |
| 859 return; | 860 return; |
| 860 ServiceWorkerProviderHost* provider_host = | 861 ServiceWorkerProviderHost* provider_host = |
| 861 GetContext()->GetProviderHost(render_process_id_, provider_id); | 862 GetContext()->GetProviderHost(render_process_id_, provider_id); |
| 862 if (!provider_host) { | 863 if (!provider_host) { |
| 863 bad_message::ReceivedBadMessage( | 864 bad_message::ReceivedBadMessage( |
| 864 this, bad_message::SWDH_SET_HOSTED_VERSION_NO_HOST); | 865 this, bad_message::SWDH_SET_HOSTED_VERSION_NO_HOST); |
| 865 return; | 866 return; |
| 866 } | 867 } |
| 867 | 868 |
| 868 // This provider host must be specialized for a controller. | 869 // This provider host must be specialized for a controller. |
| 869 if (provider_host->IsProviderForClient()) { | 870 if (provider_host->IsProviderForClient()) { |
| 870 bad_message::ReceivedBadMessage( | 871 bad_message::ReceivedBadMessage( |
| 871 this, bad_message::SWDH_SET_HOSTED_VERSION_INVALID_HOST); | 872 this, bad_message::SWDH_SET_HOSTED_VERSION_INVALID_HOST); |
| 872 return; | 873 return; |
| 873 } | 874 } |
| 874 | 875 |
| 875 // A service worker context associated with this provider host was destroyed | 876 // A service worker context associated with this provider host was destroyed |
| 876 // due to restarting the service worker system etc. | 877 // due to restarting the service worker system etc. |
| 877 if (!provider_host->IsContextAlive()) | 878 if (!provider_host->IsContextAlive()) |
| 878 return; | 879 return; |
| 879 | 880 |
| 880 // We might not be STARTING if the stop sequence was entered (STOPPING) or | 881 // We might not be STARTING if the stop sequence was entered (STOPPING) or |
| 881 // ended up being detached (STOPPED). | 882 // ended up being detached (STOPPED). |
| 882 ServiceWorkerVersion* version = GetContext()->GetLiveVersion(version_id); | 883 ServiceWorkerVersion* version = GetContext()->GetLiveVersion(version_id); |
| 883 if (!version || version->running_status() != EmbeddedWorkerStatus::STARTING) | 884 if (!version || version->running_status() != EmbeddedWorkerStatus::STARTING) |
| 884 return; | 885 return; |
| 886 // If the version has a different embedded worker, assume the message is about | |
|
dcheng
2016/07/15 09:25:46
Nit: newline above for consistency
falken
2016/07/15 11:30:35
Done.
| |
| 887 // a detached worker and ignore. | |
| 888 if (version->embedded_worker()->embedded_worker_id() != embedded_worker_id) | |
| 889 return; | |
| 885 | 890 |
| 886 // A process for the worker must be equal to a process for the provider host. | 891 // A process for the worker must be equal to a process for the provider host. |
| 887 if (version->embedded_worker()->process_id() != provider_host->process_id()) { | 892 if (version->embedded_worker()->process_id() != provider_host->process_id()) { |
| 888 bad_message::ReceivedBadMessage( | 893 bad_message::ReceivedBadMessage( |
| 889 this, bad_message::SWDH_SET_HOSTED_VERSION_PROCESS_MISMATCH); | 894 this, bad_message::SWDH_SET_HOSTED_VERSION_PROCESS_MISMATCH); |
| 890 return; | 895 return; |
| 891 } | 896 } |
| 892 | 897 |
| 893 provider_host->SetHostedVersion(version); | 898 provider_host->SetHostedVersion(version); |
| 894 | 899 |
| (...skipping 564 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1459 if (!handle) { | 1464 if (!handle) { |
| 1460 bad_message::ReceivedBadMessage(this, | 1465 bad_message::ReceivedBadMessage(this, |
| 1461 bad_message::SWDH_TERMINATE_BAD_HANDLE); | 1466 bad_message::SWDH_TERMINATE_BAD_HANDLE); |
| 1462 return; | 1467 return; |
| 1463 } | 1468 } |
| 1464 handle->version()->StopWorker( | 1469 handle->version()->StopWorker( |
| 1465 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback)); | 1470 base::Bind(&ServiceWorkerUtils::NoOpStatusCallback)); |
| 1466 } | 1471 } |
| 1467 | 1472 |
| 1468 } // namespace content | 1473 } // namespace content |
| OLD | NEW |