| 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 828 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 839 ServiceWorkerMetrics::EventType event_type) | 839 ServiceWorkerMetrics::EventType event_type) |
| 840 : error_callback(callback), | 840 : error_callback(callback), |
| 841 start_time(time), | 841 start_time(time), |
| 842 start_time_ticks(time_ticks), | 842 start_time_ticks(time_ticks), |
| 843 event_type(event_type) {} | 843 event_type(event_type) {} |
| 844 | 844 |
| 845 ServiceWorkerVersion::PendingRequest::~PendingRequest() {} | 845 ServiceWorkerVersion::PendingRequest::~PendingRequest() {} |
| 846 | 846 |
| 847 void ServiceWorkerVersion::OnThreadStarted() { | 847 void ServiceWorkerVersion::OnThreadStarted() { |
| 848 DCHECK_EQ(EmbeddedWorkerStatus::STARTING, running_status()); | 848 DCHECK_EQ(EmbeddedWorkerStatus::STARTING, running_status()); |
| 849 DCHECK(provider_host_); |
| 850 provider_host_->SetReadyToSendMessagesToWorker( |
| 851 embedded_worker()->thread_id()); |
| 849 // Activate ping/pong now that JavaScript execution will start. | 852 // Activate ping/pong now that JavaScript execution will start. |
| 850 ping_controller_->Activate(); | 853 ping_controller_->Activate(); |
| 851 } | 854 } |
| 852 | 855 |
| 853 void ServiceWorkerVersion::OnStarting() { | 856 void ServiceWorkerVersion::OnStarting() { |
| 854 for (auto& observer : listeners_) | 857 for (auto& observer : listeners_) |
| 855 observer.OnRunningStateChanged(this); | 858 observer.OnRunningStateChanged(this); |
| 856 } | 859 } |
| 857 | 860 |
| 861 void ServiceWorkerVersion::OnStartWorkerMessageSent() { |
| 862 DCHECK(pending_provider_host_); |
| 863 context()->AddProviderHost(std::move(pending_provider_host_)); |
| 864 } |
| 865 |
| 858 void ServiceWorkerVersion::OnStarted() { | 866 void ServiceWorkerVersion::OnStarted() { |
| 859 DCHECK_EQ(EmbeddedWorkerStatus::RUNNING, running_status()); | 867 DCHECK_EQ(EmbeddedWorkerStatus::RUNNING, running_status()); |
| 860 RestartTick(&idle_time_); | 868 RestartTick(&idle_time_); |
| 861 | 869 |
| 862 // Fire all start callbacks. | 870 // Fire all start callbacks. |
| 863 scoped_refptr<ServiceWorkerVersion> protect(this); | 871 scoped_refptr<ServiceWorkerVersion> protect(this); |
| 864 FinishStartWorker(SERVICE_WORKER_OK); | 872 FinishStartWorker(SERVICE_WORKER_OK); |
| 865 for (auto& observer : listeners_) | 873 for (auto& observer : listeners_) |
| 866 observer.OnRunningStateChanged(this); | 874 observer.OnRunningStateChanged(this); |
| 867 } | 875 } |
| (...skipping 28 matching lines...) Expand all Loading... |
| 896 | 904 |
| 897 void ServiceWorkerVersion::OnDetached(EmbeddedWorkerStatus old_status) { | 905 void ServiceWorkerVersion::OnDetached(EmbeddedWorkerStatus old_status) { |
| 898 if (IsInstalled(status())) { | 906 if (IsInstalled(status())) { |
| 899 ServiceWorkerMetrics::RecordWorkerStopped( | 907 ServiceWorkerMetrics::RecordWorkerStopped( |
| 900 ServiceWorkerMetrics::StopStatus::DETACH_BY_REGISTRY); | 908 ServiceWorkerMetrics::StopStatus::DETACH_BY_REGISTRY); |
| 901 } | 909 } |
| 902 OnStoppedInternal(old_status); | 910 OnStoppedInternal(old_status); |
| 903 } | 911 } |
| 904 | 912 |
| 905 void ServiceWorkerVersion::OnScriptLoaded() { | 913 void ServiceWorkerVersion::OnScriptLoaded() { |
| 906 DCHECK(GetMainScriptHttpResponseInfo() || | 914 DCHECK(GetMainScriptHttpResponseInfo()); |
| 907 // TODO(scottmg|falken): This DCHECK is currently triggered in | |
| 908 // --network-service because ServiceWorkerReadFromCacheJob isn't being | |
| 909 // used to retrieve the service worker js. This should be removed once | |
| 910 // that's done. | |
| 911 (IsBrowserSideNavigationEnabled() && | |
| 912 base::CommandLine::ForCurrentProcess()->HasSwitch( | |
| 913 switches::kEnableNetworkService))); | |
| 914 if (IsInstalled(status())) | 915 if (IsInstalled(status())) |
| 915 UMA_HISTOGRAM_BOOLEAN("ServiceWorker.ScriptLoadSuccess", true); | 916 UMA_HISTOGRAM_BOOLEAN("ServiceWorker.ScriptLoadSuccess", true); |
| 916 } | 917 } |
| 917 | 918 |
| 918 void ServiceWorkerVersion::OnScriptLoadFailed() { | 919 void ServiceWorkerVersion::OnScriptLoadFailed() { |
| 919 if (IsInstalled(status())) | 920 if (IsInstalled(status())) |
| 920 UMA_HISTOGRAM_BOOLEAN("ServiceWorker.ScriptLoadSuccess", false); | 921 UMA_HISTOGRAM_BOOLEAN("ServiceWorker.ScriptLoadSuccess", false); |
| 921 } | 922 } |
| 922 | 923 |
| 923 void ServiceWorkerVersion::OnRegisteredToDevToolsManager() { | 924 void ServiceWorkerVersion::OnRegisteredToDevToolsManager() { |
| (...skipping 534 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1458 DCHECK_EQ(EmbeddedWorkerStatus::STOPPED, running_status()); | 1459 DCHECK_EQ(EmbeddedWorkerStatus::STOPPED, running_status()); |
| 1459 | 1460 |
| 1460 if (!ServiceWorkerMetrics::ShouldExcludeSiteFromHistogram(site_for_uma_)) { | 1461 if (!ServiceWorkerMetrics::ShouldExcludeSiteFromHistogram(site_for_uma_)) { |
| 1461 DCHECK(!event_recorder_); | 1462 DCHECK(!event_recorder_); |
| 1462 event_recorder_ = | 1463 event_recorder_ = |
| 1463 base::MakeUnique<ServiceWorkerMetrics::ScopedEventRecorder>(); | 1464 base::MakeUnique<ServiceWorkerMetrics::ScopedEventRecorder>(); |
| 1464 } | 1465 } |
| 1465 | 1466 |
| 1466 StartTimeoutTimer(); | 1467 StartTimeoutTimer(); |
| 1467 | 1468 |
| 1469 DCHECK(!pending_provider_host_); |
| 1470 pending_provider_host_ = |
| 1471 ServiceWorkerProviderHost::PreCreateForController(this, context()); |
| 1472 provider_host_ = pending_provider_host_->AsWeakPtr(); |
| 1473 |
| 1468 auto params = base::MakeUnique<EmbeddedWorkerStartParams>(); | 1474 auto params = base::MakeUnique<EmbeddedWorkerStartParams>(); |
| 1469 params->service_worker_version_id = version_id_; | 1475 params->service_worker_version_id = version_id_; |
| 1470 params->scope = scope_; | 1476 params->scope = scope_; |
| 1471 params->script_url = script_url_; | 1477 params->script_url = script_url_; |
| 1472 params->is_installed = IsInstalled(status_); | 1478 params->is_installed = IsInstalled(status_); |
| 1473 params->pause_after_download = pause_after_download_; | 1479 params->pause_after_download = pause_after_download_; |
| 1474 | 1480 |
| 1475 embedded_worker_->Start( | 1481 embedded_worker_->Start( |
| 1476 std::move(params), mojo::MakeRequest(&event_dispatcher_), | 1482 std::move(params), pending_provider_host_->AsWeakPtr(), |
| 1483 mojo::MakeRequest(&event_dispatcher_), |
| 1477 base::Bind(&ServiceWorkerVersion::OnStartSentAndScriptEvaluated, | 1484 base::Bind(&ServiceWorkerVersion::OnStartSentAndScriptEvaluated, |
| 1478 weak_factory_.GetWeakPtr())); | 1485 weak_factory_.GetWeakPtr())); |
| 1479 event_dispatcher_.set_connection_error_handler(base::Bind( | 1486 event_dispatcher_.set_connection_error_handler(base::Bind( |
| 1480 &OnEventDispatcherConnectionError, embedded_worker_->AsWeakPtr())); | 1487 &OnEventDispatcherConnectionError, embedded_worker_->AsWeakPtr())); |
| 1481 } | 1488 } |
| 1482 | 1489 |
| 1483 void ServiceWorkerVersion::StartTimeoutTimer() { | 1490 void ServiceWorkerVersion::StartTimeoutTimer() { |
| 1484 DCHECK(!timeout_timer_.IsRunning()); | 1491 DCHECK(!timeout_timer_.IsRunning()); |
| 1485 | 1492 |
| 1486 if (embedded_worker_->devtools_attached()) { | 1493 if (embedded_worker_->devtools_attached()) { |
| (...skipping 360 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1847 | 1854 |
| 1848 void ServiceWorkerVersion::CleanUpExternalRequest( | 1855 void ServiceWorkerVersion::CleanUpExternalRequest( |
| 1849 const std::string& request_uuid, | 1856 const std::string& request_uuid, |
| 1850 ServiceWorkerStatusCode status) { | 1857 ServiceWorkerStatusCode status) { |
| 1851 if (status == SERVICE_WORKER_OK) | 1858 if (status == SERVICE_WORKER_OK) |
| 1852 return; | 1859 return; |
| 1853 external_request_uuid_to_request_id_.erase(request_uuid); | 1860 external_request_uuid_to_request_id_.erase(request_uuid); |
| 1854 } | 1861 } |
| 1855 | 1862 |
| 1856 } // namespace content | 1863 } // namespace content |
| OLD | NEW |