"use strict";

const PAGE = "https://example.com/browser/toolkit/content/tests/browser/audio.ogg";

function setup_test_preference() {
  return SpecialPowers.pushPrefEnv({"set": [
    ["media.autoplay.default", SpecialPowers.Ci.nsIAutoplay.BLOCKED],
    ["media.autoplay.enabled.user-gestures-needed", true],
  ]});
}

function checkIsVideoDocumentAutoplay(browser) {
  return ContentTask.spawn(browser, null, async () => {
    const video = content.document.getElementsByTagName("video")[0];
    const played = video && await video.play().then(() => true, () => false);
    ok(played, "Should be able to play in video document.");
  });
}

async function checkIsIframeVideoDocumentAutoplay(browser) {
  info("- create iframe video document -");
  await ContentTask.spawn(browser, PAGE, async (pageURL) => {
    const iframe = content.document.createElement("iframe");
    iframe.src = pageURL;
    content.document.body.appendChild(iframe);
    const iframeLoaded = new Promise((resolve, reject) => {
      iframe.addEventListener("load", e => resolve(), {once: true});
    });
    await iframeLoaded;
  });

  info("- check whether iframe video document starts playing -");
  await ContentTask.spawn(browser, null, async () => {
    const iframe = content.document.querySelector("iframe");
    const video = iframe.contentDocument.querySelector("video");
    ok(video.paused, "Subdoc video should not have played");
    is(video.played.length, 0, "Should have empty played ranges");
  });
}

add_task(async () => {
  await BrowserTestUtils.withNewTab({
    gBrowser,
    url: PAGE,
  }, async (browser) => {
    info("- setup test preference -");
    await setup_test_preference();

    info(`- check whether video document is autoplay -`);
    await checkIsVideoDocumentAutoplay(browser);
  });
});

add_task(async () => {
  await BrowserTestUtils.withNewTab({
    gBrowser,
    url: "about:blank",
  }, async (browser) => {
    info("- setup test preference -");
    await setup_test_preference();

    info(`- check whether video document in iframe is autoplay -`);
    await checkIsIframeVideoDocumentAutoplay(browser);
  });
});

