From 9639d36550a47bc66efcea2f05117efc318ad3c4 Mon Sep 17 00:00:00 2001 From: Oriol Brufau Date: Wed, 28 Aug 2024 12:20:18 +0200 Subject: [PATCH] Remove `width` and `height` presentational hints for `` (#33211) According to HTML, the `width` and `height` attributes should only set the natural sizes and the aspect ratio. The `width` and `height` properties should stay as `initial` by default. Signed-off-by: Oriol Brufau Co-authored-by: Martin Robinson --- components/script/dom/element.rs | 6 +--- components/script/dom/htmlcanvaselement.rs | 18 +----------- tests/wpt/meta/MANIFEST.json | 13 +++++++++ .../css-flexbox/canvas-contain-size.html.ini | 2 -- .../replaced-element-017.html.ini | 2 -- .../replaced-element-023.html.ini | 2 -- ...tional-height-from-aspect-ratio-2.html.ini | 3 -- .../replaced-max-size-saturation.html.ini | 2 -- .../canvas-dimension-attributes.html | 29 +++++++++++++++++++ 9 files changed, 44 insertions(+), 33 deletions(-) delete mode 100644 tests/wpt/meta/css/css-flexbox/canvas-contain-size.html.ini delete mode 100644 tests/wpt/meta/css/css-sizing/aspect-ratio/replaced-element-017.html.ini delete mode 100644 tests/wpt/meta/css/css-sizing/aspect-ratio/replaced-element-023.html.ini delete mode 100644 tests/wpt/meta/css/css-sizing/replaced-fractional-height-from-aspect-ratio-2.html.ini delete mode 100644 tests/wpt/meta/css/css-sizing/replaced-max-size-saturation.html.ini create mode 100644 tests/wpt/tests/html/rendering/replaced-elements/attributes-for-embedded-content-and-images/canvas-dimension-attributes.html diff --git a/components/script/dom/element.rs b/components/script/dom/element.rs index 32a4b5c16ac..6bcfe2bbe4b 100644 --- a/components/script/dom/element.rs +++ b/components/script/dom/element.rs @@ -107,7 +107,7 @@ use crate::dom::eventtarget::EventTarget; use crate::dom::htmlanchorelement::HTMLAnchorElement; use crate::dom::htmlbodyelement::{HTMLBodyElement, HTMLBodyElementLayoutHelpers}; use crate::dom::htmlbuttonelement::HTMLButtonElement; -use crate::dom::htmlcanvaselement::{HTMLCanvasElement, LayoutHTMLCanvasElementHelpers}; +use crate::dom::htmlcanvaselement::LayoutHTMLCanvasElementHelpers; use crate::dom::htmlcollection::HTMLCollection; use crate::dom::htmlelement::HTMLElement; use crate::dom::htmlfieldsetelement::HTMLFieldSetElement; @@ -852,8 +852,6 @@ impl<'dom> LayoutElementHelpers<'dom> for LayoutDom<'dom, Element> { } else if let Some(this) = self.downcast::() { // https://html.spec.whatwg.org/multipage/#the-hr-element-2:attr-hr-width this.get_width() - } else if let Some(this) = self.downcast::() { - this.get_width() } else { LengthOrPercentageOrAuto::Auto }; @@ -887,8 +885,6 @@ impl<'dom> LayoutElementHelpers<'dom> for LayoutDom<'dom, Element> { this.get_height() } else if let Some(this) = self.downcast::() { this.get_height() - } else if let Some(this) = self.downcast::() { - this.get_height() } else { LengthOrPercentageOrAuto::Auto }; diff --git a/components/script/dom/htmlcanvaselement.rs b/components/script/dom/htmlcanvaselement.rs index a36090a3892..00f53fef782 100644 --- a/components/script/dom/htmlcanvaselement.rs +++ b/components/script/dom/htmlcanvaselement.rs @@ -17,7 +17,7 @@ use script_layout_interface::{HTMLCanvasData, HTMLCanvasDataSource}; use script_traits::ScriptMsg; use servo_media::streams::registry::MediaStreamId; use servo_media::streams::MediaStreamType; -use style::attr::{AttrValue, LengthOrPercentageOrAuto}; +use style::attr::AttrValue; use crate::dom::attr::Attr; use crate::dom::bindings::cell::{ref_filter_map, DomRefCell, Ref}; @@ -127,8 +127,6 @@ pub trait LayoutCanvasRenderingContextHelpers { pub trait LayoutHTMLCanvasElementHelpers { fn data(self) -> HTMLCanvasData; - fn get_width(self) -> LengthOrPercentageOrAuto; - fn get_height(self) -> LengthOrPercentageOrAuto; fn get_canvas_id_for_layout(self) -> CanvasId; } @@ -161,20 +159,6 @@ impl LayoutHTMLCanvasElementHelpers for LayoutDom<'_, HTMLCanvasElement> { } } - fn get_width(self) -> LengthOrPercentageOrAuto { - self.upcast::() - .get_attr_for_layout(&ns!(), &local_name!("width")) - .map(AttrValue::as_uint_px_dimension) - .unwrap_or(LengthOrPercentageOrAuto::Auto) - } - - fn get_height(self) -> LengthOrPercentageOrAuto { - self.upcast::() - .get_attr_for_layout(&ns!(), &local_name!("height")) - .map(AttrValue::as_uint_px_dimension) - .unwrap_or(LengthOrPercentageOrAuto::Auto) - } - #[allow(unsafe_code)] fn get_canvas_id_for_layout(self) -> CanvasId { let canvas = self.unsafe_get(); diff --git a/tests/wpt/meta/MANIFEST.json b/tests/wpt/meta/MANIFEST.json index 17e1a43403e..6fb17b37a00 100644 --- a/tests/wpt/meta/MANIFEST.json +++ b/tests/wpt/meta/MANIFEST.json @@ -332870,6 +332870,19 @@ }, "replaced-elements": { "attributes-for-embedded-content-and-images": { + "canvas-dimension-attributes.html": [ + "536b1cd0c455595372cca3a260f1183e1d221ec5", + [ + null, + [ + [ + "/css/reference/ref-filled-green-200px-square.html", + "==" + ] + ], + {} + ] + ], "img-dim.html": [ "2d636c9417738423141203001302eb344151e295", [ diff --git a/tests/wpt/meta/css/css-flexbox/canvas-contain-size.html.ini b/tests/wpt/meta/css/css-flexbox/canvas-contain-size.html.ini deleted file mode 100644 index 831aff62865..00000000000 --- a/tests/wpt/meta/css/css-flexbox/canvas-contain-size.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[canvas-contain-size.html] - expected: FAIL diff --git a/tests/wpt/meta/css/css-sizing/aspect-ratio/replaced-element-017.html.ini b/tests/wpt/meta/css/css-sizing/aspect-ratio/replaced-element-017.html.ini deleted file mode 100644 index a8f9a3aebc7..00000000000 --- a/tests/wpt/meta/css/css-sizing/aspect-ratio/replaced-element-017.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[replaced-element-017.html] - expected: FAIL diff --git a/tests/wpt/meta/css/css-sizing/aspect-ratio/replaced-element-023.html.ini b/tests/wpt/meta/css/css-sizing/aspect-ratio/replaced-element-023.html.ini deleted file mode 100644 index 388c41c2b2c..00000000000 --- a/tests/wpt/meta/css/css-sizing/aspect-ratio/replaced-element-023.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[replaced-element-023.html] - expected: FAIL diff --git a/tests/wpt/meta/css/css-sizing/replaced-fractional-height-from-aspect-ratio-2.html.ini b/tests/wpt/meta/css/css-sizing/replaced-fractional-height-from-aspect-ratio-2.html.ini deleted file mode 100644 index faf08dcbafd..00000000000 --- a/tests/wpt/meta/css/css-sizing/replaced-fractional-height-from-aspect-ratio-2.html.ini +++ /dev/null @@ -1,3 +0,0 @@ -[replaced-fractional-height-from-aspect-ratio-2.html] - [canvas 1] - expected: FAIL diff --git a/tests/wpt/meta/css/css-sizing/replaced-max-size-saturation.html.ini b/tests/wpt/meta/css/css-sizing/replaced-max-size-saturation.html.ini deleted file mode 100644 index c8b1aa5db94..00000000000 --- a/tests/wpt/meta/css/css-sizing/replaced-max-size-saturation.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[replaced-max-size-saturation.html] - expected: FAIL diff --git a/tests/wpt/tests/html/rendering/replaced-elements/attributes-for-embedded-content-and-images/canvas-dimension-attributes.html b/tests/wpt/tests/html/rendering/replaced-elements/attributes-for-embedded-content-and-images/canvas-dimension-attributes.html new file mode 100644 index 00000000000..536b1cd0c45 --- /dev/null +++ b/tests/wpt/tests/html/rendering/replaced-elements/attributes-for-embedded-content-and-images/canvas-dimension-attributes.html @@ -0,0 +1,29 @@ + +Canvas width and height attributes are used as the surface size, and also to infer aspect ratio + + + + + + +

Test passes if there is a filled green square and no red.

+
+ + + + +