<!doctype html>
<html>
 <head>
  <title>{audio,video} events - loadstart, then progress</title>
  <script src="/resources/testharness.js"></script>
  <script src="/resources/testharnessreport.js"></script>
  <script src="/common/media.js"></script>
 </head>
 <body>
  <p><a href="https://html.spec.whatwg.org/multipage/#mediaevents">spec reference</a></p>
  <audio id="a" autoplay controls>
  </audio>
  <video id="v" autoplay controls>
  </video>
  <div id="log"></div>
  <script>
test(function() {
  var t = async_test("setting src attribute on autoplay audio should trigger loadstart then progress event", {timeout:5000});
  var a = document.getElementById("a");
  var found_loadstart = false;
  a.addEventListener("loadstart", function() {
    found_loadstart = true;
  });
  a.addEventListener("progress", function() {
    t.step(function() {
     assert_true(found_loadstart);
    });
    t.done();
    a.pause();
  }, false);
  a.src = getAudioURI("/media/sound_5") + "?" + new Date() + Math.random();
}, "audio events - loadstart, then progress");

test(function() {
  var t = async_test("setting src attribute on autoplay video should trigger loadstart then progress event", {timeout:5000});
  var v = document.getElementById("v");
  var found_loadstart = false;
  v.addEventListener("loadstart", function() {
    found_loadstart = true;
  });
  v.addEventListener("progress", function() {
    t.step(function() {
     assert_true(found_loadstart);
    });
    t.done();
    v.pause();
  }, false);
  v.src = getVideoURI("/media/movie_5") + "?" + new Date() + Math.random();
}, "video events - loadstart, then progress");
  </script>
 </body>
</html>
