summaryrefslogtreecommitdiffstats
path: root/dom/cache/test/mochitest/serviceworker_driver.js
blob: e5e8e47caac59e5e0d268d783a3cefa1631cda9f (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
// Any copyright is dedicated to the Public Domain.
// http://creativecommons.org/publicdomain/zero/1.0/

function serviceWorkerTestExec(testFile) {
  var isB2G = !navigator.userAgent.includes("Android") &&
              /Mobile|Tablet/.test(navigator.userAgent);
  if (isB2G) {
    // TODO B2G doesn't support running service workers for now due to bug 1137683.
    dump("Skipping running the test in SW until bug 1137683 gets fixed.\n");
    return Promise.resolve();
  }
  return new Promise(function(resolve, reject) {
    function setupSW(registration) {
      var worker = registration.waiting ||
                   registration.active;

      window.addEventListener("message",function onMessage(event) {
        if (event.data.context != "ServiceWorker") {
          return;
        }
        if (event.data.type == 'finish') {
          window.removeEventListener("message", onMessage);
          registration.unregister()
            .then(resolve)
            .catch(reject);
        } else if (event.data.type == 'status') {
          ok(event.data.status, event.data.context + ": " + event.data.msg);
        }
      }, false);

      worker.onerror = reject;

      var iframe = document.createElement("iframe");
      iframe.src = "message_receiver.html";
      iframe.onload = function() {
        worker.postMessage({ script: testFile });
      };
      document.body.appendChild(iframe);
    }

    navigator.serviceWorker.ready.then(setupSW);
    navigator.serviceWorker.register("worker_wrapper.js", {scope: "."});
  });
}