| <!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) => { | 
 |  if (!window.PerformanceElementTiming) { | 
 |  assert_unreached("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> |