summaryrefslogtreecommitdiffstats
path: root/dom/workers/test/serviceworkers/notificationclick_focus.js
blob: 5fb73651ec2f3e7927d22f4f2feea0a827f9413d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
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});
      });
    });
  }));
}