| <!DOCTYPE html> |
| <html> |
| <title>createImageBitmap + drawImage test</title> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <script src="/common/canvas-tests.js"></script> |
| <script src="/common/media.js"></script> |
| <script src="/common/namespaces.js"></script> |
| <script src="common.sub.js"></script> |
| <link rel="stylesheet" href="/common/canvas-tests.css"> |
| <body> |
| <script> |
| function testCanvasDisplayingPattern(canvas, width, height) |
| { |
| var tolerance = 10; // for creating ImageBitmap from a video, the tolerance needs to be high |
| const check = (x, y, r, g, b, a) => |
| _assertPixelApprox(canvas, x,y, r,g,b,a, `${x},${y}`, `${r},${g},${b},${a}`, tolerance); |
| check(1 * width / 4, 1 * height / 4, 255,0,0,255); |
| check(3 * width / 4, 1 * height / 4, 0,255,0,255); |
| check(1 * width / 4, 3 * height / 4, 0,0,255,255); |
| check(3 * width / 4, 3 * height / 4, 0,0,0,255); |
| } |
| |
| function testDrawImageBitmap(source, args = [], { resizeWidth = 20, resizeHeight = 20 } = {}) |
| { |
| var canvas = document.createElement("canvas"); |
| canvas.width = resizeWidth; |
| canvas.height = resizeHeight; |
| var ctx = canvas.getContext("2d"); |
| return createImageBitmap(source, ...args).then(imageBitmap => { |
| assert_equals(imageBitmap.width, resizeWidth); |
| assert_equals(imageBitmap.height, resizeHeight); |
| ctx.drawImage(imageBitmap, 0, 0); |
| testCanvasDisplayingPattern(canvas, resizeWidth, resizeHeight); |
| }); |
| } |
| |
| for (let { name, factory } of imageSourceTypes) { |
| promise_test(function() { |
| return factory().then(function(img) { |
| return testDrawImageBitmap(img); |
| }); |
| }, `createImageBitmap from ${name}, and drawImage on the created ImageBitmap`); |
| |
| promise_test(function() { |
| return factory().then(function(img) { |
| const options = { resizeWidth: 10, resizeHeight: 10 }; |
| return testDrawImageBitmap(img, [options], options); |
| }); |
| }, `createImageBitmap from ${name} scaled down, and drawImage on the created ImageBitmap`); |
| |
| promise_test(function() { |
| return factory().then(function(img) { |
| const options = { resizeWidth: 40, resizeHeight: 40 }; |
| return testDrawImageBitmap(img, [options], options); |
| }); |
| }, `createImageBitmap from ${name} scaled up, and drawImage on the created ImageBitmap`); |
| |
| promise_test(function() { |
| return factory().then(function(img) { |
| const options = { resizeWidth: 10, resizeHeight: 40 }; |
| return testDrawImageBitmap(img, [options], options); |
| }); |
| }, `createImageBitmap from ${name} resized, and drawImage on the created ImageBitmap`); |
| |
| promise_test(function() { |
| return factory().then(function(img) { |
| return testDrawImageBitmap(img, [20, 20, -20, -20]); |
| }); |
| }, `createImageBitmap from ${name} with negative sw/sh, and drawImage on the created ImageBitmap`); |
| } |
| </script> |
| </body> |
| </html> |