<!DOCTYPE HTML>
<meta charset=utf-8>
<title>Element Timing: observe text</title>
<body>
<style>
body {
  margin: 20px;
}
p {
  font-size: 12px;
}
</style>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="resources/element-timing-helpers.js"></script>
<script>
  async_test((t) => {
    assert_implements(window.PerformanceElementTiming, "PerformanceElementTiming is not implemented");
    let paragraph;
    let beforeRender;
    const observer = new PerformanceObserver(
      t.step_func_done((entryList) => {
        assert_equals(entryList.getEntries().length, 1);
        const entry = entryList.getEntries()[0];
        checkTextElement(entry, 'my_text', 'text_id', beforeRender, paragraph);
        assert_equals(entry.intersectionRect.left, 20, 'left should be 20.');
        // Text box size will vary from device to device, so try lower bounding height by 12, width by 100.
        assert_greater_than_equal(entry.intersectionRect.right, 120);

        assert_equals(entry.intersectionRect.top, 20, 'top should be 20.');
        assert_greater_than_equal(entry.intersectionRect.bottom, 32);
      })
    );
    observer.observe({entryTypes: ['element']});
    // We add the iframe during onload to be sure that the observer is registered
    // in time for it to observe the element timing.
    window.onload = () => {
      paragraph = document.createElement('p');
      paragraph.innerHTML = 'This is text I care about';
      paragraph.setAttribute('elementtiming', 'my_text');
      paragraph.setAttribute('id', 'text_id');
      document.body.appendChild(paragraph);
      beforeRender = performance.now();
    };
  }, 'Paragraph with elementtiming attribute is observed.');
</script>

</body>
