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

<style>
pre, #log {
  position: absolute;
  top: 0;
  left: 200px;
}
.spacer {
  height: calc(100vh + 100px);
}
iframe {
  height: 100px;
  width: 150px;
}
</style>

<div class="spacer"></div>
<iframe id="target-iframe" src="resources/iframe-no-root-subframe.html"></iframe>
<div class="spacer"></div>

<script>
var vw = document.documentElement.clientWidth;
var vh = document.documentElement.clientHeight;

var iframe = document.getElementById("target-iframe");
var target;
var entries = [];

iframe.onload = function() {
  runTestCycle(function() {
    assert_true(!!iframe, "iframe exists");

    target = iframe.contentDocument.getElementById("target");
    assert_true(!!target, "Target element exists.");
    var observer = new IntersectionObserver(function(changes) {
      entries = entries.concat(changes)
    });
    observer.observe(target);
    entries = entries.concat(observer.takeRecords());
    assert_equals(entries.length, 0, "No initial notifications.");
    runTestCycle(step0, "First rAF.");
  }, "Observer with the implicit root; target in a same-origin iframe.");
};

function step0() {
  document.scrollingElement.scrollTop = 200;
  runTestCycle(step1, "document.scrollingElement.scrollTop = 200");
  checkLastEntry(entries, 0, [8, 108, 208, 308, 0, 0, 0, 0, 0, vw, 0, vh, false]);
}

function step1() {
  iframe.contentDocument.scrollingElement.scrollTop = 250;
  runTestCycle(step2, "iframe.contentDocument.scrollingElement.scrollTop = 250");
  assert_equals(entries.length, 1, "entries.length == 1");
}

function step2() {
  document.scrollingElement.scrollTop = 100;
  runTestCycle(step3, "document.scrollingElement.scrollTop = 100");
  checkLastEntry(entries, 1, [8, 108, -42, 58, 8, 108, 0, 58, 0, vw, 0, vh, true]);
}

function step3() {
  checkLastEntry(entries, 2, [8, 108, -42, 58, 0, 0, 0, 0, 0, vw, 0, vh, false]);
  document.scrollingElement.scrollTop = 0;
}
</script>
