<!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 {
  /* Cobalt does not support calc */
  height: 100vh;

}
#target {
  width: 100px;
  height: 100px;
  background-color: green;
  /* Adjust for subtracted 100px in class=spacer */
  margin-top: 100px;
}
</style>

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

<script>
var vw = window.innerWidth;
var vh = window.innerHeight;

var entries = [];
var target;

runTestCycle(function() {
  target = document.getElementById("target");
  var observer = new IntersectionObserver(function(changes) {
    entries = entries.concat(changes);
    window.testRunner.DoNonMeasuredLayout();
  }, { threshold: [0, 0.25, 0.5, 0.75, 1] });
  observer.observe(target);
  entries = entries.concat(observer.takeRecords());
  assert_equals(entries.length, 0, "No initial notifications.");
  runTestCycle(step0, "First rAF.");
}, "Observer with multiple thresholds.");
window.testRunner.DoNonMeasuredLayout();
window.testRunner.DoNonMeasuredLayout();

function step0() {
  target.style.marginTop = "-20px";
  //document.scrollingElement.scrollTop = 120;
  runTestCycle(step1, "document.scrollingElement.scrollTop = 120");
  checkLastEntry(entries, 0, [8, 108, vh + 108, vh + 208, 0, 0, 0, 0, 0, vw, 0, vh, false]);
}

function step1() {
  target.style.marginTop = "-60px";
  //document.scrollingElement.scrollTop = 160;
  runTestCycle(step2, "document.scrollingElement.scrollTop = 160");
  checkLastEntry(entries, 1, [8, 108, vh - 12, vh + 88, 8, 108, vh - 12, vh, 0, vw, 0, vh, true]);
}

function step2() {
  target.style.marginTop = "-100px";
  //document.scrollingElement.scrollTop = 200;
  runTestCycle(step3, "document.scrollingElement.scrollTop = 200");
  checkLastEntry(entries, 2, [8, 108, vh - 52, vh + 48, 8, 108, vh - 52, vh, 0, vw, 0, vh, true]);
}

function step3() {
  target.style.marginTop = "-140px"; 
  //document.scrollingElement.scrollTop = 240;
  runTestCycle(step4, "document.scrollingElement.scrollTop = 240");
  checkLastEntry(entries, 3, [8, 108, vh - 92, vh + 8, 8, 108, vh - 92, vh, 0, vw, 0, vh, true]);
}

function step4() {
  var marginTop = (vh + 140) * -1 + 100 + "px";
  target.style.marginTop = marginTop;
  //document.scrollingElement.scrollTop = vh + 140;
  runTestCycle(step5, "document.scrollingElement.scrollTop = window.innerHeight + 140");
  checkLastEntry(entries, 4, [8, 108, vh - 132, vh - 32, 8, 108, vh - 132, vh - 32, 0, vw, 0, vh, true]);
}

function step5() {
  var marginTop = (vh + 160) * -1 + 100 + "px";
  target.style.marginTop = marginTop;
  //document.scrollingElement.scrollTop = vh + 160;
  runTestCycle(step6, "document.scrollingElement.scrollTop = window.innerHeight + 160");
  checkLastEntry(entries, 5, [8, 108, -32, 68, 8, 108, 0, 68, 0, vw, 0, vh, true]);
}

function step6() {
  var marginTop = (vh + 200) * -1 + 100 + "px";
  target.style.marginTop = marginTop;
  //document.scrollingElement.scrollTop = vh + 200;
  runTestCycle(step7, "document.scrollingElement.scrollTop = window.innerHeight + 200");
  checkLastEntry(entries, 6, [8, 108, -52, 48, 8, 108, 0, 48, 0, vw, 0, vh, true]);
}

function step7() {
  checkLastEntry(entries, 7, [8, 108, -92, 8, 8, 108, 0, 8, 0, vw, 0, vh, true]);
  var marginTop = (vh + 220) * -1 + 100 + "px";
  target.style.marginTop = marginTop;
  //document.scrollingElement.scrollTop = vh + 220;
  runTestCycle(step8, "document.scrollingElement.scrollTop = window.innerHeight + 220");
}

function step8() {
  checkLastEntry(entries, 8, [8, 108, -112, -12, 0, 0, 0, 0, 0, vw, 0, vh, false]);
  target.style.marginTop = "100px";
  //document.scrollingElement.scrollTop = 0;
}
</script>
