var RGBAValues = [[42,142,23,148], [234,165,177,91], [74,228,75,195], [140,108,73,65], [25,177,3,201], [127,104,12,199], [196,93,240,131], [250,121,231,189], [175,131,215,190], [145,122,166,70], [18,196,210,162], [225,1,90,188], [223,216,182,233], [115,48,168,56], [50,206,198,199], [152,28,70,130], [176,134,133,51], [148,46,43,144], [78,171,141,95], [24,177,102,110], [0,27,127,91], [31,221,41,170], [85,7,218,146], [65,30,198,238], [121,56,123,88], [246,39,140,146], [174,195,254,149], [29,153,92,116], [17,240,5,111], [38,162,84,143], [237,159,201,244], [93,68,14,246], [143,142,82,221], [187,215,243,154], [24,121,220,53], [80,153,151,219], [202,241,250,191]]; function createOneTest(rgbaValue) { return new Promise(function(resolve, reject) { var tolerance = 5; var r = rgbaValue[0]; var g = rgbaValue[1]; var b = rgbaValue[2]; var a = rgbaValue[3]; var imageData = new ImageData(new Uint8ClampedArray([r, g, b, a]), 1, 1); var newImageData; createImageBitmap(imageData).then( function(imageBitmap) { var context = document.createElement("canvas").getContext("2d"); context.drawImage(imageBitmap, 0, 0); newImageData = context.getImageData(0, 0, 1, 1); var newR = newImageData.data[0]; var newG = newImageData.data[1]; var newB = newImageData.data[2]; var newA = newImageData.data[3]; var isTheSame = Math.abs(r - newR) <= tolerance && Math.abs(g - newG) <= tolerance && Math.abs(b - newB) <= tolerance && Math.abs(a - newA) <= tolerance; ok(isTheSame, "newImageData(" + newR + "," + newG + "," + newB + "," + newA + ") should equal to imageData(" + r + "," + g + "," + b + "," + a + ")." + "Premultiplied Alpha is handled while creating ImageBitmap from ImageData."); if (isTheSame) { resolve(); } else { reject(); } }, function() { reject(); } ); }); } function testBug1239752() { var tests = []; for (var i = 0; i < RGBAValues.length; ++i) { tests.push(createOneTest(RGBAValues[i])); } return Promise.all(tests); }