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 808 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
819 ServiceWorkerMetrics::EventType event_type) | 819 ServiceWorkerMetrics::EventType event_type) |
820 : error_callback(callback), | 820 : error_callback(callback), |
821 start_time(time), | 821 start_time(time), |
822 start_time_ticks(time_ticks), | 822 start_time_ticks(time_ticks), |
823 event_type(event_type) {} | 823 event_type(event_type) {} |
824 | 824 |
825 ServiceWorkerVersion::PendingRequest::~PendingRequest() {} | 825 ServiceWorkerVersion::PendingRequest::~PendingRequest() {} |
826 | 826 |
827 void ServiceWorkerVersion::OnThreadStarted() { | 827 void ServiceWorkerVersion::OnThreadStarted() { |
828 DCHECK_EQ(EmbeddedWorkerStatus::STARTING, running_status()); | 828 DCHECK_EQ(EmbeddedWorkerStatus::STARTING, running_status()); |
| 829 DCHECK(running_controller_provider_); |
| 830 running_controller_provider_->SetReadyToSendMessagesToWorker( |
| 831 embedded_worker()->thread_id()); |
829 // Activate ping/pong now that JavaScript execution will start. | 832 // Activate ping/pong now that JavaScript execution will start. |
830 ping_controller_->Activate(); | 833 ping_controller_->Activate(); |
831 } | 834 } |
832 | 835 |
833 void ServiceWorkerVersion::OnStarting() { | 836 void ServiceWorkerVersion::OnStarting() { |
834 for (auto& observer : listeners_) | 837 for (auto& observer : listeners_) |
835 observer.OnRunningStateChanged(this); | 838 observer.OnRunningStateChanged(this); |
836 } | 839 } |
837 | 840 |
| 841 void ServiceWorkerVersion::OnStartWorkerMessageSent() { |
| 842 DCHECK(pending_controller_provider_); |
| 843 context()->AddProviderHost(std::move(pending_controller_provider_)); |
| 844 } |
| 845 |
838 void ServiceWorkerVersion::OnStarted() { | 846 void ServiceWorkerVersion::OnStarted() { |
839 DCHECK_EQ(EmbeddedWorkerStatus::RUNNING, running_status()); | 847 DCHECK_EQ(EmbeddedWorkerStatus::RUNNING, running_status()); |
840 RestartTick(&idle_time_); | 848 RestartTick(&idle_time_); |
841 | 849 |
842 // Fire all start callbacks. | 850 // Fire all start callbacks. |
843 scoped_refptr<ServiceWorkerVersion> protect(this); | 851 scoped_refptr<ServiceWorkerVersion> protect(this); |
844 FinishStartWorker(SERVICE_WORKER_OK); | 852 FinishStartWorker(SERVICE_WORKER_OK); |
845 for (auto& observer : listeners_) | 853 for (auto& observer : listeners_) |
846 observer.OnRunningStateChanged(this); | 854 observer.OnRunningStateChanged(this); |
847 } | 855 } |
(...skipping 572 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1420 DCHECK_EQ(EmbeddedWorkerStatus::STOPPED, running_status()); | 1428 DCHECK_EQ(EmbeddedWorkerStatus::STOPPED, running_status()); |
1421 | 1429 |
1422 if (!ServiceWorkerMetrics::ShouldExcludeSiteFromHistogram(site_for_uma_)) { | 1430 if (!ServiceWorkerMetrics::ShouldExcludeSiteFromHistogram(site_for_uma_)) { |
1423 DCHECK(!event_recorder_); | 1431 DCHECK(!event_recorder_); |
1424 event_recorder_ = | 1432 event_recorder_ = |
1425 base::MakeUnique<ServiceWorkerMetrics::ScopedEventRecorder>(); | 1433 base::MakeUnique<ServiceWorkerMetrics::ScopedEventRecorder>(); |
1426 } | 1434 } |
1427 | 1435 |
1428 StartTimeoutTimer(); | 1436 StartTimeoutTimer(); |
1429 | 1437 |
| 1438 DCHECK(!pending_controller_provider_); |
| 1439 pending_controller_provider_ = |
| 1440 ServiceWorkerProviderHost::PreCreateForWorkerContext(this, context()); |
| 1441 running_controller_provider_ = pending_controller_provider_->AsWeakPtr(); |
| 1442 |
1430 auto params = base::MakeUnique<EmbeddedWorkerStartParams>(); | 1443 auto params = base::MakeUnique<EmbeddedWorkerStartParams>(); |
1431 params->service_worker_version_id = version_id_; | 1444 params->service_worker_version_id = version_id_; |
1432 params->scope = scope_; | 1445 params->scope = scope_; |
1433 params->script_url = script_url_; | 1446 params->script_url = script_url_; |
1434 params->is_installed = IsInstalled(status_); | 1447 params->is_installed = IsInstalled(status_); |
1435 params->pause_after_download = pause_after_download_; | 1448 params->pause_after_download = pause_after_download_; |
| 1449 params->controller_provider = pending_controller_provider_.get(); |
1436 | 1450 |
1437 embedded_worker_->Start( | 1451 embedded_worker_->Start( |
1438 std::move(params), mojo::MakeRequest(&event_dispatcher_), | 1452 std::move(params), mojo::MakeRequest(&event_dispatcher_), |
1439 base::Bind(&ServiceWorkerVersion::OnStartSentAndScriptEvaluated, | 1453 base::Bind(&ServiceWorkerVersion::OnStartSentAndScriptEvaluated, |
1440 weak_factory_.GetWeakPtr())); | 1454 weak_factory_.GetWeakPtr())); |
1441 } | 1455 } |
1442 | 1456 |
1443 void ServiceWorkerVersion::StartTimeoutTimer() { | 1457 void ServiceWorkerVersion::StartTimeoutTimer() { |
1444 DCHECK(!timeout_timer_.IsRunning()); | 1458 DCHECK(!timeout_timer_.IsRunning()); |
1445 | 1459 |
(...skipping 372 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1818 | 1832 |
1819 void ServiceWorkerVersion::CleanUpExternalRequest( | 1833 void ServiceWorkerVersion::CleanUpExternalRequest( |
1820 const std::string& request_uuid, | 1834 const std::string& request_uuid, |
1821 ServiceWorkerStatusCode status) { | 1835 ServiceWorkerStatusCode status) { |
1822 if (status == SERVICE_WORKER_OK) | 1836 if (status == SERVICE_WORKER_OK) |
1823 return; | 1837 return; |
1824 external_request_uuid_to_request_id_.erase(request_uuid); | 1838 external_request_uuid_to_request_id_.erase(request_uuid); |
1825 } | 1839 } |
1826 | 1840 |
1827 } // namespace content | 1841 } // namespace content |
OLD | NEW |