| Index: content/browser/service_worker/service_worker_version.cc
|
| diff --git a/content/browser/service_worker/service_worker_version.cc b/content/browser/service_worker/service_worker_version.cc
|
| index 306710a8ca16c874b225c158da2ed44dc34218af..ac6eb2a42eadf248a912bf3ef461c299aff70b74 100644
|
| --- a/content/browser/service_worker/service_worker_version.cc
|
| +++ b/content/browser/service_worker/service_worker_version.cc
|
| @@ -846,6 +846,9 @@ ServiceWorkerVersion::PendingRequest::~PendingRequest() {}
|
|
|
| void ServiceWorkerVersion::OnThreadStarted() {
|
| DCHECK_EQ(EmbeddedWorkerStatus::STARTING, running_status());
|
| + DCHECK(provider_host_);
|
| + provider_host_->SetReadyToSendMessagesToWorker(
|
| + embedded_worker()->thread_id());
|
| // Activate ping/pong now that JavaScript execution will start.
|
| ping_controller_->Activate();
|
| }
|
| @@ -855,6 +858,11 @@ void ServiceWorkerVersion::OnStarting() {
|
| observer.OnRunningStateChanged(this);
|
| }
|
|
|
| +void ServiceWorkerVersion::OnStartWorkerMessageSent() {
|
| + DCHECK(pending_provider_host_);
|
| + context()->AddProviderHost(std::move(pending_provider_host_));
|
| +}
|
| +
|
| void ServiceWorkerVersion::OnStarted() {
|
| DCHECK_EQ(EmbeddedWorkerStatus::RUNNING, running_status());
|
| RestartTick(&idle_time_);
|
| @@ -903,14 +911,7 @@ void ServiceWorkerVersion::OnDetached(EmbeddedWorkerStatus old_status) {
|
| }
|
|
|
| void ServiceWorkerVersion::OnScriptLoaded() {
|
| - DCHECK(GetMainScriptHttpResponseInfo() ||
|
| - // TODO(scottmg|falken): This DCHECK is currently triggered in
|
| - // --network-service because ServiceWorkerReadFromCacheJob isn't being
|
| - // used to retrieve the service worker js. This should be removed once
|
| - // that's done.
|
| - (IsBrowserSideNavigationEnabled() &&
|
| - base::CommandLine::ForCurrentProcess()->HasSwitch(
|
| - switches::kEnableNetworkService)));
|
| + DCHECK(GetMainScriptHttpResponseInfo());
|
| if (IsInstalled(status()))
|
| UMA_HISTOGRAM_BOOLEAN("ServiceWorker.ScriptLoadSuccess", true);
|
| }
|
| @@ -1465,6 +1466,11 @@ void ServiceWorkerVersion::StartWorkerInternal() {
|
|
|
| StartTimeoutTimer();
|
|
|
| + DCHECK(!pending_provider_host_);
|
| + pending_provider_host_ =
|
| + ServiceWorkerProviderHost::PreCreateForController(this, context());
|
| + provider_host_ = pending_provider_host_->AsWeakPtr();
|
| +
|
| auto params = base::MakeUnique<EmbeddedWorkerStartParams>();
|
| params->service_worker_version_id = version_id_;
|
| params->scope = scope_;
|
| @@ -1473,7 +1479,8 @@ void ServiceWorkerVersion::StartWorkerInternal() {
|
| params->pause_after_download = pause_after_download_;
|
|
|
| embedded_worker_->Start(
|
| - std::move(params), mojo::MakeRequest(&event_dispatcher_),
|
| + std::move(params), pending_provider_host_->AsWeakPtr(),
|
| + mojo::MakeRequest(&event_dispatcher_),
|
| base::Bind(&ServiceWorkerVersion::OnStartSentAndScriptEvaluated,
|
| weak_factory_.GetWeakPtr()));
|
| event_dispatcher_.set_connection_error_handler(base::Bind(
|
|
|