<!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(ctx, r, g, b, a)
{
    var color = ctx.getImageData(5, 5, 1, 1).data;
    assert_array_equals(color, [r, g, b, a]);
}

promise_test(function() {
    function testTransferFromImageBitmapNullability(greenImage) {
        var bitmapCanvas = new OffscreenCanvas(width,height);
        var bitmapCtx = bitmapCanvas.getContext('bitmaprenderer');
        bitmapCtx.transferFromImageBitmap(greenImage);

        // Make sure the bitmap renderer canvas is filled correctly.
        var pngImage = document.getElementById("img");
        bitmapCanvas.convertToBlob().then(function(blob){
          pngImage.src = URL.createObjectURL(blob);
          var myCanvasToTest = document.createElement('canvas');
          myCanvasToTest.width = width;
          myCanvasToTest.height = height;
          var myCtxToTest = myCanvasToTest.getContext('2d');
          myCtxToTest.drawImage(pngImage, 0, 0);
          testCanvas(myCtxToTest, 0, 255, 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);

    return Promise.all([
        createImageBitmap(greenCanvas),
    ]).then(([greenImage]) => {
        testTransferFromImageBitmapNullability(greenImage);
    });
},'Test that transferToBlob works and produce the expected image');

</script>
