diff --git a/components/script/dom/dommatrixreadonly.rs b/components/script/dom/dommatrixreadonly.rs index d53bceb8f43..aa0aae18764 100644 --- a/components/script/dom/dommatrixreadonly.rs +++ b/components/script/dom/dommatrixreadonly.rs @@ -409,12 +409,18 @@ impl DOMMatrixReadOnly { // Step 2 in DOMMatrix.SkewYSelf } - // https://drafts.fxtf.org/geometry-1/#dom-dommatrix-invertself + /// pub(crate) fn invert_self(&self) { let mut matrix = self.matrix.borrow_mut(); - // Step 1. - *matrix = matrix.inverse().unwrap_or_else(|| { - // Step 2. + // Step 1. Invert the current matrix. + let inverted = match self.is2D() { + true => matrix.to_2d().inverse().map(|m| m.to_3d()), + false => matrix.inverse(), + }; + + // Step 2. If the current matrix is not invertible set all attributes to NaN + // and set is 2D to false. + *matrix = inverted.unwrap_or_else(|| -> Transform3D { self.is2D.set(false); Transform3D::new( f64::NAN, @@ -434,7 +440,7 @@ impl DOMMatrixReadOnly { f64::NAN, f64::NAN, ) - }) + }); // Step 3 in DOMMatrix.InvertSelf } } diff --git a/tests/wpt/meta/css/geometry/DOMMatrix-invert-preserves-2d.html.ini b/tests/wpt/meta/css/geometry/DOMMatrix-invert-preserves-2d.html.ini deleted file mode 100644 index 36eb63e7acf..00000000000 --- a/tests/wpt/meta/css/geometry/DOMMatrix-invert-preserves-2d.html.ini +++ /dev/null @@ -1,3 +0,0 @@ -[DOMMatrix-invert-preserves-2d.html] - [scale] - expected: FAIL