<!DOCTYPE HTML>
<meta charset=utf-8>
<title>Element Timing: observe a rectangular image</title>
<body>
<style>
body {
  margin: 20px;
}
</style>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="resources/element-timing-helpers.js"></script>
<script>
  let beforeRender;
  let img;
  async_test(function (t) {
    assert_implements(window.PerformanceElementTiming, "PerformanceElementTiming is not implemented");
    const observer = new PerformanceObserver(
      t.step_func_done(function(entryList) {
        assert_equals(entryList.getEntries().length, 1);
        const entry = entryList.getEntries()[0];
        const pathname = window.location.origin + '/images/black-rectangle.png';
        checkElement(entry, pathname, 'my_image', 'rectangle', beforeRender, img);
        // Assume viewport has size at least 100, so the element is fully visible.
        checkRect(entry, [20, 120, 20, 70]);
        checkNaturalSize(entry, 100, 50);
      })
    );
    observer.observe({entryTypes: ['element']});
    // We add the image during onload to be sure that the observer is registered
    // in time for it to observe the element timing.
    window.onload = () => {
      // Add image of width equal to 100 and height equal to 50.
      img = document.createElement('img');
      img.src = '/images/black-rectangle.png';
      img.id = 'rectangle';
      img.setAttribute('elementtiming', 'my_image');
      document.body.appendChild(img);
      beforeRender = performance.now();
    };
  }, 'Element with rectangular image has correct rect and instrinsic size.');
</script>
</body>
