DXR is a code search and navigation tool aimed at making sense of large projects. It supports full-text and regex searches as well as structural queries.

Mercurial (c68fe15a81fc)

VCS Links

Line Code
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
<!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(_ => runTest());
  SpecialPowers.addPermission("desktop-notification", true, document);
  SimpleTest.waitForExplicitFinish();
</script>
</body>
</html>