<body>
    <canvas id="target" width="400" height="400"></canvas>
    <script>
        const targetCanvas = document.getElementById('target');
        const target = targetCanvas.getContext('2d');

        const canvasWidth = targetCanvas.width;
        const canvasHeight = targetCanvas.height

        var sourceCanvas = document.createElement('canvas');
        sourceCanvas.width  = canvasWidth;
        sourceCanvas.height = canvasHeight;

        const source = sourceCanvas.getContext('2d');

        let progressX = 0;
        let progressY = 0;
        const paintSize = 100;

        source.fillStyle = 'green';
        source.fillRect(0, 0, canvasWidth, canvasHeight);
        const imagedata = source.getImageData(0, 0, canvasWidth, canvasHeight);

        function drawLoop() {
            target.putImageData(imagedata, 0, 0, progressX, progressY, paintSize, paintSize);

            progressX += paintSize;
 
            if (progressX + paintSize <= canvasWidth) {
                requestAnimationFrame(drawLoop);
                return;
            }

            if (progressY + paintSize > canvasHeight) {
                if (window.testRunner)
                    testRunner.notifyDone();
                return;
            }

            progressX = 0;
            progressY += paintSize;
            requestAnimationFrame(drawLoop);
        }

        if (window.testRunner)
            testRunner.waitUntilDone();

        requestAnimationFrame(drawLoop);
    </script>
</body>
