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 |
new file mode 100644 |
index 0000000000000000000000000000000000000000..464238c1dd1769069483ef93abdfd58a3e3b0051 |
--- /dev/null |
+++ b/chrome/test/data/notifications/notification_test_utils.js |
@@ -0,0 +1,46 @@ |
+// Copyright 2015 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+// 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; |
+ 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) { |
+ var channel = new MessageChannel(); |
+ channel.port1.addEventListener('message', function(event) { |
+ if (event.data == 'ready') |
+ resolve(registration); |
+ }); |
+ |
+ registration.active.postMessage(channel.port2, |
+ [ channel.port2 ]); |
+ |
+ messagePort = channel.port1; |
+ messagePort.start(); |
+ }); |
+ }); |
+} |