<!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>
pre, #log {
  position: absolute;
  top: 0;
  left: 200px;
}
</style>

<div id="container">
  <iframe src="http://{{domains[www1]}}:{{ports[http][0]}}/intersection-observer/resources/v2-subframe.html"></iframe>
</div>

<script>
async_test(function(t) {
  let container = document.getElementById("container");
  let iframe = document.querySelector("iframe");

  function step0(event) {
    assert_equals(event.data,"");
  }

  function step1(event) {
    container.style.opacity = "0.99";
    assert_equals(JSON.stringify(event.data),
                  JSON.stringify([true]));
  }

  function step2(event) {
    container.style.opacity = "";
    assert_equals(JSON.stringify(event.data),
                  JSON.stringify([false]));
  }

  function step3(event) {
    container.style.transform = "skew(30deg)";
    assert_equals(JSON.stringify(event.data),
                  JSON.stringify([true]));
  }

  function step4(event) {
    assert_equals(JSON.stringify(event.data),
                  JSON.stringify([false]));
  }

  let steps = [step0, step1, step2, step3, step4];

  window.addEventListener("message", event => {
    if (steps.length) {
      t.step(steps.shift(), t, event);
      waitForFrame(t, () => {
        iframe.contentWindow.postMessage("", "*")
      });
    } else {
      t.done();
    }
  });

}, "Intersection observer V2 test with visual effects on iframe.");
</script>
