| Index: content/browser/service_worker/service_worker_registration.cc
|
| diff --git a/content/browser/service_worker/service_worker_registration.cc b/content/browser/service_worker/service_worker_registration.cc
|
| index 6689ca4eb8fa3fba698e5b65f196be94d0cda1bf..e1e6e5d1822761c4b0914478fdc93e89b7911232 100644
|
| --- a/content/browser/service_worker/service_worker_registration.cc
|
| +++ b/content/browser/service_worker/service_worker_registration.cc
|
| @@ -10,6 +10,7 @@
|
| #include "content/browser/service_worker/service_worker_info.h"
|
| #include "content/browser/service_worker/service_worker_metrics.h"
|
| #include "content/browser/service_worker/service_worker_register_job.h"
|
| +#include "content/common/service_worker/service_worker_messages.h"
|
| #include "content/common/service_worker/service_worker_utils.h"
|
| #include "content/public/browser/browser_thread.h"
|
|
|
| @@ -285,9 +286,11 @@ void ServiceWorkerRegistration::ActivateWaitingVersion() {
|
| FOR_EACH_OBSERVER(Listener, listeners_, OnSkippedWaiting(this));
|
|
|
| // "10. Queue a task to fire an event named activate..."
|
| - activating_version->DispatchActivateEvent(
|
| - base::Bind(&ServiceWorkerRegistration::OnActivateEventFinished,
|
| - this, activating_version));
|
| + activating_version->RunAfterStartWorker(
|
| + base::Bind(&ServiceWorkerRegistration::DispatchActivateEvent, this,
|
| + activating_version),
|
| + base::Bind(&ServiceWorkerRegistration::OnActivateEventFinished, this,
|
| + activating_version));
|
| }
|
|
|
| void ServiceWorkerRegistration::DeleteVersion(
|
| @@ -338,8 +341,27 @@ void ServiceWorkerRegistration::RegisterRegistrationFinishedCallback(
|
| registration_finished_callbacks_.push_back(callback);
|
| }
|
|
|
| +void ServiceWorkerRegistration::DispatchActivateEvent(
|
| + const scoped_refptr<ServiceWorkerVersion>& activating_version) {
|
| + if (activating_version != active_version()) {
|
| + OnActivateEventFinished(activating_version, SERVICE_WORKER_ERROR_FAILED);
|
| + return;
|
| + }
|
| +
|
| + DCHECK_EQ(ServiceWorkerVersion::ACTIVATING, activating_version->status());
|
| + DCHECK_EQ(ServiceWorkerVersion::RUNNING, activating_version->running_status())
|
| + << "Worker stopped too soon after it was started.";
|
| + int request_id = activating_version->StartRequest(
|
| + ServiceWorkerMetrics::EventType::ACTIVATE,
|
| + base::Bind(&ServiceWorkerRegistration::OnActivateEventFinished, this,
|
| + activating_version));
|
| + activating_version
|
| + ->DispatchSimpleEvent<ServiceWorkerHostMsg_ActivateEventFinished>(
|
| + request_id, ServiceWorkerMsg_ActivateEvent(request_id));
|
| +}
|
| +
|
| void ServiceWorkerRegistration::OnActivateEventFinished(
|
| - ServiceWorkerVersion* activating_version,
|
| + const scoped_refptr<ServiceWorkerVersion>& activating_version,
|
| ServiceWorkerStatusCode status) {
|
| if (!context_ || activating_version != active_version() ||
|
| activating_version->status() != ServiceWorkerVersion::ACTIVATING)
|
|
|