summaryrefslogtreecommitdiffstats
path: root/dom/workers/test/serviceworkers/notificationclick_focus.js
diff options
context:
space:
mode:
Diffstat (limited to 'dom/workers/test/serviceworkers/notificationclick_focus.js')
-rw-r--r--dom/workers/test/serviceworkers/notificationclick_focus.js40
1 files changed, 40 insertions, 0 deletions
diff --git a/dom/workers/test/serviceworkers/notificationclick_focus.js b/dom/workers/test/serviceworkers/notificationclick_focus.js
new file mode 100644
index 000000000..5fb73651e
--- /dev/null
+++ b/dom/workers/test/serviceworkers/notificationclick_focus.js
@@ -0,0 +1,40 @@
+// Any copyright is dedicated to the Public Domain.
+// http://creativecommons.org/publicdomain/zero/1.0/
+//
+
+function promisifyTimerFocus(client, delay) {
+ return new Promise(function(resolve, reject) {
+ setTimeout(function() {
+ client.focus().then(resolve, reject);
+ }, delay);
+ });
+}
+
+onnotificationclick = function(e) {
+ e.waitUntil(self.clients.matchAll().then(function(clients) {
+ if (clients.length === 0) {
+ dump("********************* CLIENTS LIST EMPTY! Test will timeout! ***********************\n");
+ return Promise.resolve();
+ }
+
+ var immediatePromise = clients[0].focus();
+ var withinTimeout = promisifyTimerFocus(clients[0], 100);
+
+ var afterTimeout = promisifyTimerFocus(clients[0], 2000).then(function() {
+ throw "Should have failed!";
+ }, function() {
+ return Promise.resolve();
+ });
+
+ return Promise.all([immediatePromise, withinTimeout, afterTimeout]).then(function() {
+ clients.forEach(function(client) {
+ client.postMessage({ok: true});
+ });
+ }).catch(function(e) {
+ dump("Error " + e + "\n");
+ clients.forEach(function(client) {
+ client.postMessage({ok: false});
+ });
+ });
+ }));
+}