<!--
     Any copyright is dedicated to the Public Domain.
     http://creativecommons.org/publicdomain/zero/1.0/
-->
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" class="reftest-wait"
     style="border: 10px solid lime; padding: 10px; background: lime;">
  <!-- From https://bugzilla.mozilla.org/show_bug.cgi?id=490003 -->
  <title>Test that invalidation takes account of outer-&lt;svg&gt; border/padding</title>
  <desc>
    This test checks that SVG implementations take account of border and
    padding on outer &lt;svg&gt; when doing invalidation.
  </desc>

  <filter id="identity">
    <feColorMatrix type="saturate" in="SourceGraphic"/>
  </filter>

  <!-- to catch misses-->
  <rect id="background" width="100%" height="100%" fill="lime"/>
  
  <rect id="r" width="50" height="50" fill="red"/>
  <rect id="f" y="100" width="50" height="50" fill="red"/>
  
  <rect x="100" y="100" width="50" height="50" fill="red"/>
  <rect x="200" y="100" width="50" height="50" fill="red"/>
  
  <script type="text/javascript">
    function doTest() {
      var background = document.getElementById("background");
  
      document.getElementById('r').setAttribute('opacity','0');
      document.getElementById('f').setAttribute('opacity','0');
  
      <!-- top left -->
      document.elementFromPoint(121, 121).setAttribute('opacity','0');
      <!-- bottom right -->
      document.elementFromPoint(269, 169).setAttribute('opacity','0');

      <!-- outside top left -->
      if (document.elementFromPoint(119, 119) != background) {
        background.setAttribute("fill", "red");
      }
      <!-- outside bottom right -->
      if (document.elementFromPoint(271, 171) != background) {
        background.setAttribute("fill", "purple");
      }

      document.documentElement.removeAttribute('class');
      if (window.testRunner)
        testRunner.notifyDone();
    }
    
    if (window.testRunner)
      testRunner.waitUntilDone();
      
    setTimeout(doTest, 100);    
  </script>
</svg>
