Update mediacapture-main IDL file (#9794)

diff --git a/interfaces/mediacapture-main.idl b/interfaces/mediacapture-main.idl
index 0513f8f..d5e39e3 100644
--- a/interfaces/mediacapture-main.idl
+++ b/interfaces/mediacapture-main.idl
@@ -1,39 +1,43 @@
+// GENERATED CONTENT - DO NOT EDIT
+// Content of this file was automatically extracted from the Media Capture and Streams spec.
+// See https://w3c.github.io/mediacapture-main/
+
 [Exposed=Window,
  Constructor,
- Constructor(MediaStream stream),
- Constructor(sequence<MediaStreamTrack> tracks)]
+ Constructor (MediaStream stream),
+ Constructor (sequence<MediaStreamTrack> tracks)]
 interface MediaStream : EventTarget {
-    readonly attribute DOMString    id;
-    sequence<MediaStreamTrack> getAudioTracks();
-    sequence<MediaStreamTrack> getVideoTracks();
-    sequence<MediaStreamTrack> getTracks();
-    MediaStreamTrack?          getTrackById(DOMString trackId);
-    void                       addTrack(MediaStreamTrack track);
-    void                       removeTrack(MediaStreamTrack track);
-    MediaStream                clone();
-    readonly attribute boolean      active;
-             attribute EventHandler onaddtrack;
-             attribute EventHandler onremovetrack;
+    readonly        attribute DOMString    id;
+    sequence<MediaStreamTrack> getAudioTracks ();
+    sequence<MediaStreamTrack> getVideoTracks ();
+    sequence<MediaStreamTrack> getTracks ();
+    MediaStreamTrack?          getTrackById (DOMString trackId);
+    void                       addTrack (MediaStreamTrack track);
+    void                       removeTrack (MediaStreamTrack track);
+    MediaStream                clone ();
+    readonly        attribute boolean      active;
+                    attribute EventHandler onaddtrack;
+                    attribute EventHandler onremovetrack;
 };
 
 [Exposed=Window]
 interface MediaStreamTrack : EventTarget {
-    readonly attribute DOMString             kind;
-    readonly attribute DOMString             id;
-    readonly attribute DOMString             label;
-             attribute boolean               enabled;
-    readonly attribute boolean               muted;
-             attribute EventHandler          onmute;
-             attribute EventHandler          onunmute;
-    readonly attribute MediaStreamTrackState readyState;
-             attribute EventHandler          onended;
-    MediaStreamTrack       clone();
-    void                   stop();
-    MediaTrackCapabilities getCapabilities();
-    MediaTrackConstraints  getConstraints();
-    MediaTrackSettings     getSettings();
-    Promise<void>          applyConstraints(optional MediaTrackConstraints constraints);
-             attribute EventHandler          onoverconstrained;
+    readonly        attribute DOMString             kind;
+    readonly        attribute DOMString             id;
+    readonly        attribute DOMString             label;
+                    attribute boolean               enabled;
+    readonly        attribute boolean               muted;
+                    attribute EventHandler          onmute;
+                    attribute EventHandler          onunmute;
+    readonly        attribute MediaStreamTrackState readyState;
+                    attribute EventHandler          onended;
+    MediaStreamTrack       clone ();
+    void                   stop ();
+    MediaTrackCapabilities getCapabilities ();
+    MediaTrackConstraints  getConstraints ();
+    MediaTrackSettings     getSettings ();
+    Promise<void>          applyConstraints (optional MediaTrackConstraints constraints);
+                    attribute EventHandler          onoverconstrained;
 };
 
 enum MediaStreamTrackState {
@@ -42,71 +46,83 @@
 };
 
 dictionary MediaTrackSupportedConstraints {
-    boolean width = true;
-    boolean height = true;
-    boolean aspectRatio = true;
-    boolean frameRate = true;
-    boolean facingMode = true;
-    boolean volume = true;
-    boolean sampleRate = true;
-    boolean sampleSize = true;
-    boolean echoCancellation = true;
-    boolean latency = true;
-    boolean channelCount = true;
-    boolean deviceId = true;
-    boolean groupId = true;
+             boolean width = true;
+             boolean height = true;
+             boolean aspectRatio = true;
+             boolean frameRate = true;
+             boolean facingMode = true;
+             boolean resizeMode = true;
+             boolean volume = true;
+             boolean sampleRate = true;
+             boolean sampleSize = true;
+             boolean echoCancellation = true;
+             boolean autoGainControl = true;
+             boolean noiseSuppression = true;
+             boolean latency = true;
+             boolean channelCount = true;
+             boolean deviceId = true;
+             boolean groupId = true;
 };
 
 dictionary MediaTrackCapabilities {
-    LongRange           width;
-    LongRange           height;
-    DoubleRange         aspectRatio;
-    DoubleRange         frameRate;
-    sequence<DOMString> facingMode;
-    DoubleRange         volume;
-    LongRange           sampleRate;
-    LongRange           sampleSize;
-    sequence<boolean>   echoCancellation;
-    DoubleRange         latency;
-    LongRange           channelCount;
-    DOMString           deviceId;
-    DOMString           groupId;
+             ULongRange           width;
+             ULongRange           height;
+             DoubleRange         aspectRatio;
+             DoubleRange         frameRate;
+             sequence<DOMString> facingMode;
+             sequence<DOMString> resizeMode;
+             DoubleRange         volume;
+             ULongRange           sampleRate;
+             ULongRange           sampleSize;
+             sequence<boolean>   echoCancellation;
+             sequence<boolean>   autoGainControl;
+             sequence<boolean>   noiseSuppression;
+             DoubleRange         latency;
+             ULongRange           channelCount;
+             DOMString           deviceId;
+             DOMString           groupId;
 };
 
-dictionary MediaTrackConstraints : MediaTrackConstraintSet {
-    sequence<MediaTrackConstraintSet> advanced;
+          dictionary MediaTrackConstraints : MediaTrackConstraintSet {
+             sequence<MediaTrackConstraintSet> advanced;
 };
 
 dictionary MediaTrackConstraintSet {
-    ConstrainLong      width;
-    ConstrainLong      height;
-    ConstrainDouble    aspectRatio;
-    ConstrainDouble    frameRate;
-    ConstrainDOMString facingMode;
-    ConstrainDouble    volume;
-    ConstrainLong      sampleRate;
-    ConstrainLong      sampleSize;
-    ConstrainBoolean   echoCancellation;
-    ConstrainDouble    latency;
-    ConstrainLong      channelCount;
-    ConstrainDOMString deviceId;
-    ConstrainDOMString groupId;
+             ConstrainULong      width;
+             ConstrainULong      height;
+             ConstrainDouble    aspectRatio;
+             ConstrainDouble    frameRate;
+             ConstrainDOMString facingMode;
+             ConstrainDOMString resizeMode;
+             ConstrainDouble    volume;
+             ConstrainULong      sampleRate;
+             ConstrainULong      sampleSize;
+             ConstrainBoolean   echoCancellation;
+             ConstrainBoolean   autoGainControl;
+             ConstrainBoolean   noiseSuppression;
+             ConstrainDouble    latency;
+             ConstrainULong      channelCount;
+             ConstrainDOMString deviceId;
+             ConstrainDOMString groupId;
 };
 
 dictionary MediaTrackSettings {
-    long      width;
-    long      height;
-    double    aspectRatio;
-    double    frameRate;
-    DOMString facingMode;
-    double    volume;
-    long      sampleRate;
-    long      sampleSize;
-    boolean   echoCancellation;
-    double    latency;
-    long      channelCount;
-    DOMString deviceId;
-    DOMString groupId;
+             long      width;
+             long      height;
+             double    aspectRatio;
+             double    frameRate;
+             DOMString facingMode;
+             DOMString resizeMode;
+             double    volume;
+             long      sampleRate;
+             long      sampleSize;
+             boolean   echoCancellation;
+             boolean   autoGainControl;
+             boolean   noiseSuppression;
+             double    latency;
+             long      channelCount;
+             DOMString deviceId;
+             DOMString groupId;
 };
 
 enum VideoFacingModeEnum {
@@ -116,11 +132,16 @@
     "right"
 };
 
+enum VideoResizeModeEnum {
+    "none",
+    "crop-and-scale"
+};
+
 [Exposed=Window,
- Constructor(DOMString type, MediaStreamTrackEventInit eventInitDict)]
+ Constructor (DOMString type, MediaStreamTrackEventInit eventInitDict)]
 interface MediaStreamTrackEvent : Event {
     [SameObject]
-    readonly attribute MediaStreamTrack track;
+    readonly        attribute MediaStreamTrack track;
 };
 
 dictionary MediaStreamTrackEventInit : EventInit {
@@ -128,36 +149,35 @@
 };
 
 [Exposed=Window,
- Constructor(DOMString type, OverconstrainedErrorEventInit eventInitDict)]
+ Constructor (DOMString type, OverconstrainedErrorEventInit eventInitDict)]
 interface OverconstrainedErrorEvent : Event {
-    readonly attribute OverconstrainedError? error;
+    readonly        attribute OverconstrainedError? error;
 };
 
 dictionary OverconstrainedErrorEventInit : EventInit {
-    OverconstrainedError? error = null;
+             OverconstrainedError? error = null;
 };
 
-[Exposed=Window,
- NoInterfaceObject]
+[Exposed=Window, NoInterfaceObject]
 interface NavigatorUserMedia {
     [SameObject]
-    readonly attribute MediaDevices mediaDevices;
+    readonly        attribute MediaDevices mediaDevices;
 };
 
 Navigator implements NavigatorUserMedia;
 
 [Exposed=Window]
 interface MediaDevices : EventTarget {
-    attribute EventHandler ondevicechange;
-    Promise<sequence<MediaDeviceInfo>> enumerateDevices();
+                    attribute EventHandler ondevicechange;
+    Promise<sequence<MediaDeviceInfo>> enumerateDevices ();
 };
 
 [Exposed=Window]
 interface MediaDeviceInfo {
-    readonly attribute DOMString       deviceId;
-    readonly attribute MediaDeviceKind kind;
-    readonly attribute DOMString       label;
-    readonly attribute DOMString       groupId;
+    readonly        attribute DOMString       deviceId;
+    readonly        attribute MediaDeviceKind kind;
+    readonly        attribute DOMString       label;
+    readonly        attribute DOMString       groupId;
     [Default] object toJSON();
 };
 
@@ -167,25 +187,22 @@
     "videoinput"
 };
 
-[Exposed=Window]
-interface InputDeviceInfo : MediaDeviceInfo {
-    MediaTrackCapabilities getCapabilities();
+        [Exposed=Window] interface InputDeviceInfo : MediaDeviceInfo {
+    MediaTrackCapabilities getCapabilities ();
 };
 
 partial interface NavigatorUserMedia {
-    void getUserMedia(MediaStreamConstraints constraints,
-                      NavigatorUserMediaSuccessCallback successCallback,
-                      NavigatorUserMediaErrorCallback errorCallback);
+    void getUserMedia (MediaStreamConstraints constraints, NavigatorUserMediaSuccessCallback successCallback, NavigatorUserMediaErrorCallback errorCallback);
 };
 
 partial interface MediaDevices {
-    MediaTrackSupportedConstraints getSupportedConstraints();
-    Promise<MediaStream>           getUserMedia(optional MediaStreamConstraints constraints);
+    MediaTrackSupportedConstraints getSupportedConstraints ();
+    Promise<MediaStream>           getUserMedia (optional MediaStreamConstraints constraints);
 };
 
 dictionary MediaStreamConstraints {
-    (boolean or MediaTrackConstraints) video = false;
-    (boolean or MediaTrackConstraints) audio = false;
+             (boolean or MediaTrackConstraints) video = false;
+             (boolean or MediaTrackConstraints) audio = false;
 };
 
 callback NavigatorUserMediaSuccessCallback = void (MediaStream stream);
@@ -196,44 +213,44 @@
 
 [NoInterfaceObject]
 interface ConstrainablePattern {
-    Capabilities  getCapabilities();
-    Constraints   getConstraints();
-    Settings      getSettings();
-    Promise<void> applyConstraints(optional Constraints constraints);
-    attribute EventHandler onoverconstrained;
+    Capabilities  getCapabilities ();
+    Constraints   getConstraints ();
+    Settings      getSettings ();
+    Promise<void> applyConstraints (optional Constraints constraints);
+                    attribute EventHandler onoverconstrained;
 };
 
 dictionary DoubleRange {
-    double max;
-    double min;
+             double max;
+             double min;
 };
 
 dictionary ConstrainDoubleRange : DoubleRange {
-    double exact;
-    double ideal;
+             double exact;
+             double ideal;
 };
 
-dictionary LongRange {
-    long max;
-    long min;
+dictionary ULongRange {
+             [Clamp] unsigned long max;
+             [Clamp] unsigned long min;
 };
 
-dictionary ConstrainLongRange : LongRange {
-    long exact;
-    long ideal;
+dictionary ConstrainULongRange : ULongRange {
+             [Clamp] unsigned long exact;
+             [Clamp] unsigned long ideal;
 };
 
 dictionary ConstrainBooleanParameters {
-    boolean exact;
-    boolean ideal;
+             boolean exact;
+             boolean ideal;
 };
 
 dictionary ConstrainDOMStringParameters {
-    (DOMString or sequence<DOMString>) exact;
-    (DOMString or sequence<DOMString>) ideal;
+             (DOMString or sequence<DOMString>) exact;
+             (DOMString or sequence<DOMString>) ideal;
 };
 
-typedef (long or ConstrainLongRange) ConstrainLong;
+typedef ([Clamp] unsigned long or ConstrainULongRange) ConstrainULong;
 
 typedef (double or ConstrainDoubleRange) ConstrainDouble;
 
@@ -251,5 +268,5 @@
 };
 
 dictionary Constraints : ConstraintSet {
-    sequence<ConstraintSet> advanced;
+             sequence<ConstraintSet> advanced;
 };
diff --git a/mediacapture-fromelement/idlharness.html b/mediacapture-fromelement/idlharness.html
index 1dad5c4..500720b 100644
--- a/mediacapture-fromelement/idlharness.html
+++ b/mediacapture-fromelement/idlharness.html
@@ -13,12 +13,6 @@
   <media id='media' width=10 height=10/>
   <canvas id='canvas' width=10 height=10/>
 
-  <pre id="untested_idl" style="display: none">
-    interface HTMLCanvasElement {};
-    interface HTMLMediaElement {};
-    interface MediaStream {};
-    interface MediaStreamTrack {};
-  </pre>
   <pre id="idl" style="display: none">
     // https://w3c.github.io/mediacapture-fromelement/
 
@@ -37,18 +31,25 @@
 
   </pre>
   <script>
-    var canvas = document.getElementById('canvas');
-    var media = document.getElementById('media');
+    'use strict';
 
-    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({
-        HTMLMediaElement: [media],
-        HTMLCanvasElement: [canvas],
-        CanvasCaptureMediaStreamTrack: [canvas.captureStream().getTracks()[0]],
-      });
-    idl_array.test();
+    promise_test(async () => {
+      const main = await fetch('/interfaces/mediacapture-main.idl').then(r => r.text());
+      const html = await fetch('/interfaces/html.idl').then(r => r.text());
+      const dom = await fetch('/interfaces/dom.idl').then(r => r.text());
+
+      var idl_array = new IdlArray();
+      idl_array.add_idls(document.getElementById("idl").textContent);
+      idl_array.add_dependency_idls(main);
+      idl_array.add_dependency_idls(html);
+      idl_array.add_dependency_idls(dom);
+      idl_array.add_objects({
+          HTMLMediaElement: ['document.getElementById("media")'],
+          HTMLCanvasElement: ['document.getElementById("canvas")'],
+          CanvasCaptureMediaStreamTrack: ['canvas.captureStream().getTracks()[0]'],
+        });
+      idl_array.test();
+    }, 'Test mediacapture-fromelement IDL interfaces');
   </script>
   <div id="log"></div>
 </body>
diff --git a/mediacapture-image/idlharness.html b/mediacapture-image/idlharness.html
index 146e0e8..46e82a0 100644
--- a/mediacapture-image/idlharness.html
+++ b/mediacapture-image/idlharness.html
@@ -13,12 +13,6 @@
 <body>
   <canvas id='canvas' width=10 height=10/>
 
-  <pre id="untested_idl" style="display: none">
-    interface Event {};
-    interface EventHandler {};
-    interface EventTarget {};
-    interface MediaStreamTrack {};
-  </pre>
   <pre id="idl" style="display: none">
     // https://w3c.github.io/mediacapture-image
 
@@ -164,7 +158,14 @@
     };
 
   </pre>
-  <script>
+<script>
+  'use strict';
+
+  promise_test(async () => {
+    const main = await fetch('/interfaces/mediacapture-main.idl').then(r => r.text());
+    const html = await fetch('/interfaces/html.idl').then(r => r.text());
+    const dom = await fetch('/interfaces/dom.idl').then(r => r.text());
+
     var canvas = document.getElementById('canvas');
     var context = canvas.getContext("2d");
     context.fillStyle = "red";
@@ -172,13 +173,15 @@
     var track = canvas.captureStream().getVideoTracks()[0];
 
     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_dependency_idls(main);
+    idl_array.add_dependency_idls(html);
+    idl_array.add_dependency_idls(dom);
     idl_array.add_objects({
       ImageCapturer : [new ImageCapture(track)]
     });
     idl_array.test();
+  }, 'Test mediacapture-image IDL interfaces');
   </script>
   <div id="log"></div>
 </body>
diff --git a/mediacapture-record/idlharness.html b/mediacapture-record/idlharness.html
index 2da20a1..01cc151 100644
--- a/mediacapture-record/idlharness.html
+++ b/mediacapture-record/idlharness.html
@@ -13,12 +13,6 @@
 <body>
   <canvas id='canvas' width=10 height=10/>
 
-  <pre id="untested_idl" style="display: none">
-    interface Event {};
-    interface EventHandler {};
-    interface EventTarget {};
-    interface MediaStream {};
-  </pre>
   <pre id="idl" style="display: none">
     // https://w3c.github.io/mediacapture-record/MediaRecorder.html
 
@@ -81,6 +75,8 @@
   </pre>
   <script>
     promise_test(async function() {
+      const main = await fetch('/interfaces/mediacapture-main.idl').then(r => r.text());
+      const html = await fetch('/interfaces/html.idl').then(r => r.text());
       const dom = await fetch('/interfaces/dom.idl').then(r => r.text());
 
       var canvas = document.getElementById('canvas');
@@ -90,9 +86,10 @@
       var stream = canvas.captureStream();
 
       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_dependency_idls(main);
+      idl_array.add_dependency_idls(html);
+      idl_array.add_dependency_idls(dom);
       idl_array.add_objects({
           MediaRecorder: [new MediaRecorder(stream)],
         });
diff --git a/mediacapture-streams/MediaDevices-IDL-all.html b/mediacapture-streams/MediaDevices-IDL-all.html
index a793bed..e398c8b 100644
--- a/mediacapture-streams/MediaDevices-IDL-all.html
+++ b/mediacapture-streams/MediaDevices-IDL-all.html
@@ -19,29 +19,20 @@
     <script>
       'use strict';
 
-      function doIdlTest([dom, idlText]) {
+      promise_test(async () => {
+        const main = await fetch('/interfaces/mediacapture-main.idl').then(r => r.text());
+        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();
-
-        // 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.add_idls(main);
+        idl_array.add_dependency_idls(html);
+        idl_array.add_dependency_idls(dom);
+        idl_array.add_objects({
+          Navigator: ["navigator"],
+          MediaDevices: ["navigator.mediaDevices"]
+        });
         idl_array.test();
-      }
-
-      promise_test(() => {
-        return Promise.all(
-          [
-            '/interfaces/dom.idl',
-            '/interfaces/mediacapture-main.idl',
-          ].map(url => fetch(url).then(r => r.text())))
-            .then(doIdlTest);
       }, 'Test driver')
     </script>
   </body>