aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/layout_dom/element.rs
diff options
context:
space:
mode:
authorOriol Brufau <obrufau@igalia.com>2025-02-05 03:35:58 +0100
committerGitHub <noreply@github.com>2025-02-05 02:35:58 +0000
commitfdbfecf7dd30e2feb0bca468b9326c5e61e91b49 (patch)
tree14d868572e31eb7a8756d60b0ebcfaf885edda72 /components/script/layout_dom/element.rs
parente2bb772669f86f290657dc66dc290e01947d1cdf (diff)
downloadservo-fdbfecf7dd30e2feb0bca468b9326c5e61e91b49.tar.gz
servo-fdbfecf7dd30e2feb0bca468b9326c5e61e91b49.zip
Upgrade Stylo to 2025-02-03 (#35289)
* Upgrade Stylo to 2025-02-03 Signed-off-by: Oriol Brufau <obrufau@igalia.com> * Fixup for https://phabricator.services.mozilla.com/D233218 Signed-off-by: Oriol Brufau <obrufau@igalia.com> * Fixup for https://phabricator.services.mozilla.com/D233758 Signed-off-by: Oriol Brufau <obrufau@igalia.com> * Fixup for https://phabricator.services.mozilla.com/D231255 Signed-off-by: Oriol Brufau <obrufau@igalia.com> * Update test expectations Signed-off-by: Oriol Brufau <obrufau@igalia.com> --------- Signed-off-by: Oriol Brufau <obrufau@igalia.com>
Diffstat (limited to 'components/script/layout_dom/element.rs')
-rw-r--r--components/script/layout_dom/element.rs17
1 files changed, 12 insertions, 5 deletions
diff --git a/components/script/layout_dom/element.rs b/components/script/layout_dom/element.rs
index 1abd64e1fbf..05271793184 100644
--- a/components/script/layout_dom/element.rs
+++ b/components/script/layout_dom/element.rs
@@ -33,6 +33,7 @@ use style::selector_parser::{
SelectorImpl,
};
use style::shared_lock::Locked as StyleLocked;
+use style::stylesheets::scope_rule::ImplicitScopeRoot;
use style::values::computed::Display;
use style::values::{AtomIdent, AtomString};
use style::CaseSensitivityExt;
@@ -498,16 +499,22 @@ impl<'dom> style::dom::TElement for ServoLayoutElement<'dom> {
{
}
- /// Convert an opaque element back into the element.
- fn unopaque(opaque: ::selectors::OpaqueElement) -> Self {
- unsafe {
- let ptr = opaque.as_const_ptr::<JSObject>();
+ /// Returns the implicit scope root for given sheet index and host.
+ fn implicit_scope_for_sheet_in_shadow_root(
+ opaque_host: ::selectors::OpaqueElement,
+ sheet_index: usize,
+ ) -> Option<ImplicitScopeRoot> {
+ // As long as this "unopaqued" element does not escape this function, we're not leaking
+ // potentially-mutable elements from opaque elements.
+ let host = unsafe {
+ let ptr = opaque_host.as_const_ptr::<JSObject>();
let untrusted_address = UntrustedNodeAddress::from_id(ptr as usize);
let node = Node::from_untrusted_node_address(untrusted_address);
let trusted_address = node.to_trusted_node_address();
let servo_layout_node = ServoLayoutNode::new(&trusted_address);
servo_layout_node.as_element().unwrap()
- }
+ };
+ host.shadow_root()?.implicit_scope_for_sheet(sheet_index)
}
fn slotted_nodes(&self) -> &[Self::ConcreteNode] {