| OLD | NEW |
| 1 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"> | 1 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"> |
| 2 <html> | 2 <html> |
| 3 <head> | 3 <head> |
| 4 <script src="../../resources/js-test.js"></script> | 4 <script src="../../resources/js-test.js"></script> |
| 5 </head> | 5 </head> |
| 6 <body> | 6 <body> |
| 7 <script> | 7 <script> |
| 8 | 8 |
| 9 description("Ensure correct behavior of drawImage with ImageBitmaps along with f
lipY option."); | 9 description("Ensure correct behavior of drawImage with ImageBitmaps along with f
lipY option."); |
| 10 window.jsTestIsAsync = true; | 10 window.jsTestIsAsync = true; |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 91 | 91 |
| 92 function clearContext(context) { | 92 function clearContext(context) { |
| 93 context.clearRect(0, 0, 50, 50); | 93 context.clearRect(0, 0, 50, 50); |
| 94 } | 94 } |
| 95 | 95 |
| 96 var bitmap; | 96 var bitmap; |
| 97 var image; | 97 var image; |
| 98 var testBitmap; // this is an ImageBitmap that is uncropped. We use this to test
createImageBitmap(testBitmap) | 98 var testBitmap; // this is an ImageBitmap that is uncropped. We use this to test
createImageBitmap(testBitmap) |
| 99 var d; // image.imageData | 99 var d; // image.imageData |
| 100 var elements; | 100 var elements; |
| 101 var options; | 101 var imageOrientationOptions; |
| 102 var premultiplyAlphaOptions; |
| 103 var optionIndexArray; |
| 102 | 104 |
| 103 var imageWidth = 20; | 105 var imageWidth = 20; |
| 104 var imageHeight = 20; | 106 var imageHeight = 20; |
| 105 | 107 |
| 106 // Draw to an auxillary canvas. | 108 // Draw to an auxillary canvas. |
| 107 var aCanvas = document.createElement("canvas"); | 109 var aCanvas = document.createElement("canvas"); |
| 108 aCanvas.width = imageWidth; | 110 aCanvas.width = imageWidth; |
| 109 aCanvas.height = imageHeight; | 111 aCanvas.height = imageHeight; |
| 110 var aCtx = aCanvas.getContext("2d"); | 112 var aCtx = aCanvas.getContext("2d"); |
| 111 drawPattern(aCtx); | 113 drawPattern(aCtx); |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 151 xhr.responseType = 'blob'; | 153 xhr.responseType = 'blob'; |
| 152 xhr.send(); | 154 xhr.send(); |
| 153 xhr.onload = function() { | 155 xhr.onload = function() { |
| 154 blob = xhr.response; | 156 blob = xhr.response; |
| 155 blobLoaded = true; | 157 blobLoaded = true; |
| 156 loaded(); | 158 loaded(); |
| 157 } | 159 } |
| 158 | 160 |
| 159 function loaded() { | 161 function loaded() { |
| 160 if (imageLoaded && imageBitmapLoaded && blobLoaded) { | 162 if (imageLoaded && imageBitmapLoaded && blobLoaded) { |
| 161 // check all elements and all options | 163 // check all elements |
| 162 elements = [image, aCanvas, d, testBitmap, blob]; | 164 elements = [image, aCanvas, d, testBitmap, blob]; |
| 163 options = ["none", "flipY"]; | 165 imageOrientationOptions = ["none", "flipY", "invalid"]; |
| 164 // elements = [image, aCanvas, d, testBitmap, blob]; | 166 premultiplyAlphaOptions = ["default", "none", "invalid"]; |
| 167 optionIndexArray = [[0, 0], [0, 1], [0, 2], |
| 168 [1, 0], [1, 1], [1, 2], |
| 169 [2, 0], [2, 1], [2, 2]]; |
| 165 // wait for callback to finish before each check to ensure synchronous b
ehavior | 170 // wait for callback to finish before each check to ensure synchronous b
ehavior |
| 166 nextCheck(0, 0); | 171 nextCheck(0, 0); |
| 167 } | 172 } |
| 168 } | 173 } |
| 169 | 174 |
| 170 function nextCheck(elementIndex, optionIndex) { | 175 function nextCheck(elementIndex, optionIndex) { |
| 171 if (elementIndex == elements.length) { | 176 if (elementIndex == elements.length) { |
| 172 finishJSTest(); | 177 finishJSTest(); |
| 173 return; | 178 return; |
| 174 } | 179 } |
| 175 var element = elements[elementIndex]; | 180 var element = elements[elementIndex]; |
| 181 var optionIndex1 = optionIndexArray[optionIndex][0]; |
| 182 var optionIndex2 = optionIndexArray[optionIndex][1]; |
| 176 imageBitmaps = {}; | 183 imageBitmaps = {}; |
| 177 debug("Checking " + jsWrapperClass(element) + " with imageOrientation: " + o
ptions[optionIndex] + "."); | 184 debug("Checking " + jsWrapperClass(element) + " with imageOrientation: " + i
mageOrientationOptions[optionIndex1] + " with premultiplyAlphaOption: " + premul
tiplyAlphaOptions[optionIndex2] + "."); |
| 178 var p1 = createImageBitmap(element, {imageOrientation: options[optionIndex]}
).then(function (image) { imageBitmaps.noCrop = image }); | 185 var p1 = createImageBitmap(element, {imageOrientation: imageOrientationOptio
ns[optionIndex1], premultiplyAlpha: premultiplyAlphaOptions[optionIndex2]}).then
(function (image) { imageBitmaps.noCrop = image }); |
| 179 var p2 = createImageBitmap(element, 0, 0, 10, 10, {imageOrientation: options
[optionIndex]}).then(function (image) { imageBitmaps.crop = image }); | 186 var p2 = createImageBitmap(element, 0, 0, 10, 10, {imageOrientation: imageOr
ientationOptions[optionIndex1], premultiplyAlpha: premultiplyAlphaOptions[option
Index2]}).then(function (image) { imageBitmaps.crop = image }); |
| 180 var p3 = createImageBitmap(element, 5, 5, 10, 10, {imageOrientation: options
[optionIndex]}).then(function (image) { imageBitmaps.cropCenter = image }); | 187 var p3 = createImageBitmap(element, 5, 5, 10, 10, {imageOrientation: imageOr
ientationOptions[optionIndex1], premultiplyAlpha: premultiplyAlphaOptions[option
Index2]}).then(function (image) { imageBitmaps.cropCenter = image }); |
| 181 var p4 = createImageBitmap(element, 10, 10, 10, 10, {imageOrientation: optio
ns[optionIndex]}).then(function (image) { imageBitmaps.cropRight = image }); | 188 var p4 = createImageBitmap(element, 10, 10, 10, 10, {imageOrientation: image
OrientationOptions[optionIndex1], premultiplyAlpha: premultiplyAlphaOptions[opti
onIndex2]}).then(function (image) { imageBitmaps.cropRight = image }); |
| 182 var p5 = createImageBitmap(element, -10, -10, 60, 60, {imageOrientation: opt
ions[optionIndex]}).then(function (image) { imageBitmaps.overCrop = image }); | 189 var p5 = createImageBitmap(element, -10, -10, 60, 60, {imageOrientation: ima
geOrientationOptions[optionIndex1], premultiplyAlpha: premultiplyAlphaOptions[op
tionIndex2]}).then(function (image) { imageBitmaps.overCrop = image }); |
| 183 var p6 = createImageBitmap(element, 10, 10, 50, 50, {imageOrientation: optio
ns[optionIndex]}).then(function (image) { imageBitmaps.overCropRight = image }); | 190 var p6 = createImageBitmap(element, 10, 10, 50, 50, {imageOrientation: image
OrientationOptions[optionIndex1], premultiplyAlpha: premultiplyAlphaOptions[opti
onIndex2]}).then(function (image) { imageBitmaps.overCropRight = image }); |
| 184 var p7 = createImageBitmap(element, 10, 10, -10, -10, {imageOrientation: opt
ions[optionIndex]}).then(function (image) { imageBitmaps.negativeCrop = image })
; | 191 var p7 = createImageBitmap(element, 10, 10, -10, -10, {imageOrientation: ima
geOrientationOptions[optionIndex1], premultiplyAlpha: premultiplyAlphaOptions[op
tionIndex2]}).then(function (image) { imageBitmaps.negativeCrop = image }); |
| 185 var p8 = createImageBitmap(element, -30, -30, 30, 30, {imageOrientation: opt
ions[optionIndex]}).then(function (image) { imageBitmaps.empty = image }); | 192 var p8 = createImageBitmap(element, -30, -30, 30, 30, {imageOrientation: ima
geOrientationOptions[optionIndex1], premultiplyAlpha: premultiplyAlphaOptions[op
tionIndex2]}).then(function (image) { imageBitmaps.empty = image }); |
| 186 var p9 = createImageBitmap(element, 40, 30, 30, 30, {imageOrientation: optio
ns[optionIndex]}).then(function (image) { imageBitmaps.emptyTwo = image }); | 193 var p9 = createImageBitmap(element, 40, 30, 30, 30, {imageOrientation: image
OrientationOptions[optionIndex1], premultiplyAlpha: premultiplyAlphaOptions[opti
onIndex2]}).then(function (image) { imageBitmaps.emptyTwo = image }); |
| 187 Promise.all([p1, p2, p3, p4, p5, p6, p7, p8, p9]).then(function() { | 194 Promise.all([p1, p2, p3, p4, p5, p6, p7, p8, p9]).then(function() { |
| 188 checkNoCrop(imageBitmaps.noCrop, options[optionIndex]); | 195 checkNoCrop(imageBitmaps.noCrop, imageOrientationOptions[optionIndex1]); |
| 189 checkCrop(imageBitmaps.crop, options[optionIndex]); | 196 checkCrop(imageBitmaps.crop, imageOrientationOptions[optionIndex1]); |
| 190 checkCropCenter(imageBitmaps.cropCenter, options[optionIndex]); | 197 checkCropCenter(imageBitmaps.cropCenter, imageOrientationOptions[optionI
ndex1]); |
| 191 checkCropRight(imageBitmaps.cropRight, options[optionIndex]); | 198 checkCropRight(imageBitmaps.cropRight, imageOrientationOptions[optionInd
ex1]); |
| 192 checkOverCrop(imageBitmaps.overCrop, options[optionIndex]); | 199 checkOverCrop(imageBitmaps.overCrop, imageOrientationOptions[optionIndex
1]); |
| 193 checkOverCropRight(imageBitmaps.overCropRight, options[optionIndex]); | 200 checkOverCropRight(imageBitmaps.overCropRight, imageOrientationOptions[o
ptionIndex1]); |
| 194 checkCrop(imageBitmaps.negativeCrop, options[optionIndex]); | 201 checkCrop(imageBitmaps.negativeCrop, imageOrientationOptions[optionIndex
1]); |
| 195 checkEmpty(imageBitmaps.empty, options[optionIndex]); | 202 checkEmpty(imageBitmaps.empty, imageOrientationOptions[optionIndex1]); |
| 196 checkEmpty(imageBitmaps.emptyTwo, options[optionIndex]); | 203 checkEmpty(imageBitmaps.emptyTwo, imageOrientationOptions[optionIndex1])
; |
| 197 if (optionIndex == 3) | 204 if (optionIndex == optionIndexArray.length - 1) |
| 198 nextCheck(elementIndex + 1, 0); | 205 nextCheck(elementIndex + 1, 0); |
| 199 else | 206 else |
| 200 nextCheck(elementIndex, optionIndex + 1); | 207 nextCheck(elementIndex, optionIndex + 1); |
| 201 }, shouldNotBeCalled); | 208 }, function() { |
| 209 // when the options are invalid, we expect the promise to be rejected. |
| 210 if ((imageOrientationOptions[optionIndex1] != "none" && imageOrientation
Options[optionIndex1] != "flipY") || |
| 211 (premultiplyAlphaOptions[optionIndex2] != "default" && premultiplyAl
phaOptions[optionIndex2] != "none")) { |
| 212 testPassed("createImageBitmap with invalid options are rejected"); |
| 213 if (optionIndex == optionIndexArray.length - 1) |
| 214 nextCheck(elementIndex + 1, 0); |
| 215 else |
| 216 nextCheck(elementIndex, optionIndex + 1); |
| 217 } else { |
| 218 shouldNotBeCalled(); |
| 219 } |
| 220 }); |
| 202 } | 221 } |
| 203 | 222 |
| 204 function checkNoCrop(imageBitmap, option) { | 223 function checkNoCrop(imageBitmap, option) { |
| 205 debug("Check no crop."); | 224 debug("Check no crop."); |
| 206 bitmap = imageBitmap; | 225 bitmap = imageBitmap; |
| 207 shouldBeType("bitmap", "ImageBitmap"); | 226 shouldBeType("bitmap", "ImageBitmap"); |
| 208 shouldBe("bitmap.width", "imageWidth"); | 227 shouldBe("bitmap.width", "imageWidth"); |
| 209 shouldBe("bitmap.height", "imageHeight"); | 228 shouldBe("bitmap.height", "imageHeight"); |
| 210 | 229 |
| 211 clearContext(ctx); | 230 clearContext(ctx); |
| (...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 414 bitmap = imageBitmap; | 433 bitmap = imageBitmap; |
| 415 shouldBeType("bitmap", "ImageBitmap"); | 434 shouldBeType("bitmap", "ImageBitmap"); |
| 416 shouldBe("bitmap.width", "60"); | 435 shouldBe("bitmap.width", "60"); |
| 417 shouldBe("bitmap.height", "60"); | 436 shouldBe("bitmap.height", "60"); |
| 418 | 437 |
| 419 clearContext(ctx); | 438 clearContext(ctx); |
| 420 ctx.drawImage(imageBitmap, 0, 0); | 439 ctx.drawImage(imageBitmap, 0, 0); |
| 421 if (option == "flipY" || option == "bottomLeft") { | 440 if (option == "flipY" || option == "bottomLeft") { |
| 422 shouldBeClear(1, 59); | 441 shouldBeClear(1, 59); |
| 423 shouldBeClear(9, 51); | 442 shouldBeClear(9, 51); |
| 424 shouldBeBlue(10, 30); | 443 shouldBeBlue(11, 31); |
| 425 shouldBeBlue(19, 39); | 444 shouldBeBlue(19, 39); |
| 426 shouldBeBlack(20, 30); | 445 shouldBeBlack(21, 31); |
| 427 shouldBeBlack(29, 39); | 446 shouldBeBlack(29, 39); |
| 428 shouldBeRed(10, 40); | 447 shouldBeRed(11, 41); |
| 429 shouldBeRed(19, 49); | 448 shouldBeRed(19, 49); |
| 430 shouldBeGreen(20, 40); | 449 shouldBeGreen(21, 41); |
| 431 shouldBeGreen(29, 49); | 450 shouldBeGreen(29, 49); |
| 432 shouldBeClear(31, 59); | 451 shouldBeClear(31, 59); |
| 433 shouldBeClear(1, 29); | 452 shouldBeClear(1, 29); |
| 434 shouldBeClear(30, 30); | 453 shouldBeClear(31, 31); |
| 435 } else { | 454 } else { |
| 436 shouldBeClear(1, 1); | 455 shouldBeClear(1, 1); |
| 437 shouldBeClear(9, 9); | 456 shouldBeClear(9, 9); |
| 438 shouldBeRed(11, 11); | 457 shouldBeRed(11, 11); |
| 439 shouldBeRed(19, 19); | 458 shouldBeRed(19, 19); |
| 440 shouldBeGreen(21, 19); | 459 shouldBeGreen(21, 19); |
| 441 shouldBeBlue(19, 21); | 460 shouldBeBlue(19, 21); |
| 442 shouldBeBlack(21, 21); | 461 shouldBeBlack(21, 21); |
| 443 shouldBeBlack(29, 29); | 462 shouldBeBlack(29, 29); |
| 444 shouldBeClear(32, 1); | 463 shouldBeClear(32, 1); |
| 445 shouldBeClear(1, 32); | 464 shouldBeClear(1, 32); |
| 446 shouldBeClear(32, 32); | 465 shouldBeClear(32, 32); |
| 447 } | 466 } |
| 448 | 467 |
| 449 clearContext(ctx); | 468 // comment out this part for now due to crbug.com/578889 |
| 469 /*clearContext(ctx); |
| 450 ctx.drawImage(imageBitmap, 0, 0, 30, 30); | 470 ctx.drawImage(imageBitmap, 0, 0, 30, 30); |
| 451 if (option == "flipY" || option == "bottomLeft") { | 471 if (option == "flipY" || option == "bottomLeft") { |
| 452 shouldBeClear(1, 29); | 472 shouldBeClear(1, 29); |
| 453 shouldBeClear(4, 25); | 473 shouldBeClear(4, 25); |
| 454 shouldBeBlue(5, 15); | 474 shouldBeBlue(5, 15); |
| 455 shouldBeBlue(9, 19); | 475 shouldBeBlue(9, 19); |
| 456 shouldBeBlack(10, 15); | 476 shouldBeBlack(10, 15); |
| 457 shouldBeBlack(14, 19); | 477 shouldBeBlack(14, 19); |
| 458 shouldBeRed(5, 21); | 478 shouldBeRed(5, 21); |
| 459 shouldBeRed(9, 24); | 479 shouldBeRed(9, 24); |
| 460 shouldBeGreen(11, 21); | 480 shouldBeGreen(11, 21); |
| 461 shouldBeGreen(14, 24); | 481 shouldBeGreen(14, 24); |
| 462 shouldBeClear(16, 29); | 482 shouldBeClear(16, 29); |
| 463 shouldBeClear(1, 14); | 483 shouldBeClear(1, 14); |
| 464 shouldBeClear(15, 15); | 484 shouldBeClear(15, 15); |
| 465 } else { | 485 } else { |
| 466 shouldBeClear(1, 1); | 486 shouldBeClear(1, 1); |
| 467 shouldBeClear(4, 4); | 487 shouldBeClear(4, 4); |
| 468 shouldBeRed(6, 6); | 488 shouldBeRed(6, 6); |
| 469 shouldBeRed(9, 9); | 489 shouldBeRed(9, 9); |
| 470 shouldBeGreen(11, 9); | 490 shouldBeGreen(11, 9); |
| 471 shouldBeBlue(9, 11); | 491 shouldBeBlue(9, 11); |
| 472 shouldBeBlack(11, 11); | 492 shouldBeBlack(11, 11); |
| 473 shouldBeBlack(14, 14); | 493 shouldBeBlack(14, 14); |
| 474 shouldBeClear(16, 1); | 494 shouldBeClear(16, 1); |
| 475 shouldBeClear(1, 16); | 495 shouldBeClear(1, 16); |
| 476 shouldBeClear(16, 16); | 496 shouldBeClear(16, 16); |
| 477 } | 497 }*/ |
| 478 } | 498 } |
| 479 | 499 |
| 480 function checkOverCropRight(imageBitmap, option) { | 500 function checkOverCropRight(imageBitmap, option) { |
| 481 debug("Check over crop right."); | 501 debug("Check over crop right."); |
| 482 bitmap = imageBitmap; | 502 bitmap = imageBitmap; |
| 483 shouldBe("bitmap.width", "50"); | 503 shouldBe("bitmap.width", "50"); |
| 484 shouldBe("bitmap.height", "50"); | 504 shouldBe("bitmap.height", "50"); |
| 485 | 505 |
| 486 clearContext(ctx); | 506 clearContext(ctx); |
| 487 ctx.drawImage(imageBitmap, 0, 0); | 507 ctx.drawImage(imageBitmap, 0, 0); |
| 488 if (option == "flipY" || option == "bottomLeft") { | 508 if (option == "flipY" || option == "bottomLeft") { |
| 489 shouldBeBlack(1, 40); | 509 shouldBeBlack(1, 40); |
| 490 shouldBeBlack(9, 49); | 510 shouldBeBlack(9, 49); |
| 491 shouldBeClear(10, 49); | 511 shouldBeClear(10, 49); |
| 492 shouldBeClear(1, 39); | 512 shouldBeClear(1, 39); |
| 493 shouldBeClear(10, 40); | 513 shouldBeClear(10, 40); |
| 494 } else { | 514 } else { |
| 495 shouldBeBlack(1, 1); | 515 shouldBeBlack(1, 1); |
| 496 shouldBeBlack(9, 9); | 516 shouldBeBlack(9, 9); |
| 497 shouldBeClear(11, 11); | 517 shouldBeClear(11, 11); |
| 498 shouldBeClear(1, 11); | 518 shouldBeClear(1, 11); |
| 499 shouldBeClear(11, 1); | 519 shouldBeClear(11, 1); |
| 500 } | 520 } |
| 501 | 521 |
| 502 clearContext(ctx); | 522 // comment out this part for now due to crbug.com/578889 |
| 523 /*clearContext(ctx); |
| 503 ctx.drawImage(imageBitmap, 0, 0, 20, 20); | 524 ctx.drawImage(imageBitmap, 0, 0, 20, 20); |
| 504 if (option == "flipY" || option == "bottomLeft") { | 525 if (option == "flipY" || option == "bottomLeft") { |
| 505 shouldBeBlack(0, 16); | 526 shouldBeBlack(0, 16); |
| 506 shouldBeBlack(3, 19); | 527 shouldBeBlack(3, 19); |
| 507 shouldBeClear(4, 19); | 528 shouldBeClear(4, 19); |
| 508 shouldBeClear(0, 15); | 529 shouldBeClear(0, 15); |
| 509 shouldBeClear(4, 15); | 530 shouldBeClear(4, 15); |
| 510 } else { | 531 } else { |
| 511 shouldBeBlack(1, 1); | 532 shouldBeBlack(1, 1); |
| 512 shouldBeBlack(3, 3); | 533 shouldBeBlack(3, 3); |
| 513 shouldBeClear(5, 5); | 534 shouldBeClear(5, 5); |
| 514 shouldBeClear(1, 5); | 535 shouldBeClear(1, 5); |
| 515 shouldBeClear(5, 1); | 536 shouldBeClear(5, 1); |
| 516 } | 537 }*/ |
| 517 | 538 |
| 518 clearContext(ctx); | 539 clearContext(ctx); |
| 519 ctx.drawImage(imageBitmap, 10, 10, 20, 20, 0, 0, 20, 20); | 540 ctx.drawImage(imageBitmap, 10, 10, 20, 20, 0, 0, 20, 20); |
| 520 if (option == "flipY" || option == "bottomLeft") { | 541 if (option == "flipY" || option == "bottomLeft") { |
| 521 shouldBeClear(1, 1); | 542 shouldBeClear(1, 1); |
| 522 shouldBeClear(3, 3); | 543 shouldBeClear(3, 3); |
| 523 shouldBeClear(5, 5); | 544 shouldBeClear(5, 5); |
| 524 shouldBeClear(1, 5); | 545 shouldBeClear(1, 5); |
| 525 shouldBeClear(5, 1); | 546 shouldBeClear(5, 1); |
| 526 } else { | 547 } else { |
| (...skipping 17 matching lines...) Expand all Loading... |
| 544 clearContext(ctx); | 565 clearContext(ctx); |
| 545 ctx.drawImage(imageBitmap, 0, 0); | 566 ctx.drawImage(imageBitmap, 0, 0); |
| 546 shouldBeClear(1, 1); | 567 shouldBeClear(1, 1); |
| 547 shouldBeClear(9, 9); | 568 shouldBeClear(9, 9); |
| 548 shouldBeClear(11, 11); | 569 shouldBeClear(11, 11); |
| 549 shouldBeClear(22, 22); | 570 shouldBeClear(22, 22); |
| 550 } | 571 } |
| 551 </script> | 572 </script> |
| 552 </body> | 573 </body> |
| 553 </html> | 574 </html> |
| OLD | NEW |