LibWeb: Move ariaActiveDescendantElement to ARIAMixin

Not an issue right now, but all IDL types that include the ARIA mixin
will need this.
This commit is contained in:
Timothy Flynn 2025-04-24 11:22:52 -04:00 committed by Tim Ledbetter
commit 0289df9357
Notes: github-actions[bot] 2025-04-25 00:21:29 +00:00
4 changed files with 20 additions and 9 deletions

View file

@ -11,6 +11,14 @@
namespace Web::ARIA { namespace Web::ARIA {
ARIAMixin::ARIAMixin() = default;
ARIAMixin::~ARIAMixin() = default;
void ARIAMixin::visit_edges(GC::Cell::Visitor& visitor)
{
visitor.visit(m_aria_active_descendant_element);
}
// https://www.w3.org/TR/wai-aria-1.2/#introroles // https://www.w3.org/TR/wai-aria-1.2/#introroles
Optional<Role> ARIAMixin::role_from_role_attribute_value() const Optional<Role> ARIAMixin::role_from_role_attribute_value() const
{ {

View file

@ -17,7 +17,7 @@ namespace Web::ARIA {
class ARIAMixin { class ARIAMixin {
public: public:
virtual ~ARIAMixin() = default; virtual ~ARIAMixin();
#define __ENUMERATE_ARIA_ATTRIBUTE(name, attribute) \ #define __ENUMERATE_ARIA_ATTRIBUTE(name, attribute) \
virtual Optional<String> name() const = 0; \ virtual Optional<String> name() const = 0; \
@ -48,10 +48,18 @@ public:
// https://www.w3.org/TR/wai-aria-1.2/#valuetype_idref_list // https://www.w3.org/TR/wai-aria-1.2/#valuetype_idref_list
Vector<String> parse_id_reference_list(Optional<String> const&) const; Vector<String> parse_id_reference_list(Optional<String> const&) const;
GC::Ptr<DOM::Element> aria_active_descendant_element() { return m_aria_active_descendant_element; }
void set_aria_active_descendant_element(GC::Ptr<DOM::Element> value) { m_aria_active_descendant_element = value; }
protected: protected:
ARIAMixin() = default; ARIAMixin();
void visit_edges(GC::Cell::Visitor&);
virtual bool id_reference_exists(String const&) const = 0; virtual bool id_reference_exists(String const&) const = 0;
private:
GC::Ptr<DOM::Element> m_aria_active_descendant_element;
}; };
} }

View file

@ -105,8 +105,8 @@ void Element::visit_edges(Cell::Visitor& visitor)
Base::visit_edges(visitor); Base::visit_edges(visitor);
SlottableMixin::visit_edges(visitor); SlottableMixin::visit_edges(visitor);
Animatable::visit_edges(visitor); Animatable::visit_edges(visitor);
ARIAMixin::visit_edges(visitor);
visitor.visit(m_aria_active_descendant_element);
visitor.visit(m_attributes); visitor.visit(m_attributes);
visitor.visit(m_inline_style); visitor.visit(m_inline_style);
visitor.visit(m_class_list); visitor.visit(m_class_list);
@ -3607,7 +3607,7 @@ void Element::attribute_changed(FlyString const& local_name, Optional<String> co
} else if (local_name == ARIA::AttributeNames::aria_active_descendant) { } else if (local_name == ARIA::AttributeNames::aria_active_descendant) {
// https://html.spec.whatwg.org/multipage/common-dom-interfaces.html#reflecting-content-attributes-in-idl-attributes:concept-element-attributes-change-ext // https://html.spec.whatwg.org/multipage/common-dom-interfaces.html#reflecting-content-attributes-in-idl-attributes:concept-element-attributes-change-ext
// Set element's explicitly set attr-element to null. // Set element's explicitly set attr-element to null.
m_aria_active_descendant_element = nullptr; set_aria_active_descendant_element({});
} }
} }

View file

@ -323,9 +323,6 @@ public:
ENUMERATE_ARIA_ATTRIBUTES ENUMERATE_ARIA_ATTRIBUTES
#undef __ENUMERATE_ARIA_ATTRIBUTE #undef __ENUMERATE_ARIA_ATTRIBUTE
GC::Ptr<DOM::Element> aria_active_descendant_element() { return m_aria_active_descendant_element; }
void set_aria_active_descendant_element(GC::Ptr<DOM::Element> value) { m_aria_active_descendant_element = value; }
virtual bool exclude_from_accessibility_tree() const override; virtual bool exclude_from_accessibility_tree() const override;
virtual bool include_in_accessibility_tree() const override; virtual bool include_in_accessibility_tree() const override;
@ -579,8 +576,6 @@ private:
OwnPtr<CSS::CountersSet> m_counters_set; OwnPtr<CSS::CountersSet> m_counters_set;
GC::Ptr<DOM::Element> m_aria_active_descendant_element;
// https://drafts.csswg.org/css-contain/#proximity-to-the-viewport // https://drafts.csswg.org/css-contain/#proximity-to-the-viewport
ProximityToTheViewport m_proximity_to_the_viewport { ProximityToTheViewport::NotDetermined }; ProximityToTheViewport m_proximity_to_the_viewport { ProximityToTheViewport::NotDetermined };
}; };