[CSS Grid Layout] getComputedStyle() not using author's order when showing named...
authorsvillar@igalia.com <svillar@igalia.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 17 Mar 2014 17:30:32 +0000 (17:30 +0000)
committersvillar@igalia.com <svillar@igalia.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 17 Mar 2014 17:30:32 +0000 (17:30 +0000)
https://bugs.webkit.org/show_bug.cgi?id=127837

Reviewed by David Hyatt.

Source/WebCore:

Added a couple of new Vectors to store the names of the grid lines
respecting their order. They will be used to get the right outcome
for getComputedStyle().

* css/CSSComputedStyleDeclaration.cpp:
(WebCore::addValuesForNamedGridLinesAtIndex):
(WebCore::valueForGridTrackList):
* 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:

Grid line names are now shown using the exact same order as the one used in the CSS.

* 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/non-named-grid-line-get-set-expected.txt:

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

LayoutTests/ChangeLog
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/non-named-grid-line-get-set-expected.txt
LayoutTests/fast/css-grid-layout/non-named-grid-line-get-set.html
Source/WebCore/ChangeLog
Source/WebCore/css/CSSComputedStyleDeclaration.cpp
Source/WebCore/css/StyleResolver.cpp
Source/WebCore/rendering/style/RenderStyle.h
Source/WebCore/rendering/style/StyleGridData.cpp
Source/WebCore/rendering/style/StyleGridData.h

index e7fa45d..c5a5412 100644 (file)
@@ -1,3 +1,16 @@
+2014-01-29  Sergio Villar Senin  <svillar@igalia.com>
+
+        [CSS Grid Layout] getComputedStyle() not using author's order when showing named grid lines
+        https://bugs.webkit.org/show_bug.cgi?id=127837
+
+        Reviewed by David Hyatt.
+
+        Grid line names are now shown using the exact same order as the one used in the CSS.
+
+        * 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/non-named-grid-line-get-set-expected.txt:
+
 2014-03-17  Gurpreet Kaur  <k.gurpreet@samsung.com>
 
         Safari should not render a cell if the <td> is empty
index d99eaa8..ba6c49d 100644 (file)
@@ -18,9 +18,9 @@ PASS window.getComputedStyle(gridWithAutoWithChildrenElement, '').getPropertyVal
 PASS window.getComputedStyle(gridWithAutoWithChildrenElement, '').getPropertyValue('-webkit-grid-template-rows') is "22px last"
 PASS window.getComputedStyle(gridWithMinMax, '').getPropertyValue('-webkit-grid-template-columns') is "first 80px"
 PASS window.getComputedStyle(gridWithMinMax, '').getPropertyValue('-webkit-grid-template-rows') is "300px last"
-PASS window.getComputedStyle(gridWithFixedMultiple, '').getPropertyValue('-webkit-grid-template-columns') is "nav first 10px last"
-PASS window.getComputedStyle(gridWithFixedMultiple, '').getPropertyValue('-webkit-grid-template-rows') is "nav first 15px last"
-PASS window.getComputedStyle(gridWithPercentageSameStringMultipleTimes, '').getPropertyValue('-webkit-grid-template-columns') is "nav first 80px nav 120px last"
+PASS window.getComputedStyle(gridWithFixedMultiple, '').getPropertyValue('-webkit-grid-template-columns') is "first nav 10px last"
+PASS window.getComputedStyle(gridWithFixedMultiple, '').getPropertyValue('-webkit-grid-template-rows') is "first nav 15px last"
+PASS window.getComputedStyle(gridWithPercentageSameStringMultipleTimes, '').getPropertyValue('-webkit-grid-template-columns') is "first nav 80px nav 120px last"
 PASS window.getComputedStyle(gridWithPercentageSameStringMultipleTimes, '').getPropertyValue('-webkit-grid-template-rows') is "first nav2 150px nav2 450px last"
 
 Test getting and setting -webkit-grid-template-columns and -webkit-grid-template-rows through JS
@@ -60,11 +60,11 @@ PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-template-colum
 PASS element.style.webkitGridTemplateColumns is "first minmax(-webkit-min-content, -webkit-max-content)"
 PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-template-rows') is "0px last"
 PASS element.style.webkitGridTemplateRows is "minmax(-webkit-max-content, -webkit-min-content) last"
-PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-template-columns') is "nav first 0px last"
+PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-template-columns') is "first nav 0px last"
 PASS element.style.webkitGridTemplateColumns is "first nav minmax(-webkit-min-content, -webkit-max-content) last"
-PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-template-rows') is "nav first 0px last"
+PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-template-rows') is "first nav 0px last"
 PASS element.style.webkitGridTemplateRows is "first nav minmax(-webkit-max-content, -webkit-min-content) last"
-PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-template-columns') is "nav first 0px nav 0px last"
+PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-template-columns') is "first nav 0px nav 0px last"
 PASS element.style.webkitGridTemplateColumns is "first nav minmax(-webkit-min-content, -webkit-max-content) nav auto last"
 PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-template-rows') is "first nav2 0px nav2 15px last"
 PASS element.style.webkitGridTemplateRows is "first nav2 minmax(-webkit-max-content, -webkit-min-content) nav2 minmax(10px, 15px) last"
index c72e4dd..2aacfb6 100644 (file)
@@ -71,8 +71,8 @@ if (window.testRunner)
     testGridTemplatesValues(document.getElementById("gridWithAutoElement"), "first 0px", "0px last");
     testGridTemplatesValues(document.getElementById("gridWithAutoWithChildrenElement"), "first 77px", "22px last");
     testGridTemplatesValues(document.getElementById("gridWithMinMax"), "first 80px", "300px last");
-    testGridTemplatesValues(document.getElementById("gridWithFixedMultiple"), "nav first 10px last", "nav first 15px last");
-    testGridTemplatesValues(document.getElementById("gridWithPercentageSameStringMultipleTimes"), "nav first 80px nav 120px last", "first nav2 150px nav2 450px last");
+    testGridTemplatesValues(document.getElementById("gridWithFixedMultiple"), "first nav 10px last", "first nav 15px last");
+    testGridTemplatesValues(document.getElementById("gridWithPercentageSameStringMultipleTimes"), "first nav 80px nav 120px last", "first nav2 150px nav2 450px last");
 
     debug("");
     debug("Test getting and setting -webkit-grid-template-columns and -webkit-grid-template-rows through JS");
@@ -85,8 +85,8 @@ if (window.testRunner)
     testGridTemplatesSetJSValues("'first' minmax(22em, -webkit-max-content)", "minmax(-webkit-max-content, 5em) 'last'", "first 220px", "50px last", "first minmax(22em, -webkit-max-content)", "minmax(-webkit-max-content, 5em) last");
     testGridTemplatesSetJSValues("'first' minmax(22em, -webkit-min-content)", "minmax(-webkit-min-content, 5em) 'last'", "first 220px", "50px last", "first minmax(22em, -webkit-min-content)", "minmax(-webkit-min-content, 5em) last");
     testGridTemplatesSetJSValues("'first' minmax(-webkit-min-content, -webkit-max-content)", "minmax(-webkit-max-content, -webkit-min-content) 'last'", "first 0px", "0px last", "first minmax(-webkit-min-content, -webkit-max-content)", "minmax(-webkit-max-content, -webkit-min-content) last");
-    testGridTemplatesSetJSValues("'first' 'nav' minmax(-webkit-min-content, -webkit-max-content) 'last'", "'first' 'nav' minmax(-webkit-max-content, -webkit-min-content) 'last'", "nav first 0px last", "nav first 0px last", "first nav minmax(-webkit-min-content, -webkit-max-content) last", "first nav minmax(-webkit-max-content, -webkit-min-content) last");
-    testGridTemplatesSetJSValues("'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 0px nav 0px last", "first nav2 0px nav2 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");
+    testGridTemplatesSetJSValues("'first' 'nav' minmax(-webkit-min-content, -webkit-max-content) 'last'", "'first' 'nav' minmax(-webkit-max-content, -webkit-min-content) 'last'", "first nav 0px last", "first nav 0px last", "first nav minmax(-webkit-min-content, -webkit-max-content) last", "first nav minmax(-webkit-max-content, -webkit-min-content) last");
+    testGridTemplatesSetJSValues("'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'", "first nav 0px nav 0px last", "first nav2 0px nav2 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");
     testGridTemplatesSetJSValues("'foo' 'bar' auto 'foo' auto 'bar'", "'foo' 'bar' auto 'foo' auto 'bar'", "foo bar 0px foo 0px bar", "foo bar 0px foo 0px bar", "foo bar auto foo auto bar", "foo bar auto foo auto bar");
 
     debug("");
index 2b06545..6a833fa 100644 (file)
@@ -12,9 +12,9 @@ PASS window.getComputedStyle(gridWithAutoElement, '').getPropertyValue('-webkit-
 PASS window.getComputedStyle(gridWithAutoElement, '').getPropertyValue('-webkit-grid-template-rows') is "auto last"
 PASS window.getComputedStyle(gridWithMinMax, '').getPropertyValue('-webkit-grid-template-columns') is "first minmax(10%, 15px)"
 PASS window.getComputedStyle(gridWithMinMax, '').getPropertyValue('-webkit-grid-template-rows') is "minmax(20px, 50%) last"
-PASS window.getComputedStyle(gridWithFixedMultiple, '').getPropertyValue('-webkit-grid-template-columns') is "nav first 10px last"
-PASS window.getComputedStyle(gridWithFixedMultiple, '').getPropertyValue('-webkit-grid-template-rows') is "nav first 15px last"
-PASS window.getComputedStyle(gridWithPercentageSameStringMultipleTimes, '').getPropertyValue('-webkit-grid-template-columns') is "nav first 10% nav 15% last"
+PASS window.getComputedStyle(gridWithFixedMultiple, '').getPropertyValue('-webkit-grid-template-columns') is "first nav 10px last"
+PASS window.getComputedStyle(gridWithFixedMultiple, '').getPropertyValue('-webkit-grid-template-rows') is "first nav 15px last"
+PASS window.getComputedStyle(gridWithPercentageSameStringMultipleTimes, '').getPropertyValue('-webkit-grid-template-columns') is "first nav 10% nav 15% last"
 PASS window.getComputedStyle(gridWithPercentageSameStringMultipleTimes, '').getPropertyValue('-webkit-grid-template-rows') is "first nav2 25% nav2 75% last"
 
 Test getting and setting grid-template-columns and grid-template-rows through JS
@@ -54,11 +54,11 @@ PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-template-colum
 PASS element.style.webkitGridTemplateColumns is "first minmax(-webkit-min-content, -webkit-max-content)"
 PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-template-rows') is "minmax(-webkit-max-content, -webkit-min-content) last"
 PASS element.style.webkitGridTemplateRows is "minmax(-webkit-max-content, -webkit-min-content) last"
-PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-template-columns') is "nav first minmax(-webkit-min-content, -webkit-max-content) last"
+PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-template-columns') is "first nav minmax(-webkit-min-content, -webkit-max-content) last"
 PASS element.style.webkitGridTemplateColumns is "first nav minmax(-webkit-min-content, -webkit-max-content) last"
-PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-template-rows') is "nav first minmax(-webkit-max-content, -webkit-min-content) last"
+PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-template-rows') is "first nav minmax(-webkit-max-content, -webkit-min-content) last"
 PASS element.style.webkitGridTemplateRows is "first nav minmax(-webkit-max-content, -webkit-min-content) last"
-PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-template-columns') is "nav first minmax(-webkit-min-content, -webkit-max-content) nav auto last"
+PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-template-columns') is "first nav minmax(-webkit-min-content, -webkit-max-content) nav auto last"
 PASS element.style.webkitGridTemplateColumns is "first nav minmax(-webkit-min-content, -webkit-max-content) nav auto last"
 PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-template-rows') is "first nav2 minmax(-webkit-max-content, -webkit-min-content) nav2 minmax(10px, 15px) last"
 PASS element.style.webkitGridTemplateRows is "first nav2 minmax(-webkit-max-content, -webkit-min-content) nav2 minmax(10px, 15px) last"
index 0ea7e3e..49ca137 100644 (file)
@@ -60,8 +60,8 @@ if (window.testRunner)
     testGridTemplatesValues(document.getElementById("gridWithPercentElement"), "53% last", "27% last");
     testGridTemplatesValues(document.getElementById("gridWithAutoElement"), "first auto", "auto last");
     testGridTemplatesValues(document.getElementById("gridWithMinMax"), "first minmax(10%, 15px)", "minmax(20px, 50%) last");
-    testGridTemplatesValues(document.getElementById("gridWithFixedMultiple"), "nav first 10px last", "nav first 15px last");
-    testGridTemplatesValues(document.getElementById("gridWithPercentageSameStringMultipleTimes"), "nav first 10% nav 15% last", "first nav2 25% nav2 75% last");
+    testGridTemplatesValues(document.getElementById("gridWithFixedMultiple"), "first nav 10px last", "first nav 15px last");
+    testGridTemplatesValues(document.getElementById("gridWithPercentageSameStringMultipleTimes"), "first nav 10% nav 15% last", "first nav2 25% nav2 75% last");
 
     debug("");
     debug("Test getting and setting grid-template-columns and grid-template-rows through JS");
@@ -74,8 +74,8 @@ if (window.testRunner)
     testNonGridTemplatesSetJSValues("'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", "first minmax(220px, -webkit-max-content)", "minmax(-webkit-max-content, 50px) last", "minmax(-webkit-max-content, 50px) last");
     testNonGridTemplatesSetJSValues("'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", "first minmax(220px, -webkit-min-content)", "minmax(-webkit-min-content, 50px) last", "minmax(-webkit-min-content, 50px) last");
     testNonGridTemplatesSetJSValues("'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");
-    testNonGridTemplatesSetJSValues("'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");
-    testNonGridTemplatesSetJSValues("'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");;
+    testNonGridTemplatesSetJSValues("'first' 'nav' minmax(-webkit-min-content, -webkit-max-content) 'last'", "'first' 'nav' 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", "first nav minmax(-webkit-min-content, -webkit-max-content) last", "first nav minmax(-webkit-max-content, -webkit-min-content) last");
+    testNonGridTemplatesSetJSValues("'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'", "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", "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");;
     testNonGridTemplatesSetJSValues("'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("");
index c3a9c52..3ef84df 100644 (file)
@@ -1,3 +1,26 @@
+2014-01-29  Sergio Villar Senin  <svillar@igalia.com>
+
+        [CSS Grid Layout] getComputedStyle() not using author's order when showing named grid lines
+        https://bugs.webkit.org/show_bug.cgi?id=127837
+
+        Reviewed by David Hyatt.
+
+        Added a couple of new Vectors to store the names of the grid lines
+        respecting their order. They will be used to get the right outcome
+        for getComputedStyle().
+
+        * css/CSSComputedStyleDeclaration.cpp:
+        (WebCore::addValuesForNamedGridLinesAtIndex):
+        (WebCore::valueForGridTrackList):
+        * 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==):
+
 2014-03-17  Zsolt Borbely  <borbezs@inf.u-szeged.hu>
 
         Fix the !ENABLE(PROMISES) build
index fc386a1..532e55e 100644 (file)
@@ -990,32 +990,24 @@ static PassRefPtr<CSSValue> specifiedValueForGridTrackSize(const GridTrackSize&
     return 0;
 }
 
-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 void addValuesForNamedGridLinesAtIndex(const OrderedNamedGridLinesMap& orderedNamedGridLines, size_t i, CSSValueList& list)
+{
+    const Vector<String>& namedGridLines = orderedNamedGridLines.get(i);
+    if (namedGridLines.isEmpty())
+        return;
+
+    for (size_t i = 0; i < namedGridLines.size(); ++i)
+        list.append(cssValuePool().createValue(namedGridLines[i], CSSPrimitiveValue::CSS_STRING));
 }
 
 static PassRef<CSSValue> valueForGridTrackList(GridTrackSizingDirection direction, RenderObject* renderer, const RenderStyle* style, RenderView* renderView)
 {
     const Vector<GridTrackSize>& trackSizes = direction == ForColumns ? style->gridColumns() : style->gridRows();
-    const NamedGridLinesMap& namedGridLines = direction == ForColumns ? style->namedGridColumnLines() : style->namedGridRowLines();
+    const OrderedNamedGridLinesMap& orderedNamedGridLines = direction == ForColumns ? style->orderedNamedGridColumnLines() : style->orderedNamedGridRowLines();
 
     // Handle the 'none' case here.
     if (!trackSizes.size()) {
-        ASSERT(namedGridLines.isEmpty());
+        ASSERT(orderedNamedGridLines.isEmpty());
         return cssValuePool().createIdentifierValue(CSSValueNone);
     }
 
@@ -1027,18 +1019,18 @@ static PassRef<CSSValue> valueForGridTrackList(GridTrackSizingDirection directio
         ASSERT(trackPositions.size() - 1 >= trackSizes.size());
 
         for (unsigned i = 0; i < trackSizes.size(); ++i) {
-            addValuesForNamedGridLinesAtIndex(namedGridLines, i, list.get());
+            addValuesForNamedGridLinesAtIndex(orderedNamedGridLines, i, list.get());
             list.get().append(zoomAdjustedPixelValue(trackPositions[i + 1] - trackPositions[i], style));
         }
     } else {
         for (unsigned i = 0; i < trackSizes.size(); ++i) {
-            addValuesForNamedGridLinesAtIndex(namedGridLines, i, list.get());
+            addValuesForNamedGridLinesAtIndex(orderedNamedGridLines, i, list.get());
             list.get().append(specifiedValueForGridTrackSize(trackSizes[i], style, renderView));
         }
     }
 
     // Those are the trailing <ident>* allowed in the syntax.
-    addValuesForNamedGridLinesAtIndex(namedGridLines, trackSizes.size(), list.get());
+    addValuesForNamedGridLinesAtIndex(orderedNamedGridLines, trackSizes.size(), list.get());
     return std::move(list);
 }
 
index f9d1bbc..9bad7b8 100644 (file)
@@ -2023,7 +2023,7 @@ static bool createGridTrackSize(CSSValue* value, GridTrackSize& trackSize, const
     return true;
 }
 
-static bool createGridTrackList(CSSValue* value, Vector<GridTrackSize>& trackSizes, NamedGridLinesMap& namedGridLines, const StyleResolver::State& state)
+static bool createGridTrackList(CSSValue* value, Vector<GridTrackSize>& trackSizes, NamedGridLinesMap& namedGridLines, OrderedNamedGridLinesMap& orderedNamedGridLines, const StyleResolver::State& state)
 {
     // Handle 'none'.
     if (value->isPrimitiveValue()) {
@@ -2040,8 +2040,11 @@ static bool createGridTrackList(CSSValue* value, Vector<GridTrackSize>& trackSiz
         if (currValue->isPrimitiveValue()) {
             CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(currValue);
             if (primitiveValue->isString()) {
-                NamedGridLinesMap::AddResult result = namedGridLines.add(primitiveValue->getStringValue(), Vector<size_t>());
+                String namedGridLine = primitiveValue->getStringValue();
+                NamedGridLinesMap::AddResult result = namedGridLines.add(namedGridLine, Vector<size_t>());
                 result.iterator->value.append(currentNamedGridLine);
+                OrderedNamedGridLinesMap::AddResult orderedResult = orderedNamedGridLines.add(currentNamedGridLine, Vector<String>());
+                orderedResult.iterator->value.append(namedGridLine);
                 continue;
             }
         }
@@ -2770,38 +2773,46 @@ void StyleResolver::applyProperty(CSSPropertyID id, CSSValue* value)
         if (isInherit) {
             m_state.style()->setGridColumns(m_state.parentStyle()->gridColumns());
             m_state.style()->setNamedGridColumnLines(m_state.parentStyle()->namedGridColumnLines());
+            m_state.style()->setOrderedNamedGridColumnLines(m_state.parentStyle()->orderedNamedGridColumnLines());
             return;
         }
         if (isInitial) {
             m_state.style()->setGridColumns(RenderStyle::initialGridColumns());
             m_state.style()->setNamedGridColumnLines(RenderStyle::initialNamedGridColumnLines());
+            m_state.style()->setOrderedNamedGridColumnLines(RenderStyle::initialOrderedNamedGridColumnLines());
             return;
         }
         Vector<GridTrackSize> trackSizes;
         NamedGridLinesMap namedGridLines;
-        if (!createGridTrackList(value, trackSizes, namedGridLines, state))
+        OrderedNamedGridLinesMap orderedNamedGridLines;
+        if (!createGridTrackList(value, trackSizes, namedGridLines, orderedNamedGridLines, state))
             return;
         state.style()->setGridColumns(trackSizes);
         state.style()->setNamedGridColumnLines(namedGridLines);
+        state.style()->setOrderedNamedGridColumnLines(orderedNamedGridLines);
         return;
     }
     case CSSPropertyWebkitGridTemplateRows: {
         if (isInherit) {
             m_state.style()->setGridRows(m_state.parentStyle()->gridRows());
             m_state.style()->setNamedGridRowLines(m_state.parentStyle()->namedGridRowLines());
+            m_state.style()->setOrderedNamedGridRowLines(m_state.parentStyle()->orderedNamedGridRowLines());
             return;
         }
         if (isInitial) {
             m_state.style()->setGridRows(RenderStyle::initialGridRows());
             m_state.style()->setNamedGridRowLines(RenderStyle::initialNamedGridRowLines());
+            m_state.style()->setOrderedNamedGridRowLines(RenderStyle::initialOrderedNamedGridRowLines());
             return;
         }
         Vector<GridTrackSize> trackSizes;
         NamedGridLinesMap namedGridLines;
-        if (!createGridTrackList(value, trackSizes, namedGridLines, state))
+        OrderedNamedGridLinesMap orderedNamedGridLines;
+        if (!createGridTrackList(value, trackSizes, namedGridLines, orderedNamedGridLines, state))
             return;
         state.style()->setGridRows(trackSizes);
         state.style()->setNamedGridRowLines(namedGridLines);
+        state.style()->setOrderedNamedGridRowLines(orderedNamedGridLines);
         return;
     }
 
index 179aaa3..1fc2043 100644 (file)
@@ -776,6 +776,8 @@ public:
     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; }
+    const OrderedNamedGridLinesMap& orderedNamedGridColumnLines() const { return rareNonInheritedData->m_grid->m_orderedNamedGridColumnLines; }
+    const OrderedNamedGridLinesMap& orderedNamedGridRowLines() const { return rareNonInheritedData->m_grid->m_orderedNamedGridRowLines; }
     const NamedGridAreaMap& namedGridArea() const { return rareNonInheritedData->m_grid->m_namedGridArea; }
     size_t namedGridAreaRowCount() const { return rareNonInheritedData->m_grid->m_namedGridAreaRowCount; }
     size_t namedGridAreaColumnCount() const { return rareNonInheritedData->m_grid->m_namedGridAreaColumnCount; }
@@ -1320,6 +1322,8 @@ public:
     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 setOrderedNamedGridColumnLines(const OrderedNamedGridLinesMap& orderedNamedGridColumnLines) { SET_VAR(rareNonInheritedData.access()->m_grid, m_orderedNamedGridColumnLines, orderedNamedGridColumnLines); }
+    void setOrderedNamedGridRowLines(const OrderedNamedGridLinesMap& orderedNamedGridRowLines) { SET_VAR(rareNonInheritedData.access()->m_grid, m_orderedNamedGridRowLines, orderedNamedGridRowLines); }
     void setNamedGridArea(const NamedGridAreaMap& namedGridArea) { SET_VAR(rareNonInheritedData.access()->m_grid, m_namedGridArea, namedGridArea); }
     void setNamedGridAreaRowCount(size_t rowCount) { SET_VAR(rareNonInheritedData.access()->m_grid, m_namedGridAreaRowCount, rowCount); }
     void setNamedGridAreaColumnCount(size_t columnCount) { SET_VAR(rareNonInheritedData.access()->m_grid, m_namedGridAreaColumnCount, columnCount); }
@@ -1786,6 +1790,9 @@ public:
     static NamedGridLinesMap initialNamedGridColumnLines() { return NamedGridLinesMap(); }
     static NamedGridLinesMap initialNamedGridRowLines() { return NamedGridLinesMap(); }
 
+    static OrderedNamedGridLinesMap initialOrderedNamedGridColumnLines() { return OrderedNamedGridLinesMap(); }
+    static OrderedNamedGridLinesMap initialOrderedNamedGridRowLines() { return OrderedNamedGridLinesMap(); }
+
     // 'auto' is the default.
     static GridPosition initialGridItemColumnStart() { return GridPosition(); }
     static GridPosition initialGridItemColumnEnd() { return GridPosition(); }
index d96cfc9..1b15de4 100644 (file)
@@ -37,6 +37,8 @@ StyleGridData::StyleGridData()
     , m_gridRows(RenderStyle::initialGridRows())
     , m_namedGridColumnLines(RenderStyle::initialNamedGridColumnLines())
     , m_namedGridRowLines(RenderStyle::initialNamedGridRowLines())
+    , m_orderedNamedGridColumnLines(RenderStyle::initialOrderedNamedGridColumnLines())
+    , m_orderedNamedGridRowLines(RenderStyle::initialOrderedNamedGridRowLines())
     , m_gridAutoFlow(RenderStyle::initialGridAutoFlow())
     , m_gridAutoRows(RenderStyle::initialGridAutoRows())
     , m_gridAutoColumns(RenderStyle::initialGridAutoColumns())
@@ -52,6 +54,8 @@ inline StyleGridData::StyleGridData(const StyleGridData& o)
     , m_gridRows(o.m_gridRows)
     , m_namedGridColumnLines(o.m_namedGridColumnLines)
     , m_namedGridRowLines(o.m_namedGridRowLines)
+    , m_orderedNamedGridColumnLines(o.m_orderedNamedGridColumnLines)
+    , m_orderedNamedGridRowLines(o.m_orderedNamedGridRowLines)
     , m_gridAutoFlow(o.m_gridAutoFlow)
     , m_gridAutoRows(o.m_gridAutoRows)
     , m_gridAutoColumns(o.m_gridAutoColumns)
index a832234..059e4de 100644 (file)
@@ -39,6 +39,7 @@
 namespace WebCore {
 
 typedef HashMap<String, Vector<size_t>> NamedGridLinesMap;
+typedef HashMap<size_t, Vector<String>, WTF::IntHash<size_t>, WTF::UnsignedWithZeroKeyHashTraits<size_t>> OrderedNamedGridLinesMap;
 
 class StyleGridData : public RefCounted<StyleGridData> {
 public:
@@ -48,7 +49,7 @@ public:
     bool operator==(const StyleGridData& o) const
     {
         // 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 && m_namedGridArea == o.m_namedGridArea && m_namedGridArea == o.m_namedGridArea && m_namedGridAreaRowCount == o.m_namedGridAreaRowCount && m_namedGridAreaColumnCount == o.m_namedGridAreaColumnCount;
+        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 && m_namedGridArea == o.m_namedGridArea && m_namedGridArea == o.m_namedGridArea && m_namedGridAreaRowCount == o.m_namedGridAreaRowCount && m_namedGridAreaColumnCount == o.m_namedGridAreaColumnCount && m_orderedNamedGridRowLines == o.m_orderedNamedGridRowLines && m_orderedNamedGridColumnLines == o.m_orderedNamedGridColumnLines;
     }
 
     bool operator!=(const StyleGridData& o) const
@@ -63,6 +64,9 @@ public:
     NamedGridLinesMap m_namedGridColumnLines;
     NamedGridLinesMap m_namedGridRowLines;
 
+    OrderedNamedGridLinesMap m_orderedNamedGridColumnLines;
+    OrderedNamedGridLinesMap m_orderedNamedGridRowLines;
+
     GridAutoFlow m_gridAutoFlow;
 
     GridTrackSize m_gridAutoRows;