<!DOCTYPE html>
<meta charset="utf-8">
<title>Canvas's ImageBitmapRenderingContext test</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<link rel="help" href="https://html.spec.whatwg.org/multipage/scripting.html#the-imagebitmap-rendering-context">
<script>
var width = 10;
var height = 10;

function testCanvas(bitmapCanvas, r, g, b, a)
{
    var myCanvas = document.createElement('canvas');
    myCanvas.width = width;
    myCanvas.height = height;
    var myCtx = myCanvas.getContext('2d');
    myCtx.drawImage(bitmapCanvas, 0, 0);
    var color = myCtx.getImageData(5, 5, 1, 1).data;
    assert_array_equals(color, [r, g, b, a]);
}

promise_test(function() {
    function testTransferFromImageBitmapNullability(greenImage, redImage) {
        var bitmapCanvas = document.createElement('canvas');
        bitmapCanvas.width = width;
        bitmapCanvas.height = height;
        var bitmapCtx = bitmapCanvas.getContext('bitmaprenderer');
        bitmapCtx.transferFromImageBitmap(greenImage);

        // Make sure the bitmap renderer canvas is filled correctly.
        testCanvas(bitmapCanvas, 0, 255, 0, 255);

        // Test if passing null resets the bitmap renderer canvas.
        // Drawing the resetted canvas cannot change the destination canvas.
        bitmapCtx.transferFromImageBitmap(null);
        testCanvas(bitmapCanvas, 0, 0, 0, 0);

        // Test if we can redraw the bitmap canvas correctly after reset.
        bitmapCtx.transferFromImageBitmap(redImage);
        testCanvas(bitmapCanvas, 255, 0, 0, 255);
    }

    var greenCanvas = document.createElement('canvas');
    greenCanvas.width = width;
    greenCanvas.height = height;
    var greenCtx = greenCanvas.getContext('2d');
    greenCtx.fillStyle = '#0f0';
    greenCtx.fillRect(0, 0, width, height);

    var redCanvas = document.createElement('canvas');
    redCanvas.width = width;
    redCanvas.height = height;
    var redCtx = redCanvas.getContext('2d');
    redCtx.fillStyle = '#f00';
    redCtx.fillRect(0, 0, width, height);

    return Promise.all([
        createImageBitmap(greenCanvas),
        createImageBitmap(redCanvas),
    ]).then(([greenImage, redImage]) => {
        testTransferFromImageBitmapNullability(greenImage, redImage);
    });
},'Test that transferFromImageBitmap(null) discards the previously transferred image');

</script>
