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) |