--- a/layout/style/nsCSSParser.cpp
+++ b/layout/style/nsCSSParser.cpp
@@ -7812,20 +7812,18 @@ CSSParserImpl::ParseVariant(nsCSSValue&
return CSSParseResult::Ok;
}
if (((aVariantMask & (VARIANT_LENGTH | VARIANT_ANGLE |
VARIANT_FREQUENCY | VARIANT_TIME)) != 0 &&
eCSSToken_Dimension == tk->mType) ||
((aVariantMask & (VARIANT_LENGTH | VARIANT_ZERO_ANGLE)) != 0 &&
eCSSToken_Number == tk->mType &&
tk->mNumber == 0.0f)) {
- if (((aVariantMask & VARIANT_POSITIVE_DIMENSION) != 0 &&
- tk->mNumber <= 0.0) ||
- ((aVariantMask & VARIANT_NONNEGATIVE_DIMENSION) != 0 &&
- tk->mNumber < 0.0)) {
+ if ((aVariantMask & VARIANT_NONNEGATIVE_DIMENSION) != 0 &&
+ tk->mNumber < 0.0) {
UngetToken();
AssertNextTokenAt(lineBefore, colBefore);
return CSSParseResult::NotFound;
}
if (TranslateDimension(aValue, aVariantMask, tk->mNumber, tk->mIdent)) {
return CSSParseResult::Ok;
}
// Put the token back; we didn't parse it, so we shouldn't consume it
@@ -15672,18 +15670,18 @@ static bool GetFunctionParseInformation(
eAbsoluteLengthCalc,
eTwoLengthPercentCalcs,
eTwoAbsoluteLengthCalcs,
eTwoLengthPercentCalcsOneLengthCalc,
eThreeAbsoluteLengthCalc,
eAngle,
eTwoAngles,
eNumber,
- ePositiveLength,
- ePositiveAbsoluteLength,
+ eNonNegativeLength,
+ eNonNegativeAbsoluteLength,
eTwoNumbers,
eThreeNumbers,
eThreeNumbersOneAngle,
eMatrix,
eMatrixPrefixed,
eMatrix3d,
eMatrix3dPrefixed,
eNumVariantMasks };
@@ -15694,18 +15692,18 @@ static bool GetFunctionParseInformation(
{VARIANT_LB},
{VARIANT_LPCALC, VARIANT_LPCALC},
{VARIANT_LBCALC, VARIANT_LBCALC},
{VARIANT_LPCALC, VARIANT_LPCALC, VARIANT_LCALC},
{VARIANT_LBCALC, VARIANT_LBCALC, VARIANT_LBCALC},
{VARIANT_ANGLE_OR_ZERO},
{VARIANT_ANGLE_OR_ZERO, VARIANT_ANGLE_OR_ZERO},
{VARIANT_NUMBER},
- {VARIANT_LENGTH|VARIANT_POSITIVE_DIMENSION},
- {VARIANT_LB|VARIANT_POSITIVE_DIMENSION},
+ {VARIANT_LENGTH|VARIANT_NONNEGATIVE_DIMENSION},
+ {VARIANT_LB|VARIANT_NONNEGATIVE_DIMENSION},
{VARIANT_NUMBER, VARIANT_NUMBER},
{VARIANT_NUMBER, VARIANT_NUMBER, VARIANT_NUMBER},
{VARIANT_NUMBER, VARIANT_NUMBER, VARIANT_NUMBER, VARIANT_ANGLE_OR_ZERO},
{VARIANT_NUMBER, VARIANT_NUMBER, VARIANT_NUMBER, VARIANT_NUMBER,
VARIANT_NUMBER, VARIANT_NUMBER},
{VARIANT_NUMBER, VARIANT_NUMBER, VARIANT_NUMBER, VARIANT_NUMBER,
VARIANT_LPNCALC, VARIANT_LPNCALC},
{VARIANT_NUMBER, VARIANT_NUMBER, VARIANT_NUMBER, VARIANT_NUMBER,
@@ -15723,18 +15721,18 @@ static bool GetFunctionParseInformation(
eAbsoluteLengthCalc,
eTwoAbsoluteLengthCalcs,
eTwoAbsoluteLengthCalcs,
eThreeAbsoluteLengthCalc,
eThreeAbsoluteLengthCalc,
eAngle,
eTwoAngles,
eNumber,
- ePositiveAbsoluteLength,
- ePositiveAbsoluteLength,
+ eNonNegativeAbsoluteLength,
+ eNonNegativeAbsoluteLength,
eTwoNumbers,
eThreeNumbers,
eThreeNumbersOneAngle,
eMatrix,
eMatrix,
eMatrix3d,
eMatrix3d };
@@ -15832,17 +15830,17 @@ static bool GetFunctionParseInformation(
case eCSSKeyword_matrix3d:
/* 16 matrix values, all numbers */
variantIndex = aIsPrefixed ? eMatrix3dPrefixed : eMatrix3d;
aMinElems = 16U;
aMaxElems = 16U;
break;
case eCSSKeyword_perspective:
/* Exactly one scale number. */
- variantIndex = ePositiveLength;
+ variantIndex = eNonNegativeLength;
aMinElems = 1U;
aMaxElems = 1U;
break;
default:
/* Oh dear, we didn't match. Report an error. */
return false;
}
--- a/layout/style/test/property_database.js
+++ b/layout/style/test/property_database.js
@@ -1989,17 +1989,18 @@ var gCSSProperties = {
"translate(-50px, calc(5px - 10% * 3))",
"translatez(1px)", "translatez(4em)", "translatez(-4px)",
"translatez(0px)", "translatez(2px) translatez(5px)",
"translate3d(3px, 4px, 5px)", "translate3d(2em, 3px, 1em)",
"translatex(2px) translate3d(4px, 5px, 6px) translatey(1px)",
"scale3d(4, 4, 4)", "scale3d(-2, 3, -7)", "scalez(4)",
"scalez(-6)", "rotate3d(2, 3, 4, 45deg)",
"rotate3d(-3, 7, 0, 12rad)", "rotatex(15deg)", "rotatey(-12grad)",
- "rotatez(72rad)", "rotatex(0.125turn)", "perspective(1000px)",
+ "rotatez(72rad)", "rotatex(0.125turn)",
+ "perspective(0px)", "perspective(1000px)",
"matrix3d(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16)",
],
invalid_values: ["1px", "#0000ff", "red", "auto",
"translatex(1)", "translatey(1)", "translate(2)",
"translate(-3, -4)",
"translatex(1px 1px)", "translatex(translatex(1px))",
"translatex(#0000ff)", "translatex(red)", "translatey()",
"matrix(1px, 2px, 3px, 4px, 5px, 6px)", "scale(150%)",
@@ -2009,17 +2010,17 @@ var gCSSProperties = {
"matrix(1, 2, 3, 4, 5%, 6px)", "matrix(1, 2, 3, 4, 5%, 6%)",
"matrix(1, 2, 3, 4, 5px, 6em)",
/* invalid calc() values */
"translatey(-moz-min(5px,10%))",
"translatex(-moz-max(5px,10%))",
"translate(10px, calc(min(5px,10%)))",
"translate(calc(max(5px,10%)), 10%)",
"matrix(1, 0, 0, 1, max(5px * 3), calc(10% - 3px))",
- "perspective(0px)", "perspective(-10px)", "matrix3d(dinosaur)",
+ "perspective(-10px)", "matrix3d(dinosaur)",
"matrix3d(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17)",
"matrix3d(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)",
"matrix3d(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15%, 16)",
"matrix3d(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16px)",
"rotatey(words)", "rotatex(7)", "translate3d(3px, 4px, 1px, 7px)",
"matrix3d(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13px, 14em, 15px, 16)",
"matrix3d(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 20%, 10%, 15, 16)"
],
@@ -2082,18 +2083,18 @@ var gCSSProperties = {
"border", "center red", "right diagonal",
"#00ffff bottom"]
},
"perspective": {
domProp: "perspective",
inherited: false,
type: CSS_TYPE_LONGHAND,
initial_values: [ "none" ],
- other_values: [ "1000px", "500.2px" ],
- invalid_values: [ "pants", "200", "0", "-100px", "-27.2em", "0px" ]
+ other_values: [ "1000px", "500.2px", "0", "0px" ],
+ invalid_values: [ "pants", "200", "-100px", "-27.2em" ]
},
"backface-visibility": {
domProp: "backfaceVisibility",
inherited: false,
type: CSS_TYPE_LONGHAND,
initial_values: [ "visible" ],
other_values: [ "hidden" ],
invalid_values: [ "collapse" ]
@@ -4684,17 +4685,18 @@ var gCSSProperties = {
"matrix(1, 0, 0, 1, calc(5px * 3), calc(10% - 3px))",
"translatez(1px)", "translatez(4em)", "translatez(-4px)",
"translatez(0px)", "translatez(2px) translatez(5px)",
"translate3d(3px, 4px, 5px)", "translate3d(2em, 3px, 1em)",
"translatex(2px) translate3d(4px, 5px, 6px) translatey(1px)",
"scale3d(4, 4, 4)", "scale3d(-2, 3, -7)", "scalez(4)",
"scalez(-6)", "rotate3d(2, 3, 4, 45deg)",
"rotate3d(-3, 7, 0, 12rad)", "rotatex(15deg)", "rotatey(-12grad)",
- "rotatez(72rad)", "rotatex(0.125turn)", "perspective(1000px)",
+ "rotatez(72rad)", "rotatex(0.125turn)",
+ "perspective(0px)", "perspective(1000px)",
"matrix3d(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16)",
/* valid only when prefixed */
"matrix3d(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13px, 14em, 15px, 16)",
"matrix3d(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 20%, 10%, 15, 16)",
],
invalid_values: ["1px", "#0000ff", "red", "auto",
"translatex(1)", "translatey(1)", "translate(2)",
"translate(-3, -4)",
@@ -4705,17 +4707,17 @@ var gCSSProperties = {
"matrix(0, 1%, 2, 3, 4px,5px)", "matrix(0, 1, 2%, 3, 4px, 5px)",
"matrix(0, 1, 2, 3%, 4%, 5%)",
/* invalid calc() values */
"translatey(-moz-min(5px,10%))",
"translatex(-moz-max(5px,10%))",
"translate(10px, calc(min(5px,10%)))",
"translate(calc(max(5px,10%)), 10%)",
"matrix(1, 0, 0, 1, max(5px * 3), calc(10% - 3px))",
- "perspective(0px)", "perspective(-10px)", "matrix3d(dinosaur)",
+ "perspective(-10px)", "matrix3d(dinosaur)",
"matrix3d(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17)",
"matrix3d(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15)",
"matrix3d(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15%, 16)",
"matrix3d(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16px)",
"rotatey(words)", "rotatex(7)", "translate3d(3px, 4px, 1px, 7px)",
],
},
"-moz-transform-origin": {