Bug 1452296 [wpt PR 10285] - Check inherited interfaces exist, a=testonly
authorLuke Bjerring <lukebjerring@users.noreply.github.com>
Mon, 09 Apr 2018 22:16:44 +0000
changeset 413704 12541a4f7b34e260399935dbcaf65d4aa2abad64
parent 413703 42e3924a5c323376090a216b3db18d8a0b44bc0e
child 413705 f0db75fd309873e1f48ececb1abe17fa61b08c4e
push id102161
push userjames@hoppipolla.co.uk
push dateSun, 15 Apr 2018 09:10:16 +0000
treeherdermozilla-inbound@ebfad4be630d [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewerstestonly
bugs1452296, 10285
milestone61.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 1452296 [wpt PR 10285] - Check inherited interfaces exist, a=testonly Automatic update from web-platform-testsCheck inherited interfaces exist (#10285) Also fix affected tests. wpt-commits: 4d1c1925e6c863b9365d7b8196f7b538378ffdb5 wpt-pr: 10285 wpt-commits: 4d1c1925e6c863b9365d7b8196f7b538378ffdb5 wpt-pr: 10285
testing/web-platform/meta/MANIFEST.json
testing/web-platform/tests/accelerometer/idlharness.https.html
testing/web-platform/tests/background-fetch/interfaces.html
testing/web-platform/tests/background-fetch/interfaces.worker.js
testing/web-platform/tests/clipboard-apis/async-interfaces.https.html
testing/web-platform/tests/content-security-policy/securitypolicyviolation/idl.html
testing/web-platform/tests/cookie-store/idlharness.tentative.html
testing/web-platform/tests/css/cssom-view/interfaces.html
testing/web-platform/tests/css/cssom/interfaces.html
testing/web-platform/tests/encrypted-media/idlharness.https.html
testing/web-platform/tests/gamepad/idlharness.html
testing/web-platform/tests/geolocation-sensor/idlharness.https.html
testing/web-platform/tests/gyroscope/idlharness.https.html
testing/web-platform/tests/hr-time/idlharness.html
testing/web-platform/tests/magnetometer/idlharness.https.html
testing/web-platform/tests/mediacapture-record/idlharness.html
testing/web-platform/tests/mediacapture-streams/MediaDevices-IDL-all.html
testing/web-platform/tests/mediacapture-streams/MediaDevices-IDL-enumerateDevices.html
testing/web-platform/tests/navigation-timing/nav2_idlharness.html
testing/web-platform/tests/orientation-sensor/idlharness.https.html
testing/web-platform/tests/payment-handler/interfaces.https.any.js
testing/web-platform/tests/pointerevents/extension/idlharness.html
testing/web-platform/tests/pointerevents/idlharness.html
testing/web-platform/tests/remote-playback/idlharness.html
testing/web-platform/tests/resources/idlharness.js
testing/web-platform/tests/resources/test/tests/idlharness/IdlDictionary/get_inheritance_stack.html
testing/web-platform/tests/resources/test/tests/idlharness/IdlInterface/test_primary_interface_of_undefined.html
testing/web-platform/tests/service-workers/service-worker/interfaces-window.https.html
testing/web-platform/tests/service-workers/service-worker/resources/interfaces-worker.sub.js
testing/web-platform/tests/webaudio/idlharness.https.html
testing/web-platform/tests/webaudio/the-audio-api/the-delaynode-interface/idl-test.html
testing/web-platform/tests/webaudio/the-audio-api/the-gainnode-interface/idl-test.html
testing/web-platform/tests/webauthn/interfaces.https.any.js
testing/web-platform/tests/webstorage/idlharness.html
--- a/testing/web-platform/meta/MANIFEST.json
+++ b/testing/web-platform/meta/MANIFEST.json
@@ -399909,17 +399909,17 @@
    "30e8588ff49a1d526d65aac89bc80f4782715914",
    "manual"
   ],
   "accelerometer/OWNERS": [
    "b119dbb984792f33c6e7463f3105d37c3c3b7ad8",
    "support"
   ],
   "accelerometer/idlharness.https.html": [
-   "f6da2046a4bc1c31a7ad2169c51e22c74105b989",
+   "93a78732bf63dcdd30ca1004f7ab850d5e7faaae",
    "testharness"
   ],
   "accname/OWNERS": [
    "3a6002295ea2893ba74763e46965bd2d1291d55b",
    "support"
   ],
   "accname/description_from_content_of_describedby_element-manual.html": [
    "9bf362dc2f578e507bf8d0f7133f7256e061e1d2",
@@ -402781,21 +402781,21 @@
    "fd9efe16c485c6fa6cc4b587b492eb24bf9ccac2",
    "testharness"
   ],
   "background-fetch/interfaces-worker.https.html": [
    "3bdcb55c864d99da109cdc0abe56c06aaf3e3d1e",
    "testharness"
   ],
   "background-fetch/interfaces.html": [
-   "d95f416256134d8c4e50946c39668849c7f66298",
+   "dc48b3e0bff00fed4a0e846e35f2499d6579dcd8",
    "testharness"
   ],
   "background-fetch/interfaces.worker.js": [
-   "b1c9c41179028dc432b3a1bb988df4b23b3105af",
+   "c1f72ff423ec67b8400ce233a6ede945b8d262eb",
    "testharness"
   ],
   "background-fetch/mixed-content-and-allowed-schemes.https.window.js": [
    "a285388a7d275f50444079b9549797ed29b27fd3",
    "testharness"
   ],
   "background-fetch/port-blocking.https.window.js": [
    "6e06b6e9b9cd8713ff5a8ca405c1b54fe15c559c",
@@ -403789,17 +403789,17 @@
    "3d3b57376cbacbd2118fe4fe07abad5bd9ad95fd",
    "support"
   ],
   "clipboard-apis/OWNERS": [
    "bae753666bda85e9805a5e2fad80ba71459b8aba",
    "support"
   ],
   "clipboard-apis/async-interfaces.https.html": [
-   "f0b8b999ac1a99d956fcfdd3ee52b4875d453974",
+   "ffc8726b7afa6dc3e58745bd0dac525a570970ef",
    "testharness"
   ],
   "clipboard-apis/async-navigator-clipboard-basics.https.html": [
    "59f25a9968d47079857989146e26562c3784be34",
    "testharness"
   ],
   "clipboard-apis/async-write-dttext-read-dttext-manual.https.html": [
    "7b2a4d7f1e1e918f8a96694f6619875b746d0255",
@@ -423449,17 +423449,17 @@
    "01d4ce834d175d13eb0d9c80bbe4a7be614d687f",
    "testharness"
   ],
   "content-security-policy/securitypolicyviolation/blockeduri-inline.html": [
    "8e7326101e28ec65c6c834f7711b261917f93218",
    "testharness"
   ],
   "content-security-policy/securitypolicyviolation/idl.html": [
-   "fb8f2938d76a29cc68c46fb49a12feebc0031e54",
+   "29c68c73b221ec65466645dfa5e9ecc1f2a0f007",
    "testharness"
   ],
   "content-security-policy/securitypolicyviolation/img-src-redirect-upgrade-reporting.https.html": [
    "e338e94ea726419db64ed5b98c95b862c394409e",
    "testharness"
   ],
   "content-security-policy/securitypolicyviolation/img-src-redirect-upgrade-reporting.https.html.headers": [
    "960ee8a9f7ccf33ea435890e2eae0e68399f32ed",
@@ -424153,17 +424153,17 @@
    "7fb04dc519bafed5f35493f65664b51e23131a1d",
    "testharness"
   ],
   "cookie-store/http_cookie_and_set_cookie_headers.tentative.https.html": [
    "2ccfc03ad6fedb063e2cd3ff9726b8d482ab5cf0",
    "testharness"
   ],
   "cookie-store/idlharness.tentative.html": [
-   "8654087597cc0c11b880b0144897dab26691d12a",
+   "2a588a0b80a3cee80af52b9109770fe8ec17becd",
    "testharness"
   ],
   "cookie-store/idlharness_serviceworker.js": [
    "aceb00f593b0447853fa70c8c971902cf02a164b",
    "support"
   ],
   "cookie-store/idlharness_serviceworker.tentative.https.html": [
    "0c8a1302ab1839cab71c87db2bda1ca6abcb6a23",
@@ -534913,17 +534913,17 @@
    "071bcc0320577077bc6768921f28e33e892ccd9a",
    "testharness"
   ],
   "css/cssom-view/iframe.html": [
    "81c8e70138fc30d0954d9de692ee396310586c7f",
    "support"
   ],
   "css/cssom-view/interfaces.html": [
-   "d74bbaf34040d130444915b4432c529a73d9604c",
+   "0cecd644b3363618acd1496865578a15306e18fe",
    "testharness"
   ],
   "css/cssom-view/matchMedia.xht": [
    "3330cf1603555d50d097cdc584cf1c193c8b32d3",
    "testharness"
   ],
   "css/cssom-view/matchMediaAddListener.html": [
    "ec5b756e980676c8707bcb2d7d91b7c977158e0d",
@@ -535397,17 +535397,17 @@
    "812f2b02d7694dd270b7a3e1ef205b99890ab216",
    "testharness"
   ],
   "css/cssom/insertRule-syntax-error-01.html": [
    "36f824b24dd56e20b7c524111512d8743745daaa",
    "testharness"
   ],
   "css/cssom/interfaces.html": [
-   "c1dfd96239986c9c57d7b07caebbd1fc9654e0b9",
+   "de0fd22930a606a17da15291ca14321463316f11",
    "testharness"
   ],
   "css/cssom/medialist-dynamic-001-ref.html": [
    "bdf98c994adcebff3a3434260dfe71e99c8441e1",
    "support"
   ],
   "css/cssom/medialist-dynamic-001.html": [
    "8c62d1e6b5791b68240551c0c9cd115f4d16a892",
@@ -551721,17 +551721,17 @@
    "85124d35b37f14c143e1fcb2965f131a8f2a3391",
    "testharness"
   ],
   "encrypted-media/encrypted-media-default-feature-policy.https.sub.html": [
    "d7627e2017ae8ac994a6bc8a2a00df0dd2332c59",
    "testharness"
   ],
   "encrypted-media/idlharness.https.html": [
-   "49b0c8508501b73ba979f7c86ebcc40de0073caf",
+   "29f3c9774b623413c4127ea0e5a915e67f24cd24",
    "testharness"
   ],
   "encrypted-media/polyfill/cast-polyfill.js": [
    "3df0e0c0d1b6190441f6f57d762cf508a3e8f857",
    "support"
   ],
   "encrypted-media/polyfill/chrome-polyfill.js": [
    "f0591a001b2ecf4cb830e5f6546d9c0f1c753e95",
@@ -554733,17 +554733,17 @@
    "5d3f77b11fa30687bf6e9042c51d88ce51c9cf6a",
    "manual"
   ],
   "gamepad/idlharness-manual.html": [
    "e570c8f2defac5b53f5f18fa3a09b184e8adb845",
    "manual"
   ],
   "gamepad/idlharness.html": [
-   "302f0796746f252a1a851d306d7e96cf86d7d402",
+   "acf9bec9b03479458c4b8b17a1d4ef9f87d15d7b",
    "testharness"
   ],
   "gamepad/timestamp-manual.html": [
    "b2432e7ea263fb80be42e7eecf93a9d885c0205d",
    "manual"
   ],
   "generic-sensor/OWNERS": [
    "b1349055762c7d44414c0c11fb8500d5eee9a75f",
@@ -554873,17 +554873,17 @@
    "5a61a677b26c1c25cb46da2baa16e3a6783febee",
    "testharness"
   ],
   "geolocation-sensor/OWNERS": [
    "fabf35173a8bd10c7e5ffe348dd92532199ab51a",
    "support"
   ],
   "geolocation-sensor/idlharness.https.html": [
-   "8e22460ccb5e31bdcf9c9d3fc135abc55345e7ab",
+   "38c75b8946de5be961435045007b8af9a4627cd2",
    "testharness"
   ],
   "graphics-aam/OWNERS": [
    "3a6002295ea2893ba74763e46965bd2d1291d55b",
    "support"
   ],
   "graphics-aam/graphics-document_on_html_element-manual.html": [
    "933fcb47c29bb5e119326147266457231dabf810",
@@ -554953,29 +554953,29 @@
    "1e15b883bd317ca83783864fc563794cb0f6df8e",
    "manual"
   ],
   "gyroscope/OWNERS": [
    "b119dbb984792f33c6e7463f3105d37c3c3b7ad8",
    "support"
   ],
   "gyroscope/idlharness.https.html": [
-   "c6c627cc2e250664e174edf90aa9b402ea5c0500",
+   "8b9b8fcdc6d33fb20c174b67306a182bdbb707fd",
    "testharness"
   ],
   "hr-time/OWNERS": [
    "b82f9756b15ef3ea45fb250e304031d9ceaee9c7",
    "support"
   ],
   "hr-time/basic.any.js": [
    "5c727eed4efd84b4b280b2584b7338217971a9e7",
    "testharness"
   ],
   "hr-time/idlharness.html": [
-   "579176cad14656ca5cdc616dd1323dc38a5b62ba",
+   "17353579d4224ac08fd90453fd065acee56d7621",
    "testharness"
   ],
   "hr-time/monotonic-clock.any.js": [
    "4aef47650d5cbc750393c3ac9423dbff24a15917",
    "testharness"
   ],
   "hr-time/performance-tojson.html": [
    "2d45889944dab7b0489a03a649a70e1177bca428",
@@ -575129,17 +575129,17 @@
    "da4e6b8975beecdcae24da26920a56a652f781e4",
    "manual"
   ],
   "magnetometer/OWNERS": [
    "b119dbb984792f33c6e7463f3105d37c3c3b7ad8",
    "support"
   ],
   "magnetometer/idlharness.https.html": [
-   "2a08a46bc2fa6e5b75c3c05c0396b48280075892",
+   "d5ba7fe95ed2740eec56757dfe3b0a900f3ea4c4",
    "testharness"
   ],
   "mathml/OWNERS": [
    "fc243e5e1a8898367d02bba2636a7b4f2541722c",
    "support"
   ],
   "mathml/README.md": [
    "9a0f19770c7f633e06913d9d138e8f3a6d1a1104",
@@ -576169,17 +576169,17 @@
    "29d5649ff97ca0631f8c841425a88248525f9774",
    "testharness"
   ],
   "mediacapture-record/OWNERS": [
    "54ff7b49502eceae71135d5dec86fcd34c309dc7",
    "support"
   ],
   "mediacapture-record/idlharness.html": [
-   "d96f50512a47fed449151b716d838ac10d23f47f",
+   "99adc299359aad8cdd4f08ba920dde780bd06063",
    "testharness"
   ],
   "mediacapture-streams/GUM-api.https.html": [
    "ea80e175f08b16600df620d6a46a89dc571ea4f8",
    "testharness"
   ],
   "mediacapture-streams/GUM-deny.https.html": [
    "58bc6b9e27d4c7036b188921598d9b5213f0b8db",
@@ -576201,21 +576201,21 @@
    "89758369578246d620e41d53a75ae0b885d589a1",
    "testharness"
   ],
   "mediacapture-streams/GUM-unknownkey-option-param.https.html": [
    "cfa1c007fadcdef21b043185903bfb0696b7b44a",
    "testharness"
   ],
   "mediacapture-streams/MediaDevices-IDL-all.html": [
-   "2d9b604f3039fd5bebbe0491f0bb31d5b0b47722",
+   "42f245551c0d64377f949efda4cfad4934323b48",
    "testharness"
   ],
   "mediacapture-streams/MediaDevices-IDL-enumerateDevices.html": [
-   "8382c7e6be38bad808be950b14d80fe59513ff0d",
+   "cea6395d985eadd8340a4f3d64df2bb266a7f793",
    "testharness"
   ],
   "mediacapture-streams/MediaDevices-enumerateDevices.https.html": [
    "c44f824ed1836c272125b0b5b10653cb86db2a7e",
    "testharness"
   ],
   "mediacapture-streams/MediaDevices-getUserMedia.https.html": [
    "a515deeec87c394b4a826b538df6dd0baa05cae6",
@@ -577861,17 +577861,17 @@
    "7b09fdf79c4166eaf21bcf2f92973c80b2864f32",
    "testharness"
   ],
   "navigation-timing/nav2_data_uri.html": [
    "b5f72095f600b8a840c0b3d8048e863ab5fbf215",
    "support"
   ],
   "navigation-timing/nav2_idlharness.html": [
-   "ffc5d6f4a11a4bf2ad72404fc62d88be1c45a5f5",
+   "935c963cbec9f000ea0564a0e0c4ce872da40ea8",
    "testharness"
   ],
   "navigation-timing/nav2_test_attributes_exist.html": [
    "6ed5a8f92b282d956d7d946cf031296ed7bfef50",
    "testharness"
   ],
   "navigation-timing/nav2_test_attributes_values.html": [
    "e5f14ce9a725cbb3a88a73b5f137625334f1e3de",
@@ -584269,17 +584269,17 @@
    "c9f234f6508fb778fdf91277bb8950c99479979d",
    "testharness"
   ],
   "orientation-sensor/RelativeOrientationSensor-enabled-on-self-origin-by-feature-policy.https.html.headers": [
    "e6e93a77c618e8477d79f6cf1ff05d0f5865821c",
    "support"
   ],
   "orientation-sensor/idlharness.https.html": [
-   "05a95e835ce72800601fcd18007eaec0c05dc79a",
+   "1f94329cb330a1a904d409a6e158a5fe9f8dd709",
    "testharness"
   ],
   "page-visibility/OWNERS": [
    "b82f9756b15ef3ea45fb250e304031d9ceaee9c7",
    "support"
   ],
   "page-visibility/idlharness.html": [
    "e3f97d7f03caf99d71e9528c6db75c13c477b4eb",
@@ -584441,17 +584441,17 @@
    "39e90eca2f6cb7d4fa62655a1aa492acea30f436",
    "testharness"
   ],
   "payment-handler/can-make-payment-event.https.html": [
    "7a361f57439425d5ec5c583ad363d9acf9fa7e1d",
    "testharness"
   ],
   "payment-handler/interfaces.https.any.js": [
-   "66f067e3988546afc0796dcbc276b04b5a5615fc",
+   "4d1e2360e69d2c2f1664e73a79c1d893c6ee10fb",
    "testharness"
   ],
   "payment-handler/manifest.json": [
    "1224f847a504794d499dba09ec7db82c5614146d",
    "support"
   ],
   "payment-handler/payment-app/payment.html": [
    "b2c68838b3d5df98f17ccfd1bf65c4de6579ae65",
@@ -584857,17 +584857,17 @@
    "91a8bd86357b0d96ba3ab8f08f88c28436de484c",
    "support"
   ],
   "pointerevents/compat/pointerevent_touch-action_two-finger_interaction-manual.html": [
    "cba44e2dd2a3c54106bfecc6cdd407643e2ba995",
    "manual"
   ],
   "pointerevents/extension/idlharness.html": [
-   "83ee5397ece0126d71c235cecb554b024e3515d1",
+   "c1ee780b59d596535e697db237a3af3aa019b2f7",
    "testharness"
   ],
   "pointerevents/extension/pointerevent_coalesced_events_attributes-manual.html": [
    "f0393e603c25eb52d5144c95e808f2ab96cbe1f7",
    "manual"
   ],
   "pointerevents/extension/pointerevent_constructor.html": [
    "11d5baa9206313270be6289205b002b623af85db",
@@ -584893,17 +584893,17 @@
    "f3188cc408b651f05ad946768c8233d0f7586b38",
    "testharness"
   ],
   "pointerevents/html/pointerevent_drag_interaction-manual.html": [
    "1eb570dbed48373f9e840b7694b774448b689879",
    "manual"
   ],
   "pointerevents/idlharness.html": [
-   "7db1757e519a8ebb9123dd150f17bf5c6f23e311",
+   "ee6982f1735711a9ac3c8c3a1447eb96f8e8d61c",
    "testharness"
   ],
   "pointerevents/pointerevent_attributes_hoverable_pointers-manual.html": [
    "9a71336042a931e45c7aef0e031669c26ac5c36c",
    "manual"
   ],
   "pointerevents/pointerevent_attributes_nohover_pointers-manual.html": [
    "b010a8ff22c0522c8bbd5332e5d4ff8f1032a766",
@@ -593213,17 +593213,17 @@
    "d61b27d43d1f01f4964be312ad38f249bc89c05e",
    "testharness"
   ],
   "remote-playback/disable-remote-playback-watch-availability-throws.html": [
    "2779fd2a3bd27a011e8ba20dd6fb214978d8a54c",
    "testharness"
   ],
   "remote-playback/idlharness.html": [
-   "70cfb1603b69e1daff48682cf41e746221158a55",
+   "5a780e9fcdc2215b4f5fb9d81347ef804ed88f71",
    "testharness"
   ],
   "remote-playback/watch-availability-initial-callback.html": [
    "3d220a3cc0e6a05fbc40c0ab0e46a2e60162b2be",
    "testharness"
   ],
   "requestidlecallback/OWNERS": [
    "84f418b8b821f1498bf87feaaf1f07de77720a4e",
@@ -595257,17 +595257,17 @@
    "dda1a1967e6e0be64b9bd2198a08aa0429e185ff",
    "testharness"
   ],
   "service-workers/service-worker/interfaces-sw.https.html": [
    "c6ea8c330c7886581ba57314cc65a707b25b44f3",
    "testharness"
   ],
   "service-workers/service-worker/interfaces-window.https.html": [
-   "5c604b248656dae755f0b4107c6ab4f19f3e5c08",
+   "10b0dbc64783f88e5d990a1fdab35d06416d6f86",
    "testharness"
   ],
   "service-workers/service-worker/invalid-blobtype.https.html": [
    "e2867d9813601fffbe2f8ea3827430015e0c4444",
    "testharness"
   ],
   "service-workers/service-worker/invalid-header.https.html": [
    "5cc3f2c872435df9c735390426a6cf8b4b788fb0",
@@ -596093,17 +596093,17 @@
    "fd486a19472f142bbd2909929a67ac3d39adc845",
    "support"
   ],
   "service-workers/service-worker/resources/interfaces-idls.js": [
    "2d3ae3bdd1be17a2871aa3af2009daaacf43d3db",
    "support"
   ],
   "service-workers/service-worker/resources/interfaces-worker.sub.js": [
-   "1e30c1df9970486b5dea379f2430a871d5f270ed",
+   "1b783078b34532a0f8236a964e77eb1f5836af6a",
    "support"
   ],
   "service-workers/service-worker/resources/invalid-blobtype-iframe.https.html": [
    "b491adf190bf4d891dfc613c10e3a05b8852969d",
    "support"
   ],
   "service-workers/service-worker/resources/invalid-blobtype-worker.js": [
    "af9e165e70fe3cb06eaae6a22d26370d8e368c26",
@@ -603981,17 +603981,17 @@
    "230684ec60fd2e408f9b6014417f3eddfe2dc95a",
    "support"
   ],
   "webaudio/historical.html": [
    "93068df297042344669093ce899f0230c87ebf54",
    "testharness"
   ],
   "webaudio/idlharness.https.html": [
-   "2951a126a8b168e6fe4699890d5a3c4772c7f960",
+   "9863249e71e4855b50c1712c3155d2d4a05fa1fe",
    "testharness"
   ],
   "webaudio/js/buffer-loader.js": [
    "4d564eae0b3d7d1045626d1f144cd2638dba64e5",
    "support"
   ],
   "webaudio/js/helpers.js": [
    "3cb468605c1fa8e5005bc8552b15f7a37ee9b935",
@@ -604341,17 +604341,17 @@
    "6f7c363e610fe141458b77d3ca7ec69bca8012a6",
    "testharness"
   ],
   "webaudio/the-audio-api/the-delaynode-interface/delaynode.html": [
    "622ca5f882644f183674cc07e55a69e63e5c85d9",
    "testharness"
   ],
   "webaudio/the-audio-api/the-delaynode-interface/idl-test.html": [
-   "8507a293b696d2d3fc51b429864373606a75eeb6",
+   "4f75f58d7286231e48236d1736e5739b8007502e",
    "testharness"
   ],
   "webaudio/the-audio-api/the-delaynode-interface/no-dezippering.html": [
    "96b405fd00ee657194de348ea46b263ba43f98a4",
    "testharness"
   ],
   "webaudio/the-audio-api/the-dynamicscompressornode-interface/.gitkeep": [
    "da39a3ee5e6b4b0d3255bfef95601890afd80709",
@@ -604373,17 +604373,17 @@
    "823f7ae1a5f5eb0c630e7d1881c50a1f710f9350",
    "support"
   ],
   "webaudio/the-audio-api/the-gainnode-interface/gain.html": [
    "5f50c22eaa77f09d0fa8c6f6f5249fdbf7db4b24",
    "testharness"
   ],
   "webaudio/the-audio-api/the-gainnode-interface/idl-test.html": [
-   "30843d3b74e8ec33bedd849f3f2b1bbd4bcc9f5e",
+   "a2abc80981a4f6ec810850150cdcd149854daf4b",
    "testharness"
   ],
   "webaudio/the-audio-api/the-gainnode-interface/no-dezippering.html": [
    "2205ec8f56472bd45e102cf57f10b4532b18a554",
    "testharness"
   ],
   "webaudio/the-audio-api/the-gainnode-interface/test-gainnode.html": [
    "bf2de43e568c79b96fd5b0602e26346c483162a5",
@@ -604593,17 +604593,17 @@
    "b8c71a3fccdf39c2e35bd34a3cd42561cac5836b",
    "testharness"
   ],
   "webauthn/helpers.js": [
    "9ce729fb89ba1863fb14dfc4d567e6b544a5238d",
    "support"
   ],
   "webauthn/interfaces.https.any.js": [
-   "bc3e3c5a85f068efa88c4ed256cc2d270c8eca0f",
+   "3ca7a0855f38bf8d0250d0a352dd60c2ee6515fa",
    "testharness"
   ],
   "webauthn/securecontext.http.html": [
    "7abf48e74debed79578e39934d1b84655731a3ea",
    "testharness"
   ],
   "webauthn/securecontext.https.html": [
    "9bdd7e09c7f468b9b0c106d4764d61e77b32131f",
@@ -606877,17 +606877,17 @@
    "b352ab9e9bc5252c52c25e6fb14aa4b48e9fd690",
    "testharness"
   ],
   "webstorage/event_setattribute.js": [
    "6ba7d14a894e782495d818e43f4b0901607c207e",
    "support"
   ],
   "webstorage/idlharness.html": [
-   "e57413a1868e8d84ba7c500ff13b7e68675cbe66",
+   "cb4ee5af9381129c483e97925eab309cc41a2fa0",
    "testharness"
   ],
   "webstorage/missing_arguments.html": [
    "29e44745364a7423f5aeb64c25cf76d66b54390c",
    "testharness"
   ],
   "webstorage/resources/event_body_handler.html": [
    "45941f5d14f1f34a693d23e251d9a6b195830656",
--- a/testing/web-platform/tests/accelerometer/idlharness.https.html
+++ b/testing/web-platform/tests/accelerometer/idlharness.https.html
@@ -10,17 +10,17 @@
 <script src="/resources/idlharness.js"></script>
 <script>
 "use strict";
 
 function doTest([dom, generic_sensor, accelerometer]) {
   const idl_array = new IdlArray();
   idl_array.add_untested_idls(dom);
   idl_array.add_untested_idls('interface EventHandler {};');
-  idl_array.add_idls(generic_sensor, { only: ['Sensor'] });
+  idl_array.add_idls(generic_sensor, { only: ['Sensor', 'SensorOptions'] });
   idl_array.add_idls(accelerometer);
   idl_array.add_objects({
     Accelerometer: ['new Accelerometer();'],
     LinearAccelerationSensor: ['new LinearAccelerationSensor();'],
     GravitySensor: ['new GravitySensor();']
   });
   idl_array.test();
 }
--- a/testing/web-platform/tests/background-fetch/interfaces.html
+++ b/testing/web-platform/tests/background-fetch/interfaces.html
@@ -7,20 +7,22 @@
 <script src="/resources/idlharness.js"></script>
 
 <h1>idlharness test</h1>
 <p>This test validates the WebIDL included in the Background Fetch API (Documents).</p>
 
 <script>
 'use strict';
 
-promise_test(function() {
-  return fetch('/interfaces/background-fetch.idl')
-    .then(response => response.text())
-    .then(idls => {
-      var idlArray = new IdlArray();
-      idlArray.add_untested_idls('interface ServiceWorkerRegistration {};');
-      idlArray.add_untested_idls('[Exposed=ServiceWorker] interface ServiceWorkerGlobalScope {};');
-      idlArray.add_idls(idls);
-      idlArray.test();
-    });
+promise_test(async function () {
+  const idls = await fetch('/interfaces/background-fetch.idl').then(r => r.text());
+  const dom = await fetch('/interfaces/dom.idl').then(r => r.text());
+
+  var idlArray = new IdlArray();
+  idlArray.add_untested_idls('interface ServiceWorkerRegistration {};');
+  idlArray.add_untested_idls('[Exposed=ServiceWorker] interface ServiceWorkerGlobalScope {};');
+  idlArray.add_untested_idls('interface ExtendableEvent{};');
+  idlArray.add_untested_idls('dictionary ExtendableEventInit{};');
+  idlArray.add_untested_idls(dom, { only: ['EventTarget'] });
+  idlArray.add_idls(idls);
+  idlArray.test();
 }, 'Exposed interfaces in a Document.');
 </script>
--- a/testing/web-platform/tests/background-fetch/interfaces.worker.js
+++ b/testing/web-platform/tests/background-fetch/interfaces.worker.js
@@ -1,18 +1,20 @@
 'use strict';
 
 importScripts('/resources/testharness.js');
 importScripts('/resources/WebIDLParser.js', '/resources/idlharness.js');
 
-promise_test(function() {
-  return fetch('/interfaces/background-fetch.idl')
-    .then(response => response.text())
-    .then(idls => {
-      var idlArray = new IdlArray();
-      idlArray.add_untested_idls('interface ServiceWorkerRegistration {};');
-      idlArray.add_untested_idls('[Exposed=ServiceWorker] interface ServiceWorkerGlobalScope {};');
-      idlArray.add_idls(idls);
-      idlArray.test();
-    });
+promise_test(async function() {
+  const idls = await fetch('/interfaces/background-fetch.idl').then(r => r.text());
+  const dom = await fetch('/interfaces/dom.idl').then(r => r.text());
+
+  var idlArray = new IdlArray();
+  idlArray.add_untested_idls('interface ServiceWorkerRegistration {};');
+  idlArray.add_untested_idls('[Exposed=ServiceWorker] interface ServiceWorkerGlobalScope {};');
+  idlArray.add_untested_idls('interface ExtendableEvent{};');
+  idlArray.add_untested_idls('dictionary ExtendableEventInit{};');
+  idlArray.add_untested_idls(dom, { only: ['EventTarget'] });
+  idlArray.add_idls(idls);
+  idlArray.test();
 }, 'Exposed interfaces in a Service Worker.');
 
 done();
--- a/testing/web-platform/tests/clipboard-apis/async-interfaces.https.html
+++ b/testing/web-platform/tests/clipboard-apis/async-interfaces.https.html
@@ -4,32 +4,36 @@
 <link rel="help" href="https://w3c.github.io/clipboard-apis/">
 <script src=/resources/testharness.js></script>
 <script src=/resources/testharnessreport.js></script>
 <script src=/resources/WebIDLParser.js></script>
 <script src=/resources/idlharness.js></script>
 <script>
 'use strict';
 
-function doTest(idls) {
+function doTest(idl, dom) {
   var idl_array = new IdlArray();
   idl_array.add_untested_idls('interface Navigator {};');
   idl_array.add_untested_idls('interface EventTarget {};');
-  for (let idl of idls) {
-    idl_array.add_idls(idl);
-  }
+  idl_array.add_untested_idls('dictionary PermissionDescriptor {};');
+  idl_array.add_untested_idls(dom, { only: ['Event', 'EventInit'] });
+  idl_array.add_idls(idl);
   idl_array.add_objects({
     Navigator: ['navigator'],
     Clipboard: ['navigator.clipboard'],
     ClipboardEvent: ['new ClipboardEvent("x")'],
   });
   idl_array.test();
 };
 
 function fetchText(url) {
   return fetch(url).then((response) => response.text());
 }
 
 promise_test(() => {
-  return Promise.all(["/interfaces/clipboard-apis.idl"].map(fetchText))
-    .then(doTest);
+  return Promise.all(
+    [
+      "/interfaces/clipboard-apis.idl",
+      "/interfaces/dom.idl",
+    ].map(fetchText))
+    .then(([idl, dom]) => doTest(idl, dom));
 }, "Test driver");
 </script>
--- a/testing/web-platform/tests/content-security-policy/securitypolicyviolation/idl.html
+++ b/testing/web-platform/tests/content-security-policy/securitypolicyviolation/idl.html
@@ -16,19 +16,16 @@
       DOMString      effectiveDirective;
       DOMString      originalPolicy;
       DOMString      sourceFile;
       SecurityPolicyViolationEventDisposition      disposition;
       unsigned short statusCode;
       long           lineNumber;
       long           columnNumber;
   };
-
-  interface Event {
-  };
 </script>
 <script type="text/plain" id="tested">
   [Constructor(DOMString type, optional SecurityPolicyViolationEventInit eventInitDict)]
   interface SecurityPolicyViolationEvent : Event {
       readonly    attribute DOMString      documentURI;
       readonly    attribute DOMString      referrer;
       readonly    attribute DOMString      blockedURI;
       readonly    attribute DOMString      violatedDirective;
@@ -37,16 +34,21 @@
       readonly    attribute DOMString      sourceFile;
       readonly    attribute SecurityPolicyViolationEventDisposition      disposition;
       readonly    attribute unsigned short statusCode;
       readonly    attribute long           lineNumber;
       readonly    attribute long           columnNumber;
   };
 </script>
 <script>
+  promise_test(async function() {
+    let dom = await fetch('/interfaces/dom.idl').then(r => r.text());
+
     var idl_array = new IdlArray();
     idl_array.add_untested_idls(document.querySelector('#untested').textContent);
+    idl_array.add_untested_idls(dom, { only: ['Event', 'EventInit'] });
     idl_array.add_idls(document.querySelector('#tested').textContent);
     idl_array.add_objects({
-      SecurityPolicyViolationEvent: ['new SecurityPolicyViolationEvent({})']      
+      SecurityPolicyViolationEvent: ['new SecurityPolicyViolationEvent({})']
     });
     idl_array.test();
+  })
 </script>
--- a/testing/web-platform/tests/cookie-store/idlharness.tentative.html
+++ b/testing/web-platform/tests/cookie-store/idlharness.tentative.html
@@ -5,31 +5,48 @@
 <script src="/resources/testharness.js"></script>
 <script src="/resources/testharnessreport.js"></script>
 <script src="/resources/WebIDLParser.js"></script>
 <script src="/resources/idlharness.js"></script>
 <script>
 'use strict';
 
 promise_test(async t => {
-  const urls = ['/interfaces/html.idl', '/interfaces/cookie-store.idl'];
-  const [html, cookie_store] = await Promise.all(
-    urls.map(url => fetch(url).then(response => response.text())));
+  const urls = [
+    '/interfaces/uievents.idl',
+    '/interfaces/dom.idl',
+    '/interfaces/html.idl',
+    '/interfaces/cookie-store.idl'
+  ];
+  const [uievents, dom, html, cookie_store] = await Promise.all(
+    urls.map(url => fetch(url).then(r => r.text())));
 
   const idl_array = new IdlArray();
 
   // Dependencies of HTML
+  idl_array.add_untested_idls(dom, { only: [
+    'Event',
+    'EventInit',
+    'EventTarget',
+    'HTMLCollection',
+    'NodeList',
+  ] });
   idl_array.add_untested_idls('interface Document {};');
+  idl_array.add_untested_idls('interface Element {};');
   idl_array.add_untested_idls('interface LinkStyle {};');
   idl_array.add_untested_idls('interface SVGElement {};');
   idl_array.add_untested_idls(html);
+  idl_array.add_untested_idls(uievents, { only: [
+    'UIEvent',
+    'UIEventInit',
+    'MouseEvent',
+    'MouseEventInit',
+    'EventModifierInit',
+  ] });
 
-  idl_array.add_untested_idls('interface Event {};');
-  idl_array.add_untested_idls('dictionary EventInit {};');
-  idl_array.add_untested_idls('interface EventTarget {};');
   idl_array.add_untested_idls(
     `[Global=ServiceWorker, Exposed=ServiceWorker]
      interface ServiceWorkerGlobalScope {};`);
 
   idl_array.add_idls(cookie_store);
 
   idl_array.add_objects({
     CookieStore: [self.cookieStore],
--- a/testing/web-platform/tests/css/cssom-view/interfaces.html
+++ b/testing/web-platform/tests/css/cssom-view/interfaces.html
@@ -12,21 +12,22 @@
 <input id="caretPositionInput" style="position: absolute; top: 0; left: 0; border: 0;">
 
 <h1>CSSOM View IDL tests</h1>
 <div id=log></div>
 
 <script>
 "use strict";
 
-function doTest([html, dom, cssom, geometry, cssom_view]) {
+function doTest([html, dom, uievents, cssom, geometry, cssom_view]) {
 
   var idlArray = new IdlArray();
   var svg = "interface SVGElement : Element {};";
   idlArray.add_untested_idls(html + dom + svg + cssom + geometry);
+  idlArray.add_untested_idls(uievents, { only: ['UIEvent', 'UIEventInit', 'MouseEvent', 'MouseEventInit', 'EventModifierInit'] });
   idlArray.add_idls(cssom_view);
 
   idlArray.add_objects({
     "Window": ["window"],
     "MediaQueryList": ["matchMedia('all')"],
     "MediaQueryListEvent": ["new MediaQueryListEvent('change')"],
     "Screen": ["screen"],
     "Document": ["document"],
@@ -52,16 +53,17 @@ function waitForLoad() {
     addEventListener("load", resolve);
   });
 }
 
 promise_test(function() {
   // Have to wait for onload
   return Promise.all([fetchData("/interfaces/html.idl"),
                       fetchData("/interfaces/dom.idl"),
+                      fetchData("/interfaces/uievents.idl"),
                       fetchData("/interfaces/cssom.idl"),
                       fetchData("/interfaces/geometry.idl"),
                       fetchData("/interfaces/cssom-view.idl"),
                       waitForLoad()])
                 .then(doTest);
 }, "Test driver");
 
 </script>
--- a/testing/web-platform/tests/css/cssom/interfaces.html
+++ b/testing/web-platform/tests/css/cssom/interfaces.html
@@ -26,24 +26,25 @@ Use a non-empty style attribute to get a
 
 <h1>CSSOM IDL tests</h1>
 <div id=log></div>
 
 <script>
 "use strict";
 var style_element, svg_element, xmlss_pi;
 
-function doTest([html, dom, cssom]) {
+function doTest([html, dom, uievents, cssom]) {
   style_element = document.getElementById('styleElement');
   svg_element = document.getElementById('svgElement');
   xmlss_pi = document.getElementById('xmlssPiIframe').contentDocument.firstChild;
 
   var idlArray = new IdlArray();
   var svg = "interface SVGElement : Element {};";
   idlArray.add_untested_idls(html + dom + svg);
+  idlArray.add_untested_idls(uievents, { only: ['UIEvent', 'UIEventInit', 'MouseEvent', 'MouseEventInit', 'EventModifierInit']});
   idlArray.add_idls(cssom);
 
   idlArray.add_objects({
     "Document": ["document", "new Document()"],
     "StyleSheetList": ["document.styleSheets"],
     "CSSStyleSheet": ["style_element.sheet"],
     "MediaList": ["style_element.sheet.media"],
     "CSSRuleList": ["style_element.sheet.cssRules"],
@@ -76,14 +77,15 @@ function waitForLoad() {
     addEventListener("load", resolve);
   });
 }
 
 promise_test(function() {
   // Have to wait for onload
   return Promise.all([fetchData("/interfaces/html.idl"),
                       fetchData("/interfaces/dom.idl"),
+                      fetchData("/interfaces/uievents.idl"),
                       fetchData("/interfaces/cssom.idl"),
                       waitForLoad()])
                 .then(doTest);
 }, "Test driver");
 
 </script>
--- a/testing/web-platform/tests/encrypted-media/idlharness.https.html
+++ b/testing/web-platform/tests/encrypted-media/idlharness.https.html
@@ -28,16 +28,17 @@
                 return response.text();
             } )
             .then( function( idls ) {
 
                 var idl_array = new IdlArray();
                 idl_array.add_untested_idls("interface Navigator {};");
                 idl_array.add_untested_idls("interface HTMLMediaElement {};");
                 idl_array.add_untested_idls("interface Event {};");
+                idl_array.add_untested_idls("dictionary EventInit {};");
                 idl_array.add_untested_idls("interface EventTarget {};");
 
                 idl_array.add_idls(idls);
 
                 idl_array.test();
 
                 done();
 
--- a/testing/web-platform/tests/gamepad/idlharness.html
+++ b/testing/web-platform/tests/gamepad/idlharness.html
@@ -9,18 +9,19 @@
 <script src="/resources/WebIDLParser.js"></script>
 <script src="/resources/idlharness.js"></script>
 <script>
 "use strict";
 
 promise_test(async () => {
   const idl_array = new IdlArray();
   const gamepad_idl = await fetch("/interfaces/gamepad.idl").then(r => r.text());
+  const dom = await fetch("/interfaces/dom.idl").then(r => r.text());
 
-  idl_array.add_untested_idls('interface Event {};');
+  idl_array.add_untested_idls(dom, {only: ['Event', 'EventInit']});
   idl_array.add_untested_idls('interface Navigator {};');
   idl_array.add_idls(gamepad_idl);
 
   idl_array.add_objects({
     GamepadEvent: [new GamepadEvent("something")],
     Navigator: ["navigator"]
   });
   idl_array.test();
--- a/testing/web-platform/tests/geolocation-sensor/idlharness.https.html
+++ b/testing/web-platform/tests/geolocation-sensor/idlharness.https.html
@@ -9,17 +9,17 @@
 <script src="/resources/idlharness.js"></script>
 <script>
 "use strict";
 
 function doTest([generic_sensor, geolocation_sensor]) {
   const idl_array = new IdlArray();
   idl_array.add_untested_idls('interface EventTarget {};');
   idl_array.add_untested_idls('interface EventHandler {};');
-  idl_array.add_idls(generic_sensor, { only: ['Sensor'] });
+  idl_array.add_idls(generic_sensor, { only: ['Sensor', 'SensorOptions'] });
   idl_array.add_idls(geolocation_sensor);
   idl_array.add_objects({
     GeolocationSensor: ['new GeolocationSensor'],
   });
   idl_array.test();
 }
 
 function fetchText(url) {
--- a/testing/web-platform/tests/gyroscope/idlharness.https.html
+++ b/testing/web-platform/tests/gyroscope/idlharness.https.html
@@ -10,17 +10,17 @@
 <script src="/resources/idlharness.js"></script>
 <script>
 "use strict";
 
 function doTest([dom, generic_sensor, gyroscope]) {
   const idl_array = new IdlArray();
   idl_array.add_untested_idls(dom);
   idl_array.add_untested_idls('interface EventHandler {};');
-  idl_array.add_idls(generic_sensor, { only: ['Sensor'] });
+  idl_array.add_idls(generic_sensor, { only: ['Sensor', 'SensorOptions'] });
   idl_array.add_idls(gyroscope);
   idl_array.add_objects({
     Gyroscope: ['new Gyroscope();']
   });
   idl_array.test();
 }
 
 function fetchText(url) {
--- a/testing/web-platform/tests/hr-time/idlharness.html
+++ b/testing/web-platform/tests/hr-time/idlharness.html
@@ -11,31 +11,33 @@
 <script src="/resources/idlharness.js"></script>
 </head>
 <body>
 <h1>High Resolution Time IDL tests</h1>
 <div id="log"></div>
 <script>
 'use strict';
 
-function doTest([html, hr_time]) {
+function doTest([dom, html, hr_time]) {
   var idl_array = new IdlArray();
+  idl_array.add_untested_idls(dom, { only: ['EventTarget'] });
   idl_array.add_untested_idls(html, { only: ['WindowOrWorkerGlobalScope'] });
   idl_array.add_idls(hr_time);
   idl_array.add_objects({
     Performance: ["window.performance"],
     Window: ["window"],
   });
   idl_array.test();
 }
 
 function fetchText(url) {
   return fetch(url).then((response) => response.text());
 }
 
 promise_test(() => {
-  return Promise.all(['/interfaces/html.idl',
+  return Promise.all(['/interfaces/dom.idl',
+                      '/interfaces/html.idl',
                       '/interfaces/hr-time.idl'].map(fetchText))
                 .then(doTest);
 }, 'Test driver');
 </script>
 </body>
 </html>
--- a/testing/web-platform/tests/magnetometer/idlharness.https.html
+++ b/testing/web-platform/tests/magnetometer/idlharness.https.html
@@ -10,17 +10,17 @@
 <script src="/resources/idlharness.js"></script>
 <script>
 "use strict";
 
 function doTest([dom, generic_sensor, magnetometer]) {
   const idl_array = new IdlArray();
   idl_array.add_untested_idls(dom);
   idl_array.add_untested_idls('interface EventHandler {};');
-  idl_array.add_idls(generic_sensor, { only: ['Sensor'] });
+  idl_array.add_idls(generic_sensor, { only: ['Sensor', 'SensorOptions'] });
   idl_array.add_idls(magnetometer);
   idl_array.add_objects({
     Magnetometer: ['new Magnetometer();'],
     UncalibratedMagnetometer: ['new UncalibratedMagnetometer();']
   });
   idl_array.test();
 }
 
--- a/testing/web-platform/tests/mediacapture-record/idlharness.html
+++ b/testing/web-platform/tests/mediacapture-record/idlharness.html
@@ -75,25 +75,30 @@
 
     [Exposed=Window, Constructor(DOMString type, MediaRecorderErrorEventInit eventInitDict)]
     interface MediaRecorderErrorEvent : Event {
       [SameObject] readonly attribute DOMException error;
     };
 
   </pre>
   <script>
-    var canvas = document.getElementById('canvas');
-    var context = canvas.getContext("2d");
-    context.fillStyle = "red";
-    context.fillRect(0, 0, 10, 10);
-    var stream = canvas.captureStream();
+    promise_test(async function() {
+      const dom = await fetch('/interfaces/dom.idl').then(r => r.text());
+
+      var canvas = document.getElementById('canvas');
+      var context = canvas.getContext("2d");
+      context.fillStyle = "red";
+      context.fillRect(0, 0, 10, 10);
+      var stream = canvas.captureStream();
 
-    var idl_array = new IdlArray();
-    idl_array.add_untested_idls(document.getElementById("untested_idl").textContent);
-    idl_array.add_idls(document.getElementById("idl").textContent);
-    idl_array.add_objects({
-        MediaRecorder: [new MediaRecorder(stream)],
-      });
-    idl_array.test();
+      var idl_array = new IdlArray();
+      idl_array.add_untested_idls(dom, { only: ['EventInit'] });
+      idl_array.add_untested_idls(document.getElementById("untested_idl").textContent);
+      idl_array.add_idls(document.getElementById("idl").textContent);
+      idl_array.add_objects({
+          MediaRecorder: [new MediaRecorder(stream)],
+        });
+      idl_array.test();
+    }, 'mediacapture-record interfaces');
   </script>
   <div id="log"></div>
 </body>
 </html>
--- a/testing/web-platform/tests/mediacapture-streams/MediaDevices-IDL-all.html
+++ b/testing/web-platform/tests/mediacapture-streams/MediaDevices-IDL-all.html
@@ -14,32 +14,35 @@
     <div id='log'></div>
     <script src=/resources/testharness.js></script>
     <script src=/resources/testharnessreport.js></script>
     <script src=/resources/WebIDLParser.js></script>
     <script src=/resources/idlharness.js></script>
     <script>
       'use strict';
 
-      function doIdlTest(idlText) {
+      function doIdlTest([dom, idlText]) {
         var idl_array = new IdlArray();
 
         // dummies
+        idl_array.add_untested_idls(dom, { only: ['Event', 'EventInit']});
         idl_array.add_untested_idls("interface Navigator {};");
         idl_array.add_untested_idls("interface EventTarget {};");
         idl_array.add_untested_idls("interface EventHandler {};");
 
         idl_array.add_idls(idlText);
 
         idl_array.add_objects({"Navigator": ["navigator"]});
         idl_array.add_objects({"MediaDevices":["navigator.mediaDevices"]});
         idl_array.test();
       }
 
       promise_test(() => {
-        return fetch('/interfaces/mediacapture-main.idl')
-          .then(response => response.text())
-          .then(doIdlTest);
-
+        return Promise.all(
+          [
+            '/interfaces/dom.idl',
+            '/interfaces/mediacapture-main.idl',
+          ].map(url => fetch(url).then(r => r.text())))
+            .then(doIdlTest);
       }, 'Test driver')
     </script>
   </body>
 </html>
--- a/testing/web-platform/tests/mediacapture-streams/MediaDevices-IDL-enumerateDevices.html
+++ b/testing/web-platform/tests/mediacapture-streams/MediaDevices-IDL-enumerateDevices.html
@@ -15,20 +15,20 @@
 <div id='log'></div>
 <script src=/resources/testharness.js></script>
 <script src=/resources/testharnessreport.js></script>
 <script src=/resources/WebIDLParser.js></script>
 <script src=/resources/idlharness.js></script>
 <script>
   "use strict";
 
-  function doIdlTest(idlText) {
+  function doIdlTest([dom, idlText]) {
     const MDI_idl = new IdlArray();
 
-    MDI_idl.add_untested_idls("interface Event {};");
+    MDI_idl.add_untested_idls(dom, { only: ['Event', 'EventInit'] });
     MDI_idl.add_untested_idls("interface EventTarget {};");
     MDI_idl.add_untested_idls("interface Navigator {};");
     MDI_idl.add_idls(idlText);
 
     assert_true(undefined !== navigator.mediaDevices.enumerateDevices,
       "navigator.mediaDevices.enumerateDevices exists");
 
     return navigator.mediaDevices.enumerateDevices()
@@ -54,16 +54,19 @@
         }
       }
 
       MDI_idl.test();
     });
   }
 
   promise_test(() => {
-    return fetch('/interfaces/mediacapture-main.idl')
-      .then(response => response.text())
+      return Promise.all(
+        [
+          '/interfaces/dom.idl',
+          '/interfaces/mediacapture-main.idl',
+        ].map(url => fetch(url).then(r => r.text())))
       .then(doIdlTest);
 
   }, "Test MediaDevices.enumerateDevices call and result. Types only.");
 </script>
 </body>
 </html>
--- a/testing/web-platform/tests/navigation-timing/nav2_idlharness.html
+++ b/testing/web-platform/tests/navigation-timing/nav2_idlharness.html
@@ -27,16 +27,17 @@ interface PerformanceResourceTiming : Pe
     readonly attribute DOMHighResTimeStamp secureConnectionStart;
     readonly attribute DOMHighResTimeStamp requestStart;
     readonly attribute DOMHighResTimeStamp responseStart;
     readonly attribute DOMHighResTimeStamp responseEnd;
     [MeasureAs=PerformanceResourceTimingSizes] readonly attribute unsigned long long transferSize;
     [MeasureAs=PerformanceResourceTimingSizes] readonly attribute unsigned long long encodedBodySize;
     [MeasureAs=PerformanceResourceTimingSizes] readonly attribute unsigned long long decodedBodySize;
 };
+interface PerformanceEntry {};
 </pre>
 
 <pre id='idl'>
 enum NavigationType {
     "navigate",
     "reload",
     "back_forward",
     "prerender"
--- a/testing/web-platform/tests/orientation-sensor/idlharness.https.html
+++ b/testing/web-platform/tests/orientation-sensor/idlharness.https.html
@@ -10,17 +10,17 @@
 <script src="/resources/idlharness.js"></script>
 <script>
 "use strict";
 
 function doTest([dom, generic_sensor, orientation_sensor]) {
   const idl_array = new IdlArray();
   idl_array.add_untested_idls(dom);
   idl_array.add_untested_idls('interface EventHandler {};');
-  idl_array.add_idls(generic_sensor, { only: ['Sensor'] });
+  idl_array.add_idls(generic_sensor, { only: ['Sensor', 'SensorOptions'] });
   idl_array.add_idls(orientation_sensor);
   idl_array.add_objects({
     AbsoluteOrientationSensor: ['new AbsoluteOrientationSensor();'],
     RelativeOrientationSensor: ['new RelativeOrientationSensor();']
   });
   idl_array.test();
 }
 
--- a/testing/web-platform/tests/payment-handler/interfaces.https.any.js
+++ b/testing/web-platform/tests/payment-handler/interfaces.https.any.js
@@ -1,16 +1,16 @@
 // META: script=/resources/WebIDLParser.js
 // META: script=/resources/idlharness.js
 
 'use strict';
 
 // https://w3c.github.io/payment-handler/
 
 promise_test(async () => {
-  const text = await fetch('/interfaces/payment-handler.idl').then(response =>
-    response.text(),
-  );
+  const idl = await fetch('/interfaces/payment-handler.idl').then(r => r.text());
   const idlArray = new IdlArray();
-  idlArray.add_idls(text);
+  idlArray.add_idls(idl);
+  idlArray.add_untested_idls('interface ExtendableEvent {};');
+  idlArray.add_untested_idls('dictionary ExtendableEventInit {};');
   idlArray.test();
   done();
 }, 'Payment handler interfaces.');
--- a/testing/web-platform/tests/pointerevents/extension/idlharness.html
+++ b/testing/web-platform/tests/pointerevents/extension/idlharness.html
@@ -43,13 +43,20 @@ dictionary PointerEventInit : MouseEvent
 
 [Constructor(DOMString type, optional PointerEventInit eventInitDict)]
 interface PointerEvent : MouseEvent {
     sequence<PointerEvent> getCoalescedEvents();
 };
 
 </pre>
 <script>
+promise_test(async function () {
+  const dom = await fetch('/interfaces/dom.idl').then(r => r.text());
+  const uievents = await fetch('/interfaces/uievents.idl').then(r => r.text());
+
   var idl_array = new IdlArray();
+  idl_array.add_untested_idls(dom, { only: ['EventInit'] });
+  idl_array.add_untested_idls(uievents, { only: ['UIEventInit', 'MouseEventInit', 'EventModifierInit'] });
   idl_array.add_untested_idls(document.getElementById("untested_idl").textContent);
   idl_array.add_idls(document.getElementById("idl").textContent);
   idl_array.test();
+}, 'pointerevents extension interfaces');
 </script>
--- a/testing/web-platform/tests/pointerevents/idlharness.html
+++ b/testing/web-platform/tests/pointerevents/idlharness.html
@@ -86,19 +86,26 @@ partial interface GlobalEventHandlers {
     attribute EventHandler onpointerleave;
 };
 
 partial interface Navigator {
     readonly attribute long maxTouchPoints;
 };
 </pre>
 <script>
-  var idl_array = new IdlArray();
-  idl_array.add_untested_idls(document.getElementById("untested_idl").textContent);
-  idl_array.add_idls(document.getElementById("idl").textContent);
+  promise_test(async function() {
+    const dom = await fetch('/interfaces/dom.idl').then(r => r.text());
+    const uievents = await fetch('/interfaces/uievents.idl').then(r => r.text());
 
-  // Note that I don't bother including Document here because there are still
-  // a bunch of differences between browsers around Document vs HTMLDocument.
-  idl_array.add_objects({
+    var idl_array = new IdlArray();
+    idl_array.add_untested_idls(dom, { only: ['EventInit'] });
+    idl_array.add_untested_idls(uievents, { only: ['UIEventInit', 'MouseEventInit', 'EventModifierInit'] });
+    idl_array.add_untested_idls(document.getElementById("untested_idl").textContent);
+    idl_array.add_idls(document.getElementById("idl").textContent);
+
+    // Note that I don't bother including Document here because there are still
+    // a bunch of differences between browsers around Document vs HTMLDocument.
+    idl_array.add_objects({
     Window: ["window"],
     Navigator: ["navigator"]});
-  idl_array.test();
+    idl_array.test();
+  }, 'pointerevents interfaces');
 </script>
--- a/testing/web-platform/tests/remote-playback/idlharness.html
+++ b/testing/web-platform/tests/remote-playback/idlharness.html
@@ -14,28 +14,40 @@
 <video id='media' width=10 height=10></video>
 <pre id='untested_idl' style='display:none'>
 interface EventHandler {};
 interface HTMLMediaElement : HTMLElement {};
 interface EventTarget {};
 </pre>
 <script>
 "use strict"
-var idl_array = new IdlArray();
-function doTest(idl) {
-  idl_array.add_untested_idls(document.getElementById("untested_idl").textContent);
-  idl_array.add_idls(idl);
-  idl_array.add_objects({
-    HTMLVideoElement: [document.getElementById("media")],
-    RemotePlayback: [document.getElementById("media").remote]
-  });
-  idl_array.test();
-}
 
-promise_test(function() {
-  return fetch("/interfaces/remoteplayback.idl")
-      .then(response => response.text())
+promise_test(async function() {
+  var idl_array = new IdlArray();
+  function doTest([html, idl]) {
+    idl_array.add_untested_idls('interface Element {};');
+    idl_array.add_untested_idls(html, { only: [
+      'HTMLElement',
+      'HTMLOrSVGElement',
+      'GlobalEventHandlers',
+      'DocumentAndElementEventHandlers',
+      'ElementContentEditable',
+    ] });
+    idl_array.add_untested_idls(document.getElementById("untested_idl").textContent);
+    idl_array.add_idls(idl);
+    idl_array.add_objects({
+      HTMLVideoElement: [document.getElementById("media")],
+      RemotePlayback: [document.getElementById("media").remote]
+    });
+    idl_array.test();
+  }
+
+  return Promise.all(
+    [
+      "/interfaces/html.idl",
+      "/interfaces/remoteplayback.idl",
+    ].map(url => fetch(url).then(r => r.text())))
       .then(doTest);
 }, "Test driver");
 </script>
 <div id="log"></div>
 </body>
 </html>
--- a/testing/web-platform/tests/resources/idlharness.js
+++ b/testing/web-platform/tests/resources/idlharness.js
@@ -678,16 +678,29 @@ IdlArray.prototype.test = function()
             this.members[rhs].members.forEach(function(member)
             {
                 this.members[lhs].members.push(new IdlInterfaceMember(member));
             }.bind(this));
         }.bind(this));
     }
     this["includes"] = {};
 
+    // Assert B defined for A : B
+    for (const member of Object.values(this.members).filter(m => m.base)) {
+        const lhs = member.name;
+        const rhs = member.base;
+        if (!(rhs in this.members)) throw new IdlHarnessError(`${lhs} inherits ${rhs}, but ${rhs} is undefined.`);
+        const lhs_is_interface = this.members[lhs] instanceof IdlInterface;
+        const rhs_is_interface = this.members[rhs] instanceof IdlInterface;
+        if (rhs_is_interface != lhs_is_interface) {
+            if (!lhs_is_interface) throw new IdlHarnessError(`${lhs} inherits ${rhs}, but ${lhs} is not an interface.`);
+            if (!rhs_is_interface) throw new IdlHarnessError(`${lhs} inherits ${rhs}, but ${rhs} is not an interface.`);
+        }
+    }
+
     Object.getOwnPropertyNames(this.members).forEach(function(memberName) {
         var member = this.members[memberName];
         if (!(member instanceof IdlInterface)) {
             return;
         }
 
         var globals = exposure_set(member, ["Window"]);
         member.exposed = exposed_in(globals);
--- a/testing/web-platform/tests/resources/test/tests/idlharness/IdlDictionary/get_inheritance_stack.html
+++ b/testing/web-platform/tests/resources/test/tests/idlharness/IdlDictionary/get_inheritance_stack.html
@@ -24,11 +24,24 @@
 
     test(function() {
         var idl = new IdlArray();
         idl.add_idls('dictionary A : B { };');
         idl.add_untested_idls('dictionary B : C { }; dictionary C { };');
         var A = idl.members["A"];
         assert_array_equals(A.get_inheritance_stack().map(d => d.name), ["A", "B", "C"]);
     }, 'should return an array of inherited dictionaries in order of inheritance, starting with itself.');
+
+    test(function () {
+      let i = new IdlArray();
+      i.add_untested_idls('dictionary A : B {};');
+      i.assert_throws(new IdlHarnessError('A inherits B, but B is undefined.'), i => i.test());
+    }, 'A : B with B undeclared should throw IdlHarnessError');
+
+    test(function () {
+      let i = new IdlArray();
+      i.add_untested_idls('dictionary A : B {};');
+      i.add_untested_idls('interface B {};');
+      i.assert_throws(new IdlHarnessError('A inherits B, but A is not an interface.'), i => i.test());
+    }, 'dictionary A : B with B interface should throw IdlHarnessError');
 </script>
 </body>
 </html>
new file mode 100644
--- /dev/null
+++ b/testing/web-platform/tests/resources/test/tests/idlharness/IdlInterface/test_primary_interface_of_undefined.html
@@ -0,0 +1,29 @@
+<!DOCTYPE HTML>
+<html>
+
+<head>
+  <title>idlharness test_primary_interface_of_undefined</title>
+</head>
+
+<body>
+  <script src="/resources/testharness.js"></script>
+  <script src="/resources/WebIDLParser.js"></script>
+  <script src="/resources/idlharness.js"></script>
+  <script>
+    'use strict';
+    test(function () {
+      let i = new IdlArray();
+      i.add_untested_idls('interface A : B {};');
+      i.assert_throws(new IdlHarnessError('A inherits B, but B is undefined.'), i => i.test());
+    }, 'A : B with B undeclared should throw IdlHarnessError');
+
+    test(function () {
+      let i = new IdlArray();
+      i.add_untested_idls('interface A : B {};');
+      i.add_untested_idls('dictionary B {};');
+      i.assert_throws(new IdlHarnessError('A inherits B, but B is not an interface.'), i => i.test());
+    }, 'interface A : B with B dictionary should throw IdlHarnessError');
+  </script>
+</body>
+
+</html>
--- a/testing/web-platform/tests/service-workers/service-worker/interfaces-window.https.html
+++ b/testing/web-platform/tests/service-workers/service-worker/interfaces-window.https.html
@@ -6,19 +6,21 @@
 <script src="/resources/idlharness.js"></script>
 <script src="resources/interfaces-idls.js"></script>
 <script src="resources/test-helpers.sub.js"></script>
 <script>
 'use strict';
 
 promise_test(async (t) => {
   var idlArray = new IdlArray();
-  let serviceWorkerIdl = await fetch('/interfaces/ServiceWorker.idl').then(r => r.text());
+  const dom = await fetch('/interfaces/dom.idl').then(r => r.text());
+  const serviceWorkerIdl = await fetch('/interfaces/ServiceWorker.idl').then(r => r.text());
 
   idlArray.add_untested_idls(idls.untested);
+  idlArray.add_untested_idls(dom, { only: ['EventTarget'] });
   idlArray.add_idls(serviceWorkerIdl, { only: [
     'ServiceWorkerGlobalScope',
     'Client',
     'WindowClient',
     'Clients',
     'ServiceWorker',
     'ServiceWorkerState',
     'ServiceWorkerUpdateViaCache',
--- a/testing/web-platform/tests/service-workers/service-worker/resources/interfaces-worker.sub.js
+++ b/testing/web-platform/tests/service-workers/service-worker/resources/interfaces-worker.sub.js
@@ -2,19 +2,21 @@
 
 importScripts('interfaces-idls.js');
 importScripts('worker-testharness.js');
 importScripts('/resources/WebIDLParser.js');
 importScripts('/resources/idlharness.js');
 
 promise_test(async (t) => {
   var idlArray = new IdlArray();
-  let serviceWorkerIdl = await fetch('/interfaces/ServiceWorker.idl').then(r => r.text());
+  const dom = await fetch('/interfaces/dom.idl').then(r => r.text());
+  const serviceWorkerIdl = await fetch('/interfaces/ServiceWorker.idl').then(r => r.text());
 
   idlArray.add_untested_idls(idls.untested);
+  idlArray.add_untested_idls(dom, { only: ['EventTarget'] });
   idlArray.add_idls(serviceWorkerIdl, { only: [
     'ServiceWorkerGlobalScope',
     'Client',
     'WindowClient',
     'Clients',
     'ServiceWorker',
     'ServiceWorkerState',
     'ServiceWorkerUpdateViaCache',
--- a/testing/web-platform/tests/webaudio/idlharness.https.html
+++ b/testing/web-platform/tests/webaudio/idlharness.https.html
@@ -5,35 +5,46 @@
 <script src="/resources/testharness.js"></script>
 <script src="/resources/testharnessreport.js"></script>
 <script src="/resources/WebIDLParser.js"></script>
 <script src="/resources/idlharness.js"></script>
 <script>
 'use strict';
 
 promise_test(async t => {
-  const [html, dom, mediacapture, webaudio] = await Promise.all([
+  const [html, dom, uievents, mediacapture, webaudio] = await Promise.all([
     // Needed for EventTarget, HTMLMediaElement
     '/interfaces/html.idl',
 
     // Needed for Event, EventListener
     '/interfaces/dom.idl',
 
+    // Needed for MouseEvent
+    '/interfaces/uievents.idl',
+
     // Needed for MediaStream, MediaStreamTrack
     '/interfaces/mediacapture-main.idl',
 
     '/interfaces/web-audio-api.idl'
   ].map(url => fetch(url).then(response => response.text())));
 
   const idl_array = new IdlArray();
 
   // Dependencies of HTML
   idl_array.add_untested_idls('interface LinkStyle {};');
   idl_array.add_untested_idls('interface SVGElement {};');
+  idl_array.add_untested_idls('interface WorkletGlobalScope {};');
   idl_array.add_untested_idls(html);
+  idl_array.add_untested_idls(uievents, { only: [
+    'MouseEvent',
+    'MouseEventInit',
+    'EventModifierInit',
+    'UIEvent',
+    'UIEventInit',
+  ]});
 
   idl_array.add_untested_idls(dom);
   idl_array.add_untested_idls(mediacapture);
   idl_array.add_untested_idls('interface Worklet {};');
 
   idl_array.add_idls(webaudio);
 
   const sample_rate = 44100;
--- a/testing/web-platform/tests/webaudio/the-audio-api/the-delaynode-interface/idl-test.html
+++ b/testing/web-platform/tests/webaudio/the-audio-api/the-delaynode-interface/idl-test.html
@@ -133,24 +133,27 @@ interface DelayNode : AudioNode {
 
     readonly attribute AudioParam delayTime;
 
 };</pre>
 
   <div id="log"></div>
 
   <script>
-(function() {
+promise_test(async function() {
+  const webAudioApi = await fetch('/interfaces/web-audio-api.idl').then(r => r.text());
+
   var idl_array = new IdlArray();
+  idl_array.add_untested_idls(webAudioApi, { only: ['AudioNodeOptions']});
   idl_array.add_untested_idls(document.getElementById("event-target-idl").textContent);
   idl_array.add_untested_idls(document.getElementById("base-audio-context-idl").textContent);
   idl_array.add_untested_idls(document.getElementById("audio-node-idl").textContent);
   idl_array.add_untested_idls(document.getElementById("audio-param-idl").textContent);
   idl_array.add_idls(document.getElementById("delay-node-idl").textContent);
 
   delay_node = (new AudioContext).createDelay();
 
   idl_array.add_objects({DelayNode: ["delay_node"]});
   idl_array.test();
-})();
+}, 'webaudio Delay interfaces');
   </script>
 </body>
 </html>
--- a/testing/web-platform/tests/webaudio/the-audio-api/the-gainnode-interface/idl-test.html
+++ b/testing/web-platform/tests/webaudio/the-audio-api/the-gainnode-interface/idl-test.html
@@ -131,24 +131,27 @@ interface GainNode : AudioNode {
 
     readonly attribute AudioParam gain;
 
 };</pre>
 
   <div id="log"></div>
 
   <script>
-(function() {
+promise_test(async function () {
+  const webAudioApi = await fetch('/interfaces/web-audio-api.idl').then(r => r.text());
+
   var idl_array = new IdlArray();
+  idl_array.add_untested_idls(webAudioApi, { only: ['AudioNodeOptions'] });
   idl_array.add_untested_idls(document.getElementById("event-target-idl").textContent);
   idl_array.add_untested_idls(document.getElementById("base-audio-context-idl").textContent);
   idl_array.add_untested_idls(document.getElementById("audio-node-idl").textContent);
   idl_array.add_untested_idls(document.getElementById("audio-param-idl").textContent);
   idl_array.add_idls(document.getElementById("gain-node-idl").textContent);
 
   gain_node = (new AudioContext).createGain();
 
   idl_array.add_objects({GainNode: ["gain_node"]});
   idl_array.test();
-})();
+}, 'webaudio Gain interfaces');
   </script>
 </body>
 </html>
--- a/testing/web-platform/tests/webauthn/interfaces.https.any.js
+++ b/testing/web-platform/tests/webauthn/interfaces.https.any.js
@@ -15,16 +15,17 @@ promise_test(async () => {
 
   const idlArray = new IdlArray();
   idlArray.add_idls(webauthnIdl);
 
   // static IDL tests
   idlArray.add_untested_idls('interface CredentialCreationOptions {};');
   idlArray.add_untested_idls('interface CredentialRequestOptions {};');
   idlArray.add_untested_idls("interface Navigator { };");
+  idlArray.add_untested_idls("interface Credential { };");
   // TODO: change to "tested" for real browsers?
   idlArray.add_untested_idls("partial interface Navigator { readonly attribute WebAuthentication authentication; };");
   idlArray.add_objects({
     WebAuthentication: ["navigator.authentication"]
   });
   idlArray.test();
   done();
 }, 'WebAuthn interfaces.');
--- a/testing/web-platform/tests/webstorage/idlharness.html
+++ b/testing/web-platform/tests/webstorage/idlharness.html
@@ -13,22 +13,16 @@
 <body>
 <h1>Web Storage IDL tests</h1>
 <div id="log"></div>
 
 <pre id='untested_idl' style='display:none'>
 [Global=Window, Exposed=Window]
 interface Window {
 };
-
-interface Event {
-};
-
-interface EventInit {
-};
 </pre>
 
 <pre id='idl'>
 interface Storage {
   readonly attribute unsigned long length;
   DOMString? key(unsigned long index);
   getter DOMString? getItem(DOMString key);
   setter void setItem(DOMString key, DOMString value);
@@ -60,22 +54,27 @@ dictionary StorageEventInit : EventInit 
   DOMString? newValue;
   DOMString url;
   Storage? storageArea;
 };
 </pre>
 
 <script>
 
-(function() {
+promise_test(async function() {
+  const dom = await fetch('/interfaces/dom.idl').then(r => r.text());
+  const html = await fetch('/interfaces/html.idl').then(r => r.text());
+
   var idl_array = new IdlArray();
 
+  idl_array.add_untested_idls(dom, { only: ['Event', 'EventInit'] });
+  idl_array.add_untested_idls(html, { only: ['EventStorageInit'] });
   idl_array.add_untested_idls(document.getElementById("untested_idl").textContent);
   idl_array.add_idls(document.getElementById("idl").textContent);
 
   idl_array.add_objects({Storage: ["window.localStorage"]});
 
   idl_array.test();
-})();
+}, 'webstorage interfaces');
 
 </script>
 </body>
 </html>