Commit 4b023ed8 authored by fs@opera.com's avatar fs@opera.com

Add StrictTypeChecking to CRC2D ImageData APIs

This moves the null-check out into generated bindings code.
The test canvas/philip/tests/2d.imageData.create1.zero.html is (minimally)
adjusted to match the revised upstream WPT test.

Review URL: https://codereview.chromium.org/237063003

git-svn-id: svn://svn.chromium.org/blink/trunk@171484 bbb929c8-8fbe-4397-9dbb-9b2b20218538
parent 13f90caf
...@@ -14,7 +14,7 @@ _addTest(function(canvas, ctx) { ...@@ -14,7 +14,7 @@ _addTest(function(canvas, ctx) {
try { var _thrown = false; try { var _thrown = false;
ctx.createImageData(null); ctx.createImageData(null);
} catch (e) { if (e.code != DOMException.NOT_SUPPORTED_ERR) _fail("Failed assertion: expected exception of type NOT_SUPPORTED_ERR, got: "+e.message); _thrown = true; } finally { _assert(_thrown, "should throw exception of type NOT_SUPPORTED_ERR: ctx.createImageData(null)"); } } catch (e) { if (!(e instanceof TypeError)) _fail("Failed assertion: expected exception of type TypeError, got: "+e.message); _thrown = true; } finally { _assert(_thrown, "should throw exception of type TypeError: ctx.createImageData(null)"); }
}); });
......
...@@ -3,7 +3,7 @@ Test canvas createImageData() ...@@ -3,7 +3,7 @@ Test canvas createImageData()
On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
PASS ctx.createImageData(null) threw exception NotSupportedError: Failed to execute 'createImageData' on 'CanvasRenderingContext2D': The 1st argument provided is either null, or an invalid ImageData object.. PASS ctx.createImageData(null) threw exception TypeError: Failed to execute 'createImageData' on 'CanvasRenderingContext2D': No function was found that matched the signature provided..
PASS imageData.width is 100 PASS imageData.width is 100
PASS imageData.height is 50 PASS imageData.height is 50
PASS imageData.data[32] is 255 PASS imageData.data[32] is 255
......
...@@ -1802,13 +1802,8 @@ static PassRefPtrWillBeRawPtr<ImageData> createEmptyImageData(const IntSize& siz ...@@ -1802,13 +1802,8 @@ static PassRefPtrWillBeRawPtr<ImageData> createEmptyImageData(const IntSize& siz
return nullptr; return nullptr;
} }
PassRefPtrWillBeRawPtr<ImageData> CanvasRenderingContext2D::createImageData(PassRefPtrWillBeRawPtr<ImageData> imageData, ExceptionState& exceptionState) const PassRefPtrWillBeRawPtr<ImageData> CanvasRenderingContext2D::createImageData(PassRefPtrWillBeRawPtr<ImageData> imageData) const
{ {
if (!imageData) {
exceptionState.throwDOMException(NotSupportedError, ExceptionMessages::argumentNullOrIncorrectType(1, "ImageData"));
return nullptr;
}
return createEmptyImageData(imageData->size()); return createEmptyImageData(imageData->size());
} }
...@@ -1886,19 +1881,13 @@ PassRefPtrWillBeRawPtr<ImageData> CanvasRenderingContext2D::getImageData(float s ...@@ -1886,19 +1881,13 @@ PassRefPtrWillBeRawPtr<ImageData> CanvasRenderingContext2D::getImageData(float s
void CanvasRenderingContext2D::putImageData(ImageData* data, float dx, float dy, ExceptionState& exceptionState) void CanvasRenderingContext2D::putImageData(ImageData* data, float dx, float dy, ExceptionState& exceptionState)
{ {
if (!data) {
exceptionState.throwTypeError(ExceptionMessages::argumentNullOrIncorrectType(1, "ImageData"));
return;
}
putImageData(data, dx, dy, 0, 0, data->width(), data->height(), exceptionState); putImageData(data, dx, dy, 0, 0, data->width(), data->height(), exceptionState);
} }
void CanvasRenderingContext2D::putImageData(ImageData* data, float dx, float dy, float dirtyX, float dirtyY, void CanvasRenderingContext2D::putImageData(ImageData* data, float dx, float dy, float dirtyX, float dirtyY,
float dirtyWidth, float dirtyHeight, ExceptionState& exceptionState) float dirtyWidth, float dirtyHeight, ExceptionState& exceptionState)
{ {
if (!data) if (!std::isfinite(dx))
exceptionState.throwTypeError(ExceptionMessages::argumentNullOrIncorrectType(1, "ImageData"));
else if (!std::isfinite(dx))
exceptionState.throwDOMException(NotSupportedError, ExceptionMessages::notAFiniteNumber(dx, "dx")); exceptionState.throwDOMException(NotSupportedError, ExceptionMessages::notAFiniteNumber(dx, "dx"));
else if (!std::isfinite(dy)) else if (!std::isfinite(dy))
exceptionState.throwDOMException(NotSupportedError, ExceptionMessages::notAFiniteNumber(dy, "dy")); exceptionState.throwDOMException(NotSupportedError, ExceptionMessages::notAFiniteNumber(dy, "dy"));
......
...@@ -198,7 +198,7 @@ public: ...@@ -198,7 +198,7 @@ public:
PassRefPtr<CanvasGradient> createRadialGradient(float x0, float y0, float r0, float x1, float y1, float r1, ExceptionState&); PassRefPtr<CanvasGradient> createRadialGradient(float x0, float y0, float r0, float x1, float y1, float r1, ExceptionState&);
PassRefPtr<CanvasPattern> createPattern(CanvasImageSource*, const String& repetitionType, ExceptionState&); PassRefPtr<CanvasPattern> createPattern(CanvasImageSource*, const String& repetitionType, ExceptionState&);
PassRefPtrWillBeRawPtr<ImageData> createImageData(PassRefPtrWillBeRawPtr<ImageData>, ExceptionState&) const; PassRefPtrWillBeRawPtr<ImageData> createImageData(PassRefPtrWillBeRawPtr<ImageData>) const;
PassRefPtrWillBeRawPtr<ImageData> createImageData(float width, float height, ExceptionState&) const; PassRefPtrWillBeRawPtr<ImageData> createImageData(float width, float height, ExceptionState&) const;
PassRefPtrWillBeRawPtr<ImageData> getImageData(float sx, float sy, float sw, float sh, ExceptionState&) const; PassRefPtrWillBeRawPtr<ImageData> getImageData(float sx, float sy, float sw, float sh, ExceptionState&) const;
void putImageData(ImageData*, float dx, float dy, ExceptionState&); void putImageData(ImageData*, float dx, float dy, ExceptionState&);
......
...@@ -152,13 +152,13 @@ interface CanvasRenderingContext2D { ...@@ -152,13 +152,13 @@ interface CanvasRenderingContext2D {
void setShadow(float width, float height, float blur, float r, float g, float b, float a); void setShadow(float width, float height, float blur, float r, float g, float b, float a);
void setShadow(float width, float height, float blur, float c, float m, float y, float k, float a); void setShadow(float width, float height, float blur, float c, float m, float y, float k, float a);
[RaisesException] void putImageData(ImageData? imagedata, float dx, float dy); [RaisesException, StrictTypeChecking] void putImageData(ImageData imagedata, float dx, float dy);
[RaisesException] void putImageData(ImageData? imagedata, float dx, float dy, float dirtyX, float dirtyY, float dirtyWidth, float dirtyHeight); [RaisesException, StrictTypeChecking] void putImageData(ImageData imagedata, float dx, float dy, float dirtyX, float dirtyY, float dirtyWidth, float dirtyHeight);
[RaisesException, StrictTypeChecking] CanvasPattern createPattern(HTMLCanvasElement canvas, [TreatNullAs=NullString] DOMString repetitionType); [RaisesException, StrictTypeChecking] CanvasPattern createPattern(HTMLCanvasElement canvas, [TreatNullAs=NullString] DOMString repetitionType);
[RaisesException, StrictTypeChecking] CanvasPattern createPattern(HTMLImageElement image, [TreatNullAs=NullString] DOMString repetitionType); [RaisesException, StrictTypeChecking] CanvasPattern createPattern(HTMLImageElement image, [TreatNullAs=NullString] DOMString repetitionType);
[RaisesException, StrictTypeChecking] CanvasPattern createPattern(HTMLVideoElement image, [TreatNullAs=NullString] DOMString repetitionType); [RaisesException, StrictTypeChecking] CanvasPattern createPattern(HTMLVideoElement image, [TreatNullAs=NullString] DOMString repetitionType);
[RaisesException] ImageData createImageData(ImageData? imagedata); [StrictTypeChecking] ImageData createImageData(ImageData imagedata);
[RaisesException] ImageData createImageData(float sw, float sh); [RaisesException] ImageData createImageData(float sw, float sh);
[Custom] attribute object strokeStyle; [Custom] attribute object strokeStyle;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment