Chromium Code Reviews| 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; |
| } |