mirror of
https://github.com/servo/servo.git
synced 2025-07-24 15:50:21 +01:00
Don't send empty canvases to WebRender
If any dimension of a canvas is 0, don't try to render it as it causes problems inside webrender.
This commit is contained in:
parent
e66ab111a6
commit
61fb84d6a0
5 changed files with 34 additions and 0 deletions
|
@ -1875,6 +1875,12 @@ impl Fragment {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
SpecificFragmentInfo::Canvas(ref canvas_fragment_info) => {
|
SpecificFragmentInfo::Canvas(ref canvas_fragment_info) => {
|
||||||
|
if canvas_fragment_info.dom_width == Au(0) ||
|
||||||
|
canvas_fragment_info.dom_height == Au(0)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
let image_key = match canvas_fragment_info.source {
|
let image_key = match canvas_fragment_info.source {
|
||||||
CanvasFragmentSource::WebGL(image_key) => image_key,
|
CanvasFragmentSource::WebGL(image_key) => image_key,
|
||||||
CanvasFragmentSource::Image(ref ipc_renderer) => match *ipc_renderer {
|
CanvasFragmentSource::Image(ref ipc_renderer) => match *ipc_renderer {
|
||||||
|
|
|
@ -87,6 +87,7 @@ impl Fragment {
|
||||||
.rect
|
.rect
|
||||||
.to_physical(i.style.writing_mode, containing_block)
|
.to_physical(i.style.writing_mode, containing_block)
|
||||||
.translate(containing_block.origin.to_vector());
|
.translate(containing_block.origin.to_vector());
|
||||||
|
|
||||||
let common = builder.common_properties(rect.clone().to_webrender());
|
let common = builder.common_properties(rect.clone().to_webrender());
|
||||||
builder.wr.push_image(
|
builder.wr.push_image(
|
||||||
&common,
|
&common,
|
||||||
|
|
|
@ -102,6 +102,7 @@ impl ReplacedContent {
|
||||||
|
|
||||||
let width = (intrinsic_size_in_dots.width as CSSFloat) / dppx;
|
let width = (intrinsic_size_in_dots.width as CSSFloat) / dppx;
|
||||||
let height = (intrinsic_size_in_dots.height as CSSFloat) / dppx;
|
let height = (intrinsic_size_in_dots.height as CSSFloat) / dppx;
|
||||||
|
|
||||||
return Some(Self {
|
return Some(Self {
|
||||||
kind,
|
kind,
|
||||||
intrinsic: IntrinsicSizes {
|
intrinsic: IntrinsicSizes {
|
||||||
|
@ -201,6 +202,12 @@ impl ReplacedContent {
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.collect(),
|
.collect(),
|
||||||
ReplacedContentKind::Canvas(canvas_info) => {
|
ReplacedContentKind::Canvas(canvas_info) => {
|
||||||
|
if self.intrinsic.width == Some(Length::zero()) ||
|
||||||
|
self.intrinsic.height == Some(Length::zero())
|
||||||
|
{
|
||||||
|
return vec![];
|
||||||
|
}
|
||||||
|
|
||||||
let image_key = match canvas_info.source {
|
let image_key = match canvas_info.source {
|
||||||
CanvasSource::WebGL(image_key) => image_key,
|
CanvasSource::WebGL(image_key) => image_key,
|
||||||
CanvasSource::Image(ref ipc_renderer) => match *ipc_renderer {
|
CanvasSource::Image(ref ipc_renderer) => match *ipc_renderer {
|
||||||
|
|
|
@ -14591,6 +14591,13 @@
|
||||||
null,
|
null,
|
||||||
{}
|
{}
|
||||||
]
|
]
|
||||||
|
],
|
||||||
|
"zero_size_canvas_crash.html": [
|
||||||
|
"45eb9b559e8d6105baca5ab4d336de520d33b36b",
|
||||||
|
[
|
||||||
|
null,
|
||||||
|
{}
|
||||||
|
]
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"webxr": {
|
"webxr": {
|
||||||
|
|
13
tests/wpt/mozilla/tests/mozilla/zero_size_canvas_crash.html
Normal file
13
tests/wpt/mozilla/tests/mozilla/zero_size_canvas_crash.html
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
<!doctype html>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>Test for #21411: Panic when putting a zero-sized canvas on the display list.</title>
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
<canvas id="myCanvas" width="0" height="0" style="width:10px; height:10px;"></canvas>
|
||||||
|
<script>
|
||||||
|
test(function () {
|
||||||
|
var c = document.getElementById("myCanvas");
|
||||||
|
var ctx = c.getContext("2d");
|
||||||
|
ctx.clearRect(0, 0, c.width, c.height);
|
||||||
|
}, "Doesn't crash when the page has a canvas with a zero-dimension");
|
||||||
|
</script>
|
Loading…
Add table
Add a link
Reference in a new issue