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_version.h" | 5 #include "content/browser/service_worker/service_worker_version.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 | 8 |
9 #include <limits> | 9 #include <limits> |
10 #include <map> | 10 #include <map> |
(...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
194 // renderer shutdown like crash. | 194 // renderer shutdown like crash. |
195 embedded_worker->Detach(); | 195 embedded_worker->Detach(); |
196 break; | 196 break; |
197 case EmbeddedWorkerStatus::STOPPING: | 197 case EmbeddedWorkerStatus::STOPPING: |
198 case EmbeddedWorkerStatus::STOPPED: | 198 case EmbeddedWorkerStatus::STOPPED: |
199 // Do nothing | 199 // Do nothing |
200 break; | 200 break; |
201 } | 201 } |
202 } | 202 } |
203 | 203 |
204 mojom::ServiceWorkerProviderInfoForStartWorkerPtr | |
205 CompleteProviderHostPreparation( | |
206 ServiceWorkerVersion* version, | |
207 std::unique_ptr<ServiceWorkerProviderHost> provider_host, | |
208 base::WeakPtr<ServiceWorkerContextCore> context, | |
209 int process_id) { | |
210 // Caller should ensure |context| is alive when completing StartWorker | |
211 // preparation. | |
212 DCHECK(context); | |
213 auto info = | |
214 provider_host->CompleteStartWorkerPreparation(process_id, version); | |
215 context->AddProviderHost(std::move(provider_host)); | |
216 return info; | |
217 } | |
218 | |
219 } // namespace | 204 } // namespace |
220 | 205 |
221 constexpr base::TimeDelta ServiceWorkerVersion::kTimeoutTimerDelay; | 206 constexpr base::TimeDelta ServiceWorkerVersion::kTimeoutTimerDelay; |
222 constexpr base::TimeDelta ServiceWorkerVersion::kStartNewWorkerTimeout; | 207 constexpr base::TimeDelta ServiceWorkerVersion::kStartNewWorkerTimeout; |
223 constexpr base::TimeDelta ServiceWorkerVersion::kStopWorkerTimeout; | 208 constexpr base::TimeDelta ServiceWorkerVersion::kStopWorkerTimeout; |
224 | 209 |
225 void ServiceWorkerVersion::RestartTick(base::TimeTicks* time) const { | 210 void ServiceWorkerVersion::RestartTick(base::TimeTicks* time) const { |
226 *time = tick_clock_->NowTicks(); | 211 *time = tick_clock_->NowTicks(); |
227 } | 212 } |
228 | 213 |
(...skipping 619 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
848 ServiceWorkerMetrics::EventType event_type) | 833 ServiceWorkerMetrics::EventType event_type) |
849 : error_callback(callback), | 834 : error_callback(callback), |
850 start_time(time), | 835 start_time(time), |
851 start_time_ticks(time_ticks), | 836 start_time_ticks(time_ticks), |
852 event_type(event_type) {} | 837 event_type(event_type) {} |
853 | 838 |
854 ServiceWorkerVersion::PendingRequest::~PendingRequest() {} | 839 ServiceWorkerVersion::PendingRequest::~PendingRequest() {} |
855 | 840 |
856 void ServiceWorkerVersion::OnThreadStarted() { | 841 void ServiceWorkerVersion::OnThreadStarted() { |
857 DCHECK_EQ(EmbeddedWorkerStatus::STARTING, running_status()); | 842 DCHECK_EQ(EmbeddedWorkerStatus::STARTING, running_status()); |
858 DCHECK(provider_host_); | |
859 provider_host_->SetReadyToSendMessagesToWorker( | |
860 embedded_worker()->thread_id()); | |
861 // Activate ping/pong now that JavaScript execution will start. | 843 // Activate ping/pong now that JavaScript execution will start. |
862 ping_controller_->Activate(); | 844 ping_controller_->Activate(); |
863 } | 845 } |
864 | 846 |
865 void ServiceWorkerVersion::OnStarting() { | 847 void ServiceWorkerVersion::OnStarting() { |
866 for (auto& observer : listeners_) | 848 for (auto& observer : listeners_) |
867 observer.OnRunningStateChanged(this); | 849 observer.OnRunningStateChanged(this); |
868 } | 850 } |
869 | 851 |
870 void ServiceWorkerVersion::OnStarted() { | 852 void ServiceWorkerVersion::OnStarted() { |
(...skipping 598 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1469 DCHECK_EQ(EmbeddedWorkerStatus::STOPPED, running_status()); | 1451 DCHECK_EQ(EmbeddedWorkerStatus::STOPPED, running_status()); |
1470 | 1452 |
1471 if (!ServiceWorkerMetrics::ShouldExcludeSiteFromHistogram(site_for_uma_)) { | 1453 if (!ServiceWorkerMetrics::ShouldExcludeSiteFromHistogram(site_for_uma_)) { |
1472 DCHECK(!event_recorder_); | 1454 DCHECK(!event_recorder_); |
1473 event_recorder_ = | 1455 event_recorder_ = |
1474 base::MakeUnique<ServiceWorkerMetrics::ScopedEventRecorder>(); | 1456 base::MakeUnique<ServiceWorkerMetrics::ScopedEventRecorder>(); |
1475 } | 1457 } |
1476 | 1458 |
1477 StartTimeoutTimer(); | 1459 StartTimeoutTimer(); |
1478 | 1460 |
1479 std::unique_ptr<ServiceWorkerProviderHost> pending_provider_host = | |
1480 ServiceWorkerProviderHost::PreCreateForController(context()); | |
1481 provider_host_ = pending_provider_host->AsWeakPtr(); | |
1482 | |
1483 auto params = base::MakeUnique<EmbeddedWorkerStartParams>(); | 1461 auto params = base::MakeUnique<EmbeddedWorkerStartParams>(); |
1484 params->service_worker_version_id = version_id_; | 1462 params->service_worker_version_id = version_id_; |
1485 params->scope = scope_; | 1463 params->scope = scope_; |
1486 params->script_url = script_url_; | 1464 params->script_url = script_url_; |
1487 params->is_installed = IsInstalled(status_); | 1465 params->is_installed = IsInstalled(status_); |
1488 params->pause_after_download = pause_after_download_; | 1466 params->pause_after_download = pause_after_download_; |
1489 | 1467 |
1490 embedded_worker_->Start( | 1468 embedded_worker_->Start( |
1491 std::move(params), | 1469 std::move(params), mojo::MakeRequest(&event_dispatcher_), |
1492 // Unretained is used here because the callback will be owned by | |
1493 // |embedded_worker_| whose owner is |this|. | |
1494 base::BindOnce(&CompleteProviderHostPreparation, base::Unretained(this), | |
1495 base::Passed(&pending_provider_host), context()), | |
1496 mojo::MakeRequest(&event_dispatcher_), | |
1497 base::Bind(&ServiceWorkerVersion::OnStartSentAndScriptEvaluated, | 1470 base::Bind(&ServiceWorkerVersion::OnStartSentAndScriptEvaluated, |
1498 weak_factory_.GetWeakPtr())); | 1471 weak_factory_.GetWeakPtr())); |
1499 event_dispatcher_.set_connection_error_handler(base::Bind( | 1472 event_dispatcher_.set_connection_error_handler(base::Bind( |
1500 &OnEventDispatcherConnectionError, embedded_worker_->AsWeakPtr())); | 1473 &OnEventDispatcherConnectionError, embedded_worker_->AsWeakPtr())); |
1501 } | 1474 } |
1502 | 1475 |
1503 void ServiceWorkerVersion::StartTimeoutTimer() { | 1476 void ServiceWorkerVersion::StartTimeoutTimer() { |
1504 DCHECK(!timeout_timer_.IsRunning()); | 1477 DCHECK(!timeout_timer_.IsRunning()); |
1505 | 1478 |
1506 if (embedded_worker_->devtools_attached()) { | 1479 if (embedded_worker_->devtools_attached()) { |
(...skipping 366 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1873 | 1846 |
1874 void ServiceWorkerVersion::CleanUpExternalRequest( | 1847 void ServiceWorkerVersion::CleanUpExternalRequest( |
1875 const std::string& request_uuid, | 1848 const std::string& request_uuid, |
1876 ServiceWorkerStatusCode status) { | 1849 ServiceWorkerStatusCode status) { |
1877 if (status == SERVICE_WORKER_OK) | 1850 if (status == SERVICE_WORKER_OK) |
1878 return; | 1851 return; |
1879 external_request_uuid_to_request_id_.erase(request_uuid); | 1852 external_request_uuid_to_request_id_.erase(request_uuid); |
1880 } | 1853 } |
1881 | 1854 |
1882 } // namespace content | 1855 } // namespace content |
OLD | NEW |