chromium/third_party/blink/web_tests/media/autoplay/allow-if-capturing-user-media.html

<!DOCTYPE html>
<title>Test autoplay is allowed if the document is capturing</title>
<script src='../../resources/testharness.js'></script>
<script src='../../resources/testharnessreport.js'></script>
<body></body>
<script>

function testAutoplay() {
  const video = document.createElement('video');
  video.src = '../content/test.ogv';

  return new Promise((resolve) => {
    video.play().then(() => resolve(true),
      (e) => resolve(e.name != 'NotAllowedError'));
  });
}

async_test(t => {
  t.add_cleanup(() => {
    internals.settings.setAutoplayPolicy('no-user-gesture-required');
  });

  internals.settings.setAutoplayPolicy('document-user-activation-required');

  /* The capturing video element */
  let capturingVideo  = document.createElement('video');

  testAutoplay().then(t.step_func((success) => {
    // We should not be able to autoplay without a user gesture.
    assert_false(success);

    // Start capturing user media.
    navigator.mediaDevices.getUserMedia({video: true}).then(
      t.step_func(step2), t.unreached_func());
  }));

  function step2(stream) {
    capturingVideo.srcObject = stream;
    capturingVideo.play().then(t.step_func(step3), t.unreached_func());
  }

  function step3() {
    testAutoplay().then(t.step_func((success) => {
      // Autoplay should be enabled as we are capturing.
      assert_true(success);

      capturingVideo.srcObject.getTracks()[0].stop();

      testAutoplay().then(t.step_func_done((success) => {
        // Autoplay should be disabled again.
        assert_false(success);
      }));
    }));
  }
});

</script>