<!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) {
        var bitmapCanvas = document.createElement('canvas');
        bitmapCanvas.width = width;
        bitmapCanvas.height = height;
        var offscreenCanvas = bitmapCanvas.transferControlToOffscreen();
        var bitmapCtx = offscreenCanvas.getContext('bitmaprenderer');
        bitmapCtx.transferFromImageBitmap(greenImage);

        // Make sure the bitmap renderer canvas is filled correctly.
        var myCanvas = document.createElement('canvas');
        var myCtx = myCanvas.getContext('bitmaprenderer');
        myCtx.transferFromImageBitmap(offscreenCanvas.transferToImageBitmap());
        testCanvas(myCanvas, 0, 255, 0, 255);

        // Test that after transfering for second time to ImageBitmap produces
        // a black bitmap of the same size
        var myCanvas2 = document.createElement('canvas');
        var myCtx2 = myCanvas2.getContext('bitmaprenderer');
        myCtx2.transferFromImageBitmap(offscreenCanvas.transferToImageBitmap());
        testCanvas(myCanvas2, 0, 0, 0, 0);
    }

    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);

    return Promise.all([
        createImageBitmap(greenCanvas),
    ]).then(([greenImage]) => {
        testTransferFromImageBitmapNullability(greenImage);
    });
},'Test that transferToImageBitmap works and that resets the imagebitmap to black');

</script>
