Chromium Code Reviews| 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..7b25ae312e5efa19bec21f80d9f845884750d4f4 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,28 @@ 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()) |
| + << activating_version->status(); |
|
nhiroki
2016/02/01 04:23:19
"<< activating_version->status()" wouldn't be nece
Marijn Kruisselbrink
2016/02/01 19:43:08
Good point. Not sure why the old code in SWVersion
|
| + 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) |