Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(328)

Side by Side Diff: content/browser/service_worker/service_worker_version.cc

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

Powered by Google App Engine
This is Rietveld 408576698