From df08b25b3f49a3c9243ae7ec8d54192bcf4cf646 Mon Sep 17 00:00:00 2001 From: Sam Atkins Date: Fri, 8 Oct 2021 16:40:50 +0100 Subject: [PATCH] LibWeb: Move CSSRule iteration to CSSRuleList CSSStyleSheet is no longer the only class that contains a list of rules, so this will save duplicating the logic in multiple places. --- Userland/Libraries/LibWeb/CSS/CSSRuleList.cpp | 34 +++++++++++++++++++ Userland/Libraries/LibWeb/CSS/CSSRuleList.h | 4 +++ .../Libraries/LibWeb/CSS/CSSStyleSheet.cpp | 25 ++------------ Userland/Libraries/LibWeb/CSS/CSSStyleSheet.h | 1 - 4 files changed, 40 insertions(+), 24 deletions(-) diff --git a/Userland/Libraries/LibWeb/CSS/CSSRuleList.cpp b/Userland/Libraries/LibWeb/CSS/CSSRuleList.cpp index ecff5b9118..ebb810806f 100644 --- a/Userland/Libraries/LibWeb/CSS/CSSRuleList.cpp +++ b/Userland/Libraries/LibWeb/CSS/CSSRuleList.cpp @@ -4,6 +4,8 @@ * SPDX-License-Identifier: BSD-2-Clause */ +#include +#include #include #include @@ -74,4 +76,36 @@ DOM::ExceptionOr CSSRuleList::remove_a_css_rule(u32 index) return {}; } +void CSSRuleList::for_each_effective_style_rule(Function const& callback) const +{ + for (auto& rule : m_rules) { + if (rule.type() == CSSRule::Type::Style) { + callback(verify_cast(rule)); + } else if (rule.type() == CSSRule::Type::Import) { + const auto& import_rule = verify_cast(rule); + if (import_rule.has_import_result()) + import_rule.loaded_style_sheet()->for_each_effective_style_rule(callback); + } + } +} + +bool CSSRuleList::for_first_not_loaded_import_rule(Function const& callback) +{ + for (auto& rule : m_rules) { + if (rule.type() == CSSRule::Type::Import) { + auto& import_rule = verify_cast(rule); + if (!import_rule.has_import_result()) { + callback(import_rule); + return true; + } + + if (import_rule.loaded_style_sheet()->for_first_not_loaded_import_rule(callback)) { + return true; + } + } + } + + return false; +} + } diff --git a/Userland/Libraries/LibWeb/CSS/CSSRuleList.h b/Userland/Libraries/LibWeb/CSS/CSSRuleList.h index c91c721720..069d67909b 100644 --- a/Userland/Libraries/LibWeb/CSS/CSSRuleList.h +++ b/Userland/Libraries/LibWeb/CSS/CSSRuleList.h @@ -6,6 +6,7 @@ #pragma once +#include #include #include #include @@ -50,6 +51,9 @@ public: DOM::ExceptionOr remove_a_css_rule(u32 index); DOM::ExceptionOr insert_a_css_rule(NonnullRefPtr, u32 index); + void for_each_effective_style_rule(Function const& callback) const; + bool for_first_not_loaded_import_rule(Function const& callback); + private: explicit CSSRuleList(NonnullRefPtrVector&&); diff --git a/Userland/Libraries/LibWeb/CSS/CSSStyleSheet.cpp b/Userland/Libraries/LibWeb/CSS/CSSStyleSheet.cpp index d4a3dcf065..b7dab97abd 100644 --- a/Userland/Libraries/LibWeb/CSS/CSSStyleSheet.cpp +++ b/Userland/Libraries/LibWeb/CSS/CSSStyleSheet.cpp @@ -4,7 +4,6 @@ * SPDX-License-Identifier: BSD-2-Clause */ -#include #include #include #include @@ -60,32 +59,12 @@ DOM::ExceptionOr CSSStyleSheet::remove_rule(unsigned index) void CSSStyleSheet::for_each_effective_style_rule(Function const& callback) const { - for (auto& rule : *m_rules) - if (rule.type() == CSSRule::Type::Style) { - callback(verify_cast(rule)); - } else if (rule.type() == CSSRule::Type::Import) { - const auto& import_rule = verify_cast(rule); - if (import_rule.has_import_result()) - import_rule.loaded_style_sheet()->for_each_effective_style_rule(callback); - } + m_rules->for_each_effective_style_rule(callback); } bool CSSStyleSheet::for_first_not_loaded_import_rule(Function const& callback) { - for (auto& rule : *m_rules) - if (rule.type() == CSSRule::Type::Import) { - auto& import_rule = verify_cast(rule); - if (!import_rule.has_import_result()) { - callback(import_rule); - return true; - } - - if (import_rule.loaded_style_sheet()->for_first_not_loaded_import_rule(callback)) { - return true; - } - } - - return false; + return m_rules->for_first_not_loaded_import_rule(callback); } } diff --git a/Userland/Libraries/LibWeb/CSS/CSSStyleSheet.h b/Userland/Libraries/LibWeb/CSS/CSSStyleSheet.h index 576ee76fa0..dbbf197093 100644 --- a/Userland/Libraries/LibWeb/CSS/CSSStyleSheet.h +++ b/Userland/Libraries/LibWeb/CSS/CSSStyleSheet.h @@ -8,7 +8,6 @@ #include #include -#include #include #include #include