<!DOCTYPE HTML>
<html>
<head>
  <title>Video element src attribute must match src list - positive test</title>
  <script src="/resources/testharness.js"></script>
  <script src="/resources/testharnessreport.js"></script>
</head>
<body>
  <h1>Video element src attribute must match src list - positive test</h1>
  <div id="log"></div>

  <script>
    var src_test = async_test('Allowed media src');

    function media_loaded(t) {
      t.done();
    }

    function media_error_handler(t) {
      t.step( function () {
          assert_unreached();
      });
      t.done();
    }
  </script>

  <video id="videoObject"></video>

  <script>
    document.getElementById('videoObject').addEventListener('error',
       function() {
      media_error_handler(src_test)
    });
    document.getElementById('videoObject').addEventListener('loadeddata',
        function() {
      media_loaded(src_test)
    });
    document.getElementById('videoObject').src='/media/progressive.mp4';
  </script>

  <script async defer src="../support/checkReport.sub.js?reportExists=false">
  </script>
</body>
</html>
