<!doctype html>
<title>paused state when removing from a document</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/common/media.js"></script>
<div id="log"></div>
<video hidden></video>
<script>
function afterStableState(func) {
  var a = new Audio();
  a.volume = 0;
  a.addEventListener('volumechange', func);
}

async_test(function(t) {
  var v = document.querySelector('video');
  v.src = getVideoURI('/media/movie_300');
  v.play();
  v.onplaying = t.step_func(function() {
    assert_false(v.paused, 'paused after playing');
    v.parentNode.removeChild(v);
    assert_false(v.paused, 'paused after removing');
    afterStableState(t.step_func(function() {
      assert_true(v.paused, 'paused after stable state');
      v.onpause = t.step_func(function() {
        assert_true(v.paused, 'paused in pause event');
        // re-insert and verify that it stays paused
        document.body.appendChild(v);
        setTimeout(t.step_func(function() {
          assert_true(v.paused, 'paused after re-inserting');
          t.done();
        }), 0);
      });
    }));
  });
});
</script>
