summaryrefslogtreecommitdiffstats
path: root/dom/push/test/test_multiple_register.html
blob: 3a963b7cd4e8cfdba06af7eb34861b5581ad8037 (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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
<!DOCTYPE HTML>
<html>
<!--
Bug 1038811: Push tests.

Any copyright is dedicated to the Public Domain.
http://creativecommons.org/licenses/publicdomain/

-->
<head>
  <title>Test for Bug 1038811</title>
  <script src="/tests/SimpleTest/SimpleTest.js"></script>
  <script type="text/javascript" src="/tests/dom/push/test/test_utils.js"></script>
  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
  <meta http-equiv="Content-type" content="text/html;charset=UTF-8">
</head>
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1038811">Mozilla Bug 1038811</a>
<p id="display"></p>
<div id="content" style="display: none">

</div>
<pre id="test">
</pre>

<script class="testbody" type="text/javascript">
  function debug(str) {
  //  console.log(str + "\n");
  }

  var registration;

  function start() {
    return navigator.serviceWorker.register("worker.js?" + (Math.random()), {scope: "."})
    .then((swr) => {
      registration = swr;
      return waitForActive(registration);
    });
  }

  function unregister() {
    return registration.unregister().then(function(result) {
      ok(result, "Unregister should return true.");
    }, function(e) {
      dump("Unregistering the SW failed with " + e + "\n");
    });
  }

  function setupPushNotification(swr) {
    var p = new Promise(function(res, rej) {
      swr.pushManager.subscribe().then(
        function(pushSubscription) {
          ok(true, "successful registered for push notification");
          res({swr, pushSubscription});
        }, function(error) {
          ok(false, "could not register for push notification");
          res(null);
        }
        );
    });
    return p;
  }

  function setupSecondEndpoint(result) {
    var p = new Promise(function(res, rej) {
      result.swr.pushManager.subscribe().then(
        function(pushSubscription) {
          ok(result.pushSubscription.endpoint == pushSubscription.endpoint, "setupSecondEndpoint - Got the same endpoint back.");
          res(result);
        }, function(error) {
          ok(false, "could not register for push notification");
          res(null);
        }
        );
    });
    return p;
  }

  function getEndpointExpectNull(swr) {
    var p = new Promise(function(res, rej) {
      swr.pushManager.getSubscription().then(
        function(pushSubscription) {
          ok(pushSubscription == null, "getEndpoint should return null when app not subscribed.");
          res(swr);
        }, function(error) {
          ok(false, "could not register for push notification");
          res(null);
        }
        );
    });
    return p;
  }

  function getEndpoint(result) {
    var p = new Promise(function(res, rej) {
      result.swr.pushManager.getSubscription().then(
        function(pushSubscription) {
          ok(result.pushSubscription.endpoint == pushSubscription.endpoint, "getEndpoint - Got the same endpoint back.");

          res(pushSubscription);
        }, function(error) {
          ok(false, "could not register for push notification");
          res(null);
        }
        );
    });
    return p;
  }

  function unregisterPushNotification(pushSubscription) {
    return pushSubscription.unsubscribe();
  }

  function runTest() {
    start()
    .then(getEndpointExpectNull)
    .then(setupPushNotification)
    .then(setupSecondEndpoint)
    .then(getEndpoint)
    .then(unregisterPushNotification)
    .then(unregister)
    .catch(function(e) {
      ok(false, "Some test failed with error " + e);
    }).then(SimpleTest.finish);
  }

  setupPrefsAndMockSocket(new MockWebSocket())
    .then(_ => setPushPermission(true))
    .then(_ => runTest());
  SimpleTest.waitForExplicitFinish();
</script>
</body>
</html>