diff options
author | Anthony Ramine <nox@nox.paris> | 2020-04-03 14:34:37 +0200 |
---|---|---|
committer | Anthony Ramine <nox@nox.paris> | 2020-04-04 13:08:51 +0200 |
commit | 516e8e0aa600cdef34e506e0ed7180d12dd9ac7d (patch) | |
tree | 4a41cf0ddf45c1a5a3a70e957d8fa17a767accac /components/layout_thread/dom_wrapper.rs | |
parent | 4c61baee30016b0e60c509111b659873283b4dcf (diff) | |
download | servo-516e8e0aa600cdef34e506e0ed7180d12dd9ac7d.tar.gz servo-516e8e0aa600cdef34e506e0ed7180d12dd9ac7d.zip |
Don't expose any AtomicRefCell directly from style traits
This lets us experiment with how we store this data on the DOM side.
Diffstat (limited to 'components/layout_thread/dom_wrapper.rs')
-rw-r--r-- | components/layout_thread/dom_wrapper.rs | 27 |
1 files changed, 18 insertions, 9 deletions
diff --git a/components/layout_thread/dom_wrapper.rs b/components/layout_thread/dom_wrapper.rs index 4614f30cb93..381a0cfa77d 100644 --- a/components/layout_thread/dom_wrapper.rs +++ b/components/layout_thread/dom_wrapper.rs @@ -30,7 +30,7 @@ #![allow(unsafe_code)] -use atomic_refcell::{AtomicRef, AtomicRefCell, AtomicRefMut}; +use atomic_refcell::{AtomicRef, AtomicRefMut}; use gfx_traits::ByteIndex; use html5ever::{LocalName, Namespace}; use layout::data::StyleAndLayoutData; @@ -551,8 +551,20 @@ impl<'le> TElement for ServoLayoutElement<'le> { self.mutate_data().unwrap() } - fn get_data(&self) -> Option<&AtomicRefCell<ElementData>> { - self.get_style_data().map(|data| &data.element_data) + /// Whether there is an ElementData container. + fn has_data(&self) -> bool { + self.get_style_data().is_some() + } + + /// Immutably borrows the ElementData. + fn borrow_data(&self) -> Option<AtomicRef<ElementData>> { + self.get_style_data().map(|data| data.element_data.borrow()) + } + + /// Mutably borrows the ElementData. + fn mutate_data(&self) -> Option<AtomicRefMut<ElementData>> { + self.get_style_data() + .map(|data| data.element_data.borrow_mut()) } fn skip_item_display_fixup(&self) -> bool { @@ -688,7 +700,7 @@ impl<'le> ServoLayoutElement<'le> { } fn get_style_data(&self) -> Option<&StyleData> { - self.get_style_and_layout_data().map(|opaque| { + self.get_style_and_layout_data().map(|opaque| unsafe { &opaque .downcast_ref::<StyleAndLayoutData>() .unwrap() @@ -1027,7 +1039,7 @@ impl<'ln> ThreadSafeLayoutNode<'ln> for ServoThreadSafeLayoutNode<'ln> { fn parent_style(&self) -> Arc<ComputedValues> { let parent = self.node.parent_node().unwrap().as_element().unwrap(); - let parent_data = parent.get_data().unwrap().borrow(); + let parent_data = parent.borrow_data().unwrap(); parent_data.styles.primary().clone() } @@ -1312,10 +1324,7 @@ impl<'le> ThreadSafeLayoutElement<'le> for ServoThreadSafeLayoutElement<'le> { } fn style_data(&self) -> AtomicRef<ElementData> { - self.element - .get_data() - .expect("Unstyled layout node?") - .borrow() + self.element.borrow_data().expect("Unstyled layout node?") } fn is_shadow_host(&self) -> bool { |