<!DOCTYPE html>
<meta name="viewport" content="width=device-width,initial-scale=1">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="./resources/intersection-observer-test-utils.js"></script>

<style>
/* Cobalt does not implement HTML5 spec for body margin. */
body {
  margin: 8px;
}
pre, #log {
  position: absolute;
  top: 0;
  left: 200px;
}
.spacer {
  height: 100vh;
}
#root {
  display: inline-block;
  overflow: scroll;
  height: 240px;
  border: 3px solid black;
}
#target {
  width: 100px;
  height: 100px;
  margin: 200px 0 0 0;
  background-color: green;
}
</style>

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

<script>
var entries = [];
var root, target;

runTestCycle(function() {
  target = document.getElementById("target");
  assert_true(!!target, "target exists");
  root = document.getElementById("root");
  assert_true(!!root, "root exists");
  var observer = new IntersectionObserver(function(changes) {
    entries = entries.concat(changes);
    window.testRunner.DoNonMeasuredLayout();
  }, { root: root, threshold: [0.5] });
  observer.observe(target);
  entries = entries.concat(observer.takeRecords());
  assert_equals(entries.length, 0, "No initial notifications.");
  runTestCycle(step0, "First rAF");
}, "First observation with a threshold.");
window.testRunner.DoNonMeasuredLayout();
window.testRunner.DoNonMeasuredLayout();

function step0() {
  //root.scrollTop = 20;
  target.style.marginTop = "180px";
  runTestCycle(step1, "root.scrollTop = 20");
  checkLastEntry(entries, 0, [ 11, 111, 211, 311, 11, 111, 211, 251, 11, 111, 11, 251, false]);
}

function step1() {
  checkLastEntry(entries, 1, [ 11, 111, 191, 291, 11, 111, 191, 251, 11, 111, 11, 251, true]);
}
</script>
