<!DOCTYPE html>
<title>Moving media element to other document to bypass autoplay</title>
<script src="../resources/testharness.js"></script>
<script src="../resources/testharnessreport.js"></script>
<body>
<script>
  function createAndMoveVideo() {
    var v = document.implementation.createHTMLDocument().createElement('video');
    v.src = 'content/test.ogv';
    document.body.appendChild(v);
    return v;
  }

  test(function() {
    assert_true(window.internals != null, 'This test only works with internals exposed present');
  }, 'internals are exposed');

  async_test(function(t) {
    window.internals.settings.setAutoplayPolicy('no-user-gesture-required');
    var v = createAndMoveVideo();
    assert_true(v.paused, 'Video should be paused before calling play()');

    v.play().then(
      t.step_func_done(),
      t.step_func_done(function() {
        assert_unreached('Video should autoplay when gesture not required');
      }));
  }, 'Test that video should autoplay without gesture requirement');

  async_test(function(t) {
    window.internals.settings.setAutoplayPolicy('user-gesture-required');
    var v = createAndMoveVideo();
    assert_true(v.paused, 'Video should be paused before calling play()');

    v.play().then(
      t.step_func_done(function() {
        assert_unreached('Video should not autoplay when gesture required');
      }),
      t.step_func_done());
  }, 'Test that video should not autoplay when gesture required');
</script>
</body>
