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..eab4881de6d5e4dff48a964b1749e71ff7904093 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 activatedServiceWorkerPromise = null; |
+ |
// 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 (activatedServiceWorkerPromise == null) { |
+ activatedServiceWorkerPromise = |
+ 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 activatedServiceWorkerPromise; |
} |