diff options
author | Anthony Ramine <nox@nox.paris> | 2020-03-31 18:46:49 +0200 |
---|---|---|
committer | Anthony Ramine <nox@nox.paris> | 2020-03-31 18:46:49 +0200 |
commit | 5ff931d1717ac0e7a6e5d9d63f0cfa47c1f3cd50 (patch) | |
tree | 920e4e9ef442fa5091834d70f31086c3ccfcf21f /components/script/dom | |
parent | 0bda1748230b4d54c274a014d770daf461fec50f (diff) | |
download | servo-5ff931d1717ac0e7a6e5d9d63f0cfa47c1f3cd50.tar.gz servo-5ff931d1717ac0e7a6e5d9d63f0cfa47c1f3cd50.zip |
Introduce <LayoutDom<Element>>::attrs()
This safe method is the basic block to access element attributes from layout.
We reuse it in the other attr-related layout methods to remove a pretty big
source of rampant unsafe code between script and layout.
Diffstat (limited to 'components/script/dom')
-rw-r--r-- | components/script/dom/element.rs | 91 | ||||
-rw-r--r-- | components/script/dom/htmlbodyelement.rs | 33 | ||||
-rw-r--r-- | components/script/dom/htmlcanvaselement.rs | 22 | ||||
-rw-r--r-- | components/script/dom/htmlfontelement.rs | 30 | ||||
-rw-r--r-- | components/script/dom/htmlhrelement.rs | 24 | ||||
-rw-r--r-- | components/script/dom/htmliframeelement.rs | 26 | ||||
-rw-r--r-- | components/script/dom/htmlimageelement.rs | 26 | ||||
-rwxr-xr-x | components/script/dom/htmlinputelement.rs | 12 | ||||
-rw-r--r-- | components/script/dom/htmltablecellelement.rs | 39 | ||||
-rw-r--r-- | components/script/dom/htmltableelement.rs | 24 | ||||
-rw-r--r-- | components/script/dom/htmltablerowelement.rs | 11 | ||||
-rw-r--r-- | components/script/dom/htmltablesectionelement.rs | 11 | ||||
-rwxr-xr-x | components/script/dom/htmltextareaelement.rs | 18 | ||||
-rw-r--r-- | components/script/dom/svgsvgelement.rs | 21 |
14 files changed, 150 insertions, 238 deletions
diff --git a/components/script/dom/element.rs b/components/script/dom/element.rs index add49150a27..8eee9a64490 100644 --- a/components/script/dom/element.rs +++ b/components/script/dom/element.rs @@ -551,28 +551,21 @@ impl Element { } #[inline] -#[allow(unsafe_code)] -pub unsafe fn get_attr_for_layout<'dom>( - elem: &'dom Element, +pub fn get_attr_for_layout<'dom>( + elem: LayoutDom<'dom, Element>, namespace: &Namespace, name: &LocalName, ) -> Option<LayoutDom<'dom, Attr>> { - // cast to point to T in RefCell<T> directly - let attrs = elem.attrs.borrow_for_layout(); - attrs + elem.attrs() .iter() - .find(|attr| { - let attr = attr.to_layout(); - name == attr.local_name() && namespace == attr.namespace() - }) - .map(|attr| attr.to_layout()) + .find(|attr| name == attr.local_name() && namespace == attr.namespace()) + .cloned() } pub trait LayoutElementHelpers<'dom> { - #[allow(unsafe_code)] - unsafe fn has_class_for_layout(self, name: &Atom, case_sensitivity: CaseSensitivity) -> bool; - #[allow(unsafe_code)] - unsafe fn get_classes_for_layout(self) -> Option<&'dom [Atom]>; + fn attrs(self) -> &'dom [LayoutDom<'dom, Attr>]; + fn has_class_for_layout(self, name: &Atom, case_sensitivity: CaseSensitivity) -> bool; + fn get_classes_for_layout(self) -> Option<&'dom [Atom]>; #[allow(unsafe_code)] unsafe fn synthesize_presentational_hints_for_legacy_attributes<V>(self, _: &mut V) @@ -595,41 +588,42 @@ pub trait LayoutElementHelpers<'dom> { /// The shadow root this element is a host of. #[allow(unsafe_code)] unsafe fn get_shadow_root_for_layout(self) -> Option<LayoutDom<'dom, ShadowRoot>>; - #[allow(unsafe_code)] - unsafe fn get_attr_for_layout( + fn get_attr_for_layout( self, namespace: &Namespace, name: &LocalName, ) -> Option<&'dom AttrValue>; - #[allow(unsafe_code)] - unsafe fn get_attr_val_for_layout( - self, - namespace: &Namespace, - name: &LocalName, - ) -> Option<&'dom str>; - #[allow(unsafe_code)] - unsafe fn get_attr_vals_for_layout(self, name: &LocalName) -> Vec<&'dom AttrValue>; + fn get_attr_val_for_layout(self, namespace: &Namespace, name: &LocalName) -> Option<&'dom str>; + fn get_attr_vals_for_layout(self, name: &LocalName) -> Vec<&'dom AttrValue>; } impl<'dom> LayoutElementHelpers<'dom> for LayoutDom<'dom, Element> { #[allow(unsafe_code)] #[inline] - unsafe fn has_class_for_layout(self, name: &Atom, case_sensitivity: CaseSensitivity) -> bool { - get_attr_for_layout(&*self.unsafe_get(), &ns!(), &local_name!("class")).map_or( - false, - |attr| { - attr.as_tokens() - .unwrap() - .iter() - .any(|atom| case_sensitivity.eq_atom(atom, name)) - }, - ) + fn attrs(self) -> &'dom [LayoutDom<'dom, Attr>] { + unsafe { + // FIXME(nox): This should probably be done through a ToLayout trait. + let attrs: &[Dom<Attr>] = &self.unsafe_get().attrs.borrow_for_layout(); + // This doesn't compile if Dom and LayoutDom don't have the same + // representation. + let _ = mem::transmute::<Dom<Attr>, LayoutDom<Attr>>; + &*(attrs as *const [Dom<Attr>] as *const [LayoutDom<Attr>]) + } + } + + #[inline] + fn has_class_for_layout(self, name: &Atom, case_sensitivity: CaseSensitivity) -> bool { + get_attr_for_layout(self, &ns!(), &local_name!("class")).map_or(false, |attr| { + attr.as_tokens() + .unwrap() + .iter() + .any(|atom| case_sensitivity.eq_atom(atom, name)) + }) } - #[allow(unsafe_code)] #[inline] - unsafe fn get_classes_for_layout(self) -> Option<&'dom [Atom]> { - get_attr_for_layout(&*self.unsafe_get(), &ns!(), &local_name!("class")) + fn get_classes_for_layout(self) -> Option<&'dom [Atom]> { + get_attr_for_layout(self, &ns!(), &local_name!("class")) .map(|attr| attr.as_tokens().unwrap()) } @@ -1066,34 +1060,25 @@ impl<'dom> LayoutElementHelpers<'dom> for LayoutDom<'dom, Element> { .map(|sr| sr.to_layout()) } - #[allow(unsafe_code)] #[inline] - unsafe fn get_attr_for_layout( + fn get_attr_for_layout( self, namespace: &Namespace, name: &LocalName, ) -> Option<&'dom AttrValue> { - get_attr_for_layout(self.unsafe_get(), namespace, name).map(|attr| attr.value()) + get_attr_for_layout(self, namespace, name).map(|attr| attr.value()) } - #[allow(unsafe_code)] #[inline] - unsafe fn get_attr_val_for_layout( - self, - namespace: &Namespace, - name: &LocalName, - ) -> Option<&'dom str> { - get_attr_for_layout(self.unsafe_get(), namespace, name).map(|attr| attr.as_str()) + fn get_attr_val_for_layout(self, namespace: &Namespace, name: &LocalName) -> Option<&'dom str> { + get_attr_for_layout(self, namespace, name).map(|attr| attr.as_str()) } - #[allow(unsafe_code)] #[inline] - unsafe fn get_attr_vals_for_layout(self, name: &LocalName) -> Vec<&'dom AttrValue> { - let attrs = self.unsafe_get().attrs.borrow_for_layout(); - attrs + fn get_attr_vals_for_layout(self, name: &LocalName) -> Vec<&'dom AttrValue> { + self.attrs() .iter() .filter_map(|attr| { - let attr = attr.to_layout(); if name == attr.local_name() { Some(attr.value()) } else { diff --git a/components/script/dom/htmlbodyelement.rs b/components/script/dom/htmlbodyelement.rs index 4bf835cbee9..775af6a686c 100644 --- a/components/script/dom/htmlbodyelement.rs +++ b/components/script/dom/htmlbodyelement.rs @@ -100,34 +100,25 @@ pub trait HTMLBodyElementLayoutHelpers { } impl HTMLBodyElementLayoutHelpers for LayoutDom<'_, HTMLBodyElement> { - #[allow(unsafe_code)] fn get_background_color(self) -> Option<RGBA> { - unsafe { - self.upcast::<Element>() - .get_attr_for_layout(&ns!(), &local_name!("bgcolor")) - .and_then(AttrValue::as_color) - .cloned() - } + self.upcast::<Element>() + .get_attr_for_layout(&ns!(), &local_name!("bgcolor")) + .and_then(AttrValue::as_color) + .cloned() } - #[allow(unsafe_code)] fn get_color(self) -> Option<RGBA> { - unsafe { - self.upcast::<Element>() - .get_attr_for_layout(&ns!(), &local_name!("text")) - .and_then(AttrValue::as_color) - .cloned() - } + self.upcast::<Element>() + .get_attr_for_layout(&ns!(), &local_name!("text")) + .and_then(AttrValue::as_color) + .cloned() } - #[allow(unsafe_code)] fn get_background(self) -> Option<ServoUrl> { - unsafe { - self.upcast::<Element>() - .get_attr_for_layout(&ns!(), &local_name!("background")) - .and_then(AttrValue::as_resolved_url) - .cloned() - } + self.upcast::<Element>() + .get_attr_for_layout(&ns!(), &local_name!("background")) + .and_then(AttrValue::as_resolved_url) + .cloned() } } diff --git a/components/script/dom/htmlcanvaselement.rs b/components/script/dom/htmlcanvaselement.rs index dda0f0b1536..c2958751952 100644 --- a/components/script/dom/htmlcanvaselement.rs +++ b/components/script/dom/htmlcanvaselement.rs @@ -152,24 +152,18 @@ impl LayoutHTMLCanvasElementHelpers for LayoutDom<'_, HTMLCanvasElement> { } } - #[allow(unsafe_code)] fn get_width(self) -> LengthOrPercentageOrAuto { - unsafe { - self.upcast::<Element>() - .get_attr_for_layout(&ns!(), &local_name!("width")) - .map(AttrValue::as_uint_px_dimension) - .unwrap_or(LengthOrPercentageOrAuto::Auto) - } + self.upcast::<Element>() + .get_attr_for_layout(&ns!(), &local_name!("width")) + .map(AttrValue::as_uint_px_dimension) + .unwrap_or(LengthOrPercentageOrAuto::Auto) } - #[allow(unsafe_code)] fn get_height(self) -> LengthOrPercentageOrAuto { - unsafe { - self.upcast::<Element>() - .get_attr_for_layout(&ns!(), &local_name!("height")) - .map(AttrValue::as_uint_px_dimension) - .unwrap_or(LengthOrPercentageOrAuto::Auto) - } + self.upcast::<Element>() + .get_attr_for_layout(&ns!(), &local_name!("height")) + .map(AttrValue::as_uint_px_dimension) + .unwrap_or(LengthOrPercentageOrAuto::Auto) } #[allow(unsafe_code)] diff --git a/components/script/dom/htmlfontelement.rs b/components/script/dom/htmlfontelement.rs index fd40c6907f4..f9b1575577e 100644 --- a/components/script/dom/htmlfontelement.rs +++ b/components/script/dom/htmlfontelement.rs @@ -107,32 +107,24 @@ pub trait HTMLFontElementLayoutHelpers { } impl HTMLFontElementLayoutHelpers for LayoutDom<'_, HTMLFontElement> { - #[allow(unsafe_code)] fn get_color(self) -> Option<RGBA> { - unsafe { - self.upcast::<Element>() - .get_attr_for_layout(&ns!(), &local_name!("color")) - .and_then(AttrValue::as_color) - .cloned() - } + self.upcast::<Element>() + .get_attr_for_layout(&ns!(), &local_name!("color")) + .and_then(AttrValue::as_color) + .cloned() } - #[allow(unsafe_code)] fn get_face(self) -> Option<Atom> { - unsafe { - self.upcast::<Element>() - .get_attr_for_layout(&ns!(), &local_name!("face")) - .map(AttrValue::as_atom) - .cloned() - } + self.upcast::<Element>() + .get_attr_for_layout(&ns!(), &local_name!("face")) + .map(AttrValue::as_atom) + .cloned() } - #[allow(unsafe_code)] fn get_size(self) -> Option<u32> { - let size = unsafe { - self.upcast::<Element>() - .get_attr_for_layout(&ns!(), &local_name!("size")) - }; + let size = self + .upcast::<Element>() + .get_attr_for_layout(&ns!(), &local_name!("size")); match size { Some(&AttrValue::UInt(_, s)) => Some(s), _ => None, diff --git a/components/script/dom/htmlhrelement.rs b/components/script/dom/htmlhrelement.rs index 9be680b9043..69fa8887bb1 100644 --- a/components/script/dom/htmlhrelement.rs +++ b/components/script/dom/htmlhrelement.rs @@ -71,25 +71,19 @@ pub trait HTMLHRLayoutHelpers { } impl HTMLHRLayoutHelpers for LayoutDom<'_, HTMLHRElement> { - #[allow(unsafe_code)] fn get_color(self) -> Option<RGBA> { - unsafe { - self.upcast::<Element>() - .get_attr_for_layout(&ns!(), &local_name!("color")) - .and_then(AttrValue::as_color) - .cloned() - } + self.upcast::<Element>() + .get_attr_for_layout(&ns!(), &local_name!("color")) + .and_then(AttrValue::as_color) + .cloned() } - #[allow(unsafe_code)] fn get_width(self) -> LengthOrPercentageOrAuto { - unsafe { - self.upcast::<Element>() - .get_attr_for_layout(&ns!(), &local_name!("width")) - .map(AttrValue::as_dimension) - .cloned() - .unwrap_or(LengthOrPercentageOrAuto::Auto) - } + self.upcast::<Element>() + .get_attr_for_layout(&ns!(), &local_name!("width")) + .map(AttrValue::as_dimension) + .cloned() + .unwrap_or(LengthOrPercentageOrAuto::Auto) } } diff --git a/components/script/dom/htmliframeelement.rs b/components/script/dom/htmliframeelement.rs index 7b98f57a524..b36d3641764 100644 --- a/components/script/dom/htmliframeelement.rs +++ b/components/script/dom/htmliframeelement.rs @@ -499,26 +499,20 @@ impl HTMLIFrameElementLayoutMethods for LayoutDom<'_, HTMLIFrameElement> { unsafe { (*self.unsafe_get()).browsing_context_id.get() } } - #[allow(unsafe_code)] fn get_width(self) -> LengthOrPercentageOrAuto { - unsafe { - self.upcast::<Element>() - .get_attr_for_layout(&ns!(), &local_name!("width")) - .map(AttrValue::as_dimension) - .cloned() - .unwrap_or(LengthOrPercentageOrAuto::Auto) - } + self.upcast::<Element>() + .get_attr_for_layout(&ns!(), &local_name!("width")) + .map(AttrValue::as_dimension) + .cloned() + .unwrap_or(LengthOrPercentageOrAuto::Auto) } - #[allow(unsafe_code)] fn get_height(self) -> LengthOrPercentageOrAuto { - unsafe { - self.upcast::<Element>() - .get_attr_for_layout(&ns!(), &local_name!("height")) - .map(AttrValue::as_dimension) - .cloned() - .unwrap_or(LengthOrPercentageOrAuto::Auto) - } + self.upcast::<Element>() + .get_attr_for_layout(&ns!(), &local_name!("height")) + .map(AttrValue::as_dimension) + .cloned() + .unwrap_or(LengthOrPercentageOrAuto::Auto) } } diff --git a/components/script/dom/htmlimageelement.rs b/components/script/dom/htmlimageelement.rs index 626f23b69f8..cd32e6c95de 100644 --- a/components/script/dom/htmlimageelement.rs +++ b/components/script/dom/htmlimageelement.rs @@ -1415,26 +1415,20 @@ impl LayoutHTMLImageElementHelpers for LayoutDom<'_, HTMLImageElement> { .clone() } - #[allow(unsafe_code)] fn get_width(self) -> LengthOrPercentageOrAuto { - unsafe { - self.upcast::<Element>() - .get_attr_for_layout(&ns!(), &local_name!("width")) - .map(AttrValue::as_dimension) - .cloned() - .unwrap_or(LengthOrPercentageOrAuto::Auto) - } + self.upcast::<Element>() + .get_attr_for_layout(&ns!(), &local_name!("width")) + .map(AttrValue::as_dimension) + .cloned() + .unwrap_or(LengthOrPercentageOrAuto::Auto) } - #[allow(unsafe_code)] fn get_height(self) -> LengthOrPercentageOrAuto { - unsafe { - self.upcast::<Element>() - .get_attr_for_layout(&ns!(), &local_name!("height")) - .map(AttrValue::as_dimension) - .cloned() - .unwrap_or(LengthOrPercentageOrAuto::Auto) - } + self.upcast::<Element>() + .get_attr_for_layout(&ns!(), &local_name!("height")) + .map(AttrValue::as_dimension) + .cloned() + .unwrap_or(LengthOrPercentageOrAuto::Auto) } } diff --git a/components/script/dom/htmlinputelement.rs b/components/script/dom/htmlinputelement.rs index 2517d8c94ca..ef4c6e0d7d9 100755 --- a/components/script/dom/htmlinputelement.rs +++ b/components/script/dom/htmlinputelement.rs @@ -730,13 +730,11 @@ impl<'dom> LayoutHTMLInputElementHelpers<'dom> for LayoutDom<'dom, HTMLInputElem input: LayoutDom<'dom, HTMLInputElement>, default: &'static str, ) -> Cow<'dom, str> { - unsafe { - input - .upcast::<Element>() - .get_attr_val_for_layout(&ns!(), &local_name!("value")) - .unwrap_or(default) - .into() - } + input + .upcast::<Element>() + .get_attr_val_for_layout(&ns!(), &local_name!("value")) + .unwrap_or(default) + .into() } let placeholder = unsafe { &**self.unsafe_get().placeholder.borrow_for_layout() }; diff --git a/components/script/dom/htmltablecellelement.rs b/components/script/dom/htmltablecellelement.rs index 792c3c3aab0..81e9dafb1cc 100644 --- a/components/script/dom/htmltablecellelement.rs +++ b/components/script/dom/htmltablecellelement.rs @@ -104,41 +104,32 @@ pub trait HTMLTableCellElementLayoutHelpers { fn get_width(self) -> LengthOrPercentageOrAuto; } -#[allow(unsafe_code)] impl HTMLTableCellElementLayoutHelpers for LayoutDom<'_, HTMLTableCellElement> { fn get_background_color(self) -> Option<RGBA> { - unsafe { - self.upcast::<Element>() - .get_attr_for_layout(&ns!(), &local_name!("bgcolor")) - .and_then(AttrValue::as_color) - .cloned() - } + self.upcast::<Element>() + .get_attr_for_layout(&ns!(), &local_name!("bgcolor")) + .and_then(AttrValue::as_color) + .cloned() } fn get_colspan(self) -> Option<u32> { - unsafe { - self.upcast::<Element>() - .get_attr_for_layout(&ns!(), &local_name!("colspan")) - .map(AttrValue::as_uint) - } + self.upcast::<Element>() + .get_attr_for_layout(&ns!(), &local_name!("colspan")) + .map(AttrValue::as_uint) } fn get_rowspan(self) -> Option<u32> { - unsafe { - self.upcast::<Element>() - .get_attr_for_layout(&ns!(), &local_name!("rowspan")) - .map(AttrValue::as_uint) - } + self.upcast::<Element>() + .get_attr_for_layout(&ns!(), &local_name!("rowspan")) + .map(AttrValue::as_uint) } fn get_width(self) -> LengthOrPercentageOrAuto { - unsafe { - self.upcast::<Element>() - .get_attr_for_layout(&ns!(), &local_name!("width")) - .map(AttrValue::as_dimension) - .cloned() - .unwrap_or(LengthOrPercentageOrAuto::Auto) - } + self.upcast::<Element>() + .get_attr_for_layout(&ns!(), &local_name!("width")) + .map(AttrValue::as_dimension) + .cloned() + .unwrap_or(LengthOrPercentageOrAuto::Auto) } } diff --git a/components/script/dom/htmltableelement.rs b/components/script/dom/htmltableelement.rs index 6f19fe0f909..f42e72b5247 100644 --- a/components/script/dom/htmltableelement.rs +++ b/components/script/dom/htmltableelement.rs @@ -413,14 +413,11 @@ pub trait HTMLTableElementLayoutHelpers { } impl HTMLTableElementLayoutHelpers for LayoutDom<'_, HTMLTableElement> { - #[allow(unsafe_code)] fn get_background_color(self) -> Option<RGBA> { - unsafe { - self.upcast::<Element>() - .get_attr_for_layout(&ns!(), &local_name!("bgcolor")) - .and_then(AttrValue::as_color) - .cloned() - } + self.upcast::<Element>() + .get_attr_for_layout(&ns!(), &local_name!("bgcolor")) + .and_then(AttrValue::as_color) + .cloned() } #[allow(unsafe_code)] @@ -433,15 +430,12 @@ impl HTMLTableElementLayoutHelpers for LayoutDom<'_, HTMLTableElement> { unsafe { (*self.unsafe_get()).cellspacing.get() } } - #[allow(unsafe_code)] fn get_width(self) -> LengthOrPercentageOrAuto { - unsafe { - self.upcast::<Element>() - .get_attr_for_layout(&ns!(), &local_name!("width")) - .map(AttrValue::as_dimension) - .cloned() - .unwrap_or(LengthOrPercentageOrAuto::Auto) - } + self.upcast::<Element>() + .get_attr_for_layout(&ns!(), &local_name!("width")) + .map(AttrValue::as_dimension) + .cloned() + .unwrap_or(LengthOrPercentageOrAuto::Auto) } } diff --git a/components/script/dom/htmltablerowelement.rs b/components/script/dom/htmltablerowelement.rs index e9a0365f9cf..1bece55857b 100644 --- a/components/script/dom/htmltablerowelement.rs +++ b/components/script/dom/htmltablerowelement.rs @@ -149,15 +149,12 @@ pub trait HTMLTableRowElementLayoutHelpers { fn get_background_color(self) -> Option<RGBA>; } -#[allow(unsafe_code)] impl HTMLTableRowElementLayoutHelpers for LayoutDom<'_, HTMLTableRowElement> { fn get_background_color(self) -> Option<RGBA> { - unsafe { - self.upcast::<Element>() - .get_attr_for_layout(&ns!(), &local_name!("bgcolor")) - .and_then(AttrValue::as_color) - .cloned() - } + self.upcast::<Element>() + .get_attr_for_layout(&ns!(), &local_name!("bgcolor")) + .and_then(AttrValue::as_color) + .cloned() } } diff --git a/components/script/dom/htmltablesectionelement.rs b/components/script/dom/htmltablesectionelement.rs index 601e4da9c54..fa0f3b93ab5 100644 --- a/components/script/dom/htmltablesectionelement.rs +++ b/components/script/dom/htmltablesectionelement.rs @@ -87,15 +87,12 @@ pub trait HTMLTableSectionElementLayoutHelpers { fn get_background_color(self) -> Option<RGBA>; } -#[allow(unsafe_code)] impl HTMLTableSectionElementLayoutHelpers for LayoutDom<'_, HTMLTableSectionElement> { fn get_background_color(self) -> Option<RGBA> { - unsafe { - self.upcast::<Element>() - .get_attr_for_layout(&ns!(), &local_name!("bgcolor")) - .and_then(AttrValue::as_color) - .cloned() - } + self.upcast::<Element>() + .get_attr_for_layout(&ns!(), &local_name!("bgcolor")) + .and_then(AttrValue::as_color) + .cloned() } } diff --git a/components/script/dom/htmltextareaelement.rs b/components/script/dom/htmltextareaelement.rs index 8cade345f0f..248dfa33047 100755 --- a/components/script/dom/htmltextareaelement.rs +++ b/components/script/dom/htmltextareaelement.rs @@ -96,22 +96,16 @@ impl LayoutHTMLTextAreaElementHelpers for LayoutDom<'_, HTMLTextAreaElement> { )) } - #[allow(unsafe_code)] fn get_cols(self) -> u32 { - unsafe { - self.upcast::<Element>() - .get_attr_for_layout(&ns!(), &local_name!("cols")) - .map_or(DEFAULT_COLS, AttrValue::as_uint) - } + self.upcast::<Element>() + .get_attr_for_layout(&ns!(), &local_name!("cols")) + .map_or(DEFAULT_COLS, AttrValue::as_uint) } - #[allow(unsafe_code)] fn get_rows(self) -> u32 { - unsafe { - self.upcast::<Element>() - .get_attr_for_layout(&ns!(), &local_name!("rows")) - .map_or(DEFAULT_ROWS, AttrValue::as_uint) - } + self.upcast::<Element>() + .get_attr_for_layout(&ns!(), &local_name!("rows")) + .map_or(DEFAULT_ROWS, AttrValue::as_uint) } } diff --git a/components/script/dom/svgsvgelement.rs b/components/script/dom/svgsvgelement.rs index a4f2401072f..583bdb0eb44 100644 --- a/components/script/dom/svgsvgelement.rs +++ b/components/script/dom/svgsvgelement.rs @@ -53,19 +53,16 @@ pub trait LayoutSVGSVGElementHelpers { } impl LayoutSVGSVGElementHelpers for LayoutDom<'_, SVGSVGElement> { - #[allow(unsafe_code, non_snake_case)] fn data(self) -> SVGSVGData { - unsafe { - let width_attr = self - .upcast::<Element>() - .get_attr_for_layout(&ns!(), &local_name!("width")); - let height_attr = self - .upcast::<Element>() - .get_attr_for_layout(&ns!(), &local_name!("height")); - SVGSVGData { - width: width_attr.map_or(DEFAULT_WIDTH, |val| val.as_uint()), - height: height_attr.map_or(DEFAULT_HEIGHT, |val| val.as_uint()), - } + let width_attr = self + .upcast::<Element>() + .get_attr_for_layout(&ns!(), &local_name!("width")); + let height_attr = self + .upcast::<Element>() + .get_attr_for_layout(&ns!(), &local_name!("height")); + SVGSVGData { + width: width_attr.map_or(DEFAULT_WIDTH, |val| val.as_uint()), + height: height_attr.map_or(DEFAULT_HEIGHT, |val| val.as_uint()), } } } |