<!DOCTYPE html>
<script>
function addFilterEffects(filterId, count) {
  // inserts a new tree of 'count' feGaussianBlur effects to 
  // the filter whose id = 'filterId'
  var filter = document.getElementById(filterId);
  for (var i = 0; i < count; i++) {
    var feElement = document.createElementNS("http://www.w3.org/2000/svg", "feGaussianBlur");
	// Make the first effect be the root of the tree
    if (i == 0) {
	    feElement.setAttribute("in", "SourceGraphic");
	}
    feElement.setAttribute("stdDeviation", "1.0");
    filter.appendChild(feElement);
  }
}
if (window.testRunner)
    testRunner.dumpAsText();
window.addEventListener("load", function () {
  // will be ignored: # of effects in the filter map > 200
  addFilterEffects("Ignored200", 100000);
  // will be ignored: # of effects connected to lastEffect > 100
  addFilterEffects("Ignored100", 50);
  addFilterEffects("Ignored100", 149);
  // will be used: # of effects in the filter map == 200 but  # of effects connected to lastEffect < 100
  addFilterEffects("TripleBlur", 196);
  addFilterEffects("TripleBlur", 3);
}, false);
</script>
<svg width="500" height="300" xmlns="http://www.w3.org/2000/svg">
<defs>
  <filter id="Ignored200">
  </filter>
  <filter id="Ignored100">
  </filter>
  <filter id="TripleBlur">
  </filter>
  <filter id="ShiftAndBlur">
    <feOffset dx="10" dy="10" />
    <feGaussianBlur stdDeviation="8.0" />
  </filter>
</defs>
<rect fill="red" x="10px" y="10px" width="20px" height="20px" filter="url(#Ignored200)"/>
<rect fill="yellow" x="10px" y="10px" width="20px" height="20px" filter="url(#Ignored100)"/>
<rect fill="blue" x="10px" y="10px" width="20px" height="20px" filter="url(#TripleBlur)"/>
<circle fill="green" cx="100" cy="100" r="100"filter="url(#ShiftAndBlur)" />
<text transform="translate(210,210)">
  PASS
</text>
</svg>