diff --git a/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp b/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp index c1dc3344df5..b72cdd8dcbf 100644 --- a/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp +++ b/Userland/Libraries/LibWeb/CSS/Parser/Parser.cpp @@ -178,7 +178,7 @@ RefPtr Parser::parse_a_supports(TokenStream& tokens) auto maybe_condition = parse_supports_condition(token_stream); token_stream.skip_whitespace(); if (maybe_condition && !token_stream.has_next_token()) - return Supports::create(maybe_condition.release_nonnull()); + return Supports::create(m_context.realm(), maybe_condition.release_nonnull()); return {}; } @@ -303,7 +303,7 @@ Optional Parser::parse_supports_feature(TokenStreamto_string(), JS::make_handle(m_context.realm()) } + Supports::Declaration { declaration->to_string() } }; } } @@ -316,7 +316,7 @@ Optional Parser::parse_supports_feature(TokenStream&& condition) +Supports::Supports(JS::Realm& realm, NonnullOwnPtr&& condition) : m_condition(move(condition)) { - m_matches = m_condition->evaluate(); + m_matches = m_condition->evaluate(realm); } -bool Supports::Condition::evaluate() const +bool Supports::Condition::evaluate(JS::Realm& realm) const { switch (type) { case Type::Not: - return !children.first().evaluate(); + return !children.first().evaluate(realm); case Type::And: for (auto& child : children) { - if (!child.evaluate()) + if (!child.evaluate(realm)) return false; } return true; case Type::Or: for (auto& child : children) { - if (child.evaluate()) + if (child.evaluate(realm)) return true; } return false; @@ -37,40 +37,40 @@ bool Supports::Condition::evaluate() const VERIFY_NOT_REACHED(); } -bool Supports::InParens::evaluate() const +bool Supports::InParens::evaluate(JS::Realm& realm) const { return value.visit( [&](NonnullOwnPtr const& condition) { - return condition->evaluate(); + return condition->evaluate(realm); }, [&](Feature const& feature) { - return feature.evaluate(); + return feature.evaluate(realm); }, [&](GeneralEnclosed const&) { return false; }); } -bool Supports::Declaration::evaluate() const +bool Supports::Declaration::evaluate(JS::Realm& realm) const { - auto style_property = parse_css_supports_condition(Parser::ParsingContext { *realm }, declaration); + auto style_property = parse_css_supports_condition(Parser::ParsingContext { realm }, declaration); return style_property.has_value(); } -bool Supports::Selector::evaluate() const +bool Supports::Selector::evaluate(JS::Realm& realm) const { - auto style_property = parse_selector(Parser::ParsingContext { *realm }, selector); + auto style_property = parse_selector(Parser::ParsingContext { realm }, selector); return style_property.has_value(); } -bool Supports::Feature::evaluate() const +bool Supports::Feature::evaluate(JS::Realm& realm) const { return value.visit( [&](Declaration const& declaration) { - return declaration.evaluate(); + return declaration.evaluate(realm); }, [&](Selector const& selector) { - return selector.evaluate(); + return selector.evaluate(realm); }); } diff --git a/Userland/Libraries/LibWeb/CSS/Supports.h b/Userland/Libraries/LibWeb/CSS/Supports.h index a531f88d47a..065c22d185c 100644 --- a/Userland/Libraries/LibWeb/CSS/Supports.h +++ b/Userland/Libraries/LibWeb/CSS/Supports.h @@ -23,21 +23,19 @@ class Supports final : public RefCounted { public: struct Declaration { String declaration; - JS::Handle realm; - bool evaluate() const; + [[nodiscard]] bool evaluate(JS::Realm&) const; String to_string() const; }; struct Selector { String selector; - JS::Handle realm; - bool evaluate() const; + [[nodiscard]] bool evaluate(JS::Realm&) const; String to_string() const; }; struct Feature { Variant value; - bool evaluate() const; + [[nodiscard]] bool evaluate(JS::Realm&) const; String to_string() const; }; @@ -45,7 +43,7 @@ public: struct InParens { Variant, Feature, GeneralEnclosed> value; - bool evaluate() const; + [[nodiscard]] bool evaluate(JS::Realm&) const; String to_string() const; }; @@ -58,20 +56,20 @@ public: Type type; Vector children; - bool evaluate() const; + [[nodiscard]] bool evaluate(JS::Realm&) const; String to_string() const; }; - static NonnullRefPtr create(NonnullOwnPtr&& condition) + static NonnullRefPtr create(JS::Realm& realm, NonnullOwnPtr&& condition) { - return adopt_ref(*new Supports(move(condition))); + return adopt_ref(*new Supports(realm, move(condition))); } bool matches() const { return m_matches; } String to_string() const; private: - Supports(NonnullOwnPtr&&); + Supports(JS::Realm&, NonnullOwnPtr&&); NonnullOwnPtr m_condition; bool m_matches { false };