Bug 1210575 part 5: Allow CSS -webkit-{linear|radial}-gradient expressions (& 'repeating' variants) to make it to our gradient-parsing code, if webkit prefix support is preffed on. r=heycam

This commit is contained in:
Daniel Holbert 2015-10-15 00:56:12 -07:00
parent 7d47dd45fc
commit 85c2b01606
2 changed files with 52 additions and 2 deletions

View File

@ -1126,6 +1126,7 @@ protected:
enum GradientParsingFlags {
eGradient_Repeating = 1 << 0, // repeating-{linear|radial}-gradient
eGradient_MozLegacy = 1 << 1, // -moz-{linear|radial}-gradient
eGradient_WebkitLegacy = 1 << 2, // -webkit-{linear|radial}-gradient
};
bool ParseLinearGradient(nsCSSValue& aValue, uint8_t aFlags);
bool ParseRadialGradient(nsCSSValue& aValue, uint8_t aFlags);
@ -7481,6 +7482,10 @@ CSSParserImpl::ParseVariant(nsCSSValue& aValue,
StringBeginsWith(tmp, NS_LITERAL_STRING("-moz-"))) {
tmp.Rebind(tmp, 5);
gradientFlags |= eGradient_MozLegacy;
} else if (sWebkitPrefixedAliasesEnabled &&
StringBeginsWith(tmp, NS_LITERAL_STRING("-webkit-"))) {
tmp.Rebind(tmp, 8);
gradientFlags |= eGradient_WebkitLegacy;
}
if (StringBeginsWith(tmp, NS_LITERAL_STRING("repeating-"))) {
tmp.Rebind(tmp, 10);
@ -10681,10 +10686,12 @@ CSSParserImpl::IsFunctionTokenValidForBackgroundImage(
funcName.LowerCaseEqualsLiteral("-moz-repeating-radial-gradient") ||
funcName.LowerCaseEqualsLiteral("-moz-image-rect") ||
funcName.LowerCaseEqualsLiteral("-moz-element") ||
(ShouldUseUnprefixingService() &&
((sWebkitPrefixedAliasesEnabled || ShouldUseUnprefixingService()) &&
(funcName.LowerCaseEqualsLiteral("-webkit-gradient") ||
funcName.LowerCaseEqualsLiteral("-webkit-linear-gradient") ||
funcName.LowerCaseEqualsLiteral("-webkit-radial-gradient")));
funcName.LowerCaseEqualsLiteral("-webkit-radial-gradient") ||
funcName.LowerCaseEqualsLiteral("-webkit-repeating-linear-gradient") ||
funcName.LowerCaseEqualsLiteral("-webkit-repeating-radial-gradient")));
}
// Parse one item of the background shorthand property.

View File

@ -616,6 +616,49 @@ var unbalancedGradientAndElementValues = [
"-moz-element(#a()",
];
if (IsCSSPropertyPrefEnabled("layout.css.prefixes.webkit")) {
// Extend gradient lists with valid/invalid webkit-prefixed expressions:
validGradientAndElementValues.push(
// Basic linear-gradient syntax (valid when prefixed or unprefixed):
"-webkit-linear-gradient(red, green, blue)",
// Angled linear-gradients (valid when prefixed or unprefixed):
"-webkit-linear-gradient(135deg, red, blue)",
"-webkit-linear-gradient(280deg, red 60%, blue)",
// Basic radial-gradient syntax (valid when prefixed or unprefixed):
"-webkit-radial-gradient(circle, white, black)",
"-webkit-radial-gradient(circle, white, black)",
"-webkit-radial-gradient(ellipse closest-side, white, black)",
"-webkit-radial-gradient(circle farthest-corner, white, black)",
// Repeating examples:
"-webkit-repeating-linear-gradient(red 10%, blue 30%)",
"-webkit-repeating-linear-gradient(30deg, pink 20px, orange 70px)",
"-webkit-repeating-radial-gradient(circle, red, blue 10%, red 20%)",
"-webkit-repeating-radial-gradient(circle farthest-corner, gray 10px, yellow 20px)"
);
invalidGradientAndElementValues.push(
// Syntax that's invalid for all types of gradients:
// * empty gradient expressions:
"-webkit-linear-gradient()",
"-webkit-radial-gradient()",
"-webkit-repeating-linear-gradient()",
"-webkit-repeating-radial-gradient()",
// Syntax that's invalid for both -webkit & -moz, but valid for unprefixed:
// XXXdholbert (populated in a later patch)
// Syntax that's invalid for both -webkit & unprefixed, but valid for -moz:
// * initial length
"-webkit-linear-gradient(10px, red, blue)"
// Syntax that's invalid for -webkit, but valid for -moz & unprefixed:
// XXXdholbert (populated in a later patch)
);
}
var gCSSProperties = {
"animation": {
domProp: "animation",