chromium/third_party/blink/web_tests/paint/invalidation/canvas-putImageData.html

<!-- Test for https://bugs.webkit.org/show_bug.cgi?id=46319 -->
<head>
    <script src="resources/text-based-repaint.js"></script>
</head>
<body>
    <canvas id="canvas" width="100" height="100"></canvas>
    <script>
        var canvas = document.getElementById('canvas');
        var ctx = canvas.getContext('2d', {willReadFrequently: true});

        // prepare imagedata
        ctx.fillStyle = "rgb(255, 0, 0)"; ctx.fillRect(0, 0, 100, 100); // red background
        ctx.fillStyle = "rgb(0, 255, 0)"; ctx.fillRect(10, 10, 10, 10); // inset green square
        var imageDataGreen = ctx.getImageData(10, 10, 10, 10);
        var imageDataRedWithInsetGreen = ctx.getImageData(0, 0, 30, 30);

        // clear canvas to dark green
        ctx.fillStyle = "rgb(0, 128, 0)";
        ctx.fillRect(0, 0, 100, 100);

        // fill target locations with dark red
        ctx.fillStyle = "rgb(128, 0, 0)";
        ctx.fillRect(0, 0, 10, 10);
        ctx.fillRect(40, 40, 10, 10);
        ctx.fillRect(80, 80, 10, 10);
        window.testIsAsync = true;

        function repaintTest()
        {
            // patch up red squares with putImageData
            ctx.putImageData(imageDataGreen, 0, 0);
            ctx.putImageData(imageDataGreen, 40, 40);
            ctx.putImageData(imageDataRedWithInsetGreen, 70, 70, 10, 10, 10, 10);
            // Because canvas invalidations are processed at the end of the current task,
            // the repaint test has to end in a subsequent task in order to capture the repaint.
            setTimeout(finishRepaintTest, 0);
        }

        window.onload = runRepaintAndPixelTest;
    </script>
</body>