chromium/third_party/blink/web_tests/external/wpt/fenced-frame/intersection-observer.https.html

<!DOCTYPE html>
<title>Test Intersection Observer in fenced frame</title>
<script src="/common/rendering-utils.js"></script>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/common/utils.js"></script>
<script src="resources/utils.js"></script>
<script src="/common/utils.js"></script>
<style>
fencedframe {
  width: 100px;
  height: 100px;
  position: fixed;
  top: 0px;
  left: 0px;
  border: unset;
}
</style>

<body>
<script>
promise_test(async (t) => {
  // first entry after observe.
  const io_entry_on_registration = token();
  // entry after transform.
  const io_entry_on_transform = token();
  // entry with clip.
  const io_entry_on_clip = token();

  const frame = attachFencedFrame(generateURL(
    "resources/frame-with-intersection-observer.html",
    [io_entry_on_registration, io_entry_on_transform, io_entry_on_clip]));

  let result = await nextValueFromServer(io_entry_on_registration);
  assert_equals(result, "0,0,100,100,true",
    "Subscribing to IO dispatches a notification");

  // Apply a transform to the fencedframe and ensure it gets applied to the
  // intersectionRect.
  frame.style.transform = 'translate(-10px, -20px)';
  result = await nextValueFromServer(io_entry_on_transform);
  assert_equals(result, "10,20,90,80,true",
    "Transform applies to intersection rect");

  // Now add a clip to the fencedframe which should clip the intersectionRect.
  frame.style.clipPath = 'inset(10px)';
  result = await nextValueFromServer(io_entry_on_clip);
  assert_equals(result, "10,20,80,70,false", "Clip applies to intersection rect");
}, 'Intersection Observer Test');

</script>
</body>
</html>