From 87b0ddb354191ff096b29c02de6b8814d418cb27 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Sat, 5 Nov 2022 17:06:19 +0100 Subject: [PATCH] LibWeb: Add DOM::Node::parent_or_shadow_host_element() This will be used in style computation to inherit style across shadow tree boundaries. --- Userland/Libraries/LibWeb/DOM/Node.cpp | 13 +++++++++++++ Userland/Libraries/LibWeb/DOM/Node.h | 3 +++ 2 files changed, 16 insertions(+) diff --git a/Userland/Libraries/LibWeb/DOM/Node.cpp b/Userland/Libraries/LibWeb/DOM/Node.cpp index 57a756a109..d249c0b140 100644 --- a/Userland/Libraries/LibWeb/DOM/Node.cpp +++ b/Userland/Libraries/LibWeb/DOM/Node.cpp @@ -872,6 +872,19 @@ ParentNode* Node::parent_or_shadow_host() return verify_cast(parent()); } +Element* Node::parent_or_shadow_host_element() +{ + if (is(*this)) + return static_cast(*this).host(); + if (!parent()) + return nullptr; + if (is(*parent())) + return static_cast(parent()); + if (is(*parent())) + return static_cast(*parent()).host(); + return nullptr; +} + JS::NonnullGCPtr Node::child_nodes() { if (!m_child_nodes) { diff --git a/Userland/Libraries/LibWeb/DOM/Node.h b/Userland/Libraries/LibWeb/DOM/Node.h index 7e0dd8ec0b..a0dd4bda03 100644 --- a/Userland/Libraries/LibWeb/DOM/Node.h +++ b/Userland/Libraries/LibWeb/DOM/Node.h @@ -45,6 +45,9 @@ public: ParentNode* parent_or_shadow_host(); ParentNode const* parent_or_shadow_host() const { return const_cast(this)->parent_or_shadow_host(); } + Element* parent_or_shadow_host_element(); + Element const* parent_or_shadow_host_element() const { return const_cast(this)->parent_or_shadow_host_element(); } + virtual ~Node(); // FIXME: Move cleanup to the regular destructor.