summaryrefslogtreecommitdiffstats
path: root/devtools/client/framework/test/browser_toolbox_options_enable_serviceworkers_testing.html
blob: 06b628158848b3768a2166823e0bbd87cec0a596 (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
<!DOCTYPE html>
<html>
  <head>
    <title>browser_toolbox_options_enable_serviceworkers_testing.html</title>
    <meta charset="UTF-8">
  </head>
  <body>
    <h1>SW-test</h1>
    <script>
      function register() {
        return Promise.resolve().then(function() {
          // While ServiceWorkerContainer.register() returns a promise, it's
          // still wrapped with a .then() because navigator.serviceWorker is not
          // defined in insecure contexts unless service worker testing is
          // enabled, so dereferencing it would throw a ReferenceError (which
          // is then caught in the .catch() clause).
          return window.navigator.serviceWorker.register("serviceworker.js");
        }).then(() => {
          return {success: true};
        }).catch(() => {
          return {success: false};
        });
      }

      function unregister() {
        return Promise.resolve().then(function() {
          return window.navigator.serviceWorker.getRegistration();
        }).then(registration => {
          return registration.unregister().then(result => {
            return {success: !!result};
          });
        }).catch(_ => {
          return {success: false};
        });
      }

      function iframeRegisterAndUnregister() {
        var frame = window.document.createElement("iframe");
        var promise = new Promise(function(resolve) {
          frame.addEventListener("load", function() {
            Promise.resolve().then(_ => {
              return frame.contentWindow.navigator.serviceWorker.register("serviceworker.js");
            }).then(swr => {
              return swr.unregister();
            }).then(_ => {
              frame.remove();
              resolve({success: true});
            }).catch(() => {
              resolve({success: false});
            });
          }, {once: true});
        });
        frame.src = "browser_toolbox_options_enabled_serviceworkers_testing.html";
        window.document.body.appendChild(frame);
        return promise;
      }

      window.addEventListener("message", function(event) {
        var response;
        switch (event.data) {
          case "devtools:sw-test:register": {
            response = register();
            break;
          }
          case "devtools:sw-test:unregister": {
            response = unregister();
            break;
          }
          case "devtools:sw-test:iframe:register-and-unregister": {
            response = iframeRegisterAndUnregister();
            break;
          }
        }
        response.then(data => {
          event.ports[0].postMessage(data);
          event.ports[0].close();
        });
      });
    </script>
  </body>
</html>