<!-- webkit-test-runner [ enableBackForwardCache=true ] -->
<script>
    if (window.testRunner)
        testRunner.dumpAsText();

    function runTest() {
        if (window.internals && window.testRunner) {
            internals.settings.setAnimatedImageDebugCanvasDrawingEnabled(true);
            testRunner.waitUntilDone();
        }

        var image = document.getElementById("image");
        var console = document.getElementById("console");            
        var context = document.getElementById("canvas").getContext("2d");

        image.style.visibility = "visible";

        context.drawImage(image, 0, 0);
        var frameOne = context.getImageData(0, 0, 1, 1).data;

        handle = window.setInterval(function() {
            context.drawImage(image, 0, 0);
            var frameTwo = context.getImageData(0, 0, 1, 1).data;

            // Compare RGBA of the two frames
            if (frameOne[0] == frameTwo[0]
                && frameOne[1] == frameTwo[1]
                && frameOne[2] == frameTwo[2]
                && frameOne[3] == frameTwo[3])
                return;

            window.clearInterval(handle);
            console.innerHTML = "<span style='color:green'>PASS</span>";
            if (window.testRunner)
                testRunner.notifyDone();
        }, 10);
    }

    window.onpageshow = function(event) {
        if (!event.persisted && window.testRunner) {
            testRunner.queueLoad("about:blank");
            testRunner.queueBackNavigation(1);
            return;
        }

        if (event.persisted)
            runTest();
    }
</script>
<p>Test that animated GIFs resume animating after restoring a page from the back forward cache. To test manually, click <a href="about:blank">here</a> to visit about:blank, then press the browser's back button. On success, you should see a square that continuously animates through various shades of green followed by the word 'PASS'.</p>
<img id="image" style="visibility:hidden" src="resources/animated-10color.gif">
<div id="console"></div>
<canvas id="canvas" style="visibility:hidden"><span style="color:red">FAIL</span></canvas>
