<!doctype html>
<html>
 <head>
  <title>{audio,video} events - canplay, then canplaythrough</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 canplay then canplaythrough event", {timeout:5000});
  var a = document.getElementById("a");
  var found_canplay = false;
  a.addEventListener("canplay", function() {
    found_canplay = true;
  });
  a.addEventListener("canplaythrough", function() {
    t.step(function() {
     assert_true(found_canplay);
    });
    t.done();
    a.pause();
  }, false);
  a.src = getAudioURI("/media/sound_5") + "?" + new Date() + Math.random();
}, "audio events - canplay, then canplaythrough");

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