<!DOCTYPE html>
<script src="/js-test-resources/js-test.js"></script>
<div style="width:100%; height:700px;"></div>
<iframe id="target-iframe" src="http://localhost:8080/intersection-observer/resources/cross-origin-subframe.html" style="height: 100px; overflow-y: scroll"></iframe>
<div style="width:100%; height:700px;"></div>

<script>
setPrintTestResultsLazily();
self.jsTestIsAsync = true;

description("Simple intersection observer test with no explicit root and target in a cross-origin iframe.");

var iframe = document.getElementById("target-iframe");
var actual;

function checkData(actualData, expected) {
  actual = actualData;
  shouldBeEqualToNumber("actual.length", expected.length);
  for (var i = 0; i < actualData.length && i < expected.length; i++) {
    actual = actualData[i];
    shouldBeEqualToNumber("actual.boundingClientRect.left", expected[i].boundingClientRect.left);
    shouldBeEqualToNumber("actual.boundingClientRect.top", expected[i].boundingClientRect.top);
    shouldBeEqualToNumber("actual.boundingClientRect.right", expected[i].boundingClientRect.right);
    shouldBeEqualToNumber("actual.boundingClientRect.bottom", expected[i].boundingClientRect.bottom);
    shouldBeEqualToNumber("actual.boundingClientRect.width", expected[i].boundingClientRect.width);
    shouldBeEqualToNumber("actual.boundingClientRect.height", expected[i].boundingClientRect.height);
    shouldBeEqualToNumber("actual.intersectionRect.left", expected[i].intersectionRect.left);
    shouldBeEqualToNumber("actual.intersectionRect.top", expected[i].intersectionRect.top);
    shouldBeEqualToNumber("actual.intersectionRect.right", expected[i].intersectionRect.right);
    shouldBeEqualToNumber("actual.intersectionRect.bottom", expected[i].intersectionRect.bottom);
    shouldBeEqualToNumber("actual.intersectionRect.width", expected[i].intersectionRect.width);
    shouldBeEqualToNumber("actual.intersectionRect.height", expected[i].intersectionRect.height);
    if (expected[i].rootBounds == "null") {
      shouldBe("actual.rootBounds", "null");
    } else if (actual.rootBounds == "null") {
      shouldNotBe("actual.rootBounds", "null");
    } else {
      shouldBeEqualToNumber("actual.rootBounds.left", expected[i].rootBounds.left);
      shouldBeEqualToNumber("actual.rootBounds.top", expected[i].rootBounds.top);
      shouldBeEqualToNumber("actual.rootBounds.right", expected[i].rootBounds.right);
      shouldBeEqualToNumber("actual.rootBounds.bottom", expected[i].rootBounds.bottom);
      shouldBeEqualToNumber("actual.rootBounds.width", expected[i].rootBounds.width);
      shouldBeEqualToNumber("actual.rootBounds.height", expected[i].rootBounds.height);
    }
    shouldBeEqualToString("actual.target", expected[i].target);
  }
}

function handleMessage(event) {
  if (event.data.hasOwnProperty('scrollTo')) {
    document.scrollingElement.scrollTop = event.data.scrollTo;
    requestAnimationFrame(function () { iframe.contentWindow.postMessage("", "*") });
  } else if (event.data.hasOwnProperty('actual')) {
    checkData(event.data.actual, event.data.expected);
  } else if (event.data.hasOwnProperty('DONE')) {
    finishJSTest();
    document.scrollingElement.scrollTop = 0;
  } else {
    requestAnimationFrame(function () { iframe.contentWindow.postMessage("", "*") });
  }
}

window.addEventListener("message", handleMessage);
iframe.onload = function() {
  iframe.contentWindow.postMessage("", "*")
};
</script>
