diff --git a/Libraries/LibWeb/CSS/StyleComputer.cpp b/Libraries/LibWeb/CSS/StyleComputer.cpp index eca04ed3e58..b74e5e212c4 100644 --- a/Libraries/LibWeb/CSS/StyleComputer.cpp +++ b/Libraries/LibWeb/CSS/StyleComputer.cpp @@ -2656,9 +2656,6 @@ void StyleComputer::collect_selector_insights(Selector const& selector, Selector if (simple_selector.pseudo_class().type == PseudoClass::Has) { insights.has_has_selectors = true; } - if (simple_selector.pseudo_class().type == PseudoClass::Defined) { - insights.has_defined_selectors = true; - } for (auto const& argument_selector : simple_selector.pseudo_class().argument_selector_list) { collect_selector_insights(*argument_selector, insights); } @@ -3175,13 +3172,4 @@ bool StyleComputer::may_have_has_selectors() const return m_selector_insights->has_has_selectors; } -bool StyleComputer::may_have_defined_selectors() const -{ - if (!has_valid_rule_cache()) - return true; - - build_rule_cache_if_needed(); - return m_selector_insights->has_defined_selectors; -} - } diff --git a/Libraries/LibWeb/CSS/StyleComputer.h b/Libraries/LibWeb/CSS/StyleComputer.h index 07631eb4b68..3d26c17070c 100644 --- a/Libraries/LibWeb/CSS/StyleComputer.h +++ b/Libraries/LibWeb/CSS/StyleComputer.h @@ -177,7 +177,6 @@ public: void collect_animation_into(DOM::Element&, Optional, GC::Ref animation, ComputedProperties&, AnimationRefresh = AnimationRefresh::No) const; [[nodiscard]] bool may_have_has_selectors() const; - [[nodiscard]] bool may_have_defined_selectors() const; size_t number_of_css_font_faces_with_loading_in_progress() const; @@ -257,7 +256,6 @@ private: struct SelectorInsights { bool has_has_selectors { false }; - bool has_defined_selectors { false }; }; struct RuleCache { diff --git a/Libraries/LibWeb/CSS/StyleInvalidationData.cpp b/Libraries/LibWeb/CSS/StyleInvalidationData.cpp index 8acc5a5ec8a..af281ffb15c 100644 --- a/Libraries/LibWeb/CSS/StyleInvalidationData.cpp +++ b/Libraries/LibWeb/CSS/StyleInvalidationData.cpp @@ -69,6 +69,7 @@ static void collect_properties_used_in_has(Selector::SimpleSelector const& selec switch (pseudo_class.type) { case PseudoClass::Enabled: case PseudoClass::Disabled: + case PseudoClass::Defined: case PseudoClass::PlaceholderShown: case PseudoClass::Checked: if (in_has) @@ -122,6 +123,7 @@ static void build_invalidation_sets_for_simple_selector(Selector::SimpleSelector auto const& pseudo_class = selector.pseudo_class(); switch (pseudo_class.type) { case PseudoClass::Enabled: + case PseudoClass::Defined: case PseudoClass::Disabled: case PseudoClass::PlaceholderShown: case PseudoClass::Checked: diff --git a/Libraries/LibWeb/DOM/Element.cpp b/Libraries/LibWeb/DOM/Element.cpp index abe92b2e2f4..22b1ee4c5bd 100644 --- a/Libraries/LibWeb/DOM/Element.cpp +++ b/Libraries/LibWeb/DOM/Element.cpp @@ -1183,6 +1183,9 @@ bool Element::includes_properties_from_invalidation_set(CSS::InvalidationSet con case CSS::PseudoClass::Disabled: { return is_actually_disabled(); } + case CSS::PseudoClass::Defined: { + return is_defined(); + } case CSS::PseudoClass::Checked: { // FIXME: This could be narrowed down to return true only if element is actually checked. return is(*this) || is(*this); @@ -2366,8 +2369,9 @@ void Element::set_custom_element_state(CustomElementState state) return; m_custom_element_state = state; - if (document().style_computer().may_have_defined_selectors()) - invalidate_style(StyleInvalidationReason::CustomElementStateChange); + Vector changed_properties; + changed_properties.append({ .type = CSS::InvalidationSet::Property::Type::PseudoClass, .value = CSS::PseudoClass::Defined }); + invalidate_style(StyleInvalidationReason::CustomElementStateChange, changed_properties, {}); } // https://html.spec.whatwg.org/multipage/dom.html#html-element-constructors