diff options
author | Oriol Brufau <obrufau@igalia.com> | 2025-02-05 03:35:58 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-02-05 02:35:58 +0000 |
commit | fdbfecf7dd30e2feb0bca468b9326c5e61e91b49 (patch) | |
tree | 14d868572e31eb7a8756d60b0ebcfaf885edda72 /components/script/layout_dom/element.rs | |
parent | e2bb772669f86f290657dc66dc290e01947d1cdf (diff) | |
download | servo-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.rs | 17 |
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] { |