blob: be7acb891af504be43e0e621414c07cc9117b807 [file] [log] [blame]
<html>
<head>
<script src="../../resources/js-test.js"></script>
<script src="../../resources/run-after-layout-and-paint.js"></script>
</head>
<body onload="start();">
<canvas id="webgl" width="200" height="200"></canvas>
<script>
/*
* crbug.com/438986
* window.createImageBitmap(HTMLCanvasElement) copies the back buffer of WebGL.
* So createImageBitmap(HTMLCanvasElement) must create transparent ImageBuffer
* 1 frame after WebGL draws contents.
*/
window.jsTestIsAsync = true;
var canvas = document.createElement("canvas");
canvas.width = 200;
canvas.height = 200;
var ctx = canvas.getContext("2d");
function shouldBeGreen(x, y) {
d = ctx.getImageData(x, y, 1, 1).data;
shouldBeTrue("d[0] == 0");
shouldBeTrue("d[1] == 255");
shouldBeTrue("d[2] == 0");
shouldBeTrue("d[3] == 255");
}
function shouldBeTransparent(x, y) {
d = ctx.getImageData(x, y, 1, 1).data;
shouldBeTrue("d[0] == 0");
shouldBeTrue("d[1] == 0");
shouldBeTrue("d[2] == 0");
shouldBeTrue("d[3] == 0");
}
function start() {
debug("Check the imageBitmap of webgl.")
var webgl_canvas = document.getElementById("webgl");
var gl = webgl_canvas.getContext("webgl", {preserveDrawingBuffer: false});
gl.clearColor(0.0, 1.0, 0.0, 1.0);
gl.clear(gl.COLOR_BUFFER_BIT);
createImageBitmapAndCheck(webgl_canvas, false).then(function() {
runAfterLayoutAndPaint(asyncTest);
});
}
function createImageBitmapAndCheck(webgl_canvas, discarded) {
return createImageBitmap(webgl_canvas).then(function (imageBitmap) {
ctx.clearRect(0, 0, 200, 200);
ctx.drawImage(imageBitmap, 0, 0);
if (!discarded) {
shouldBeGreen(50, 50);
shouldBeGreen(150, 150);
} else {
shouldBeTransparent(50, 50);
shouldBeTransparent(150, 150);
}
}, function() {
testFailed("Promise was rejected.");
finishJSTest();
});
}
function asyncTest() {
debug("Check the imageBitmap of webgl in the next frame. drawingBuffer is discarded.")
var webgl_canvas = document.getElementById("webgl");
createImageBitmapAndCheck(webgl_canvas, true).then(function() {
finishJSTest();
});
}
</script>
</body>
</html>