Align initEvent / initCustomEvent / initMessageEvent with the latest specification
authorcdumez@apple.com <cdumez@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 7 Mar 2017 17:03:16 +0000 (17:03 +0000)
committercdumez@apple.com <cdumez@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 7 Mar 2017 17:03:16 +0000 (17:03 +0000)
https://bugs.webkit.org/show_bug.cgi?id=169176

Reviewed by Alex Christensen.

LayoutTests/imported/w3c:

Re-sync web-platform tests from upstream after:
- https://github.com/w3c/web-platform-tests/pull/5043
- https://github.com/w3c/web-platform-tests/pull/5044

* web-platform-tests/dom/events/CustomEvent-expected.txt:
* web-platform-tests/dom/events/CustomEvent.html:
* web-platform-tests/dom/events/Event-initEvent-expected.txt:
* web-platform-tests/dom/events/Event-initEvent.html:
* web-platform-tests/dom/interfaces-expected.txt:
* web-platform-tests/dom/interfaces.html:
* web-platform-tests/html/dom/interfaces-expected.txt:
* web-platform-tests/html/dom/interfaces.html:
* web-platform-tests/html/dom/resources/interfaces.idl: Copied from LayoutTests/imported/w3c/web-platform-tests/html/dom/interfaces.html.
* web-platform-tests/html/dom/resources/untested-interfaces.idl: Added.
* web-platform-tests/html/webappapis/scripting/events/messageevent-constructor-expected.txt: Removed.
* web-platform-tests/html/webappapis/scripting/events/messageevent-constructor.html: Removed.
* web-platform-tests/html/webappapis/scripting/events/messageevent-constructor.https-expected.txt:
* web-platform-tests/html/webappapis/scripting/events/messageevent-constructor.https.html:

Source/WebCore:

Align initEvent / initCustomEvent / initMessageEvent with the latest specification
after:
- https://github.com/whatwg/dom/pull/417
- https://github.com/whatwg/html/pull/2410

In particular, the following changes were made:
- initEvent: The length property now properly returns 1 instead of 3 as only the
  first parameter is mandatory. We were already behaving correcting the the length
  property value was wrong because we forgot to drop a hack from the bindings
  generator.
- initCustomEvent: Make all parameters except the first optional. Previously, all
  parameters were mandatory so this is safe.
- initMessageEvent: Drop the custom code and mark the first parameter as mandatory.
  A side effect of dropping the custom code is that null is no longer considered as
  valid input for the last parameter. The parameter is of type sequence<> and the
  new behavior is consistent with the specification and Firefox. If it turns out to
  break existing content, I'll make the parameter nullable in a follow-up.

No new tests, updated existing tests.

* bindings/js/JSMessageEventCustom.cpp:
* bindings/scripts/CodeGeneratorJS.pm:
(GeneratePropertiesHashTable):
* dom/CustomEvent.idl:
* dom/MessageEvent.idl:

LayoutTests:

Updated existing tests to reflect behavior change.

* fast/events/init-events-expected.txt:
* fast/events/script-tests/init-events.js:
* fast/eventsource/eventsource-attribute-listeners.html:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@213517 268f45cc-cd09-0410-ab3c-d52691b4dbfc

24 files changed:
LayoutTests/ChangeLog
LayoutTests/fast/events/init-events-expected.txt
LayoutTests/fast/events/script-tests/init-events.js
LayoutTests/fast/eventsource/eventsource-attribute-listeners.html
LayoutTests/imported/w3c/ChangeLog
LayoutTests/imported/w3c/web-platform-tests/dom/events/CustomEvent-expected.txt
LayoutTests/imported/w3c/web-platform-tests/dom/events/CustomEvent.html
LayoutTests/imported/w3c/web-platform-tests/dom/events/Event-initEvent-expected.txt
LayoutTests/imported/w3c/web-platform-tests/dom/events/Event-initEvent.html
LayoutTests/imported/w3c/web-platform-tests/dom/interfaces-expected.txt
LayoutTests/imported/w3c/web-platform-tests/dom/interfaces.html
LayoutTests/imported/w3c/web-platform-tests/html/dom/interfaces-expected.txt
LayoutTests/imported/w3c/web-platform-tests/html/dom/interfaces.html
LayoutTests/imported/w3c/web-platform-tests/html/dom/resources/interfaces.idl [new file with mode: 0644]
LayoutTests/imported/w3c/web-platform-tests/html/dom/resources/untested-interfaces.idl [new file with mode: 0644]
LayoutTests/imported/w3c/web-platform-tests/html/webappapis/scripting/events/messageevent-constructor-expected.txt [deleted file]
LayoutTests/imported/w3c/web-platform-tests/html/webappapis/scripting/events/messageevent-constructor.html [deleted file]
LayoutTests/imported/w3c/web-platform-tests/html/webappapis/scripting/events/messageevent-constructor.https-expected.txt
LayoutTests/imported/w3c/web-platform-tests/html/webappapis/scripting/events/messageevent-constructor.https.html
Source/WebCore/ChangeLog
Source/WebCore/bindings/js/JSMessageEventCustom.cpp
Source/WebCore/bindings/scripts/CodeGeneratorJS.pm
Source/WebCore/dom/CustomEvent.idl
Source/WebCore/dom/MessageEvent.idl

index 99a39b0..0ddff84 100644 (file)
@@ -1,3 +1,16 @@
+2017-03-07  Chris Dumez  <cdumez@apple.com>
+
+        Align initEvent / initCustomEvent / initMessageEvent with the latest specification
+        https://bugs.webkit.org/show_bug.cgi?id=169176
+
+        Reviewed by Alex Christensen.
+
+        Updated existing tests to reflect behavior change.
+
+        * fast/events/init-events-expected.txt:
+        * fast/events/script-tests/init-events.js:
+        * fast/eventsource/eventsource-attribute-listeners.html:
+
 2017-03-07  Carlos Alberto Lopez Perez  <clopez@igalia.com>
 
         [GTK][Wayland] Update list of test failing on the Wayland release test bot.
index 68e1c97..835ccce 100644 (file)
@@ -38,20 +38,21 @@ PASS testInitEvent('Keyboard', '"a", false, true, window, "b", 1001, false, fals
 PASS testInitEvent('Keyboard', '"a", false, true, window, "b", 1001, false, false, false, false, false').pageX is 0
 PASS testInitEvent('Keyboard', '"a", false, true, window, "b", 1001, false, false, false, false, false').pageY is 0
 PASS testInitEvent('Keyboard', '"a", false, true, window, "b", 1001, false, false, false, false, false').which is 0
-PASS testInitEvent('Message', '"a", false, false, "b", "c", "d", window, null').type is 'a'
-PASS testInitEvent('Message', 'null, false, false, "b", "c", "d", window, null').type is 'null'
-PASS testInitEvent('Message', '"a", false, false, "b", "c", "d", window, null').bubbles is false
-PASS testInitEvent('Message', '"a", true, false, "b", "c", "d", window, null').bubbles is true
-PASS testInitEvent('Message', '"a", false, false, "b", "c", "d", window, null').cancelable is false
-PASS testInitEvent('Message', '"a", false, true, "b", "c", "d", window, null').cancelable is true
-PASS testInitEvent('Message', '"a", false, false, "b", "c", "d", window, null').data is 'b'
-PASS testInitEvent('Message', '"a", false, false, null, "c", "d", window, null').data is null
-PASS testInitEvent('Message', '"a", false, false, "b", "c", "d", window, null').origin is 'c'
-PASS testInitEvent('Message', '"a", false, false, "b", null, "d", window, null').origin is 'null'
-PASS testInitEvent('Message', '"a", false, false, "b", "c", "d", window, null').lastEventId is 'd'
-PASS testInitEvent('Message', '"a", false, false, "b", "c", null, window, null').lastEventId is 'null'
-PASS testInitEvent('Message', '"a", false, false, "b", "c", "d", window, null').source is window
-PASS testInitEvent('Message', '"a", false, false, "b", "c", "d", null, null').source is null
+PASS testInitEvent('Message', '"a", false, false, "b", "c", "d", window, []').type is 'a'
+PASS testInitEvent('Message', 'null, false, false, "b", "c", "d", window, []').type is 'null'
+PASS testInitEvent('Message', '"a", false, false, "b", "c", "d", window, []').bubbles is false
+PASS testInitEvent('Message', '"a", true, false, "b", "c", "d", window, []').bubbles is true
+PASS testInitEvent('Message', '"a", false, false, "b", "c", "d", window, []').cancelable is false
+PASS testInitEvent('Message', '"a", false, true, "b", "c", "d", window, []').cancelable is true
+PASS testInitEvent('Message', '"a", false, false, "b", "c", "d", window, []').data is 'b'
+PASS testInitEvent('Message', '"a", false, false, null, "c", "d", window, []').data is null
+PASS testInitEvent('Message', '"a", false, false, "b", "c", "d", window, []').origin is 'c'
+PASS testInitEvent('Message', '"a", false, false, "b", null, "d", window, []').origin is 'null'
+PASS testInitEvent('Message', '"a", false, false, "b", "c", "d", window, []').lastEventId is 'd'
+PASS testInitEvent('Message', '"a", false, false, "b", "c", null, window, []').lastEventId is 'null'
+PASS testInitEvent('Message', '"a", false, false, "b", "c", "d", window, []').source is window
+PASS testInitEvent('Message', '"a", false, false, "b", "c", "d", null, []').source is null
+PASS testInitEvent('Message', '"a", false, false, "b", "c", "d", null, []').ports is []
 PASS testInitEvent('Message', '"a", false, false, "b", "c", "d", null, channelArray').ports[0] is channel.port1
 PASS testInitEvent('Message', '"a", false, false, "b", "c", "d", null, channelArray').ports[1] is channel.port2
 PASS testInitEvent('Mouse', '"a", false, false, window, 1001, 1002, 1003, 1004, 1005, false, false, false, false, 1006, null').type is 'a'
index b2aceab..007a726 100644 (file)
@@ -55,20 +55,21 @@ shouldBe("testInitEvent('Keyboard', '\"a\", false, true, window, \"b\", 1001, fa
 shouldBe("testInitEvent('Keyboard', '\"a\", false, true, window, \"b\", 1001, false, false, false, false, false').pageY", "0");
 shouldBe("testInitEvent('Keyboard', '\"a\", false, true, window, \"b\", 1001, false, false, false, false, false').which", "0");
 
-shouldBe("testInitEvent('Message', '\"a\", false, false, \"b\", \"c\", \"d\", window, null').type", "'a'");
-shouldBe("testInitEvent('Message', 'null, false, false, \"b\", \"c\", \"d\", window, null').type", "'null'");
-shouldBe("testInitEvent('Message', '\"a\", false, false, \"b\", \"c\", \"d\", window, null').bubbles", "false");
-shouldBe("testInitEvent('Message', '\"a\", true, false, \"b\", \"c\", \"d\", window, null').bubbles", "true");
-shouldBe("testInitEvent('Message', '\"a\", false, false, \"b\", \"c\", \"d\", window, null').cancelable", "false");
-shouldBe("testInitEvent('Message', '\"a\", false, true, \"b\", \"c\", \"d\", window, null').cancelable", "true");
-shouldBe("testInitEvent('Message', '\"a\", false, false, \"b\", \"c\", \"d\", window, null').data", "'b'");
-shouldBe("testInitEvent('Message', '\"a\", false, false, null, \"c\", \"d\", window, null').data", "null");
-shouldBe("testInitEvent('Message', '\"a\", false, false, \"b\", \"c\", \"d\", window, null').origin", "'c'");
-shouldBe("testInitEvent('Message', '\"a\", false, false, \"b\", null, \"d\", window, null').origin", "'null'");
-shouldBe("testInitEvent('Message', '\"a\", false, false, \"b\", \"c\", \"d\", window, null').lastEventId", "'d'");
-shouldBe("testInitEvent('Message', '\"a\", false, false, \"b\", \"c\", null, window, null').lastEventId", "'null'");
-shouldBe("testInitEvent('Message', '\"a\", false, false, \"b\", \"c\", \"d\", window, null').source", "window");
-shouldBe("testInitEvent('Message', '\"a\", false, false, \"b\", \"c\", \"d\", null, null').source", "null");
+shouldBe("testInitEvent('Message', '\"a\", false, false, \"b\", \"c\", \"d\", window, []').type", "'a'");
+shouldBe("testInitEvent('Message', 'null, false, false, \"b\", \"c\", \"d\", window, []').type", "'null'");
+shouldBe("testInitEvent('Message', '\"a\", false, false, \"b\", \"c\", \"d\", window, []').bubbles", "false");
+shouldBe("testInitEvent('Message', '\"a\", true, false, \"b\", \"c\", \"d\", window, []').bubbles", "true");
+shouldBe("testInitEvent('Message', '\"a\", false, false, \"b\", \"c\", \"d\", window, []').cancelable", "false");
+shouldBe("testInitEvent('Message', '\"a\", false, true, \"b\", \"c\", \"d\", window, []').cancelable", "true");
+shouldBe("testInitEvent('Message', '\"a\", false, false, \"b\", \"c\", \"d\", window, []').data", "'b'");
+shouldBe("testInitEvent('Message', '\"a\", false, false, null, \"c\", \"d\", window, []').data", "null");
+shouldBe("testInitEvent('Message', '\"a\", false, false, \"b\", \"c\", \"d\", window, []').origin", "'c'");
+shouldBe("testInitEvent('Message', '\"a\", false, false, \"b\", null, \"d\", window, []').origin", "'null'");
+shouldBe("testInitEvent('Message', '\"a\", false, false, \"b\", \"c\", \"d\", window, []').lastEventId", "'d'");
+shouldBe("testInitEvent('Message', '\"a\", false, false, \"b\", \"c\", null, window, []').lastEventId", "'null'");
+shouldBe("testInitEvent('Message', '\"a\", false, false, \"b\", \"c\", \"d\", window, []').source", "window");
+shouldBe("testInitEvent('Message', '\"a\", false, false, \"b\", \"c\", \"d\", null, []').source", "null");
+shouldBe("testInitEvent('Message', '\"a\", false, false, \"b\", \"c\", \"d\", null, []').ports", "[]");
 var channel = new MessageChannel;
 var channelArray = [channel.port1, channel.port2];
 shouldBe("testInitEvent('Message', '\"a\", false, false, \"b\", \"c\", \"d\", null, channelArray').ports[0]", "channel.port1");
index 9cc72fd..88353c0 100644 (file)
@@ -36,7 +36,7 @@ else
 var flag = false;
 es.onmessage = function (e) { flag = (e.data == "hello"); };
 var evt = document.createEvent("MessageEvent");
-evt.initMessageEvent("message", false, false, "hello", null, null, null, null);
+evt.initMessageEvent("message", false, false, "hello", null, null, null, []);
 es.dispatchEvent(evt);
 if (flag) {
     log("PASS: dispatching event on an EventSource triggers attribute listener");
index 9b58cb2..cdd5d92 100644 (file)
@@ -1,3 +1,29 @@
+2017-03-07  Chris Dumez  <cdumez@apple.com>
+
+        Align initEvent / initCustomEvent / initMessageEvent with the latest specification
+        https://bugs.webkit.org/show_bug.cgi?id=169176
+
+        Reviewed by Alex Christensen.
+
+        Re-sync web-platform tests from upstream after:
+        - https://github.com/w3c/web-platform-tests/pull/5043
+        - https://github.com/w3c/web-platform-tests/pull/5044
+
+        * web-platform-tests/dom/events/CustomEvent-expected.txt:
+        * web-platform-tests/dom/events/CustomEvent.html:
+        * web-platform-tests/dom/events/Event-initEvent-expected.txt:
+        * web-platform-tests/dom/events/Event-initEvent.html:
+        * web-platform-tests/dom/interfaces-expected.txt:
+        * web-platform-tests/dom/interfaces.html:
+        * web-platform-tests/html/dom/interfaces-expected.txt:
+        * web-platform-tests/html/dom/interfaces.html:
+        * web-platform-tests/html/dom/resources/interfaces.idl: Copied from LayoutTests/imported/w3c/web-platform-tests/html/dom/interfaces.html.
+        * web-platform-tests/html/dom/resources/untested-interfaces.idl: Added.
+        * web-platform-tests/html/webappapis/scripting/events/messageevent-constructor-expected.txt: Removed.
+        * web-platform-tests/html/webappapis/scripting/events/messageevent-constructor.html: Removed.
+        * web-platform-tests/html/webappapis/scripting/events/messageevent-constructor.https-expected.txt:
+        * web-platform-tests/html/webappapis/scripting/events/messageevent-constructor.https.html:
+
 2017-03-06  Jiewen Tan  <jiewen_tan@apple.com>
 
         [WebCrypto] Implement ECDH GenerateKey operation
index 3c2481c..1f3c4e5 100644 (file)
@@ -1,3 +1,5 @@
 
-PASS CustomEvent 
+PASS CustomEvent dispatching. 
+PASS First parameter to initCustomEvent should be mandatory. 
+PASS initCustomEvent's default parameter values. 
 
index c55d592..abc6c37 100644 (file)
@@ -15,5 +15,21 @@ test(function() {
   var fooEvent = document.createEvent("CustomEvent");
   fooEvent.initEvent(type, true, true);
   target.dispatchEvent(fooEvent);
-});
+}, "CustomEvent dispatching.");
+
+test(function() {
+    var e = document.createEvent("CustomEvent");
+    assert_throws(new TypeError(), function() {
+        e.initCustomEvent();
+    });
+}, "First parameter to initCustomEvent should be mandatory.");
+
+test(function() {
+    var e = document.createEvent("CustomEvent");
+    e.initCustomEvent("foo");
+    assert_equals(e.type, "foo", "type");
+    assert_false(e.bubbles, "bubbles");
+    assert_false(e.cancelable, "cancelable");
+    assert_equals(e.detail, null, "detail");
+}, "initCustomEvent's default parameter values.");
 </script>
index 04f7465..f487bdb 100644 (file)
@@ -9,4 +9,6 @@ PASS Calling initEvent must not have an effect during dispatching.
 PASS Calling initEvent must unset the stop propagation flag. 
 PASS Calling initEvent must unset the stop immediate propagation flag. 
 PASS Calling initEvent during propagation. 
+PASS First parameter to initEvent should be mandatory. 
+PASS Tests initEvent's default parameter values. 
 
index 568232a..c6b8564 100644 (file)
@@ -116,4 +116,19 @@ async_test(function() {
 
   this.done()
 }, "Calling initEvent during propagation.")
+
+test(function() {
+  var e = document.createEvent("Event")
+  assert_throws(new TypeError(), function() {
+    e.initEvent()
+  })
+}, "First parameter to initEvent should be mandatory.")
+
+test(function() {
+  var e = document.createEvent("Event")
+  e.initEvent("type")
+  assert_equals(e.type, "type", "type")
+  assert_false(e.bubbles, "bubbles")
+  assert_false(e.cancelable, "cancelable")
+}, "Tests initEvent's default parameter values.")
 </script>
index f26771b..e9d0eac 100644 (file)
@@ -46,9 +46,7 @@ PASS Event interface: document.createEvent("Event") must inherit property "defau
 PASS Event interface: document.createEvent("Event") must have own property "isTrusted" 
 PASS Event interface: document.createEvent("Event") must inherit property "timeStamp" with the proper type (15) 
 PASS Event interface: document.createEvent("Event") must inherit property "initEvent" with the proper type (16) 
-FAIL Event interface: calling initEvent(DOMString,boolean,boolean) on document.createEvent("Event") with too few arguments must throw TypeError assert_throws: Called with 1 arguments function "function () {
-            fn.apply(obj, args);
-        }" did not throw
+PASS Event interface: calling initEvent(DOMString,boolean,boolean) on document.createEvent("Event") with too few arguments must throw TypeError 
 PASS Event must be primary interface of new Event("foo") 
 PASS Stringification of new Event("foo") 
 PASS Event interface: new Event("foo") must inherit property "type" with the proper type (0) 
@@ -68,9 +66,7 @@ PASS Event interface: new Event("foo") must inherit property "defaultPrevented"
 PASS Event interface: new Event("foo") must have own property "isTrusted" 
 PASS Event interface: new Event("foo") must inherit property "timeStamp" with the proper type (15) 
 PASS Event interface: new Event("foo") must inherit property "initEvent" with the proper type (16) 
-FAIL Event interface: calling initEvent(DOMString,boolean,boolean) on new Event("foo") with too few arguments must throw TypeError assert_throws: Called with 1 arguments function "function () {
-            fn.apply(obj, args);
-        }" did not throw
+PASS Event interface: calling initEvent(DOMString,boolean,boolean) on new Event("foo") with too few arguments must throw TypeError 
 PASS CustomEvent interface: existence and properties of interface object 
 PASS CustomEvent interface object length 
 PASS CustomEvent interface object name 
@@ -100,9 +96,7 @@ PASS Event interface: new CustomEvent("foo") must inherit property "defaultPreve
 PASS Event interface: new CustomEvent("foo") must have own property "isTrusted" 
 PASS Event interface: new CustomEvent("foo") must inherit property "timeStamp" with the proper type (15) 
 PASS Event interface: new CustomEvent("foo") must inherit property "initEvent" with the proper type (16) 
-FAIL Event interface: calling initEvent(DOMString,boolean,boolean) on new CustomEvent("foo") with too few arguments must throw TypeError assert_throws: Called with 1 arguments function "function () {
-            fn.apply(obj, args);
-        }" did not throw
+PASS Event interface: calling initEvent(DOMString,boolean,boolean) on new CustomEvent("foo") with too few arguments must throw TypeError 
 PASS EventTarget interface: existence and properties of interface object 
 PASS EventTarget interface object length 
 PASS EventTarget interface object name 
index 618eca1..a8d827b 100644 (file)
@@ -34,7 +34,7 @@ interface Event {
   [Unforgeable] readonly attribute boolean isTrusted;
   readonly attribute DOMTimeStamp timeStamp;
 
-  void initEvent(DOMString type, boolean bubbles, boolean cancelable);
+  void initEvent(DOMString type, optional boolean bubbles = false, optional boolean cancelable = false);
 };
 
 dictionary EventInit {
@@ -48,7 +48,7 @@ dictionary EventInit {
 interface CustomEvent : Event {
   readonly attribute any detail;
 
-  void initCustomEvent(DOMString type, boolean bubbles, boolean cancelable, any detail);
+  void initCustomEvent(DOMString type, optional boolean bubbles = false, optional boolean cancelable = false, optional any detail = null);
 };
 
 dictionary CustomEventInit : EventInit {
index 787144a..c4a3584 100644 (file)
@@ -8,6 +8,7 @@ CONSOLE MESSAGE: line 251: callback not yet supported
 HTML IDL tests
 
 
+PASS Test driver 
 PASS NodeList must be primary interface of document.getElementsByName("name") 
 PASS Stringification of document.getElementsByName("name") 
 PASS NodeList interface: document.getElementsByName("name") must inherit property "item" with the proper type (0) 
@@ -937,7 +938,6 @@ PASS HTMLElement interface: operation blur()
 PASS HTMLElement interface: attribute accessKey 
 FAIL HTMLElement interface: attribute accessKeyLabel assert_true: The prototype object must have a property "accessKeyLabel" expected true got false
 PASS HTMLElement interface: attribute draggable 
-FAIL HTMLElement interface: attribute dropzone assert_true: The prototype object must have a property "dropzone" expected true got false
 FAIL HTMLElement interface: attribute contextMenu assert_true: The prototype object must have a property "contextMenu" expected true got false
 PASS HTMLElement interface: attribute spellcheck 
 FAIL HTMLElement interface: operation forceSpellCheck() assert_own_property: interface prototype object missing non-static operation expected property "forceSpellCheck" missing
@@ -1023,77 +1023,76 @@ PASS HTMLElement interface: document.createElement("noscript") must inherit prop
 PASS HTMLElement interface: document.createElement("noscript") must inherit property "accessKey" with the proper type (10) 
 FAIL HTMLElement interface: document.createElement("noscript") must inherit property "accessKeyLabel" with the proper type (11) assert_inherits: property "accessKeyLabel" not found in prototype chain
 PASS HTMLElement interface: document.createElement("noscript") must inherit property "draggable" with the proper type (12) 
-FAIL HTMLElement interface: document.createElement("noscript") must inherit property "dropzone" with the proper type (13) assert_inherits: property "dropzone" not found in prototype chain
-FAIL HTMLElement interface: document.createElement("noscript") must inherit property "contextMenu" with the proper type (14) assert_inherits: property "contextMenu" not found in prototype chain
-PASS HTMLElement interface: document.createElement("noscript") must inherit property "spellcheck" with the proper type (15) 
-FAIL HTMLElement interface: document.createElement("noscript") must inherit property "forceSpellCheck" with the proper type (16) assert_inherits: property "forceSpellCheck" not found in prototype chain
-PASS HTMLElement interface: document.createElement("noscript") must inherit property "innerText" with the proper type (17) 
-PASS HTMLElement interface: document.createElement("noscript") must inherit property "onabort" with the proper type (18) 
-FAIL HTMLElement interface: document.createElement("noscript") must inherit property "onauxclick" with the proper type (19) assert_inherits: property "onauxclick" not found in prototype chain
-PASS HTMLElement interface: document.createElement("noscript") must inherit property "onblur" with the proper type (20) 
-FAIL HTMLElement interface: document.createElement("noscript") must inherit property "oncancel" with the proper type (21) assert_inherits: property "oncancel" not found in prototype chain
-PASS HTMLElement interface: document.createElement("noscript") must inherit property "oncanplay" with the proper type (22) 
-PASS HTMLElement interface: document.createElement("noscript") must inherit property "oncanplaythrough" with the proper type (23) 
-PASS HTMLElement interface: document.createElement("noscript") must inherit property "onchange" with the proper type (24) 
-PASS HTMLElement interface: document.createElement("noscript") must inherit property "onclick" with the proper type (25) 
-FAIL HTMLElement interface: document.createElement("noscript") must inherit property "onclose" with the proper type (26) assert_inherits: property "onclose" not found in prototype chain
-PASS HTMLElement interface: document.createElement("noscript") must inherit property "oncontextmenu" with the proper type (27) 
-PASS HTMLElement interface: document.createElement("noscript") must inherit property "oncuechange" with the proper type (28) 
-PASS HTMLElement interface: document.createElement("noscript") must inherit property "ondblclick" with the proper type (29) 
-PASS HTMLElement interface: document.createElement("noscript") must inherit property "ondrag" with the proper type (30) 
-PASS HTMLElement interface: document.createElement("noscript") must inherit property "ondragend" with the proper type (31) 
-PASS HTMLElement interface: document.createElement("noscript") must inherit property "ondragenter" with the proper type (32) 
-FAIL HTMLElement interface: document.createElement("noscript") must inherit property "ondragexit" with the proper type (33) assert_inherits: property "ondragexit" not found in prototype chain
-PASS HTMLElement interface: document.createElement("noscript") must inherit property "ondragleave" with the proper type (34) 
-PASS HTMLElement interface: document.createElement("noscript") must inherit property "ondragover" with the proper type (35) 
-PASS HTMLElement interface: document.createElement("noscript") must inherit property "ondragstart" with the proper type (36) 
-PASS HTMLElement interface: document.createElement("noscript") must inherit property "ondrop" with the proper type (37) 
-PASS HTMLElement interface: document.createElement("noscript") must inherit property "ondurationchange" with the proper type (38) 
-PASS HTMLElement interface: document.createElement("noscript") must inherit property "onemptied" with the proper type (39) 
-PASS HTMLElement interface: document.createElement("noscript") must inherit property "onended" with the proper type (40) 
-PASS HTMLElement interface: document.createElement("noscript") must inherit property "onerror" with the proper type (41) 
-PASS HTMLElement interface: document.createElement("noscript") must inherit property "onfocus" with the proper type (42) 
-PASS HTMLElement interface: document.createElement("noscript") must inherit property "oninput" with the proper type (43) 
-PASS HTMLElement interface: document.createElement("noscript") must inherit property "oninvalid" with the proper type (44) 
-PASS HTMLElement interface: document.createElement("noscript") must inherit property "onkeydown" with the proper type (45) 
-PASS HTMLElement interface: document.createElement("noscript") must inherit property "onkeypress" with the proper type (46) 
-PASS HTMLElement interface: document.createElement("noscript") must inherit property "onkeyup" with the proper type (47) 
-PASS HTMLElement interface: document.createElement("noscript") must inherit property "onload" with the proper type (48) 
-PASS HTMLElement interface: document.createElement("noscript") must inherit property "onloadeddata" with the proper type (49) 
-PASS HTMLElement interface: document.createElement("noscript") must inherit property "onloadedmetadata" with the proper type (50) 
-PASS HTMLElement interface: document.createElement("noscript") must inherit property "onloadstart" with the proper type (51) 
-PASS HTMLElement interface: document.createElement("noscript") must inherit property "onmousedown" with the proper type (52) 
-PASS HTMLElement interface: document.createElement("noscript") must inherit property "onmouseenter" with the proper type (53) 
-PASS HTMLElement interface: document.createElement("noscript") must inherit property "onmouseleave" with the proper type (54) 
-PASS HTMLElement interface: document.createElement("noscript") must inherit property "onmousemove" with the proper type (55) 
-PASS HTMLElement interface: document.createElement("noscript") must inherit property "onmouseout" with the proper type (56) 
-PASS HTMLElement interface: document.createElement("noscript") must inherit property "onmouseover" with the proper type (57) 
-PASS HTMLElement interface: document.createElement("noscript") must inherit property "onmouseup" with the proper type (58) 
-PASS HTMLElement interface: document.createElement("noscript") must inherit property "onmousewheel" with the proper type (59) 
-PASS HTMLElement interface: document.createElement("noscript") must inherit property "onpause" with the proper type (60) 
-PASS HTMLElement interface: document.createElement("noscript") must inherit property "onplay" with the proper type (61) 
-PASS HTMLElement interface: document.createElement("noscript") must inherit property "onplaying" with the proper type (62) 
-PASS HTMLElement interface: document.createElement("noscript") must inherit property "onprogress" with the proper type (63) 
-PASS HTMLElement interface: document.createElement("noscript") must inherit property "onratechange" with the proper type (64) 
-PASS HTMLElement interface: document.createElement("noscript") must inherit property "onreset" with the proper type (65) 
-PASS HTMLElement interface: document.createElement("noscript") must inherit property "onresize" with the proper type (66) 
-PASS HTMLElement interface: document.createElement("noscript") must inherit property "onscroll" with the proper type (67) 
-PASS HTMLElement interface: document.createElement("noscript") must inherit property "onseeked" with the proper type (68) 
-PASS HTMLElement interface: document.createElement("noscript") must inherit property "onseeking" with the proper type (69) 
-PASS HTMLElement interface: document.createElement("noscript") must inherit property "onselect" with the proper type (70) 
-FAIL HTMLElement interface: document.createElement("noscript") must inherit property "onshow" with the proper type (71) assert_inherits: property "onshow" not found in prototype chain
-PASS HTMLElement interface: document.createElement("noscript") must inherit property "onstalled" with the proper type (72) 
-PASS HTMLElement interface: document.createElement("noscript") must inherit property "onsubmit" with the proper type (73) 
-PASS HTMLElement interface: document.createElement("noscript") must inherit property "onsuspend" with the proper type (74) 
-PASS HTMLElement interface: document.createElement("noscript") must inherit property "ontimeupdate" with the proper type (75) 
-PASS HTMLElement interface: document.createElement("noscript") must inherit property "ontoggle" with the proper type (76) 
-PASS HTMLElement interface: document.createElement("noscript") must inherit property "onvolumechange" with the proper type (77) 
-PASS HTMLElement interface: document.createElement("noscript") must inherit property "onwaiting" with the proper type (78) 
-PASS HTMLElement interface: document.createElement("noscript") must inherit property "oncopy" with the proper type (79) 
-PASS HTMLElement interface: document.createElement("noscript") must inherit property "oncut" with the proper type (80) 
-PASS HTMLElement interface: document.createElement("noscript") must inherit property "onpaste" with the proper type (81) 
-PASS HTMLElement interface: document.createElement("noscript") must inherit property "contentEditable" with the proper type (82) 
-PASS HTMLElement interface: document.createElement("noscript") must inherit property "isContentEditable" with the proper type (83) 
+FAIL HTMLElement interface: document.createElement("noscript") must inherit property "contextMenu" with the proper type (13) assert_inherits: property "contextMenu" not found in prototype chain
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "spellcheck" with the proper type (14) 
+FAIL HTMLElement interface: document.createElement("noscript") must inherit property "forceSpellCheck" with the proper type (15) assert_inherits: property "forceSpellCheck" not found in prototype chain
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "innerText" with the proper type (16) 
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "onabort" with the proper type (17) 
+FAIL HTMLElement interface: document.createElement("noscript") must inherit property "onauxclick" with the proper type (18) assert_inherits: property "onauxclick" not found in prototype chain
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "onblur" with the proper type (19) 
+FAIL HTMLElement interface: document.createElement("noscript") must inherit property "oncancel" with the proper type (20) assert_inherits: property "oncancel" not found in prototype chain
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "oncanplay" with the proper type (21) 
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "oncanplaythrough" with the proper type (22) 
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "onchange" with the proper type (23) 
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "onclick" with the proper type (24) 
+FAIL HTMLElement interface: document.createElement("noscript") must inherit property "onclose" with the proper type (25) assert_inherits: property "onclose" not found in prototype chain
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "oncontextmenu" with the proper type (26) 
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "oncuechange" with the proper type (27) 
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "ondblclick" with the proper type (28) 
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "ondrag" with the proper type (29) 
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "ondragend" with the proper type (30) 
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "ondragenter" with the proper type (31) 
+FAIL HTMLElement interface: document.createElement("noscript") must inherit property "ondragexit" with the proper type (32) assert_inherits: property "ondragexit" not found in prototype chain
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "ondragleave" with the proper type (33) 
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "ondragover" with the proper type (34) 
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "ondragstart" with the proper type (35) 
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "ondrop" with the proper type (36) 
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "ondurationchange" with the proper type (37) 
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "onemptied" with the proper type (38) 
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "onended" with the proper type (39) 
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "onerror" with the proper type (40) 
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "onfocus" with the proper type (41) 
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "oninput" with the proper type (42) 
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "oninvalid" with the proper type (43) 
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "onkeydown" with the proper type (44) 
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "onkeypress" with the proper type (45) 
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "onkeyup" with the proper type (46) 
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "onload" with the proper type (47) 
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "onloadeddata" with the proper type (48) 
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "onloadedmetadata" with the proper type (49) 
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "onloadstart" with the proper type (50) 
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "onmousedown" with the proper type (51) 
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "onmouseenter" with the proper type (52) 
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "onmouseleave" with the proper type (53) 
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "onmousemove" with the proper type (54) 
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "onmouseout" with the proper type (55) 
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "onmouseover" with the proper type (56) 
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "onmouseup" with the proper type (57) 
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "onmousewheel" with the proper type (58) 
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "onpause" with the proper type (59) 
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "onplay" with the proper type (60) 
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "onplaying" with the proper type (61) 
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "onprogress" with the proper type (62) 
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "onratechange" with the proper type (63) 
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "onreset" with the proper type (64) 
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "onresize" with the proper type (65) 
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "onscroll" with the proper type (66) 
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "onseeked" with the proper type (67) 
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "onseeking" with the proper type (68) 
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "onselect" with the proper type (69) 
+FAIL HTMLElement interface: document.createElement("noscript") must inherit property "onshow" with the proper type (70) assert_inherits: property "onshow" not found in prototype chain
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "onstalled" with the proper type (71) 
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "onsubmit" with the proper type (72) 
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "onsuspend" with the proper type (73) 
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "ontimeupdate" with the proper type (74) 
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "ontoggle" with the proper type (75) 
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "onvolumechange" with the proper type (76) 
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "onwaiting" with the proper type (77) 
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "oncopy" with the proper type (78) 
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "oncut" with the proper type (79) 
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "onpaste" with the proper type (80) 
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "contentEditable" with the proper type (81) 
+PASS HTMLElement interface: document.createElement("noscript") must inherit property "isContentEditable" with the proper type (82) 
 PASS Element interface: document.createElement("noscript") must inherit property "namespaceURI" with the proper type (0) 
 PASS Element interface: document.createElement("noscript") must inherit property "prefix" with the proper type (1) 
 PASS Element interface: document.createElement("noscript") must inherit property "localName" with the proper type (2) 
@@ -5026,15 +5025,15 @@ PASS Window interface: attribute onpageshow
 PASS Window interface: attribute onpopstate 
 PASS Window interface: attribute onstorage 
 PASS Window interface: attribute onunload 
+FAIL Window interface: attribute origin assert_own_property: The global object must have a property "origin" expected property "origin" missing
 PASS Window interface: operation btoa(DOMString) 
 PASS Window interface: operation atob(DOMString) 
-PASS Window interface: operation setTimeout(Function,long,any) 
-PASS Window interface: operation setTimeout(DOMString,long,any) 
+PASS Window interface: operation setTimeout(TimerHandler,long,any) 
 PASS Window interface: operation clearTimeout(long) 
-PASS Window interface: operation setInterval(Function,long,any) 
-PASS Window interface: operation setInterval(DOMString,long,any) 
+PASS Window interface: operation setInterval(TimerHandler,long,any) 
 PASS Window interface: operation clearInterval(long) 
-FAIL Window interface: operation createImageBitmap(ImageBitmapSource,long,long,long,long) assert_own_property: global object missing non-static operation expected property "createImageBitmap" missing
+FAIL Window interface: operation createImageBitmap(ImageBitmapSource,ImageBitmapOptions) assert_own_property: global object missing non-static operation expected property "createImageBitmap" missing
+FAIL Window interface: operation createImageBitmap(ImageBitmapSource,long,long,long,long,ImageBitmapOptions) assert_own_property: global object missing non-static operation expected property "createImageBitmap" missing
 PASS Window interface: attribute sessionStorage 
 PASS Window interface: attribute localStorage 
 PASS Window must be primary interface of window 
@@ -5154,24 +5153,23 @@ PASS Window interface: window must inherit property "onpageshow" with the proper
 PASS Window interface: window must inherit property "onpopstate" with the proper type (109) 
 PASS Window interface: window must inherit property "onstorage" with the proper type (110) 
 PASS Window interface: window must inherit property "onunload" with the proper type (111) 
-PASS Window interface: window must inherit property "btoa" with the proper type (112) 
+FAIL Window interface: window must inherit property "origin" with the proper type (112) assert_own_property: expected property "origin" missing
+PASS Window interface: window must inherit property "btoa" with the proper type (113) 
 PASS Window interface: calling btoa(DOMString) on window with too few arguments must throw TypeError 
-PASS Window interface: window must inherit property "atob" with the proper type (113
+PASS Window interface: window must inherit property "atob" with the proper type (114
 PASS Window interface: calling atob(DOMString) on window with too few arguments must throw TypeError 
-PASS Window interface: window must inherit property "setTimeout" with the proper type (114) 
-PASS Window interface: calling setTimeout(Function,long,any) on window with too few arguments must throw TypeError 
 PASS Window interface: window must inherit property "setTimeout" with the proper type (115) 
-PASS Window interface: calling setTimeout(DOMString,long,any) on window with too few arguments must throw TypeError 
+PASS Window interface: calling setTimeout(TimerHandler,long,any) on window with too few arguments must throw TypeError 
 PASS Window interface: window must inherit property "clearTimeout" with the proper type (116) 
 PASS Window interface: calling clearTimeout(long) on window with too few arguments must throw TypeError 
 PASS Window interface: window must inherit property "setInterval" with the proper type (117) 
-PASS Window interface: calling setInterval(Function,long,any) on window with too few arguments must throw TypeError 
-PASS Window interface: window must inherit property "setInterval" with the proper type (118) 
-PASS Window interface: calling setInterval(DOMString,long,any) on window with too few arguments must throw TypeError 
-PASS Window interface: window must inherit property "clearInterval" with the proper type (119) 
+PASS Window interface: calling setInterval(TimerHandler,long,any) on window with too few arguments must throw TypeError 
+PASS Window interface: window must inherit property "clearInterval" with the proper type (118) 
 PASS Window interface: calling clearInterval(long) on window with too few arguments must throw TypeError 
+FAIL Window interface: window must inherit property "createImageBitmap" with the proper type (119) assert_own_property: expected property "createImageBitmap" missing
+FAIL Window interface: calling createImageBitmap(ImageBitmapSource,ImageBitmapOptions) on window with too few arguments must throw TypeError assert_own_property: expected property "createImageBitmap" missing
 FAIL Window interface: window must inherit property "createImageBitmap" with the proper type (120) assert_own_property: expected property "createImageBitmap" missing
-FAIL Window interface: calling createImageBitmap(ImageBitmapSource,long,long,long,long) on window with too few arguments must throw TypeError assert_own_property: expected property "createImageBitmap" missing
+FAIL Window interface: calling createImageBitmap(ImageBitmapSource,long,long,long,long,ImageBitmapOptions) on window with too few arguments must throw TypeError assert_own_property: expected property "createImageBitmap" missing
 PASS Window interface: window must inherit property "sessionStorage" with the proper type (121) 
 PASS Window interface: window must inherit property "localStorage" with the proper type (122) 
 PASS EventTarget interface: window must inherit property "addEventListener" with the proper type (0) 
@@ -5474,7 +5472,36 @@ PASS MessageEvent interface: attribute origin
 PASS MessageEvent interface: attribute lastEventId 
 PASS MessageEvent interface: attribute source 
 PASS MessageEvent interface: attribute ports 
-FAIL MessageEvent interface: operation initMessageEvent(DOMString,boolean,boolean,any,DOMString,DOMString,[object Object],[object Object],[object Object]) assert_equals: property has wrong .length expected 8 but got 0
+PASS MessageEvent interface: operation initMessageEvent(DOMString,boolean,boolean,any,DOMString,DOMString,[object Object],[object Object],[object Object]) 
+PASS MessageEvent must be primary interface of new MessageEvent("message", { data: 5 }) 
+PASS Stringification of new MessageEvent("message", { data: 5 }) 
+PASS MessageEvent interface: new MessageEvent("message", { data: 5 }) must inherit property "data" with the proper type (0) 
+PASS MessageEvent interface: new MessageEvent("message", { data: 5 }) must inherit property "origin" with the proper type (1) 
+PASS MessageEvent interface: new MessageEvent("message", { data: 5 }) must inherit property "lastEventId" with the proper type (2) 
+PASS MessageEvent interface: new MessageEvent("message", { data: 5 }) must inherit property "source" with the proper type (3) 
+FAIL MessageEvent interface: new MessageEvent("message", { data: 5 }) must inherit property "ports" with the proper type (4) Unrecognized type [object Object]
+PASS MessageEvent interface: new MessageEvent("message", { data: 5 }) must inherit property "initMessageEvent" with the proper type (5) 
+PASS MessageEvent interface: calling initMessageEvent(DOMString,boolean,boolean,any,DOMString,DOMString,[object Object],[object Object],[object Object]) on new MessageEvent("message", { data: 5 }) with too few arguments must throw TypeError 
+PASS Event interface: new MessageEvent("message", { data: 5 }) must inherit property "type" with the proper type (0) 
+PASS Event interface: new MessageEvent("message", { data: 5 }) must inherit property "target" with the proper type (1) 
+PASS Event interface: new MessageEvent("message", { data: 5 }) must inherit property "currentTarget" with the proper type (2) 
+PASS Event interface: new MessageEvent("message", { data: 5 }) must inherit property "NONE" with the proper type (3) 
+PASS Event interface: new MessageEvent("message", { data: 5 }) must inherit property "CAPTURING_PHASE" with the proper type (4) 
+PASS Event interface: new MessageEvent("message", { data: 5 }) must inherit property "AT_TARGET" with the proper type (5) 
+PASS Event interface: new MessageEvent("message", { data: 5 }) must inherit property "BUBBLING_PHASE" with the proper type (6) 
+PASS Event interface: new MessageEvent("message", { data: 5 }) must inherit property "eventPhase" with the proper type (7) 
+PASS Event interface: new MessageEvent("message", { data: 5 }) must inherit property "stopPropagation" with the proper type (8) 
+PASS Event interface: new MessageEvent("message", { data: 5 }) must inherit property "stopImmediatePropagation" with the proper type (9) 
+PASS Event interface: new MessageEvent("message", { data: 5 }) must inherit property "bubbles" with the proper type (10) 
+PASS Event interface: new MessageEvent("message", { data: 5 }) must inherit property "cancelable" with the proper type (11) 
+PASS Event interface: new MessageEvent("message", { data: 5 }) must inherit property "preventDefault" with the proper type (12) 
+PASS Event interface: new MessageEvent("message", { data: 5 }) must inherit property "defaultPrevented" with the proper type (13) 
+PASS Event interface: new MessageEvent("message", { data: 5 }) must have own property "isTrusted" 
+PASS Event interface: new MessageEvent("message", { data: 5 }) must inherit property "timeStamp" with the proper type (15) 
+PASS Event interface: new MessageEvent("message", { data: 5 }) must inherit property "initEvent" with the proper type (16) 
+FAIL Event interface: calling initEvent(DOMString,boolean,boolean) on new MessageEvent("message", { data: 5 }) with too few arguments must throw TypeError assert_throws: Called with 1 arguments function "function () {
+            fn.apply(obj, args);
+        }" did not throw
 PASS EventSource interface: existence and properties of interface object 
 PASS EventSource interface object length 
 PASS EventSource interface object name 
index 46114bb..dc751e0 100644 (file)
@@ -1,6 +1,6 @@
 <!doctype html>
 <meta charset=utf-8>
-<!--  WARNING: These tests are preliminary and probably partly incorrect.   -->
+<!-- WARNING: These tests are preliminary and probably partly incorrect.  -->
 <title>HTML IDL tests</title>
 <meta name=timeout content=long>
 <script src=/resources/testharness.js></script>
 <h1>HTML IDL tests</h1>
 <div id=log></div>
 
-<script type=text/plain class=untested>
-[Constructor(DOMString type, optional EventInit eventInitDict)/*,
- Exposed=(Window,Worker)*/]
-interface Event {
-  readonly attribute DOMString type;
-  readonly attribute EventTarget? target;
-  readonly attribute EventTarget? currentTarget;
-
-  const unsigned short NONE = 0;
-  const unsigned short CAPTURING_PHASE = 1;
-  const unsigned short AT_TARGET = 2;
-  const unsigned short BUBBLING_PHASE = 3;
-  readonly attribute unsigned short eventPhase;
-
-  void stopPropagation();
-  void stopImmediatePropagation();
-
-  readonly attribute boolean bubbles;
-  readonly attribute boolean cancelable;
-  void preventDefault();
-  readonly attribute boolean defaultPrevented;
-
-  [Unforgeable] readonly attribute boolean isTrusted;
-  readonly attribute DOMTimeStamp timeStamp;
-
-  void initEvent(DOMString type, boolean bubbles, boolean cancelable);
-};
-
-dictionary EventInit {
-  boolean bubbles = false;
-  boolean cancelable = false;
-};
-
-[Constructor(DOMString type, optional CustomEventInit eventInitDict)/*,
- Exposed=(Window,Worker)*/]
-interface CustomEvent : Event {
-  readonly attribute any detail;
-
-  void initCustomEvent(DOMString type, boolean bubbles, boolean cancelable, any detail);
-};
-
-dictionary CustomEventInit : EventInit {
-  any detail = null;
-};
-
-//[Exposed=(Window,Worker)]
-interface EventTarget {
-  void addEventListener(DOMString type, EventListener? callback, optional boolean capture = false);
-  void removeEventListener(DOMString type, EventListener? callback, optional boolean capture = false);
-  boolean dispatchEvent(Event event);
-};
-
-callback interface EventListener {
-  void handleEvent(Event event);
-};
-
-[NoInterfaceObject]
-interface NonElementParentNode {
-  Element? getElementById(DOMString elementId);
-};
-Document implements NonElementParentNode;
-DocumentFragment implements NonElementParentNode;
-
-[NoInterfaceObject]
-interface ParentNode {
-  [SameObject] readonly attribute HTMLCollection children;
-  readonly attribute Element? firstElementChild;
-  readonly attribute Element? lastElementChild;
-  readonly attribute unsigned long childElementCount;
-
-  [Unscopable] void prepend((Node or DOMString)... nodes);
-  [Unscopable] void append((Node or DOMString)... nodes);
-
-  Element? querySelector(DOMString selectors);
-  [NewObject] NodeList querySelectorAll(DOMString selectors);
-};
-Document implements ParentNode;
-DocumentFragment implements ParentNode;
-Element implements ParentNode;
-
-[NoInterfaceObject]
-interface NonDocumentTypeChildNode {
-  readonly attribute Element? previousElementSibling;
-  readonly attribute Element? nextElementSibling;
-};
-Element implements NonDocumentTypeChildNode;
-CharacterData implements NonDocumentTypeChildNode;
-
-[NoInterfaceObject]
-interface ChildNode {
-  [Unscopable] void before((Node or DOMString)... nodes);
-  [Unscopable] void after((Node or DOMString)... nodes);
-  [Unscopable] void replaceWith((Node or DOMString)... nodes);
-  [Unscopable] void remove();
-};
-DocumentType implements ChildNode;
-Element implements ChildNode;
-CharacterData implements ChildNode;
-
-// XXX unrecognized tokens "class", "extends"
-// https://www.w3.org/Bugs/Public/show_bug.cgi?id=20020
-// https://www.w3.org/Bugs/Public/show_bug.cgi?id=23225
-//class Elements extends Array {
-//  Element? query(DOMString relativeSelectors);
-//  Elements queryAll(DOMString relativeSelectors);
-//};
-
-interface NodeList {
-  getter Node? item(unsigned long index);
-  readonly attribute unsigned long length;
-//  iterable<Node>;
-};
-
-interface HTMLCollection {
-  readonly attribute unsigned long length;
-  getter Element? item(unsigned long index);
-  getter Element? namedItem(DOMString name);
-};
-
-[Constructor(MutationCallback callback)]
-interface MutationObserver {
-  void observe(Node target, MutationObserverInit options);
-  void disconnect();
-  sequence<MutationRecord> takeRecords();
-};
-
-callback MutationCallback = void (sequence<MutationRecord> mutations, MutationObserver observer);
-
-dictionary MutationObserverInit {
-  boolean childList = false;
-  boolean attributes;
-  boolean characterData;
-  boolean subtree = false;
-  boolean attributeOldValue;
-  boolean characterDataOldValue;
-  sequence<DOMString> attributeFilter;
-};
-
-interface MutationRecord {
-  readonly attribute DOMString type;
-  readonly attribute Node target;
-  [SameObject] readonly attribute NodeList addedNodes;
-  [SameObject] readonly attribute NodeList removedNodes;
-  readonly attribute Node? previousSibling;
-  readonly attribute Node? nextSibling;
-  readonly attribute DOMString? attributeName;
-  readonly attribute DOMString? attributeNamespace;
-  readonly attribute DOMString? oldValue;
-};
-
-interface Node : EventTarget {
-  const unsigned short ELEMENT_NODE = 1;
-  const unsigned short ATTRIBUTE_NODE = 2; // historical
-  const unsigned short TEXT_NODE = 3;
-  const unsigned short CDATA_SECTION_NODE = 4;
-  const unsigned short ENTITY_REFERENCE_NODE = 5; // historical
-  const unsigned short ENTITY_NODE = 6; // historical
-  const unsigned short PROCESSING_INSTRUCTION_NODE = 7;
-  const unsigned short COMMENT_NODE = 8;
-  const unsigned short DOCUMENT_NODE = 9;
-  const unsigned short DOCUMENT_TYPE_NODE = 10;
-  const unsigned short DOCUMENT_FRAGMENT_NODE = 11;
-  const unsigned short NOTATION_NODE = 12; // historical
-  readonly attribute unsigned short nodeType;
-  readonly attribute DOMString nodeName;
-
-  readonly attribute DOMString? baseURI;
-
-  readonly attribute Document? ownerDocument;
-  readonly attribute Node? parentNode;
-  readonly attribute Element? parentElement;
-  boolean hasChildNodes();
-  [SameObject] readonly attribute NodeList childNodes;
-  readonly attribute Node? firstChild;
-  readonly attribute Node? lastChild;
-  readonly attribute Node? previousSibling;
-  readonly attribute Node? nextSibling;
-
-           attribute DOMString? nodeValue;
-           attribute DOMString? textContent;
-  void normalize();
-
-  [NewObject] Node cloneNode(optional boolean deep = false);
-  boolean isEqualNode(Node? node);
-
-  const unsigned short DOCUMENT_POSITION_DISCONNECTED = 0x01;
-  const unsigned short DOCUMENT_POSITION_PRECEDING = 0x02;
-  const unsigned short DOCUMENT_POSITION_FOLLOWING = 0x04;
-  const unsigned short DOCUMENT_POSITION_CONTAINS = 0x08;
-  const unsigned short DOCUMENT_POSITION_CONTAINED_BY = 0x10;
-  const unsigned short DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC = 0x20;
-  unsigned short compareDocumentPosition(Node other);
-  boolean contains(Node? other);
-
-  DOMString? lookupPrefix(DOMString? namespace);
-  DOMString? lookupNamespaceURI(DOMString? prefix);
-  boolean isDefaultNamespace(DOMString? namespace);
-
-  Node insertBefore(Node node, Node? child);
-  Node appendChild(Node node);
-  Node replaceChild(Node node, Node child);
-  Node removeChild(Node child);
-};
-
-[Constructor]
-interface Document : Node {
-  [SameObject] readonly attribute DOMImplementation implementation;
-  readonly attribute DOMString URL;
-  readonly attribute DOMString documentURI;
-  readonly attribute DOMString origin;
-  readonly attribute DOMString compatMode;
-  readonly attribute DOMString characterSet;
-  readonly attribute DOMString charset; // legacy alias of .characterSet
-  readonly attribute DOMString inputEncoding; // legacy alias of .characterSet
-  readonly attribute DOMString contentType;
-
-  readonly attribute DocumentType? doctype;
-  readonly attribute Element? documentElement;
-  HTMLCollection getElementsByTagName(DOMString localName);
-  HTMLCollection getElementsByTagNameNS(DOMString? namespace, DOMString localName);
-  HTMLCollection getElementsByClassName(DOMString classNames);
-
-  [NewObject] Element createElement(DOMString localName);
-  [NewObject] Element createElementNS(DOMString? namespace, DOMString qualifiedName);
-  [NewObject] DocumentFragment createDocumentFragment();
-  [NewObject] Text createTextNode(DOMString data);
-  [NewObject] CDATASection createCDATASection(DOMString data);
-  [NewObject] Comment createComment(DOMString data);
-  [NewObject] ProcessingInstruction createProcessingInstruction(DOMString target, DOMString data);
-
-  [NewObject] Node importNode(Node node, optional boolean deep = false);
-  Node adoptNode(Node node);
-
-  [NewObject] Attr createAttribute(DOMString localName);
-  [NewObject] Attr createAttributeNS(DOMString? namespace, DOMString name);
-
-  [NewObject] Event createEvent(DOMString interface);
-
-  [NewObject] Range createRange();
-
-  // NodeFilter.SHOW_ALL = 0xFFFFFFFF
-  [NewObject] NodeIterator createNodeIterator(Node root, optional unsigned long whatToShow = 0xFFFFFFFF, optional NodeFilter? filter = null);
-  [NewObject] TreeWalker createTreeWalker(Node root, optional unsigned long whatToShow = 0xFFFFFFFF, optional NodeFilter? filter = null);
-};
-
-interface XMLDocument : Document {};
-
-interface DOMImplementation {
-  [NewObject] DocumentType createDocumentType(DOMString qualifiedName, DOMString publicId, DOMString systemId);
-  [NewObject] XMLDocument createDocument(DOMString? namespace, [TreatNullAs=EmptyString] DOMString qualifiedName, optional DocumentType? doctype = null);
-  [NewObject] Document createHTMLDocument(optional DOMString title);
-
-  boolean hasFeature(); // useless; always returns true
-};
-
-[Constructor]
-interface DocumentFragment : Node {
-};
-
-interface DocumentType : Node {
-  readonly attribute DOMString name;
-  readonly attribute DOMString publicId;
-  readonly attribute DOMString systemId;
-};
-
-interface Element : Node {
-  readonly attribute DOMString? namespaceURI;
-  readonly attribute DOMString? prefix;
-  readonly attribute DOMString localName;
-  readonly attribute DOMString tagName;
-
-           attribute DOMString id;
-           attribute DOMString className;
-  [SameObject, PutForwards=value] readonly attribute DOMTokenList classList;
-
-  boolean hasAttributes();
-  [SameObject] readonly attribute NamedNodeMap attributes;
-  sequence<DOMString> getAttributeNames();
-  DOMString? getAttribute(DOMString name);
-  DOMString? getAttributeNS(DOMString? namespace, DOMString localName);
-  void setAttribute(DOMString name, DOMString value);
-  void setAttributeNS(DOMString? namespace, DOMString name, DOMString value);
-  void removeAttribute(DOMString name);
-  void removeAttributeNS(DOMString? namespace, DOMString localName);
-  boolean hasAttribute(DOMString name);
-  boolean hasAttributeNS(DOMString? namespace, DOMString localName);
-
-  Attr? getAttributeNode(DOMString name);
-  Attr? getAttributeNodeNS(DOMString? namespace, DOMString localName);
-  Attr? setAttributeNode(Attr attr);
-  Attr? setAttributeNodeNS(Attr attr);
-  Attr removeAttributeNode(Attr attr);
-
-  Element? closest(DOMString selectors);
-  boolean matches(DOMString selectors);
-
-  HTMLCollection getElementsByTagName(DOMString localName);
-  HTMLCollection getElementsByTagNameNS(DOMString? namespace, DOMString localName);
-  HTMLCollection getElementsByClassName(DOMString classNames);
-};
-
-interface NamedNodeMap {
-  readonly attribute unsigned long length;
-  getter Attr? item(unsigned long index);
-  getter Attr? getNamedItem(DOMString name);
-  Attr? getNamedItemNS(DOMString? namespace, DOMString localName);
-  Attr? setNamedItem(Attr attr);
-  Attr? setNamedItemNS(Attr attr);
-  Attr removeNamedItem(DOMString name);
-  Attr removeNamedItemNS(DOMString? namespace, DOMString localName);
-};
-
-interface Attr {
-  readonly attribute DOMString? namespaceURI;
-  readonly attribute DOMString? prefix;
-  readonly attribute DOMString localName;
-  readonly attribute DOMString name;
-           attribute DOMString value;
-           attribute DOMString nodeValue; // legacy alias of .value
-           attribute DOMString textContent; // legacy alias of .value
-
-  readonly attribute Element? ownerElement;
-
-  readonly attribute boolean specified; // useless; always returns true
-};
-
-interface CharacterData : Node {
-  [TreatNullAs=EmptyString] attribute DOMString data;
-  readonly attribute unsigned long length;
-  DOMString substringData(unsigned long offset, unsigned long count);
-  void appendData(DOMString data);
-  void insertData(unsigned long offset, DOMString data);
-  void deleteData(unsigned long offset, unsigned long count);
-  void replaceData(unsigned long offset, unsigned long count, DOMString data);
-};
-
-[Constructor(optional DOMString data = "")]
-interface Text : CharacterData {
-  [NewObject] Text splitText(unsigned long offset);
-  readonly attribute DOMString wholeText;
-};
-
-[Exposed=Window]
-interface CDATASection : Text {
-};
-
-interface ProcessingInstruction : CharacterData {
-  readonly attribute DOMString target;
-};
-
-[Constructor(optional DOMString data = "")]
-interface Comment : CharacterData {
-};
-
-[Constructor]
-interface Range {
-  readonly attribute Node startContainer;
-  readonly attribute unsigned long startOffset;
-  readonly attribute Node endContainer;
-  readonly attribute unsigned long endOffset;
-  readonly attribute boolean collapsed;
-  readonly attribute Node commonAncestorContainer;
-
-  void setStart(Node node, unsigned long offset);
-  void setEnd(Node node, unsigned long offset);
-  void setStartBefore(Node node);
-  void setStartAfter(Node node);
-  void setEndBefore(Node node);
-  void setEndAfter(Node node);
-  void collapse(optional boolean toStart = false);
-  void selectNode(Node node);
-  void selectNodeContents(Node node);
-
-  const unsigned short START_TO_START = 0;
-  const unsigned short START_TO_END = 1;
-  const unsigned short END_TO_END = 2;
-  const unsigned short END_TO_START = 3;
-  short compareBoundaryPoints(unsigned short how, Range sourceRange);
-
-  void deleteContents();
-  [NewObject] DocumentFragment extractContents();
-  [NewObject] DocumentFragment cloneContents();
-  void insertNode(Node node);
-  void surroundContents(Node newParent);
-
-  [NewObject] Range cloneRange();
-  void detach();
-
-  boolean isPointInRange(Node node, unsigned long offset);
-  short comparePoint(Node node, unsigned long offset);
-
-  boolean intersectsNode(Node node);
-
-  stringifier;
-};
-
-interface NodeIterator {
-  [SameObject] readonly attribute Node root;
-  readonly attribute Node referenceNode;
-  readonly attribute boolean pointerBeforeReferenceNode;
-  readonly attribute unsigned long whatToShow;
-  readonly attribute NodeFilter? filter;
-
-  Node? nextNode();
-  Node? previousNode();
-
-  void detach();
-};
-
-interface TreeWalker {
-  [SameObject] readonly attribute Node root;
-  readonly attribute unsigned long whatToShow;
-  readonly attribute NodeFilter? filter;
-           attribute Node currentNode;
-
-  Node? parentNode();
-  Node? firstChild();
-  Node? lastChild();
-  Node? previousSibling();
-  Node? nextSibling();
-  Node? previousNode();
-  Node? nextNode();
-};
-
-callback interface NodeFilter {
-  // Constants for acceptNode()
-  const unsigned short FILTER_ACCEPT = 1;
-  const unsigned short FILTER_REJECT = 2;
-  const unsigned short FILTER_SKIP = 3;
-
-  // Constants for whatToShow
-  const unsigned long SHOW_ALL = 0xFFFFFFFF;
-  const unsigned long SHOW_ELEMENT = 0x1;
-  const unsigned long SHOW_ATTRIBUTE = 0x2; // historical
-  const unsigned long SHOW_TEXT = 0x4;
-  const unsigned long SHOW_CDATA_SECTION = 0x8;
-  const unsigned long SHOW_ENTITY_REFERENCE = 0x10; // historical
-  const unsigned long SHOW_ENTITY = 0x20; // historical
-  const unsigned long SHOW_PROCESSING_INSTRUCTION = 0x40;
-  const unsigned long SHOW_COMMENT = 0x80;
-  const unsigned long SHOW_DOCUMENT = 0x100;
-  const unsigned long SHOW_DOCUMENT_TYPE = 0x200;
-  const unsigned long SHOW_DOCUMENT_FRAGMENT = 0x400;
-  const unsigned long SHOW_NOTATION = 0x800; // historical
-
-  unsigned short acceptNode(Node node);
-};
-
-interface DOMTokenList {
-  readonly attribute unsigned long length;
-  getter DOMString? item(unsigned long index);
-  boolean contains(DOMString token);
-  [CEReactions] void add(DOMString... tokens);
-  [CEReactions] void remove(DOMString... tokens);
-  [CEReactions] boolean toggle(DOMString token, optional boolean force);
-  [CEReactions] void replace(DOMString token, DOMString newToken);
-  boolean supports(DOMString token);
-  [CEReactions] stringifier attribute DOMString value;
-  //  iterable<DOMString>;
-};</script>
-<!--  UI Events IDLs  -->
-<script type=text/plain class=untested>
-[Constructor(DOMString type, optional UIEventInit eventInitDict)]
-interface UIEvent : Event {
-    readonly    attribute WindowProxy? view;
-    readonly    attribute long         detail;
-};
-
-dictionary UIEventInit : EventInit {
-    WindowProxy? view = null;
-    long         detail = 0;
-};
-
-[Constructor(DOMString typeArg, optional MouseEventInit mouseEventInitDict)]
-interface MouseEvent : UIEvent {
-    readonly    attribute long           screenX;
-    readonly    attribute long           screenY;
-    readonly    attribute long           clientX;
-    readonly    attribute long           clientY;
-    readonly    attribute boolean        ctrlKey;
-    readonly    attribute boolean        shiftKey;
-    readonly    attribute boolean        altKey;
-    readonly    attribute boolean        metaKey;
-    readonly    attribute short          button;
-    readonly    attribute EventTarget?   relatedTarget;
-    // Introduced in DOM Level 3
-    readonly    attribute unsigned short buttons;
-    boolean getModifierState (DOMString keyArg);
-};
-
-dictionary MouseEventInit : EventModifierInit {
-    long           screenX = 0;
-    long           screenY = 0;
-    long           clientX = 0;
-    long           clientY = 0;
-    short          button = 0;
-    unsigned short buttons = 0;
-    EventTarget?   relatedTarget = null;
-};
-
-dictionary EventModifierInit : UIEventInit {
-    boolean ctrlKey = false;
-    boolean shiftKey = false;
-    boolean altKey = false;
-    boolean metaKey = false;
-    boolean keyModifierStateAltGraph = false;
-    boolean keyModifierStateCapsLock = false;
-    boolean keyModifierStateFn = false;
-    boolean keyModifierStateFnLock = false;
-    boolean keyModifierStateHyper = false;
-    boolean keyModifierStateNumLock = false;
-    boolean keyModifierStateOS = false;
-    boolean keyModifierStateScrollLock = false;
-    boolean keyModifierStateSuper = false;
-    boolean keyModifierStateSymbol = false;
-    boolean keyModifierStateSymbolLock = false;
-};
-
-partial interface MouseEvent {
-    // Deprecated in DOM Level 3
-    void initMouseEvent (DOMString typeArg, boolean bubblesArg, boolean cancelableArg, Window? viewArg, long detailArg, long screenXArg, long screenYArg, long clientXArg, long clientYArg, boolean ctrlKeyArg, boolean altKeyArg, boolean shiftKeyArg, boolean metaKeyArg, short buttonArg, EventTarget? relatedTargetArg);
-};
-</script>
-<!--  Touch Events IDLs  -->
-<script type=text/plain class=untested>
-interface Touch {
-    readonly    attribute long        identifier;
-    readonly    attribute EventTarget target;
-    readonly    attribute long        screenX;
-    readonly    attribute long        screenY;
-    readonly    attribute long        clientX;
-    readonly    attribute long        clientY;
-    readonly    attribute long        pageX;
-    readonly    attribute long        pageY;
-};
-</script>
-<!--  CSSOM IDLs  -->
-<script type=text/plain class=untested>
-interface MediaList {
-  stringifier attribute DOMString mediaText;
-  readonly attribute unsigned long length;
-  getter DOMString item(unsigned long index);
-  void appendMedium(DOMString medium);
-  void deleteMedium(DOMString medium);
-};
-
-interface StyleSheet {
-  readonly attribute DOMString type;
-  readonly attribute DOMString href;
-  readonly attribute Node ownerNode;
-  readonly attribute StyleSheet parentStyleSheet;
-  readonly attribute DOMString title;
-  [PutForwards=mediaText] readonly attribute MediaList media;
-           attribute boolean disabled;
-};
-
-interface CSSStyleSheet : StyleSheet {
-  readonly attribute CSSRule ownerRule;
-  readonly attribute CSSRuleList cssRules;
-  unsigned long insertRule(DOMString rule, unsigned long index);
-  void deleteRule(unsigned long index);
-};
-
-typedef sequence<StyleSheet> StyleSheetList;
-
-partial interface Document {
-  [SameObject] readonly attribute StyleSheetList styleSheets;
-};
-
-[NoInterfaceObject] interface LinkStyle {
-  readonly attribute StyleSheet sheet;
-};
-
-ProcessingInstruction implements LinkStyle;
-
-typedef sequence<CSSRule> CSSRuleList;
-
-interface CSSRule {
-  // Types
-  const unsigned short STYLE_RULE = 1;
-  const unsigned short IMPORT_RULE = 3;
-  const unsigned short MEDIA_RULE = 4;
-  const unsigned short FONT_FACE_RULE = 5;
-  const unsigned short PAGE_RULE = 6;
-  const unsigned short NAMESPACE_RULE = 10;
-  readonly attribute unsigned short type;
-
-  // Parsing and serialization
-           attribute DOMString cssText;
-
-  // Context
-  readonly attribute CSSRule parentRule;
-  readonly attribute CSSStyleSheet parentStyleSheet;
-};
-
-interface CSSStyleRule : CSSRule {
-           attribute DOMString selectorText;
-  readonly attribute CSSStyleDeclaration style;
-};
-
-interface CSSImportRule : CSSRule {
-  readonly attribute DOMString href;
-  [PutForwards=mediaText] readonly attribute MediaList media;
-  readonly attribute CSSStyleSheet styleSheet;
-};
-
-interface CSSMediaRule : CSSRule {
-  [PutForwards=mediaText] readonly attribute MediaList media;
-  readonly attribute CSSRuleList cssRules;
-  unsigned long insertRule(DOMString rule, unsigned long index);
-  void deleteRule(unsigned long index);
-};
-
-interface CSSFontFaceRule : CSSRule {
-  readonly attribute CSSStyleDeclaration style;
-};
-
-interface CSSPageRule : CSSRule {
-           attribute DOMString selectorText;
-  readonly attribute CSSStyleDeclaration style;
-};
-
-interface CSSNamespaceRule : CSSRule {
-  readonly attribute DOMString namespaceURI;
-  readonly attribute DOMString? prefix;
-};
-
-interface CSSStyleDeclaration {
-           attribute DOMString cssText;
-
-  readonly attribute unsigned long length;
-  DOMString item(unsigned long index);
-
-  DOMString getPropertyValue(DOMString property);
-  DOMString getPropertyPriority(DOMString property);
-  void setProperty(DOMString property, DOMString value, optional DOMString priority);
-  DOMString removeProperty(DOMString property);
-
-  readonly attribute CSSStyleDeclarationValue values;
-
-  readonly attribute CSSRule parentRule;
-
-  // CSS Properties
-           attribute DOMString azimuth;
-           attribute DOMString background;
-           attribute DOMString backgroundAttachment;
-           attribute DOMString backgroundColor;
-           attribute DOMString backgroundImage;
-           attribute DOMString backgroundPosition;
-           attribute DOMString backgroundRepeat;
-           attribute DOMString border;
-           attribute DOMString borderCollapse;
-           attribute DOMString borderColor;
-           attribute DOMString borderSpacing;
-           attribute DOMString borderStyle;
-           attribute DOMString borderTop;
-           attribute DOMString borderRight;
-           attribute DOMString borderBottom;
-           attribute DOMString borderLeft;
-           attribute DOMString borderTopColor;
-           attribute DOMString borderRightColor;
-           attribute DOMString borderBottomColor;
-           attribute DOMString borderLeftColor;
-           attribute DOMString borderTopStyle;
-           attribute DOMString borderRightStyle;
-           attribute DOMString borderBottomStyle;
-           attribute DOMString borderLeftStyle;
-           attribute DOMString borderTopWidth;
-           attribute DOMString borderRightWidth;
-           attribute DOMString borderBottomWidth;
-           attribute DOMString borderLeftWidth;
-           attribute DOMString borderWidth;
-           attribute DOMString bottom;
-           attribute DOMString captionSide;
-           attribute DOMString clear;
-           attribute DOMString clip;
-           attribute DOMString color;
-           attribute DOMString content;
-           attribute DOMString counterIncrement;
-           attribute DOMString counterReset;
-           attribute DOMString cue;
-           attribute DOMString cueAfter;
-           attribute DOMString cueBefore;
-           attribute DOMString cursor;
-           attribute DOMString direction;
-           attribute DOMString display;
-           attribute DOMString elevation;
-           attribute DOMString emptyCells;
-           attribute DOMString cssFloat;
-           attribute DOMString font;
-           attribute DOMString fontFamily;
-           attribute DOMString fontSize;
-           attribute DOMString fontSizeAdjust;
-           attribute DOMString fontStretch;
-           attribute DOMString fontStyle;
-           attribute DOMString fontVariant;
-           attribute DOMString fontWeight;
-           attribute DOMString height;
-           attribute DOMString left;
-           attribute DOMString letterSpacing;
-           attribute DOMString lineHeight;
-           attribute DOMString listStyle;
-           attribute DOMString listStyleImage;
-           attribute DOMString listStylePosition;
-           attribute DOMString listStyleType;
-           attribute DOMString margin;
-           attribute DOMString marginTop;
-           attribute DOMString marginRight;
-           attribute DOMString marginBottom;
-           attribute DOMString marginLeft;
-           attribute DOMString marks;
-           attribute DOMString maxHeight;
-           attribute DOMString maxWidth;
-           attribute DOMString minHeight;
-           attribute DOMString minWidth;
-           attribute DOMString orphans;
-           attribute DOMString outline;
-           attribute DOMString outlineColor;
-           attribute DOMString outlineStyle;
-           attribute DOMString outlineWidth;
-           attribute DOMString overflow;
-           attribute DOMString padding;
-           attribute DOMString paddingTop;
-           attribute DOMString paddingRight;
-           attribute DOMString paddingBottom;
-           attribute DOMString paddingLeft;
-           attribute DOMString page;
-           attribute DOMString pageBreakAfter;
-           attribute DOMString pageBreakBefore;
-           attribute DOMString pageBreakInside;
-           attribute DOMString pause;
-           attribute DOMString pauseAfter;
-           attribute DOMString pauseBefore;
-           attribute DOMString pitch;
-           attribute DOMString pitchRange;
-           attribute DOMString playDuring;
-           attribute DOMString position;
-           attribute DOMString quotes;
-           attribute DOMString richness;
-           attribute DOMString right;
-           attribute DOMString size;
-           attribute DOMString speak;
-           attribute DOMString speakHeader;
-           attribute DOMString speakNumeral;
-           attribute DOMString speakPunctuation;
-           attribute DOMString speechRate;
-           attribute DOMString stress;
-           attribute DOMString tableLayout;
-           attribute DOMString textAlign;
-           attribute DOMString textDecoration;
-           attribute DOMString textIndent;
-           attribute DOMString textShadow;
-           attribute DOMString textTransform;
-           attribute DOMString top;
-           attribute DOMString unicodeBidi;
-           attribute DOMString verticalAlign;
-           attribute DOMString visibility;
-           attribute DOMString voiceFamily;
-           attribute DOMString volume;
-           attribute DOMString whiteSpace;
-           attribute DOMString widows;
-           attribute DOMString width;
-           attribute DOMString wordSpacing;
-           attribute DOMString zIndex;
-};
-
-interface CSSStyleDeclarationValue {
-  // ...
-
-  // CSS Properties
-
-};
-
-interface CSSPropertyValue {
-           attribute DOMString cssText;
-};
-
-[NoInterfaceObject] interface CSSMapValue {
-  getter CSSValue (DOMString name);
-};
-
-[NoInterfaceObject] interface CSSPropertyValueList {
-  readonly attribute CSSValue[] list;
-};
-
-[NoInterfaceObject] interface CSSComponentValue {
-  readonly attribute DOMString type;
-           attribute any value;
-};
-
-[NoInterfaceObject] interface CSSStringComponentValue {
-           attribute DOMString string;
-};
-
-[NoInterfaceObject] interface CSSKeywordComponentValue {
-           attribute DOMString keyword;
-};
-
-[NoInterfaceObject] interface CSSIdentifierComponentValue {
-           attribute DOMString identifier;
-};
-
-[NoInterfaceObject] interface CSSColorComponentValue {
-           attribute short red;
-           attribute short green;
-           attribute short blue;
-           attribute float alpha;
-};
-
-[NoInterfaceObject] interface CSSLengthComponentValue {
-           attribute float em;
-           attribute float ex;
-           attribute float px;
-           // figure out what to do with absolute lengths
-};
-
-[NoInterfaceObject] interface CSSPercentageComponentValue {
-           attribute float percent;
-};
-
-[NoInterfaceObject] interface CSSURLComponentValue {
-           attribute DOMString? url;
-};
-
-[NoInterfaceObject] interface ElementCSSInlineStyle {
-  readonly attribute CSSStyleDeclaration style;
-};
-
-//partial interface Window {
-//  CSSStyleDeclaration getComputedStyle(Element elt);
-//  CSSStyleDeclaration getComputedStyle(Element elt, DOMString pseudoElt);
-//};
-</script>
-
-<!--  HTML IDLs  -->
-<script type=text/plain>
-typedef (Int8Array or Uint8Array or Uint8ClampedArray or
-         Int16Array or Uint16Array or
-         Int32Array or Uint32Array or
-         Float32Array or Float64Array or
-         DataView) ArrayBufferView;
-
-[NoInterfaceObject, Exposed=Window]
-interface HTMLHyperlinkElementUtils {
-  stringifier attribute USVString href;
-  readonly attribute USVString origin;
-           attribute USVString protocol;
-           attribute USVString username;
-           attribute USVString password;
-           attribute USVString host;
-           attribute USVString hostname;
-           attribute USVString port;
-           attribute USVString pathname;
-           attribute USVString search;
-           attribute USVString hash;
-};
-
-interface HTMLAllCollection {
-  readonly attribute unsigned long length;
-  getter Element? item(unsigned long index);
-  (HTMLCollection or Element)? item(DOMString name);
-  legacycaller getter (HTMLCollection or Element)? namedItem(DOMString name);
-};
-
-interface HTMLFormControlsCollection : HTMLCollection {
-  // inherits length and item()
-  getter (RadioNodeList or Element)? namedItem(DOMString name); // shadows inherited namedItem()
-};
-
-interface RadioNodeList : NodeList {
-          attribute DOMString value;
-};
-
-interface HTMLOptionsCollection : HTMLCollection {
-  // inherits item(), namedItem()
-  attribute unsigned long length; // shadows inherited length
-  [CEReactions] setter void (unsigned long index, HTMLOptionElement? option);
-  [CEReactions] void add((HTMLOptionElement or HTMLOptGroupElement) element, optional (HTMLElement or long)? before = null);
-  [CEReactions] void remove(long index);
-  attribute long selectedIndex;
-};
-
-typedef sequence<any> PropertyValueArray;
-
-[OverrideBuiltins, Exposed=(Window,Worker)]
-interface DOMStringMap {
-  getter DOMString (DOMString name);
-  setter creator void (DOMString name, DOMString value);
-  deleter void (DOMString name);
-};
-
-typedef (ArrayBuffer or MessagePort) Transferable;
-
-callback FileCallback = void (File file);
-
-enum DocumentReadyState { "loading", "interactive", "complete" };
-typedef (HTMLScriptElement or SVGScriptElement) HTMLOrSVGScriptElement;
-
-[OverrideBuiltins]
-partial /*sealed*/ interface Document {
-  // resource metadata management
-  [PutForwards=href, Unforgeable] readonly attribute Location? location;
-           attribute USVString domain;
-  readonly attribute USVString referrer;
-           attribute USVString cookie;
-  readonly attribute DOMString lastModified;
-  readonly attribute DocumentReadyState readyState;
-
-  // DOM tree accessors
-  getter object (DOMString name);
-  [CEReactions] attribute DOMString title;
-  [CEReactions] attribute DOMString dir;
-  [CEReactions] attribute HTMLElement? body;
-  readonly attribute HTMLHeadElement? head;
-  [SameObject] readonly attribute HTMLCollection images;
-  [SameObject] readonly attribute HTMLCollection embeds;
-  [SameObject] readonly attribute HTMLCollection plugins;
-  [SameObject] readonly attribute HTMLCollection links;
-  [SameObject] readonly attribute HTMLCollection forms;
-  [SameObject] readonly attribute HTMLCollection scripts;
-  NodeList getElementsByName(DOMString elementName);
-  readonly attribute HTMLOrSVGScriptElement? currentScript; // classic scripts in a document tree only
-
-  // dynamic markup insertion
-  [CEReactions] Document open(optional DOMString type = "text/html", optional DOMString replace = "");
-  WindowProxy open(USVString url, DOMString name, DOMString features);
-  [CEReactions] void close();
-  [CEReactions] void write(DOMString... text);
-  [CEReactions] void writeln(DOMString... text);
-
-  // user interaction
-  readonly attribute WindowProxy? defaultView;
-  readonly attribute Element? activeElement;
-  boolean hasFocus();
-  [CEReactions] attribute DOMString designMode;
-  [CEReactions] boolean execCommand(DOMString commandId, optional boolean showUI = false, optional DOMString value = "");
-  boolean queryCommandEnabled(DOMString commandId);
-  boolean queryCommandIndeterm(DOMString commandId);
-  boolean queryCommandState(DOMString commandId);
-  boolean queryCommandSupported(DOMString commandId);
-  DOMString queryCommandValue(DOMString commandId);
-
-  // special event handler IDL attributes that only apply to Document objects
-  [LenientThis] attribute EventHandler onreadystatechange;
-
-  // also has obsolete members
-};
-Document implements GlobalEventHandlers;
-Document implements DocumentAndElementEventHandlers;
-
-[NoInterfaceObject]
-interface ElementContentEditable {
-  [CEReactions] attribute DOMString contentEditable;
-  readonly attribute boolean isContentEditable;
-};
-
-interface HTMLElement : Element {
-  // metadata attributes
-  [CEReactions] attribute DOMString title;
-  [CEReactions] attribute DOMString lang;
-  [CEReactions] attribute boolean translate;
-  [CEReactions] attribute DOMString dir;
-  [SameObject] readonly attribute DOMStringMap dataset;
-
-  // user interaction
-  [CEReactions] attribute boolean hidden;
-  void click();
-  [CEReactions] attribute long tabIndex;
-  void focus();
-  void blur();
-  [CEReactions] attribute DOMString accessKey;
-  readonly attribute DOMString accessKeyLabel;
-  [CEReactions] attribute boolean draggable;
-  [CEReactions, SameObject, PutForwards=value] readonly attribute DOMTokenList dropzone;
-  [CEReactions] attribute HTMLMenuElement? contextMenu;
-  [CEReactions] attribute boolean spellcheck;
-  void forceSpellCheck();
-
-  [CEReactions, TreatNullAs=EmptyString] attribute DOMString innerText;
-};
-HTMLElement implements GlobalEventHandlers;
-HTMLElement implements DocumentAndElementEventHandlers;
-HTMLElement implements ElementContentEditable;
-
-interface HTMLUnknownElement : HTMLElement { };
-
-interface HTMLHtmlElement : HTMLElement {
-  // also has obsolete members
-};
-
-interface HTMLHeadElement : HTMLElement {};
-
-interface HTMLTitleElement : HTMLElement {
-           attribute DOMString text;
-};
-
-interface HTMLBaseElement : HTMLElement {
-           attribute DOMString href;
-           attribute DOMString target;
-};
-
-[HTMLConstructor]
-interface HTMLLinkElement : HTMLElement {
-  [CEReactions] attribute USVString href;
-  [CEReactions] attribute DOMString? crossOrigin;
-  [CEReactions] attribute DOMString rel;
-  // [CEReactions] attribute RequestDestination as; // (default "") XXX TODO
-  [CEReactions, SameObject, PutForwards=value] readonly attribute DOMTokenList relList;
-  [CEReactions] attribute DOMString media;
-  [CEReactions] attribute DOMString nonce;
-  [CEReactions] attribute DOMString integrity;
-  [CEReactions] attribute DOMString hreflang;
-  [CEReactions] attribute DOMString type;
-  [CEReactions, SameObject, PutForwards=value] readonly attribute DOMTokenList sizes;
-  [CEReactions] attribute DOMString referrerPolicy;
-
-  // also has obsolete members
-};
-HTMLLinkElement implements LinkStyle;
-
-interface HTMLMetaElement : HTMLElement {
-           attribute DOMString name;
-           attribute DOMString httpEquiv;
-           attribute DOMString content;
-
-  // also has obsolete members
-};
-
-interface HTMLStyleElement : HTMLElement {
-  [CEReactions] attribute DOMString media;
-  [CEReactions] attribute DOMString nonce;
-  [CEReactions] attribute DOMString type;
-};
-HTMLStyleElement implements LinkStyle;
-
-interface HTMLBodyElement : HTMLElement {
-
-  // also has obsolete members
-};
-HTMLBodyElement implements WindowEventHandlers;
-
-interface HTMLHeadingElement : HTMLElement {
-  // also has obsolete members
-};
-
-interface HTMLParagraphElement : HTMLElement {
-  // also has obsolete members
-};
-
-interface HTMLHRElement : HTMLElement {
-  // also has obsolete members
-};
-
-interface HTMLPreElement : HTMLElement {
-  // also has obsolete members
-};
-
-interface HTMLQuoteElement : HTMLElement {
-           attribute DOMString cite;
-};
-
-interface HTMLOListElement : HTMLElement {
-           attribute boolean reversed;
-           attribute long start;
-           attribute DOMString type;
-
-  // also has obsolete members
-};
-
-interface HTMLUListElement : HTMLElement {
-  // also has obsolete members
-};
-
-interface HTMLLIElement : HTMLElement {
-           attribute long value;
-
-  // also has obsolete members
-};
-
-interface HTMLDListElement : HTMLElement {
-  // also has obsolete members
-};
-
-interface HTMLDivElement : HTMLElement {
-  // also has obsolete members
-};
-
-[HTMLConstructor]
-interface HTMLAnchorElement : HTMLElement {
-  [CEReactions] attribute DOMString target;
-  [CEReactions] attribute DOMString download;
-  [CEReactions] attribute USVString ping;
-  [CEReactions] attribute DOMString rel;
-  [CEReactions, SameObject, PutForwards=value] readonly attribute DOMTokenList relList;
-  [CEReactions] attribute DOMString hreflang;
-  [CEReactions] attribute DOMString type;
-
-  [CEReactions] attribute DOMString text;
-
-  [CEReactions] attribute DOMString referrerPolicy;
-
-  // also has obsolete members
-};
-HTMLAnchorElement implements HTMLHyperlinkElementUtils;
-
-interface HTMLDataElement : HTMLElement {
-           attribute DOMString value;
-};
-
-interface HTMLTimeElement : HTMLElement {
-           attribute DOMString dateTime;
-};
-
-interface HTMLSpanElement : HTMLElement {};
-
-interface HTMLBRElement : HTMLElement {
-  // also has obsolete members
-};
-
-interface HTMLModElement : HTMLElement {
-           attribute DOMString cite;
-           attribute DOMString dateTime;
-};
-
-interface HTMLPictureElement : HTMLElement {};
-
-partial interface HTMLSourceElement {
-           attribute DOMString srcset;
-           attribute DOMString sizes;
-           attribute DOMString media;
-};
-
-[HTMLConstructor, NamedConstructor=Image(optional unsigned long width, optional unsigned long height)]
-interface HTMLImageElement : HTMLElement {
-  [CEReactions] attribute DOMString alt;
-  [CEReactions] attribute USVString src;
-  [CEReactions] attribute USVString srcset;
-  [CEReactions] attribute DOMString sizes;
-  [CEReactions] attribute DOMString? crossOrigin;
-  [CEReactions] attribute DOMString useMap;
-  [CEReactions] attribute boolean isMap;
-  [CEReactions] attribute unsigned long width;
-  [CEReactions] attribute unsigned long height;
-  readonly attribute unsigned long naturalWidth;
-  readonly attribute unsigned long naturalHeight;
-  readonly attribute boolean complete;
-  readonly attribute USVString currentSrc;
-  [CEReactions] attribute DOMString referrerPolicy;
-
-  // also has obsolete members
-};
-
-[HTMLConstructor]
-interface HTMLIFrameElement : HTMLElement {
-  [CEReactions] attribute USVString src;
-  [CEReactions] attribute DOMString srcdoc;
-  [CEReactions] attribute DOMString name;
-  [CEReactions, SameObject, PutForwards=value] readonly attribute DOMTokenList sandbox;
-  [CEReactions] attribute boolean allowFullscreen;
-  [CEReactions] attribute boolean allowUserMedia;
-  [CEReactions] attribute boolean allowPaymentRequest;
-  [CEReactions] attribute DOMString width;
-  [CEReactions] attribute DOMString height;
-  [CEReactions] attribute DOMString referrerPolicy;
-  readonly attribute Document? contentDocument;
-  readonly attribute WindowProxy? contentWindow;
-  Document? getSVGDocument();
-};
-
-interface HTMLEmbedElement : HTMLElement {
-           attribute DOMString src;
-           attribute DOMString type;
-           attribute DOMString width;
-           attribute DOMString height;
-  Document getSVGDocument();
-
-  // also has obsolete members
-};
-
-interface HTMLObjectElement : HTMLElement {
-           attribute DOMString data;
-           attribute DOMString type;
-           attribute boolean typeMustMatch;
-           attribute DOMString name;
-           attribute DOMString useMap;
-  readonly attribute HTMLFormElement? form;
-           attribute DOMString width;
-           attribute DOMString height;
-  readonly attribute Document? contentDocument;
-  readonly attribute WindowProxy? contentWindow;
-
-  readonly attribute boolean willValidate;
-  readonly attribute ValidityState validity;
-  readonly attribute DOMString validationMessage;
-  boolean checkValidity();
-  boolean reportValidity();
-  void setCustomValidity(DOMString error);
-
-  // also has obsolete members
-};
-
-interface HTMLParamElement : HTMLElement {
-           attribute DOMString name;
-           attribute DOMString value;
-
-  // also has obsolete members
-};
-
-interface HTMLVideoElement : HTMLMediaElement {
-           attribute unsigned long width;
-           attribute unsigned long height;
-  readonly attribute unsigned long videoWidth;
-  readonly attribute unsigned long videoHeight;
-           attribute DOMString poster;
-};
-
-[NamedConstructor=Audio(optional DOMString src)]
-interface HTMLAudioElement : HTMLMediaElement {};
-
-interface HTMLSourceElement : HTMLElement {
-           attribute DOMString src;
-           attribute DOMString type;
-
-  // also has obsolete members
-};
-
-interface HTMLTrackElement : HTMLElement {
-           attribute DOMString kind;
-           attribute DOMString src;
-           attribute DOMString srclang;
-           attribute DOMString label;
-           attribute boolean default;
-
-  const unsigned short NONE = 0;
-  const unsigned short LOADING = 1;
-  const unsigned short LOADED = 2;
-  const unsigned short ERROR = 3;
-  readonly attribute unsigned short readyState;
-
-  readonly attribute TextTrack track;
-};
-
-enum CanPlayTypeResult { "" /* empty string */, "maybe", "probably" };
-interface HTMLMediaElement : HTMLElement {
-
-  // error state
-  readonly attribute MediaError? error;
-
-  // network state
-           attribute DOMString src;
-  readonly attribute DOMString currentSrc;
-           attribute DOMString? crossOrigin;
-  const unsigned short NETWORK_EMPTY = 0;
-  const unsigned short NETWORK_IDLE = 1;
-  const unsigned short NETWORK_LOADING = 2;
-  const unsigned short NETWORK_NO_SOURCE = 3;
-  readonly attribute unsigned short networkState;
-           attribute DOMString preload;
-  readonly attribute TimeRanges buffered;
-  void load();
-  CanPlayTypeResult canPlayType(DOMString type);
-
-  // ready state
-  const unsigned short HAVE_NOTHING = 0;
-  const unsigned short HAVE_METADATA = 1;
-  const unsigned short HAVE_CURRENT_DATA = 2;
-  const unsigned short HAVE_FUTURE_DATA = 3;
-  const unsigned short HAVE_ENOUGH_DATA = 4;
-  readonly attribute unsigned short readyState;
-  readonly attribute boolean seeking;
-
-  // playback state
-           attribute double currentTime;
-  void fastSeek(double time);
-  readonly attribute unrestricted double duration;
-  Date getStartDate();
-  readonly attribute boolean paused;
-           attribute double defaultPlaybackRate;
-           attribute double playbackRate;
-  readonly attribute TimeRanges played;
-  readonly attribute TimeRanges seekable;
-  readonly attribute boolean ended;
-           attribute boolean autoplay;
-           attribute boolean loop;
-  Promise<void> play();
-  void pause();
-
-  // controls
-           attribute boolean controls;
-           attribute double volume;
-           attribute boolean muted;
-           attribute boolean defaultMuted;
-
-  // tracks
-  readonly attribute AudioTrackList audioTracks;
-  readonly attribute VideoTrackList videoTracks;
-  readonly attribute TextTrackList textTracks;
-  TextTrack addTextTrack(TextTrackKind kind, optional DOMString label = "", optional DOMString language = "");
-};
-
-interface MediaError {
-  const unsigned short MEDIA_ERR_ABORTED = 1;
-  const unsigned short MEDIA_ERR_NETWORK = 2;
-  const unsigned short MEDIA_ERR_DECODE = 3;
-  const unsigned short MEDIA_ERR_SRC_NOT_SUPPORTED = 4;
-  readonly attribute unsigned short code;
-  readonly attribute DOMString message;
-};
-
-interface AudioTrackList : EventTarget {
-  readonly attribute unsigned long length;
-  getter AudioTrack (unsigned long index);
-  AudioTrack? getTrackById(DOMString id);
-
-           attribute EventHandler onchange;
-           attribute EventHandler onaddtrack;
-           attribute EventHandler onremovetrack;
-};
-
-interface AudioTrack {
-  readonly attribute DOMString id;
-  readonly attribute DOMString kind;
-  readonly attribute DOMString label;
-  readonly attribute DOMString language;
-           attribute boolean enabled;
-};
-
-interface VideoTrackList : EventTarget {
-  readonly attribute unsigned long length;
-  getter VideoTrack (unsigned long index);
-  VideoTrack? getTrackById(DOMString id);
-  readonly attribute long selectedIndex;
-
-           attribute EventHandler onchange;
-           attribute EventHandler onaddtrack;
-           attribute EventHandler onremovetrack;
-};
-
-interface VideoTrack {
-  readonly attribute DOMString id;
-  readonly attribute DOMString kind;
-  readonly attribute DOMString label;
-  readonly attribute DOMString language;
-           attribute boolean selected;
-};
-
-interface TextTrackList : EventTarget {
-  readonly attribute unsigned long length;
-  getter TextTrack (unsigned long index);
-  TextTrack? getTrackById(DOMString id);
-
-           attribute EventHandler onchange;
-           attribute EventHandler onaddtrack;
-           attribute EventHandler onremovetrack;
-};
-
-enum TextTrackMode { "disabled",  "hidden",  "showing" };
-enum TextTrackKind { "subtitles",  "captions",  "descriptions",  "chapters",  "metadata" };
-interface TextTrack : EventTarget {
-  readonly attribute TextTrackKind kind;
-  readonly attribute DOMString label;
-  readonly attribute DOMString language;
-
-  readonly attribute DOMString id;
-  readonly attribute DOMString inBandMetadataTrackDispatchType;
-
-           attribute TextTrackMode mode;
-
-  readonly attribute TextTrackCueList? cues;
-  readonly attribute TextTrackCueList? activeCues;
-
-  void addCue(TextTrackCue cue);
-  void removeCue(TextTrackCue cue);
-
-           attribute EventHandler oncuechange;
-};
-
-interface TextTrackCueList {
-  readonly attribute unsigned long length;
-  getter TextTrackCue (unsigned long index);
-  TextTrackCue? getCueById(DOMString id);
-};
-
-interface TextTrackCue : EventTarget {
-  readonly attribute TextTrack? track;
-
-           attribute DOMString id;
-           attribute double startTime;
-           attribute double endTime;
-           attribute boolean pauseOnExit;
-
-           attribute EventHandler onenter;
-           attribute EventHandler onexit;
-};
-
-interface TimeRanges {
-  readonly attribute unsigned long length;
-  double start(unsigned long index);
-  double end(unsigned long index);
-};
-
-[Constructor(DOMString type, optional TrackEventInit eventInitDict)]
-interface TrackEvent : Event {
-  readonly attribute (VideoTrack or AudioTrack or TextTrack) track;
-};
-
-dictionary TrackEventInit : EventInit {
-  (VideoTrack or AudioTrack or TextTrack) track;
-};
-
-interface HTMLMapElement : HTMLElement {
-           attribute DOMString name;
-  readonly attribute HTMLCollection areas;
-};
-
-[HTMLConstructor]
-interface HTMLAreaElement : HTMLElement {
-  [CEReactions] attribute DOMString alt;
-  [CEReactions] attribute DOMString coords;
-  [CEReactions] attribute DOMString shape;
-  [CEReactions] attribute DOMString target;
-  [CEReactions] attribute DOMString download;
-  [CEReactions] attribute USVString ping;
-  [CEReactions] attribute DOMString rel;
-  [CEReactions, SameObject, PutForwards=value] readonly attribute DOMTokenList relList;
-  [CEReactions] attribute DOMString referrerPolicy;
-
-  // also has obsolete members
-};
-HTMLAreaElement implements HTMLHyperlinkElementUtils;
-
-interface HTMLTableElement : HTMLElement {
-           attribute HTMLTableCaptionElement? caption;
-  HTMLElement createCaption();
-  void deleteCaption();
-           attribute HTMLTableSectionElement? tHead;
-  HTMLElement createTHead();
-  void deleteTHead();
-           attribute HTMLTableSectionElement? tFoot;
-  HTMLElement createTFoot();
-  void deleteTFoot();
-  readonly attribute HTMLCollection tBodies;
-  HTMLElement createTBody();
-  readonly attribute HTMLCollection rows;
-  HTMLElement insertRow(optional long index = -1);
-  void deleteRow(long index);
-
-  // also has obsolete members
-};
-
-interface HTMLTableCaptionElement : HTMLElement {
-  // also has obsolete members
-};
-
-interface HTMLTableColElement : HTMLElement {
-           attribute unsigned long span;
-
-  // also has obsolete members
-};
-
-interface HTMLTableSectionElement : HTMLElement {
-  readonly attribute HTMLCollection rows;
-  HTMLElement insertRow(optional long index = -1);
-  void deleteRow(long index);
-
-  // also has obsolete members
-};
-
-interface HTMLTableRowElement : HTMLElement {
-  readonly attribute long rowIndex;
-  readonly attribute long sectionRowIndex;
-  readonly attribute HTMLCollection cells;
-  HTMLElement insertCell(optional long index = -1);
-  void deleteCell(long index);
-
-  // also has obsolete members
-};
-
-interface HTMLTableCellElement : HTMLElement {
-  [CEReactions] attribute unsigned long colSpan;
-  [CEReactions] attribute unsigned long rowSpan;
-  [CEReactions] attribute DOMString headers;
-  readonly attribute long cellIndex;
-
-  [CEReactions] attribute DOMString scope; // only conforming for th elements
-  [CEReactions] attribute DOMString abbr;  // only conforming for th elements
-
-  // also has obsolete members
-};
-
-[OverrideBuiltins]
-interface HTMLFormElement : HTMLElement {
-           attribute DOMString acceptCharset;
-           attribute DOMString action;
-           attribute DOMString autocomplete;
-           attribute DOMString enctype;
-           attribute DOMString encoding;
-           attribute DOMString method;
-           attribute DOMString name;
-           attribute boolean noValidate;
-           attribute DOMString target;
-
-  readonly attribute HTMLFormControlsCollection elements;
-  readonly attribute unsigned long length;
-  getter Element (unsigned long index);
-  getter (RadioNodeList or Element) (DOMString name);
-
-  void submit();
-  void reset();
-  boolean checkValidity();
-  boolean reportValidity();
-};
-
-interface HTMLLabelElement : HTMLElement {
-  readonly attribute HTMLFormElement? form;
-           attribute DOMString htmlFor;
-  readonly attribute HTMLElement? control;
-};
-
-interface HTMLInputElement : HTMLElement {
-           attribute DOMString accept;
-           attribute DOMString alt;
-           attribute DOMString autocomplete;
-           attribute boolean autofocus;
-           attribute boolean defaultChecked;
-           attribute boolean checked;
-           attribute DOMString dirName;
-           attribute boolean disabled;
-  readonly attribute HTMLFormElement? form;
-  readonly attribute FileList? files;
-           attribute DOMString formAction;
-           attribute DOMString formEnctype;
-           attribute DOMString formMethod;
-           attribute boolean formNoValidate;
-           attribute DOMString formTarget;
-           attribute unsigned long height;
-           attribute boolean indeterminate;
-           attribute DOMString inputMode;
-  readonly attribute HTMLElement? list;
-           attribute DOMString max;
-           attribute long maxLength;
-           attribute DOMString min;
-           attribute long minLength;
-           attribute boolean multiple;
-           attribute DOMString name;
-           attribute DOMString pattern;
-           attribute DOMString placeholder;
-           attribute boolean readOnly;
-           attribute boolean required;
-           attribute unsigned long size;
-           attribute DOMString src;
-           attribute DOMString step;
-           attribute DOMString type;
-           attribute DOMString defaultValue;
-  [TreatNullAs=EmptyString] attribute DOMString value;
-           attribute Date? valueAsDate;
-           attribute unrestricted double valueAsNumber;
-           attribute unsigned long width;
-
-  void stepUp(optional long n = 1);
-  void stepDown(optional long n = 1);
-
-  readonly attribute boolean willValidate;
-  readonly attribute ValidityState validity;
-  readonly attribute DOMString validationMessage;
-  boolean checkValidity();
-  boolean reportValidity();
-  void setCustomValidity(DOMString error);
-
-  readonly attribute NodeList labels;
-
-  void select();
-           attribute unsigned long? selectionStart;
-           attribute unsigned long? selectionEnd;
-           attribute DOMString? selectionDirection;
-  void setRangeText(DOMString replacement);
-  void setRangeText(DOMString replacement, unsigned long start, unsigned long end, optional SelectionMode selectionMode = "preserve");
-  void setSelectionRange(unsigned long start, unsigned long end, optional DOMString direction);
-
-  // also has obsolete members
-};
-
-interface HTMLButtonElement : HTMLElement {
-           attribute boolean autofocus;
-           attribute boolean disabled;
-  readonly attribute HTMLFormElement? form;
-           attribute DOMString formAction;
-           attribute DOMString formEnctype;
-           attribute DOMString formMethod;
-           attribute boolean formNoValidate;
-           attribute DOMString formTarget;
-           attribute DOMString name;
-           attribute DOMString type;
-           attribute DOMString value;
-
-  readonly attribute boolean willValidate;
-  readonly attribute ValidityState validity;
-  readonly attribute DOMString validationMessage;
-  boolean checkValidity();
-  boolean reportValidity();
-  void setCustomValidity(DOMString error);
-
-  readonly attribute NodeList labels;
-};
-
-interface HTMLSelectElement : HTMLElement {
-           attribute DOMString autocomplete;
-           attribute boolean autofocus;
-           attribute boolean disabled;
-  readonly attribute HTMLFormElement? form;
-           attribute boolean multiple;
-           attribute DOMString name;
-           attribute boolean required;
-           attribute unsigned long size;
-
-  readonly attribute DOMString type;
-
-  readonly attribute HTMLOptionsCollection options;
-           attribute unsigned long length;
-  getter Element? item(unsigned long index);
-  HTMLOptionElement? namedItem(DOMString name);
-  void add((HTMLOptionElement or HTMLOptGroupElement) element, optional (HTMLElement or long)? before = null);
-  void remove(); // ChildNode overload
-  void remove(long index);
-  setter creator void (unsigned long index, HTMLOptionElement? option);
-
-  readonly attribute HTMLCollection selectedOptions;
-           attribute long selectedIndex;
-           attribute DOMString value;
-
-  readonly attribute boolean willValidate;
-  readonly attribute ValidityState validity;
-  readonly attribute DOMString validationMessage;
-  boolean checkValidity();
-  boolean reportValidity();
-  void setCustomValidity(DOMString error);
-
-  readonly attribute NodeList labels;
-};
-
-interface HTMLDataListElement : HTMLElement {
-  readonly attribute HTMLCollection options;
-};
-
-interface HTMLOptGroupElement : HTMLElement {
-           attribute boolean disabled;
-           attribute DOMString label;
-};
-
-[NamedConstructor=Option(optional DOMString text = "", optional DOMString value, optional boolean defaultSelected = false, optional boolean selected = false)]
-interface HTMLOptionElement : HTMLElement {
-           attribute boolean disabled;
-  readonly attribute HTMLFormElement? form;
-           attribute DOMString label;
-           attribute boolean defaultSelected;
-           attribute boolean selected;
-           attribute DOMString value;
-
-           attribute DOMString text;
-  readonly attribute long index;
-};
-
-interface HTMLTextAreaElement : HTMLElement {
-           attribute DOMString autocomplete;
-           attribute boolean autofocus;
-           attribute unsigned long cols;
-           attribute DOMString dirName;
-           attribute boolean disabled;
-  readonly attribute HTMLFormElement? form;
-           attribute DOMString inputMode;
-           attribute long maxLength;
-           attribute long minLength;
-           attribute DOMString name;
-           attribute DOMString placeholder;
-           attribute boolean readOnly;
-           attribute boolean required;
-           attribute unsigned long rows;
-           attribute DOMString wrap;
-
-  readonly attribute DOMString type;
-           attribute DOMString defaultValue;
-  [TreatNullAs=EmptyString] attribute DOMString value;
-  readonly attribute unsigned long textLength;
-
-  readonly attribute boolean willValidate;
-  readonly attribute ValidityState validity;
-  readonly attribute DOMString validationMessage;
-  boolean checkValidity();
-  boolean reportValidity();
-  void setCustomValidity(DOMString error);
-
-  readonly attribute NodeList labels;
-
-  void select();
-           attribute unsigned long? selectionStart;
-           attribute unsigned long? selectionEnd;
-           attribute DOMString? selectionDirection;
-  void setRangeText(DOMString replacement);
-  void setRangeText(DOMString replacement, unsigned long start, unsigned long end, optional SelectionMode selectionMode = "preserve");
-  void setSelectionRange(unsigned long start, unsigned long end, optional DOMString direction);
-};
-
-interface HTMLOutputElement : HTMLElement {
-  [PutForwards=value] readonly attribute DOMTokenList htmlFor;
-  readonly attribute HTMLFormElement? form;
-           attribute DOMString name;
-
-  readonly attribute DOMString type;
-           attribute DOMString defaultValue;
-           attribute DOMString value;
-
-  readonly attribute boolean willValidate;
-  readonly attribute ValidityState validity;
-  readonly attribute DOMString validationMessage;
-  boolean checkValidity();
-  boolean reportValidity();
-  void setCustomValidity(DOMString error);
-
-  readonly attribute NodeList labels;
-};
-
-interface HTMLProgressElement : HTMLElement {
-           attribute double value;
-           attribute double max;
-  readonly attribute double position;
-  readonly attribute NodeList labels;
-};
-
-interface HTMLMeterElement : HTMLElement {
-           attribute double value;
-           attribute double min;
-           attribute double max;
-           attribute double low;
-           attribute double high;
-           attribute double optimum;
-  readonly attribute NodeList labels;
-};
-
-interface HTMLFieldSetElement : HTMLElement {
-           attribute boolean disabled;
-  readonly attribute HTMLFormElement? form;
-           attribute DOMString name;
-
-  readonly attribute DOMString type;
-
-  readonly attribute HTMLFormControlsCollection elements;
-
-  readonly attribute boolean willValidate;
-  readonly attribute ValidityState validity;
-  readonly attribute DOMString validationMessage;
-  boolean checkValidity();
-  boolean reportValidity();
-  void setCustomValidity(DOMString error);
-};
-
-interface HTMLLegendElement : HTMLElement {
-  readonly attribute HTMLFormElement? form;
-
-  // also has obsolete members
-};
-
-enum SelectionMode {
-  "select",
-  "start",
-  "end",
-  "preserve"/*,*/ // default
-};
-
-interface ValidityState {
-  readonly attribute boolean valueMissing;
-  readonly attribute boolean typeMismatch;
-  readonly attribute boolean patternMismatch;
-  readonly attribute boolean tooLong;
-  readonly attribute boolean tooShort;
-  readonly attribute boolean rangeUnderflow;
-  readonly attribute boolean rangeOverflow;
-  readonly attribute boolean stepMismatch;
-  readonly attribute boolean badInput;
-  readonly attribute boolean customError;
-  readonly attribute boolean valid;
-};
-
-interface HTMLDetailsElement : HTMLElement {
-           attribute boolean open;
-};
-
-interface HTMLMenuElement : HTMLElement {
-           attribute DOMString type;
-           attribute DOMString label;
-
-  // also has obsolete members
-};
-
-interface HTMLMenuItemElement : HTMLElement {
-           attribute DOMString type;
-           attribute DOMString label;
-           attribute DOMString icon;
-           attribute boolean disabled;
-           attribute boolean checked;
-           attribute DOMString radiogroup;
-           attribute boolean default;
-  readonly attribute HTMLElement? command;
-};
-
-[Constructor(DOMString type, optional RelatedEventInit eventInitDict)]
-interface RelatedEvent : Event {
-  readonly attribute EventTarget? relatedTarget;
-};
-
-dictionary RelatedEventInit : EventInit {
-  EventTarget? relatedTarget;
-};
-
-interface HTMLDialogElement : HTMLElement {
-           attribute boolean open;
-           attribute DOMString returnValue;
-  void show();
-  void showModal();
-  void close(optional DOMString returnValue);
-};
-
-[HTMLConstructor]
-interface HTMLScriptElement : HTMLElement {
-  [CEReactions] attribute USVString src;
-  [CEReactions] attribute DOMString type;
-  [CEReactions] attribute boolean noModule;
-  [CEReactions] attribute DOMString charset;
-  [CEReactions] attribute boolean async;
-  [CEReactions] attribute boolean defer;
-  [CEReactions] attribute DOMString? crossOrigin;
-  [CEReactions] attribute DOMString text;
-  [CEReactions] attribute DOMString nonce;
-  [CEReactions] attribute DOMString integrity;
-
-
-  // also has obsolete members
-};
-
-interface HTMLTemplateElement : HTMLElement {
-  readonly attribute DocumentFragment content;
-};
-
-interface HTMLSlotElement : HTMLElement {
-  /*[CEReactions]*/ attribute DOMString name;
-  sequence<Node> assignedNodes(optional AssignedNodesOptions options);
-};
-
-dictionary AssignedNodesOptions {
-  boolean flatten = false;
-};
-
-typedef (CanvasRenderingContext2D or WebGLRenderingContext) RenderingContext;
-callback BlobCallback = void (Blob? blob);
-
-interface HTMLCanvasElement : HTMLElement {
-           attribute unsigned long width;
-           attribute unsigned long height;
-
-  RenderingContext? getContext(DOMString contextId, any... arguments);
-
-  DOMString toDataURL(optional DOMString type, any... arguments);
-  void toBlob(BlobCallback _callback, optional DOMString type, any... arguments);
-};
-
-typedef (HTMLImageElement or
-         SVGImageElement) HTMLOrSVGImageElement;
-
-typedef (HTMLOrSVGImageElement or
-         HTMLVideoElement or
-         HTMLCanvasElement or
-         ImageBitmap) CanvasImageSource;
-
-enum CanvasFillRule { "nonzero", "evenodd" };
-
-dictionary CanvasRenderingContext2DSettings {
-  boolean alpha = true;
-};
-
-enum ImageSmoothingQuality { "low", "medium", "high" };
-
-interface CanvasRenderingContext2D {
-  // back-reference to the canvas
-  readonly attribute HTMLCanvasElement canvas;
-};
-CanvasRenderingContext2D implements CanvasState;
-CanvasRenderingContext2D implements CanvasTransform;
-CanvasRenderingContext2D implements CanvasCompositing;
-CanvasRenderingContext2D implements CanvasImageSmoothing;
-CanvasRenderingContext2D implements CanvasFillStrokeStyles;
-CanvasRenderingContext2D implements CanvasShadowStyles;
-CanvasRenderingContext2D implements CanvasFilters;
-CanvasRenderingContext2D implements CanvasRect;
-CanvasRenderingContext2D implements CanvasDrawPath;
-CanvasRenderingContext2D implements CanvasUserInterface;
-CanvasRenderingContext2D implements CanvasText;
-CanvasRenderingContext2D implements CanvasDrawImage;
-CanvasRenderingContext2D implements CanvasHitRegion;
-CanvasRenderingContext2D implements CanvasImageData;
-CanvasRenderingContext2D implements CanvasPathDrawingStyles;
-CanvasRenderingContext2D implements CanvasTextDrawingStyles;
-CanvasRenderingContext2D implements CanvasPath;
-
-[NoInterfaceObject]
-interface CanvasState {
-  // state
-  void save(); // push state on state stack
-  void restore(); // pop state stack and restore state
-};
-
-[NoInterfaceObject]
-interface CanvasTransform {
-  // transformations (default transform is the identity matrix)
-  void scale(unrestricted double x, unrestricted double y);
-  void rotate(unrestricted double angle);
-  void translate(unrestricted double x, unrestricted double y);
-  void transform(unrestricted double a, unrestricted double b, unrestricted double c, unrestricted double d, unrestricted double e, unrestricted double f);
-
-  [NewObject] DOMMatrix getTransform();
-  void setTransform(unrestricted double a, unrestricted double b, unrestricted double c, unrestricted double d, unrestricted double e, unrestricted double f);
-  void setTransform(optional DOMMatrixInit transform);
-  void resetTransform();
-
-};
-
-[NoInterfaceObject]
-interface CanvasCompositing {
-  // compositing
-  attribute unrestricted double globalAlpha; // (default 1.0)
-  attribute DOMString globalCompositeOperation; // (default source-over)
-};
-
-[NoInterfaceObject]
-interface CanvasImageSmoothing {
-  // image smoothing
-  attribute boolean imageSmoothingEnabled; // (default true)
-  attribute ImageSmoothingQuality imageSmoothingQuality; // (default low)
-
-};
-
-[NoInterfaceObject]
-interface CanvasFillStrokeStyles {
-  // colours and styles (see also the CanvasPathDrawingStyles and CanvasTextDrawingStyles interfaces)
-  attribute (DOMString or CanvasGradient or CanvasPattern) strokeStyle; // (default black)
-  attribute (DOMString or CanvasGradient or CanvasPattern) fillStyle; // (default black)
-  CanvasGradient createLinearGradient(double x0, double y0, double x1, double y1);
-  CanvasGradient createRadialGradient(double x0, double y0, double r0, double x1, double y1, double r1);
-  CanvasPattern? createPattern(CanvasImageSource image, [TreatNullAs=EmptyString] DOMString repetition);
-
-};
-
-[NoInterfaceObject]
-interface CanvasShadowStyles {
-  // shadows
-  attribute unrestricted double shadowOffsetX; // (default 0)
-  attribute unrestricted double shadowOffsetY; // (default 0)
-  attribute unrestricted double shadowBlur; // (default 0)
-  attribute DOMString shadowColor; // (default transparent black)
-};
-
-[NoInterfaceObject]
-interface CanvasFilters {
-  // filters
-  attribute DOMString filter; // (default "none")
-};
-
-[NoInterfaceObject]
-interface CanvasRect {
-  // rects
-  void clearRect(unrestricted double x, unrestricted double y, unrestricted double w, unrestricted double h);
-  void fillRect(unrestricted double x, unrestricted double y, unrestricted double w, unrestricted double h);
-  void strokeRect(unrestricted double x, unrestricted double y, unrestricted double w, unrestricted double h);
-};
-
-[NoInterfaceObject]
-interface CanvasDrawPath {
-  // path API (see also CanvasPath)
-  void beginPath();
-  void fill(optional CanvasFillRule fillRule = "nonzero");
-  void fill(Path2D path, optional CanvasFillRule fillRule = "nonzero");
-  void stroke();
-  void stroke(Path2D path);
-  void clip(optional CanvasFillRule fillRule = "nonzero");
-  void clip(Path2D path, optional CanvasFillRule fillRule = "nonzero");
-  void resetClip();
-  boolean isPointInPath(unrestricted double x, unrestricted double y, optional CanvasFillRule fillRule = "nonzero");
-  boolean isPointInPath(Path2D path, unrestricted double x, unrestricted double y, optional CanvasFillRule fillRule = "nonzero");
-  boolean isPointInStroke(unrestricted double x, unrestricted double y);
-  boolean isPointInStroke(Path2D path, unrestricted double x, unrestricted double y);
-};
-
-[NoInterfaceObject]
-interface CanvasUserInterface {
-  void drawFocusIfNeeded(Element element);
-  void drawFocusIfNeeded(Path2D path, Element element);
-  void scrollPathIntoView();
-  void scrollPathIntoView(Path2D path);
-};
-
-[NoInterfaceObject]
-interface CanvasText {
-  // text (see also the CanvasPathDrawingStyles and CanvasTextDrawingStyles interfaces)
-  void fillText(DOMString text, unrestricted double x, unrestricted double y, optional unrestricted double maxWidth);
-  void strokeText(DOMString text, unrestricted double x, unrestricted double y, optional unrestricted double maxWidth);
-  TextMetrics measureText(DOMString text);
-};
-
-[NoInterfaceObject]
-interface CanvasDrawImage {
-  // drawing images
-  void drawImage(CanvasImageSource image, unrestricted double dx, unrestricted double dy);
-  void drawImage(CanvasImageSource image, unrestricted double dx, unrestricted double dy, unrestricted double dw, unrestricted double dh);
-  void drawImage(CanvasImageSource image, unrestricted double sx, unrestricted double sy, unrestricted double sw, unrestricted double sh, unrestricted double dx, unrestricted double dy, unrestricted double dw, unrestricted double dh);
-};
-
-[NoInterfaceObject]
-interface CanvasHitRegion {
-  // hit regions
-  void addHitRegion(optional HitRegionOptions options);
-  void removeHitRegion(DOMString id);
-  void clearHitRegions();
-};
-
-[NoInterfaceObject]
-interface CanvasImageData {
-  // pixel manipulation
-  ImageData createImageData(double sw, double sh);
-  ImageData createImageData(ImageData imagedata);
-  ImageData getImageData(double sx, double sy, double sw, double sh);
-  void putImageData(ImageData imagedata, double dx, double dy);
-  void putImageData(ImageData imagedata, double dx, double dy, double dirtyX, double dirtyY, double dirtyWidth, double dirtyHeight);
-};
-
-enum CanvasLineCap { "butt", "round", "square" };
-enum CanvasLineJoin { "round", "bevel", "miter"};
-enum CanvasTextAlign { "start", "end", "left", "right", "center" };
-enum CanvasTextBaseline { "top", "hanging", "middle", "alphabetic", "ideographic", "bottom" };
-enum CanvasDirection { "ltr", "rtl", "inherit" };
-
-[NoInterfaceObject]
-interface CanvasPathDrawingStyles {
-  // line caps/joins
-  attribute unrestricted double lineWidth; // (default 1)
-  attribute CanvasLineCap lineCap; // (default "butt")
-  attribute CanvasLineJoin lineJoin; // (default "miter")
-  attribute unrestricted double miterLimit; // (default 10)
-
-  // dashed lines
-  void setLineDash(sequence<unrestricted double> segments); // default empty
-  sequence<unrestricted double> getLineDash();
-  attribute unrestricted double lineDashOffset;
-};
-
-[NoInterfaceObject]
-interface CanvasTextDrawingStyles {
-  // text
-  attribute DOMString font; // (default 10px sans-serif)
-  attribute CanvasTextAlign textAlign; // (default: "start")
-  attribute CanvasTextBaseline textBaseline; // (default: "alphabetic")
-  attribute CanvasDirection direction; // (default: "inherit")
-};
-
-[NoInterfaceObject, Exposed=(Window,Worker)]
-interface CanvasPath {
-  // shared path API methods
-  void closePath();
-  void moveTo(unrestricted double x, unrestricted double y);
-  void lineTo(unrestricted double x, unrestricted double y);
-  void quadraticCurveTo(unrestricted double cpx, unrestricted double cpy, unrestricted double x, unrestricted double y);
-  void bezierCurveTo(unrestricted double cp1x, unrestricted double cp1y, unrestricted double cp2x, unrestricted double cp2y, unrestricted double x, unrestricted double y);
-  void arcTo(unrestricted double x1, unrestricted double y1, unrestricted double x2, unrestricted double y2, unrestricted double radius);
-  void arcTo(unrestricted double x1, unrestricted double y1, unrestricted double x2, unrestricted double y2, unrestricted double radiusX, unrestricted double radiusY, unrestricted double rotation);
-  void rect(unrestricted double x, unrestricted double y, unrestricted double w, unrestricted double h);
-  void arc(unrestricted double x, unrestricted double y, unrestricted double radius, unrestricted double startAngle, unrestricted double endAngle, optional boolean anticlockwise = false);
-  void ellipse(unrestricted double x, unrestricted double y, unrestricted double radiusX, unrestricted double radiusY, unrestricted double rotation, unrestricted double startAngle, unrestricted double endAngle, optional boolean anticlockwise = false);
-};
-
-interface CanvasGradient {
-  // opaque object
-  void addColorStop(double offset, DOMString color);
-};
-
-interface CanvasPattern {
-  // opaque object
-  void setTransform(optional DOMMatrixInit transform);
-};
-
-interface TextMetrics {
-  // x-direction
-  readonly attribute double width; // advance width
-  readonly attribute double actualBoundingBoxLeft;
-  readonly attribute double actualBoundingBoxRight;
-
-  // y-direction
-  readonly attribute double fontBoundingBoxAscent;
-  readonly attribute double fontBoundingBoxDescent;
-  readonly attribute double actualBoundingBoxAscent;
-  readonly attribute double actualBoundingBoxDescent;
-  readonly attribute double emHeightAscent;
-  readonly attribute double emHeightDescent;
-  readonly attribute double hangingBaseline;
-  readonly attribute double alphabeticBaseline;
-  readonly attribute double ideographicBaseline;
-};
-
-dictionary HitRegionOptions {
-  Path2D? path = null;
-  CanvasFillRule fillRule = "nonzero";
-  DOMString id = "";
-  DOMString? parentID = null;
-  DOMString cursor = "inherit";
-  // for control-backed regions:
-  Element? control = null;
-  // for unbacked regions:
-  DOMString? label = null;
-  DOMString? role = null;
-};
-
-[Constructor(unsigned long sw, unsigned long sh),
- Constructor(Uint8ClampedArray data, unsigned long sw, optional unsigned long sh),
- Exposed=(Window,Worker)]
-interface ImageData {
-  readonly attribute unsigned long width;
-  readonly attribute unsigned long height;
-  readonly attribute Uint8ClampedArray data;
-};
-
-[Constructor,
- Constructor(Path2D path),
- Constructor(sequence<Path2D> paths, optional CanvasFillRule fillRule = "nonzero"),
- Constructor(DOMString d), Exposed=(Window,Worker)]
-interface Path2D {
-  void addPath(Path2D path, optional DOMMatrixInit transform);
-};
-Path2D implements CanvasPath;
-
-partial interface MouseEvent {
-  readonly attribute DOMString? region;
-};
-
-// https://github.com/w3c/testharness.js/issues/84
-//partial dictionary MouseEventInit {
-//  DOMString? region;
-//};
-
-partial interface Touch {
-  readonly attribute DOMString? region;
-};
-
-interface DataTransfer {
-           attribute DOMString dropEffect;
-           attribute DOMString effectAllowed;
-
-  readonly attribute DataTransferItemList items;
-
-  void setDragImage(Element image, long x, long y);
-
-  /* old interface */
-  readonly attribute DOMString[] types;
-  DOMString getData(DOMString format);
-  void setData(DOMString format, DOMString data);
-  void clearData(optional DOMString format);
-  readonly attribute FileList files;
-};
-
-interface DataTransferItemList {
-  readonly attribute unsigned long length;
-  getter DataTransferItem (unsigned long index);
-  DataTransferItem? add(DOMString data, DOMString type);
-  DataTransferItem? add(File data);
-  void remove(unsigned long index);
-  void clear();
-};
-
-interface DataTransferItem {
-  readonly attribute DOMString kind;
-  readonly attribute DOMString type;
-  void getAsString(FunctionStringCallback? _callback);
-  File? getAsFile();
-};
-
-callback FunctionStringCallback = void (DOMString data);
-
-[Constructor(DOMString type, optional DragEventInit eventInitDict)]
-interface DragEvent : MouseEvent {
-  readonly attribute DataTransfer? dataTransfer;
-};
-
-dictionary DragEventInit : MouseEventInit {
-  DataTransfer? dataTransfer;
-};
-
-// For purposes of this test, just treat WindowProxy as the same thing as
-// Window.
-typedef Window WindowProxy;
-
-[PrimaryGlobal]
-/*sealed*/ interface Window : EventTarget {
-  // the current browsing context
-  [Unforgeable] readonly attribute WindowProxy window;
-  [Replaceable] readonly attribute WindowProxy self;
-  [Unforgeable] readonly attribute Document document;
-           attribute DOMString name;
-  [PutForwards=href, Unforgeable] readonly attribute Location location;
-  readonly attribute History history;
-  [Replaceable] readonly attribute BarProp locationbar;
-  [Replaceable] readonly attribute BarProp menubar;
-  [Replaceable] readonly attribute BarProp personalbar;
-  [Replaceable] readonly attribute BarProp scrollbars;
-  [Replaceable] readonly attribute BarProp statusbar;
-  [Replaceable] readonly attribute BarProp toolbar;
-           attribute DOMString status;
-  void close();
-  readonly attribute boolean closed;
-  void stop();
-  void focus();
-  void blur();
-
-  // other browsing contexts
-  [Replaceable] readonly attribute WindowProxy frames;
-  [Replaceable] readonly attribute unsigned long length;
-  [Unforgeable] readonly attribute WindowProxy top;
-           attribute any opener;
-  [Replaceable] readonly attribute WindowProxy parent;
-  readonly attribute Element? frameElement;
-  WindowProxy open(optional DOMString url = "about:blank", optional DOMString target = "_blank", [TreatNullAs=EmptyString] optional DOMString features = "", optional boolean replace = false);
-  getter WindowProxy (unsigned long index);
-  getter object (DOMString name);
-
-  // the user agent
-  readonly attribute Navigator navigator;
-  [Replaceable] readonly attribute External external;
-  readonly attribute ApplicationCache applicationCache;
-
-  // user prompts
-  void alert();
-  //void alert(DOMString message);
-  boolean confirm(optional DOMString message = "");
-  DOMString? prompt(optional DOMString message = "", optional DOMString default = "");
-  void print();
-  any showModalDialog(DOMString url, optional any argument);
-
-  void postMessage(any message, DOMString targetOrigin, optional sequence<Transferable> transfer);
-
-  // also has obsolete members
-};
-Window implements GlobalEventHandlers;
-Window implements WindowEventHandlers;
-
-interface BarProp {
-  readonly attribute boolean visible;
-};
-
-enum ScrollRestoration { "auto", "manual" };
-interface History {
-
-  readonly attribute long length;
-  attribute ScrollRestoration scrollRestoration;
-  readonly attribute any state;
-  void go(optional long delta);
-  void back();
-  void forward();
-  void pushState(any data, DOMString title, optional DOMString? url = null);
-  void replaceState(any data, DOMString title, optional DOMString? url = null);
-};
-
-[Unforgeable] interface Location {
-  stringifier attribute USVString href;
-  readonly attribute USVString origin;
-           attribute USVString protocol;
-           attribute USVString host;
-           attribute USVString hostname;
-           attribute USVString port;
-           attribute USVString pathname;
-           attribute USVString search;
-           attribute USVString hash;
-
-  void assign(USVString url);
-  void replace(USVString url);
-  void reload();
-
-  [SameObject] readonly attribute USVString[] ancestorOrigins;
-};
-
-[Constructor(DOMString type, optional PopStateEventInit eventInitDict), Exposed=(Window,Worker)]
-interface PopStateEvent : Event {
-  readonly attribute any state;
-};
-
-dictionary PopStateEventInit : EventInit {
-  any state;
-};
-
-[Constructor(DOMString type, optional HashChangeEventInit eventInitDict), Exposed=(Window,Worker)]
-interface HashChangeEvent : Event {
-  readonly attribute DOMString oldURL;
-  readonly attribute DOMString newURL;
-};
-
-dictionary HashChangeEventInit : EventInit {
-  DOMString oldURL;
-  DOMString newURL;
-};
-
-[Constructor(DOMString type, optional PageTransitionEventInit eventInitDict), Exposed=(Window,Worker)]
-interface PageTransitionEvent : Event {
-  readonly attribute boolean persisted;
-};
-
-dictionary PageTransitionEventInit : EventInit {
-  boolean persisted;
-};
-
-interface BeforeUnloadEvent : Event {
-           attribute DOMString returnValue;
-};
-
-[Exposed=(Window,SharedWorker)]
-interface ApplicationCache : EventTarget {
-
-  // update status
-  const unsigned short UNCACHED = 0;
-  const unsigned short IDLE = 1;
-  const unsigned short CHECKING = 2;
-  const unsigned short DOWNLOADING = 3;
-  const unsigned short UPDATEREADY = 4;
-  const unsigned short OBSOLETE = 5;
-  readonly attribute unsigned short status;
-
-  // updates
-  void update();
-  void abort();
-  void swapCache();
-
-  // events
-           attribute EventHandler onchecking;
-           attribute EventHandler onerror;
-           attribute EventHandler onnoupdate;
-           attribute EventHandler ondownloading;
-           attribute EventHandler onprogress;
-           attribute EventHandler onupdateready;
-           attribute EventHandler oncached;
-           attribute EventHandler onobsolete;
-};
-
-[NoInterfaceObject, Exposed=(Window,Worker)]
-interface NavigatorOnLine {
-  readonly attribute boolean onLine;
-};
-
-[Constructor(DOMString type, optional ErrorEventInit eventInitDict), Exposed=(Window,Worker)]
-interface ErrorEvent : Event {
-  readonly attribute DOMString message;
-  readonly attribute DOMString filename;
-  readonly attribute unsigned long lineno;
-  readonly attribute unsigned long colno;
-  readonly attribute any error;
-};
-
-dictionary ErrorEventInit : EventInit {
-  DOMString message;
-  DOMString filename;
-  unsigned long lineno;
-  unsigned long colno;
-  any error;
-};
-
-[TreatNonCallableAsNull]
-callback EventHandlerNonNull = any (Event event);
-typedef EventHandlerNonNull? EventHandler;
-
-[TreatNonCallableAsNull]
-callback OnErrorEventHandlerNonNull = any ((Event or DOMString) event, optional DOMString source, optional unsigned long lineno, optional unsigned long column, optional any error);
-typedef OnErrorEventHandlerNonNull? OnErrorEventHandler;
-
-[TreatNonCallableAsNull]
-callback OnBeforeUnloadEventHandlerNonNull = DOMString? (Event event);
-typedef OnBeforeUnloadEventHandlerNonNull? OnBeforeUnloadEventHandler;
-
-[NoInterfaceObject]
-interface GlobalEventHandlers {
-           attribute EventHandler onabort;
-           attribute EventHandler onauxclick;
-           attribute EventHandler onblur;
-           attribute EventHandler oncancel;
-           attribute EventHandler oncanplay;
-           attribute EventHandler oncanplaythrough;
-           attribute EventHandler onchange;
-           attribute EventHandler onclick;
-           attribute EventHandler onclose;
-           attribute EventHandler oncontextmenu;
-           attribute EventHandler oncuechange;
-           attribute EventHandler ondblclick;
-           attribute EventHandler ondrag;
-           attribute EventHandler ondragend;
-           attribute EventHandler ondragenter;
-           attribute EventHandler ondragexit;
-           attribute EventHandler ondragleave;
-           attribute EventHandler ondragover;
-           attribute EventHandler ondragstart;
-           attribute EventHandler ondrop;
-           attribute EventHandler ondurationchange;
-           attribute EventHandler onemptied;
-           attribute EventHandler onended;
-           attribute OnErrorEventHandler onerror;
-           attribute EventHandler onfocus;
-           attribute EventHandler oninput;
-           attribute EventHandler oninvalid;
-           attribute EventHandler onkeydown;
-           attribute EventHandler onkeypress;
-           attribute EventHandler onkeyup;
-           attribute EventHandler onload;
-           attribute EventHandler onloadeddata;
-           attribute EventHandler onloadedmetadata;
-           attribute EventHandler onloadstart;
-           attribute EventHandler onmousedown;
-  [LenientThis] attribute EventHandler onmouseenter;
-  [LenientThis] attribute EventHandler onmouseleave;
-           attribute EventHandler onmousemove;
-           attribute EventHandler onmouseout;
-           attribute EventHandler onmouseover;
-           attribute EventHandler onmouseup;
-           attribute EventHandler onmousewheel;
-           attribute EventHandler onpause;
-           attribute EventHandler onplay;
-           attribute EventHandler onplaying;
-           attribute EventHandler onprogress;
-           attribute EventHandler onratechange;
-           attribute EventHandler onreset;
-           attribute EventHandler onresize;
-           attribute EventHandler onscroll;
-           attribute EventHandler onseeked;
-           attribute EventHandler onseeking;
-           attribute EventHandler onselect;
-           attribute EventHandler onshow;
-           attribute EventHandler onstalled;
-           attribute EventHandler onsubmit;
-           attribute EventHandler onsuspend;
-           attribute EventHandler ontimeupdate;
-           attribute EventHandler ontoggle;
-           attribute EventHandler onvolumechange;
-           attribute EventHandler onwaiting;
-};
-
-[NoInterfaceObject]
-interface DocumentAndElementEventHandlers {
-           attribute EventHandler oncopy;
-           attribute EventHandler oncut;
-           attribute EventHandler onpaste;
-};
-
-[NoInterfaceObject]
-interface WindowEventHandlers {
-           attribute EventHandler onafterprint;
-           attribute EventHandler onbeforeprint;
-           attribute OnBeforeUnloadEventHandler onbeforeunload;
-           attribute EventHandler onhashchange;
-           attribute EventHandler onlanguagechange;
-           attribute EventHandler onmessage;
-           attribute EventHandler onoffline;
-           attribute EventHandler ononline;
-           attribute EventHandler onpagehide;
-           attribute EventHandler onpageshow;
-           attribute EventHandler onpopstate;
-           attribute EventHandler onstorage;
-           attribute EventHandler onunload;
-};
-
-[NoInterfaceObject, Exposed=(Window,Worker)]
-interface WindowBase64 {
-  DOMString btoa(DOMString btoa);
-  DOMString atob(DOMString atob);
-};
-Window implements WindowBase64;
-
-[NoInterfaceObject, Exposed=(Window,Worker)]
-interface WindowTimers {
-  long setTimeout(Function handler, optional long timeout = 0, any... arguments);
-  long setTimeout(DOMString handler, optional long timeout = 0, any... arguments);
-  void clearTimeout(optional long handle = 0);
-  long setInterval(Function handler, optional long timeout = 0, any... arguments);
-  long setInterval(DOMString handler, optional long timeout = 0, any... arguments);
-  void clearInterval(optional long handle = 0);
-};
-Window implements WindowTimers;
-
-[NoInterfaceObject]
-interface WindowModal {
-  readonly attribute any dialogArguments;
-           attribute any returnValue;
-};
-
-interface Navigator {
-  // objects implementing this interface also implement the interfaces given below
-};
-Navigator implements NavigatorID;
-Navigator implements NavigatorLanguage;
-Navigator implements NavigatorOnLine;
-Navigator implements NavigatorContentUtils;
-Navigator implements NavigatorCookies;
-Navigator implements NavigatorPlugins;
-Navigator implements NavigatorConcurrentHardware;
-
-[NoInterfaceObject, Exposed=(Window,Worker)]
-interface NavigatorID {
-  [Exposed=Window] readonly attribute DOMString appCodeName; // constant "Mozilla"
-  readonly attribute DOMString appName; // constant "Netscape"
-  readonly attribute DOMString appVersion;
-  readonly attribute DOMString platform;
-  [Exposed=Window] readonly attribute DOMString product; // constant "Gecko"
-  [Exposed=Window] readonly attribute DOMString productSub;
-  readonly attribute DOMString userAgent;
-  [Exposed=Window] readonly attribute DOMString vendor;
-  [Exposed=Window] readonly attribute DOMString vendorSub; // constant ""
-};
-
-[NoInterfaceObject, Exposed=(Window,Worker)]
-interface NavigatorLanguage {
-  readonly attribute DOMString language;
-  readonly attribute FrozenArray<DOMString> languages;
-};
-
-[NoInterfaceObject]
-interface NavigatorContentUtils {
-  // content handler registration
-  void registerProtocolHandler(DOMString scheme, USVString url, DOMString title);
-  void registerContentHandler(DOMString mimeType, USVString url, DOMString title);
-  DOMString isProtocolHandlerRegistered(DOMString scheme, USVString url);
-  DOMString isContentHandlerRegistered(DOMString mimeType, USVString url);
-  void unregisterProtocolHandler(DOMString scheme, USVString url);
-  void unregisterContentHandler(DOMString mimeType, USVString url);
-};
-
-[NoInterfaceObject]
-interface NavigatorCookies {
-  readonly attribute boolean cookieEnabled;
-};
-
-[NoInterfaceObject]
-interface NavigatorPlugins {
-  [SameObject] readonly attribute PluginArray plugins;
-  [SameObject] readonly attribute MimeTypeArray mimeTypes;
-  boolean javaEnabled();
-};
-
-interface PluginArray {
-  void refresh(optional boolean reload = false);
-  readonly attribute unsigned long length;
-  getter Plugin? item(unsigned long index);
-  getter Plugin? namedItem(DOMString name);
-};
-
-[NoInterfaceObject, Exposed=(Window,Worker)]
-interface NavigatorConcurrentHardware {
-  readonly attribute unsigned long long hardwareConcurrency;
-};
-
-interface MimeTypeArray {
-  readonly attribute unsigned long length;
-  getter MimeType? item(unsigned long index);
-  getter MimeType? namedItem(DOMString name);
-};
-
-interface Plugin {
-  readonly attribute DOMString name;
-  readonly attribute DOMString description;
-  readonly attribute DOMString filename;
-  readonly attribute unsigned long length;
-  getter MimeType? item(unsigned long index);
-  getter MimeType? namedItem(DOMString name);
-};
-
-interface MimeType {
-  readonly attribute DOMString type;
-  readonly attribute DOMString description;
-  readonly attribute DOMString suffixes; // comma-separated
-  readonly attribute Plugin enabledPlugin;
-};
-
-interface External {
-  void AddSearchProvider(DOMString engineURL);
-  unsigned long IsSearchProviderInstalled(DOMString engineURL);
-};
-
-[Exposed=(Window,Worker)]
-interface ImageBitmap {
-  readonly attribute unsigned long width;
-  readonly attribute unsigned long height;
-};
-
-typedef (HTMLImageElement or
-         HTMLVideoElement or
-         HTMLCanvasElement or
-         Blob or
-         ImageData or
-         CanvasRenderingContext2D or
-         ImageBitmap) ImageBitmapSource;
-
-[NoInterfaceObject, Exposed=(Window,Worker)]
-interface ImageBitmapFactories {
-  Promise createImageBitmap(ImageBitmapSource image, optional long sx, long sy, long sw, long sh);
-};
-Window implements ImageBitmapFactories;
-WorkerGlobalScope implements ImageBitmapFactories;
-
-[Constructor(DOMString type, optional MessageEventInit eventInitDict), Exposed=(Window,Worker)]
-interface MessageEvent : Event {
-  readonly attribute any data;
-  readonly attribute DOMString origin;
-  readonly attribute DOMString lastEventId;
-  readonly attribute (WindowProxy or MessagePort)? source;
-  readonly attribute FrozenArray<MessagePort> ports;
-
-  void initMessageEvent(DOMString type, boolean bubbles, boolean cancelable, any data, DOMString origin, DOMString lastEventId, (WindowProxy or MessagePort) source, sequence<MessagePort> ports);
-};
-
-dictionary MessageEventInit : EventInit {
-  any data;
-  DOMString origin;
-  DOMString lastEventId;
-  (WindowProxy or MessagePort)? source;
-  sequence<MessagePort> ports;
-};
-
-[Constructor(DOMString url, optional EventSourceInit eventSourceInitDict), Exposed=(Window,Worker)]
-interface EventSource : EventTarget {
-  readonly attribute DOMString url;
-  readonly attribute boolean withCredentials;
-
-  // ready state
-  const unsigned short CONNECTING = 0;
-  const unsigned short OPEN = 1;
-  const unsigned short CLOSED = 2;
-  readonly attribute unsigned short readyState;
-
-  // networking
-           attribute EventHandler onopen;
-           attribute EventHandler onmessage;
-           attribute EventHandler onerror;
-  void close();
-};
-
-dictionary EventSourceInit {
-  boolean withCredentials = false;
-};
-
-enum BinaryType { "blob", "arraybuffer" };
-[Constructor(DOMString url, optional (DOMString or DOMString[]) protocols), Exposed=(Window,Worker)]
-interface WebSocket : EventTarget {
-  readonly attribute DOMString url;
-
-  // ready state
-  const unsigned short CONNECTING = 0;
-  const unsigned short OPEN = 1;
-  const unsigned short CLOSING = 2;
-  const unsigned short CLOSED = 3;
-  readonly attribute unsigned short readyState;
-  readonly attribute unsigned long bufferedAmount;
-
-  // networking
-  attribute EventHandler onopen;
-  attribute EventHandler onerror;
-  attribute EventHandler onclose;
-  readonly attribute DOMString extensions;
-  readonly attribute DOMString protocol;
-  void close([Clamp] optional unsigned short code, optional USVString reason);
-
-  // messaging
-  attribute EventHandler onmessage;
-  attribute BinaryType binaryType;
-  void send(USVString data);
-  void send(Blob data);
-  void send(ArrayBuffer data);
-  void send(ArrayBufferView data);
-};
-
-[Constructor(DOMString type, optional CloseEventInit eventInitDict), Exposed=(Window,Worker)]
-interface CloseEvent : Event {
-  readonly attribute boolean wasClean;
-  readonly attribute unsigned short code;
-  readonly attribute DOMString reason;
-};
-
-dictionary CloseEventInit : EventInit {
-  boolean wasClean;
-  unsigned short code;
-  DOMString reason;
-};
-
-[Constructor, Exposed=(Window,Worker)]
-interface MessageChannel {
-  readonly attribute MessagePort port1;
-  readonly attribute MessagePort port2;
-};
-
-[Exposed=(Window,Worker)]
-interface MessagePort : EventTarget {
-  void postMessage(any message, optional sequence<Transferable> transfer);
-  void start();
-  void close();
-
-  // event handlers
-           attribute EventHandler onmessage;
-};
-// MessagePort implements Transferable;
-
-[Constructor(DOMString channel), Exposed=(Window,Worker)]
-interface BroadcastChannel : EventTarget {
-  readonly attribute DOMString name;
-  void postMessage(any message);
-  void close();
-           attribute EventHandler onmessage;
-};
-
-[Exposed=Worker]
-interface WorkerGlobalScope : EventTarget {
-  readonly attribute WorkerGlobalScope self;
-  readonly attribute WorkerLocation location;
-
-  void close();
-           attribute OnErrorEventHandler onerror;
-           attribute EventHandler onlanguagechange;
-           attribute EventHandler onoffline;
-           attribute EventHandler ononline;
-
-  // also has additional members in a partial interface
-};
-
-[Global=(Worker,DedicatedWorker),Exposed=DedicatedWorker]
-/*sealed*/ interface DedicatedWorkerGlobalScope : WorkerGlobalScope {
-  void postMessage(any message, optional sequence<Transferable> transfer);
-           attribute EventHandler onmessage;
-};
-
-[Global=(Worker,SharedWorker),Exposed=SharedWorker]
-/*sealed*/ interface SharedWorkerGlobalScope : WorkerGlobalScope {
-  readonly attribute DOMString name;
-  readonly attribute ApplicationCache applicationCache;
-           attribute EventHandler onconnect;
-};
-
-[NoInterfaceObject, Exposed=(Window,Worker)]
-interface AbstractWorker {
-           attribute EventHandler onerror;
-};
-
-[Constructor(DOMString scriptURL), Exposed=(Window,Worker)]
-interface Worker : EventTarget {
-  void terminate();
-
-  void postMessage(any message, optional sequence<Transferable> transfer);
-           attribute EventHandler onmessage;
-};
-Worker implements AbstractWorker;
-
-[Constructor(DOMString scriptURL, optional DOMString name), Exposed=(Window,Worker)]
-interface SharedWorker : EventTarget {
-  readonly attribute MessagePort port;
-};
-SharedWorker implements AbstractWorker;
-
-partial interface WorkerGlobalScope { // not obsolete
-  void importScripts(DOMString... urls);
-  readonly attribute WorkerNavigator navigator;
-};
-WorkerGlobalScope implements WindowTimers;
-WorkerGlobalScope implements WindowBase64;
-
-[Exposed=Worker]
-interface WorkerNavigator {};
-WorkerNavigator implements NavigatorID;
-WorkerNavigator implements NavigatorLanguage;
-WorkerNavigator implements NavigatorOnLine;
-
-[Exposed=Worker]
-interface WorkerLocation {
-  stringifier readonly attribute USVString href;
-  readonly attribute USVString origin;
-  readonly attribute USVString protocol;
-  readonly attribute USVString host;
-  readonly attribute USVString hostname;
-  readonly attribute USVString port;
-  readonly attribute USVString pathname;
-  readonly attribute USVString search;
-  readonly attribute USVString hash;
-};
-
-interface Storage {
-  readonly attribute unsigned long length;
-  DOMString? key(unsigned long index);
-  getter DOMString? getItem(DOMString key);
-  setter creator void setItem(DOMString key, DOMString value);
-  deleter void removeItem(DOMString key);
-  void clear();
-};
-
-[NoInterfaceObject]
-interface WindowSessionStorage {
-  readonly attribute Storage sessionStorage;
-};
-Window implements WindowSessionStorage;
-
-[NoInterfaceObject]
-interface WindowLocalStorage {
-  readonly attribute Storage localStorage;
-};
-Window implements WindowLocalStorage;
-
-[Constructor(DOMString type, optional StorageEventInit eventInitDict)]
-interface StorageEvent : Event {
-  readonly attribute DOMString? key;
-  readonly attribute DOMString? oldValue;
-  readonly attribute DOMString? newValue;
-  readonly attribute DOMString url;
-  readonly attribute Storage? storageArea;
-};
-
-dictionary StorageEventInit : EventInit {
-  DOMString? key;
-  DOMString? oldValue;
-  DOMString? newValue;
-  DOMString url;
-  Storage? storageArea;
-};
-
-interface HTMLAppletElement : HTMLElement {
-           attribute DOMString align;
-           attribute DOMString alt;
-           attribute DOMString archive;
-           attribute DOMString code;
-           attribute DOMString codeBase;
-           attribute DOMString height;
-           attribute unsigned long hspace;
-           attribute DOMString name;
-           attribute DOMString _object; // the underscore is not part of the identifier
-           attribute unsigned long vspace;
-           attribute DOMString width;
-};
-
-interface HTMLMarqueeElement : HTMLElement {
-           attribute DOMString behavior;
-           attribute DOMString bgColor;
-           attribute DOMString direction;
-           attribute DOMString height;
-           attribute unsigned long hspace;
-           attribute long loop;
-           attribute unsigned long scrollAmount;
-           attribute unsigned long scrollDelay;
-           attribute boolean trueSpeed;
-           attribute unsigned long vspace;
-           attribute DOMString width;
-
-           attribute EventHandler onbounce;
-           attribute EventHandler onfinish;
-           attribute EventHandler onstart;
-
-  void start();
-  void stop();
-};
-
-interface HTMLFrameSetElement : HTMLElement {
-           attribute DOMString cols;
-           attribute DOMString rows;
-};
-HTMLFrameSetElement implements WindowEventHandlers;
-
-interface HTMLFrameElement : HTMLElement {
-           attribute DOMString name;
-           attribute DOMString scrolling;
-           attribute DOMString src;
-           attribute DOMString frameBorder;
-           attribute DOMString longDesc;
-           attribute boolean noResize;
-  readonly attribute Document? contentDocument;
-  readonly attribute WindowProxy? contentWindow;
-
-  [TreatNullAs=EmptyString] attribute DOMString marginHeight;
-  [TreatNullAs=EmptyString] attribute DOMString marginWidth;
-};
-
-partial interface HTMLAnchorElement {
-           attribute DOMString coords;
-           attribute DOMString charset;
-           attribute DOMString name;
-           attribute DOMString rev;
-           attribute DOMString shape;
-};
-
-partial interface HTMLAreaElement {
-           attribute boolean noHref;
-};
-
-partial interface HTMLBodyElement {
-  [TreatNullAs=EmptyString] attribute DOMString text;
-  [TreatNullAs=EmptyString] attribute DOMString link;
-  [TreatNullAs=EmptyString] attribute DOMString vLink;
-  [TreatNullAs=EmptyString] attribute DOMString aLink;
-  [TreatNullAs=EmptyString] attribute DOMString bgColor;
-                            attribute DOMString background;
-};
-
-partial interface HTMLBRElement {
-           attribute DOMString clear;
-};
-
-partial interface HTMLTableCaptionElement {
-           attribute DOMString align;
-};
-
-partial interface HTMLTableColElement {
-           attribute DOMString align;
-           attribute DOMString ch;
-           attribute DOMString chOff;
-           attribute DOMString vAlign;
-           attribute DOMString width;
-};
-
-interface HTMLDirectoryElement : HTMLElement {
-           attribute boolean compact;
-};
-
-partial interface HTMLDivElement {
-           attribute DOMString align;
-};
-
-partial interface HTMLDListElement {
-           attribute boolean compact;
-};
-
-partial interface HTMLEmbedElement {
-           attribute DOMString align;
-           attribute DOMString name;
-};
-
-interface HTMLFontElement : HTMLElement {
-  [TreatNullAs=EmptyString] attribute DOMString color;
-                            attribute DOMString face;
-                            attribute DOMString size;
-};
-
-partial interface HTMLHeadingElement {
-           attribute DOMString align;
-};
-
-partial interface HTMLHRElement {
-           attribute DOMString align;
-           attribute DOMString color;
-           attribute boolean noShade;
-           attribute DOMString size;
-           attribute DOMString width;
-};
-
-partial interface HTMLHtmlElement {
-           attribute DOMString version;
-};
-
-partial interface HTMLIFrameElement {
-  [CEReactions] attribute DOMString align;
-  [CEReactions] attribute DOMString scrolling;
-  [CEReactions] attribute DOMString frameBorder;
-  [CEReactions] attribute USVString longDesc;
-
-  [CEReactions, TreatNullAs=EmptyString] attribute DOMString marginHeight;
-  [CEReactions, TreatNullAs=EmptyString] attribute DOMString marginWidth;
-};
-
-partial interface HTMLImageElement {
-  [CEReactions] attribute DOMString name;
-  [CEReactions] attribute USVString lowsrc;
-  [CEReactions] attribute DOMString align;
-  [CEReactions] attribute unsigned long hspace;
-  [CEReactions] attribute unsigned long vspace;
-  [CEReactions] attribute USVString longDesc;
-
-  [CEReactions, TreatNullAs=EmptyString] attribute DOMString border;
-};
-
-partial interface HTMLInputElement {
-           attribute DOMString align;
-           attribute DOMString useMap;
-};
-
-partial interface HTMLLegendElement {
-           attribute DOMString align;
-};
-
-partial interface HTMLLIElement {
-           attribute DOMString type;
-};
-
-partial interface HTMLLinkElement {
-  [CEReactions] attribute DOMString charset;
-  [CEReactions] attribute DOMString rev;
-  [CEReactions] attribute DOMString target;
-};
-
-partial interface HTMLMenuElement {
-           attribute boolean compact;
-};
-
-partial interface HTMLMetaElement {
-           attribute DOMString scheme;
-};
-
-partial interface HTMLObjectElement {
-           attribute DOMString align;
-           attribute DOMString archive;
-           attribute DOMString code;
-           attribute boolean declare;
-           attribute unsigned long hspace;
-           attribute DOMString standby;
-           attribute unsigned long vspace;
-           attribute DOMString codeBase;
-           attribute DOMString codeType;
-
-  [TreatNullAs=EmptyString] attribute DOMString border;
-};
-
-partial interface HTMLOListElement {
-           attribute boolean compact;
-};
-
-partial interface HTMLParagraphElement {
-           attribute DOMString align;
-};
-
-partial interface HTMLParamElement {
-           attribute DOMString type;
-           attribute DOMString valueType;
-};
-
-partial interface HTMLPreElement {
-           attribute long width;
-};
-
-partial interface HTMLScriptElement {
-           attribute DOMString event;
-           attribute DOMString htmlFor;
-};
-
-partial interface HTMLTableElement {
-           attribute DOMString align;
-           attribute DOMString border;
-           attribute DOMString frame;
-           attribute DOMString rules;
-           attribute DOMString summary;
-           attribute DOMString width;
-
-  [TreatNullAs=EmptyString] attribute DOMString bgColor;
-  [TreatNullAs=EmptyString] attribute DOMString cellPadding;
-  [TreatNullAs=EmptyString] attribute DOMString cellSpacing;
-};
-
-partial interface HTMLTableSectionElement {
-           attribute DOMString align;
-           attribute DOMString ch;
-           attribute DOMString chOff;
-           attribute DOMString vAlign;
-};
-
-partial interface HTMLTableCellElement {
-           attribute DOMString align;
-           attribute DOMString axis;
-           attribute DOMString height;
-           attribute DOMString width;
-
-           attribute DOMString ch;
-           attribute DOMString chOff;
-           attribute boolean noWrap;
-           attribute DOMString vAlign;
-
-  [TreatNullAs=EmptyString] attribute DOMString bgColor;
-};
-
-partial interface HTMLTableRowElement {
-           attribute DOMString align;
-           attribute DOMString ch;
-           attribute DOMString chOff;
-           attribute DOMString vAlign;
-
-  [TreatNullAs=EmptyString] attribute DOMString bgColor;
-};
-
-partial interface HTMLUListElement {
-           attribute boolean compact;
-           attribute DOMString type;
-};
-
-partial interface Document {
-  [TreatNullAs=EmptyString] attribute DOMString fgColor;
-  [TreatNullAs=EmptyString] attribute DOMString linkColor;
-  [TreatNullAs=EmptyString] attribute DOMString vlinkColor;
-  [TreatNullAs=EmptyString] attribute DOMString alinkColor;
-  [TreatNullAs=EmptyString] attribute DOMString bgColor;
-
-  readonly attribute HTMLCollection anchors;
-  readonly attribute HTMLCollection applets;
-
-  void clear();
-  void captureEvents();
-  void releaseEvents();
-
-  readonly attribute HTMLAllCollection all;
-};
-
-partial interface Window {
-  void captureEvents();
-  void releaseEvents();
-};
-
-</script>
 <script>
 "use strict";
-var idlArray;
 var errorVideo; // used to get a MediaError object
 var iframe; // used to get a Document object (can't use `document` because some test clears the page)
 setup(function() {
-  idlArray = new IdlArray();
-  [].forEach.call(document.querySelectorAll("script[type=text\\/plain]"), function(node) {
-    if (node.className == "untested") {
-      idlArray.add_untested_idls(node.textContent);
-    } else {
-      idlArray.add_idls(node.textContent);
-    }
-  });
   errorVideo = document.createElement('video');
   errorVideo.src = 'data:,';
   errorVideo.preload = 'auto';
   iframe = document.createElement('iframe');
   iframe.hidden = true;
   document.body.appendChild(iframe);
-}, {explicit_done:true});
+});
 
 function createInput(type) {
   var input = document.createElement('input');
@@ -3149,7 +30,11 @@ function createInput(type) {
   return input;
 }
 
-window.onload = function() {
+function doTest([untested, tested]) {
+  var idlArray = new IdlArray();
+  idlArray.add_untested_idls(untested);
+  idlArray.add_idls(tested);
+
   idlArray.add_objects({
     NodeList: ['document.getElementsByName("name")'],
     HTMLAllCollection: ['document.all'],
@@ -3316,7 +201,7 @@ window.onload = function() {
     AbstractWorker: [],
     Worker: [],
     SharedWorker: [],
-    MessageEvent: [],
+    MessageEvent: ['new MessageEvent("message", { data: 5 })'],
     MessageChannel: [],
     MessagePort: [],
     HTMLAppletElement: ['document.createElement("applet")'],
@@ -3328,6 +213,24 @@ window.onload = function() {
   });
   idlArray.prevent_multiple_testing("HTMLElement");
   idlArray.test();
-  done();
 };
+
+function fetchData(url) {
+  return fetch(url).then((response) => response.text());
+}
+
+function waitForLoad() {
+  return new Promise(function(resolve) {
+    addEventListener("load", resolve);
+  });
+}
+
+promise_test(function() {
+  // Have to wait for onload
+  return Promise.all([fetchData("resources/untested-interfaces.idl"),
+                      fetchData("resources/interfaces.idl"),
+                      waitForLoad()])
+                .then(doTest);
+}, "Test driver");
+
 </script>
diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/dom/resources/interfaces.idl b/LayoutTests/imported/w3c/web-platform-tests/html/dom/resources/interfaces.idl
new file mode 100644 (file)
index 0000000..26c8cff
--- /dev/null
@@ -0,0 +1,2281 @@
+// HTML IDLs
+typedef (Int8Array or Uint8Array or Uint8ClampedArray or
+         Int16Array or Uint16Array or
+         Int32Array or Uint32Array or
+         Float32Array or Float64Array or
+         DataView) ArrayBufferView;
+
+[NoInterfaceObject, Exposed=Window]
+interface HTMLHyperlinkElementUtils {
+  stringifier attribute USVString href;
+  readonly attribute USVString origin;
+           attribute USVString protocol;
+           attribute USVString username;
+           attribute USVString password;
+           attribute USVString host;
+           attribute USVString hostname;
+           attribute USVString port;
+           attribute USVString pathname;
+           attribute USVString search;
+           attribute USVString hash;
+};
+
+interface HTMLAllCollection {
+  readonly attribute unsigned long length;
+  getter Element? item(unsigned long index);
+  (HTMLCollection or Element)? item(DOMString name);
+  legacycaller getter (HTMLCollection or Element)? namedItem(DOMString name);
+};
+
+interface HTMLFormControlsCollection : HTMLCollection {
+  // inherits length and item()
+  getter (RadioNodeList or Element)? namedItem(DOMString name); // shadows inherited namedItem()
+};
+
+interface RadioNodeList : NodeList {
+          attribute DOMString value;
+};
+
+interface HTMLOptionsCollection : HTMLCollection {
+  // inherits item(), namedItem()
+  attribute unsigned long length; // shadows inherited length
+  [CEReactions] setter void (unsigned long index, HTMLOptionElement? option);
+  [CEReactions] void add((HTMLOptionElement or HTMLOptGroupElement) element, optional (HTMLElement or long)? before = null);
+  [CEReactions] void remove(long index);
+  attribute long selectedIndex;
+};
+
+typedef sequence<any> PropertyValueArray;
+
+[OverrideBuiltins]
+interface DOMStringMap {
+  getter DOMString (DOMString name);
+  setter creator void (DOMString name, DOMString value);
+  deleter void (DOMString name);
+};
+
+typedef (ArrayBuffer or MessagePort) Transferable;
+
+callback FileCallback = void (File file);
+
+enum DocumentReadyState { "loading", "interactive", "complete" };
+typedef (HTMLScriptElement or SVGScriptElement) HTMLOrSVGScriptElement;
+
+[OverrideBuiltins]
+partial /*sealed*/ interface Document {
+  // resource metadata management
+  [PutForwards=href, Unforgeable] readonly attribute Location? location;
+           attribute USVString domain;
+  readonly attribute USVString referrer;
+           attribute USVString cookie;
+  readonly attribute DOMString lastModified;
+  readonly attribute DocumentReadyState readyState;
+
+  // DOM tree accessors
+  getter object (DOMString name);
+  [CEReactions] attribute DOMString title;
+  [CEReactions] attribute DOMString dir;
+  [CEReactions] attribute HTMLElement? body;
+  readonly attribute HTMLHeadElement? head;
+  [SameObject] readonly attribute HTMLCollection images;
+  [SameObject] readonly attribute HTMLCollection embeds;
+  [SameObject] readonly attribute HTMLCollection plugins;
+  [SameObject] readonly attribute HTMLCollection links;
+  [SameObject] readonly attribute HTMLCollection forms;
+  [SameObject] readonly attribute HTMLCollection scripts;
+  NodeList getElementsByName(DOMString elementName);
+  readonly attribute HTMLOrSVGScriptElement? currentScript; // classic scripts in a document tree only
+
+  // dynamic markup insertion
+  [CEReactions] Document open(optional DOMString type = "text/html", optional DOMString replace = "");
+  WindowProxy open(USVString url, DOMString name, DOMString features);
+  [CEReactions] void close();
+  [CEReactions] void write(DOMString... text);
+  [CEReactions] void writeln(DOMString... text);
+
+  // user interaction
+  readonly attribute WindowProxy? defaultView;
+  readonly attribute Element? activeElement;
+  boolean hasFocus();
+  [CEReactions] attribute DOMString designMode;
+  [CEReactions] boolean execCommand(DOMString commandId, optional boolean showUI = false, optional DOMString value = "");
+  boolean queryCommandEnabled(DOMString commandId);
+  boolean queryCommandIndeterm(DOMString commandId);
+  boolean queryCommandState(DOMString commandId);
+  boolean queryCommandSupported(DOMString commandId);
+  DOMString queryCommandValue(DOMString commandId);
+
+  // special event handler IDL attributes that only apply to Document objects
+  [LenientThis] attribute EventHandler onreadystatechange;
+
+  // also has obsolete members
+};
+Document implements GlobalEventHandlers;
+Document implements DocumentAndElementEventHandlers;
+
+[NoInterfaceObject]
+interface ElementContentEditable {
+  [CEReactions] attribute DOMString contentEditable;
+  readonly attribute boolean isContentEditable;
+};
+
+interface HTMLElement : Element {
+  // metadata attributes
+  [CEReactions] attribute DOMString title;
+  [CEReactions] attribute DOMString lang;
+  [CEReactions] attribute boolean translate;
+  [CEReactions] attribute DOMString dir;
+  [SameObject] readonly attribute DOMStringMap dataset;
+
+  // user interaction
+  [CEReactions] attribute boolean hidden;
+  void click();
+  [CEReactions] attribute long tabIndex;
+  void focus();
+  void blur();
+  [CEReactions] attribute DOMString accessKey;
+  readonly attribute DOMString accessKeyLabel;
+  [CEReactions] attribute boolean draggable;
+  [CEReactions] attribute HTMLMenuElement? contextMenu;
+  [CEReactions] attribute boolean spellcheck;
+  void forceSpellCheck();
+
+  [CEReactions, TreatNullAs=EmptyString] attribute DOMString innerText;
+};
+HTMLElement implements GlobalEventHandlers;
+HTMLElement implements DocumentAndElementEventHandlers;
+HTMLElement implements ElementContentEditable;
+
+interface HTMLUnknownElement : HTMLElement { };
+
+interface HTMLHtmlElement : HTMLElement {
+  // also has obsolete members
+};
+
+interface HTMLHeadElement : HTMLElement {};
+
+interface HTMLTitleElement : HTMLElement {
+           attribute DOMString text;
+};
+
+interface HTMLBaseElement : HTMLElement {
+           attribute DOMString href;
+           attribute DOMString target;
+};
+
+[HTMLConstructor]
+interface HTMLLinkElement : HTMLElement {
+  [CEReactions] attribute USVString href;
+  [CEReactions] attribute DOMString? crossOrigin;
+  [CEReactions] attribute DOMString rel;
+  // [CEReactions] attribute RequestDestination as; // (default "") XXX TODO
+  [CEReactions, SameObject, PutForwards=value] readonly attribute DOMTokenList relList;
+  [CEReactions] attribute DOMString media;
+  [CEReactions] attribute DOMString nonce;
+  [CEReactions] attribute DOMString integrity;
+  [CEReactions] attribute DOMString hreflang;
+  [CEReactions] attribute DOMString type;
+  [CEReactions, SameObject, PutForwards=value] readonly attribute DOMTokenList sizes;
+  [CEReactions] attribute DOMString referrerPolicy;
+
+  // also has obsolete members
+};
+HTMLLinkElement implements LinkStyle;
+
+interface HTMLMetaElement : HTMLElement {
+           attribute DOMString name;
+           attribute DOMString httpEquiv;
+           attribute DOMString content;
+
+  // also has obsolete members
+};
+
+interface HTMLStyleElement : HTMLElement {
+  [CEReactions] attribute DOMString media;
+  [CEReactions] attribute DOMString nonce;
+  [CEReactions] attribute DOMString type;
+};
+HTMLStyleElement implements LinkStyle;
+
+interface HTMLBodyElement : HTMLElement {
+
+  // also has obsolete members
+};
+HTMLBodyElement implements WindowEventHandlers;
+
+interface HTMLHeadingElement : HTMLElement {
+  // also has obsolete members
+};
+
+interface HTMLParagraphElement : HTMLElement {
+  // also has obsolete members
+};
+
+interface HTMLHRElement : HTMLElement {
+  // also has obsolete members
+};
+
+interface HTMLPreElement : HTMLElement {
+  // also has obsolete members
+};
+
+interface HTMLQuoteElement : HTMLElement {
+           attribute DOMString cite;
+};
+
+interface HTMLOListElement : HTMLElement {
+           attribute boolean reversed;
+           attribute long start;
+           attribute DOMString type;
+
+  // also has obsolete members
+};
+
+interface HTMLUListElement : HTMLElement {
+  // also has obsolete members
+};
+
+interface HTMLLIElement : HTMLElement {
+           attribute long value;
+
+  // also has obsolete members
+};
+
+interface HTMLDListElement : HTMLElement {
+  // also has obsolete members
+};
+
+interface HTMLDivElement : HTMLElement {
+  // also has obsolete members
+};
+
+[HTMLConstructor]
+interface HTMLAnchorElement : HTMLElement {
+  [CEReactions] attribute DOMString target;
+  [CEReactions] attribute DOMString download;
+  [CEReactions] attribute USVString ping;
+  [CEReactions] attribute DOMString rel;
+  [CEReactions, SameObject, PutForwards=value] readonly attribute DOMTokenList relList;
+  [CEReactions] attribute DOMString hreflang;
+  [CEReactions] attribute DOMString type;
+
+  [CEReactions] attribute DOMString text;
+
+  [CEReactions] attribute DOMString referrerPolicy;
+
+  // also has obsolete members
+};
+HTMLAnchorElement implements HTMLHyperlinkElementUtils;
+
+interface HTMLDataElement : HTMLElement {
+           attribute DOMString value;
+};
+
+interface HTMLTimeElement : HTMLElement {
+           attribute DOMString dateTime;
+};
+
+interface HTMLSpanElement : HTMLElement {};
+
+interface HTMLBRElement : HTMLElement {
+  // also has obsolete members
+};
+
+interface HTMLModElement : HTMLElement {
+           attribute DOMString cite;
+           attribute DOMString dateTime;
+};
+
+interface HTMLPictureElement : HTMLElement {};
+
+partial interface HTMLSourceElement {
+           attribute DOMString srcset;
+           attribute DOMString sizes;
+           attribute DOMString media;
+};
+
+[HTMLConstructor, NamedConstructor=Image(optional unsigned long width, optional unsigned long height)]
+interface HTMLImageElement : HTMLElement {
+  [CEReactions] attribute DOMString alt;
+  [CEReactions] attribute USVString src;
+  [CEReactions] attribute USVString srcset;
+  [CEReactions] attribute DOMString sizes;
+  [CEReactions] attribute DOMString? crossOrigin;
+  [CEReactions] attribute DOMString useMap;
+  [CEReactions] attribute boolean isMap;
+  [CEReactions] attribute unsigned long width;
+  [CEReactions] attribute unsigned long height;
+  readonly attribute unsigned long naturalWidth;
+  readonly attribute unsigned long naturalHeight;
+  readonly attribute boolean complete;
+  readonly attribute USVString currentSrc;
+  [CEReactions] attribute DOMString referrerPolicy;
+
+  // also has obsolete members
+};
+
+[HTMLConstructor]
+interface HTMLIFrameElement : HTMLElement {
+  [CEReactions] attribute USVString src;
+  [CEReactions] attribute DOMString srcdoc;
+  [CEReactions] attribute DOMString name;
+  [CEReactions, SameObject, PutForwards=value] readonly attribute DOMTokenList sandbox;
+  [CEReactions] attribute boolean allowFullscreen;
+  [CEReactions] attribute boolean allowUserMedia;
+  [CEReactions] attribute boolean allowPaymentRequest;
+  [CEReactions] attribute DOMString width;
+  [CEReactions] attribute DOMString height;
+  [CEReactions] attribute DOMString referrerPolicy;
+  readonly attribute Document? contentDocument;
+  readonly attribute WindowProxy? contentWindow;
+  Document? getSVGDocument();
+};
+
+interface HTMLEmbedElement : HTMLElement {
+           attribute DOMString src;
+           attribute DOMString type;
+           attribute DOMString width;
+           attribute DOMString height;
+  Document getSVGDocument();
+
+  // also has obsolete members
+};
+
+interface HTMLObjectElement : HTMLElement {
+           attribute DOMString data;
+           attribute DOMString type;
+           attribute boolean typeMustMatch;
+           attribute DOMString name;
+           attribute DOMString useMap;
+  readonly attribute HTMLFormElement? form;
+           attribute DOMString width;
+           attribute DOMString height;
+  readonly attribute Document? contentDocument;
+  readonly attribute WindowProxy? contentWindow;
+
+  readonly attribute boolean willValidate;
+  readonly attribute ValidityState validity;
+  readonly attribute DOMString validationMessage;
+  boolean checkValidity();
+  boolean reportValidity();
+  void setCustomValidity(DOMString error);
+
+  // also has obsolete members
+};
+
+interface HTMLParamElement : HTMLElement {
+           attribute DOMString name;
+           attribute DOMString value;
+
+  // also has obsolete members
+};
+
+interface HTMLVideoElement : HTMLMediaElement {
+           attribute unsigned long width;
+           attribute unsigned long height;
+  readonly attribute unsigned long videoWidth;
+  readonly attribute unsigned long videoHeight;
+           attribute DOMString poster;
+};
+
+[NamedConstructor=Audio(optional DOMString src)]
+interface HTMLAudioElement : HTMLMediaElement {};
+
+interface HTMLSourceElement : HTMLElement {
+           attribute DOMString src;
+           attribute DOMString type;
+
+  // also has obsolete members
+};
+
+interface HTMLTrackElement : HTMLElement {
+           attribute DOMString kind;
+           attribute DOMString src;
+           attribute DOMString srclang;
+           attribute DOMString label;
+           attribute boolean default;
+
+  const unsigned short NONE = 0;
+  const unsigned short LOADING = 1;
+  const unsigned short LOADED = 2;
+  const unsigned short ERROR = 3;
+  readonly attribute unsigned short readyState;
+
+  readonly attribute TextTrack track;
+};
+
+enum CanPlayTypeResult { "" /* empty string */, "maybe", "probably" };
+interface HTMLMediaElement : HTMLElement {
+
+  // error state
+  readonly attribute MediaError? error;
+
+  // network state
+           attribute DOMString src;
+  readonly attribute DOMString currentSrc;
+           attribute DOMString? crossOrigin;
+  const unsigned short NETWORK_EMPTY = 0;
+  const unsigned short NETWORK_IDLE = 1;
+  const unsigned short NETWORK_LOADING = 2;
+  const unsigned short NETWORK_NO_SOURCE = 3;
+  readonly attribute unsigned short networkState;
+           attribute DOMString preload;
+  readonly attribute TimeRanges buffered;
+  void load();
+  CanPlayTypeResult canPlayType(DOMString type);
+
+  // ready state
+  const unsigned short HAVE_NOTHING = 0;
+  const unsigned short HAVE_METADATA = 1;
+  const unsigned short HAVE_CURRENT_DATA = 2;
+  const unsigned short HAVE_FUTURE_DATA = 3;
+  const unsigned short HAVE_ENOUGH_DATA = 4;
+  readonly attribute unsigned short readyState;
+  readonly attribute boolean seeking;
+
+  // playback state
+           attribute double currentTime;
+  void fastSeek(double time);
+  readonly attribute unrestricted double duration;
+  Date getStartDate();
+  readonly attribute boolean paused;
+           attribute double defaultPlaybackRate;
+           attribute double playbackRate;
+  readonly attribute TimeRanges played;
+  readonly attribute TimeRanges seekable;
+  readonly attribute boolean ended;
+           attribute boolean autoplay;
+           attribute boolean loop;
+  Promise<void> play();
+  void pause();
+
+  // controls
+           attribute boolean controls;
+           attribute double volume;
+           attribute boolean muted;
+           attribute boolean defaultMuted;
+
+  // tracks
+  readonly attribute AudioTrackList audioTracks;
+  readonly attribute VideoTrackList videoTracks;
+  readonly attribute TextTrackList textTracks;
+  TextTrack addTextTrack(TextTrackKind kind, optional DOMString label = "", optional DOMString language = "");
+};
+
+interface MediaError {
+  const unsigned short MEDIA_ERR_ABORTED = 1;
+  const unsigned short MEDIA_ERR_NETWORK = 2;
+  const unsigned short MEDIA_ERR_DECODE = 3;
+  const unsigned short MEDIA_ERR_SRC_NOT_SUPPORTED = 4;
+  readonly attribute unsigned short code;
+  readonly attribute DOMString message;
+};
+
+interface AudioTrackList : EventTarget {
+  readonly attribute unsigned long length;
+  getter AudioTrack (unsigned long index);
+  AudioTrack? getTrackById(DOMString id);
+
+           attribute EventHandler onchange;
+           attribute EventHandler onaddtrack;
+           attribute EventHandler onremovetrack;
+};
+
+interface AudioTrack {
+  readonly attribute DOMString id;
+  readonly attribute DOMString kind;
+  readonly attribute DOMString label;
+  readonly attribute DOMString language;
+           attribute boolean enabled;
+};
+
+interface VideoTrackList : EventTarget {
+  readonly attribute unsigned long length;
+  getter VideoTrack (unsigned long index);
+  VideoTrack? getTrackById(DOMString id);
+  readonly attribute long selectedIndex;
+
+           attribute EventHandler onchange;
+           attribute EventHandler onaddtrack;
+           attribute EventHandler onremovetrack;
+};
+
+interface VideoTrack {
+  readonly attribute DOMString id;
+  readonly attribute DOMString kind;
+  readonly attribute DOMString label;
+  readonly attribute DOMString language;
+           attribute boolean selected;
+};
+
+interface TextTrackList : EventTarget {
+  readonly attribute unsigned long length;
+  getter TextTrack (unsigned long index);
+  TextTrack? getTrackById(DOMString id);
+
+           attribute EventHandler onchange;
+           attribute EventHandler onaddtrack;
+           attribute EventHandler onremovetrack;
+};
+
+enum TextTrackMode { "disabled",  "hidden",  "showing" };
+enum TextTrackKind { "subtitles",  "captions",  "descriptions",  "chapters",  "metadata" };
+interface TextTrack : EventTarget {
+  readonly attribute TextTrackKind kind;
+  readonly attribute DOMString label;
+  readonly attribute DOMString language;
+
+  readonly attribute DOMString id;
+  readonly attribute DOMString inBandMetadataTrackDispatchType;
+
+           attribute TextTrackMode mode;
+
+  readonly attribute TextTrackCueList? cues;
+  readonly attribute TextTrackCueList? activeCues;
+
+  void addCue(TextTrackCue cue);
+  void removeCue(TextTrackCue cue);
+
+           attribute EventHandler oncuechange;
+};
+
+interface TextTrackCueList {
+  readonly attribute unsigned long length;
+  getter TextTrackCue (unsigned long index);
+  TextTrackCue? getCueById(DOMString id);
+};
+
+interface TextTrackCue : EventTarget {
+  readonly attribute TextTrack? track;
+
+           attribute DOMString id;
+           attribute double startTime;
+           attribute double endTime;
+           attribute boolean pauseOnExit;
+
+           attribute EventHandler onenter;
+           attribute EventHandler onexit;
+};
+
+interface TimeRanges {
+  readonly attribute unsigned long length;
+  double start(unsigned long index);
+  double end(unsigned long index);
+};
+
+[Constructor(DOMString type, optional TrackEventInit eventInitDict)]
+interface TrackEvent : Event {
+  readonly attribute (VideoTrack or AudioTrack or TextTrack) track;
+};
+
+dictionary TrackEventInit : EventInit {
+  (VideoTrack or AudioTrack or TextTrack) track;
+};
+
+interface HTMLMapElement : HTMLElement {
+           attribute DOMString name;
+  readonly attribute HTMLCollection areas;
+};
+
+[HTMLConstructor]
+interface HTMLAreaElement : HTMLElement {
+  [CEReactions] attribute DOMString alt;
+  [CEReactions] attribute DOMString coords;
+  [CEReactions] attribute DOMString shape;
+  [CEReactions] attribute DOMString target;
+  [CEReactions] attribute DOMString download;
+  [CEReactions] attribute USVString ping;
+  [CEReactions] attribute DOMString rel;
+  [CEReactions, SameObject, PutForwards=value] readonly attribute DOMTokenList relList;
+  [CEReactions] attribute DOMString referrerPolicy;
+
+  // also has obsolete members
+};
+HTMLAreaElement implements HTMLHyperlinkElementUtils;
+
+interface HTMLTableElement : HTMLElement {
+           attribute HTMLTableCaptionElement? caption;
+  HTMLElement createCaption();
+  void deleteCaption();
+           attribute HTMLTableSectionElement? tHead;
+  HTMLElement createTHead();
+  void deleteTHead();
+           attribute HTMLTableSectionElement? tFoot;
+  HTMLElement createTFoot();
+  void deleteTFoot();
+  readonly attribute HTMLCollection tBodies;
+  HTMLElement createTBody();
+  readonly attribute HTMLCollection rows;
+  HTMLElement insertRow(optional long index = -1);
+  void deleteRow(long index);
+
+  // also has obsolete members
+};
+
+interface HTMLTableCaptionElement : HTMLElement {
+  // also has obsolete members
+};
+
+interface HTMLTableColElement : HTMLElement {
+           attribute unsigned long span;
+
+  // also has obsolete members
+};
+
+interface HTMLTableSectionElement : HTMLElement {
+  readonly attribute HTMLCollection rows;
+  HTMLElement insertRow(optional long index = -1);
+  void deleteRow(long index);
+
+  // also has obsolete members
+};
+
+interface HTMLTableRowElement : HTMLElement {
+  readonly attribute long rowIndex;
+  readonly attribute long sectionRowIndex;
+  readonly attribute HTMLCollection cells;
+  HTMLElement insertCell(optional long index = -1);
+  void deleteCell(long index);
+
+  // also has obsolete members
+};
+
+interface HTMLTableCellElement : HTMLElement {
+  [CEReactions] attribute unsigned long colSpan;
+  [CEReactions] attribute unsigned long rowSpan;
+  [CEReactions] attribute DOMString headers;
+  readonly attribute long cellIndex;
+
+  [CEReactions] attribute DOMString scope; // only conforming for th elements
+  [CEReactions] attribute DOMString abbr;  // only conforming for th elements
+
+  // also has obsolete members
+};
+
+[OverrideBuiltins]
+interface HTMLFormElement : HTMLElement {
+           attribute DOMString acceptCharset;
+           attribute DOMString action;
+           attribute DOMString autocomplete;
+           attribute DOMString enctype;
+           attribute DOMString encoding;
+           attribute DOMString method;
+           attribute DOMString name;
+           attribute boolean noValidate;
+           attribute DOMString target;
+
+  readonly attribute HTMLFormControlsCollection elements;
+  readonly attribute unsigned long length;
+  getter Element (unsigned long index);
+  getter (RadioNodeList or Element) (DOMString name);
+
+  void submit();
+  void reset();
+  boolean checkValidity();
+  boolean reportValidity();
+};
+
+interface HTMLLabelElement : HTMLElement {
+  readonly attribute HTMLFormElement? form;
+           attribute DOMString htmlFor;
+  readonly attribute HTMLElement? control;
+};
+
+[HTMLConstructor]
+interface HTMLInputElement : HTMLElement {
+  [CEReactions] attribute DOMString accept;
+  [CEReactions] attribute DOMString alt;
+  [CEReactions] attribute DOMString autocomplete;
+  [CEReactions] attribute boolean autofocus;
+  [CEReactions] attribute boolean defaultChecked;
+  attribute boolean checked;
+  [CEReactions] attribute DOMString dirName;
+  [CEReactions] attribute boolean disabled;
+  readonly attribute HTMLFormElement? form;
+  readonly attribute FileList? files;
+  [CEReactions] attribute USVString formAction;
+  [CEReactions] attribute DOMString formEnctype;
+  [CEReactions] attribute DOMString formMethod;
+  [CEReactions] attribute boolean formNoValidate;
+  [CEReactions] attribute DOMString formTarget;
+  [CEReactions] attribute unsigned long height;
+  attribute boolean indeterminate;
+  [CEReactions] attribute DOMString inputMode;
+  readonly attribute HTMLElement? list;
+  [CEReactions] attribute DOMString max;
+  [CEReactions] attribute long maxLength;
+  [CEReactions] attribute DOMString min;
+  [CEReactions] attribute long minLength;
+  [CEReactions] attribute boolean multiple;
+  [CEReactions] attribute DOMString name;
+  [CEReactions] attribute DOMString pattern;
+  [CEReactions] attribute DOMString placeholder;
+  [CEReactions] attribute boolean readOnly;
+  [CEReactions] attribute boolean required;
+  [CEReactions] attribute unsigned long size;
+  [CEReactions] attribute USVString src;
+  [CEReactions] attribute DOMString step;
+  [CEReactions] attribute DOMString type;
+  [CEReactions] attribute DOMString defaultValue;
+  [CEReactions, TreatNullAs=EmptyString] attribute DOMString value;
+  attribute object? valueAsDate;
+  attribute unrestricted double valueAsNumber;
+  [CEReactions] attribute unsigned long width;
+
+  void stepUp(optional long n = 1);
+  void stepDown(optional long n = 1);
+
+  readonly attribute boolean willValidate;
+  readonly attribute ValidityState validity;
+  readonly attribute DOMString validationMessage;
+  boolean checkValidity();
+  boolean reportValidity();
+  void setCustomValidity(DOMString error);
+
+  readonly attribute NodeList? labels;
+
+  void select();
+  attribute unsigned long? selectionStart;
+  attribute unsigned long? selectionEnd;
+  attribute DOMString? selectionDirection;
+  void setRangeText(DOMString replacement);
+  void setRangeText(DOMString replacement, unsigned long start, unsigned long end, optional SelectionMode selectionMode = "preserve");
+  void setSelectionRange(unsigned long start, unsigned long end, optional DOMString direction);
+
+  // also has obsolete members
+};
+
+[HTMLConstructor]
+interface HTMLButtonElement : HTMLElement {
+  [CEReactions] attribute boolean autofocus;
+  [CEReactions] attribute boolean disabled;
+  readonly attribute HTMLFormElement? form;
+  [CEReactions] attribute USVString formAction;
+  [CEReactions] attribute DOMString formEnctype;
+  [CEReactions] attribute DOMString formMethod;
+  [CEReactions] attribute boolean formNoValidate;
+  [CEReactions] attribute DOMString formTarget;
+  [CEReactions] attribute DOMString name;
+  [CEReactions] attribute DOMString type;
+  [CEReactions] attribute DOMString value;
+
+  readonly attribute boolean willValidate;
+  readonly attribute ValidityState validity;
+  readonly attribute DOMString validationMessage;
+  boolean checkValidity();
+  boolean reportValidity();
+  void setCustomValidity(DOMString error);
+
+  readonly attribute NodeList labels;
+};
+
+[HTMLConstructor]
+interface HTMLSelectElement : HTMLElement {
+  [CEReactions] attribute DOMString autocomplete;
+  [CEReactions] attribute boolean autofocus;
+  [CEReactions] attribute boolean disabled;
+  readonly attribute HTMLFormElement? form;
+  [CEReactions] attribute boolean multiple;
+  [CEReactions] attribute DOMString name;
+  [CEReactions] attribute boolean required;
+  [CEReactions] attribute unsigned long size;
+
+  readonly attribute DOMString type;
+
+  [SameObject] readonly attribute HTMLOptionsCollection options;
+  [CEReactions] attribute unsigned long length;
+  getter Element? item(unsigned long index);
+  HTMLOptionElement? namedItem(DOMString name);
+  [CEReactions] void add((HTMLOptionElement or HTMLOptGroupElement) element, optional (HTMLElement or long)? before = null);
+  [CEReactions] void remove(); // ChildNode overload
+  [CEReactions] void remove(long index);
+  [CEReactions] setter void (unsigned long index, HTMLOptionElement? option);
+
+  [SameObject] readonly attribute HTMLCollection selectedOptions;
+  attribute long selectedIndex;
+  attribute DOMString value;
+
+  readonly attribute boolean willValidate;
+  readonly attribute ValidityState validity;
+  readonly attribute DOMString validationMessage;
+  boolean checkValidity();
+  boolean reportValidity();
+  void setCustomValidity(DOMString error);
+
+  readonly attribute NodeList labels;
+};
+
+interface HTMLDataListElement : HTMLElement {
+  readonly attribute HTMLCollection options;
+};
+
+interface HTMLOptGroupElement : HTMLElement {
+           attribute boolean disabled;
+           attribute DOMString label;
+};
+
+[NamedConstructor=Option(optional DOMString text = "", optional DOMString value, optional boolean defaultSelected = false, optional boolean selected = false)]
+interface HTMLOptionElement : HTMLElement {
+           attribute boolean disabled;
+  readonly attribute HTMLFormElement? form;
+           attribute DOMString label;
+           attribute boolean defaultSelected;
+           attribute boolean selected;
+           attribute DOMString value;
+
+           attribute DOMString text;
+  readonly attribute long index;
+};
+
+[HTMLConstructor]
+interface HTMLTextAreaElement : HTMLElement {
+  [CEReactions] attribute DOMString autocomplete;
+  [CEReactions] attribute boolean autofocus;
+  [CEReactions] attribute unsigned long cols;
+  [CEReactions] attribute DOMString dirName;
+  [CEReactions] attribute boolean disabled;
+  readonly attribute HTMLFormElement? form;
+  [CEReactions] attribute DOMString inputMode;
+  [CEReactions] attribute long maxLength;
+  [CEReactions] attribute long minLength;
+  [CEReactions] attribute DOMString name;
+  [CEReactions] attribute DOMString placeholder;
+  [CEReactions] attribute boolean readOnly;
+  [CEReactions] attribute boolean required;
+  [CEReactions] attribute unsigned long rows;
+  [CEReactions] attribute DOMString wrap;
+
+  readonly attribute DOMString type;
+  [CEReactions] attribute DOMString defaultValue;
+  [CEReactions, TreatNullAs=EmptyString] attribute DOMString value;
+  readonly attribute unsigned long textLength;
+
+  readonly attribute boolean willValidate;
+  readonly attribute ValidityState validity;
+  readonly attribute DOMString validationMessage;
+  boolean checkValidity();
+  boolean reportValidity();
+  void setCustomValidity(DOMString error);
+
+  readonly attribute NodeList labels;
+
+  void select();
+  attribute unsigned long selectionStart;
+  attribute unsigned long selectionEnd;
+  attribute DOMString selectionDirection;
+  void setRangeText(DOMString replacement);
+  void setRangeText(DOMString replacement, unsigned long start, unsigned long end, optional SelectionMode selectionMode = "preserve");
+  void setSelectionRange(unsigned long start, unsigned long end, optional DOMString direction);
+};
+
+[HTMLConstructor]
+interface HTMLOutputElement : HTMLElement {
+  [CEReactions, SameObject, PutForwards=value] readonly attribute DOMTokenList htmlFor;
+  readonly attribute HTMLFormElement? form;
+  [CEReactions] attribute DOMString name;
+
+  readonly attribute DOMString type;
+  [CEReactions] attribute DOMString defaultValue;
+  [CEReactions] attribute DOMString value;
+
+  readonly attribute boolean willValidate;
+  readonly attribute ValidityState validity;
+  readonly attribute DOMString validationMessage;
+  boolean checkValidity();
+  boolean reportValidity();
+  void setCustomValidity(DOMString error);
+
+  readonly attribute NodeList labels;
+};
+
+[HTMLConstructor]
+interface HTMLProgressElement : HTMLElement {
+  [CEReactions] attribute double value;
+  [CEReactions] attribute double max;
+  readonly attribute double position;
+  readonly attribute NodeList labels;
+};
+
+[HTMLConstructor]
+interface HTMLMeterElement : HTMLElement {
+  [CEReactions] attribute double value;
+  [CEReactions] attribute double min;
+  [CEReactions] attribute double max;
+  [CEReactions] attribute double low;
+  [CEReactions] attribute double high;
+  [CEReactions] attribute double optimum;
+  readonly attribute NodeList labels;
+};
+
+interface HTMLFieldSetElement : HTMLElement {
+           attribute boolean disabled;
+  readonly attribute HTMLFormElement? form;
+           attribute DOMString name;
+
+  readonly attribute DOMString type;
+
+  readonly attribute HTMLFormControlsCollection elements;
+
+  readonly attribute boolean willValidate;
+  readonly attribute ValidityState validity;
+  readonly attribute DOMString validationMessage;
+  boolean checkValidity();
+  boolean reportValidity();
+  void setCustomValidity(DOMString error);
+};
+
+interface HTMLLegendElement : HTMLElement {
+  readonly attribute HTMLFormElement? form;
+
+  // also has obsolete members
+};
+
+enum SelectionMode {
+  "select",
+  "start",
+  "end",
+  "preserve"/*,*/ // default
+};
+
+interface ValidityState {
+  readonly attribute boolean valueMissing;
+  readonly attribute boolean typeMismatch;
+  readonly attribute boolean patternMismatch;
+  readonly attribute boolean tooLong;
+  readonly attribute boolean tooShort;
+  readonly attribute boolean rangeUnderflow;
+  readonly attribute boolean rangeOverflow;
+  readonly attribute boolean stepMismatch;
+  readonly attribute boolean badInput;
+  readonly attribute boolean customError;
+  readonly attribute boolean valid;
+};
+
+interface HTMLDetailsElement : HTMLElement {
+           attribute boolean open;
+};
+
+interface HTMLMenuElement : HTMLElement {
+           attribute DOMString type;
+           attribute DOMString label;
+
+  // also has obsolete members
+};
+
+interface HTMLMenuItemElement : HTMLElement {
+           attribute DOMString type;
+           attribute DOMString label;
+           attribute DOMString icon;
+           attribute boolean disabled;
+           attribute boolean checked;
+           attribute DOMString radiogroup;
+           attribute boolean default;
+  readonly attribute HTMLElement? command;
+};
+
+[Constructor(DOMString type, optional RelatedEventInit eventInitDict)]
+interface RelatedEvent : Event {
+  readonly attribute EventTarget? relatedTarget;
+};
+
+dictionary RelatedEventInit : EventInit {
+  EventTarget? relatedTarget;
+};
+
+interface HTMLDialogElement : HTMLElement {
+           attribute boolean open;
+           attribute DOMString returnValue;
+  void show();
+  void showModal();
+  void close(optional DOMString returnValue);
+};
+
+[HTMLConstructor]
+interface HTMLScriptElement : HTMLElement {
+  [CEReactions] attribute USVString src;
+  [CEReactions] attribute DOMString type;
+  [CEReactions] attribute boolean noModule;
+  [CEReactions] attribute DOMString charset;
+  [CEReactions] attribute boolean async;
+  [CEReactions] attribute boolean defer;
+  [CEReactions] attribute DOMString? crossOrigin;
+  [CEReactions] attribute DOMString text;
+  [CEReactions] attribute DOMString nonce;
+  [CEReactions] attribute DOMString integrity;
+
+
+  // also has obsolete members
+};
+
+interface HTMLTemplateElement : HTMLElement {
+  readonly attribute DocumentFragment content;
+};
+
+interface HTMLSlotElement : HTMLElement {
+  /*[CEReactions]*/ attribute DOMString name;
+  sequence<Node> assignedNodes(optional AssignedNodesOptions options);
+};
+
+dictionary AssignedNodesOptions {
+  boolean flatten = false;
+};
+
+typedef (CanvasRenderingContext2D or WebGLRenderingContext) RenderingContext;
+callback BlobCallback = void (Blob? blob);
+
+interface HTMLCanvasElement : HTMLElement {
+           attribute unsigned long width;
+           attribute unsigned long height;
+
+  RenderingContext? getContext(DOMString contextId, any... arguments);
+
+  DOMString toDataURL(optional DOMString type, any... arguments);
+  void toBlob(BlobCallback _callback, optional DOMString type, any... arguments);
+};
+
+typedef (HTMLImageElement or
+         SVGImageElement) HTMLOrSVGImageElement;
+
+typedef (HTMLOrSVGImageElement or
+         HTMLVideoElement or
+         HTMLCanvasElement or
+         ImageBitmap) CanvasImageSource;
+
+enum CanvasFillRule { "nonzero", "evenodd" };
+
+dictionary CanvasRenderingContext2DSettings {
+  boolean alpha = true;
+};
+
+enum ImageSmoothingQuality { "low", "medium", "high" };
+
+interface CanvasRenderingContext2D {
+  // back-reference to the canvas
+  readonly attribute HTMLCanvasElement canvas;
+};
+CanvasRenderingContext2D implements CanvasState;
+CanvasRenderingContext2D implements CanvasTransform;
+CanvasRenderingContext2D implements CanvasCompositing;
+CanvasRenderingContext2D implements CanvasImageSmoothing;
+CanvasRenderingContext2D implements CanvasFillStrokeStyles;
+CanvasRenderingContext2D implements CanvasShadowStyles;
+CanvasRenderingContext2D implements CanvasFilters;
+CanvasRenderingContext2D implements CanvasRect;
+CanvasRenderingContext2D implements CanvasDrawPath;
+CanvasRenderingContext2D implements CanvasUserInterface;
+CanvasRenderingContext2D implements CanvasText;
+CanvasRenderingContext2D implements CanvasDrawImage;
+CanvasRenderingContext2D implements CanvasHitRegion;
+CanvasRenderingContext2D implements CanvasImageData;
+CanvasRenderingContext2D implements CanvasPathDrawingStyles;
+CanvasRenderingContext2D implements CanvasTextDrawingStyles;
+CanvasRenderingContext2D implements CanvasPath;
+
+[NoInterfaceObject]
+interface CanvasState {
+  // state
+  void save(); // push state on state stack
+  void restore(); // pop state stack and restore state
+};
+
+[NoInterfaceObject]
+interface CanvasTransform {
+  // transformations (default transform is the identity matrix)
+  void scale(unrestricted double x, unrestricted double y);
+  void rotate(unrestricted double angle);
+  void translate(unrestricted double x, unrestricted double y);
+  void transform(unrestricted double a, unrestricted double b, unrestricted double c, unrestricted double d, unrestricted double e, unrestricted double f);
+
+  [NewObject] DOMMatrix getTransform();
+  void setTransform(unrestricted double a, unrestricted double b, unrestricted double c, unrestricted double d, unrestricted double e, unrestricted double f);
+  void setTransform(optional DOMMatrixInit transform);
+  void resetTransform();
+
+};
+
+[NoInterfaceObject]
+interface CanvasCompositing {
+  // compositing
+  attribute unrestricted double globalAlpha; // (default 1.0)
+  attribute DOMString globalCompositeOperation; // (default source-over)
+};
+
+[NoInterfaceObject]
+interface CanvasImageSmoothing {
+  // image smoothing
+  attribute boolean imageSmoothingEnabled; // (default true)
+  attribute ImageSmoothingQuality imageSmoothingQuality; // (default low)
+
+};
+
+[NoInterfaceObject]
+interface CanvasFillStrokeStyles {
+  // colours and styles (see also the CanvasPathDrawingStyles and CanvasTextDrawingStyles interfaces)
+  attribute (DOMString or CanvasGradient or CanvasPattern) strokeStyle; // (default black)
+  attribute (DOMString or CanvasGradient or CanvasPattern) fillStyle; // (default black)
+  CanvasGradient createLinearGradient(double x0, double y0, double x1, double y1);
+  CanvasGradient createRadialGradient(double x0, double y0, double r0, double x1, double y1, double r1);
+  CanvasPattern? createPattern(CanvasImageSource image, [TreatNullAs=EmptyString] DOMString repetition);
+
+};
+
+[NoInterfaceObject]
+interface CanvasShadowStyles {
+  // shadows
+  attribute unrestricted double shadowOffsetX; // (default 0)
+  attribute unrestricted double shadowOffsetY; // (default 0)
+  attribute unrestricted double shadowBlur; // (default 0)
+  attribute DOMString shadowColor; // (default transparent black)
+};
+
+[NoInterfaceObject]
+interface CanvasFilters {
+  // filters
+  attribute DOMString filter; // (default "none")
+};
+
+[NoInterfaceObject]
+interface CanvasRect {
+  // rects
+  void clearRect(unrestricted double x, unrestricted double y, unrestricted double w, unrestricted double h);
+  void fillRect(unrestricted double x, unrestricted double y, unrestricted double w, unrestricted double h);
+  void strokeRect(unrestricted double x, unrestricted double y, unrestricted double w, unrestricted double h);
+};
+
+[NoInterfaceObject]
+interface CanvasDrawPath {
+  // path API (see also CanvasPath)
+  void beginPath();
+  void fill(optional CanvasFillRule fillRule = "nonzero");
+  void fill(Path2D path, optional CanvasFillRule fillRule = "nonzero");
+  void stroke();
+  void stroke(Path2D path);
+  void clip(optional CanvasFillRule fillRule = "nonzero");
+  void clip(Path2D path, optional CanvasFillRule fillRule = "nonzero");
+  void resetClip();
+  boolean isPointInPath(unrestricted double x, unrestricted double y, optional CanvasFillRule fillRule = "nonzero");
+  boolean isPointInPath(Path2D path, unrestricted double x, unrestricted double y, optional CanvasFillRule fillRule = "nonzero");
+  boolean isPointInStroke(unrestricted double x, unrestricted double y);
+  boolean isPointInStroke(Path2D path, unrestricted double x, unrestricted double y);
+};
+
+[NoInterfaceObject]
+interface CanvasUserInterface {
+  void drawFocusIfNeeded(Element element);
+  void drawFocusIfNeeded(Path2D path, Element element);
+  void scrollPathIntoView();
+  void scrollPathIntoView(Path2D path);
+};
+
+[NoInterfaceObject]
+interface CanvasText {
+  // text (see also the CanvasPathDrawingStyles and CanvasTextDrawingStyles interfaces)
+  void fillText(DOMString text, unrestricted double x, unrestricted double y, optional unrestricted double maxWidth);
+  void strokeText(DOMString text, unrestricted double x, unrestricted double y, optional unrestricted double maxWidth);
+  TextMetrics measureText(DOMString text);
+};
+
+[NoInterfaceObject]
+interface CanvasDrawImage {
+  // drawing images
+  void drawImage(CanvasImageSource image, unrestricted double dx, unrestricted double dy);
+  void drawImage(CanvasImageSource image, unrestricted double dx, unrestricted double dy, unrestricted double dw, unrestricted double dh);
+  void drawImage(CanvasImageSource image, unrestricted double sx, unrestricted double sy, unrestricted double sw, unrestricted double sh, unrestricted double dx, unrestricted double dy, unrestricted double dw, unrestricted double dh);
+};
+
+[NoInterfaceObject]
+interface CanvasHitRegion {
+  // hit regions
+  void addHitRegion(optional HitRegionOptions options);
+  void removeHitRegion(DOMString id);
+  void clearHitRegions();
+};
+
+[NoInterfaceObject]
+interface CanvasImageData {
+  // pixel manipulation
+  ImageData createImageData(double sw, double sh);
+  ImageData createImageData(ImageData imagedata);
+  ImageData getImageData(double sx, double sy, double sw, double sh);
+  void putImageData(ImageData imagedata, double dx, double dy);
+  void putImageData(ImageData imagedata, double dx, double dy, double dirtyX, double dirtyY, double dirtyWidth, double dirtyHeight);
+};
+
+enum CanvasLineCap { "butt", "round", "square" };
+enum CanvasLineJoin { "round", "bevel", "miter"};
+enum CanvasTextAlign { "start", "end", "left", "right", "center" };
+enum CanvasTextBaseline { "top", "hanging", "middle", "alphabetic", "ideographic", "bottom" };
+enum CanvasDirection { "ltr", "rtl", "inherit" };
+
+[NoInterfaceObject]
+interface CanvasPathDrawingStyles {
+  // line caps/joins
+  attribute unrestricted double lineWidth; // (default 1)
+  attribute CanvasLineCap lineCap; // (default "butt")
+  attribute CanvasLineJoin lineJoin; // (default "miter")
+  attribute unrestricted double miterLimit; // (default 10)
+
+  // dashed lines
+  void setLineDash(sequence<unrestricted double> segments); // default empty
+  sequence<unrestricted double> getLineDash();
+  attribute unrestricted double lineDashOffset;
+};
+
+[NoInterfaceObject]
+interface CanvasTextDrawingStyles {
+  // text
+  attribute DOMString font; // (default 10px sans-serif)
+  attribute CanvasTextAlign textAlign; // (default: "start")
+  attribute CanvasTextBaseline textBaseline; // (default: "alphabetic")
+  attribute CanvasDirection direction; // (default: "inherit")
+};
+
+[NoInterfaceObject, Exposed=(Window,Worker)]
+interface CanvasPath {
+  // shared path API methods
+  void closePath();
+  void moveTo(unrestricted double x, unrestricted double y);
+  void lineTo(unrestricted double x, unrestricted double y);
+  void quadraticCurveTo(unrestricted double cpx, unrestricted double cpy, unrestricted double x, unrestricted double y);
+  void bezierCurveTo(unrestricted double cp1x, unrestricted double cp1y, unrestricted double cp2x, unrestricted double cp2y, unrestricted double x, unrestricted double y);
+  void arcTo(unrestricted double x1, unrestricted double y1, unrestricted double x2, unrestricted double y2, unrestricted double radius);
+  void arcTo(unrestricted double x1, unrestricted double y1, unrestricted double x2, unrestricted double y2, unrestricted double radiusX, unrestricted double radiusY, unrestricted double rotation);
+  void rect(unrestricted double x, unrestricted double y, unrestricted double w, unrestricted double h);
+  void arc(unrestricted double x, unrestricted double y, unrestricted double radius, unrestricted double startAngle, unrestricted double endAngle, optional boolean anticlockwise = false);
+  void ellipse(unrestricted double x, unrestricted double y, unrestricted double radiusX, unrestricted double radiusY, unrestricted double rotation, unrestricted double startAngle, unrestricted double endAngle, optional boolean anticlockwise = false);
+};
+
+interface CanvasGradient {
+  // opaque object
+  void addColorStop(double offset, DOMString color);
+};
+
+interface CanvasPattern {
+  // opaque object
+  void setTransform(optional DOMMatrixInit transform);
+};
+
+interface TextMetrics {
+  // x-direction
+  readonly attribute double width; // advance width
+  readonly attribute double actualBoundingBoxLeft;
+  readonly attribute double actualBoundingBoxRight;
+
+  // y-direction
+  readonly attribute double fontBoundingBoxAscent;
+  readonly attribute double fontBoundingBoxDescent;
+  readonly attribute double actualBoundingBoxAscent;
+  readonly attribute double actualBoundingBoxDescent;
+  readonly attribute double emHeightAscent;
+  readonly attribute double emHeightDescent;
+  readonly attribute double hangingBaseline;
+  readonly attribute double alphabeticBaseline;
+  readonly attribute double ideographicBaseline;
+};
+
+dictionary HitRegionOptions {
+  Path2D? path = null;
+  CanvasFillRule fillRule = "nonzero";
+  DOMString id = "";
+  DOMString? parentID = null;
+  DOMString cursor = "inherit";
+  // for control-backed regions:
+  Element? control = null;
+  // for unbacked regions:
+  DOMString? label = null;
+  DOMString? role = null;
+};
+
+[Constructor(unsigned long sw, unsigned long sh),
+ Constructor(Uint8ClampedArray data, unsigned long sw, optional unsigned long sh),
+ Exposed=(Window,Worker)]
+interface ImageData {
+  readonly attribute unsigned long width;
+  readonly attribute unsigned long height;
+  readonly attribute Uint8ClampedArray data;
+};
+
+[Constructor,
+ Constructor(Path2D path),
+ Constructor(sequence<Path2D> paths, optional CanvasFillRule fillRule = "nonzero"),
+ Constructor(DOMString d), Exposed=(Window,Worker)]
+interface Path2D {
+  void addPath(Path2D path, optional DOMMatrixInit transform);
+};
+Path2D implements CanvasPath;
+
+partial interface MouseEvent {
+  readonly attribute DOMString? region;
+};
+
+// https://github.com/w3c/testharness.js/issues/84
+//partial dictionary MouseEventInit {
+//  DOMString? region;
+//};
+
+partial interface Touch {
+  readonly attribute DOMString? region;
+};
+
+interface DataTransfer {
+           attribute DOMString dropEffect;
+           attribute DOMString effectAllowed;
+
+  readonly attribute DataTransferItemList items;
+
+  void setDragImage(Element image, long x, long y);
+
+  /* old interface */
+  readonly attribute DOMString[] types;
+  DOMString getData(DOMString format);
+  void setData(DOMString format, DOMString data);
+  void clearData(optional DOMString format);
+  readonly attribute FileList files;
+};
+
+interface DataTransferItemList {
+  readonly attribute unsigned long length;
+  getter DataTransferItem (unsigned long index);
+  DataTransferItem? add(DOMString data, DOMString type);
+  DataTransferItem? add(File data);
+  void remove(unsigned long index);
+  void clear();
+};
+
+interface DataTransferItem {
+  readonly attribute DOMString kind;
+  readonly attribute DOMString type;
+  void getAsString(FunctionStringCallback? _callback);
+  File? getAsFile();
+};
+
+callback FunctionStringCallback = void (DOMString data);
+
+[Constructor(DOMString type, optional DragEventInit eventInitDict)]
+interface DragEvent : MouseEvent {
+  readonly attribute DataTransfer? dataTransfer;
+};
+
+dictionary DragEventInit : MouseEventInit {
+  DataTransfer? dataTransfer;
+};
+
+// For purposes of this test, just treat WindowProxy as the same thing as
+// Window.
+typedef Window WindowProxy;
+
+[PrimaryGlobal]
+/*sealed*/ interface Window : EventTarget {
+  // the current browsing context
+  [Unforgeable] readonly attribute WindowProxy window;
+  [Replaceable] readonly attribute WindowProxy self;
+  [Unforgeable] readonly attribute Document document;
+           attribute DOMString name;
+  [PutForwards=href, Unforgeable] readonly attribute Location location;
+  readonly attribute History history;
+  [Replaceable] readonly attribute BarProp locationbar;
+  [Replaceable] readonly attribute BarProp menubar;
+  [Replaceable] readonly attribute BarProp personalbar;
+  [Replaceable] readonly attribute BarProp scrollbars;
+  [Replaceable] readonly attribute BarProp statusbar;
+  [Replaceable] readonly attribute BarProp toolbar;
+           attribute DOMString status;
+  void close();
+  readonly attribute boolean closed;
+  void stop();
+  void focus();
+  void blur();
+
+  // other browsing contexts
+  [Replaceable] readonly attribute WindowProxy frames;
+  [Replaceable] readonly attribute unsigned long length;
+  [Unforgeable] readonly attribute WindowProxy top;
+           attribute any opener;
+  [Replaceable] readonly attribute WindowProxy parent;
+  readonly attribute Element? frameElement;
+  WindowProxy open(optional DOMString url = "about:blank", optional DOMString target = "_blank", [TreatNullAs=EmptyString] optional DOMString features = "", optional boolean replace = false);
+  getter WindowProxy (unsigned long index);
+  getter object (DOMString name);
+
+  // the user agent
+  readonly attribute Navigator navigator;
+  [Replaceable] readonly attribute External external;
+  readonly attribute ApplicationCache applicationCache;
+
+  // user prompts
+  void alert();
+  //void alert(DOMString message);
+  boolean confirm(optional DOMString message = "");
+  DOMString? prompt(optional DOMString message = "", optional DOMString default = "");
+  void print();
+  any showModalDialog(DOMString url, optional any argument);
+
+  void postMessage(any message, DOMString targetOrigin, optional sequence<Transferable> transfer);
+
+  // also has obsolete members
+};
+Window implements GlobalEventHandlers;
+Window implements WindowEventHandlers;
+
+interface BarProp {
+  readonly attribute boolean visible;
+};
+
+enum ScrollRestoration { "auto", "manual" };
+interface History {
+
+  readonly attribute long length;
+  attribute ScrollRestoration scrollRestoration;
+  readonly attribute any state;
+  void go(optional long delta);
+  void back();
+  void forward();
+  void pushState(any data, DOMString title, optional DOMString? url = null);
+  void replaceState(any data, DOMString title, optional DOMString? url = null);
+};
+
+[Unforgeable] interface Location {
+  stringifier attribute USVString href;
+  readonly attribute USVString origin;
+           attribute USVString protocol;
+           attribute USVString host;
+           attribute USVString hostname;
+           attribute USVString port;
+           attribute USVString pathname;
+           attribute USVString search;
+           attribute USVString hash;
+
+  void assign(USVString url);
+  void replace(USVString url);
+  void reload();
+
+  [SameObject] readonly attribute USVString[] ancestorOrigins;
+};
+
+[Constructor(DOMString type, optional PopStateEventInit eventInitDict)]
+interface PopStateEvent : Event {
+  readonly attribute any state;
+};
+
+dictionary PopStateEventInit : EventInit {
+  any state;
+};
+
+[Constructor(DOMString type, optional HashChangeEventInit eventInitDict)]
+interface HashChangeEvent : Event {
+  readonly attribute DOMString oldURL;
+  readonly attribute DOMString newURL;
+};
+
+dictionary HashChangeEventInit : EventInit {
+  DOMString oldURL;
+  DOMString newURL;
+};
+
+[Constructor(DOMString type, optional PageTransitionEventInit eventInitDict)]
+interface PageTransitionEvent : Event {
+  readonly attribute boolean persisted;
+};
+
+dictionary PageTransitionEventInit : EventInit {
+  boolean persisted;
+};
+
+interface BeforeUnloadEvent : Event {
+           attribute DOMString returnValue;
+};
+
+[Exposed=(Window,SharedWorker)]
+interface ApplicationCache : EventTarget {
+
+  // update status
+  const unsigned short UNCACHED = 0;
+  const unsigned short IDLE = 1;
+  const unsigned short CHECKING = 2;
+  const unsigned short DOWNLOADING = 3;
+  const unsigned short UPDATEREADY = 4;
+  const unsigned short OBSOLETE = 5;
+  readonly attribute unsigned short status;
+
+  // updates
+  void update();
+  void abort();
+  void swapCache();
+
+  // events
+           attribute EventHandler onchecking;
+           attribute EventHandler onerror;
+           attribute EventHandler onnoupdate;
+           attribute EventHandler ondownloading;
+           attribute EventHandler onprogress;
+           attribute EventHandler onupdateready;
+           attribute EventHandler oncached;
+           attribute EventHandler onobsolete;
+};
+
+[NoInterfaceObject, Exposed=(Window,Worker)]
+interface NavigatorOnLine {
+  readonly attribute boolean onLine;
+};
+
+[Constructor(DOMString type, optional ErrorEventInit eventInitDict), Exposed=(Window,Worker)]
+interface ErrorEvent : Event {
+  readonly attribute DOMString message;
+  readonly attribute DOMString filename;
+  readonly attribute unsigned long lineno;
+  readonly attribute unsigned long colno;
+  readonly attribute any error;
+};
+
+dictionary ErrorEventInit : EventInit {
+  DOMString message;
+  DOMString filename;
+  unsigned long lineno;
+  unsigned long colno;
+  any error;
+};
+
+[TreatNonCallableAsNull]
+callback EventHandlerNonNull = any (Event event);
+typedef EventHandlerNonNull? EventHandler;
+
+[TreatNonCallableAsNull]
+callback OnErrorEventHandlerNonNull = any ((Event or DOMString) event, optional DOMString source, optional unsigned long lineno, optional unsigned long column, optional any error);
+typedef OnErrorEventHandlerNonNull? OnErrorEventHandler;
+
+[TreatNonCallableAsNull]
+callback OnBeforeUnloadEventHandlerNonNull = DOMString? (Event event);
+typedef OnBeforeUnloadEventHandlerNonNull? OnBeforeUnloadEventHandler;
+
+[NoInterfaceObject]
+interface GlobalEventHandlers {
+           attribute EventHandler onabort;
+           attribute EventHandler onauxclick;
+           attribute EventHandler onblur;
+           attribute EventHandler oncancel;
+           attribute EventHandler oncanplay;
+           attribute EventHandler oncanplaythrough;
+           attribute EventHandler onchange;
+           attribute EventHandler onclick;
+           attribute EventHandler onclose;
+           attribute EventHandler oncontextmenu;
+           attribute EventHandler oncuechange;
+           attribute EventHandler ondblclick;
+           attribute EventHandler ondrag;
+           attribute EventHandler ondragend;
+           attribute EventHandler ondragenter;
+           attribute EventHandler ondragexit;
+           attribute EventHandler ondragleave;
+           attribute EventHandler ondragover;
+           attribute EventHandler ondragstart;
+           attribute EventHandler ondrop;
+           attribute EventHandler ondurationchange;
+           attribute EventHandler onemptied;
+           attribute EventHandler onended;
+           attribute OnErrorEventHandler onerror;
+           attribute EventHandler onfocus;
+           attribute EventHandler oninput;
+           attribute EventHandler oninvalid;
+           attribute EventHandler onkeydown;
+           attribute EventHandler onkeypress;
+           attribute EventHandler onkeyup;
+           attribute EventHandler onload;
+           attribute EventHandler onloadeddata;
+           attribute EventHandler onloadedmetadata;
+           attribute EventHandler onloadstart;
+           attribute EventHandler onmousedown;
+  [LenientThis] attribute EventHandler onmouseenter;
+  [LenientThis] attribute EventHandler onmouseleave;
+           attribute EventHandler onmousemove;
+           attribute EventHandler onmouseout;
+           attribute EventHandler onmouseover;
+           attribute EventHandler onmouseup;
+           attribute EventHandler onmousewheel;
+           attribute EventHandler onpause;
+           attribute EventHandler onplay;
+           attribute EventHandler onplaying;
+           attribute EventHandler onprogress;
+           attribute EventHandler onratechange;
+           attribute EventHandler onreset;
+           attribute EventHandler onresize;
+           attribute EventHandler onscroll;
+           attribute EventHandler onseeked;
+           attribute EventHandler onseeking;
+           attribute EventHandler onselect;
+           attribute EventHandler onshow;
+           attribute EventHandler onstalled;
+           attribute EventHandler onsubmit;
+           attribute EventHandler onsuspend;
+           attribute EventHandler ontimeupdate;
+           attribute EventHandler ontoggle;
+           attribute EventHandler onvolumechange;
+           attribute EventHandler onwaiting;
+};
+
+[NoInterfaceObject]
+interface DocumentAndElementEventHandlers {
+           attribute EventHandler oncopy;
+           attribute EventHandler oncut;
+           attribute EventHandler onpaste;
+};
+
+[NoInterfaceObject]
+interface WindowEventHandlers {
+           attribute EventHandler onafterprint;
+           attribute EventHandler onbeforeprint;
+           attribute OnBeforeUnloadEventHandler onbeforeunload;
+           attribute EventHandler onhashchange;
+           attribute EventHandler onlanguagechange;
+           attribute EventHandler onmessage;
+           attribute EventHandler onoffline;
+           attribute EventHandler ononline;
+           attribute EventHandler onpagehide;
+           attribute EventHandler onpageshow;
+           attribute EventHandler onpopstate;
+           attribute EventHandler onstorage;
+           attribute EventHandler onunload;
+};
+
+typedef (DOMString or Function) TimerHandler;
+
+[NoInterfaceObject, Exposed=(Window,Worker)]
+interface WindowOrWorkerGlobalScope {
+  [Replaceable] readonly attribute USVString origin;
+
+  // base64 utility methods
+  DOMString btoa(DOMString btoa);
+  DOMString atob(DOMString atob);
+
+  // timers
+  long setTimeout(TimerHandler handler, optional long timeout = 0, any... arguments);
+  void clearTimeout(optional long handle = 0);
+  long setInterval(TimerHandler handler, optional long timeout = 0, any... arguments);
+  void clearInterval(optional long handle = 0);
+
+  // ImageBitmap
+  Promise<ImageBitmap> createImageBitmap(ImageBitmapSource image, optional ImageBitmapOptions options);
+  Promise<ImageBitmap> createImageBitmap(ImageBitmapSource image, long sx, long sy, long sw, long sh, optional ImageBitmapOptions options);
+};
+
+Window implements WindowOrWorkerGlobalScope;
+WorkerGlobalScope implements WindowOrWorkerGlobalScope;
+
+[NoInterfaceObject]
+interface WindowModal {
+  readonly attribute any dialogArguments;
+           attribute any returnValue;
+};
+
+interface Navigator {
+  // objects implementing this interface also implement the interfaces given below
+};
+Navigator implements NavigatorID;
+Navigator implements NavigatorLanguage;
+Navigator implements NavigatorOnLine;
+Navigator implements NavigatorContentUtils;
+Navigator implements NavigatorCookies;
+Navigator implements NavigatorPlugins;
+Navigator implements NavigatorConcurrentHardware;
+
+[NoInterfaceObject, Exposed=(Window,Worker)]
+interface NavigatorID {
+  readonly attribute DOMString appCodeName; // constant "Mozilla"
+  readonly attribute DOMString appName; // constant "Netscape"
+  readonly attribute DOMString appVersion;
+  readonly attribute DOMString platform;
+  readonly attribute DOMString product; // constant "Gecko"
+  [Exposed=Window] readonly attribute DOMString productSub;
+  readonly attribute DOMString userAgent;
+  [Exposed=Window] readonly attribute DOMString vendor;
+  [Exposed=Window] readonly attribute DOMString vendorSub; // constant ""
+};
+
+[NoInterfaceObject, Exposed=(Window,Worker)]
+interface NavigatorLanguage {
+  readonly attribute DOMString language;
+  readonly attribute FrozenArray<DOMString> languages;
+};
+
+[NoInterfaceObject]
+interface NavigatorContentUtils {
+  // content handler registration
+  void registerProtocolHandler(DOMString scheme, USVString url, DOMString title);
+  void registerContentHandler(DOMString mimeType, USVString url, DOMString title);
+  DOMString isProtocolHandlerRegistered(DOMString scheme, USVString url);
+  DOMString isContentHandlerRegistered(DOMString mimeType, USVString url);
+  void unregisterProtocolHandler(DOMString scheme, USVString url);
+  void unregisterContentHandler(DOMString mimeType, USVString url);
+};
+
+[NoInterfaceObject]
+interface NavigatorCookies {
+  readonly attribute boolean cookieEnabled;
+};
+
+[NoInterfaceObject]
+interface NavigatorPlugins {
+  [SameObject] readonly attribute PluginArray plugins;
+  [SameObject] readonly attribute MimeTypeArray mimeTypes;
+  boolean javaEnabled();
+};
+
+interface PluginArray {
+  void refresh(optional boolean reload = false);
+  readonly attribute unsigned long length;
+  getter Plugin? item(unsigned long index);
+  getter Plugin? namedItem(DOMString name);
+};
+
+[NoInterfaceObject, Exposed=(Window,Worker)]
+interface NavigatorConcurrentHardware {
+  readonly attribute unsigned long long hardwareConcurrency;
+};
+
+interface MimeTypeArray {
+  readonly attribute unsigned long length;
+  getter MimeType? item(unsigned long index);
+  getter MimeType? namedItem(DOMString name);
+};
+
+interface Plugin {
+  readonly attribute DOMString name;
+  readonly attribute DOMString description;
+  readonly attribute DOMString filename;
+  readonly attribute unsigned long length;
+  getter MimeType? item(unsigned long index);
+  getter MimeType? namedItem(DOMString name);
+};
+
+interface MimeType {
+  readonly attribute DOMString type;
+  readonly attribute DOMString description;
+  readonly attribute DOMString suffixes; // comma-separated
+  readonly attribute Plugin enabledPlugin;
+};
+
+interface External {
+  void AddSearchProvider(DOMString engineURL);
+  unsigned long IsSearchProviderInstalled(DOMString engineURL);
+};
+
+[Exposed=(Window,Worker)]
+interface ImageBitmap {
+  readonly attribute unsigned long width;
+  readonly attribute unsigned long height;
+};
+
+typedef (HTMLImageElement or
+         HTMLVideoElement or
+         HTMLCanvasElement or
+         Blob or
+         ImageData or
+         CanvasRenderingContext2D or
+         ImageBitmap) ImageBitmapSource;
+
+dictionary ImageBitmapOptions {
+  ImageOrientation imageOrientation = "none";
+  PremultiplyAlpha premultiplyAlpha = "default";
+  ColorSpaceConversion colorSpaceConversion = "default";
+  [EnforceRange] unsigned long resizeWidth;
+  [EnforceRange] unsigned long resizeHeight;
+  ResizeQuality resizeQuality = "low";
+};
+
+[Constructor(DOMString type, optional MessageEventInit eventInitDict), Exposed=(Window,Worker)]
+interface MessageEvent : Event {
+  readonly attribute any data;
+  readonly attribute DOMString origin;
+  readonly attribute DOMString lastEventId;
+  readonly attribute (WindowProxy or MessagePort)? source;
+  readonly attribute FrozenArray<MessagePort> ports;
+
+  void initMessageEvent(DOMString type, optional boolean bubbles = false, optional boolean cancelable = false, optional any data = null, optional DOMString origin = "", optional DOMString lastEventId = "", optional (WindowProxy or MessagePort)? source = null, optional sequence<MessagePort> ports = []);
+};
+
+dictionary MessageEventInit : EventInit {
+  any data;
+  DOMString origin;
+  DOMString lastEventId;
+  (WindowProxy or MessagePort)? source;
+  sequence<MessagePort> ports;
+};
+
+[Constructor(DOMString url, optional EventSourceInit eventSourceInitDict), Exposed=(Window,Worker)]
+interface EventSource : EventTarget {
+  readonly attribute DOMString url;
+  readonly attribute boolean withCredentials;
+
+  // ready state
+  const unsigned short CONNECTING = 0;
+  const unsigned short OPEN = 1;
+  const unsigned short CLOSED = 2;
+  readonly attribute unsigned short readyState;
+
+  // networking
+           attribute EventHandler onopen;
+           attribute EventHandler onmessage;
+           attribute EventHandler onerror;
+  void close();
+};
+
+dictionary EventSourceInit {
+  boolean withCredentials = false;
+};
+
+enum BinaryType { "blob", "arraybuffer" };
+[Constructor(DOMString url, optional (DOMString or DOMString[]) protocols), Exposed=(Window,Worker)]
+interface WebSocket : EventTarget {
+  readonly attribute DOMString url;
+
+  // ready state
+  const unsigned short CONNECTING = 0;
+  const unsigned short OPEN = 1;
+  const unsigned short CLOSING = 2;
+  const unsigned short CLOSED = 3;
+  readonly attribute unsigned short readyState;
+  readonly attribute unsigned long bufferedAmount;
+
+  // networking
+  attribute EventHandler onopen;
+  attribute EventHandler onerror;
+  attribute EventHandler onclose;
+  readonly attribute DOMString extensions;
+  readonly attribute DOMString protocol;
+  void close([Clamp] optional unsigned short code, optional USVString reason);
+
+  // messaging
+  attribute EventHandler onmessage;
+  attribute BinaryType binaryType;
+  void send(USVString data);
+  void send(Blob data);
+  void send(ArrayBuffer data);
+  void send(ArrayBufferView data);
+};
+
+[Constructor(DOMString type, optional CloseEventInit eventInitDict), Exposed=(Window,Worker)]
+interface CloseEvent : Event {
+  readonly attribute boolean wasClean;
+  readonly attribute unsigned short code;
+  readonly attribute DOMString reason;
+};
+
+dictionary CloseEventInit : EventInit {
+  boolean wasClean;
+  unsigned short code;
+  DOMString reason;
+};
+
+[Constructor, Exposed=(Window,Worker)]
+interface MessageChannel {
+  readonly attribute MessagePort port1;
+  readonly attribute MessagePort port2;
+};
+
+[Exposed=(Window,Worker)]
+interface MessagePort : EventTarget {
+  void postMessage(any message, optional sequence<Transferable> transfer);
+  void start();
+  void close();
+
+  // event handlers
+           attribute EventHandler onmessage;
+};
+// MessagePort implements Transferable;
+
+[Constructor(DOMString channel), Exposed=(Window,Worker)]
+interface BroadcastChannel : EventTarget {
+  readonly attribute DOMString name;
+  void postMessage(any message);
+  void close();
+           attribute EventHandler onmessage;
+};
+
+[Exposed=Worker]
+interface WorkerGlobalScope : EventTarget {
+  readonly attribute WorkerGlobalScope self;
+  readonly attribute WorkerLocation location;
+  readonly attribute WorkerNavigator navigator;
+  void importScripts(USVString... urls);
+
+           attribute OnErrorEventHandler onerror;
+           attribute EventHandler onlanguagechange;
+           attribute EventHandler onoffline;
+           attribute EventHandler ononline;
+
+  // also has additional members in a partial interface
+};
+
+[Global=(Worker,DedicatedWorker),Exposed=DedicatedWorker]
+/*sealed*/ interface DedicatedWorkerGlobalScope : WorkerGlobalScope {
+  void postMessage(any message, optional sequence<Transferable> transfer);
+           attribute EventHandler onmessage;
+};
+
+[Global=(Worker,SharedWorker),Exposed=SharedWorker]
+/*sealed*/ interface SharedWorkerGlobalScope : WorkerGlobalScope {
+  readonly attribute DOMString name;
+  readonly attribute ApplicationCache applicationCache;
+           attribute EventHandler onconnect;
+};
+
+[NoInterfaceObject, Exposed=(Window,Worker)]
+interface AbstractWorker {
+           attribute EventHandler onerror;
+};
+
+[Constructor(DOMString scriptURL), Exposed=(Window,Worker)]
+interface Worker : EventTarget {
+  void terminate();
+
+  void postMessage(any message, optional sequence<Transferable> transfer);
+           attribute EventHandler onmessage;
+};
+Worker implements AbstractWorker;
+
+[Constructor(DOMString scriptURL, optional DOMString name), Exposed=(Window,Worker)]
+interface SharedWorker : EventTarget {
+  readonly attribute MessagePort port;
+};
+SharedWorker implements AbstractWorker;
+
+[Exposed=Worker]
+interface WorkerNavigator {};
+WorkerNavigator implements NavigatorID;
+WorkerNavigator implements NavigatorLanguage;
+WorkerNavigator implements NavigatorOnLine;
+
+[Exposed=Worker]
+interface WorkerLocation {
+  stringifier readonly attribute USVString href;
+  readonly attribute USVString origin;
+  readonly attribute USVString protocol;
+  readonly attribute USVString host;
+  readonly attribute USVString hostname;
+  readonly attribute USVString port;
+  readonly attribute USVString pathname;
+  readonly attribute USVString search;
+  readonly attribute USVString hash;
+};
+
+interface Storage {
+  readonly attribute unsigned long length;
+  DOMString? key(unsigned long index);
+  getter DOMString? getItem(DOMString key);
+  setter creator void setItem(DOMString key, DOMString value);
+  deleter void removeItem(DOMString key);
+  void clear();
+};
+
+[NoInterfaceObject]
+interface WindowSessionStorage {
+  readonly attribute Storage sessionStorage;
+};
+Window implements WindowSessionStorage;
+
+[NoInterfaceObject]
+interface WindowLocalStorage {
+  readonly attribute Storage localStorage;
+};
+Window implements WindowLocalStorage;
+
+[Constructor(DOMString type, optional StorageEventInit eventInitDict)]
+interface StorageEvent : Event {
+  readonly attribute DOMString? key;
+  readonly attribute DOMString? oldValue;
+  readonly attribute DOMString? newValue;
+  readonly attribute DOMString url;
+  readonly attribute Storage? storageArea;
+};
+
+dictionary StorageEventInit : EventInit {
+  DOMString? key;
+  DOMString? oldValue;
+  DOMString? newValue;
+  DOMString url;
+  Storage? storageArea;
+};
+
+interface HTMLAppletElement : HTMLElement {
+           attribute DOMString align;
+           attribute DOMString alt;
+           attribute DOMString archive;
+           attribute DOMString code;
+           attribute DOMString codeBase;
+           attribute DOMString height;
+           attribute unsigned long hspace;
+           attribute DOMString name;
+           attribute DOMString _object; // the underscore is not part of the identifier
+           attribute unsigned long vspace;
+           attribute DOMString width;
+};
+
+interface HTMLMarqueeElement : HTMLElement {
+           attribute DOMString behavior;
+           attribute DOMString bgColor;
+           attribute DOMString direction;
+           attribute DOMString height;
+           attribute unsigned long hspace;
+           attribute long loop;
+           attribute unsigned long scrollAmount;
+           attribute unsigned long scrollDelay;
+           attribute boolean trueSpeed;
+           attribute unsigned long vspace;
+           attribute DOMString width;
+
+           attribute EventHandler onbounce;
+           attribute EventHandler onfinish;
+           attribute EventHandler onstart;
+
+  void start();
+  void stop();
+};
+
+interface HTMLFrameSetElement : HTMLElement {
+           attribute DOMString cols;
+           attribute DOMString rows;
+};
+HTMLFrameSetElement implements WindowEventHandlers;
+
+interface HTMLFrameElement : HTMLElement {
+           attribute DOMString name;
+           attribute DOMString scrolling;
+           attribute DOMString src;
+           attribute DOMString frameBorder;
+           attribute DOMString longDesc;
+           attribute boolean noResize;
+  readonly attribute Document? contentDocument;
+  readonly attribute WindowProxy? contentWindow;
+
+  [TreatNullAs=EmptyString] attribute DOMString marginHeight;
+  [TreatNullAs=EmptyString] attribute DOMString marginWidth;
+};
+
+partial interface HTMLAnchorElement {
+           attribute DOMString coords;
+           attribute DOMString charset;
+           attribute DOMString name;
+           attribute DOMString rev;
+           attribute DOMString shape;
+};
+
+partial interface HTMLAreaElement {
+           attribute boolean noHref;
+};
+
+partial interface HTMLBodyElement {
+  [TreatNullAs=EmptyString] attribute DOMString text;
+  [TreatNullAs=EmptyString] attribute DOMString link;
+  [TreatNullAs=EmptyString] attribute DOMString vLink;
+  [TreatNullAs=EmptyString] attribute DOMString aLink;
+  [TreatNullAs=EmptyString] attribute DOMString bgColor;
+                            attribute DOMString background;
+};
+
+partial interface HTMLBRElement {
+           attribute DOMString clear;
+};
+
+partial interface HTMLTableCaptionElement {
+           attribute DOMString align;
+};
+
+partial interface HTMLTableColElement {
+           attribute DOMString align;
+           attribute DOMString ch;
+           attribute DOMString chOff;
+           attribute DOMString vAlign;
+           attribute DOMString width;
+};
+
+interface HTMLDirectoryElement : HTMLElement {
+           attribute boolean compact;
+};
+
+partial interface HTMLDivElement {
+           attribute DOMString align;
+};
+
+partial interface HTMLDListElement {
+           attribute boolean compact;
+};
+
+partial interface HTMLEmbedElement {
+           attribute DOMString align;
+           attribute DOMString name;
+};
+
+interface HTMLFontElement : HTMLElement {
+  [TreatNullAs=EmptyString] attribute DOMString color;
+                            attribute DOMString face;
+                            attribute DOMString size;
+};
+
+partial interface HTMLHeadingElement {
+           attribute DOMString align;
+};
+
+partial interface HTMLHRElement {
+           attribute DOMString align;
+           attribute DOMString color;
+           attribute boolean noShade;
+           attribute DOMString size;
+           attribute DOMString width;
+};
+
+partial interface HTMLHtmlElement {
+           attribute DOMString version;
+};
+
+partial interface HTMLIFrameElement {
+  [CEReactions] attribute DOMString align;
+  [CEReactions] attribute DOMString scrolling;
+  [CEReactions] attribute DOMString frameBorder;
+  [CEReactions] attribute USVString longDesc;
+
+  [CEReactions, TreatNullAs=EmptyString] attribute DOMString marginHeight;
+  [CEReactions, TreatNullAs=EmptyString] attribute DOMString marginWidth;
+};
+
+partial interface HTMLImageElement {
+  [CEReactions] attribute DOMString name;
+  [CEReactions] attribute USVString lowsrc;
+  [CEReactions] attribute DOMString align;
+  [CEReactions] attribute unsigned long hspace;
+  [CEReactions] attribute unsigned long vspace;
+  [CEReactions] attribute USVString longDesc;
+
+  [CEReactions, TreatNullAs=EmptyString] attribute DOMString border;
+};
+
+partial interface HTMLInputElement {
+           attribute DOMString align;
+           attribute DOMString useMap;
+};
+
+partial interface HTMLLegendElement {
+           attribute DOMString align;
+};
+
+partial interface HTMLLIElement {
+           attribute DOMString type;
+};
+
+partial interface HTMLLinkElement {
+  [CEReactions] attribute DOMString charset;
+  [CEReactions] attribute DOMString rev;
+  [CEReactions] attribute DOMString target;
+};
+
+partial interface HTMLMenuElement {
+           attribute boolean compact;
+};
+
+partial interface HTMLMetaElement {
+           attribute DOMString scheme;
+};
+
+partial interface HTMLObjectElement {
+           attribute DOMString align;
+           attribute DOMString archive;
+           attribute DOMString code;
+           attribute boolean declare;
+           attribute unsigned long hspace;
+           attribute DOMString standby;
+           attribute unsigned long vspace;
+           attribute DOMString codeBase;
+           attribute DOMString codeType;
+
+  [TreatNullAs=EmptyString] attribute DOMString border;
+};
+
+partial interface HTMLOListElement {
+           attribute boolean compact;
+};
+
+partial interface HTMLParagraphElement {
+           attribute DOMString align;
+};
+
+partial interface HTMLParamElement {
+           attribute DOMString type;
+           attribute DOMString valueType;
+};
+
+partial interface HTMLPreElement {
+           attribute long width;
+};
+
+partial interface HTMLScriptElement {
+           attribute DOMString event;
+           attribute DOMString htmlFor;
+};
+
+partial interface HTMLTableElement {
+           attribute DOMString align;
+           attribute DOMString border;
+           attribute DOMString frame;
+           attribute DOMString rules;
+           attribute DOMString summary;
+           attribute DOMString width;
+
+  [TreatNullAs=EmptyString] attribute DOMString bgColor;
+  [TreatNullAs=EmptyString] attribute DOMString cellPadding;
+  [TreatNullAs=EmptyString] attribute DOMString cellSpacing;
+};
+
+partial interface HTMLTableSectionElement {
+           attribute DOMString align;
+           attribute DOMString ch;
+           attribute DOMString chOff;
+           attribute DOMString vAlign;
+};
+
+partial interface HTMLTableCellElement {
+           attribute DOMString align;
+           attribute DOMString axis;
+           attribute DOMString height;
+           attribute DOMString width;
+
+           attribute DOMString ch;
+           attribute DOMString chOff;
+           attribute boolean noWrap;
+           attribute DOMString vAlign;
+
+  [TreatNullAs=EmptyString] attribute DOMString bgColor;
+};
+
+partial interface HTMLTableRowElement {
+           attribute DOMString align;
+           attribute DOMString ch;
+           attribute DOMString chOff;
+           attribute DOMString vAlign;
+
+  [TreatNullAs=EmptyString] attribute DOMString bgColor;
+};
+
+partial interface HTMLUListElement {
+           attribute boolean compact;
+           attribute DOMString type;
+};
+
+partial interface Document {
+  [TreatNullAs=EmptyString] attribute DOMString fgColor;
+  [TreatNullAs=EmptyString] attribute DOMString linkColor;
+  [TreatNullAs=EmptyString] attribute DOMString vlinkColor;
+  [TreatNullAs=EmptyString] attribute DOMString alinkColor;
+  [TreatNullAs=EmptyString] attribute DOMString bgColor;
+
+  readonly attribute HTMLCollection anchors;
+  readonly attribute HTMLCollection applets;
+
+  void clear();
+  void captureEvents();
+  void releaseEvents();
+
+  readonly attribute HTMLAllCollection all;
+};
+
+partial interface Window {
+  void captureEvents();
+  void releaseEvents();
+};
diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/dom/resources/untested-interfaces.idl b/LayoutTests/imported/w3c/web-platform-tests/html/dom/resources/untested-interfaces.idl
new file mode 100644 (file)
index 0000000..75428f8
--- /dev/null
@@ -0,0 +1,830 @@
+// DOM IDLs
+[Constructor(DOMString type, optional EventInit eventInitDict),
+ Exposed=(Window,Worker)]
+interface Event {
+  readonly attribute DOMString type;
+  readonly attribute EventTarget? target;
+  readonly attribute EventTarget? currentTarget;
+
+  const unsigned short NONE = 0;
+  const unsigned short CAPTURING_PHASE = 1;
+  const unsigned short AT_TARGET = 2;
+  const unsigned short BUBBLING_PHASE = 3;
+  readonly attribute unsigned short eventPhase;
+
+  void stopPropagation();
+  void stopImmediatePropagation();
+
+  readonly attribute boolean bubbles;
+  readonly attribute boolean cancelable;
+  void preventDefault();
+  readonly attribute boolean defaultPrevented;
+
+  [Unforgeable] readonly attribute boolean isTrusted;
+  readonly attribute DOMTimeStamp timeStamp;
+
+  void initEvent(DOMString type, boolean bubbles, boolean cancelable);
+};
+
+dictionary EventInit {
+  boolean bubbles = false;
+  boolean cancelable = false;
+};
+
+[Constructor(DOMString type, optional CustomEventInit eventInitDict),
+ Exposed=(Window,Worker)]
+interface CustomEvent : Event {
+  readonly attribute any detail;
+
+  void initCustomEvent(DOMString type, boolean bubbles, boolean cancelable, any detail);
+};
+
+dictionary CustomEventInit : EventInit {
+  any detail = null;
+};
+
+[Exposed=(Window,Worker)]
+interface EventTarget {
+  void addEventListener(DOMString type, EventListener? callback, optional boolean capture = false);
+  void removeEventListener(DOMString type, EventListener? callback, optional boolean capture = false);
+  boolean dispatchEvent(Event event);
+};
+
+callback interface EventListener {
+  void handleEvent(Event event);
+};
+
+[NoInterfaceObject]
+interface NonElementParentNode {
+  Element? getElementById(DOMString elementId);
+};
+Document implements NonElementParentNode;
+DocumentFragment implements NonElementParentNode;
+
+[NoInterfaceObject]
+interface ParentNode {
+  [SameObject] readonly attribute HTMLCollection children;
+  readonly attribute Element? firstElementChild;
+  readonly attribute Element? lastElementChild;
+  readonly attribute unsigned long childElementCount;
+
+  [Unscopable] void prepend((Node or DOMString)... nodes);
+  [Unscopable] void append((Node or DOMString)... nodes);
+
+  Element? querySelector(DOMString selectors);
+  [NewObject] NodeList querySelectorAll(DOMString selectors);
+};
+Document implements ParentNode;
+DocumentFragment implements ParentNode;
+Element implements ParentNode;
+
+[NoInterfaceObject]
+interface NonDocumentTypeChildNode {
+  readonly attribute Element? previousElementSibling;
+  readonly attribute Element? nextElementSibling;
+};
+Element implements NonDocumentTypeChildNode;
+CharacterData implements NonDocumentTypeChildNode;
+
+[NoInterfaceObject]
+interface ChildNode {
+  [Unscopable] void before((Node or DOMString)... nodes);
+  [Unscopable] void after((Node or DOMString)... nodes);
+  [Unscopable] void replaceWith((Node or DOMString)... nodes);
+  [Unscopable] void remove();
+};
+DocumentType implements ChildNode;
+Element implements ChildNode;
+CharacterData implements ChildNode;
+
+// XXX unrecognized tokens "class", "extends"
+// https://www.w3.org/Bugs/Public/show_bug.cgi?id=20020
+// https://www.w3.org/Bugs/Public/show_bug.cgi?id=23225
+//class Elements extends Array {
+//  Element? query(DOMString relativeSelectors);
+//  Elements queryAll(DOMString relativeSelectors);
+//};
+
+interface NodeList {
+  getter Node? item(unsigned long index);
+  readonly attribute unsigned long length;
+//  iterable<Node>;
+};
+
+interface HTMLCollection {
+  readonly attribute unsigned long length;
+  getter Element? item(unsigned long index);
+  getter Element? namedItem(DOMString name);
+};
+
+[Constructor(MutationCallback callback)]
+interface MutationObserver {
+  void observe(Node target, MutationObserverInit options);
+  void disconnect();
+  sequence<MutationRecord> takeRecords();
+};
+
+callback MutationCallback = void (sequence<MutationRecord> mutations, MutationObserver observer);
+
+dictionary MutationObserverInit {
+  boolean childList = false;
+  boolean attributes;
+  boolean characterData;
+  boolean subtree = false;
+  boolean attributeOldValue;
+  boolean characterDataOldValue;
+  sequence<DOMString> attributeFilter;
+};
+
+interface MutationRecord {
+  readonly attribute DOMString type;
+  readonly attribute Node target;
+  [SameObject] readonly attribute NodeList addedNodes;
+  [SameObject] readonly attribute NodeList removedNodes;
+  readonly attribute Node? previousSibling;
+  readonly attribute Node? nextSibling;
+  readonly attribute DOMString? attributeName;
+  readonly attribute DOMString? attributeNamespace;
+  readonly attribute DOMString? oldValue;
+};
+
+interface Node : EventTarget {
+  const unsigned short ELEMENT_NODE = 1;
+  const unsigned short ATTRIBUTE_NODE = 2; // historical
+  const unsigned short TEXT_NODE = 3;
+  const unsigned short CDATA_SECTION_NODE = 4;
+  const unsigned short ENTITY_REFERENCE_NODE = 5; // historical
+  const unsigned short ENTITY_NODE = 6; // historical
+  const unsigned short PROCESSING_INSTRUCTION_NODE = 7;
+  const unsigned short COMMENT_NODE = 8;
+  const unsigned short DOCUMENT_NODE = 9;
+  const unsigned short DOCUMENT_TYPE_NODE = 10;
+  const unsigned short DOCUMENT_FRAGMENT_NODE = 11;
+  const unsigned short NOTATION_NODE = 12; // historical
+  readonly attribute unsigned short nodeType;
+  readonly attribute DOMString nodeName;
+
+  readonly attribute DOMString? baseURI;
+
+  readonly attribute Document? ownerDocument;
+  readonly attribute Node? parentNode;
+  readonly attribute Element? parentElement;
+  boolean hasChildNodes();
+  [SameObject] readonly attribute NodeList childNodes;
+  readonly attribute Node? firstChild;
+  readonly attribute Node? lastChild;
+  readonly attribute Node? previousSibling;
+  readonly attribute Node? nextSibling;
+
+           attribute DOMString? nodeValue;
+           attribute DOMString? textContent;
+  void normalize();
+
+  [NewObject] Node cloneNode(optional boolean deep = false);
+  boolean isEqualNode(Node? node);
+
+  const unsigned short DOCUMENT_POSITION_DISCONNECTED = 0x01;
+  const unsigned short DOCUMENT_POSITION_PRECEDING = 0x02;
+  const unsigned short DOCUMENT_POSITION_FOLLOWING = 0x04;
+  const unsigned short DOCUMENT_POSITION_CONTAINS = 0x08;
+  const unsigned short DOCUMENT_POSITION_CONTAINED_BY = 0x10;
+  const unsigned short DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC = 0x20;
+  unsigned short compareDocumentPosition(Node other);
+  boolean contains(Node? other);
+
+  DOMString? lookupPrefix(DOMString? namespace);
+  DOMString? lookupNamespaceURI(DOMString? prefix);
+  boolean isDefaultNamespace(DOMString? namespace);
+
+  Node insertBefore(Node node, Node? child);
+  Node appendChild(Node node);
+  Node replaceChild(Node node, Node child);
+  Node removeChild(Node child);
+};
+
+[Constructor]
+interface Document : Node {
+  [SameObject] readonly attribute DOMImplementation implementation;
+  readonly attribute DOMString URL;
+  readonly attribute DOMString documentURI;
+  readonly attribute DOMString origin;
+  readonly attribute DOMString compatMode;
+  readonly attribute DOMString characterSet;
+  readonly attribute DOMString charset; // legacy alias of .characterSet
+  readonly attribute DOMString inputEncoding; // legacy alias of .characterSet
+  readonly attribute DOMString contentType;
+
+  readonly attribute DocumentType? doctype;
+  readonly attribute Element? documentElement;
+  HTMLCollection getElementsByTagName(DOMString localName);
+  HTMLCollection getElementsByTagNameNS(DOMString? namespace, DOMString localName);
+  HTMLCollection getElementsByClassName(DOMString classNames);
+
+  [NewObject] Element createElement(DOMString localName);
+  [NewObject] Element createElementNS(DOMString? namespace, DOMString qualifiedName);
+  [NewObject] DocumentFragment createDocumentFragment();
+  [NewObject] Text createTextNode(DOMString data);
+  [NewObject] CDATASection createCDATASection(DOMString data);
+  [NewObject] Comment createComment(DOMString data);
+  [NewObject] ProcessingInstruction createProcessingInstruction(DOMString target, DOMString data);
+
+  [NewObject] Node importNode(Node node, optional boolean deep = false);
+  Node adoptNode(Node node);
+
+  [NewObject] Attr createAttribute(DOMString localName);
+  [NewObject] Attr createAttributeNS(DOMString? namespace, DOMString name);
+
+  [NewObject] Event createEvent(DOMString interface);
+
+  [NewObject] Range createRange();
+
+  // NodeFilter.SHOW_ALL = 0xFFFFFFFF
+  [NewObject] NodeIterator createNodeIterator(Node root, optional unsigned long whatToShow = 0xFFFFFFFF, optional NodeFilter? filter = null);
+  [NewObject] TreeWalker createTreeWalker(Node root, optional unsigned long whatToShow = 0xFFFFFFFF, optional NodeFilter? filter = null);
+};
+
+interface XMLDocument : Document {};
+
+interface DOMImplementation {
+  [NewObject] DocumentType createDocumentType(DOMString qualifiedName, DOMString publicId, DOMString systemId);
+  [NewObject] XMLDocument createDocument(DOMString? namespace, [TreatNullAs=EmptyString] DOMString qualifiedName, optional DocumentType? doctype = null);
+  [NewObject] Document createHTMLDocument(optional DOMString title);
+
+  boolean hasFeature(); // useless; always returns true
+};
+
+[Constructor]
+interface DocumentFragment : Node {
+};
+
+interface DocumentType : Node {
+  readonly attribute DOMString name;
+  readonly attribute DOMString publicId;
+  readonly attribute DOMString systemId;
+};
+
+interface Element : Node {
+  readonly attribute DOMString? namespaceURI;
+  readonly attribute DOMString? prefix;
+  readonly attribute DOMString localName;
+  readonly attribute DOMString tagName;
+
+           attribute DOMString id;
+           attribute DOMString className;
+  [SameObject, PutForwards=value] readonly attribute DOMTokenList classList;
+
+  boolean hasAttributes();
+  [SameObject] readonly attribute NamedNodeMap attributes;
+  sequence<DOMString> getAttributeNames();
+  DOMString? getAttribute(DOMString name);
+  DOMString? getAttributeNS(DOMString? namespace, DOMString localName);
+  void setAttribute(DOMString name, DOMString value);
+  void setAttributeNS(DOMString? namespace, DOMString name, DOMString value);
+  void removeAttribute(DOMString name);
+  void removeAttributeNS(DOMString? namespace, DOMString localName);
+  boolean hasAttribute(DOMString name);
+  boolean hasAttributeNS(DOMString? namespace, DOMString localName);
+
+  Attr? getAttributeNode(DOMString name);
+  Attr? getAttributeNodeNS(DOMString? namespace, DOMString localName);
+  Attr? setAttributeNode(Attr attr);
+  Attr? setAttributeNodeNS(Attr attr);
+  Attr removeAttributeNode(Attr attr);
+
+  Element? closest(DOMString selectors);
+  boolean matches(DOMString selectors);
+
+  HTMLCollection getElementsByTagName(DOMString localName);
+  HTMLCollection getElementsByTagNameNS(DOMString? namespace, DOMString localName);
+  HTMLCollection getElementsByClassName(DOMString classNames);
+};
+
+interface NamedNodeMap {
+  readonly attribute unsigned long length;
+  getter Attr? item(unsigned long index);
+  getter Attr? getNamedItem(DOMString name);
+  Attr? getNamedItemNS(DOMString? namespace, DOMString localName);
+  Attr? setNamedItem(Attr attr);
+  Attr? setNamedItemNS(Attr attr);
+  Attr removeNamedItem(DOMString name);
+  Attr removeNamedItemNS(DOMString? namespace, DOMString localName);
+};
+
+interface Attr {
+  readonly attribute DOMString? namespaceURI;
+  readonly attribute DOMString? prefix;
+  readonly attribute DOMString localName;
+  readonly attribute DOMString name;
+           attribute DOMString value;
+           attribute DOMString nodeValue; // legacy alias of .value
+           attribute DOMString textContent; // legacy alias of .value
+
+  readonly attribute Element? ownerElement;
+
+  readonly attribute boolean specified; // useless; always returns true
+};
+
+interface CharacterData : Node {
+  [TreatNullAs=EmptyString] attribute DOMString data;
+  readonly attribute unsigned long length;
+  DOMString substringData(unsigned long offset, unsigned long count);
+  void appendData(DOMString data);
+  void insertData(unsigned long offset, DOMString data);
+  void deleteData(unsigned long offset, unsigned long count);
+  void replaceData(unsigned long offset, unsigned long count, DOMString data);
+};
+
+[Constructor(optional DOMString data = "")]
+interface Text : CharacterData {
+  [NewObject] Text splitText(unsigned long offset);
+  readonly attribute DOMString wholeText;
+};
+
+[Exposed=Window]
+interface CDATASection : Text {
+};
+
+interface ProcessingInstruction : CharacterData {
+  readonly attribute DOMString target;
+};
+
+[Constructor(optional DOMString data = "")]
+interface Comment : CharacterData {
+};
+
+[Constructor]
+interface Range {
+  readonly attribute Node startContainer;
+  readonly attribute unsigned long startOffset;
+  readonly attribute Node endContainer;
+  readonly attribute unsigned long endOffset;
+  readonly attribute boolean collapsed;
+  readonly attribute Node commonAncestorContainer;
+
+  void setStart(Node node, unsigned long offset);
+  void setEnd(Node node, unsigned long offset);
+  void setStartBefore(Node node);
+  void setStartAfter(Node node);
+  void setEndBefore(Node node);
+  void setEndAfter(Node node);
+  void collapse(optional boolean toStart = false);
+  void selectNode(Node node);
+  void selectNodeContents(Node node);
+
+  const unsigned short START_TO_START = 0;
+  const unsigned short START_TO_END = 1;
+  const unsigned short END_TO_END = 2;
+  const unsigned short END_TO_START = 3;
+  short compareBoundaryPoints(unsigned short how, Range sourceRange);
+
+  void deleteContents();
+  [NewObject] DocumentFragment extractContents();
+  [NewObject] DocumentFragment cloneContents();
+  void insertNode(Node node);
+  void surroundContents(Node newParent);
+
+  [NewObject] Range cloneRange();
+  void detach();
+
+  boolean isPointInRange(Node node, unsigned long offset);
+  short comparePoint(Node node, unsigned long offset);
+
+  boolean intersectsNode(Node node);
+
+  stringifier;
+};
+
+interface NodeIterator {
+  [SameObject] readonly attribute Node root;
+  readonly attribute Node referenceNode;
+  readonly attribute boolean pointerBeforeReferenceNode;
+  readonly attribute unsigned long whatToShow;
+  readonly attribute NodeFilter? filter;
+
+  Node? nextNode();
+  Node? previousNode();
+
+  void detach();
+};
+
+interface TreeWalker {
+  [SameObject] readonly attribute Node root;
+  readonly attribute unsigned long whatToShow;
+  readonly attribute NodeFilter? filter;
+           attribute Node currentNode;
+
+  Node? parentNode();
+  Node? firstChild();
+  Node? lastChild();
+  Node? previousSibling();
+  Node? nextSibling();
+  Node? previousNode();
+  Node? nextNode();
+};
+
+callback interface NodeFilter {
+  // Constants for acceptNode()
+  const unsigned short FILTER_ACCEPT = 1;
+  const unsigned short FILTER_REJECT = 2;
+  const unsigned short FILTER_SKIP = 3;
+
+  // Constants for whatToShow
+  const unsigned long SHOW_ALL = 0xFFFFFFFF;
+  const unsigned long SHOW_ELEMENT = 0x1;
+  const unsigned long SHOW_ATTRIBUTE = 0x2; // historical
+  const unsigned long SHOW_TEXT = 0x4;
+  const unsigned long SHOW_CDATA_SECTION = 0x8;
+  const unsigned long SHOW_ENTITY_REFERENCE = 0x10; // historical
+  const unsigned long SHOW_ENTITY = 0x20; // historical
+  const unsigned long SHOW_PROCESSING_INSTRUCTION = 0x40;
+  const unsigned long SHOW_COMMENT = 0x80;
+  const unsigned long SHOW_DOCUMENT = 0x100;
+  const unsigned long SHOW_DOCUMENT_TYPE = 0x200;
+  const unsigned long SHOW_DOCUMENT_FRAGMENT = 0x400;
+  const unsigned long SHOW_NOTATION = 0x800; // historical
+
+  unsigned short acceptNode(Node node);
+};
+
+interface DOMTokenList {
+  readonly attribute unsigned long length;
+  getter DOMString? item(unsigned long index);
+  boolean contains(DOMString token);
+  [CEReactions] void add(DOMString... tokens);
+  [CEReactions] void remove(DOMString... tokens);
+  [CEReactions] boolean toggle(DOMString token, optional boolean force);
+  [CEReactions] void replace(DOMString token, DOMString newToken);
+  boolean supports(DOMString token);
+  [CEReactions] stringifier attribute DOMString value;
+  //  iterable<DOMString>;
+};
+
+// UI Events IDLs
+[Constructor(DOMString type, optional UIEventInit eventInitDict)]
+interface UIEvent : Event {
+    readonly    attribute WindowProxy? view;
+    readonly    attribute long         detail;
+};
+
+dictionary UIEventInit : EventInit {
+    WindowProxy? view = null;
+    long         detail = 0;
+};
+
+[Constructor(DOMString typeArg, optional MouseEventInit mouseEventInitDict)]
+interface MouseEvent : UIEvent {
+    readonly    attribute long           screenX;
+    readonly    attribute long           screenY;
+    readonly    attribute long           clientX;
+    readonly    attribute long           clientY;
+    readonly    attribute boolean        ctrlKey;
+    readonly    attribute boolean        shiftKey;
+    readonly    attribute boolean        altKey;
+    readonly    attribute boolean        metaKey;
+    readonly    attribute short          button;
+    readonly    attribute EventTarget?   relatedTarget;
+    // Introduced in DOM Level 3
+    readonly    attribute unsigned short buttons;
+    boolean getModifierState (DOMString keyArg);
+};
+
+dictionary MouseEventInit : EventModifierInit {
+    long           screenX = 0;
+    long           screenY = 0;
+    long           clientX = 0;
+    long           clientY = 0;
+    short          button = 0;
+    unsigned short buttons = 0;
+    EventTarget?   relatedTarget = null;
+};
+
+dictionary EventModifierInit : UIEventInit {
+    boolean ctrlKey = false;
+    boolean shiftKey = false;
+    boolean altKey = false;
+    boolean metaKey = false;
+    boolean keyModifierStateAltGraph = false;
+    boolean keyModifierStateCapsLock = false;
+    boolean keyModifierStateFn = false;
+    boolean keyModifierStateFnLock = false;
+    boolean keyModifierStateHyper = false;
+    boolean keyModifierStateNumLock = false;
+    boolean keyModifierStateOS = false;
+    boolean keyModifierStateScrollLock = false;
+    boolean keyModifierStateSuper = false;
+    boolean keyModifierStateSymbol = false;
+    boolean keyModifierStateSymbolLock = false;
+};
+
+partial interface MouseEvent {
+    // Deprecated in DOM Level 3
+    void initMouseEvent (DOMString typeArg, boolean bubblesArg, boolean cancelableArg, Window? viewArg, long detailArg, long screenXArg, long screenYArg, long clientXArg, long clientYArg, boolean ctrlKeyArg, boolean altKeyArg, boolean shiftKeyArg, boolean metaKeyArg, short buttonArg, EventTarget? relatedTargetArg);
+};
+
+// Touch Events IDLs
+interface Touch {
+    readonly    attribute long        identifier;
+    readonly    attribute EventTarget target;
+    readonly    attribute long        screenX;
+    readonly    attribute long        screenY;
+    readonly    attribute long        clientX;
+    readonly    attribute long        clientY;
+    readonly    attribute long        pageX;
+    readonly    attribute long        pageY;
+};
+
+// CSSOM IDLs
+interface MediaList {
+  stringifier attribute DOMString mediaText;
+  readonly attribute unsigned long length;
+  getter DOMString item(unsigned long index);
+  void appendMedium(DOMString medium);
+  void deleteMedium(DOMString medium);
+};
+
+interface StyleSheet {
+  readonly attribute DOMString type;
+  readonly attribute DOMString href;
+  readonly attribute Node ownerNode;
+  readonly attribute StyleSheet parentStyleSheet;
+  readonly attribute DOMString title;
+  [PutForwards=mediaText] readonly attribute MediaList media;
+           attribute boolean disabled;
+};
+
+interface CSSStyleSheet : StyleSheet {
+  readonly attribute CSSRule ownerRule;
+  readonly attribute CSSRuleList cssRules;
+  unsigned long insertRule(DOMString rule, unsigned long index);
+  void deleteRule(unsigned long index);
+};
+
+typedef sequence<StyleSheet> StyleSheetList;
+
+partial interface Document {
+  [SameObject] readonly attribute StyleSheetList styleSheets;
+};
+
+[NoInterfaceObject] interface LinkStyle {
+  readonly attribute StyleSheet sheet;
+};
+
+ProcessingInstruction implements LinkStyle;
+
+typedef sequence<CSSRule> CSSRuleList;
+
+interface CSSRule {
+  // Types
+  const unsigned short STYLE_RULE = 1;
+  const unsigned short IMPORT_RULE = 3;
+  const unsigned short MEDIA_RULE = 4;
+  const unsigned short FONT_FACE_RULE = 5;
+  const unsigned short PAGE_RULE = 6;
+  const unsigned short NAMESPACE_RULE = 10;
+  readonly attribute unsigned short type;
+
+  // Parsing and serialization
+           attribute DOMString cssText;
+
+  // Context
+  readonly attribute CSSRule parentRule;
+  readonly attribute CSSStyleSheet parentStyleSheet;
+};
+
+interface CSSStyleRule : CSSRule {
+           attribute DOMString selectorText;
+  readonly attribute CSSStyleDeclaration style;
+};
+
+interface CSSImportRule : CSSRule {
+  readonly attribute DOMString href;
+  [PutForwards=mediaText] readonly attribute MediaList media;
+  readonly attribute CSSStyleSheet styleSheet;
+};
+
+interface CSSMediaRule : CSSRule {
+  [PutForwards=mediaText] readonly attribute MediaList media;
+  readonly attribute CSSRuleList cssRules;
+  unsigned long insertRule(DOMString rule, unsigned long index);
+  void deleteRule(unsigned long index);
+};
+
+interface CSSFontFaceRule : CSSRule {
+  readonly attribute CSSStyleDeclaration style;
+};
+
+interface CSSPageRule : CSSRule {
+           attribute DOMString selectorText;
+  readonly attribute CSSStyleDeclaration style;
+};
+
+interface CSSNamespaceRule : CSSRule {
+  readonly attribute DOMString namespaceURI;
+  readonly attribute DOMString? prefix;
+};
+
+interface CSSStyleDeclaration {
+           attribute DOMString cssText;
+
+  readonly attribute unsigned long length;
+  DOMString item(unsigned long index);
+
+  DOMString getPropertyValue(DOMString property);
+  DOMString getPropertyPriority(DOMString property);
+  void setProperty(DOMString property, DOMString value, optional DOMString priority);
+  DOMString removeProperty(DOMString property);
+
+  readonly attribute CSSStyleDeclarationValue values;
+
+  readonly attribute CSSRule parentRule;
+
+  // CSS Properties
+           attribute DOMString azimuth;
+           attribute DOMString background;
+           attribute DOMString backgroundAttachment;
+           attribute DOMString backgroundColor;
+           attribute DOMString backgroundImage;
+           attribute DOMString backgroundPosition;
+           attribute DOMString backgroundRepeat;
+           attribute DOMString border;
+           attribute DOMString borderCollapse;
+           attribute DOMString borderColor;
+           attribute DOMString borderSpacing;
+           attribute DOMString borderStyle;
+           attribute DOMString borderTop;
+           attribute DOMString borderRight;
+           attribute DOMString borderBottom;
+           attribute DOMString borderLeft;
+           attribute DOMString borderTopColor;
+           attribute DOMString borderRightColor;
+           attribute DOMString borderBottomColor;
+           attribute DOMString borderLeftColor;
+           attribute DOMString borderTopStyle;
+           attribute DOMString borderRightStyle;
+           attribute DOMString borderBottomStyle;
+           attribute DOMString borderLeftStyle;
+           attribute DOMString borderTopWidth;
+           attribute DOMString borderRightWidth;
+           attribute DOMString borderBottomWidth;
+           attribute DOMString borderLeftWidth;
+           attribute DOMString borderWidth;
+           attribute DOMString bottom;
+           attribute DOMString captionSide;
+           attribute DOMString clear;
+           attribute DOMString clip;
+           attribute DOMString color;
+           attribute DOMString content;
+           attribute DOMString counterIncrement;
+           attribute DOMString counterReset;
+           attribute DOMString cue;
+           attribute DOMString cueAfter;
+           attribute DOMString cueBefore;
+           attribute DOMString cursor;
+           attribute DOMString direction;
+           attribute DOMString display;
+           attribute DOMString elevation;
+           attribute DOMString emptyCells;
+           attribute DOMString cssFloat;
+           attribute DOMString font;
+           attribute DOMString fontFamily;
+           attribute DOMString fontSize;
+           attribute DOMString fontSizeAdjust;
+           attribute DOMString fontStretch;
+           attribute DOMString fontStyle;
+           attribute DOMString fontVariant;
+           attribute DOMString fontWeight;
+           attribute DOMString height;
+           attribute DOMString left;
+           attribute DOMString letterSpacing;
+           attribute DOMString lineHeight;
+           attribute DOMString listStyle;
+           attribute DOMString listStyleImage;
+           attribute DOMString listStylePosition;
+           attribute DOMString listStyleType;
+           attribute DOMString margin;
+           attribute DOMString marginTop;
+           attribute DOMString marginRight;
+           attribute DOMString marginBottom;
+           attribute DOMString marginLeft;
+           attribute DOMString marks;
+           attribute DOMString maxHeight;
+           attribute DOMString maxWidth;
+           attribute DOMString minHeight;
+           attribute DOMString minWidth;
+           attribute DOMString orphans;
+           attribute DOMString outline;
+           attribute DOMString outlineColor;
+           attribute DOMString outlineStyle;
+           attribute DOMString outlineWidth;
+           attribute DOMString overflow;
+           attribute DOMString padding;
+           attribute DOMString paddingTop;
+           attribute DOMString paddingRight;
+           attribute DOMString paddingBottom;
+           attribute DOMString paddingLeft;
+           attribute DOMString page;
+           attribute DOMString pageBreakAfter;
+           attribute DOMString pageBreakBefore;
+           attribute DOMString pageBreakInside;
+           attribute DOMString pause;
+           attribute DOMString pauseAfter;
+           attribute DOMString pauseBefore;
+           attribute DOMString pitch;
+           attribute DOMString pitchRange;
+           attribute DOMString playDuring;
+           attribute DOMString position;
+           attribute DOMString quotes;
+           attribute DOMString richness;
+           attribute DOMString right;
+           attribute DOMString size;
+           attribute DOMString speak;
+           attribute DOMString speakHeader;
+           attribute DOMString speakNumeral;
+           attribute DOMString speakPunctuation;
+           attribute DOMString speechRate;
+           attribute DOMString stress;
+           attribute DOMString tableLayout;
+           attribute DOMString textAlign;
+           attribute DOMString textDecoration;
+           attribute DOMString textIndent;
+           attribute DOMString textShadow;
+           attribute DOMString textTransform;
+           attribute DOMString top;
+           attribute DOMString unicodeBidi;
+           attribute DOMString verticalAlign;
+           attribute DOMString visibility;
+           attribute DOMString voiceFamily;
+           attribute DOMString volume;
+           attribute DOMString whiteSpace;
+           attribute DOMString widows;
+           attribute DOMString width;
+           attribute DOMString wordSpacing;
+           attribute DOMString zIndex;
+};
+
+interface CSSStyleDeclarationValue {
+  // ...
+
+  // CSS Properties
+
+};
+
+interface CSSPropertyValue {
+           attribute DOMString cssText;
+};
+
+[NoInterfaceObject] interface CSSMapValue {
+  getter CSSValue (DOMString name);
+};
+
+[NoInterfaceObject] interface CSSPropertyValueList {
+  readonly attribute CSSValue[] list;
+};
+
+[NoInterfaceObject] interface CSSComponentValue {
+  readonly attribute DOMString type;
+           attribute any value;
+};
+
+[NoInterfaceObject] interface CSSStringComponentValue {
+           attribute DOMString string;
+};
+
+[NoInterfaceObject] interface CSSKeywordComponentValue {
+           attribute DOMString keyword;
+};
+
+[NoInterfaceObject] interface CSSIdentifierComponentValue {
+           attribute DOMString identifier;
+};
+
+[NoInterfaceObject] interface CSSColorComponentValue {
+           attribute short red;
+           attribute short green;
+           attribute short blue;
+           attribute float alpha;
+};
+
+[NoInterfaceObject] interface CSSLengthComponentValue {
+           attribute float em;
+           attribute float ex;
+           attribute float px;
+           // figure out what to do with absolute lengths
+};
+
+[NoInterfaceObject] interface CSSPercentageComponentValue {
+           attribute float percent;
+};
+
+[NoInterfaceObject] interface CSSURLComponentValue {
+           attribute DOMString? url;
+};
+
+[NoInterfaceObject] interface ElementCSSInlineStyle {
+  readonly attribute CSSStyleDeclaration style;
+};
+
+//partial interface Window {
+//  CSSStyleDeclaration getComputedStyle(Element elt);
+//  CSSStyleDeclaration getComputedStyle(Element elt, DOMString pseudoElt);
+//};
diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/webappapis/scripting/events/messageevent-constructor-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/html/webappapis/scripting/events/messageevent-constructor-expected.txt
deleted file mode 100644 (file)
index 303a4af..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-
-PASS Default event values 
-PASS MessageEventInit dictionary 
-PASS Passing null for ports member 
-FAIL ports attribute should be a FrozenArray assert_true: ev.ports should return the same object expected true got false
-PASS initMessageEvent operation 
-FAIL Passing null for ports parameter to initMessageEvent assert_throws: function "function () {
-    ev.initMessageEvent("test", true, false, "testData", "testOrigin", "testId", window, null)
-  }" did not throw
-FAIL All parameters to initMessageEvent should be mandatory assert_equals: MessageEvent.prototype.initMessageEvent.length should be 8 expected 8 but got 0
-
diff --git a/LayoutTests/imported/w3c/web-platform-tests/html/webappapis/scripting/events/messageevent-constructor.html b/LayoutTests/imported/w3c/web-platform-tests/html/webappapis/scripting/events/messageevent-constructor.html
deleted file mode 100644 (file)
index 47b536d..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-<!DOCTYPE html>
-<title>MessageEvent constructor</title>
-<script src="/resources/testharness.js"></script>
-<script src="/resources/testharnessreport.js"></script>
-<script>
-test(function() {
-  var ev = new MessageEvent("test")
-  assert_equals(ev.type, "test", "type attribute")
-  assert_equals(ev.target, null, "target attribute")
-  assert_equals(ev.currentTarget, null, "currentTarget attribute")
-  assert_equals(ev.eventPhase, Event.NONE, "eventPhase attribute")
-  assert_equals(ev.bubbles, false, "bubbles attribute")
-  assert_equals(ev.cancelable, false, "cancelable attribute")
-  assert_equals(ev.defaultPrevented, false, "defaultPrevented attribute")
-  assert_equals(ev.isTrusted, false, "isTrusted attribute")
-  assert_true(ev.timeStamp > 0, "timeStamp attribute")
-  assert_true("initMessageEvent" in ev, "initMessageEvent operation")
-  assert_equals(ev.data, null, "data attribute")
-  assert_equals(ev.origin, "", "origin attribute")
-  assert_equals(ev.lastEventId, "", "lastEventId attribute")
-  assert_equals(ev.source, null, "source attribute")
-  assert_array_equals(ev.ports, [], "ports attribute")
-}, "Default event values")
-
-test(function() {
-  var channel = new MessageChannel()
-  var ev = new MessageEvent("test", { data: "testData", origin: "testOrigin", lastEventId: "testId", source: window, ports: [channel.port1] })
-  assert_equals(ev.type, "test", "type attribute")
-  assert_equals(ev.data, "testData", "data attribute")
-  assert_equals(ev.origin, "testOrigin", "origin attribute")
-  assert_equals(ev.lastEventId, "testId", "lastEventId attribute")
-  assert_equals(ev.source, window, "source attribute")
-  assert_array_equals(ev.ports, [channel.port1], "ports attribute")
-}, "MessageEventInit dictionary")
-
-test(function() {
-  assert_throws(new TypeError(), function() {
-    new MessageEvent("test", { ports: null })
-  })
-}, "Passing null for ports member")
-
-test(function() {
-  var ev = new MessageEvent("test", { ports: [] })
-  assert_true(Array.isArray(ev.ports), "Array.isArray() should return true")
-  assert_true(Object.isFrozen(ev.ports), "Object.isFrozen() should return true")
-  assert_true(ev.ports === ev.ports, "ev.ports should return the same object")
-}, "ports attribute should be a FrozenArray")
-
-test(function() {
-  var ev = document.createEvent("messageevent");
-  var channel = new MessageChannel()
-  ev.initMessageEvent("test", true, false, "testData", "testOrigin", "testId", window, [channel.port1])
-  assert_equals(ev.type, "test", "type attribute")
-  assert_equals(ev.bubbles, true, "bubbles attribute")
-  assert_equals(ev.cancelable, false, "bubbles attribute")
-  assert_equals(ev.data, "testData", "data attribute")
-  assert_equals(ev.origin, "testOrigin", "origin attribute")
-  assert_equals(ev.lastEventId, "testId", "lastEventId attribute")
-  assert_equals(ev.source, window, "source attribute")
-  assert_array_equals(ev.ports, [channel.port1], "ports attribute")
-}, "initMessageEvent operation")
-
-test(function() {
-  var ev = document.createEvent("messageevent")
-  assert_throws(new TypeError(), function() {
-    ev.initMessageEvent("test", true, false, "testData", "testOrigin", "testId", window, null)
-  })
-}, "Passing null for ports parameter to initMessageEvent")
-
-test(function() {
-  var ev = document.createEvent("messageevent")
-  assert_equals(MessageEvent.prototype.initMessageEvent.length, 8, "MessageEvent.prototype.initMessageEvent.length should be 8")
-  assert_throws(new TypeError(), function() {
-    ev.initMessageEvent("test", true, false, "testData", "testOrigin", "testId", window)
-  }, "Calling initMessageEvent with only 7 parameters should throw a TypeError")
-}, "All parameters to initMessageEvent should be mandatory")
-
-</script>
index e6837a2..f3b8f82 100644 (file)
@@ -4,9 +4,7 @@ PASS MessageEventInit dictionary
 PASS Passing null for ports member 
 FAIL ports attribute should be a FrozenArray assert_true: ev.ports should return the same object expected true got false
 PASS initMessageEvent operation 
-FAIL Passing null for ports parameter to initMessageEvent assert_throws: function "function () {
-    ev.initMessageEvent("test", true, false, "testData", "testOrigin", "testId", window, null)
-  }" did not throw
-FAIL All parameters to initMessageEvent should be mandatory assert_equals: MessageEvent.prototype.initMessageEvent.length should be 8 expected 8 but got 0
+PASS Passing null for ports parameter to initMessageEvent 
+PASS initMessageEvent operation default parameter values 
 FAIL Passing ServiceWorker for source member undefined is not an object (evaluating 'navigator.serviceWorker.getRegistration')
 
index 8a8a8f6..479127d 100644 (file)
@@ -70,11 +70,17 @@ test(function() {
 
 test(function() {
   var ev = document.createEvent("messageevent")
-  assert_equals(MessageEvent.prototype.initMessageEvent.length, 8, "MessageEvent.prototype.initMessageEvent.length should be 8")
-  assert_throws(new TypeError(), function() {
-    ev.initMessageEvent("test", true, false, "testData", "testOrigin", "testId", window)
-  }, "Calling initMessageEvent with only 7 parameters should throw a TypeError")
-}, "All parameters to initMessageEvent should be mandatory")
+  assert_equals(MessageEvent.prototype.initMessageEvent.length, 1, "MessageEvent.prototype.initMessageEvent.length should be 1")
+  ev.initMessageEvent("test")
+  assert_equals(ev.type, "test", "type attribute")
+  assert_equals(ev.bubbles, false, "bubbles attribute")
+  assert_equals(ev.cancelable, false, "bubbles attribute")
+  assert_equals(ev.data, null, "data attribute")
+  assert_equals(ev.origin, "", "origin attribute")
+  assert_equals(ev.lastEventId, "", "lastEventId attribute")
+  assert_equals(ev.source, null, "source attribute")
+  assert_array_equals(ev.ports, [], "ports attribute")
+}, "initMessageEvent operation default parameter values")
 
 promise_test(function(t) {
     var worker_url = "/service-workers/service-worker/resources/empty-worker.js";
index 14f6399..66f1eec 100644 (file)
@@ -1,3 +1,36 @@
+2017-03-07  Chris Dumez  <cdumez@apple.com>
+
+        Align initEvent / initCustomEvent / initMessageEvent with the latest specification
+        https://bugs.webkit.org/show_bug.cgi?id=169176
+
+        Reviewed by Alex Christensen.
+
+        Align initEvent / initCustomEvent / initMessageEvent with the latest specification
+        after:
+        - https://github.com/whatwg/dom/pull/417
+        - https://github.com/whatwg/html/pull/2410
+
+        In particular, the following changes were made:
+        - initEvent: The length property now properly returns 1 instead of 3 as only the
+          first parameter is mandatory. We were already behaving correcting the the length
+          property value was wrong because we forgot to drop a hack from the bindings
+          generator.
+        - initCustomEvent: Make all parameters except the first optional. Previously, all
+          parameters were mandatory so this is safe.
+        - initMessageEvent: Drop the custom code and mark the first parameter as mandatory.
+          A side effect of dropping the custom code is that null is no longer considered as
+          valid input for the last parameter. The parameter is of type sequence<> and the
+          new behavior is consistent with the specification and Firefox. If it turns out to
+          break existing content, I'll make the parameter nullable in a follow-up.
+
+        No new tests, updated existing tests.
+
+        * bindings/js/JSMessageEventCustom.cpp:
+        * bindings/scripts/CodeGeneratorJS.pm:
+        (GeneratePropertiesHashTable):
+        * dom/CustomEvent.idl:
+        * dom/MessageEvent.idl:
+
 2017-03-07  Antti Koivisto  <antti@apple.com>
 
         Differentiate between pending head and body stylesheets in Style::Scope
index b5c5fb1..e0886ab 100644 (file)
@@ -140,11 +140,6 @@ static JSC::JSValue handleInitMessageEvent(JSMessageEvent* jsEvent, JSC::ExecSta
     return jsUndefined();
 }
 
-JSC::JSValue JSMessageEvent::initMessageEvent(JSC::ExecState& state)
-{
-    return handleInitMessageEvent(this, state);
-}
-
 JSC::JSValue JSMessageEvent::webkitInitMessageEvent(JSC::ExecState& state)
 {
     return handleInitMessageEvent(this, state);
index 868452b..8a043df 100644 (file)
@@ -2349,9 +2349,6 @@ sub GeneratePropertiesHashTable
 
         my $functionLength = GetFunctionLength($function);
 
-        # FIXME: Remove this once we can get rid of the quirk introduced in https://bugs.webkit.org/show_bug.cgi?id=163967.
-        $functionLength = 3 if $interfaceName eq "Event" and $function->name eq "initEvent";
-
         if ($function->extendedAttributes->{DOMJIT}) {
             push(@$hashValue2, "&DOMJITSignatureFor" . $interface->type->name . $codeGenerator->WK_ucfirst($function->name));
         } else {
index 6937cab..1866be4 100644 (file)
@@ -31,7 +31,7 @@
 ] interface CustomEvent : Event {
     [CustomGetter] readonly attribute any detail;
 
-    [CallWith=ScriptState] void initCustomEvent(DOMString type, boolean bubbles, boolean cancelable, any detail);
+    [CallWith=ScriptState] void initCustomEvent(DOMString type, optional boolean bubbles = false, optional boolean cancelable = false, optional any detail = null);
 };
 
 dictionary CustomEventInit : EventInit {
index 4257bd2..ee696b9 100644 (file)
@@ -37,9 +37,9 @@
     [CachedAttribute, CustomGetter] readonly attribute any data;
     readonly attribute FrozenArray<MessagePort> ports;
 
-    [Custom] void initMessageEvent(optional DOMString typeArg, optional boolean canBubbleArg, optional boolean cancelableArg,
-        optional any dataArg, optional USVString originArg, optional DOMString lastEventIdArg, optional (DOMWindow or MessagePort)? sourceArg,
-        optional sequence<MessagePort> messagePorts);
+    [CallWith=ScriptState] void initMessageEvent(DOMString type, optional boolean bubbles = false, optional boolean cancelable = false,
+        optional any data = null, optional USVString originArg = "", optional DOMString lastEventId = "", optional (DOMWindow or MessagePort)? source = null,
+        optional sequence<MessagePort> messagePorts = []);
     [Custom] void webkitInitMessageEvent(optional DOMString typeArg, optional boolean canBubbleArg, optional boolean cancelableArg,
         optional any dataArg, optional USVString originArg, optional DOMString lastEventIdArg, optional (DOMWindow or MessagePort)? sourceArg,
         optional sequence<MessagePort> messagePorts);