<!doctype html>
<html>
  <head>
    <title>getUserMedia: Non-Interactive test for mediaDevices APIs</title>
    <link rel="author" title="Dr Alex Gouaillard" href="mailto:agouaillard@gmail.com"/>
    <link rel="help" href="http://w3c.github.io/mediacapture-main/getusermedia.html#mediadevices">
    <link rel="help" href="http://w3c.github.io/mediacapture-main/getusermedia.html#mediadevices-interface-extensions">
    <meta name='assert' content='Check the mediaDevices APIs.'/>
  </head>
  <body>
    <h1 class="instructions">Description</h1>
    <p class="instructions">This test checks for the presence of the
    <code>navigator.mediaDevices.getUserMedia</code> method.</p>
    <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) {
        var idl_array = new IdlArray();

        // dummies
        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);

      }, 'Test driver')
    </script>
  </body>
</html>
