Title: [98773] trunk
Revision
98773
Author
[email protected]
Date
2011-10-28 15:55:37 -0700 (Fri, 28 Oct 2011)

Log Message

CSS grammar doesn't support functions with no parameters
https://bugs.webkit.org/show_bug.cgi?id=69110

Reviewed by Dean Jackson.

Source/WebCore:

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):

LayoutTests:

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):

Modified Paths

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;
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to