<!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]);
}

function consumeImageBitmap(image, alphaVal, expectedR, expectedG, expectedB, expectedA)
{
    var dstCanvas = document.createElement('canvas');
    dstCanvas.width = width;
    dstCanvas.height = height;
    var dstCtx;
    if (alphaVal == 'true')
        dstCtx = dstCanvas.getContext('bitmaprenderer', { alpha: true });
    else if (alphaVal == 'false')
        dstCtx = dstCanvas.getContext('bitmaprenderer', { alpha: false });
    else
        dstCtx = dstCanvas.getContext('bitmaprenderer');
    dstCtx.transferFromImageBitmap(image);

    var myCanvas = document.createElement('canvas');
    myCanvas.width = width;
    myCanvas.height = height;
    var myCtx = myCanvas.getContext('2d');
    myCtx.drawImage(dstCanvas, 0, 0);
    testCanvas(myCtx, expectedR, expectedG, expectedB, expectedA);
}

promise_test(function() {
    var srcCanvas = document.createElement('canvas');
    srcCanvas.width = width;
    srcCanvas.height = height;
    var ctx = srcCanvas.getContext('2d');
    ctx.fillStyle = 'rgba(0, 255, 0, 0.5)';
    ctx.fillRect(0, 0, width, height);
    return createImageBitmap(srcCanvas).then(function(image) {
        consumeImageBitmap(image, 'false', 0, 127, 0, 255);
    });
}, "Test that an ImageBitmapRenderingContext with alpha disabled makes the canvas opaque");

promise_test(function() {
    var srcCanvas = document.createElement('canvas');
    srcCanvas.width = width;
    srcCanvas.height = height;
    var ctx = srcCanvas.getContext('2d');
    ctx.fillStyle = 'rgba(0, 255, 0, 0.5)';
    ctx.fillRect(0, 0, width, height);
    return createImageBitmap(srcCanvas).then(function(image) {
        consumeImageBitmap(image, 'true', 0, 255, 0, 127);
    });
}, "Test that an ImageBitmapRenderingContext with alpha enabled preserves the alpha");

promise_test(function() {
    var srcCanvas = document.createElement('canvas');
    srcCanvas.width = width;
    srcCanvas.height = height;
    var ctx = srcCanvas.getContext('2d');
    ctx.fillStyle = 'rgba(0, 255, 0, 0.5)';
    ctx.fillRect(0, 0, width, height);
    return createImageBitmap(srcCanvas).then(function(image) {
        consumeImageBitmap(image, '', 0, 255, 0, 127);
    });
}, "Test that the 'alpha' context creation attribute is true by default");

</script>
