ladybird/Libraries/LibWeb/CSS/Parser
Aliaksandr Kalenik d79bb1aac2 LibWeb: Fix underinvalidation when inline style has custom properties
We have an optimization that allows us to invalidate only the style of
the element itself and mark descendants for inherited properties update
when the "style" attribute changes (unless there are any CSS rules that
use the "style" attribute, then we also invalidate all descendants that
might be affected by those rules). This optimization was not taking into
account that when the inline style has custom properties, we also need
to invalidate all descendants whose style might be affected by them.

This change fixes this bug by saving a flag in Element that indicates
whether its style depends on any custom properties and then invalidating
all descendants with this flag set when the "style" attribute changes.
Unlike font relative lengths invalidation, for elements that depend on
custom properties, we need to actually recompute the style, instead of
individual properties, because values without expanded custom properties
are gone after cascading, and it has to be done again.

The test added for this change is a version of an existing test we had
restructured such that it doesn't trigger aggressive style invalidation
caused by DOM structured changes until the last moment when test results
are printed.
2025-01-28 11:38:06 +00:00
..
ComponentValue.cpp Everywhere: Hoist the Libraries folder to the top-level 2024-11-10 12:50:45 +01:00
ComponentValue.h Everywhere: Hoist the Libraries folder to the top-level 2024-11-10 12:50:45 +01:00
Dimension.h LibWeb/CSS: Add Parser::Dimension::to_string() 2024-12-18 12:21:22 +00:00
GradientParsing.cpp LibWeb/CSS: Replace Parser "current property" with a stack of contexts 2025-01-13 10:59:16 +00:00
Helpers.cpp Everywhere: Hoist the Libraries folder to the top-level 2024-11-10 12:50:45 +01:00
MediaParsing.cpp LibGC: Rename MarkedVector => RootVector 2024-12-26 19:10:44 +01:00
Parser.cpp LibWeb: Fix underinvalidation when inline style has custom properties 2025-01-28 11:38:06 +00:00
Parser.h LibWeb/CSS: Give calc() a CalculationContext for resolving percentages 2025-01-13 10:59:16 +00:00
ParsingContext.cpp LibWeb/CSS: Make ParsingContext's Realm optional 2024-12-05 19:59:57 +01:00
ParsingContext.h LibWeb/CSS: Replace Parser "current property" with a stack of contexts 2025-01-13 10:59:16 +00:00
RuleParsing.cpp LibWeb: Inline CSSStyleValue::to_keyword() 2025-01-28 01:12:45 +01:00
SelectorParsing.cpp LibWeb: Require CSS combinators to be followed by a simple selector 2024-11-23 09:49:33 +01:00
Token.cpp Everywhere: Hoist the Libraries folder to the top-level 2024-11-10 12:50:45 +01:00
Token.h Everywhere: Hoist the Libraries folder to the top-level 2024-11-10 12:50:45 +01:00
Tokenizer.cpp LibWeb: Move CSS character type definitions to new header 2024-12-02 16:19:47 +00:00
Tokenizer.h Everywhere: Hoist the Libraries folder to the top-level 2024-11-10 12:50:45 +01:00
TokenStream.h Everywhere: Hoist the Libraries folder to the top-level 2024-11-10 12:50:45 +01:00
Types.cpp Everywhere: Hoist the Libraries folder to the top-level 2024-11-10 12:50:45 +01:00
Types.h Everywhere: Hoist the Libraries folder to the top-level 2024-11-10 12:50:45 +01:00