Bug 1266808 - throw exception when canvas.drawImage passed closed ImageBitmap r=baku

Fixed breakages with clipped areas disjoint to image
Fixed text case that didn't expect exception
Fixed coding style

Differential Revision: https://phabricator.services.mozilla.com/D31048
This commit is contained in:
aardgoose 2020-07-06 12:38:44 +00:00
Родитель 63856c61b2
Коммит 61eaafbca1
3 изменённых файлов: 8 добавлений и 4 удалений

Просмотреть файл

@ -4422,6 +4422,9 @@ void CanvasRenderingContext2D::DrawImage(const CanvasImageSource& aImage,
srcSurf = imageBitmap.PrepareForDrawTarget(mTarget); srcSurf = imageBitmap.PrepareForDrawTarget(mTarget);
if (!srcSurf) { if (!srcSurf) {
if (imageBitmap.IsClosed()) {
aError.Throw(NS_ERROR_DOM_INVALID_STATE_ERR);
}
return; return;
} }

Просмотреть файл

@ -141,6 +141,7 @@ class ImageBitmap final : public nsISupports, public nsWrapperCache {
void OnShutdown(); void OnShutdown();
bool IsWriteOnly() const { return mWriteOnly; } bool IsWriteOnly() const { return mWriteOnly; }
bool IsClosed() const { return !mData; };
protected: protected:
/* /*

Просмотреть файл

@ -56,10 +56,10 @@ function runTest() {
var canvas2 = createCanvas(); var canvas2 = createCanvas();
var ctx2 = canvas2.getContext("2d"); var ctx2 = canvas2.getContext("2d");
var beforeDrawImageDataURL = canvas2.toDataURL(); var beforeDrawImageDataURL = canvas2.toDataURL();
var _thrown = undefined; try {
ctx2.drawImage(bmp, 0, 0); ctx2.drawImage(bmp, 0, 0);
var afterDrawImageDataURL = canvas2.toDataURL(); } catch (e) { _thrown = e };
ok(beforeDrawImageDataURL == afterDrawImageDataURL, ok(_thrown && _thrown.name == "InvalidStateError" && _thrown.code == DOMException.INVALID_STATE_ERR, "should throw InvalidStateError");
"Drawing operations with a closed ImageBitmap should do nothing.");
runTestOnWorker(); runTestOnWorker();
}); });
} }