Make LayoutCharacterDataHelpers::data_for_layout be safe

This commit is contained in:
Anthony Ramine 2020-03-31 14:40:47 +02:00
parent 00c5ec202c
commit 409bd3d989
4 changed files with 7 additions and 9 deletions

View file

@ -828,7 +828,7 @@ impl<'le> ::selectors::Element for ServoLayoutElement<'le> {
.dom_children() .dom_children()
.all(|node| match node.script_type_id() { .all(|node| match node.script_type_id() {
NodeTypeId::Element(..) => false, NodeTypeId::Element(..) => false,
NodeTypeId::CharacterData(CharacterDataTypeId::Text(TextTypeId::Text)) => unsafe { NodeTypeId::CharacterData(CharacterDataTypeId::Text(TextTypeId::Text)) => {
node.node.downcast().unwrap().data_for_layout().is_empty() node.node.downcast().unwrap().data_for_layout().is_empty()
}, },
_ => true, _ => true,

View file

@ -835,7 +835,7 @@ impl<'le> ::selectors::Element for ServoLayoutElement<'le> {
.dom_children() .dom_children()
.all(|node| match node.script_type_id() { .all(|node| match node.script_type_id() {
NodeTypeId::Element(..) => false, NodeTypeId::Element(..) => false,
NodeTypeId::CharacterData(CharacterDataTypeId::Text(TextTypeId::Text)) => unsafe { NodeTypeId::CharacterData(CharacterDataTypeId::Text(TextTypeId::Text)) => {
node.node.downcast().unwrap().data_for_layout().is_empty() node.node.downcast().unwrap().data_for_layout().is_empty()
}, },
_ => true, _ => true,

View file

@ -280,16 +280,15 @@ impl CharacterDataMethods for CharacterData {
} }
} }
#[allow(unsafe_code)]
pub trait LayoutCharacterDataHelpers<'dom> { pub trait LayoutCharacterDataHelpers<'dom> {
unsafe fn data_for_layout(self) -> &'dom str; fn data_for_layout(self) -> &'dom str;
} }
#[allow(unsafe_code)]
impl<'dom> LayoutCharacterDataHelpers<'dom> for LayoutDom<'dom, CharacterData> { impl<'dom> LayoutCharacterDataHelpers<'dom> for LayoutDom<'dom, CharacterData> {
#[allow(unsafe_code)]
#[inline] #[inline]
unsafe fn data_for_layout(self) -> &'dom str { fn data_for_layout(self) -> &'dom str {
&(*self.unsafe_get()).data.borrow_for_layout() unsafe { self.unsafe_get().data.borrow_for_layout() }
} }
} }

View file

@ -1456,10 +1456,9 @@ impl<'dom> LayoutNodeHelpers<'dom> for LayoutDom<'dom, Node> {
val val
} }
#[allow(unsafe_code)]
fn text_content(self) -> String { fn text_content(self) -> String {
if let Some(text) = self.downcast::<Text>() { if let Some(text) = self.downcast::<Text>() {
return unsafe { text.upcast().data_for_layout().to_owned() }; return text.upcast().data_for_layout().to_owned();
} }
if let Some(input) = self.downcast::<HTMLInputElement>() { if let Some(input) = self.downcast::<HTMLInputElement>() {