summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/service-workers/stub-3.2-navigator-service-worker.html
blob: 2654c60f06614339445d1cfc17be5d95138ad929 (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
<!DOCTYPE html>
<html>
<title>Service Workers: navigator.serviceWorker</title>
    <head>
        <link rel="help" href="https://w3c.github.io/ServiceWorker/#navigator-service-worker">
        <script src="/resources/testharness.js"></script>
        <script src="/resources/testharnessreport.js"></script>

        <script src=/resources/WebIDLParser.js></script>
        <script src=/resources/idlharness.js></script>

    </head>
    <body>

<!--
The `serviceWorker` attribute of the [Navigator][1] interface must return an
instance of the `ServiceWorkerContainer` interface, which provides access to
registration, removal, upgrade, and communication with Service Workers that are
(or will become) active for the current document. Communication with these
workers is provided via standard [HTML5 messaging APIs][2], and [messaging
occurs as per usual with Web Workers][3].
-->
<script type=text/plain id="idl_0">
partial interface Navigator {
  readonly attribute ServiceWorkerContainer serviceWorker;
};

interface ServiceWorkerContainer : EventTarget {
  [Unforgeable] readonly attribute ServiceWorker? installing;
  [Unforgeable] readonly attribute ServiceWorker? waiting;
  [Unforgeable] readonly attribute ServiceWorker? active;
  [Unforgeable] readonly attribute ServiceWorker? controller;
  readonly attribute Promise<ServiceWorker> ready;

  Promise<sequence<ServiceWorker>?> getAll();
  Promise<ServiceWorker> register(DOMString url, optional RegistrationOptionList options);
  Promise<any> unregister(DOMString? scope);

  // events
  attribute EventHandler onupdatefound;
  attribute EventHandler oncontrollerchange;
  attribute EventHandler onreloadpage;
  attribute EventHandler onerror;
};

dictionary RegistrationOptionList {
  DOMString scope = "/*";
};

interface ReloadPageEvent : Event {
  void waitUntil(Promise<any> f);
};
</script>

<!--
[1]: http://goo.gl/I7WAhg
[2]: http://www.whatwg.org/specs/web-apps/current-work/multipage/web-messaging.html
[3]: http://www.w3.org/TR/workers/#dom-worker-postmessage
-->


    <script type=text/plain id="untested_idls">
        interface ServiceWorker {};
        interface EventHandler {};
        interface EventTarget {};
        interface Event {};
    </pre>

    <script>
        var idl_array = new IdlArray();
        idl_array.add_untested_idls(document.getElementById("untested_idls").textContent);
        idl_array.add_idls(document.getElementById("idl_0").textContent);
        idl_array.add_objects({
            Navigator: ["throw new Error ('No object defined for the Navigator interface')"],
            ServiceWorkerContainer: ["throw new Error ('No object defined for the ServiceWorkerContainer interface')"],
            RegistrationOptionList: ["throw new Error ('No object defined for the RegistrationOptionList dictionary')"],
            ReloadPageEvent: ["throw new Error ('No object defined for the ReloadPageEvent interface')"]
        });
        idl_array.test();
    </script>

    </body>
</html>