From d935a00413cbfc0d292406a1b97a327715882078 Mon Sep 17 00:00:00 2001 From: Sam Atkins Date: Wed, 16 Oct 2024 14:10:59 +0100 Subject: [PATCH] LibWeb/CSS: Clear CSSRule's cached layer name when it is moved Through the CSSOM, rules can be moved around, and so anything cached (for now just the qualified layer name) needs to be recalculated when that happens. This method is virtual so that other rules will be able to clear their cached data too. --- Userland/Libraries/LibWeb/CSS/CSSRule.cpp | 7 +++++++ Userland/Libraries/LibWeb/CSS/CSSRule.h | 2 ++ 2 files changed, 9 insertions(+) diff --git a/Userland/Libraries/LibWeb/CSS/CSSRule.cpp b/Userland/Libraries/LibWeb/CSS/CSSRule.cpp index 79872b5b700..653b8a0a1c1 100644 --- a/Userland/Libraries/LibWeb/CSS/CSSRule.cpp +++ b/Userland/Libraries/LibWeb/CSS/CSSRule.cpp @@ -41,11 +41,18 @@ void CSSRule::set_css_text(StringView) void CSSRule::set_parent_rule(CSSRule* parent_rule) { m_parent_rule = parent_rule; + clear_caches(); } void CSSRule::set_parent_style_sheet(CSSStyleSheet* parent_style_sheet) { m_parent_style_sheet = parent_style_sheet; + clear_caches(); +} + +void CSSRule::clear_caches() +{ + m_cached_layer_name.clear(); } FlyString const& CSSRule::parent_layer_internal_qualified_name_slow_case() const diff --git a/Userland/Libraries/LibWeb/CSS/CSSRule.h b/Userland/Libraries/LibWeb/CSS/CSSRule.h index 28929d41f46..c84527f35a2 100644 --- a/Userland/Libraries/LibWeb/CSS/CSSRule.h +++ b/Userland/Libraries/LibWeb/CSS/CSSRule.h @@ -60,6 +60,8 @@ protected: virtual void visit_edges(Cell::Visitor&) override; + virtual void clear_caches(); + [[nodiscard]] FlyString const& parent_layer_internal_qualified_name() const { if (!m_cached_layer_name.has_value())