Index: chrome/test/data/notifications/notification_test_utils.js |
diff --git a/chrome/test/data/notifications/notification_test_utils.js b/chrome/test/data/notifications/notification_test_utils.js |
index 464238c1dd1769069483ef93abdfd58a3e3b0051..1b69b9a11c248a3917b69abd8955d45356f706f9 100644 |
--- a/chrome/test/data/notifications/notification_test_utils.js |
+++ b/chrome/test/data/notifications/notification_test_utils.js |
@@ -2,45 +2,52 @@ |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
+var g_activated_service_worker_promise = null; |
Michael van Ouwerkerk
2015/04/15 11:02:09
nit: use camelCase for js, the entire language is
Peter Beverloo
2015/04/15 17:13:35
Done.
|
+ |
// Returns a promise that will be resolved with an activated Service |
// Worker, or rejects when the Service Worker could not be started. There |
// will be a message port to and from the worker in |messagePort|. |
function GetActivatedServiceWorker(script, scope) { |
- return navigator.serviceWorker.getRegistration(scope) |
- .then(function(registration) { |
- // Unregister any existing Service Worker. |
- if (registration) |
- return registration.unregister(); |
- }).then(function() { |
- // Register the Service Worker again. |
- return navigator.serviceWorker.register(script, { scope: scope }); |
- }).then(function(registration) { |
- if (registration.active) { |
- return registration; |
- } else if (registration.waiting || registration.installing) { |
- var worker = registration.waiting || registration.installing; |
+ if (g_activated_service_worker_promise == null) { |
+ g_activated_service_worker_promise = |
+ navigator.serviceWorker.getRegistration(scope) |
+ .then(function(registration) { |
+ // Unregister any existing Service Worker. |
+ if (registration) |
+ return registration.unregister(); |
+ }).then(function() { |
+ // Register the Service Worker again. |
+ return navigator.serviceWorker.register(script, { scope: scope }); |
+ }).then(function(registration) { |
+ if (registration.active) { |
+ return registration; |
+ } else if (registration.waiting || registration.installing) { |
+ var worker = registration.waiting || registration.installing; |
+ return new Promise(function(resolve) { |
+ worker.addEventListener('statechange', function () { |
+ if (worker.state === 'activated') |
+ resolve(registration); |
+ }); |
+ }); |
+ } else { |
+ return Promise.reject('Service Worker in invalid state.'); |
+ } |
+ }).then(function(registration) { |
return new Promise(function(resolve) { |
- worker.addEventListener('statechange', function () { |
- if (worker.state === 'activated') |
+ var channel = new MessageChannel(); |
+ channel.port1.addEventListener('message', function(event) { |
+ if (event.data == 'ready') |
resolve(registration); |
}); |
- }); |
- } else { |
- return Promise.reject('Service Worker in invalid state.'); |
- } |
- }).then(function(registration) { |
- return new Promise(function(resolve) { |
- var channel = new MessageChannel(); |
- channel.port1.addEventListener('message', function(event) { |
- if (event.data == 'ready') |
- resolve(registration); |
- }); |
- registration.active.postMessage(channel.port2, |
- [ channel.port2 ]); |
+ registration.active.postMessage(channel.port2, |
+ [ channel.port2 ]); |
- messagePort = channel.port1; |
- messagePort.start(); |
+ messagePort = channel.port1; |
+ messagePort.start(); |
+ }); |
}); |
- }); |
+ } |
+ |
+ return g_activated_service_worker_promise; |
} |