<html>
<head>
    <title></title>
    <style>
        div {
            width: 40px;
            height: 40px;
            background: url(resources/animated.gif) top left no-repeat,
                        url(resources/animated2.gif) bottom right no-repeat;
        }
    </style>
    <script>
        function step2()
        {
            if (window.testRunner)
                testRunner.notifyDone();
        }

        function step1()
        {
            if (window.testRunner)
                testRunner.displayAndTrackRepaints();
            document.getElementById("target").style.display="none";
            document.body.offsetTop;
            setTimeout("step2()", 200);
        }

        function test()
        {
            if (window.testRunner) {
                testRunner.dumpAsText();
                testRunner.waitUntilDone();
            }
            setTimeout("step1()", 100);
        }
    </script>
</head>
<body onload="test()">
    <p>
        Test for <i><a href="http://bugs.webkit.org/show_bug.cgi?id=12487">http://bugs.webkit.org/show_bug.cgi?id=12487</a>
        REGRESSION: Repro crash when a second background image is animated</i>.
    </p>
    <p>
        This test should not make Safari crash.
    </p>
    <div id="target"></div>
</body>
</html>
