<!DOCTYPE html>
<meta charset="utf-8">
<meta name="timeout" content="long">
<title>Screen wake locks respect page visibility changes</title>
<link rel="help" href="https://w3c.github.io/wake-lock/#dfn-requesting-the-wake-lock">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>

promise_test(async t => {
  const controller = new AbortController();
  const screenWakeLock = WakeLock.request('screen', { signal: controller.signal });
  const systemWakeLock = WakeLock.request('system', { signal: controller.signal });
  const systemWakeLockPromise = new Promise((resolve, reject) => {
    systemWakeLock.catch(error => {
      assert_equals("AbortError", error.name, "systemWakeLock must have been aborted");
      assert_false(document.hidden, "systemWakeLock must have been aborted after the page is visible again");
      resolve();
    });
  });

  const eventWatcher = new EventWatcher(t, document, "visibilitychange");
  await eventWatcher.wait_for("visibilitychange");
  assert_true(document.hidden, "document is hidden after the visibilitychange event");
  await promise_rejects(t, "AbortError", screenWakeLock, "existing screen locks are aborted");
  await promise_rejects(t, "NotAllowedError", WakeLock.request('screen'),
      "new screen locks are not allowed when the page is not visible");

  await eventWatcher.wait_for("visibilitychange");
  assert_false(document.hidden, "document is no longer hidden after the visibilitychange event");
  controller.abort();

  return systemWakeLockPromise;
}, "Test screen locks respect page visibility changes and system locks are unchanged");

</script>

<p>Switch the page to the background, then switch back to it.</p>
