Title: [146274] trunk
Revision
146274
Author
jchaffr...@webkit.org
Date
2013-03-19 16:12:28 -0700 (Tue, 19 Mar 2013)

Log Message

[CSS Grid Layout] Add parsing for grid-auto-{row|column}
https://bugs.webkit.org/show_bug.cgi?id=112724

Reviewed by Tony Chang.

Source/WebCore:

This change is a first step towards handling grid-auto-{row|column}.
For now, only the parsing, storing and getComputedStyle bits are implemented.
In order to do so without duplicating code, the functions handling <track-size>
(named <track-minmax> in the code based on a previous version of the grammar)
have been tweaked to be called in a standalone fashion. The code was also
updated to match the grammar more closely:
- <track-minmax> is now <track-size>.
- <track-group> was renmoved, folded into <track-list>.

Test: fast/css-grid-layout/grid-auto-columns-rows-get-set.html

* css/CSSComputedStyleDeclaration.cpp:
(WebCore::valueForGridTrackSize):
Renamed from valueForGridTrackMinMax.

(WebCore::valueForGridTrackList):
Folded valueForGridTrackGroup here.

(WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
* css/CSSParser.cpp:
(WebCore::CSSParser::parseValue):
Added the parsing for grid-auto-{rows|columns}.

(WebCore::CSSParser::parseGridTrackSize):
Renamed from parseGridTrackMinMax. Changed to return the parsed value (or 0 in case of
error). This enables us to reuse it in parseValue. Note that this function now moves
the parser value list instead of the caller.

(WebCore::CSSParser::parseGridTrackList):
Updated after parseGridTrackSize changes and parseGridTrackGroup removal.

* css/CSSParser.h: Updated the names.
* css/CSSProperty.cpp:
(WebCore::CSSProperty::isInheritedProperty):
* css/CSSPropertyNames.in:
Added the 2 new non-inherited properties.

* css/StyleResolver.cpp:
(WebCore::createGridTrackSize):
Renamed from createGridTrackMinMax. Also simplified to ensure code reuse (applyProperty hands
down a CSSValue) and consistency (the state wasn't consistently the last argument).

(WebCore::createGridTrackList):
Folded createGridTrackGroup into this function.

(WebCore::StyleResolver::applyProperty):
Added the code for the new properties.

* rendering/style/RenderStyle.h:
* rendering/style/StyleGridData.cpp:
(WebCore::StyleGridData::StyleGridData):
* rendering/style/StyleGridData.h:
(WebCore::StyleGridData::operator==):
Added the storage and boiler-plate code for the new properties.

LayoutTests:

* fast/css-grid-layout/grid-auto-columns-rows-get-set-expected.txt: Added.
* fast/css-grid-layout/grid-auto-columns-rows-get-set.html: Added.

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (146273 => 146274)


--- trunk/LayoutTests/ChangeLog	2013-03-19 23:07:39 UTC (rev 146273)
+++ trunk/LayoutTests/ChangeLog	2013-03-19 23:12:28 UTC (rev 146274)
@@ -1,3 +1,13 @@
+2013-03-19  Julien Chaffraix  <jchaffr...@webkit.org>
+
+        [CSS Grid Layout] Add parsing for grid-auto-{row|column}
+        https://bugs.webkit.org/show_bug.cgi?id=112724
+
+        Reviewed by Tony Chang.
+
+        * fast/css-grid-layout/grid-auto-columns-rows-get-set-expected.txt: Added.
+        * fast/css-grid-layout/grid-auto-columns-rows-get-set.html: Added.
+
 2013-03-18  Ojan Vafai  <o...@chromium.org>
 
         Make intrinsic size keywords on flexboxes work

Added: trunk/LayoutTests/fast/css-grid-layout/grid-auto-columns-rows-get-set-expected.txt (0 => 146274)


--- trunk/LayoutTests/fast/css-grid-layout/grid-auto-columns-rows-get-set-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/fast/css-grid-layout/grid-auto-columns-rows-get-set-expected.txt	2013-03-19 23:12:28 UTC (rev 146274)
@@ -0,0 +1,40 @@
+Test that setting and getting grid-auto-columns and grid-auto-rows works as expected
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+Test getting -webkit-grid-auto-columns and -webkit-grid-auto-rows set through CSS
+PASS getComputedStyle(gridAutoFixedFixed, '').getPropertyValue('-webkit-grid-auto-rows') is '30px'
+PASS getComputedStyle(gridAutoFixedFixed, '').getPropertyValue('-webkit-grid-auto-columns') is '50px'
+PASS getComputedStyle(gridAutoMinMax, '').getPropertyValue('-webkit-grid-auto-rows') is 'minmax(10%, 15px)'
+PASS getComputedStyle(gridAutoMinMax, '').getPropertyValue('-webkit-grid-auto-columns') is 'minmax(30%, 100px)'
+PASS getComputedStyle(gridAutoMinMaxContent, '').getPropertyValue('-webkit-grid-auto-rows') is '-webkit-min-content'
+PASS getComputedStyle(gridAutoMinMaxContent, '').getPropertyValue('-webkit-grid-auto-columns') is '-webkit-max-content'
+
+Test the initial value
+PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-auto-columns') is 'auto'
+PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-auto-rows') is 'auto'
+
+Test getting and setting -webkit-grid-auto-columns and -webkit-grid-auto-rows through JS
+PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-auto-columns') is '180px'
+PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-auto-rows') is '660px'
+PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-auto-columns') is 'minmax(-webkit-min-content, 48px)'
+PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-auto-rows') is 'minmax(80px, -webkit-min-content)'
+PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-auto-columns') is 'minmax(-webkit-min-content, -webkit-max-content)'
+PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-auto-rows') is 'minmax(-webkit-max-content, -webkit-min-content)'
+
+Test setting grid-auto-columns and grid-auto-rows to bad minmax value through JS
+PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-auto-columns') is 'auto'
+PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-auto-rows') is 'auto'
+PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-auto-columns') is 'auto'
+PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-auto-rows') is 'auto'
+PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-auto-columns') is 'auto'
+PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-auto-rows') is 'auto'
+PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-auto-columns') is 'auto'
+PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-auto-rows') is 'auto'
+PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-auto-columns') is 'auto'
+PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-auto-rows') is 'auto'
+PASS successfullyParsed is true
+
+TEST COMPLETE
+

Added: trunk/LayoutTests/fast/css-grid-layout/grid-auto-columns-rows-get-set.html (0 => 146274)


--- trunk/LayoutTests/fast/css-grid-layout/grid-auto-columns-rows-get-set.html	                        (rev 0)
+++ trunk/LayoutTests/fast/css-grid-layout/grid-auto-columns-rows-get-set.html	2013-03-19 23:12:28 UTC (rev 146274)
@@ -0,0 +1,124 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<head>
+<script>
+if (window.testRunner)
+    testRunner.overridePreference("WebKitCSSGridLayoutEnabled", 1);
+</script>
+<link href="" rel="stylesheet">
+<style>
+.gridAutoFixedFixed {
+    -webkit-grid-auto-rows: 30px;
+    -webkit-grid-auto-columns: 50px;
+}
+
+.gridAutoMinMax {
+    -webkit-grid-auto-rows: minmax(10%, 15px);
+    -webkit-grid-auto-columns: minmax(30%, 100px);
+}
+
+.gridAutoMinMaxContent {
+    -webkit-grid-auto-rows: -webkit-min-content;
+    -webkit-grid-auto-columns: -webkit-max-content;
+}
+</style>
+<script src=""
+</head>
+<body>
+<div class="grid gridAutoFixedFixed" id="gridAutoFixedFixed"></div>
+<div class="grid gridAutoMinMax" id="gridAutoMinMax"></div>
+<div class="grid gridAutoMinMaxContent" id="gridAutoMinMaxContent"></div>
+<script>
+description('Test that setting and getting grid-auto-columns and grid-auto-rows works as expected');
+
+debug("Test getting -webkit-grid-auto-columns and -webkit-grid-auto-rows set through CSS");
+var gridAutoFixedFixed = document.getElementById("gridAutoFixedFixed");
+shouldBe("getComputedStyle(gridAutoFixedFixed, '').getPropertyValue('-webkit-grid-auto-rows')", "'30px'");
+shouldBe("getComputedStyle(gridAutoFixedFixed, '').getPropertyValue('-webkit-grid-auto-columns')", "'50px'");
+
+var gridAutoMinMax = document.getElementById("gridAutoMinMax");
+shouldBe("getComputedStyle(gridAutoMinMax, '').getPropertyValue('-webkit-grid-auto-rows')", "'minmax(10%, 15px)'");
+shouldBe("getComputedStyle(gridAutoMinMax, '').getPropertyValue('-webkit-grid-auto-columns')", "'minmax(30%, 100px)'");
+
+var gridAutoMinMaxContent = document.getElementById("gridAutoMinMaxContent");
+shouldBe("getComputedStyle(gridAutoMinMaxContent, '').getPropertyValue('-webkit-grid-auto-rows')", "'-webkit-min-content'");
+shouldBe("getComputedStyle(gridAutoMinMaxContent, '').getPropertyValue('-webkit-grid-auto-columns')", "'-webkit-max-content'");
+
+debug("");
+debug("Test the initial value");
+var element = document.createElement("div");
+document.body.appendChild(element);
+shouldBe("getComputedStyle(element, '').getPropertyValue('-webkit-grid-auto-columns')", "'auto'");
+shouldBe("getComputedStyle(element, '').getPropertyValue('-webkit-grid-auto-rows')", "'auto'");
+
+debug("");
+debug("Test getting and setting -webkit-grid-auto-columns and -webkit-grid-auto-rows through JS");
+element.style.font = "10px Ahem";
+element.style.webkitGridAutoColumns = "18em";
+element.style.webkitGridAutoRows = "66em";
+shouldBe("getComputedStyle(element, '').getPropertyValue('-webkit-grid-auto-columns')", "'180px'");
+shouldBe("getComputedStyle(element, '').getPropertyValue('-webkit-grid-auto-rows')", "'660px'");
+
+element = document.createElement("div");
+document.body.appendChild(element);
+element.style.webkitGridAutoColumns = "minmax(-webkit-min-content, 8vh)";
+element.style.webkitGridAutoRows = "minmax(10vw, -webkit-min-content)";
+shouldBe("getComputedStyle(element, '').getPropertyValue('-webkit-grid-auto-columns')", "'minmax(-webkit-min-content, 48px)'");
+shouldBe("getComputedStyle(element, '').getPropertyValue('-webkit-grid-auto-rows')", "'minmax(80px, -webkit-min-content)'");
+
+element = document.createElement("div");
+document.body.appendChild(element);
+element.style.webkitGridAutoColumns = "minmax(-webkit-min-content, -webkit-max-content)";
+element.style.webkitGridAutoRows = "minmax(-webkit-max-content, -webkit-min-content)";
+shouldBe("getComputedStyle(element, '').getPropertyValue('-webkit-grid-auto-columns')", "'minmax(-webkit-min-content, -webkit-max-content)'");
+shouldBe("getComputedStyle(element, '').getPropertyValue('-webkit-grid-auto-rows')", "'minmax(-webkit-max-content, -webkit-min-content)'");
+
+debug("");
+debug("Test setting grid-auto-columns and grid-auto-rows to bad minmax value through JS");
+element = document.createElement("div");
+document.body.appendChild(element);
+// No comma.
+element.style.webkitGridAutoColumns = "minmax(10px 20px)";
+// Only 1 argument provided.
+element.style.webkitGridAutoRows = "minmax(10px)";
+shouldBe("getComputedStyle(element, '').getPropertyValue('-webkit-grid-auto-columns')", "'auto'");
+shouldBe("getComputedStyle(element, '').getPropertyValue('-webkit-grid-auto-rows')", "'auto'");
+
+element = document.createElement("div");
+document.body.appendChild(element);
+// Nested minmax.
+element.style.webkitGridAutoColumns = "minmax(minmax(10px, 20px), 20px)";
+// Only 2 arguments are allowed.
+element.style.webkitGridAutoRows = "minmax(10px, 20px, 30px)";
+shouldBe("getComputedStyle(element, '').getPropertyValue('-webkit-grid-auto-columns')", "'auto'");
+shouldBe("getComputedStyle(element, '').getPropertyValue('-webkit-grid-auto-rows')", "'auto'");
+
+element = document.createElement("div");
+document.body.appendChild(element);
+// No breadth value.
+element.style.webkitGridAutoColumns = "minmax()";
+// No comma.
+element.style.webkitGridAutoRows = "minmax(30px 30% 30em)";
+shouldBe("getComputedStyle(element, '').getPropertyValue('-webkit-grid-auto-columns')", "'auto'");
+shouldBe("getComputedStyle(element, '').getPropertyValue('-webkit-grid-auto-rows')", "'auto'");
+
+element = document.createElement("div");
+document.body.appendChild(element);
+// Auto is not allowed inside minmax.
+element.style.webkitGridAutoColumns = "minmax(auto, 8vh)";
+element.style.webkitGridAutoRows = "minmax(10vw, auto)";
+shouldBe("getComputedStyle(element, '').getPropertyValue('-webkit-grid-auto-columns')", "'auto'");
+shouldBe("getComputedStyle(element, '').getPropertyValue('-webkit-grid-auto-rows')", "'auto'");
+
+element = document.createElement("div");
+document.body.appendChild(element);
+// None is not allowed for grid-auto-{rows|columns}.
+element.style.webkitGridAutoColumns = "none";
+element.style.webkitGridAutoRows = "none";
+shouldBe("getComputedStyle(element, '').getPropertyValue('-webkit-grid-auto-columns')", "'auto'");
+shouldBe("getComputedStyle(element, '').getPropertyValue('-webkit-grid-auto-rows')", "'auto'");
+
+</script>
+<script src=""
+</body>
+</html>

Modified: trunk/Source/WebCore/ChangeLog (146273 => 146274)


--- trunk/Source/WebCore/ChangeLog	2013-03-19 23:07:39 UTC (rev 146273)
+++ trunk/Source/WebCore/ChangeLog	2013-03-19 23:12:28 UTC (rev 146274)
@@ -1,3 +1,65 @@
+2013-03-19  Julien Chaffraix  <jchaffr...@webkit.org>
+
+        [CSS Grid Layout] Add parsing for grid-auto-{row|column}
+        https://bugs.webkit.org/show_bug.cgi?id=112724
+
+        Reviewed by Tony Chang.
+
+        This change is a first step towards handling grid-auto-{row|column}.
+        For now, only the parsing, storing and getComputedStyle bits are implemented.
+        In order to do so without duplicating code, the functions handling <track-size>
+        (named <track-minmax> in the code based on a previous version of the grammar)
+        have been tweaked to be called in a standalone fashion. The code was also
+        updated to match the grammar more closely:
+        - <track-minmax> is now <track-size>.
+        - <track-group> was renmoved, folded into <track-list>.
+
+        Test: fast/css-grid-layout/grid-auto-columns-rows-get-set.html
+
+        * css/CSSComputedStyleDeclaration.cpp:
+        (WebCore::valueForGridTrackSize):
+        Renamed from valueForGridTrackMinMax.
+
+        (WebCore::valueForGridTrackList):
+        Folded valueForGridTrackGroup here.
+
+        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
+        * css/CSSParser.cpp:
+        (WebCore::CSSParser::parseValue):
+        Added the parsing for grid-auto-{rows|columns}.
+
+        (WebCore::CSSParser::parseGridTrackSize):
+        Renamed from parseGridTrackMinMax. Changed to return the parsed value (or 0 in case of
+        error). This enables us to reuse it in parseValue. Note that this function now moves
+        the parser value list instead of the caller.
+
+        (WebCore::CSSParser::parseGridTrackList):
+        Updated after parseGridTrackSize changes and parseGridTrackGroup removal.
+
+        * css/CSSParser.h: Updated the names.
+        * css/CSSProperty.cpp:
+        (WebCore::CSSProperty::isInheritedProperty):
+        * css/CSSPropertyNames.in:
+        Added the 2 new non-inherited properties.
+
+        * css/StyleResolver.cpp:
+        (WebCore::createGridTrackSize):
+        Renamed from createGridTrackMinMax. Also simplified to ensure code reuse (applyProperty hands
+        down a CSSValue) and consistency (the state wasn't consistently the last argument).
+
+        (WebCore::createGridTrackList):
+        Folded createGridTrackGroup into this function.
+
+        (WebCore::StyleResolver::applyProperty):
+        Added the code for the new properties.
+
+        * rendering/style/RenderStyle.h:
+        * rendering/style/StyleGridData.cpp:
+        (WebCore::StyleGridData::StyleGridData):
+        * rendering/style/StyleGridData.h:
+        (WebCore::StyleGridData::operator==):
+        Added the storage and boiler-plate code for the new properties.
+
 2013-03-19  Geoffrey Garen  <gga...@apple.com>
 
         Removed a using declaration to avoid name conflicts

Modified: trunk/Source/WebCore/css/CSSComputedStyleDeclaration.cpp (146273 => 146274)


--- trunk/Source/WebCore/css/CSSComputedStyleDeclaration.cpp	2013-03-19 23:07:39 UTC (rev 146273)
+++ trunk/Source/WebCore/css/CSSComputedStyleDeclaration.cpp	2013-03-19 23:12:28 UTC (rev 146274)
@@ -286,7 +286,9 @@
     CSSPropertyWebkitFontKerning,
     CSSPropertyWebkitFontSmoothing,
     CSSPropertyWebkitFontVariantLigatures,
+    CSSPropertyWebkitGridAutoColumns,
     CSSPropertyWebkitGridAutoFlow,
+    CSSPropertyWebkitGridAutoRows,
     CSSPropertyWebkitGridColumns,
     CSSPropertyWebkitGridRows,
     CSSPropertyWebkitGridStart,
@@ -1039,7 +1041,7 @@
     return zoomAdjustedPixelValueForLength(trackBreadth, style);
 }
 
-static PassRefPtr<CSSValue> valueForGridTrackMinMax(const GridTrackSize& trackSize, const RenderStyle* style, RenderView* renderView)
+static PassRefPtr<CSSValue> valueForGridTrackSize(const GridTrackSize& trackSize, const RenderStyle* style, RenderView* renderView)
 {
     switch (trackSize.type()) {
     case LengthTrackSizing:
@@ -1054,21 +1056,16 @@
     return 0;
 }
 
-static PassRefPtr<CSSValue> valueForGridTrackGroup(const Vector<GridTrackSize>& trackSizes, const RenderStyle* style, RenderView* renderView)
-{
-    RefPtr<CSSValueList> list = CSSValueList::createSpaceSeparated();
-    for (size_t i = 0; i < trackSizes.size(); ++i)
-        list->append(valueForGridTrackMinMax(trackSizes[i], style, renderView));
-    return list.release();
-}
-
 static PassRefPtr<CSSValue> valueForGridTrackList(const Vector<GridTrackSize>& trackSizes, const RenderStyle* style, RenderView *renderView)
 {
     // Handle the 'none' case here.
     if (!trackSizes.size())
         return cssValuePool().createIdentifierValue(CSSValueNone);
 
-    return valueForGridTrackGroup(trackSizes, style, renderView);
+    RefPtr<CSSValueList> list = CSSValueList::createSpaceSeparated();
+    for (size_t i = 0; i < trackSizes.size(); ++i)
+        list->append(valueForGridTrackSize(trackSizes[i], style, renderView));
+    return list.release();
 }
 
 static PassRefPtr<CSSValue> valueForGridPosition(const GridPosition& position)
@@ -1932,8 +1929,12 @@
             }
             return list.release();
         }
+        case CSSPropertyWebkitGridAutoColumns:
+            return valueForGridTrackSize(style->gridAutoColumns(), style.get(), m_node->document()->renderView());
         case CSSPropertyWebkitGridAutoFlow:
             return cssValuePool().createValue(style->gridAutoFlow());
+        case CSSPropertyWebkitGridAutoRows:
+            return valueForGridTrackSize(style->gridAutoRows(), style.get(), m_node->document()->renderView());
         case CSSPropertyWebkitGridColumns:
             return valueForGridTrackList(style->gridColumns(), style.get(), m_node->document()->renderView());
         case CSSPropertyWebkitGridRows:

Modified: trunk/Source/WebCore/css/CSSParser.cpp (146273 => 146274)


--- trunk/Source/WebCore/css/CSSParser.cpp	2013-03-19 23:07:39 UTC (rev 146273)
+++ trunk/Source/WebCore/css/CSSParser.cpp	2013-03-19 23:12:28 UTC (rev 146274)
@@ -2610,6 +2610,13 @@
         return false;
     }
 
+    case CSSPropertyWebkitGridAutoColumns:
+    case CSSPropertyWebkitGridAutoRows:
+        if (!cssGridLayoutEnabled())
+            return false;
+        parsedValue = parseGridTrackSize();
+        break;
+
     case CSSPropertyWebkitGridColumns:
     case CSSPropertyWebkitGridRows:
         if (!cssGridLayoutEnabled())
@@ -4735,52 +4742,45 @@
 
     RefPtr<CSSValueList> values = CSSValueList::createSpaceSeparated();
     while (m_valueList->current()) {
-        if (!parseGridTrackGroup(values.get()))
+        RefPtr<CSSPrimitiveValue> primitiveValue = parseGridTrackSize();
+        if (!primitiveValue)
             return false;
 
-        m_valueList->next();
+        values->append(primitiveValue.release());
     }
     addProperty(propId, values.release(), important);
     return true;
 }
 
-bool CSSParser::parseGridTrackGroup(CSSValueList* values)
+PassRefPtr<CSSPrimitiveValue> CSSParser::parseGridTrackSize()
 {
-    return parseGridTrackMinMax(values);
-}
-
-bool CSSParser::parseGridTrackMinMax(CSSValueList* values)
-{
     CSSParserValue* currentValue = m_valueList->current();
-    if (currentValue->id == CSSValueAuto) {
-        values->append(cssValuePool().createIdentifierValue(CSSValueAuto));
-        return true;
-    }
+    m_valueList->next();
 
+    if (currentValue->id == CSSValueAuto)
+        return cssValuePool().createIdentifierValue(CSSValueAuto);
+
     if (currentValue->unit == CSSParserValue::Function && equalIgnoringCase(currentValue->function->name, "minmax(")) {
         // The spec defines the following grammar: minmax( <track-breadth> , <track-breadth> )
         CSSParserValueList* arguments = currentValue->function->args.get();
         if (!arguments || arguments->size() != 3 || !isComma(arguments->valueAt(1)))
-            return false;
+            return 0;
 
         RefPtr<CSSPrimitiveValue> minTrackBreadth = parseGridBreadth(arguments->valueAt(0));
         if (!minTrackBreadth)
-            return false;
+            return 0;
 
         RefPtr<CSSPrimitiveValue> maxTrackBreadth = parseGridBreadth(arguments->valueAt(2));
         if (!maxTrackBreadth)
-            return false;
+            return 0;
 
-        values->append(createPrimitiveValuePair(minTrackBreadth, maxTrackBreadth));
-        return true;
+        return createPrimitiveValuePair(minTrackBreadth, maxTrackBreadth);
     }
 
-    if (PassRefPtr<CSSPrimitiveValue> trackBreadth = parseGridBreadth(currentValue)) {
-        values->append(trackBreadth);
-        return true;
-    }
+    if (PassRefPtr<CSSPrimitiveValue> trackBreadth = parseGridBreadth(currentValue))
+        return trackBreadth;
 
-    return false;
+    return 0;
 }
 
 PassRefPtr<CSSPrimitiveValue> CSSParser::parseGridBreadth(CSSParserValue* currentValue)

Modified: trunk/Source/WebCore/css/CSSParser.h (146273 => 146274)


--- trunk/Source/WebCore/css/CSSParser.h	2013-03-19 23:07:39 UTC (rev 146273)
+++ trunk/Source/WebCore/css/CSSParser.h	2013-03-19 23:12:28 UTC (rev 146274)
@@ -158,8 +158,7 @@
     bool cssGridLayoutEnabled() const;
     bool parseGridItemPositionShorthand(CSSPropertyID, bool important);
     bool parseGridTrackList(CSSPropertyID, bool important);
-    bool parseGridTrackGroup(CSSValueList*);
-    bool parseGridTrackMinMax(CSSValueList*);
+    PassRefPtr<CSSPrimitiveValue> parseGridTrackSize();
     PassRefPtr<CSSPrimitiveValue> parseGridBreadth(CSSParserValue*);
 
     bool parseDashboardRegions(CSSPropertyID, bool important);

Modified: trunk/Source/WebCore/css/CSSProperty.cpp (146273 => 146274)


--- trunk/Source/WebCore/css/CSSProperty.cpp	2013-03-19 23:07:39 UTC (rev 146273)
+++ trunk/Source/WebCore/css/CSSProperty.cpp	2013-03-19 23:12:28 UTC (rev 146274)
@@ -583,7 +583,9 @@
     case CSSPropertyWebkitJustifyContent:
     case CSSPropertyWebkitOrder:
     case CSSPropertyWebkitFontSizeDelta:
+    case CSSPropertyWebkitGridAutoColumns:
     case CSSPropertyWebkitGridAutoFlow:
+    case CSSPropertyWebkitGridAutoRows:
     case CSSPropertyWebkitGridColumns:
     case CSSPropertyWebkitGridRows:
     case CSSPropertyWebkitGridStart:

Modified: trunk/Source/WebCore/css/CSSPropertyNames.in (146273 => 146274)


--- trunk/Source/WebCore/css/CSSPropertyNames.in	2013-03-19 23:07:39 UTC (rev 146273)
+++ trunk/Source/WebCore/css/CSSPropertyNames.in	2013-03-19 23:12:28 UTC (rev 146274)
@@ -292,6 +292,8 @@
 -webkit-flex-wrap
 -webkit-justify-content
 -webkit-font-size-delta
+-webkit-grid-auto-columns
+-webkit-grid-auto-rows
 -webkit-grid-columns
 -webkit-grid-rows
 -webkit-grid-start

Modified: trunk/Source/WebCore/css/StyleResolver.cpp (146273 => 146274)


--- trunk/Source/WebCore/css/StyleResolver.cpp	2013-03-19 23:07:39 UTC (rev 146273)
+++ trunk/Source/WebCore/css/StyleResolver.cpp	2013-03-19 23:12:28 UTC (rev 146274)
@@ -2092,8 +2092,12 @@
     return true;
 }
 
-static bool createGridTrackMinMax(CSSPrimitiveValue* primitiveValue, const StyleResolver::State& state, GridTrackSize& trackSize)
+static bool createGridTrackSize(CSSValue* value, GridTrackSize& trackSize, const StyleResolver::State& state)
 {
+    if (!value->isPrimitiveValue())
+        return false;
+
+    CSSPrimitiveValue* primitiveValue = static_cast<CSSPrimitiveValue*>(value);
     Pair* minMaxTrackBreadth = primitiveValue->getPairValue();
     if (!minMaxTrackBreadth) {
         Length workingLength;
@@ -2113,18 +2117,21 @@
     return true;
 }
 
-static bool createGridTrackGroup(CSSValue* value, const StyleResolver::State& state, Vector<GridTrackSize>& trackSizes)
+static bool createGridTrackList(CSSValue* value, Vector<GridTrackSize>& trackSizes, const StyleResolver::State& state)
 {
+    // Handle 'none'.
+    if (value->isPrimitiveValue()) {
+        CSSPrimitiveValue* primitiveValue = static_cast<CSSPrimitiveValue*>(value);
+        return primitiveValue->getIdent() == CSSValueNone;
+    }
+
     if (!value->isValueList())
         return false;
 
     for (CSSValueListIterator i = value; i.hasMore(); i.advance()) {
         CSSValue* currValue = i.value();
-        if (!currValue->isPrimitiveValue())
-            return false;
-
         GridTrackSize trackSize;
-        if (!createGridTrackMinMax(static_cast<CSSPrimitiveValue*>(currValue), state, trackSize))
+        if (!createGridTrackSize(currValue, trackSize, state))
             return false;
 
         trackSizes.append(trackSize);
@@ -2132,18 +2139,7 @@
     return true;
 }
 
-static bool createGridTrackList(CSSValue* value, Vector<GridTrackSize>& trackSizes, const StyleResolver::State& state)
-{
-    // Handle 'none'.
-    if (value->isPrimitiveValue()) {
-        CSSPrimitiveValue* primitiveValue = static_cast<CSSPrimitiveValue*>(value);
-        return primitiveValue->getIdent() == CSSValueNone;
-    }
 
-    return createGridTrackGroup(value, state, trackSizes);
-}
-
-
 static bool createGridPosition(CSSValue* value, GridPosition& position)
 {
     // For now, we only accept: <integer> | 'auto'
@@ -2888,6 +2884,20 @@
         return;
     }
 #endif
+    case CSSPropertyWebkitGridAutoColumns: {
+        GridTrackSize trackSize;
+        if (!createGridTrackSize(value, trackSize, state))
+            return;
+        state.style()->setGridAutoColumns(trackSize);
+        return;
+    }
+    case CSSPropertyWebkitGridAutoRows: {
+        GridTrackSize trackSize;
+        if (!createGridTrackSize(value, trackSize, state))
+            return;
+        state.style()->setGridAutoRows(trackSize);
+        return;
+    }
     case CSSPropertyWebkitGridColumns: {
         Vector<GridTrackSize> trackSizes;
         if (!createGridTrackList(value, trackSizes, state))

Modified: trunk/Source/WebCore/rendering/style/RenderStyle.h (146273 => 146274)


--- trunk/Source/WebCore/rendering/style/RenderStyle.h	2013-03-19 23:07:39 UTC (rev 146273)
+++ trunk/Source/WebCore/rendering/style/RenderStyle.h	2013-03-19 23:12:28 UTC (rev 146274)
@@ -777,6 +777,8 @@
     const Vector<GridTrackSize>& gridColumns() const { return rareNonInheritedData->m_grid->m_gridColumns; }
     const Vector<GridTrackSize>& gridRows() const { return rareNonInheritedData->m_grid->m_gridRows; }
     GridAutoFlow gridAutoFlow() const { return rareNonInheritedData->m_grid->m_gridAutoFlow; }
+    const GridTrackSize& gridAutoColumns() const { return rareNonInheritedData->m_grid->m_gridAutoColumns; }
+    const GridTrackSize& gridAutoRows() const { return rareNonInheritedData->m_grid->m_gridAutoRows; }
 
     const GridPosition& gridItemStart() const { return rareNonInheritedData->m_gridItem->m_gridStart; }
     const GridPosition& gridItemEnd() const { return rareNonInheritedData->m_gridItem->m_gridEnd; }
@@ -1287,6 +1289,8 @@
     void setFlexDirection(EFlexDirection direction) { SET_VAR(rareNonInheritedData.access()->m_flexibleBox, m_flexDirection, direction); }
     void setFlexWrap(EFlexWrap w) { SET_VAR(rareNonInheritedData.access()->m_flexibleBox, m_flexWrap, w); }
     void setJustifyContent(EJustifyContent p) { SET_VAR(rareNonInheritedData, m_justifyContent, p); }
+    void setGridAutoColumns(const GridTrackSize& length) { SET_VAR(rareNonInheritedData.access()->m_grid, m_gridAutoColumns, length); }
+    void setGridAutoRows(const GridTrackSize& length) { SET_VAR(rareNonInheritedData.access()->m_grid, m_gridAutoRows, length); }
     void setGridColumns(const Vector<GridTrackSize>& lengths) { SET_VAR(rareNonInheritedData.access()->m_grid, m_gridColumns, lengths); }
     void setGridRows(const Vector<GridTrackSize>& lengths) { SET_VAR(rareNonInheritedData.access()->m_grid, m_gridRows, lengths); }
     void setGridAutoFlow(GridAutoFlow flow) { SET_VAR(rareNonInheritedData.access()->m_grid, m_gridAutoFlow, flow); }
@@ -1708,6 +1712,9 @@
 
     static GridAutoFlow initialGridAutoFlow() { return AutoFlowNone; }
 
+    static GridTrackSize initialGridAutoColumns() { return GridTrackSize(Auto); }
+    static GridTrackSize initialGridAutoRows() { return GridTrackSize(Auto); }
+
     // 'auto' is the default.
     static GridPosition initialGridPosition() { return GridPosition(); }
 

Modified: trunk/Source/WebCore/rendering/style/StyleGridData.cpp (146273 => 146274)


--- trunk/Source/WebCore/rendering/style/StyleGridData.cpp	2013-03-19 23:07:39 UTC (rev 146273)
+++ trunk/Source/WebCore/rendering/style/StyleGridData.cpp	2013-03-19 23:12:28 UTC (rev 146274)
@@ -34,6 +34,8 @@
     : m_gridColumns(RenderStyle::initialGridColumns())
     , m_gridRows(RenderStyle::initialGridRows())
     , m_gridAutoFlow(RenderStyle::initialGridAutoFlow())
+    , m_gridAutoRows(RenderStyle::initialGridAutoRows())
+    , m_gridAutoColumns(RenderStyle::initialGridAutoColumns())
 {
 }
 
@@ -42,6 +44,8 @@
     , m_gridColumns(o.m_gridColumns)
     , m_gridRows(o.m_gridRows)
     , m_gridAutoFlow(o.m_gridAutoFlow)
+    , m_gridAutoRows(o.m_gridAutoRows)
+    , m_gridAutoColumns(o.m_gridAutoColumns)
 {
 }
 

Modified: trunk/Source/WebCore/rendering/style/StyleGridData.h (146273 => 146274)


--- trunk/Source/WebCore/rendering/style/StyleGridData.h	2013-03-19 23:07:39 UTC (rev 146273)
+++ trunk/Source/WebCore/rendering/style/StyleGridData.h	2013-03-19 23:12:28 UTC (rev 146274)
@@ -41,7 +41,7 @@
 
     bool operator==(const StyleGridData& o) const
     {
-        return m_gridColumns == o.m_gridColumns && m_gridRows == o.m_gridRows && m_gridAutoFlow == o.m_gridAutoFlow;
+        return m_gridColumns == o.m_gridColumns && m_gridRows == o.m_gridRows && m_gridAutoFlow == o.m_gridAutoFlow && m_gridAutoRows == o.m_gridAutoRows && m_gridAutoColumns == o.m_gridAutoColumns;
     }
 
     bool operator!=(const StyleGridData& o) const
@@ -55,6 +55,9 @@
 
     GridAutoFlow m_gridAutoFlow;
 
+    GridTrackSize m_gridAutoRows;
+    GridTrackSize m_gridAutoColumns;
+
 private:
     StyleGridData();
     StyleGridData(const StyleGridData&);
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to