 <style>
     div {
        width: 100px;
        height: 100px;
    }
    canvas {
        width: 100px;
        height: 100px;
        background-color: black;
    }
    img {
        max-width: 100%;
        max-height: 100%;
    }
</style>
<body>
    <p>This tests calling decode() for a animated image which is also an element in the DOM tree.</p>
    <canvas></canvas>
    <div></div>
    <script>
        if (window.internals && window.testRunner) {
            internals.clearMemoryCache();
            internals.settings.setWebkitImageReadyEventEnabled(true);
            testRunner.waitUntilDone();
        }

        var image = new Image;
        var parent = document.querySelector("div");
        parent.appendChild(image);

        image.onload = (() => {
            if (window.internals && window.testRunner) {
                // Force layout and display so the image gets drawn. The image will draw its red frame.
                document.body.offsetHeight;
                testRunner.display();

                // Wait till decoding the next (green) frame finishes and the animation advances to it.
                image.addEventListener("webkitImageFrameReady", function() {
                    setTimeout(function() {
                        // Request decoding the next (blue) frame. Wait till decoding finishes and the
                        // animation advances to it.
                        image.decode().then(() => {
                            var canvas = document.querySelector("canvas");
                            var context = canvas.getContext("2d");
                            context.drawImage(image, 0, 0, canvas.width, canvas.height);
                            parent.remove();
                            testRunner.notifyDone();
                        });
                    }, 0);
                });
            }
        });
        image.src = "resources/animated-red-green-blue-repeat-2.gif";
    </script>
</body>
