chromium/third_party/blink/web_tests/fast/canvas/canvas-filter-origin-clean-url-reference-not-tainting.html

<!doctype html>
<title>CSS url() reference filters may taint the canvas: not tainting</title>
<script src="../../resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script>
<svg style="display: block; width: 0; height: 0">
  <defs>
    <filter id="merge-clean">
      <feColorMatrix type="matrix" values="0 0 0 1 0  0 0 0 1 0  0 0 0 1 0  0 0 0 0 1" />
      <feMerge>
        <feMergeNode></feMergeNode>
        <feMergeNode in="SourceGraphic"></feMergeNode>
        <feMergeNode in="SourceAlpha"></feMergeNode>
        <feMergeNode in="FillPaint"></feMergeNode>
        <feMergeNode in="StrokePaint"></feMergeNode>
      </feMerge>
    </filter>
    <circle id="circle" r="100" fill="blue" />
  </defs>
</svg>
<script>
function assert_not_tainted(performCommands, description) {
  let ctx = document.createElement('canvas').getContext('2d');
  performCommands(ctx);
  assert_not_equals(ctx.getImageData(0, 0, 1, 1), null, description);
}

// SVG reference filters taint the canvas according to
// https://drafts.fxtf.org/filter-effects/#tainted-filter-primitives

test(function() {
  assert_not_tainted(ctx => {
    ctx.filter = 'url(#merge-clean)';
    ctx.fillRect(5, 5, 10, 10);
  }, 'url(#merge-clean)');

  assert_not_tainted(ctx => {
    ctx.filter = 'blur(5px) url(#merge-clean) blur(5px)';
    ctx.fillRect(5, 5, 10, 10);
  }, 'blur(5px) url(#merge-clean) blur(5px)');
});
</script>