<!DOCTYPE html><!-- webkit-test-runner [ CSSPaintingAPIEnabled=true ] -->
<meta name="author" title="Justin Michaud" href="mailto:justin_michaud@webkit.org">
<meta name="assert" content="Test that paint worklets repaint when properties change">
<link rel="help" content="https://drafts.css-houdini.org/css-paint-api-1/">
<script src="resources/testharness.js"></script>

<script id="code" type="text/worklet">
  class MyPaint {
    static get inputProperties() { return ['--my-prop']; }

    paint(ctx, geom, properties) {
      if (properties.get('--my-prop').toString() != "goodbye") {
        ctx.fillStyle = "red";
      } else {
        ctx.fillStyle = "green";
      }

      ctx.fillRect(0, 0, geom.width, geom.height);
    }
  }
  registerPaint('my-paint', MyPaint);
</script>

<script type="text/javascript">
  function onload() {
    if (window.testRunner && window.internals) {
      window.testRunner.dumpAsText(false);
      window.internals.startTrackingRepaints();
    }
    importWorklet(CSS.paintWorklet, document.getElementById('code').textContent);

    // FIXME: Once importWorklet returns a promise, these setTimeouts should go away.
    setTimeout(function() {
      document.getElementById('paint').style.setProperty('--my-prop', 'goodbye');
    }, 500);

    setTimeout(function() {
      var repaintRects = "No test runner";
      if (window.testRunner && window.internals) {
        // force a style recalc.
        var dummy = document.body.offsetTop;
        repaintRects = window.internals.repaintRectsAsText();
        window.internals.stopTrackingRepaints();
      }

      var pre = document.createElement('pre');
      document.body.appendChild(pre);
      pre.innerHTML = repaintRects;
    }, 1000);
  }
</script>

<style>
  #paint {
    background-image: paint(my-paint);
    --my-prop: hello;
    width: 150px;
    height: 150px;
  }
</style>

<body onload="onload()">
  <div id="paint"></div>
</body>
