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

Unified Diff: content/browser/service_worker/service_worker_registration.cc

Issue 1647323002: Move activate event dispatching out of ServiceWorkerVersion. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@refactor-install-event
Patch Set: Created 4 years, 11 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 side-by-side diff with in-line comments
Download patch
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)

Powered by Google App Engine
This is Rietveld 408576698