1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-26 02:17:34 +00:00

LibWeb: Make CSSConditionRule.conditionText read-only

Previously @media rule conditions could be updated by assigning to
`conditionText`. This change aligns our implementation with the CSSOM
specification, which says `CSSConditionRule.conditionText` should be
read-only.
This commit is contained in:
Tim Ledbetter 2024-02-28 18:00:25 +00:00 committed by Andreas Kling
parent b08fd1b9ae
commit 4646a87eba
8 changed files with 29 additions and 15 deletions

View file

@ -0,0 +1,4 @@
@media rule conditionText initial value: not all
@media rule conditionText value after assignment: not all
@supports rule conditionText initial value: not (unsupported-property: unsupported-value)
@supports rule conditionText value after assignment: not (unsupported-property: unsupported-value)

View file

@ -0,0 +1,24 @@
<!DOCTYPE html>
<style>
@media not all {
div { color: red; }
}
@supports not (unsupported-property: unsupported-value) {
div { display: none; }
}
</style>
<div>This text shouldn't be visible</div>
<script src="../include.js"></script>
<script>
test(() => {
const mediaRule = document.styleSheets[0].cssRules[0];
println(`@media rule conditionText initial value: ${mediaRule.conditionText}`);
mediaRule.conditionText = "all";
println(`@media rule conditionText value after assignment: ${mediaRule.conditionText}`);
const supportsRule = document.styleSheets[0].cssRules[1];
println(`@supports rule conditionText initial value: ${supportsRule.conditionText}`);
mediaRule.conditionText = "(unsupported-property: unsupported-value)";
println(`@supports rule conditionText value after assignment: ${supportsRule.conditionText}`);
});
</script>

View file

@ -19,7 +19,6 @@ public:
virtual ~CSSConditionRule() = default; virtual ~CSSConditionRule() = default;
virtual String condition_text() const = 0; virtual String condition_text() const = 0;
virtual void set_condition_text(String const&) = 0;
virtual bool condition_matches() const = 0; virtual bool condition_matches() const = 0;
virtual void for_each_effective_style_rule(Function<void(CSSStyleRule const&)> const& callback) const override; virtual void for_each_effective_style_rule(Function<void(CSSStyleRule const&)> const& callback) const override;

View file

@ -3,5 +3,5 @@
// https://drafts.csswg.org/css-conditional-3/#the-cssconditionrule-interface // https://drafts.csswg.org/css-conditional-3/#the-cssconditionrule-interface
[Exposed=Window] [Exposed=Window]
interface CSSConditionRule : CSSGroupingRule { interface CSSConditionRule : CSSGroupingRule {
attribute CSSOMString conditionText; readonly attribute CSSOMString conditionText;
}; };

View file

@ -42,11 +42,6 @@ String CSSMediaRule::condition_text() const
return m_media->media_text(); return m_media->media_text();
} }
void CSSMediaRule::set_condition_text(String const& text)
{
m_media->set_media_text(text);
}
// https://www.w3.org/TR/cssom-1/#serialize-a-css-rule // https://www.w3.org/TR/cssom-1/#serialize-a-css-rule
String CSSMediaRule::serialized() const String CSSMediaRule::serialized() const
{ {

View file

@ -26,7 +26,6 @@ public:
virtual Type type() const override { return Type::Media; } virtual Type type() const override { return Type::Media; }
virtual String condition_text() const override; virtual String condition_text() const override;
virtual void set_condition_text(String const&) override;
virtual bool condition_matches() const override { return m_media->matches(); } virtual bool condition_matches() const override { return m_media->matches(); }
MediaList* media() const { return m_media; } MediaList* media() const { return m_media; }

View file

@ -35,12 +35,6 @@ String CSSSupportsRule::condition_text() const
return m_supports->to_string(); return m_supports->to_string();
} }
void CSSSupportsRule::set_condition_text(String const& text)
{
if (auto new_supports = parse_css_supports(Parser::ParsingContext { realm() }, text))
m_supports = new_supports.release_nonnull();
}
// https://www.w3.org/TR/cssom-1/#serialize-a-css-rule // https://www.w3.org/TR/cssom-1/#serialize-a-css-rule
String CSSSupportsRule::serialized() const String CSSSupportsRule::serialized() const
{ {

View file

@ -27,7 +27,6 @@ public:
virtual Type type() const override { return Type::Supports; } virtual Type type() const override { return Type::Supports; }
String condition_text() const override; String condition_text() const override;
void set_condition_text(String const&) override;
virtual bool condition_matches() const override { return m_supports->matches(); } virtual bool condition_matches() const override { return m_supports->matches(); }
private: private: