diff --git a/layout/style/nsCSSParser.cpp b/layout/style/nsCSSParser.cpp index c467525c29..dd6f0f4a3d 100644 --- a/layout/style/nsCSSParser.cpp +++ b/layout/style/nsCSSParser.cpp @@ -143,8 +143,7 @@ struct ReduceNumberCalcOps : public mozilla::css::BasicFloatCalcOps, { result_type ComputeLeafValue(const nsCSSValue& aValue) { - // FIXME: Restore this assertion once ParseColor no longer uses this class. - //MOZ_ASSERT(aValue.GetUnit() == eCSSUnit_Number, "unexpected unit"); + MOZ_ASSERT(aValue.GetUnit() == eCSSUnit_Number, "unexpected unit"); return aValue.GetFloatValue(); } @@ -154,6 +153,17 @@ struct ReduceNumberCalcOps : public mozilla::css::BasicFloatCalcOps, } }; +// Same as above, but reduces leaves as . You normally don't want to use this. +// Only useful in parsing percentage saturation and lightness values by ParseColorComponent. +struct ReducePercentageCalcOps : ReduceNumberCalcOps +{ + result_type ComputeLeafValue(const nsCSSValue& aValue) + { + MOZ_ASSERT(aValue.GetUnit() == eCSSUnit_Percent, "unexpected unit"); + return aValue.GetPercentValue(); + } +}; + static_assert(css::eAuthorSheetFeatures == 0 && css::eUserSheetFeatures == 1 && css::eAgentSheetFeatures == 2, @@ -7324,7 +7334,7 @@ CSSParserImpl::ParseColorComponent(float& aComponent, Maybe aSeparator) if (!ParseCalc(aValue, VARIANT_LPN | VARIANT_CALC)) { return false; } - ReduceNumberCalcOps ops; + ReducePercentageCalcOps ops; value = mozilla::css::ComputeCalc(aValue, ops); } else { REPORT_UNEXPECTED_TOKEN(PEExpectedPercent);