| <script> |
| // This test waits for a GIF repaint and double checks that there is a repaint only, |
| // no layout. If the test passes, there are two green squares. If it fails, then one |
| // or both of the squares is red instead. |
| |
| var layoutCountBeforeTimer; |
| |
| function animationComplete() |
| { |
| document.body.offsetWidth; // Explicitly trigger a layout. |
| |
| if (window.internals && window.testRunner) { |
| var count = internals.layoutCount - layoutCountBeforeTimer; |
| if (count == 0) { |
| var indicator = document.getElementById("indicator"); |
| indicator.addEventListener("load", function() { testRunner.notifyDone(); }) |
| indicator.src = "resources/rgb-jpeg-green.jpg"; |
| return; |
| } |
| testRunner.notifyDone(); |
| } |
| } |
| |
| function test() |
| { |
| document.body.offsetWidth; // Explicitly trigger a layout. |
| |
| if (window.internals && window.testRunner) { |
| testRunner.waitUntilDone(); |
| layoutCountBeforeTimer = internals.layoutCount; |
| } |
| |
| // The 200ms value here is longer than the time it takes for gif-loop-count.gif |
| // to advance from its first frame to its second. There should be no race because |
| // the GIF timer should already be scheduled and this timer should share the |
| // same time base. |
| setTimeout(animationComplete, 200); |
| } |
| </script> |
| <body onload="test()"> |
| <img src="resources/gif-loop-count.gif" style="position:absolute;left:0;top:0"> |
| <img id="indicator" src="resources/rgb-jpeg-red.jpg" style="position:absolute;left:0;top:150"> |
| </body> |