[CSS Grid Layout] minmax() should be a CSSFunction instead of a CSSValueList
authorsvillar@igalia.com <svillar@igalia.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 29 Jan 2014 10:56:48 +0000 (10:56 +0000)
committersvillar@igalia.com <svillar@igalia.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 29 Jan 2014 10:56:48 +0000 (10:56 +0000)
https://bugs.webkit.org/show_bug.cgi?id=127057

Source/WebCore:

Reviewed by Antti Koivisto.

We were incorrectly dumping minmax(x,y) as "x y" instead of
"minmax(x,y)". That's because we were treating minmax() internally
as a CSSValueList instead of a CSSFunction. Replaced that and also
added some extra information to our tests in order to check that
we don't regress. From now on the CSS grid layout testing helper
functions print not only the computed style but also the contents
of element.style.webkitGridDefinition{Columns|Rows}.

* css/CSSFunctionValue.h:
(WebCore::CSSFunctionValue::arguments):
* css/CSSParser.cpp:
(WebCore::CSSParser::parseGridTrackList):
(WebCore::CSSParser::parseGridTrackRepeatFunction):
(WebCore::CSSParser::parseGridTrackSize):
* css/CSSParser.h:
* css/StyleResolver.cpp:
(WebCore::createGridTrackSize):

LayoutTests:

Include the output of element.style.webkitGridDefinition{Columns|Rows}
as part of the expected output.

* fast/css-grid-layout/grid-columns-rows-get-set-expected.txt:
* fast/css-grid-layout/grid-columns-rows-get-set-multiple-expected.txt:
* fast/css-grid-layout/named-grid-line-get-set-expected.txt:
* fast/css-grid-layout/named-grid-line-get-set.html:
* fast/css-grid-layout/resources/grid-definitions-parsing-utils.js:
(testGridDefinitionsSetJSValues):
(testNonGridDefinitionsSetJSValues):
(checkGridDefinitionsSetJSValues):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@163013 268f45cc-cd09-0410-ab3c-d52691b4dbfc

LayoutTests/ChangeLog
LayoutTests/fast/css-grid-layout/grid-columns-rows-get-set-expected.txt
LayoutTests/fast/css-grid-layout/grid-columns-rows-get-set-multiple-expected.txt
LayoutTests/fast/css-grid-layout/named-grid-line-get-set-expected.txt
LayoutTests/fast/css-grid-layout/named-grid-line-get-set.html
LayoutTests/fast/css-grid-layout/resources/grid-definitions-parsing-utils.js
Source/WebCore/ChangeLog
Source/WebCore/css/CSSFunctionValue.h
Source/WebCore/css/CSSParser.cpp
Source/WebCore/css/CSSParser.h
Source/WebCore/css/StyleResolver.cpp

index ce2e4d0..b3a8e91 100644 (file)
@@ -1,3 +1,20 @@
+2014-01-29  Sergio Villar Senin  <svillar@igalia.com>
+
+        [CSS Grid Layout] minmax() should be a CSSFunction instead of a CSSValueList
+        https://bugs.webkit.org/show_bug.cgi?id=127057
+
+        Include the output of element.style.webkitGridDefinition{Columns|Rows}
+        as part of the expected output.
+
+        * fast/css-grid-layout/grid-columns-rows-get-set-expected.txt:
+        * fast/css-grid-layout/grid-columns-rows-get-set-multiple-expected.txt:
+        * fast/css-grid-layout/named-grid-line-get-set-expected.txt:
+        * fast/css-grid-layout/named-grid-line-get-set.html:
+        * fast/css-grid-layout/resources/grid-definitions-parsing-utils.js:
+        (testGridDefinitionsSetJSValues):
+        (testNonGridDefinitionsSetJSValues):
+        (checkGridDefinitionsSetJSValues):
+
 2014-01-28  Jinwoo Song  <jinwoo7.song@samsung.com>
 
         Unreviewed EFL gardening after r162972.
index 1c90e3c..afc7ca2 100644 (file)
@@ -37,35 +37,63 @@ PASS window.getComputedStyle(element, '').getPropertyValue('-webkit-grid-definit
 
 Test getting and setting -webkit-grid-definition-columns and -webkit-grid-definition-rows through JS
 PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-definition-columns') is "18px"
+PASS element.style.webkitGridDefinitionColumns is "18px"
 PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-definition-rows') is "66px"
+PASS element.style.webkitGridDefinitionRows is "66px"
 PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-definition-columns') is "55%"
+PASS element.style.webkitGridDefinitionColumns is "55%"
 PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-definition-rows') is "40%"
+PASS element.style.webkitGridDefinitionRows is "40%"
 PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-definition-columns') is "auto"
+PASS element.style.webkitGridDefinitionColumns is "auto"
 PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-definition-rows') is "auto"
+PASS element.style.webkitGridDefinitionRows is "auto"
 PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-definition-columns') is "80px"
+PASS element.style.webkitGridDefinitionColumns is "10vw"
 PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-definition-rows') is "150px"
+PASS element.style.webkitGridDefinitionRows is "25vh"
 PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-definition-columns') is "-webkit-min-content"
+PASS element.style.webkitGridDefinitionColumns is "-webkit-min-content"
 PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-definition-rows') is "-webkit-min-content"
+PASS element.style.webkitGridDefinitionRows is "-webkit-min-content"
 PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-definition-columns') is "-webkit-max-content"
+PASS element.style.webkitGridDefinitionColumns is "-webkit-max-content"
 PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-definition-rows') is "-webkit-max-content"
+PASS element.style.webkitGridDefinitionRows is "-webkit-max-content"
 
 Test getting and setting -webkit-grid-definition-columns and -webkit-grid-definition-rows to minmax() values through JS
 PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-definition-columns') is "minmax(55%, 45px)"
+PASS element.style.webkitGridDefinitionColumns is "minmax(55%, 45px)"
 PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-definition-rows') is "minmax(30px, 40%)"
+PASS element.style.webkitGridDefinitionRows is "minmax(30px, 40%)"
 PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-definition-columns') is "minmax(220px, 48px)"
+PASS element.style.webkitGridDefinitionColumns is "minmax(22em, 8vh)"
 PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-definition-rows') is "minmax(80px, 50px)"
+PASS element.style.webkitGridDefinitionRows is "minmax(10vw, 5em)"
 PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-definition-columns') is "minmax(-webkit-min-content, 48px)"
+PASS element.style.webkitGridDefinitionColumns is "minmax(-webkit-min-content, 8vh)"
 PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-definition-rows') is "minmax(80px, -webkit-min-content)"
+PASS element.style.webkitGridDefinitionRows is "minmax(10vw, -webkit-min-content)"
 PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-definition-columns') is "minmax(220px, -webkit-max-content)"
+PASS element.style.webkitGridDefinitionColumns is "minmax(22em, -webkit-max-content)"
 PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-definition-rows') is "minmax(-webkit-max-content, 50px)"
+PASS element.style.webkitGridDefinitionRows is "minmax(-webkit-max-content, 5em)"
 PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-definition-columns') is "minmax(-webkit-min-content, -webkit-max-content)"
+PASS element.style.webkitGridDefinitionColumns is "minmax(-webkit-min-content, -webkit-max-content)"
 PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-definition-rows') is "minmax(-webkit-max-content, -webkit-min-content)"
+PASS element.style.webkitGridDefinitionRows is "minmax(-webkit-max-content, -webkit-min-content)"
 PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-definition-columns') is "3600fr"
+PASS element.style.webkitGridDefinitionColumns is "3600fr"
 PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-definition-rows') is "154fr"
+PASS element.style.webkitGridDefinitionRows is "154fr"
 PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-definition-columns') is "3.1459fr"
+PASS element.style.webkitGridDefinitionColumns is "3.1459fr"
 PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-definition-rows') is "2.718fr"
+PASS element.style.webkitGridDefinitionRows is "2.718fr"
 PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-definition-columns') is "3fr"
+PASS element.style.webkitGridDefinitionColumns is "3fr"
 PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-definition-rows') is "4fr"
+PASS element.style.webkitGridDefinitionRows is "4fr"
 
 Test setting grid-definition-columns and grid-definition-rows to bad values through JS
 PASS window.getComputedStyle(element, '').getPropertyValue('-webkit-grid-definition-columns') is "none"
@@ -93,9 +121,13 @@ PASS window.getComputedStyle(element, '').getPropertyValue('-webkit-grid-definit
 
 Test setting grid-definition-columns and grid-definition-rows back to 'none' through JS
 PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-definition-columns') is "18px"
+PASS element.style.webkitGridDefinitionColumns is "18px"
 PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-definition-rows') is "66px"
+PASS element.style.webkitGridDefinitionRows is "66px"
 PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-definition-columns') is "none"
+PASS element.style.webkitGridDefinitionColumns is "none"
 PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-definition-rows') is "none"
+PASS element.style.webkitGridDefinitionRows is "none"
 
 Test setting grid-definition-columns and grid-definition-rows to 'inherit' through JS
 PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-definition-columns') is '50px last'
index e4a7676..758275d 100644 (file)
@@ -35,17 +35,29 @@ PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-definition-row
 
 Test getting and setting grid-definition-rows and grid-definition-columns through JS
 PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-definition-columns') is "18px 22px"
+PASS element.style.webkitGridDefinitionColumns is "18px 22px"
 PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-definition-rows') is "66px 70px"
+PASS element.style.webkitGridDefinitionRows is "66px 70px"
 PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-definition-columns') is "55% 80%"
+PASS element.style.webkitGridDefinitionColumns is "55% 80%"
 PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-definition-rows') is "40% 63%"
+PASS element.style.webkitGridDefinitionRows is "40% 63%"
 PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-definition-columns') is "auto auto"
+PASS element.style.webkitGridDefinitionColumns is "auto auto"
 PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-definition-rows') is "auto auto"
+PASS element.style.webkitGridDefinitionRows is "auto auto"
 PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-definition-columns') is "auto 160px 22px"
+PASS element.style.webkitGridDefinitionColumns is "auto 16em 22px"
 PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-definition-rows') is "56% 100px auto"
+PASS element.style.webkitGridDefinitionRows is "56% 10em auto"
 PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-definition-columns') is "160px minmax(16px, 20px)"
+PASS element.style.webkitGridDefinitionColumns is "16em minmax(16px, 20px)"
 PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-definition-rows') is "minmax(10%, 15%) auto"
+PASS element.style.webkitGridDefinitionRows is "minmax(10%, 15%) auto"
 PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-definition-columns') is "160px 2fr"
+PASS element.style.webkitGridDefinitionColumns is "16em 2fr"
 PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-definition-rows') is "14fr auto"
+PASS element.style.webkitGridDefinitionRows is "14fr auto"
 
 Test getting wrong values set from CSS
 PASS window.getComputedStyle(gridWithNoneAndAuto, '').getPropertyValue('-webkit-grid-definition-columns') is "none"
index 7a0e80d..bfb57ff 100644 (file)
@@ -19,29 +19,53 @@ PASS window.getComputedStyle(gridWithPercentageSameStringMultipleTimes, '').getP
 
 Test getting and setting -webkit-grid-definition-columns and -webkit-grid-definition-rows through JS
 PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-definition-columns') is "first 18px"
+PASS element.style.webkitGridDefinitionColumns is "first 18px"
 PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-definition-rows') is "66px last"
+PASS element.style.webkitGridDefinitionRows is "66px last"
 PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-definition-columns') is "first 55%"
+PASS element.style.webkitGridDefinitionColumns is "first 55%"
 PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-definition-rows') is "40% last"
+PASS element.style.webkitGridDefinitionRows is "40% last"
 PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-definition-columns') is "first auto"
+PASS element.style.webkitGridDefinitionColumns is "first auto"
 PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-definition-rows') is "auto last"
+PASS element.style.webkitGridDefinitionRows is "auto last"
 PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-definition-columns') is "first -webkit-min-content"
+PASS element.style.webkitGridDefinitionColumns is "first -webkit-min-content"
 PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-definition-rows') is "-webkit-min-content last"
+PASS element.style.webkitGridDefinitionRows is "-webkit-min-content last"
 PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-definition-columns') is "first -webkit-max-content"
+PASS element.style.webkitGridDefinitionColumns is "first -webkit-max-content"
 PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-definition-rows') is "-webkit-max-content last"
+PASS element.style.webkitGridDefinitionRows is "-webkit-max-content last"
 PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-definition-columns') is "first minmax(55%, 45px)"
+PASS element.style.webkitGridDefinitionColumns is "first minmax(55%, 45px)"
 PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-definition-rows') is "minmax(30px, 40%) last"
+PASS element.style.webkitGridDefinitionRows is "minmax(30px, 40%) last"
 PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-definition-columns') is "first minmax(220px, -webkit-max-content)"
+PASS element.style.webkitGridDefinitionColumns is "first minmax(22em, -webkit-max-content)"
 PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-definition-rows') is "minmax(-webkit-max-content, 50px) last"
+PASS element.style.webkitGridDefinitionRows is "minmax(-webkit-max-content, 5em) last"
 PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-definition-columns') is "first minmax(220px, -webkit-min-content)"
+PASS element.style.webkitGridDefinitionColumns is "first minmax(22em, -webkit-min-content)"
 PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-definition-rows') is "minmax(-webkit-min-content, 50px) last"
+PASS element.style.webkitGridDefinitionRows is "minmax(-webkit-min-content, 5em) last"
 PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-definition-columns') is "first minmax(-webkit-min-content, -webkit-max-content)"
+PASS element.style.webkitGridDefinitionColumns is "first minmax(-webkit-min-content, -webkit-max-content)"
 PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-definition-rows') is "minmax(-webkit-max-content, -webkit-min-content) last"
+PASS element.style.webkitGridDefinitionRows is "minmax(-webkit-max-content, -webkit-min-content) last"
 PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-definition-columns') is "nav first minmax(-webkit-min-content, -webkit-max-content) last"
+PASS element.style.webkitGridDefinitionColumns is "first nav minmax(-webkit-min-content, -webkit-max-content) last"
 PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-definition-rows') is "nav first minmax(-webkit-max-content, -webkit-min-content) last"
+PASS element.style.webkitGridDefinitionRows is "first nav minmax(-webkit-max-content, -webkit-min-content) last"
 PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-definition-columns') is "nav first minmax(-webkit-min-content, -webkit-max-content) nav auto last"
+PASS element.style.webkitGridDefinitionColumns is "first nav minmax(-webkit-min-content, -webkit-max-content) nav auto last"
 PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-definition-rows') is "first nav2 minmax(-webkit-max-content, -webkit-min-content) nav2 minmax(10px, 15px) last"
+PASS element.style.webkitGridDefinitionRows is "first nav2 minmax(-webkit-max-content, -webkit-min-content) nav2 minmax(10px, 15px) last"
 PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-definition-columns') is "foo bar auto foo auto bar"
+PASS element.style.webkitGridDefinitionColumns is "foo bar auto foo auto bar"
 PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-definition-rows') is "foo bar auto foo auto bar"
+PASS element.style.webkitGridDefinitionRows is "foo bar auto foo auto bar"
 
 Test getting and setting invalid -webkit-grid-definition-columns and -webkit-grid-definition-rows through JS
 PASS window.getComputedStyle(element, '').getPropertyValue('-webkit-grid-definition-columns') is "none"
index 858f1f2..09ec894 100644 (file)
@@ -55,18 +55,18 @@ if (window.testRunner)
 
     debug("");
     debug("Test getting and setting -webkit-grid-definition-columns and -webkit-grid-definition-rows through JS");
-    testGridDefinitionsSetJSValues("'first' 18px", "66px 'last'", "first 18px", "66px last");
-    testGridDefinitionsSetJSValues("'first' 55%", "40% 'last'", "first 55%", "40% last");
-    testGridDefinitionsSetJSValues("'first' auto", "auto 'last'", "first auto", "auto last");
-    testGridDefinitionsSetJSValues("'first' -webkit-min-content", "-webkit-min-content 'last'", "first -webkit-min-content", "-webkit-min-content last");
-    testGridDefinitionsSetJSValues("'first' -webkit-max-content", "-webkit-max-content 'last'", "first -webkit-max-content", "-webkit-max-content last");
-    testGridDefinitionsSetJSValues("'first' minmax(55%, 45px)", "minmax(30px, 40%) 'last'", "first minmax(55%, 45px)", "minmax(30px, 40%) last");
-    testGridDefinitionsSetJSValues("'first' minmax(22em, -webkit-max-content)", "minmax(-webkit-max-content, 5em) 'last'", "first minmax(220px, -webkit-max-content)" ,"minmax(-webkit-max-content, 50px) last");
-    testGridDefinitionsSetJSValues("'first' minmax(22em, -webkit-min-content)", "minmax(-webkit-min-content, 5em) 'last'", "first minmax(220px, -webkit-min-content)", "minmax(-webkit-min-content, 50px) last");
-    testGridDefinitionsSetJSValues("'first' minmax(-webkit-min-content, -webkit-max-content)", "minmax(-webkit-max-content, -webkit-min-content) 'last'", "first minmax(-webkit-min-content, -webkit-max-content)", "minmax(-webkit-max-content, -webkit-min-content) last");
-    testGridDefinitionsSetJSValues("'first' 'nav' minmax(-webkit-min-content, -webkit-max-content) 'last'", "'first' 'nav' minmax(-webkit-max-content, -webkit-min-content) 'last'", "nav first minmax(-webkit-min-content, -webkit-max-content) last", "nav first minmax(-webkit-max-content, -webkit-min-content) last");
-    testGridDefinitionsSetJSValues("'first' 'nav' minmax(-webkit-min-content, -webkit-max-content) 'nav' auto 'last'", "'first' 'nav2' minmax(-webkit-max-content, -webkit-min-content) 'nav2' minmax(10px, 15px) 'last'", "nav first minmax(-webkit-min-content, -webkit-max-content) nav auto last", "first nav2 minmax(-webkit-max-content, -webkit-min-content) nav2 minmax(10px, 15px) last");
-    testGridDefinitionsSetJSValues("'foo' 'bar' auto 'foo' auto 'bar'", "'foo' 'bar' auto 'foo' auto 'bar'", "foo bar auto foo auto bar", "foo bar auto foo auto bar");
+    testGridDefinitionsSetJSValues("'first' 18px", "66px 'last'", "first 18px", "66px last", "first 18px", "66px last");
+    testGridDefinitionsSetJSValues("'first' 55%", "40% 'last'", "first 55%", "40% last", "first 55%", "40% last");
+    testGridDefinitionsSetJSValues("'first' auto", "auto 'last'", "first auto", "auto last", "first auto", "auto last");
+    testGridDefinitionsSetJSValues("'first' -webkit-min-content", "-webkit-min-content 'last'", "first -webkit-min-content", "-webkit-min-content last", "first -webkit-min-content", "-webkit-min-content last");
+    testGridDefinitionsSetJSValues("'first' -webkit-max-content", "-webkit-max-content 'last'", "first -webkit-max-content", "-webkit-max-content last", "first -webkit-max-content", "-webkit-max-content last");
+    testGridDefinitionsSetJSValues("'first' minmax(55%, 45px)", "minmax(30px, 40%) 'last'", "first minmax(55%, 45px)", "minmax(30px, 40%) last", "first minmax(55%, 45px)", "minmax(30px, 40%) last");
+    testGridDefinitionsSetJSValues("'first' minmax(22em, -webkit-max-content)", "minmax(-webkit-max-content, 5em) 'last'", "first minmax(220px, -webkit-max-content)" ,"minmax(-webkit-max-content, 50px) last", "first minmax(22em, -webkit-max-content)" ,"minmax(-webkit-max-content, 5em) last");
+    testGridDefinitionsSetJSValues("'first' minmax(22em, -webkit-min-content)", "minmax(-webkit-min-content, 5em) 'last'", "first minmax(220px, -webkit-min-content)", "minmax(-webkit-min-content, 50px) last", "first minmax(22em, -webkit-min-content)", "minmax(-webkit-min-content, 5em) last");
+    testGridDefinitionsSetJSValues("'first' minmax(-webkit-min-content, -webkit-max-content)", "minmax(-webkit-max-content, -webkit-min-content) 'last'", "first minmax(-webkit-min-content, -webkit-max-content)", "minmax(-webkit-max-content, -webkit-min-content) last", "first minmax(-webkit-min-content, -webkit-max-content)", "minmax(-webkit-max-content, -webkit-min-content) last");
+    testGridDefinitionsSetJSValues("'first' 'nav' minmax(-webkit-min-content, -webkit-max-content) 'last'", "'first' 'nav' minmax(-webkit-max-content, -webkit-min-content) 'last'", "nav first minmax(-webkit-min-content, -webkit-max-content) last", "nav first minmax(-webkit-max-content, -webkit-min-content) last", "first nav minmax(-webkit-min-content, -webkit-max-content) last", "first nav minmax(-webkit-max-content, -webkit-min-content) last");
+    testGridDefinitionsSetJSValues("'first' 'nav' minmax(-webkit-min-content, -webkit-max-content) 'nav' auto 'last'", "'first' 'nav2' minmax(-webkit-max-content, -webkit-min-content) 'nav2' minmax(10px, 15px) 'last'", "nav first minmax(-webkit-min-content, -webkit-max-content) nav auto last", "first nav2 minmax(-webkit-max-content, -webkit-min-content) nav2 minmax(10px, 15px) last", "first nav minmax(-webkit-min-content, -webkit-max-content) nav auto last", "first nav2 minmax(-webkit-max-content, -webkit-min-content) nav2 minmax(10px, 15px) last");
+    testGridDefinitionsSetJSValues("'foo' 'bar' auto 'foo' auto 'bar'", "'foo' 'bar' auto 'foo' auto 'bar'", "foo bar auto foo auto bar", "foo bar auto foo auto bar", "foo bar auto foo auto bar", "foo bar auto foo auto bar");
 
     debug("");
     debug("Test getting and setting invalid -webkit-grid-definition-columns and -webkit-grid-definition-rows through JS");
index 725614e..aaed0f3 100644 (file)
@@ -6,17 +6,17 @@ function testGridDefinitionsValues(element, columnValue, rowValue)
     shouldBeEqualToString("window.getComputedStyle(" + elementID + ", '').getPropertyValue('-webkit-grid-definition-rows')", rowValue);
 }
 
-function testGridDefinitionsSetJSValues(columnValue, rowValue, computedColumnValue, computedRowValue)
+function testGridDefinitionsSetJSValues(columnValue, rowValue, computedColumnValue, computedRowValue, jsColumnValue, jsRowValue)
 {
-    checkGridDefinitionsSetJSValues(true, columnValue, rowValue, computedColumnValue, computedRowValue);
+    checkGridDefinitionsSetJSValues(true, columnValue, rowValue, computedColumnValue, computedRowValue, jsColumnValue, jsRowValue);
 }
 
-function testNonGridDefinitionsSetJSValues(columnValue, rowValue, computedColumnValue, computedRowValue)
+function testNonGridDefinitionsSetJSValues(columnValue, rowValue, computedColumnValue, computedRowValue, jsColumnValue, jsRowValue)
 {
-    checkGridDefinitionsSetJSValues(false, columnValue, rowValue, computedColumnValue, computedRowValue);
+    checkGridDefinitionsSetJSValues(false, columnValue, rowValue, computedColumnValue, computedRowValue, jsColumnValue, jsRowValue);
 }
 
-function checkGridDefinitionsSetJSValues(useGrid, columnValue, rowValue, computedColumnValue, computedRowValue)
+function checkGridDefinitionsSetJSValues(useGrid, columnValue, rowValue, computedColumnValue, computedRowValue, jsColumnValue, jsRowValue)
 {
     window.element = document.createElement("div");
     document.body.appendChild(element);
@@ -29,7 +29,9 @@ function checkGridDefinitionsSetJSValues(useGrid, columnValue, rowValue, compute
     element.style.webkitGridDefinitionColumns = columnValue;
     element.style.webkitGridDefinitionRows = rowValue;
     shouldBeEqualToString("getComputedStyle(element, '').getPropertyValue('-webkit-grid-definition-columns')", computedColumnValue || columnValue);
+    shouldBeEqualToString("element.style.webkitGridDefinitionColumns", jsColumnValue || columnValue);
     shouldBeEqualToString("getComputedStyle(element, '').getPropertyValue('-webkit-grid-definition-rows')", computedRowValue || rowValue);
+    shouldBeEqualToString("element.style.webkitGridDefinitionRows", jsRowValue || rowValue);
     document.body.removeChild(element);
 }
 
index c76c2f4..75caf05 100644 (file)
@@ -1,3 +1,28 @@
+2014-01-29  Sergio Villar Senin  <svillar@igalia.com>
+
+        [CSS Grid Layout] minmax() should be a CSSFunction instead of a CSSValueList
+        https://bugs.webkit.org/show_bug.cgi?id=127057
+
+        Reviewed by Antti Koivisto.
+
+        We were incorrectly dumping minmax(x,y) as "x y" instead of
+        "minmax(x,y)". That's because we were treating minmax() internally
+        as a CSSValueList instead of a CSSFunction. Replaced that and also
+        added some extra information to our tests in order to check that
+        we don't regress. From now on the CSS grid layout testing helper
+        functions print not only the computed style but also the contents
+        of element.style.webkitGridDefinition{Columns|Rows}.
+
+        * css/CSSFunctionValue.h:
+        (WebCore::CSSFunctionValue::arguments):
+        * css/CSSParser.cpp:
+        (WebCore::CSSParser::parseGridTrackList):
+        (WebCore::CSSParser::parseGridTrackRepeatFunction):
+        (WebCore::CSSParser::parseGridTrackSize):
+        * css/CSSParser.h:
+        * css/StyleResolver.cpp:
+        (WebCore::createGridTrackSize):
+
 2014-01-29  Ryosuke Niwa  <rniwa@webkit.org>
 
         Rename notifyRendererOfSelectionChange
index 14b3c51..511123b 100644 (file)
@@ -49,6 +49,8 @@ public:
 
     bool equals(const CSSFunctionValue&) const;
 
+    CSSValueList* arguments() const { return m_args.get(); }
+
 private:
     explicit CSSFunctionValue(CSSParserFunction*);
     CSSFunctionValue(String, PassRefPtr<CSSValueList>);
index 039e6f1..837d0a2 100644 (file)
@@ -4886,10 +4886,10 @@ bool CSSParser::parseGridTrackList(CSSPropertyID propId, bool important)
             if (!parseGridTrackRepeatFunction(*values))
                 return false;
         } else {
-            RefPtr<CSSPrimitiveValue> primitiveValue = parseGridTrackSize(*m_valueList);
-            if (!primitiveValue)
+            RefPtr<CSSValue> value = parseGridTrackSize(*m_valueList);
+            if (!value)
                 return false;
-            values->append(primitiveValue.release());
+            values->append(value.release());
         }
         seenTrackSizeOrRepeatFunction = true;
 
@@ -4923,7 +4923,7 @@ bool CSSParser::parseGridTrackRepeatFunction(CSSValueList& list)
         if (!arguments->current())
             break;
 
-        RefPtr<CSSPrimitiveValue> trackSize = parseGridTrackSize(*arguments);
+        RefPtr<CSSValue> trackSize = parseGridTrackSize(*arguments);
         if (!trackSize)
             return false;
 
@@ -4939,7 +4939,7 @@ bool CSSParser::parseGridTrackRepeatFunction(CSSValueList& list)
     return true;
 }
 
-PassRefPtr<CSSPrimitiveValue> CSSParser::parseGridTrackSize(CSSParserValueList& inputList)
+PassRefPtr<CSSValue> CSSParser::parseGridTrackSize(CSSParserValueList& inputList)
 {
     CSSParserValue* currentValue = inputList.current();
     inputList.next();
@@ -4961,7 +4961,10 @@ PassRefPtr<CSSPrimitiveValue> CSSParser::parseGridTrackSize(CSSParserValueList&
         if (!maxTrackBreadth)
             return 0;
 
-        return createPrimitiveValuePair(minTrackBreadth, maxTrackBreadth);
+        RefPtr<CSSValueList> parsedArguments = CSSValueList::createCommaSeparated();
+        parsedArguments->append(minTrackBreadth);
+        parsedArguments->append(maxTrackBreadth);
+        return CSSFunctionValue::create("minmax(", parsedArguments);
     }
 
     return parseGridBreadth(currentValue);
index 1315e15..c7fd264 100644 (file)
@@ -159,7 +159,7 @@ public:
     bool parseSingleGridAreaLonghand(RefPtr<CSSValue>&);
     bool parseGridTrackList(CSSPropertyID, bool important);
     bool parseGridTrackRepeatFunction(CSSValueList&);
-    PassRefPtr<CSSPrimitiveValue> parseGridTrackSize(CSSParserValueList& inputList);
+    PassRefPtr<CSSValue> parseGridTrackSize(CSSParserValueList& inputList);
     PassRefPtr<CSSPrimitiveValue> parseGridBreadth(CSSParserValue*);
     PassRefPtr<CSSValue> parseGridTemplate();
     void parseGridTrackNames(CSSParserValueList& inputList, CSSValueList& values);
index 4bcc0ed..827388f 100644 (file)
@@ -39,6 +39,7 @@
 #include "CSSFontFeatureValue.h"
 #include "CSSFontSelector.h"
 #include "CSSFontValue.h"
+#include "CSSFunctionValue.h"
 #include "CSSGridTemplateValue.h"
 #include "CSSLineBoxContainValue.h"
 #include "CSSPageRule.h"
@@ -1952,12 +1953,8 @@ static bool createGridTrackBreadth(CSSPrimitiveValue* primitiveValue, const Styl
 
 static bool createGridTrackSize(CSSValue* value, GridTrackSize& trackSize, const StyleResolver::State& state)
 {
-    if (!value->isPrimitiveValue())
-        return false;
-
-    CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value);
-    Pair* minMaxTrackBreadth = primitiveValue->getPairValue();
-    if (!minMaxTrackBreadth) {
+    if (value->isPrimitiveValue()) {
+        CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value);
         GridLength workingLength;
         if (!createGridTrackBreadth(primitiveValue, state, workingLength))
             return false;
@@ -1966,9 +1963,12 @@ static bool createGridTrackSize(CSSValue* value, GridTrackSize& trackSize, const
         return true;
     }
 
+    CSSFunctionValue* minmaxFunction = toCSSFunctionValue(value);
+    CSSValueList* arguments = minmaxFunction->arguments();
+    ASSERT_WITH_SECURITY_IMPLICATION(arguments->length() == 2);
     GridLength minTrackBreadth;
     GridLength maxTrackBreadth;
-    if (!createGridTrackBreadth(minMaxTrackBreadth->first(), state, minTrackBreadth) || !createGridTrackBreadth(minMaxTrackBreadth->second(), state, maxTrackBreadth))
+    if (!createGridTrackBreadth(toCSSPrimitiveValue(arguments->itemWithoutBoundsCheck(0)), state, minTrackBreadth) || !createGridTrackBreadth(toCSSPrimitiveValue(arguments->itemWithoutBoundsCheck(1)), state, maxTrackBreadth))
         return false;
 
     trackSize.setMinMax(minTrackBreadth, maxTrackBreadth);