mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-08-09 09:39:39 +00:00
LibWeb: Ignore non-finite OffscreenCanvas
shadow offset values
This commit is contained in:
parent
7507906c68
commit
844dcd3310
Notes:
github-actions[bot]
2025-07-01 01:54:35 +00:00
Author: https://github.com/tcl3
Commit: 844dcd3310
Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/5256
Reviewed-by: https://github.com/shannonbooth ✅
5 changed files with 147 additions and 6 deletions
|
@ -232,10 +232,15 @@ float OffscreenCanvasRenderingContext2D::shadow_offset_x() const
|
||||||
return drawing_state().shadow_offset_x;
|
return drawing_state().shadow_offset_x;
|
||||||
}
|
}
|
||||||
|
|
||||||
void OffscreenCanvasRenderingContext2D::set_shadow_offset_x(float offsetX)
|
// https://html.spec.whatwg.org/multipage/canvas.html#dom-context-2d-shadowoffsetx
|
||||||
|
void OffscreenCanvasRenderingContext2D::set_shadow_offset_x(float offset_x)
|
||||||
{
|
{
|
||||||
// https://html.spec.whatwg.org/multipage/canvas.html#dom-context-2d-shadowoffsetx
|
// On setting, the attribute being set must be set to the new value, except if the value is infinite or NaN,
|
||||||
drawing_state().shadow_offset_x = offsetX;
|
// in which case the new value must be ignored.
|
||||||
|
if (isinf(offset_x) || isnan(offset_x))
|
||||||
|
return;
|
||||||
|
|
||||||
|
drawing_state().shadow_offset_x = offset_x;
|
||||||
}
|
}
|
||||||
|
|
||||||
float OffscreenCanvasRenderingContext2D::shadow_offset_y() const
|
float OffscreenCanvasRenderingContext2D::shadow_offset_y() const
|
||||||
|
@ -243,10 +248,15 @@ float OffscreenCanvasRenderingContext2D::shadow_offset_y() const
|
||||||
return drawing_state().shadow_offset_y;
|
return drawing_state().shadow_offset_y;
|
||||||
}
|
}
|
||||||
|
|
||||||
void OffscreenCanvasRenderingContext2D::set_shadow_offset_y(float offsetY)
|
// https://html.spec.whatwg.org/multipage/canvas.html#dom-context-2d-shadowoffsety
|
||||||
|
void OffscreenCanvasRenderingContext2D::set_shadow_offset_y(float offset_y)
|
||||||
{
|
{
|
||||||
// https://html.spec.whatwg.org/multipage/canvas.html#dom-context-2d-shadowoffsety
|
// On setting, the attribute being set must be set to the new value, except if the value is infinite or NaN,
|
||||||
drawing_state().shadow_offset_y = offsetY;
|
// in which case the new value must be ignored.
|
||||||
|
if (isinf(offset_y) || isnan(offset_y))
|
||||||
|
return;
|
||||||
|
|
||||||
|
drawing_state().shadow_offset_y = offset_y;
|
||||||
}
|
}
|
||||||
|
|
||||||
float OffscreenCanvasRenderingContext2D::shadow_blur() const
|
float OffscreenCanvasRenderingContext2D::shadow_blur() const
|
||||||
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
Harness status: OK
|
||||||
|
|
||||||
|
Found 1 tests
|
||||||
|
|
||||||
|
1 Pass
|
||||||
|
Pass OffscreenCanvas test: 2d.shadow.attributes.shadowOffset.invalid
|
|
@ -0,0 +1,6 @@
|
||||||
|
Harness status: OK
|
||||||
|
|
||||||
|
Found 1 tests
|
||||||
|
|
||||||
|
1 Pass
|
||||||
|
Pass OffscreenCanvas test: 2d.shadow.attributes.shadowOffset.valid
|
|
@ -0,0 +1,68 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. -->
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<title>OffscreenCanvas test: 2d.shadow.attributes.shadowOffset.invalid</title>
|
||||||
|
<script src="../../../../resources/testharness.js"></script>
|
||||||
|
<script src="../../../../resources/testharnessreport.js"></script>
|
||||||
|
<script src="../../../../html/canvas/resources/canvas-tests.js"></script>
|
||||||
|
|
||||||
|
<h1>2d.shadow.attributes.shadowOffset.invalid</h1>
|
||||||
|
<p class="desc"></p>
|
||||||
|
|
||||||
|
|
||||||
|
<script>
|
||||||
|
var t = async_test("");
|
||||||
|
var t_pass = t.done.bind(t);
|
||||||
|
var t_fail = t.step_func(function(reason) {
|
||||||
|
throw reason;
|
||||||
|
});
|
||||||
|
t.step(function() {
|
||||||
|
|
||||||
|
var canvas = new OffscreenCanvas(100, 50);
|
||||||
|
var ctx = canvas.getContext('2d');
|
||||||
|
|
||||||
|
ctx.shadowOffsetX = 1;
|
||||||
|
ctx.shadowOffsetY = 2;
|
||||||
|
ctx.shadowOffsetX = Infinity;
|
||||||
|
ctx.shadowOffsetY = Infinity;
|
||||||
|
_assertSame(ctx.shadowOffsetX, 1, "ctx.shadowOffsetX", "1");
|
||||||
|
_assertSame(ctx.shadowOffsetY, 2, "ctx.shadowOffsetY", "2");
|
||||||
|
|
||||||
|
ctx.shadowOffsetX = 1;
|
||||||
|
ctx.shadowOffsetY = 2;
|
||||||
|
ctx.shadowOffsetX = -Infinity;
|
||||||
|
ctx.shadowOffsetY = -Infinity;
|
||||||
|
_assertSame(ctx.shadowOffsetX, 1, "ctx.shadowOffsetX", "1");
|
||||||
|
_assertSame(ctx.shadowOffsetY, 2, "ctx.shadowOffsetY", "2");
|
||||||
|
|
||||||
|
ctx.shadowOffsetX = 1;
|
||||||
|
ctx.shadowOffsetY = 2;
|
||||||
|
ctx.shadowOffsetX = NaN;
|
||||||
|
ctx.shadowOffsetY = NaN;
|
||||||
|
_assertSame(ctx.shadowOffsetX, 1, "ctx.shadowOffsetX", "1");
|
||||||
|
_assertSame(ctx.shadowOffsetY, 2, "ctx.shadowOffsetY", "2");
|
||||||
|
|
||||||
|
ctx.shadowOffsetX = 1;
|
||||||
|
ctx.shadowOffsetY = 2;
|
||||||
|
ctx.shadowOffsetX = 'string';
|
||||||
|
ctx.shadowOffsetY = 'string';
|
||||||
|
_assertSame(ctx.shadowOffsetX, 1, "ctx.shadowOffsetX", "1");
|
||||||
|
_assertSame(ctx.shadowOffsetY, 2, "ctx.shadowOffsetY", "2");
|
||||||
|
|
||||||
|
ctx.shadowOffsetX = 1;
|
||||||
|
ctx.shadowOffsetY = 2;
|
||||||
|
ctx.shadowOffsetX = true;
|
||||||
|
ctx.shadowOffsetY = true;
|
||||||
|
_assertSame(ctx.shadowOffsetX, 1, "ctx.shadowOffsetX", "1");
|
||||||
|
_assertSame(ctx.shadowOffsetY, 1, "ctx.shadowOffsetY", "1");
|
||||||
|
|
||||||
|
ctx.shadowOffsetX = 1;
|
||||||
|
ctx.shadowOffsetY = 2;
|
||||||
|
ctx.shadowOffsetX = false;
|
||||||
|
ctx.shadowOffsetY = false;
|
||||||
|
_assertSame(ctx.shadowOffsetX, 0, "ctx.shadowOffsetX", "0");
|
||||||
|
_assertSame(ctx.shadowOffsetY, 0, "ctx.shadowOffsetY", "0");
|
||||||
|
t.done();
|
||||||
|
|
||||||
|
});
|
||||||
|
</script>
|
|
@ -0,0 +1,51 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<!-- DO NOT EDIT! This test has been generated by /html/canvas/tools/gentest.py. -->
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<title>OffscreenCanvas test: 2d.shadow.attributes.shadowOffset.valid</title>
|
||||||
|
<script src="../../../../resources/testharness.js"></script>
|
||||||
|
<script src="../../../../resources/testharnessreport.js"></script>
|
||||||
|
<script src="../../../../html/canvas/resources/canvas-tests.js"></script>
|
||||||
|
|
||||||
|
<h1>2d.shadow.attributes.shadowOffset.valid</h1>
|
||||||
|
<p class="desc"></p>
|
||||||
|
|
||||||
|
|
||||||
|
<script>
|
||||||
|
var t = async_test("");
|
||||||
|
var t_pass = t.done.bind(t);
|
||||||
|
var t_fail = t.step_func(function(reason) {
|
||||||
|
throw reason;
|
||||||
|
});
|
||||||
|
t.step(function() {
|
||||||
|
|
||||||
|
var canvas = new OffscreenCanvas(100, 50);
|
||||||
|
var ctx = canvas.getContext('2d');
|
||||||
|
|
||||||
|
ctx.shadowOffsetX = 1;
|
||||||
|
ctx.shadowOffsetY = 2;
|
||||||
|
_assertSame(ctx.shadowOffsetX, 1, "ctx.shadowOffsetX", "1");
|
||||||
|
_assertSame(ctx.shadowOffsetY, 2, "ctx.shadowOffsetY", "2");
|
||||||
|
|
||||||
|
ctx.shadowOffsetX = 0.5;
|
||||||
|
ctx.shadowOffsetY = 0.25;
|
||||||
|
_assertSame(ctx.shadowOffsetX, 0.5, "ctx.shadowOffsetX", "0.5");
|
||||||
|
_assertSame(ctx.shadowOffsetY, 0.25, "ctx.shadowOffsetY", "0.25");
|
||||||
|
|
||||||
|
ctx.shadowOffsetX = -0.5;
|
||||||
|
ctx.shadowOffsetY = -0.25;
|
||||||
|
_assertSame(ctx.shadowOffsetX, -0.5, "ctx.shadowOffsetX", "-0.5");
|
||||||
|
_assertSame(ctx.shadowOffsetY, -0.25, "ctx.shadowOffsetY", "-0.25");
|
||||||
|
|
||||||
|
ctx.shadowOffsetX = 0;
|
||||||
|
ctx.shadowOffsetY = 0;
|
||||||
|
_assertSame(ctx.shadowOffsetX, 0, "ctx.shadowOffsetX", "0");
|
||||||
|
_assertSame(ctx.shadowOffsetY, 0, "ctx.shadowOffsetY", "0");
|
||||||
|
|
||||||
|
ctx.shadowOffsetX = 1e6;
|
||||||
|
ctx.shadowOffsetY = 1e6;
|
||||||
|
_assertSame(ctx.shadowOffsetX, 1e6, "ctx.shadowOffsetX", "1e6");
|
||||||
|
_assertSame(ctx.shadowOffsetY, 1e6, "ctx.shadowOffsetY", "1e6");
|
||||||
|
t.done();
|
||||||
|
|
||||||
|
});
|
||||||
|
</script>
|
Loading…
Add table
Add a link
Reference in a new issue