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

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

Issue 2779763004: Create ServiceWorkerProviderHost before starting worker (Closed)
Patch Set: Removed unnecessary CONTENT_EXPORT 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::ServiceWorkerProviderClientInfoPtr CompleteProviderHostPreperation(
falken 2017/06/16 15:44:46 typo: Preparation
shimazu 2017/06/19 03:53:30 Done.
204 ServiceWorkerVersion* version,
205 std::unique_ptr<ServiceWorkerProviderHost> provider_host,
206 base::WeakPtr<ServiceWorkerContextCore> context,
207 int process_id) {
208 auto info =
209 provider_host->CompleteStartWorkerPreparation(process_id, version);
210 context->AddProviderHost(std::move(provider_host));
211 return info;
212 }
213
203 } // namespace 214 } // namespace
204 215
205 const int ServiceWorkerVersion::kTimeoutTimerDelaySeconds = 30; 216 const int ServiceWorkerVersion::kTimeoutTimerDelaySeconds = 30;
206 const int ServiceWorkerVersion::kStartInstalledWorkerTimeoutSeconds = 60; 217 const int ServiceWorkerVersion::kStartInstalledWorkerTimeoutSeconds = 60;
207 const int ServiceWorkerVersion::kStartNewWorkerTimeoutMinutes = 5; 218 const int ServiceWorkerVersion::kStartNewWorkerTimeoutMinutes = 5;
208 const int ServiceWorkerVersion::kRequestTimeoutMinutes = 5; 219 const int ServiceWorkerVersion::kRequestTimeoutMinutes = 5;
209 const int ServiceWorkerVersion::kStopWorkerTimeoutSeconds = 5; 220 const int ServiceWorkerVersion::kStopWorkerTimeoutSeconds = 5;
210 221
211 void ServiceWorkerVersion::RestartTick(base::TimeTicks* time) const { 222 void ServiceWorkerVersion::RestartTick(base::TimeTicks* time) const {
212 *time = tick_clock_->NowTicks(); 223 *time = tick_clock_->NowTicks();
(...skipping 627 matching lines...) Expand 10 before | Expand all | Expand 10 after
840 ServiceWorkerMetrics::EventType event_type) 851 ServiceWorkerMetrics::EventType event_type)
841 : error_callback(callback), 852 : error_callback(callback),
842 start_time(time), 853 start_time(time),
843 start_time_ticks(time_ticks), 854 start_time_ticks(time_ticks),
844 event_type(event_type) {} 855 event_type(event_type) {}
845 856
846 ServiceWorkerVersion::PendingRequest::~PendingRequest() {} 857 ServiceWorkerVersion::PendingRequest::~PendingRequest() {}
847 858
848 void ServiceWorkerVersion::OnThreadStarted() { 859 void ServiceWorkerVersion::OnThreadStarted() {
849 DCHECK_EQ(EmbeddedWorkerStatus::STARTING, running_status()); 860 DCHECK_EQ(EmbeddedWorkerStatus::STARTING, running_status());
861 DCHECK(provider_host_);
862 provider_host_->SetReadyToSendMessagesToWorker(
863 embedded_worker()->thread_id());
850 // Activate ping/pong now that JavaScript execution will start. 864 // Activate ping/pong now that JavaScript execution will start.
851 ping_controller_->Activate(); 865 ping_controller_->Activate();
852 } 866 }
853 867
854 void ServiceWorkerVersion::OnStarting() { 868 void ServiceWorkerVersion::OnStarting() {
855 for (auto& observer : listeners_) 869 for (auto& observer : listeners_)
856 observer.OnRunningStateChanged(this); 870 observer.OnRunningStateChanged(this);
857 } 871 }
858 872
859 void ServiceWorkerVersion::OnStarted() { 873 void ServiceWorkerVersion::OnStarted() {
(...skipping 599 matching lines...) Expand 10 before | Expand all | Expand 10 after
1459 DCHECK_EQ(EmbeddedWorkerStatus::STOPPED, running_status()); 1473 DCHECK_EQ(EmbeddedWorkerStatus::STOPPED, running_status());
1460 1474
1461 if (!ServiceWorkerMetrics::ShouldExcludeSiteFromHistogram(site_for_uma_)) { 1475 if (!ServiceWorkerMetrics::ShouldExcludeSiteFromHistogram(site_for_uma_)) {
1462 DCHECK(!event_recorder_); 1476 DCHECK(!event_recorder_);
1463 event_recorder_ = 1477 event_recorder_ =
1464 base::MakeUnique<ServiceWorkerMetrics::ScopedEventRecorder>(); 1478 base::MakeUnique<ServiceWorkerMetrics::ScopedEventRecorder>();
1465 } 1479 }
1466 1480
1467 StartTimeoutTimer(); 1481 StartTimeoutTimer();
1468 1482
1483 std::unique_ptr<ServiceWorkerProviderHost> pending_provider_host =
1484 ServiceWorkerProviderHost::PreCreateForController(context());
1485 provider_host_ = pending_provider_host->AsWeakPtr();
1486
1469 auto params = base::MakeUnique<EmbeddedWorkerStartParams>(); 1487 auto params = base::MakeUnique<EmbeddedWorkerStartParams>();
1470 params->service_worker_version_id = version_id_; 1488 params->service_worker_version_id = version_id_;
1471 params->scope = scope_; 1489 params->scope = scope_;
1472 params->script_url = script_url_; 1490 params->script_url = script_url_;
1473 params->is_installed = IsInstalled(status_); 1491 params->is_installed = IsInstalled(status_);
1474 params->pause_after_download = pause_after_download_; 1492 params->pause_after_download = pause_after_download_;
1475 1493
1476 embedded_worker_->Start( 1494 embedded_worker_->Start(
1477 std::move(params), mojo::MakeRequest(&event_dispatcher_), 1495 std::move(params),
1496 base::BindOnce(&CompleteProviderHostPreperation, base::Unretained(this),
kinuko 2017/06/16 09:33:50 Maybe comment about why Unretained is fine (e.g. p
shimazu 2017/06/19 03:53:30 Done.
1497 base::Passed(&pending_provider_host), context()),
1498 mojo::MakeRequest(&event_dispatcher_),
1478 base::Bind(&ServiceWorkerVersion::OnStartSentAndScriptEvaluated, 1499 base::Bind(&ServiceWorkerVersion::OnStartSentAndScriptEvaluated,
1479 weak_factory_.GetWeakPtr())); 1500 weak_factory_.GetWeakPtr()));
1480 event_dispatcher_.set_connection_error_handler(base::Bind( 1501 event_dispatcher_.set_connection_error_handler(base::Bind(
1481 &OnEventDispatcherConnectionError, embedded_worker_->AsWeakPtr())); 1502 &OnEventDispatcherConnectionError, embedded_worker_->AsWeakPtr()));
1482 } 1503 }
1483 1504
1484 void ServiceWorkerVersion::StartTimeoutTimer() { 1505 void ServiceWorkerVersion::StartTimeoutTimer() {
1485 DCHECK(!timeout_timer_.IsRunning()); 1506 DCHECK(!timeout_timer_.IsRunning());
1486 1507
1487 if (embedded_worker_->devtools_attached()) { 1508 if (embedded_worker_->devtools_attached()) {
(...skipping 371 matching lines...) Expand 10 before | Expand all | Expand 10 after
1859 1880
1860 void ServiceWorkerVersion::CleanUpExternalRequest( 1881 void ServiceWorkerVersion::CleanUpExternalRequest(
1861 const std::string& request_uuid, 1882 const std::string& request_uuid,
1862 ServiceWorkerStatusCode status) { 1883 ServiceWorkerStatusCode status) {
1863 if (status == SERVICE_WORKER_OK) 1884 if (status == SERVICE_WORKER_OK)
1864 return; 1885 return;
1865 external_request_uuid_to_request_id_.erase(request_uuid); 1886 external_request_uuid_to_request_id_.erase(request_uuid);
1866 } 1887 }
1867 1888
1868 } // namespace content 1889 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698