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

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

Issue 2779763004: Create ServiceWorkerProviderHost before starting worker (Closed)
Patch Set: Rename the mojom struct to ServiceWorkerProviderInfoForStartWorker 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 182 matching lines...) Expand 10 before | Expand all | Expand 10 after
193 // renderer shutdown like crash. 193 // renderer shutdown like crash.
194 embedded_worker->Detach(); 194 embedded_worker->Detach();
195 break; 195 break;
196 case EmbeddedWorkerStatus::STOPPING: 196 case EmbeddedWorkerStatus::STOPPING:
197 case EmbeddedWorkerStatus::STOPPED: 197 case EmbeddedWorkerStatus::STOPPED:
198 // Do nothing 198 // Do nothing
199 break; 199 break;
200 } 200 }
201 } 201 }
202 202
203 mojom::ServiceWorkerProviderInfoForStartWorkerPtr
204 CompleteProviderHostPreparation(
205 ServiceWorkerVersion* version,
206 std::unique_ptr<ServiceWorkerProviderHost> provider_host,
207 base::WeakPtr<ServiceWorkerContextCore> context,
208 int process_id) {
209 auto info =
210 provider_host->CompleteStartWorkerPreparation(process_id, version);
211 context->AddProviderHost(std::move(provider_host));
falken 2017/06/19 07:50:40 Could context be null? If not, we could DCHECK(co
shimazu 2017/06/19 10:41:25 Done.
212 return info;
213 }
214
203 } // namespace 215 } // namespace
204 216
205 const int ServiceWorkerVersion::kTimeoutTimerDelaySeconds = 30; 217 const int ServiceWorkerVersion::kTimeoutTimerDelaySeconds = 30;
206 const int ServiceWorkerVersion::kStartInstalledWorkerTimeoutSeconds = 60; 218 const int ServiceWorkerVersion::kStartInstalledWorkerTimeoutSeconds = 60;
207 const int ServiceWorkerVersion::kStartNewWorkerTimeoutMinutes = 5; 219 const int ServiceWorkerVersion::kStartNewWorkerTimeoutMinutes = 5;
208 const int ServiceWorkerVersion::kRequestTimeoutMinutes = 5; 220 const int ServiceWorkerVersion::kRequestTimeoutMinutes = 5;
209 const int ServiceWorkerVersion::kStopWorkerTimeoutSeconds = 5; 221 const int ServiceWorkerVersion::kStopWorkerTimeoutSeconds = 5;
210 222
211 void ServiceWorkerVersion::RestartTick(base::TimeTicks* time) const { 223 void ServiceWorkerVersion::RestartTick(base::TimeTicks* time) const {
212 *time = tick_clock_->NowTicks(); 224 *time = tick_clock_->NowTicks();
(...skipping 627 matching lines...) Expand 10 before | Expand all | Expand 10 after
840 ServiceWorkerMetrics::EventType event_type) 852 ServiceWorkerMetrics::EventType event_type)
841 : error_callback(callback), 853 : error_callback(callback),
842 start_time(time), 854 start_time(time),
843 start_time_ticks(time_ticks), 855 start_time_ticks(time_ticks),
844 event_type(event_type) {} 856 event_type(event_type) {}
845 857
846 ServiceWorkerVersion::PendingRequest::~PendingRequest() {} 858 ServiceWorkerVersion::PendingRequest::~PendingRequest() {}
847 859
848 void ServiceWorkerVersion::OnThreadStarted() { 860 void ServiceWorkerVersion::OnThreadStarted() {
849 DCHECK_EQ(EmbeddedWorkerStatus::STARTING, running_status()); 861 DCHECK_EQ(EmbeddedWorkerStatus::STARTING, running_status());
862 DCHECK(provider_host_);
863 provider_host_->SetReadyToSendMessagesToWorker(
864 embedded_worker()->thread_id());
850 // Activate ping/pong now that JavaScript execution will start. 865 // Activate ping/pong now that JavaScript execution will start.
851 ping_controller_->Activate(); 866 ping_controller_->Activate();
852 } 867 }
853 868
854 void ServiceWorkerVersion::OnStarting() { 869 void ServiceWorkerVersion::OnStarting() {
855 for (auto& observer : listeners_) 870 for (auto& observer : listeners_)
856 observer.OnRunningStateChanged(this); 871 observer.OnRunningStateChanged(this);
857 } 872 }
858 873
859 void ServiceWorkerVersion::OnStarted() { 874 void ServiceWorkerVersion::OnStarted() {
(...skipping 599 matching lines...) Expand 10 before | Expand all | Expand 10 after
1459 DCHECK_EQ(EmbeddedWorkerStatus::STOPPED, running_status()); 1474 DCHECK_EQ(EmbeddedWorkerStatus::STOPPED, running_status());
1460 1475
1461 if (!ServiceWorkerMetrics::ShouldExcludeSiteFromHistogram(site_for_uma_)) { 1476 if (!ServiceWorkerMetrics::ShouldExcludeSiteFromHistogram(site_for_uma_)) {
1462 DCHECK(!event_recorder_); 1477 DCHECK(!event_recorder_);
1463 event_recorder_ = 1478 event_recorder_ =
1464 base::MakeUnique<ServiceWorkerMetrics::ScopedEventRecorder>(); 1479 base::MakeUnique<ServiceWorkerMetrics::ScopedEventRecorder>();
1465 } 1480 }
1466 1481
1467 StartTimeoutTimer(); 1482 StartTimeoutTimer();
1468 1483
1484 std::unique_ptr<ServiceWorkerProviderHost> pending_provider_host =
1485 ServiceWorkerProviderHost::PreCreateForController(context());
1486 provider_host_ = pending_provider_host->AsWeakPtr();
1487
1469 auto params = base::MakeUnique<EmbeddedWorkerStartParams>(); 1488 auto params = base::MakeUnique<EmbeddedWorkerStartParams>();
1470 params->service_worker_version_id = version_id_; 1489 params->service_worker_version_id = version_id_;
1471 params->scope = scope_; 1490 params->scope = scope_;
1472 params->script_url = script_url_; 1491 params->script_url = script_url_;
1473 params->is_installed = IsInstalled(status_); 1492 params->is_installed = IsInstalled(status_);
1474 params->pause_after_download = pause_after_download_; 1493 params->pause_after_download = pause_after_download_;
1475 1494
1476 embedded_worker_->Start( 1495 embedded_worker_->Start(
1477 std::move(params), mojo::MakeRequest(&event_dispatcher_), 1496 std::move(params),
1497 // Unretained is used here because the callback will be owned by
1498 // |embedded_worker_| whose owner is |this|.
1499 base::BindOnce(&CompleteProviderHostPreparation, base::Unretained(this),
1500 base::Passed(&pending_provider_host), context()),
1501 mojo::MakeRequest(&event_dispatcher_),
1478 base::Bind(&ServiceWorkerVersion::OnStartSentAndScriptEvaluated, 1502 base::Bind(&ServiceWorkerVersion::OnStartSentAndScriptEvaluated,
1479 weak_factory_.GetWeakPtr())); 1503 weak_factory_.GetWeakPtr()));
1480 event_dispatcher_.set_connection_error_handler(base::Bind( 1504 event_dispatcher_.set_connection_error_handler(base::Bind(
1481 &OnEventDispatcherConnectionError, embedded_worker_->AsWeakPtr())); 1505 &OnEventDispatcherConnectionError, embedded_worker_->AsWeakPtr()));
1482 } 1506 }
1483 1507
1484 void ServiceWorkerVersion::StartTimeoutTimer() { 1508 void ServiceWorkerVersion::StartTimeoutTimer() {
1485 DCHECK(!timeout_timer_.IsRunning()); 1509 DCHECK(!timeout_timer_.IsRunning());
1486 1510
1487 if (embedded_worker_->devtools_attached()) { 1511 if (embedded_worker_->devtools_attached()) {
(...skipping 371 matching lines...) Expand 10 before | Expand all | Expand 10 after
1859 1883
1860 void ServiceWorkerVersion::CleanUpExternalRequest( 1884 void ServiceWorkerVersion::CleanUpExternalRequest(
1861 const std::string& request_uuid, 1885 const std::string& request_uuid,
1862 ServiceWorkerStatusCode status) { 1886 ServiceWorkerStatusCode status) {
1863 if (status == SERVICE_WORKER_OK) 1887 if (status == SERVICE_WORKER_OK)
1864 return; 1888 return;
1865 external_request_uuid_to_request_id_.erase(request_uuid); 1889 external_request_uuid_to_request_id_.erase(request_uuid);
1866 } 1890 }
1867 1891
1868 } // namespace content 1892 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698