LibWeb: Invalidate owner sheet on add/remove in CSSStyleProperties

Fixes at least 2 WPT subtests.
This commit is contained in:
Andreas Kling 2025-04-24 14:25:50 +02:00 committed by Andreas Kling
parent fbb3b06462
commit cf34a7bb32
Notes: github-actions[bot] 2025-04-24 16:28:02 +00:00
6 changed files with 87 additions and 7 deletions

View file

@ -270,9 +270,13 @@ WebIDL::ExceptionOr<void> CSSStyleProperties::set_property(StringView property_n
}
// 10. If updated is true, update style attribute for the CSS declaration block.
if (updated)
if (updated) {
update_style_attribute();
// Non-standard: Invalidate style for the owners of our containing sheet, if any.
invalidate_owners(DOM::StyleInvalidationReason::CSSStylePropertiesSetProperty);
}
return {};
}
@ -1049,9 +1053,13 @@ WebIDL::ExceptionOr<String> CSSStyleProperties::remove_property(StringView prope
}
// 7. If removed is true, Update style attribute for the CSS declaration block.
if (removed)
if (removed) {
update_style_attribute();
// Non-standard: Invalidate style for the owners of our containing sheet, if any.
invalidate_owners(DOM::StyleInvalidationReason::CSSStylePropertiesRemoveProperty);
}
// 8. Return value.
return value;
}
@ -1164,15 +1172,20 @@ WebIDL::ExceptionOr<void> CSSStyleProperties::set_css_text(StringView css_text)
update_style_attribute();
// Non-standard: Invalidate style for the owners of our containing sheet, if any.
if (auto rule = parent_rule()) {
if (auto sheet = rule->parent_style_sheet()) {
sheet->invalidate_owners(DOM::StyleInvalidationReason::CSSStylePropertiesTextChange);
}
}
invalidate_owners(DOM::StyleInvalidationReason::CSSStylePropertiesTextChange);
return {};
}
void CSSStyleProperties::invalidate_owners(DOM::StyleInvalidationReason reason)
{
if (auto rule = parent_rule()) {
if (auto sheet = rule->parent_style_sheet()) {
sheet->invalidate_owners(reason);
}
}
}
// https://drafts.csswg.org/cssom/#set-a-css-declaration
bool CSSStyleProperties::set_a_css_declaration(PropertyID property_id, NonnullRefPtr<CSSStyleValue const> value, Important important)
{