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

<style>
#root {
  width: 200px;
  height: 200px;
}
#scroller {
  width: 160px;
  height: 200px;
  overflow-y: scroll;
}
#target {
  width: 100px;
  height: 100px;
  background-color: green;
}
.spacer {
  height: 300px;
}
</style>

<div id="root">
  <div id="scroller">
    <div class="spacer"></div>
    <div id="target"></div>
    <div class="spacer"></div>
  </div>
</div>

<script>
setup({message_events: [], output_document: window.parent.document});

var entries = [];
var root, scroller, target;

runTestCycle(function() {
  root = document.getElementById("root");
  assert_true(!!root, "Root element exists.");
  scroller = document.getElementById("scroller");
  assert_true(!!scroller, "Scroller element exists.");
  target = document.getElementById("target");
  assert_true(!!target, "Target element exists.");
  var observer = new IntersectionObserver(function(changes) {
    entries = entries.concat(changes)
  }, {root: root});
  observer.observe(target);
  entries = entries.concat(observer.takeRecords());
  assert_equals(entries.length, 0, "No initial notifications.")
  runTestCycle(step1, "First rAF.");
}, "IntersectionObserver in iframe with explicit root.");

function step1() {
  scroller.scrollTop = 250;
  runTestCycle(step2, "scroller.scrollTop = 250");
  checkLastEntry(entries, 0, [8, 108, 308, 408, 0, 0, 0, 0, 8, 208, 8, 208, false]);
}

function step2() {
  checkLastEntry(entries, 1, [8, 108, 58, 158, 8, 108, 58, 158, 8, 208, 8, 208, true]);
}
</script>
