diff --git a/Userland/Libraries/LibWeb/DOM/Element.cpp b/Userland/Libraries/LibWeb/DOM/Element.cpp index e4d952fa30..f814a7eb77 100644 --- a/Userland/Libraries/LibWeb/DOM/Element.cpp +++ b/Userland/Libraries/LibWeb/DOM/Element.cpp @@ -537,6 +537,13 @@ JS::NonnullGCPtr Element::get_elements_by_class_name(DeprecatedF }); } +// https://dom.spec.whatwg.org/#element-shadow-host +bool Element::is_shadow_host() const +{ + // An element is a shadow host if its shadow root is non-null. + return m_shadow_root != nullptr; +} + void Element::set_shadow_root(JS::GCPtr shadow_root) { if (m_shadow_root == shadow_root) diff --git a/Userland/Libraries/LibWeb/DOM/Element.h b/Userland/Libraries/LibWeb/DOM/Element.h index 1fe9b02258..f54bf367a3 100644 --- a/Userland/Libraries/LibWeb/DOM/Element.h +++ b/Userland/Libraries/LibWeb/DOM/Element.h @@ -131,6 +131,7 @@ public: JS::NonnullGCPtr get_elements_by_class_name(DeprecatedFlyString const&); + bool is_shadow_host() const; ShadowRoot* shadow_root_internal() { return m_shadow_root.ptr(); } ShadowRoot const* shadow_root_internal() const { return m_shadow_root.ptr(); } void set_shadow_root(JS::GCPtr); diff --git a/Userland/Libraries/LibWeb/HTML/Focus.cpp b/Userland/Libraries/LibWeb/HTML/Focus.cpp index e74322da62..abf0523eaa 100644 --- a/Userland/Libraries/LibWeb/HTML/Focus.cpp +++ b/Userland/Libraries/LibWeb/HTML/Focus.cpp @@ -210,7 +210,7 @@ void run_unfocusing_steps(DOM::Node* old_focus_target) // with the focusing steps. auto is_shadow_host = [](DOM::Node* node) { - return is(node) && static_cast(node)->shadow_root() != nullptr; + return is(node) && static_cast(node)->is_shadow_host(); }; // 1. If old focus target is a shadow host whose shadow root's delegates focus is true, and old focus target's