aboutsummaryrefslogtreecommitdiffstats
path: root/components/script_layout_interface/wrapper_traits.rs
diff options
context:
space:
mode:
authorMartin Robinson <mrobinson@igalia.com>2023-04-30 20:21:58 +0200
committerMartin Robinson <mrobinson@igalia.com>2023-05-04 10:46:27 +0200
commit72302e2dae6c4726ae657f7b5b8b048f9f64ccf2 (patch)
tree307e1972dd46de70388bd9cba0f8589f05250226 /components/script_layout_interface/wrapper_traits.rs
parent77a184a0e7379a63a0d9d8bf442d8dd5c3b5e307 (diff)
downloadservo-72302e2dae6c4726ae657f7b5b8b048f9f64ccf2.tar.gz
servo-72302e2dae6c4726ae657f7b5b8b048f9f64ccf2.zip
Detect body elements during layout
During layout it is often useful, for various specification reasons, to know if an element is the `<body>` element of an `<html>` element root. There are a couple places where a brittle heuristic is used to detect `<body>` elements. This information is going to be even more important to properly handle `<html>` elements that inherit their overflow property from their `<body>` children. Implementing this properly requires updating the DOM wrapper interface. This check does reach up to the parent of thread-safe nodes, but this is essentially the same kind of operation that `parent_style()` does, so is ostensibly safe. This change should not change any behavior and is just a preparation step for properly handle `<body>` overflow.
Diffstat (limited to 'components/script_layout_interface/wrapper_traits.rs')
-rw-r--r--components/script_layout_interface/wrapper_traits.rs10
1 files changed, 10 insertions, 0 deletions
diff --git a/components/script_layout_interface/wrapper_traits.rs b/components/script_layout_interface/wrapper_traits.rs
index 2056129244b..10e6f826315 100644
--- a/components/script_layout_interface/wrapper_traits.rs
+++ b/components/script_layout_interface/wrapper_traits.rs
@@ -491,4 +491,14 @@ pub trait ThreadSafeLayoutElement<'dom>:
}
fn is_shadow_host(&self) -> bool;
+
+ /// Returns whether this node is a body element of an html element root
+ /// in an HTML element document.
+ ///
+ /// Note that this does require accessing the parent, which this interface
+ /// technically forbids. But accessing the parent is only unsafe insofar as
+ /// it can be used to reach siblings and cousins. A simple immutable borrow
+ /// of the parent data is fine, since the bottom-up traversal will not process
+ /// the parent until all the children have been processed.
+ fn is_body_element_of_html_element_root(&self) -> bool;
}