<!DOCTYPE html>
<title>Test behaviour of autoplay muted videos with regards to visibility</title>
<script src="../resources/testharness.js"></script>
<script src="../resources/testharnessreport.js"></script>
<script src="media-file.js"></script>
<body>
<script>
  window.internals.settings.setMediaPlaybackRequiresUserGesture(true);
  window.internals.runtimeFlags.autoplayMutedVideosEnabled = true;

  async_test(function(t) {
    // Create a video off screen.
    {
      var video = document.createElement('video');
      video.id = 'offscreen';
      video.src = findMediaFile('video', 'content/test');
      video.muted = true;
      video.autoplay = true;
      video.loop = true;
      video.style.position = 'absolute';
      video.style.top = '-10000px';
      document.body.appendChild(video);
    }

    // Create a video in screen.
    {
      var video = document.createElement('video');
      video.id = 'inscreen';
      video.src = findMediaFile('video', 'content/test');
      video.muted = true;
      video.autoplay = true;
      video.loop = true;
      document.body.appendChild(video);
    }

    // Create an audio in screen.
    {
      var audio = document.createElement('audio');
      audio.src = findMediaFile('audio', 'content/test');
      audio.muted = true;
      audio.autoplay = true;
      audio.loop = true;
      audio.controls = true;
      document.body.appendChild(audio);
    }

    // Create offscreen video without autoplay.
    {
      var video = document.createElement('video');
      video.id = 'offscreen-no-autoplay';
      video.src = findMediaFile('video', 'content/test');
      video.muted = true;
      video.loop = true;
      video.style.position = 'absolute';
      video.style.top = '-10000px';
      document.body.appendChild(video);
    }

    var inscreen = document.querySelector('#inscreen');
    var offscreen = document.querySelector('#offscreen');
    var offscreenNoAutoplay = document.querySelector('#offscreen-no-autoplay');
    var audio = document.querySelector('audio');

    inscreen.addEventListener('playing', t.step_func(function() {
      // The offscreen videos shouldn't play.
      assert_true(offscreen.paused);
      assert_true(offscreenNoAutoplay.paused);
      assert_false(inscreen.paused);
      assert_true(audio.paused, 'audio should not play');

      // Both autoplay videos should have loaded.
      assert_greater_than_equal(inscreen.readyState, HTMLMediaElement.HAVE_ENOUGH_DATA);
      assert_greater_than_equal(offscreen.readyState, HTMLMediaElement.HAVE_ENOUGH_DATA);

      // Move video in screen.
      offscreen.style.top = '0px';

      offscreen.addEventListener('playing', t.step_func(function() {
        // Both autoplay videos should now play.
        assert_false(inscreen.paused);
        assert_false(offscreen.paused);
        assert_true(offscreenNoAutoplay.paused);
        assert_true(audio.paused, 'audio should not play');

        // Call to play() should succeed regardless of visibility.
        offscreenNoAutoplay.play();
        offscreenNoAutoplay.addEventListener('playing', t.step_func_done(function() {
          assert_false(inscreen.paused);
          assert_false(offscreen.paused);
          assert_false(offscreenNoAutoplay.paused);
          assert_true(audio.paused, 'audio should not play');
        }));
      }));
    }));
  });
</script>
</body>
