LibWeb/CSS: Resolve NumericCalculationNode to percentage when requested

When the caller of NumericCalculationNode::resolve() does not provide
a percentage_basis, it expects the method to return a raw percentage
value.

Fixes crashing on https://discord.com/login
This commit is contained in:
Aliaksandr Kalenik 2024-01-11 06:49:07 +01:00 committed by Andreas Kling
parent 1593ff2d4c
commit 225ed58f7e
Notes: sideshowbarker 2024-07-17 08:55:54 +09:00
3 changed files with 15 additions and 1 deletions

View file

@ -0,0 +1 @@
rgb(30, 31, 34)

View file

@ -0,0 +1,11 @@
<!doctype html><script src="../include.js"></script><style>
body {
--saturation-factor: 1;
background: hsl(225, calc(var(--saturation-factor, 1) * 6.3%), 12.5%);
}
</style><body></body><script>
test(() => {
const bodyStyle = window.getComputedStyle(document.body);
println(bodyStyle.backgroundColor);
});
</script>

View file

@ -220,9 +220,11 @@ bool NumericCalculationNode::contains_percentage() const
CalculatedStyleValue::CalculationResult NumericCalculationNode::resolve(Optional<Length::ResolutionContext const&>, CalculatedStyleValue::PercentageBasis const& percentage_basis) const
{
if (m_value.has<Percentage>()) {
// NOTE: Depending on whether percentage_basis is set, the caller of resolve() is expecting a raw percentage or
// resolved length.
return percentage_basis.visit(
[&](Empty const&) -> CalculatedStyleValue::CalculationResult {
VERIFY_NOT_REACHED();
return m_value;
},
[&](auto const& value) {
return CalculatedStyleValue::CalculationResult(value.percentage_of(m_value.get<Percentage>()));