aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--components/gfx/display_list/mod.rs9
-rw-r--r--tests/wpt/mozilla/meta/MANIFEST.json10
-rw-r--r--tests/wpt/mozilla/tests/mozilla/non-invertible-transform.html26
3 files changed, 44 insertions, 1 deletions
diff --git a/components/gfx/display_list/mod.rs b/components/gfx/display_list/mod.rs
index ec3173cb847..af4b793c6b2 100644
--- a/components/gfx/display_list/mod.rs
+++ b/components/gfx/display_list/mod.rs
@@ -182,7 +182,14 @@ impl DisplayList {
*client_point
} else {
let point = *translated_point - stacking_context.bounds.origin;
- let inv_transform = stacking_context.transform.inverse().unwrap();
+ let inv_transform = match stacking_context.transform.inverse() {
+ Some(transform) => transform,
+ None => {
+ // If a transform function causes the current transformation matrix of an object
+ // to be non-invertible, the object and its content do not get displayed.
+ return;
+ }
+ };
let frac_point = inv_transform.transform_point(&Point2D::new(point.x.to_f32_px(),
point.y.to_f32_px()));
Point2D::new(Au::from_f32_px(frac_point.x), Au::from_f32_px(frac_point.y))
diff --git a/tests/wpt/mozilla/meta/MANIFEST.json b/tests/wpt/mozilla/meta/MANIFEST.json
index c4cc18dcf7c..62275196fbf 100644
--- a/tests/wpt/mozilla/meta/MANIFEST.json
+++ b/tests/wpt/mozilla/meta/MANIFEST.json
@@ -13335,6 +13335,12 @@
{}
]
],
+ "mozilla/non-invertible-transform.html": [
+ [
+ "/_mozilla/mozilla/non-invertible-transform.html",
+ {}
+ ]
+ ],
"mozilla/out-of-order-stylesheet-loads-and-imports.html": [
[
"/_mozilla/mozilla/out-of-order-stylesheet-loads-and-imports.html",
@@ -25908,6 +25914,10 @@
"fe965e58fdcb78d08384a9fde74c982e34768745",
"testharness"
],
+ "mozilla/non-invertible-transform.html": [
+ "6fa68fe08c9dd5d594e838da51617951193fee19",
+ "testharness"
+ ],
"mozilla/out-of-order-stylesheet-loads-and-imports.html": [
"462f5b6a1f47e0e40ad407ccd13b3058176d106d",
"testharness"
diff --git a/tests/wpt/mozilla/tests/mozilla/non-invertible-transform.html b/tests/wpt/mozilla/tests/mozilla/non-invertible-transform.html
new file mode 100644
index 00000000000..f03c9c01344
--- /dev/null
+++ b/tests/wpt/mozilla/tests/mozilla/non-invertible-transform.html
@@ -0,0 +1,26 @@
+<!doctype html>
+<html>
+<head>
+ <meta charset="utf-8">
+ <title>Shouldn't panic when transform is non-invertible</title>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <style>
+ #test {
+ width: 100px;
+ height: 100px;
+ transform: scale(0);
+ }
+ </style>
+</head>
+<body>
+<div id="test"></div>
+<script>
+ async_test(function(t) {
+ setTimeout(t.step_func_done(function() {
+ var elements = document.elementsFromPoint(10, 10);
+ }), 500);
+ }, "Shouldn't panic when transform is non-invertible");
+</script>
+</body>
+</html>