Diff
Modified: trunk/LayoutTests/ChangeLog (98772 => 98773)
--- trunk/LayoutTests/ChangeLog 2011-10-28 22:35:13 UTC (rev 98772)
+++ trunk/LayoutTests/ChangeLog 2011-10-28 22:55:37 UTC (rev 98773)
@@ -1,3 +1,22 @@
+2011-10-28 Chris Marrin <[email protected]>
+
+ CSS grammar doesn't support functions with no parameters
+ https://bugs.webkit.org/show_bug.cgi?id=69110
+
+ Reviewed by Dean Jackson.
+
+ Updated tests to include tests for allowing 0 argument functions and for
+ disallowing functions with trailing commas (to pickup a couple of theses
+ cases not in the current tests). Also fixed one typo.
+
+ * css3/filters/filter-property-computed-style-expected.txt:
+ * css3/filters/filter-property-parsing-expected.txt:
+ * css3/filters/filter-property-parsing-invalid-expected.txt:
+ * css3/filters/script-tests/filter-property-computed-style.js:
+ * css3/filters/script-tests/filter-property-parsing-invalid.js:
+ * css3/filters/script-tests/filter-property-parsing.js:
+ (testFilterRule):
+
2011-10-28 John Gregg <[email protected]>
Unreviewed gardening.
Modified: trunk/LayoutTests/css3/filters/filter-property-computed-style-expected.txt (98772 => 98773)
--- trunk/LayoutTests/css3/filters/filter-property-computed-style-expected.txt 2011-10-28 22:35:13 UTC (rev 98772)
+++ trunk/LayoutTests/css3/filters/filter-property-computed-style-expected.txt 2011-10-28 22:55:37 UTC (rev 98773)
@@ -43,6 +43,11 @@
PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE
PASS subRule.cssText is 'grayscale(0)'
+No values : grayscale()
+PASS filterStyle.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE
+PASS subRule.cssText is 'grayscale(1)'
+
Multiple values : grayscale(0.5) grayscale(0.25)
PASS filterStyle.length is 2
PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE
@@ -65,6 +70,11 @@
PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_SEPIA
PASS subRule.cssText is 'sepia(0)'
+No values : sepia()
+PASS filterStyle.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_SEPIA
+PASS subRule.cssText is 'sepia(1)'
+
Multiple values : sepia(0.5) sepia(0.25)
PASS filterStyle.length is 2
PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_SEPIA
@@ -94,6 +104,11 @@
PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_SATURATE
PASS subRule.cssText is 'saturate(0)'
+No values : saturate()
+PASS filterStyle.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_SATURATE
+PASS subRule.cssText is 'saturate(1)'
+
Multiple values : saturate(0.5) saturate(0.25)
PASS filterStyle.length is 2
PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_SATURATE
@@ -138,6 +153,11 @@
PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_HUE_ROTATE
PASS subRule.cssText is 'hue-rotate(0deg)'
+No values : hue-rotate()
+PASS filterStyle.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_HUE_ROTATE
+PASS subRule.cssText is 'hue-rotate(0deg)'
+
Rule combinations : hue-rotate(10deg) grayscale(0.25)
PASS filterStyle.length is 2
PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_HUE_ROTATE
@@ -160,6 +180,11 @@
PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_INVERT
PASS subRule.cssText is 'invert(0)'
+No values : invert()
+PASS filterStyle.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_INVERT
+PASS subRule.cssText is 'invert(1)'
+
Multiple values : invert(0.5) invert(0.25)
PASS filterStyle.length is 2
PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_INVERT
@@ -189,6 +214,11 @@
PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_OPACITY
PASS subRule.cssText is 'opacity(0)'
+No values : opacity()
+PASS filterStyle.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_OPACITY
+PASS subRule.cssText is 'opacity(1)'
+
Multiple values : opacity(0.5) opacity(0.25)
PASS filterStyle.length is 2
PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_OPACITY
@@ -218,6 +248,11 @@
PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_GAMMA
PASS subRule.cssText is 'gamma(1 1 0)'
+No values : gamma()
+PASS filterStyle.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_GAMMA
+PASS subRule.cssText is 'gamma(1 1 0)'
+
Float value : gamma(1.3)
PASS filterStyle.length is 1
PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_GAMMA
@@ -248,6 +283,11 @@
PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_BLUR
PASS subRule.cssText is 'blur(5px 5px)'
+No values : blur()
+PASS filterStyle.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_BLUR
+PASS subRule.cssText is 'blur(0px 0px)'
+
Three values : sharpen(1.0 10px 1)
PASS filterStyle.length is 1
PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_SHARPEN
@@ -268,6 +308,11 @@
PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_SHARPEN
PASS subRule.cssText is 'sharpen(0.5 0px 1)'
+No values : sharpen()
+PASS filterStyle.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_SHARPEN
+PASS subRule.cssText is 'sharpen(0 0px 1)'
+
Multiple operations : grayscale(0.5) sepia(0.25) saturate(0.75) hue-rotate(35deg) invert(0.2) opacity(0.9) gamma(2 1.1 1) blur(5px 2em) sharpen(0.5 3px 2)
PASS filterStyle.length is 9
PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE
Modified: trunk/LayoutTests/css3/filters/filter-property-parsing-expected.txt (98772 => 98773)
--- trunk/LayoutTests/css3/filters/filter-property-parsing-expected.txt 2011-10-28 22:35:13 UTC (rev 98772)
+++ trunk/LayoutTests/css3/filters/filter-property-parsing-expected.txt 2011-10-28 22:55:37 UTC (rev 98773)
@@ -85,6 +85,17 @@
PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE
PASS subRule.cssText is 'grayscale(0)'
+No values : grayscale()
+PASS cssRule.type is 1
+PASS declaration.length is 1
+PASS declaration.getPropertyValue('-webkit-filter') is 'grayscale()'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+PASS jsWrapperClass(filterRule.__proto__) is 'CSSValueListPrototype'
+PASS jsWrapperClass(filterRule.constructor) is 'CSSValueListConstructor'
+PASS filterRule.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE
+PASS subRule.cssText is 'grayscale()'
+
Multiple values : grayscale(0.5) grayscale(0.25)
PASS cssRule.type is 1
PASS declaration.length is 1
@@ -131,6 +142,17 @@
PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_SEPIA
PASS subRule.cssText is 'sepia(0)'
+No values : sepia()
+PASS cssRule.type is 1
+PASS declaration.length is 1
+PASS declaration.getPropertyValue('-webkit-filter') is 'sepia()'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+PASS jsWrapperClass(filterRule.__proto__) is 'CSSValueListPrototype'
+PASS jsWrapperClass(filterRule.constructor) is 'CSSValueListConstructor'
+PASS filterRule.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_SEPIA
+PASS subRule.cssText is 'sepia()'
+
Multiple values : sepia(0.5) sepia(0.25)
PASS cssRule.type is 1
PASS declaration.length is 1
@@ -190,6 +212,17 @@
PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_SATURATE
PASS subRule.cssText is 'saturate(0)'
+No values : saturate()
+PASS cssRule.type is 1
+PASS declaration.length is 1
+PASS declaration.getPropertyValue('-webkit-filter') is 'saturate()'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+PASS jsWrapperClass(filterRule.__proto__) is 'CSSValueListPrototype'
+PASS jsWrapperClass(filterRule.constructor) is 'CSSValueListConstructor'
+PASS filterRule.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_SATURATE
+PASS subRule.cssText is 'saturate()'
+
Multiple values : saturate(0.5) saturate(0.25)
PASS cssRule.type is 1
PASS declaration.length is 1
@@ -282,6 +315,17 @@
PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_HUE_ROTATE
PASS subRule.cssText is 'hue-rotate(0deg)'
+No values : hue-rotate()
+PASS cssRule.type is 1
+PASS declaration.length is 1
+PASS declaration.getPropertyValue('-webkit-filter') is 'hue-rotate()'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+PASS jsWrapperClass(filterRule.__proto__) is 'CSSValueListPrototype'
+PASS jsWrapperClass(filterRule.constructor) is 'CSSValueListConstructor'
+PASS filterRule.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_HUE_ROTATE
+PASS subRule.cssText is 'hue-rotate()'
+
Rule combinations : hue-rotate(10deg) grayscale(0.25)
PASS cssRule.type is 1
PASS declaration.length is 1
@@ -328,6 +372,17 @@
PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_INVERT
PASS subRule.cssText is 'invert(0)'
+No values : invert()
+PASS cssRule.type is 1
+PASS declaration.length is 1
+PASS declaration.getPropertyValue('-webkit-filter') is 'invert()'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+PASS jsWrapperClass(filterRule.__proto__) is 'CSSValueListPrototype'
+PASS jsWrapperClass(filterRule.constructor) is 'CSSValueListConstructor'
+PASS filterRule.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_INVERT
+PASS subRule.cssText is 'invert()'
+
Multiple values : invert(0.5) invert(0.25)
PASS cssRule.type is 1
PASS declaration.length is 1
@@ -387,6 +442,17 @@
PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_OPACITY
PASS subRule.cssText is 'opacity(0)'
+No values : opacity()
+PASS cssRule.type is 1
+PASS declaration.length is 1
+PASS declaration.getPropertyValue('-webkit-filter') is 'opacity()'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+PASS jsWrapperClass(filterRule.__proto__) is 'CSSValueListPrototype'
+PASS jsWrapperClass(filterRule.constructor) is 'CSSValueListConstructor'
+PASS filterRule.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_OPACITY
+PASS subRule.cssText is 'opacity()'
+
Multiple values : opacity(0.5) opacity(0.25)
PASS cssRule.type is 1
PASS declaration.length is 1
@@ -457,6 +523,17 @@
PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_GAMMA
PASS subRule.cssText is 'gamma(1.3)'
+No values : gamma()
+PASS cssRule.type is 1
+PASS declaration.length is 1
+PASS declaration.getPropertyValue('-webkit-filter') is 'gamma()'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+PASS jsWrapperClass(filterRule.__proto__) is 'CSSValueListPrototype'
+PASS jsWrapperClass(filterRule.constructor) is 'CSSValueListConstructor'
+PASS filterRule.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_GAMMA
+PASS subRule.cssText is 'gamma()'
+
Two zeros to px : blur(0 0)
PASS cssRule.type is 1
PASS declaration.length is 1
@@ -501,6 +578,17 @@
PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_BLUR
PASS subRule.cssText is 'blur(10%)'
+No values : blur()
+PASS cssRule.type is 1
+PASS declaration.length is 1
+PASS declaration.getPropertyValue('-webkit-filter') is 'blur()'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+PASS jsWrapperClass(filterRule.__proto__) is 'CSSValueListPrototype'
+PASS jsWrapperClass(filterRule.constructor) is 'CSSValueListConstructor'
+PASS filterRule.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_BLUR
+PASS subRule.cssText is 'blur()'
+
Three values : sharpen(1.0 10px 1)
PASS cssRule.type is 1
PASS declaration.length is 1
@@ -545,6 +633,17 @@
PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_SHARPEN
PASS subRule.cssText is 'sharpen(0.25)'
+No values : sharpen()
+PASS cssRule.type is 1
+PASS declaration.length is 1
+PASS declaration.getPropertyValue('-webkit-filter') is 'sharpen()'
+PASS jsWrapperClass(filterRule) is 'CSSValueList'
+PASS jsWrapperClass(filterRule.__proto__) is 'CSSValueListPrototype'
+PASS jsWrapperClass(filterRule.constructor) is 'CSSValueListConstructor'
+PASS filterRule.length is 1
+PASS subRule.operationType is WebKitCSSFilterValue.CSS_FILTER_SHARPEN
+PASS subRule.cssText is 'sharpen()'
+
Multiple operations : grayscale(0.5) sepia(0.25) saturate(0.75) hue-rotate(35deg) invert(0.2) opacity(0.9) gamma(2 1.1 1) blur(5px 2em) sharpen(0.5 3px 2)
PASS cssRule.type is 1
PASS declaration.length is 1
Modified: trunk/LayoutTests/css3/filters/filter-property-parsing-invalid-expected.txt (98772 => 98773)
--- trunk/LayoutTests/css3/filters/filter-property-parsing-invalid-expected.txt 2011-10-28 22:35:13 UTC (rev 98772)
+++ trunk/LayoutTests/css3/filters/filter-property-parsing-invalid-expected.txt 2011-10-28 22:55:37 UTC (rev 98773)
@@ -214,11 +214,16 @@
PASS declaration.length is 0
PASS declaration.getPropertyValue('-webkit-filter') is null
-Commas : hue-rotate(1.0, 1.0, 1.0)
+Commas : gamma(1.0, 1.0, 1.0)
PASS cssRule.type is 1
PASS declaration.length is 0
PASS declaration.getPropertyValue('-webkit-filter') is null
+Trailing comma : gamma(1.0, 1.0,)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-filter') is null
+
Bare number : blur(1)
PASS cssRule.type is 1
PASS declaration.length is 0
@@ -254,6 +259,11 @@
PASS declaration.length is 0
PASS declaration.getPropertyValue('-webkit-filter') is null
+Trailing comma : blur(1em,)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-filter') is null
+
Missing length : sharpen(1 1 1)
PASS cssRule.type is 1
PASS declaration.length is 0
@@ -278,6 +288,11 @@
PASS cssRule.type is 1
PASS declaration.length is 0
PASS declaration.getPropertyValue('-webkit-filter') is null
+
+Trailing comma : sharpen(1, 10px,)
+PASS cssRule.type is 1
+PASS declaration.length is 0
+PASS declaration.getPropertyValue('-webkit-filter') is null
PASS successfullyParsed is true
TEST COMPLETE
Modified: trunk/LayoutTests/css3/filters/script-tests/filter-property-computed-style.js (98772 => 98773)
--- trunk/LayoutTests/css3/filters/script-tests/filter-property-computed-style.js 2011-10-28 22:35:13 UTC (rev 98772)
+++ trunk/LayoutTests/css3/filters/script-tests/filter-property-computed-style.js 2011-10-28 22:55:37 UTC (rev 98773)
@@ -56,6 +56,11 @@
["WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE"],
["grayscale(0)"]);
+testComputedFilterRule("No values",
+ "grayscale()", 1,
+ ["WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE"],
+ ["grayscale(1)"]);
+
testComputedFilterRule("Multiple values",
"grayscale(0.5) grayscale(0.25)", 2,
["WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE", "WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE"],
@@ -76,6 +81,11 @@
["WebKitCSSFilterValue.CSS_FILTER_SEPIA"],
["sepia(0)"]);
+testComputedFilterRule("No values",
+ "sepia()", 1,
+ ["WebKitCSSFilterValue.CSS_FILTER_SEPIA"],
+ ["sepia(1)"]);
+
testComputedFilterRule("Multiple values",
"sepia(0.5) sepia(0.25)", 2,
["WebKitCSSFilterValue.CSS_FILTER_SEPIA", "WebKitCSSFilterValue.CSS_FILTER_SEPIA"],
@@ -101,6 +111,11 @@
["WebKitCSSFilterValue.CSS_FILTER_SATURATE"],
["saturate(0)"]);
+testComputedFilterRule("No values",
+ "saturate()", 1,
+ ["WebKitCSSFilterValue.CSS_FILTER_SATURATE"],
+ ["saturate(1)"]);
+
testComputedFilterRule("Multiple values",
"saturate(0.5) saturate(0.25)", 2,
["WebKitCSSFilterValue.CSS_FILTER_SATURATE", "WebKitCSSFilterValue.CSS_FILTER_SATURATE"],
@@ -141,6 +156,11 @@
["WebKitCSSFilterValue.CSS_FILTER_HUE_ROTATE"],
["hue-rotate(0deg)"]);
+testComputedFilterRule("No values",
+ "hue-rotate()", 1,
+ ["WebKitCSSFilterValue.CSS_FILTER_HUE_ROTATE"],
+ ["hue-rotate(0deg)"]);
+
testComputedFilterRule("Rule combinations",
"hue-rotate(10deg) grayscale(0.25)", 2,
["WebKitCSSFilterValue.CSS_FILTER_HUE_ROTATE", "WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE"],
@@ -161,6 +181,11 @@
["WebKitCSSFilterValue.CSS_FILTER_INVERT"],
["invert(0)"]);
+testComputedFilterRule("No values",
+ "invert()", 1,
+ ["WebKitCSSFilterValue.CSS_FILTER_INVERT"],
+ ["invert(1)"]);
+
testComputedFilterRule("Multiple values",
"invert(0.5) invert(0.25)", 2,
["WebKitCSSFilterValue.CSS_FILTER_INVERT", "WebKitCSSFilterValue.CSS_FILTER_INVERT"],
@@ -186,6 +211,11 @@
["WebKitCSSFilterValue.CSS_FILTER_OPACITY"],
["opacity(0)"]);
+testComputedFilterRule("No values",
+ "opacity()", 1,
+ ["WebKitCSSFilterValue.CSS_FILTER_OPACITY"],
+ ["opacity(1)"]);
+
testComputedFilterRule("Multiple values",
"opacity(0.5) opacity(0.25)", 2,
["WebKitCSSFilterValue.CSS_FILTER_OPACITY", "WebKitCSSFilterValue.CSS_FILTER_OPACITY"],
@@ -211,6 +241,11 @@
["WebKitCSSFilterValue.CSS_FILTER_GAMMA"],
["gamma(1 1 0)"]);
+testComputedFilterRule("No values",
+ "gamma()", 1,
+ ["WebKitCSSFilterValue.CSS_FILTER_GAMMA"],
+ ["gamma(1 1 0)"]);
+
testComputedFilterRule("Float value",
"gamma(1.3)", 1,
["WebKitCSSFilterValue.CSS_FILTER_GAMMA"],
@@ -241,6 +276,11 @@
["WebKitCSSFilterValue.CSS_FILTER_BLUR"],
["blur(5px 5px)"]);
+testComputedFilterRule("No values",
+ "blur()", 1,
+ ["WebKitCSSFilterValue.CSS_FILTER_BLUR"],
+ ["blur(0px 0px)"]);
+
testComputedFilterRule("Three values",
"sharpen(1.0 10px 1)", 1,
["WebKitCSSFilterValue.CSS_FILTER_SHARPEN"],
@@ -261,6 +301,11 @@
["WebKitCSSFilterValue.CSS_FILTER_SHARPEN"],
["sharpen(0.5 0px 1)"]);
+testComputedFilterRule("No values",
+ "sharpen()", 1,
+ ["WebKitCSSFilterValue.CSS_FILTER_SHARPEN"],
+ ["sharpen(0 0px 1)"]);
+
testComputedFilterRule("Multiple operations",
"grayscale(0.5) sepia(0.25) saturate(0.75) hue-rotate(35deg) invert(0.2) opacity(0.9) gamma(2 1.1 1) blur(5px 2em) sharpen(0.5 3px 2)", 9,
[
Modified: trunk/LayoutTests/css3/filters/script-tests/filter-property-parsing-invalid.js (98772 => 98773)
--- trunk/LayoutTests/css3/filters/script-tests/filter-property-parsing-invalid.js 2011-10-28 22:35:13 UTC (rev 98772)
+++ trunk/LayoutTests/css3/filters/script-tests/filter-property-parsing-invalid.js 2011-10-28 22:55:37 UTC (rev 98773)
@@ -68,7 +68,8 @@
testInvalidFilterRule("Negative number", "gamma(-0.1)");
testInvalidFilterRule("Negative number", "gamma(1.0 -0.1)");
testInvalidFilterRule("Too many parameters", "gamma(1.0 1.0 1.0 1.0)");
-testInvalidFilterRule("Commas", "hue-rotate(1.0, 1.0, 1.0)");
+testInvalidFilterRule("Commas", "gamma(1.0, 1.0, 1.0)");
+testInvalidFilterRule("Trailing comma", "gamma(1.0, 1.0,)");
testInvalidFilterRule("Bare number", "blur(1)");
testInvalidFilterRule("Bare number", "blur(1px 1)");
@@ -77,11 +78,13 @@
testInvalidFilterRule("Too many parameters", "blur(1px 1px 1px)");
testInvalidFilterRule("Too many parameters and commas", "blur(1em, 1em, 2em)");
testInvalidFilterRule("Commas", "blur(10px, 10px)");
+testInvalidFilterRule("Trailing comma", "blur(1em,)");
testInvalidFilterRule("Missing length", "sharpen(1 1 1)");
testInvalidFilterRule("Wrong length type", "sharpen(1 1deg 1)");
testInvalidFilterRule("Too many parameters", "sharpen(1 1px 1 1)");
testInvalidFilterRule("Too many parameters and commas", "sharpen(1, 1px, 1, 1)");
testInvalidFilterRule("Commas", "sharpen(1, 10px, 1)");
+testInvalidFilterRule("Trailing comma", "sharpen(1, 10px,)");
successfullyParsed = true;
Modified: trunk/LayoutTests/css3/filters/script-tests/filter-property-parsing.js (98772 => 98773)
--- trunk/LayoutTests/css3/filters/script-tests/filter-property-parsing.js 2011-10-28 22:35:13 UTC (rev 98772)
+++ trunk/LayoutTests/css3/filters/script-tests/filter-property-parsing.js 2011-10-28 22:55:37 UTC (rev 98773)
@@ -42,10 +42,12 @@
shouldBe("filterRule.length", "" + expectedLength); // shouldBe expects string arguments
- for (var i = 0; i < expectedLength; i++) {
- subRule = filterRule[i];
- shouldBe("subRule.operationType", expectedTypes[i]);
- shouldBe("subRule.cssText", "'" + expectedTexts[i] + "'");
+ if (filterRule) {
+ for (var i = 0; i < expectedLength; i++) {
+ subRule = filterRule[i];
+ shouldBe("subRule.operationType", expectedTypes[i]);
+ shouldBe("subRule.cssText", "'" + expectedTexts[i] + "'");
+ }
}
}
@@ -84,6 +86,11 @@
["WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE"],
["grayscale(0)"]);
+testFilterRule("No values",
+ "grayscale()", 1, "grayscale()",
+ ["WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE"],
+ ["grayscale()"]);
+
testFilterRule("Multiple values",
"grayscale(0.5) grayscale(0.25)", 2, "grayscale(0.5) grayscale(0.25)",
["WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE", "WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE"],
@@ -104,6 +111,11 @@
["WebKitCSSFilterValue.CSS_FILTER_SEPIA"],
["sepia(0)"]);
+testFilterRule("No values",
+ "sepia()", 1, "sepia()",
+ ["WebKitCSSFilterValue.CSS_FILTER_SEPIA"],
+ ["sepia()"]);
+
testFilterRule("Multiple values",
"sepia(0.5) sepia(0.25)", 2, "sepia(0.5) sepia(0.25)",
["WebKitCSSFilterValue.CSS_FILTER_SEPIA", "WebKitCSSFilterValue.CSS_FILTER_SEPIA"],
@@ -129,6 +141,11 @@
["WebKitCSSFilterValue.CSS_FILTER_SATURATE"],
["saturate(0)"]);
+testFilterRule("No values",
+ "saturate()", 1, "saturate()",
+ ["WebKitCSSFilterValue.CSS_FILTER_SATURATE"],
+ ["saturate()"]);
+
testFilterRule("Multiple values",
"saturate(0.5) saturate(0.25)", 2, "saturate(0.5) saturate(0.25)",
["WebKitCSSFilterValue.CSS_FILTER_SATURATE", "WebKitCSSFilterValue.CSS_FILTER_SATURATE"],
@@ -169,6 +186,11 @@
["WebKitCSSFilterValue.CSS_FILTER_HUE_ROTATE"],
["hue-rotate(0deg)"]);
+testFilterRule("No values",
+ "hue-rotate()", 1, "hue-rotate()",
+ ["WebKitCSSFilterValue.CSS_FILTER_HUE_ROTATE"],
+ ["hue-rotate()"]);
+
testFilterRule("Rule combinations",
"hue-rotate(10deg) grayscale(0.25)", 2, "hue-rotate(10deg) grayscale(0.25)",
["WebKitCSSFilterValue.CSS_FILTER_HUE_ROTATE", "WebKitCSSFilterValue.CSS_FILTER_GRAYSCALE"],
@@ -189,6 +211,11 @@
["WebKitCSSFilterValue.CSS_FILTER_INVERT"],
["invert(0)"]);
+testFilterRule("No values",
+ "invert()", 1, "invert()",
+ ["WebKitCSSFilterValue.CSS_FILTER_INVERT"],
+ ["invert()"]);
+
testFilterRule("Multiple values",
"invert(0.5) invert(0.25)", 2, "invert(0.5) invert(0.25)",
["WebKitCSSFilterValue.CSS_FILTER_INVERT", "WebKitCSSFilterValue.CSS_FILTER_INVERT"],
@@ -214,6 +241,11 @@
["WebKitCSSFilterValue.CSS_FILTER_OPACITY"],
["opacity(0)"]);
+testFilterRule("No values",
+ "opacity()", 1, "opacity()",
+ ["WebKitCSSFilterValue.CSS_FILTER_OPACITY"],
+ ["opacity()"]);
+
testFilterRule("Multiple values",
"opacity(0.5) opacity(0.25)", 2, "opacity(0.5) opacity(0.25)",
["WebKitCSSFilterValue.CSS_FILTER_OPACITY", "WebKitCSSFilterValue.CSS_FILTER_OPACITY"],
@@ -244,6 +276,11 @@
["WebKitCSSFilterValue.CSS_FILTER_GAMMA"],
["gamma(1.3)"]);
+testFilterRule("No values",
+ "gamma()", 1, "gamma()",
+ ["WebKitCSSFilterValue.CSS_FILTER_GAMMA"],
+ ["gamma()"]);
+
testFilterRule("Two zeros to px",
"blur(0 0)", 1, "blur(0px 0px)",
["WebKitCSSFilterValue.CSS_FILTER_BLUR"],
@@ -264,6 +301,11 @@
["WebKitCSSFilterValue.CSS_FILTER_BLUR"],
["blur(10%)"]);
+testFilterRule("No values",
+ "blur()", 1, "blur()",
+ ["WebKitCSSFilterValue.CSS_FILTER_BLUR"],
+ ["blur()"]);
+
testFilterRule("Three values",
"sharpen(1.0 10px 1)", 1, "sharpen(1 10px 1)",
["WebKitCSSFilterValue.CSS_FILTER_SHARPEN"],
@@ -284,6 +326,11 @@
["WebKitCSSFilterValue.CSS_FILTER_SHARPEN"],
["sharpen(0.25)"]);
+testFilterRule("No values",
+ "sharpen()", 1, "sharpen()",
+ ["WebKitCSSFilterValue.CSS_FILTER_SHARPEN"],
+ ["sharpen()"]);
+
testFilterRule("Multiple operations",
"grayscale(0.5) sepia(0.25) saturate(0.75) hue-rotate(35deg) invert(0.2) opacity(0.9) gamma(2 1.1 1) blur(5px 2em) sharpen(0.5 3px 2)", 9,
"grayscale(0.5) sepia(0.25) saturate(0.75) hue-rotate(35deg) invert(0.2) opacity(0.9) gamma(2 1.1 1) blur(5px 2em) sharpen(0.5 3px 2)",
Modified: trunk/Source/WebCore/ChangeLog (98772 => 98773)
--- trunk/Source/WebCore/ChangeLog 2011-10-28 22:35:13 UTC (rev 98772)
+++ trunk/Source/WebCore/ChangeLog 2011-10-28 22:55:37 UTC (rev 98773)
@@ -1,3 +1,19 @@
+2011-10-28 Chris Marrin <[email protected]>
+
+ CSS grammar doesn't support functions with no parameters
+ https://bugs.webkit.org/show_bug.cgi?id=69110
+
+ Reviewed by Dean Jackson.
+
+ Add rule to grammar to accept functions with 0 args and return
+ this case with a CSSParserValueList with 0 values. Also fixed
+ filter creation function to properly handle filters with 0
+ arguments.
+
+ * css/CSSGrammar.y:
+ * css/CSSStyleSelector.cpp:
+ (WebCore::CSSStyleSelector::createFilterOperations):
+
2011-10-28 Sheriff Bot <[email protected]>
Unreviewed, rolling out r98757.
Modified: trunk/Source/WebCore/css/CSSGrammar.y (98772 => 98773)
--- trunk/Source/WebCore/css/CSSGrammar.y 2011-10-28 22:35:13 UTC (rev 98772)
+++ trunk/Source/WebCore/css/CSSGrammar.y 2011-10-28 22:55:37 UTC (rev 98773)
@@ -100,7 +100,7 @@
%}
-%expect 54
+%expect 55
%nonassoc LOWEST_PREC
@@ -1478,6 +1478,16 @@
$$.unit = CSSParserValue::Function;
$$.function = f;
} |
+ FUNCTION maybe_space ')' maybe_space {
+ CSSParser* p = static_cast<CSSParser*>(parser);
+ CSSParserFunction* f = p->createFloatingFunction();
+ f->name = $1;
+ CSSParserValueList* valueList = p->createFloatingValueList();
+ f->args = adoptPtr(p->sinkFloatingValueList(valueList));
+ $$.id = 0;
+ $$.unit = CSSParserValue::Function;
+ $$.function = f;
+ } |
FUNCTION maybe_space error {
CSSParser* p = static_cast<CSSParser*>(parser);
CSSParserFunction* f = p->createFloatingFunction();
Modified: trunk/Source/WebCore/css/CSSStyleSelector.cpp (98772 => 98773)
--- trunk/Source/WebCore/css/CSSStyleSelector.cpp 2011-10-28 22:35:13 UTC (rev 98772)
+++ trunk/Source/WebCore/css/CSSStyleSelector.cpp 2011-10-28 22:55:37 UTC (rev 98773)
@@ -5395,9 +5395,6 @@
continue;
WebKitCSSFilterValue* filterValue = static_cast<WebKitCSSFilterValue*>(i.value());
- if (!filterValue->length())
- continue;
-
FilterOperation::OperationType operationType = filterOperationForType(filterValue->operationType());
bool haveNonPrimitiveValue = false;
@@ -5410,10 +5407,11 @@
if (haveNonPrimitiveValue)
continue;
- CSSPrimitiveValue* firstValue = static_cast<CSSPrimitiveValue*>(filterValue->itemWithoutBoundsCheck(0));
+ CSSPrimitiveValue* firstValue = filterValue->length() ? static_cast<CSSPrimitiveValue*>(filterValue->itemWithoutBoundsCheck(0)) : 0;
switch (filterValue->operationType()) {
case WebKitCSSFilterValue::ReferenceFilterOperation: {
- operations.operations().append(ReferenceFilterOperation::create(firstValue->getStringValue(), operationType));
+ if (firstValue)
+ operations.operations().append(ReferenceFilterOperation::create(firstValue->getStringValue(), operationType));
break;
}
case WebKitCSSFilterValue::GrayscaleFilterOperation:
@@ -5427,13 +5425,16 @@
break;
}
case WebKitCSSFilterValue::HueRotateFilterOperation: {
- double angle = firstValue->getDoubleValue();
- if (firstValue->primitiveType() == CSSPrimitiveValue::CSS_RAD)
- angle = rad2deg(angle);
- else if (firstValue->primitiveType() == CSSPrimitiveValue::CSS_GRAD)
- angle = grad2deg(angle);
- else if (firstValue->primitiveType() == CSSPrimitiveValue::CSS_TURN)
- angle = turn2deg(angle);
+ double angle = 0;
+ if (filterValue->length() == 1) {
+ angle = firstValue->getDoubleValue();
+ if (firstValue->primitiveType() == CSSPrimitiveValue::CSS_RAD)
+ angle = rad2deg(angle);
+ else if (firstValue->primitiveType() == CSSPrimitiveValue::CSS_GRAD)
+ angle = grad2deg(angle);
+ else if (firstValue->primitiveType() == CSSPrimitiveValue::CSS_TURN)
+ angle = turn2deg(angle);
+ }
operations.operations().append(BasicColorMatrixFilterOperation::create(angle, operationType));
break;