1 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
4 <script src="../js/resources/js-test-pre.js"></script>
8 description("Ensure correct behavior of createImageBitmap for invalid inputs.");
9 window.jsTestIsAsync = true;
11 var InvalidStateError = "InvalidStateError: An attempt was made to use an object that is not, or is no longer, usable.";
12 var TypeError = "TypeError: Type error";
13 var IndexSizeError = "IndexSizeError: Index or size was negative, or greater than the allowed value.";
16 var testBitmap; // an ImageBitmap that is uncropped. We use this to test createImageBitmap(testBitmap)
17 var d; // image.imageData
21 // Draw to an auxillary canvas.
22 var aCanvas = document.createElement("canvas");
23 aCanvas.setAttribute("width", "200");
24 aCanvas.setAttribute("height", "200");
25 var aCtx = aCanvas.getContext("2d");
28 image.onload = imageLoaded;
31 shouldThrow("createImageBitmap(image)", "InvalidStateError");
32 image.src = aCanvas.toDataURL();
34 video = document.createElement("video");
35 video.addEventListener("canplaythrough", videoLoaded, false);
38 shouldThrow("createImageBitmap(video)", "InvalidStateError");
39 video.src = "../../compositing/resources/video.ogv";
41 var imageLoaded = false;
42 var videoLoaded = false;
43 var imageBitmapLoaded = false;
44 var blobLoaded = false;
45 var invalidBlobLoaded = false;
47 function imageLoaded() {
48 createImageBitmap(image).then(imageBitmapLoadedCallback, function() {
49 testFailed("Promise was rejected.");
52 d = aCtx.getImageData(0, 0, 200, 200);
57 function videoLoaded() {
62 function imageBitmapLoadedCallback(imageBitmap) {
63 testBitmap = imageBitmap;
64 imageBitmapLoaded = true;
68 var xhr = new XMLHttpRequest();
69 xhr.open("GET", 'resources/pattern.png');
70 xhr.responseType = 'blob';
72 xhr.onload = function() {
78 var xhr2 = new XMLHttpRequest();
79 xhr2.open("GET", 'resources/repaint.js');
80 xhr2.responseType = 'blob';
82 xhr2.onload = function() {
83 invalidBlob = xhr2.response;
84 invalidBlobLoaded = true;
89 if (imageLoaded && videoLoaded && imageBitmapLoaded && blobLoaded && invalidBlobLoaded) {
90 shouldThrow("createImageBitmap(undefined)", "TypeError");
92 shouldThrow("createImageBitmap(image, 0, 0, 10, 0)", "IndexSizeError");
93 shouldThrow("createImageBitmap(image, 0, 0, 0, 10)", "IndexSizeError");
95 shouldThrow("createImageBitmap(video, 0, 0, 10, 0)", "IndexSizeError");
96 shouldThrow("createImageBitmap(video, 0, 0, 0, 10)", "IndexSizeError");
98 shouldThrow("createImageBitmap(aCanvas, 0, 0, 10, 0)", "IndexSizeError");
99 shouldThrow("createImageBitmap(aCanvas, 0, 0, 0, 10)", "IndexSizeError");
101 shouldThrow("createImageBitmap(d, 0, 0, 10, 0)", "IndexSizeError");
102 shouldThrow("createImageBitmap(d, 0, 0, 0, 10)", "IndexSizeError");
104 shouldThrow("createImageBitmap(aCtx, 0, 0, 10, 0)", "IndexSizeError");
105 shouldThrow("createImageBitmap(aCtx, 0, 0, 0, 10)", "IndexSizeError");
107 shouldThrow("createImageBitmap(testBitmap, 0, 0, 10, 0)", "IndexSizeError");
108 shouldThrow("createImageBitmap(testBitmap, 0, 0, 0, 10)", "IndexSizeError");
110 shouldThrow("createImageBitmap(blob, 0, 0, 10, 0)", "IndexSizeError");
111 shouldThrow("createImageBitmap(blob, 0, 0, 0, 10)", "IndexSizeError");
113 createImageBitmap(invalidBlob).then(function() {
114 testFailed("Invalid blob fulfilled.");
117 testPassed("createImageBitmap(invalidBlob) was rejected.");