<!DOCTYPE html>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="../resources/intersection-observer-test-utils.js"></script>

<style>
body, html {
  margin: 0;
}
pre, #log {
  position: absolute;
  top: 0;
  left: 200px;
}
#target {
  width: 100px;
  height: 100px;
  background-color: green;
}
#occluder {
  width: 100px;
  height: 100px;
  background-color: blue;
}
</style>

<div id="target"></div>
<div id="occluder"></div>

<script>
async_test(t => {
  let entries = [];
  let delay = 100;
  let target = document.getElementById("target");
  let occluder = document.getElementById("occluder");

  assert_true(!!target, "target exists");
  assert_true(!!occluder, "occluder exists");
  let observer = new IntersectionObserver(function(changes) {
    entries = entries.concat(changes)
  }, {trackVisibility: true, delay: delay});
  observer.observe(target);
  entries = entries.concat(observer.takeRecords());
  assert_equals(entries.length, 0, "No initial notifications.");
  // The first notification should be sent without delay.
  waitForNotification(t, t.step_func(step0));

  function waitForDelay(timerExpiredBeforeLastFrame) {
    requestAnimationFrame(t.step_func(() => {
      if (timerExpiredBeforeLastFrame) {
        // New notifications should have been generated during the previous
        // frame and delivered by now.
        assert_equals(entries.length, 2);
        assert_greater_than(entries[1].time - entries[0].time, delay);
        assert_false(entries[1].isVisible);
        t.done();
      } else {
        // Observer may not have updated yet. Wait for next frame.
        let timerExpired = performance.now() - entries[0].time >= delay;
        waitForDelay(timerExpired);
      }
    }));
  }

  function step0() {
    assert_equals(entries.length, 1);
    assert_true(entries[0].isVisible);
    // This should trigger a notification on the next run.
    occluder.style.marginTop = "-10px";
    // Enter a rAF loop until the delay timer expires.
    waitForDelay(false);
  }

}, "'delay' parameter throttles frequency of notifications.");
</script>
