ladybird/Userland/Libraries/LibWeb/CSS/CSSGroupingRule.h
Sam Atkins 0b23dddb4b LibWeb/CSS: Clear child CSS rules' caches too
If a rule gets its caches cleared because it's moved in the OM, then its
child rules' caches are likely invalid and need clearing too.

Assuming that caches only point "upwards", this will correctly clear
them all. For the time being that will be true.
2024-11-07 15:11:24 +01:00

44 lines
1.2 KiB
C++

/*
* Copyright (c) 2021-2024, Sam Atkins <sam@ladybird.org>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#pragma once
#include <AK/Function.h>
#include <AK/NonnullRefPtr.h>
#include <LibWeb/CSS/CSSRule.h>
#include <LibWeb/CSS/CSSRuleList.h>
#include <LibWeb/Forward.h>
namespace Web::CSS {
class CSSGroupingRule : public CSSRule {
WEB_PLATFORM_OBJECT(CSSGroupingRule, CSSRule);
public:
virtual ~CSSGroupingRule() = default;
CSSRuleList const& css_rules() const { return m_rules; }
CSSRuleList& css_rules() { return m_rules; }
CSSRuleList* css_rules_for_bindings() { return m_rules; }
WebIDL::ExceptionOr<u32> insert_rule(StringView rule, u32 index = 0);
WebIDL::ExceptionOr<void> delete_rule(u32 index);
virtual void for_each_effective_rule(TraversalOrder, Function<void(CSSRule const&)> const& callback) const;
virtual void set_parent_style_sheet(CSSStyleSheet*) override;
protected:
CSSGroupingRule(JS::Realm&, CSSRuleList&, Type);
virtual void initialize(JS::Realm&) override;
virtual void visit_edges(Cell::Visitor&) override;
virtual void clear_caches() override;
private:
JS::NonnullGCPtr<CSSRuleList> m_rules;
};
}