Index: content/browser/service_worker/service_worker_context_wrapper.cc |
diff --git a/content/browser/service_worker/service_worker_context_wrapper.cc b/content/browser/service_worker/service_worker_context_wrapper.cc |
index db7262236633fd80ad3489a9217ff3a4a778b386..7d20899a9decb634ea2dcd10ea442f4fabeecbb6 100644 |
--- a/content/browser/service_worker/service_worker_context_wrapper.cc |
+++ b/content/browser/service_worker/service_worker_context_wrapper.cc |
@@ -275,6 +275,29 @@ void ServiceWorkerContextWrapper::StartServiceWorker( |
pattern, base::Bind(&StartActiveWorkerOnIO, callback)); |
} |
+void ServiceWorkerContextWrapper::SimulateSkipWaiting(int64_t version_id) { |
+ if (!BrowserThread::CurrentlyOn(BrowserThread::IO)) { |
+ BrowserThread::PostTask( |
+ BrowserThread::IO, FROM_HERE, |
+ base::Bind(&ServiceWorkerContextWrapper::SimulateSkipWaiting, this, |
+ version_id)); |
+ return; |
+ } |
+ if (!context_core_.get()) { |
+ LOG(ERROR) << "ServiceWorkerContextCore is no longer alive."; |
+ return; |
+ } |
+ ServiceWorkerVersion* version = GetLiveVersion(version_id); |
+ if (!version || version->skip_waiting()) |
+ return; |
+ ServiceWorkerRegistration* registration = |
+ GetLiveRegistration(version->registration_id()); |
+ if (!registration || version != registration->waiting_version()) |
+ return; |
+ version->set_skip_waiting(true); |
+ registration->ActivateWaitingVersionWhenReady(); |
+} |
+ |
static void DidFindRegistrationForDocument( |
const net::CompletionCallback& callback, |
ServiceWorkerStatusCode status, |