Title: [153752] trunk
Revision
153752
Author
ser...@webkit.org
Date
2013-08-06 08:08:21 -0700 (Tue, 06 Aug 2013)

Log Message

[CSS Grid Layout] Allow defining named grid lines on the grid element
https://bugs.webkit.org/show_bug.cgi?id=118255

Reviewed by Andreas Kling.

>From Blink r149798 by <jchaffr...@chromium.org>

Source/WebCore:

This change adds parsing, style resolution and getComputedStyle
support for named grid lines at the grid element level
(i.e. extends our <track-list> support). Per the specification, we
allow multiple grid lines with the same name.

To fully support resolving the grid lines to a position on our
grid, we need to add the parsing at the grid item's level (which
means extending our <grid-line> support). This will be done in a
follow-up change.

Test: fast/css-grid-layout/named-grid-line-get-set.html

* css/CSSComputedStyleDeclaration.cpp:
(WebCore::addValuesForNamedGridLinesAtIndex):
(WebCore::valueForGridTrackList):
(WebCore::ComputedStyleExtractor::propertyValue):
* css/CSSParser.cpp:
(WebCore::CSSParser::parseGridTrackList):
* css/StyleResolver.cpp:
(WebCore::createGridTrackList):
(WebCore::StyleResolver::applyProperty):
* rendering/style/RenderStyle.h:
* rendering/style/StyleGridData.cpp:
(WebCore::StyleGridData::StyleGridData):
* rendering/style/StyleGridData.h:
(WebCore::StyleGridData::operator==):

LayoutTests:

* fast/css-grid-layout/named-grid-line-get-set-expected.txt: Added.
* fast/css-grid-layout/named-grid-line-get-set.html: Added.

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (153751 => 153752)


--- trunk/LayoutTests/ChangeLog	2013-08-06 13:58:39 UTC (rev 153751)
+++ trunk/LayoutTests/ChangeLog	2013-08-06 15:08:21 UTC (rev 153752)
@@ -1,3 +1,15 @@
+2013-08-06  Sergio Villar Senin  <svil...@igalia.com>
+
+        [CSS Grid Layout] Allow defining named grid lines on the grid element
+        https://bugs.webkit.org/show_bug.cgi?id=118255
+
+        Reviewed by Andreas Kling.
+
+        From Blink r149798 by <jchaffr...@chromium.org>
+
+        * fast/css-grid-layout/named-grid-line-get-set-expected.txt: Added.
+        * fast/css-grid-layout/named-grid-line-get-set.html: Added.
+
 2013-06-26  Sergio Villar Senin  <svil...@igalia.com>
 
         [CSS Grid Layout] Add support for parsing <grid-line> that includes a 'span'

Added: trunk/LayoutTests/fast/css-grid-layout/named-grid-line-get-set-expected.txt (0 => 153752)


--- trunk/LayoutTests/fast/css-grid-layout/named-grid-line-get-set-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/fast/css-grid-layout/named-grid-line-get-set-expected.txt	2013-08-06 15:08:21 UTC (rev 153752)
@@ -0,0 +1,52 @@
+Test that setting and getting grid-definition-columns and grid-definition-rows works as expected
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+Test getting -webkit-grid-definition-columns and -webkit-grid-definition-rows set through CSS
+PASS getComputedStyle(gridElement, '').getPropertyValue('-webkit-grid-definition-columns') is "first 10px"
+PASS getComputedStyle(gridElement, '').getPropertyValue('-webkit-grid-definition-rows') is "first 15px"
+PASS getComputedStyle(gridElement, '').getPropertyValue('-webkit-grid-definition-columns') is "53% last"
+PASS getComputedStyle(gridElement, '').getPropertyValue('-webkit-grid-definition-rows') is "27% last"
+PASS getComputedStyle(gridElement, '').getPropertyValue('-webkit-grid-definition-columns') is "first auto"
+PASS getComputedStyle(gridElement, '').getPropertyValue('-webkit-grid-definition-rows') is "auto last"
+PASS getComputedStyle(gridElement, '').getPropertyValue('-webkit-grid-definition-columns') is "first minmax(10%, 15px)"
+PASS getComputedStyle(gridElement, '').getPropertyValue('-webkit-grid-definition-rows') is "minmax(20px, 50%) last"
+PASS getComputedStyle(gridElement, '').getPropertyValue('-webkit-grid-definition-columns') is "nav first 10px last"
+PASS getComputedStyle(gridElement, '').getPropertyValue('-webkit-grid-definition-rows') is "nav first 15px last"
+PASS getComputedStyle(gridElement, '').getPropertyValue('-webkit-grid-definition-columns') is "nav first 10% nav 15% last"
+PASS getComputedStyle(gridElement, '').getPropertyValue('-webkit-grid-definition-rows') is "first nav2 25% nav2 75% last"
+
+Test getting and setting -webkit-grid-definition-columns and -webkit-grid-definition-rows through JS
+PASS getComputedStyle(gridElement, '').getPropertyValue('-webkit-grid-definition-columns') is "first 18px"
+PASS getComputedStyle(gridElement, '').getPropertyValue('-webkit-grid-definition-rows') is "66px last"
+PASS getComputedStyle(gridElement, '').getPropertyValue('-webkit-grid-definition-columns') is "first 55%"
+PASS getComputedStyle(gridElement, '').getPropertyValue('-webkit-grid-definition-rows') is "40% last"
+PASS getComputedStyle(gridElement, '').getPropertyValue('-webkit-grid-definition-columns') is "first auto"
+PASS getComputedStyle(gridElement, '').getPropertyValue('-webkit-grid-definition-rows') is "auto last"
+PASS getComputedStyle(gridElement, '').getPropertyValue('-webkit-grid-definition-columns') is "first -webkit-min-content"
+PASS getComputedStyle(gridElement, '').getPropertyValue('-webkit-grid-definition-rows') is "-webkit-min-content last"
+PASS getComputedStyle(gridElement, '').getPropertyValue('-webkit-grid-definition-columns') is "first -webkit-max-content"
+PASS getComputedStyle(gridElement, '').getPropertyValue('-webkit-grid-definition-rows') is "-webkit-max-content last"
+PASS getComputedStyle(gridElement, '').getPropertyValue('-webkit-grid-definition-columns') is "first minmax(55%, 45px)"
+PASS getComputedStyle(gridElement, '').getPropertyValue('-webkit-grid-definition-rows') is "minmax(30px, 40%) last"
+PASS getComputedStyle(gridElement, '').getPropertyValue('-webkit-grid-definition-columns') is "first minmax(220px, -webkit-max-content)"
+PASS getComputedStyle(gridElement, '').getPropertyValue('-webkit-grid-definition-rows') is "minmax(-webkit-max-content, 50px) last"
+PASS getComputedStyle(gridElement, '').getPropertyValue('-webkit-grid-definition-columns') is "first minmax(220px, -webkit-max-content)"
+PASS getComputedStyle(gridElement, '').getPropertyValue('-webkit-grid-definition-rows') is "minmax(-webkit-max-content, 50px) last"
+PASS getComputedStyle(gridElement, '').getPropertyValue('-webkit-grid-definition-columns') is "first minmax(-webkit-min-content, -webkit-max-content)"
+PASS getComputedStyle(gridElement, '').getPropertyValue('-webkit-grid-definition-rows') is "minmax(-webkit-max-content, -webkit-min-content) last"
+PASS getComputedStyle(gridElement, '').getPropertyValue('-webkit-grid-definition-columns') is "nav first minmax(-webkit-min-content, -webkit-max-content) last"
+PASS getComputedStyle(gridElement, '').getPropertyValue('-webkit-grid-definition-rows') is "nav first minmax(-webkit-max-content, -webkit-min-content) last"
+PASS getComputedStyle(gridElement, '').getPropertyValue('-webkit-grid-definition-columns') is "nav first minmax(-webkit-min-content, -webkit-max-content) nav auto last"
+PASS getComputedStyle(gridElement, '').getPropertyValue('-webkit-grid-definition-rows') is "first nav2 minmax(-webkit-max-content, -webkit-min-content) nav2 minmax(10px, 15px) last"
+PASS getComputedStyle(gridElement, '').getPropertyValue('-webkit-grid-definition-columns') is "foo bar auto foo auto bar"
+PASS getComputedStyle(gridElement, '').getPropertyValue('-webkit-grid-definition-rows') is "foo bar auto foo auto bar"
+
+Test getting and setting invalid -webkit-grid-definition-columns and -webkit-grid-definition-rows through JS
+PASS getComputedStyle(gridElement, '').getPropertyValue('-webkit-grid-definition-columns') is "none"
+PASS getComputedStyle(gridElement, '').getPropertyValue('-webkit-grid-definition-rows') is "none"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+

Added: trunk/LayoutTests/fast/css-grid-layout/named-grid-line-get-set.html (0 => 153752)


--- trunk/LayoutTests/fast/css-grid-layout/named-grid-line-get-set.html	                        (rev 0)
+++ trunk/LayoutTests/fast/css-grid-layout/named-grid-line-get-set.html	2013-08-06 15:08:21 UTC (rev 153752)
@@ -0,0 +1,153 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+<script>
+if (window.testRunner)
+    testRunner.overridePreference("WebKitCSSGridLayoutEnabled", 1);
+</script>
+<link href="" rel="stylesheet">
+<style>
+.gridWithFixed {
+    -webkit-grid-definition-columns: "first" 10px;
+    -webkit-grid-definition-rows: "first" 15px;
+}
+.gridWithPercent {
+    -webkit-grid-definition-columns: 53% "last";
+    -webkit-grid-definition-rows: 27% "last";
+}
+.gridWithAuto {
+    -webkit-grid-definition-columns: "first" auto;
+    -webkit-grid-definition-rows: auto "last";
+}
+.gridWithMinMax {
+    -webkit-grid-definition-columns: "first" minmax(10%, 15px);
+    -webkit-grid-definition-rows: minmax(20px, 50%) "last";
+}
+.gridWithFixedMultiple {
+    -webkit-grid-definition-columns: "first" "nav" 10px "last";
+    -webkit-grid-definition-rows: "first" "nav" 15px "last";
+}
+.gridWithPercentageSameStringMultipleTimes {
+    -webkit-grid-definition-columns: "first" "nav" 10% "nav" 15% "last";
+    -webkit-grid-definition-rows: "first" "nav2" 25% "nav2" 75% "last";
+}
+</style>
+<script src=""
+</head>
+<body>
+<div class="grid gridWithFixed" id="gridWithFixedElement"></div>
+<div class="grid gridWithPercent" id="gridWithPercentElement"></div>
+<div class="grid gridWithAuto" id="gridWithAutoElement"></div>
+<div class="grid gridWithMinMax" id="gridWithMinMax"></div>
+<div class="grid gridWithFixedMultiple" id="gridWithFixedMultiple"></div>
+<div class="grid gridWithPercentageSameStringMultipleTimes" id="gridWithPercentageSameStringMultipleTimes"></div>
+<script>
+    description('Test that setting and getting grid-definition-columns and grid-definition-rows works as expected');
+
+    function testValue(gridElement, namedGridColumns, namedGridRows)
+    {
+        this.gridElement = gridElement;
+        shouldBeEqualToString("getComputedStyle(gridElement, '').getPropertyValue('-webkit-grid-definition-columns')", namedGridColumns);
+        shouldBeEqualToString("getComputedStyle(gridElement, '').getPropertyValue('-webkit-grid-definition-rows')", namedGridRows);
+    }
+
+    function testCSSValue(gridElementId, namedGridColumns, namedGridRows)
+    {
+        testValue(document.getElementById(gridElementId), namedGridColumns, namedGridRows);
+    }
+
+    debug("Test getting -webkit-grid-definition-columns and -webkit-grid-definition-rows set through CSS");
+    testCSSValue("gridWithFixedElement", "first 10px", "first 15px");
+    testCSSValue("gridWithPercentElement", "53% last", "27% last");
+    testCSSValue("gridWithAutoElement", "first auto", "auto last");
+    testCSSValue("gridWithMinMax", "first minmax(10%, 15px)", "minmax(20px, 50%) last");
+    testCSSValue("gridWithFixedMultiple", "nav first 10px last", "nav first 15px last");
+    testCSSValue("gridWithPercentageSameStringMultipleTimes", "nav first 10% nav 15% last", "first nav2 25% nav2 75% last");
+
+    debug("");
+    debug("Test getting and setting -webkit-grid-definition-columns and -webkit-grid-definition-rows through JS");
+    var element = document.createElement("div");
+    document.body.appendChild(element);
+    element.style.webkitGridDefinitionColumns = "'first' 18px";
+    element.style.webkitGridDefinitionRows = "66px 'last'";
+    testValue(element, "first 18px", "66px last");
+
+    element = document.createElement("div");
+    document.body.appendChild(element);
+    element.style.webkitGridDefinitionColumns = "'first' 55%";
+    element.style.webkitGridDefinitionRows = "40% 'last'";
+    testValue(element, "first 55%", "40% last");
+
+    element = document.createElement("div");
+    document.body.appendChild(element);
+    element.style.webkitGridDefinitionColumns = "'first' auto";
+    element.style.webkitGridDefinitionRows = "auto 'last'";
+    testValue(element, "first auto", "auto last");
+
+    element = document.createElement("div");
+    document.body.appendChild(element);
+    element.style.webkitGridDefinitionColumns = "'first' -webkit-min-content";
+    element.style.webkitGridDefinitionRows = "-webkit-min-content 'last'";
+    testValue(element, "first -webkit-min-content", "-webkit-min-content last");
+
+    element = document.createElement("div");
+    document.body.appendChild(element);
+    element.style.webkitGridDefinitionColumns = "'first' -webkit-max-content";
+    element.style.webkitGridDefinitionRows = "-webkit-max-content 'last'";
+    testValue(element, "first -webkit-max-content", "-webkit-max-content last");
+
+    element = document.createElement("div");
+    document.body.appendChild(element);
+    element.style.webkitGridDefinitionColumns = "'first' minmax(55%, 45px)";
+    element.style.webkitGridDefinitionRows = "minmax(30px, 40%) 'last'";
+    testValue(element, "first minmax(55%, 45px)", "minmax(30px, 40%) last");
+
+    element = document.createElement("div");
+    document.body.appendChild(element);
+    element.style.font = "10px Ahem";
+    element.style.webkitGridDefinitionColumns = "'first' minmax(22em, -webkit-max-content)";
+    element.style.webkitGridDefinitionRows = "minmax(-webkit-max-content, 5em) 'last'";
+    testValue(element, "first minmax(220px, -webkit-max-content)", "minmax(-webkit-max-content, 50px) last");
+
+    element = document.createElement("div");
+    document.body.appendChild(element);
+    element.style.font = "10px Ahem";
+    element.style.webkitGridDefinitionColumns = "'first' minmax(22em, -webkit-max-content)";
+    element.style.webkitGridDefinitionRows = "minmax(-webkit-max-content, 5em) 'last'";
+    testValue(element, "first minmax(220px, -webkit-max-content)", "minmax(-webkit-max-content, 50px) last");
+
+    element = document.createElement("div");
+    document.body.appendChild(element);
+    element.style.webkitGridDefinitionColumns = "'first' minmax(-webkit-min-content, -webkit-max-content)";
+    element.style.webkitGridDefinitionRows = "minmax(-webkit-max-content, -webkit-min-content) 'last'";
+    testValue(element, "first minmax(-webkit-min-content, -webkit-max-content)", "minmax(-webkit-max-content, -webkit-min-content) last");
+
+    element = document.createElement("div");
+    document.body.appendChild(element);
+    element.style.webkitGridDefinitionColumns = "'first' 'nav' minmax(-webkit-min-content, -webkit-max-content) 'last'";
+    element.style.webkitGridDefinitionRows = "'first' 'nav' minmax(-webkit-max-content, -webkit-min-content) 'last'";
+    testValue(element, "nav first minmax(-webkit-min-content, -webkit-max-content) last", "nav first minmax(-webkit-max-content, -webkit-min-content) last");
+
+    element = document.createElement("div");
+    document.body.appendChild(element);
+    element.style.webkitGridDefinitionColumns = "'first' 'nav' minmax(-webkit-min-content, -webkit-max-content) 'nav' auto 'last'";
+    element.style.webkitGridDefinitionRows = "'first' 'nav2' minmax(-webkit-max-content, -webkit-min-content) 'nav2' minmax(10px, 15px) 'last'";
+    testValue(element, "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");
+
+    element = document.createElement("div");
+    document.body.appendChild(element);
+    element.style.webkitGridDefinitionColumns = "'foo' 'bar' auto 'foo' auto 'bar'";
+    element.style.webkitGridDefinitionRows = "'foo' 'bar' auto 'foo' auto 'bar'";
+    testValue(element, "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");
+    element = document.createElement("div");
+    document.body.appendChild(element);
+    element.style.webkitGridDefinitionColumns = "'foo'";
+    element.style.webkitGridDefinitionRows = "'bar";
+    testValue(element, "none", "none");
+</script>
+<script src=""
+</body>
+</html>

Modified: trunk/Source/WebCore/ChangeLog (153751 => 153752)


--- trunk/Source/WebCore/ChangeLog	2013-08-06 13:58:39 UTC (rev 153751)
+++ trunk/Source/WebCore/ChangeLog	2013-08-06 15:08:21 UTC (rev 153752)
@@ -1,3 +1,39 @@
+2013-08-06  Sergio Villar Senin  <svil...@igalia.com>
+
+        [CSS Grid Layout] Allow defining named grid lines on the grid element
+        https://bugs.webkit.org/show_bug.cgi?id=118255
+
+        Reviewed by Andreas Kling.
+
+        From Blink r149798 by <jchaffr...@chromium.org>
+
+        This change adds parsing, style resolution and getComputedStyle
+        support for named grid lines at the grid element level
+        (i.e. extends our <track-list> support). Per the specification, we
+        allow multiple grid lines with the same name.
+
+        To fully support resolving the grid lines to a position on our
+        grid, we need to add the parsing at the grid item's level (which
+        means extending our <grid-line> support). This will be done in a
+        follow-up change.
+
+        Test: fast/css-grid-layout/named-grid-line-get-set.html
+
+        * css/CSSComputedStyleDeclaration.cpp:
+        (WebCore::addValuesForNamedGridLinesAtIndex):
+        (WebCore::valueForGridTrackList):
+        (WebCore::ComputedStyleExtractor::propertyValue):
+        * css/CSSParser.cpp:
+        (WebCore::CSSParser::parseGridTrackList):
+        * css/StyleResolver.cpp:
+        (WebCore::createGridTrackList):
+        (WebCore::StyleResolver::applyProperty):
+        * rendering/style/RenderStyle.h:
+        * rendering/style/StyleGridData.cpp:
+        (WebCore::StyleGridData::StyleGridData):
+        * rendering/style/StyleGridData.h:
+        (WebCore::StyleGridData::operator==):
+
 2013-08-06  Allan Sandfeld Jensen  <allan.jen...@digia.com>
 
         [Qt] Fix minimal build.

Modified: trunk/Source/WebCore/css/CSSComputedStyleDeclaration.cpp (153751 => 153752)


--- trunk/Source/WebCore/css/CSSComputedStyleDeclaration.cpp	2013-08-06 13:58:39 UTC (rev 153751)
+++ trunk/Source/WebCore/css/CSSComputedStyleDeclaration.cpp	2013-08-06 15:08:21 UTC (rev 153752)
@@ -1083,15 +1083,39 @@
     return 0;
 }
 
-static PassRefPtr<CSSValue> valueForGridTrackList(const Vector<GridTrackSize>& trackSizes, const RenderStyle* style, RenderView *renderView)
+static void addValuesForNamedGridLinesAtIndex(const NamedGridLinesMap& namedGridLines, size_t i, CSSValueList& list)
 {
+    // Note that this won't return the results in the order specified in the style sheet,
+    // which is probably fine as we still *do* return all the expected values.
+    NamedGridLinesMap::const_iterator it = namedGridLines.begin();
+    NamedGridLinesMap::const_iterator end = namedGridLines.end();
+    for (; it != end; ++it) {
+        const Vector<size_t>& linesIndexes = it->value;
+        for (size_t j = 0; j < linesIndexes.size(); ++j) {
+            if (linesIndexes[j] != i)
+                continue;
+
+            list.append(cssValuePool().createValue(it->key, CSSPrimitiveValue::CSS_STRING));
+            break;
+        }
+    }
+}
+
+static PassRefPtr<CSSValue> valueForGridTrackList(const Vector<GridTrackSize>& trackSizes, const NamedGridLinesMap& namedGridLines, const RenderStyle* style, RenderView* renderView)
+{
     // Handle the 'none' case here.
-    if (!trackSizes.size())
+    if (!trackSizes.size()) {
+        ASSERT(namedGridLines.isEmpty());
         return cssValuePool().createIdentifierValue(CSSValueNone);
+    }
 
     RefPtr<CSSValueList> list = CSSValueList::createSpaceSeparated();
-    for (size_t i = 0; i < trackSizes.size(); ++i)
+    for (size_t i = 0; i < trackSizes.size(); ++i) {
+        addValuesForNamedGridLinesAtIndex(namedGridLines, i, *list);
         list->append(valueForGridTrackSize(trackSizes[i], style, renderView));
+    }
+    // Those are the trailing <string>* allowed in the syntax.
+    addValuesForNamedGridLinesAtIndex(namedGridLines, trackSizes.size(), *list);
     return list.release();
 }
 
@@ -2044,9 +2068,9 @@
         case CSSPropertyWebkitGridAutoRows:
             return valueForGridTrackSize(style->gridAutoRows(), style.get(), m_node->document()->renderView());
         case CSSPropertyWebkitGridDefinitionColumns:
-            return valueForGridTrackList(style->gridColumns(), style.get(), m_node->document()->renderView());
+            return valueForGridTrackList(style->gridColumns(), style->namedGridColumnLines(), style.get(), m_node->document()->renderView());
         case CSSPropertyWebkitGridDefinitionRows:
-            return valueForGridTrackList(style->gridRows(), style.get(), m_node->document()->renderView());
+            return valueForGridTrackList(style->gridRows(), style->namedGridRowLines(), style.get(), m_node->document()->renderView());
 
         case CSSPropertyWebkitGridColumnStart:
             return valueForGridPosition(style->gridItemColumnStart());

Modified: trunk/Source/WebCore/css/CSSParser.cpp (153751 => 153752)


--- trunk/Source/WebCore/css/CSSParser.cpp	2013-08-06 13:58:39 UTC (rev 153751)
+++ trunk/Source/WebCore/css/CSSParser.cpp	2013-08-06 15:08:21 UTC (rev 153752)
@@ -4853,6 +4853,16 @@
 
     RefPtr<CSSValueList> values = CSSValueList::createSpaceSeparated();
     while (m_valueList->current()) {
+        while (m_valueList->current() && m_valueList->current()->unit == CSSPrimitiveValue::CSS_STRING) {
+            RefPtr<CSSPrimitiveValue> name = createPrimitiveStringValue(m_valueList->current());
+            values->append(name);
+            m_valueList->next();
+        }
+
+        // This allows trailing <string>* per the specification.
+        if (!m_valueList->current())
+            break;
+
         RefPtr<CSSPrimitiveValue> primitiveValue = parseGridTrackSize();
         if (!primitiveValue)
             return false;

Modified: trunk/Source/WebCore/css/StyleResolver.cpp (153751 => 153752)


--- trunk/Source/WebCore/css/StyleResolver.cpp	2013-08-06 13:58:39 UTC (rev 153751)
+++ trunk/Source/WebCore/css/StyleResolver.cpp	2013-08-06 15:08:21 UTC (rev 153752)
@@ -2099,7 +2099,7 @@
     return true;
 }
 
-static bool createGridTrackList(CSSValue* value, Vector<GridTrackSize>& trackSizes, const StyleResolver::State& state)
+static bool createGridTrackList(CSSValue* value, Vector<GridTrackSize>& trackSizes, NamedGridLinesMap& namedGridLines, const StyleResolver::State& state)
 {
     // Handle 'none'.
     if (value->isPrimitiveValue()) {
@@ -2110,14 +2110,29 @@
     if (!value->isValueList())
         return false;
 
+    size_t currentNamedGridLine = 0;
     for (CSSValueListIterator i = value; i.hasMore(); i.advance()) {
         CSSValue* currValue = i.value();
+        if (currValue->isPrimitiveValue()) {
+            CSSPrimitiveValue* primitiveValue = static_cast<CSSPrimitiveValue*>(currValue);
+            if (primitiveValue->isString()) {
+                NamedGridLinesMap::AddResult result = namedGridLines.add(primitiveValue->getStringValue(), Vector<size_t>());
+                result.iterator->value.append(currentNamedGridLine);
+                continue;
+            }
+        }
+
+        ++currentNamedGridLine;
         GridTrackSize trackSize;
         if (!createGridTrackSize(currValue, trackSize, state))
             return false;
 
         trackSizes.append(trackSize);
     }
+
+    if (trackSizes.isEmpty())
+        return false;
+
     return true;
 }
 
@@ -2838,16 +2853,20 @@
     }
     case CSSPropertyWebkitGridDefinitionColumns: {
         Vector<GridTrackSize> trackSizes;
-        if (!createGridTrackList(value, trackSizes, state))
+        NamedGridLinesMap namedGridLines;
+        if (!createGridTrackList(value, trackSizes, namedGridLines, state))
             return;
         state.style()->setGridColumns(trackSizes);
+        state.style()->setNamedGridColumnLines(namedGridLines);
         return;
     }
     case CSSPropertyWebkitGridDefinitionRows: {
         Vector<GridTrackSize> trackSizes;
-        if (!createGridTrackList(value, trackSizes, state))
+        NamedGridLinesMap namedGridLines;
+        if (!createGridTrackList(value, trackSizes, namedGridLines, state))
             return;
         state.style()->setGridRows(trackSizes);
+        state.style()->setNamedGridRowLines(namedGridLines);
         return;
     }
 

Modified: trunk/Source/WebCore/rendering/style/RenderStyle.h (153751 => 153752)


--- trunk/Source/WebCore/rendering/style/RenderStyle.h	2013-08-06 13:58:39 UTC (rev 153751)
+++ trunk/Source/WebCore/rendering/style/RenderStyle.h	2013-08-06 15:08:21 UTC (rev 153752)
@@ -776,6 +776,8 @@
 
     const Vector<GridTrackSize>& gridColumns() const { return rareNonInheritedData->m_grid->m_gridColumns; }
     const Vector<GridTrackSize>& gridRows() const { return rareNonInheritedData->m_grid->m_gridRows; }
+    const NamedGridLinesMap& namedGridColumnLines() const { return rareNonInheritedData->m_grid->m_namedGridColumnLines; }
+    const NamedGridLinesMap& namedGridRowLines() const { return rareNonInheritedData->m_grid->m_namedGridRowLines; }
     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; }
@@ -1298,6 +1300,8 @@
     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 setNamedGridColumnLines(const NamedGridLinesMap& namedGridColumnLines) { SET_VAR(rareNonInheritedData.access()->m_grid, m_namedGridColumnLines, namedGridColumnLines); }
+    void setNamedGridRowLines(const NamedGridLinesMap& namedGridRowLines) { SET_VAR(rareNonInheritedData.access()->m_grid, m_namedGridRowLines, namedGridRowLines); }
     void setGridAutoFlow(GridAutoFlow flow) { SET_VAR(rareNonInheritedData.access()->m_grid, m_gridAutoFlow, flow); }
     void setGridItemColumnStart(const GridPosition& columnStartPosition) { SET_VAR(rareNonInheritedData.access()->m_gridItem, m_gridColumnStart, columnStartPosition); }
     void setGridItemColumnEnd(const GridPosition& columnEndPosition) { SET_VAR(rareNonInheritedData.access()->m_gridItem, m_gridColumnEnd, columnEndPosition); }

Modified: trunk/Source/WebCore/rendering/style/StyleGridData.cpp (153751 => 153752)


--- trunk/Source/WebCore/rendering/style/StyleGridData.cpp	2013-08-06 13:58:39 UTC (rev 153751)
+++ trunk/Source/WebCore/rendering/style/StyleGridData.cpp	2013-08-06 15:08:21 UTC (rev 153752)
@@ -43,6 +43,8 @@
     : RefCounted<StyleGridData>()
     , m_gridColumns(o.m_gridColumns)
     , m_gridRows(o.m_gridRows)
+    , m_namedGridColumnLines(o.m_namedGridColumnLines)
+    , m_namedGridRowLines(o.m_namedGridRowLines)
     , m_gridAutoFlow(o.m_gridAutoFlow)
     , m_gridAutoRows(o.m_gridAutoRows)
     , m_gridAutoColumns(o.m_gridAutoColumns)

Modified: trunk/Source/WebCore/rendering/style/StyleGridData.h (153751 => 153752)


--- trunk/Source/WebCore/rendering/style/StyleGridData.h	2013-08-06 13:58:39 UTC (rev 153751)
+++ trunk/Source/WebCore/rendering/style/StyleGridData.h	2013-08-06 15:08:21 UTC (rev 153752)
@@ -31,9 +31,12 @@
 #include <wtf/PassRefPtr.h>
 #include <wtf/RefCounted.h>
 #include <wtf/Vector.h>
+#include <wtf/text/WTFString.h>
 
 namespace WebCore {
 
+typedef HashMap<String, Vector<size_t> > NamedGridLinesMap;
+
 class StyleGridData : public RefCounted<StyleGridData> {
 public:
     static PassRefPtr<StyleGridData> create() { return adoptRef(new StyleGridData); }
@@ -41,7 +44,8 @@
 
     bool operator==(const StyleGridData& o) const
     {
-        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;
+        // FIXME: comparing two hashes doesn't look great for performance. Something to keep in mind going forward.
+        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 && m_namedGridColumnLines == o.m_namedGridColumnLines && m_namedGridRowLines == o.m_namedGridRowLines;
     }
 
     bool operator!=(const StyleGridData& o) const
@@ -53,6 +57,9 @@
     Vector<GridTrackSize> m_gridColumns;
     Vector<GridTrackSize> m_gridRows;
 
+    NamedGridLinesMap m_namedGridColumnLines;
+    NamedGridLinesMap m_namedGridRowLines;
+
     GridAutoFlow m_gridAutoFlow;
 
     GridTrackSize m_gridAutoRows;
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to