[css-houdini-drafts] [css-paint-api] Cycle possible using inputProperties() (#877)

stephenmcgruer has just created a new issue for https://github.com/w3c/css-houdini-drafts:

== [css-paint-api] Cycle possible using inputProperties() ==
Consider the following:

**index.html**
```html
<!-- index.html -->
<!doctype html>
<style>
  textarea {
    background-image: paint(recursivePainter);
  }
</style>
<textarea></textarea>
<script>
  CSS.paintWorklet.addModule('recursive.js');
</script>
```

**recursive.js**
```javascript
class RecursivePainter {
  static get inputProperties() { return ['background-image']; }
  paint(ctx, geom, properties) {
    var myself = properties.get('background-image');
    ctx.drawImage(myself, 0, 0);
  }
}

registerPaint('recursivePainter', RecursivePainter);
```

This forms a cycle, where `RecursivePainter` depends on `RecursivePainter` in order to draw, which is rather impossible. More generally, you could have a chain of PaintWorklets, such that `PW1 <-- PW2 <-- PW3 ... <-- PWn <-- PW1`. Such a chain is finite (as the number of css properties which accept `<image>` is finite), but detecting cycles would be painful for the browser - and it's unclear how to resolve them properly.

I think the best the spec can do is declare PaintWorklet-generated `<image>`s to be invalid in the input `properties`. This is a little tricky since some properties such as `border-image` can contain multiple images and it seems reasonable to allow the non-PaintWorklet ones to be used.

Please view or discuss this issue at https://github.com/w3c/css-houdini-drafts/issues/877 using your GitHub account

Received on Wednesday, 17 April 2019 14:37:07 UTC