<!DOCTYPE html>
<title>'shape-outside' layout is updated after the image has been loaded</title>
<link rel="help" href="https://drafts.csswg.org/css-shapes/#shapes-from-image">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<style>
  #shape {
    float: left;
    width: 200px;
    height: 200px;
    shape-outside: url("support/left-half-rectangle.png?pipe=trickle(d1)");
  }
</style>
<p>
  Verify that an image valued shape-outside layout is updated after the image has
  been loaded. This test checks that the left edge of the "Hello World" text span
  is defined by the 200px wide float before shape-outside image has been loaded and
  by the 100px wide image segment after it has been loaded.
</p>
<div id="container">
  <img src="support/left-half-rectangle.png" id="shape"><span id="text">Hello World</span>
</div>
<script>
  function elementRect(elementId) {
    var s = document.getElementById("container").getBoundingClientRect();
    var r = document.getElementById(elementId).getBoundingClientRect();
    return {left: r.left - s.left, top: r.top - s.top,
            width: r.width, height: r.height};
  }

  async_test(t => {
    assert_equals(elementRect("text").left, 200, 'image not loaded');

    window.onload = t.step_func_done(() => {
      document.body.offsetTop;  // Force a layout.

      assert_equals(elementRect("text").left, 100, 'image loaded');
    });
  });
</script>
