<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[200182] trunk/Source/WebCore</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/200182">200182</a></dd>
<dt>Author</dt> <dd>svillar@igalia.com</dd>
<dt>Date</dt> <dd>2016-04-28 02:27:55 -0700 (Thu, 28 Apr 2016)</dd>
</dl>

<h3>Log Message</h3>
<pre>[css-grid] Store auto-repeat information in style
https://bugs.webkit.org/show_bug.cgi?id=157097

Reviewed by Darin Adler.

This is the second step to implement auto-repeat. This patch provides the necessary
machinery to store the auto-repeat data extracted by the parser in the RenderStyle class. We
are not doing anything with that information yet, it will be used later to compute the
number of auto-repeat tracks in a follow up patch.

No new tests required as there is no change in behavior yet (we're just storing the info we
already get from the parser).

* css/CSSComputedStyleDeclaration.cpp:
(WebCore::valueForGridTrackList): Check also that the auto-repeat list of tracks is empty.
* css/StyleBuilderConverter.h:
(WebCore::createGridLineNamesList): Refactored from createGridTrackList.
(WebCore::StyleBuilderConverter::createGridTrackList): Extract auto-repeat data from the
parser. Also gathered all the out arguments in a single new struct called TracksData.
* css/StyleBuilderCustom.h: Added new macro SET_TRACKS_DATA which properly sets the info
from TracksData struct into style.
(WebCore::StyleBuilderCustom::applyValueWebkitGridTemplateColumns): Store auto-repeat data
in RenderStyle.
(WebCore::StyleBuilderCustom::applyValueWebkitGridTemplateRows): Ditto.
* rendering/style/RenderStyle.h: Add methods and attributes for auto-repeat data.
* rendering/style/RenderStyleConstants.h: New AutoRepeatType enumerated type.
* rendering/style/StyleGridData.cpp:
(WebCore::StyleGridData::StyleGridData): Add auto-repeat data.
* rendering/style/StyleGridData.h:
(WebCore::StyleGridData::operator==): Check also auto-repeat data.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCorecssCSSComputedStyleDeclarationcpp">trunk/Source/WebCore/css/CSSComputedStyleDeclaration.cpp</a></li>
<li><a href="#trunkSourceWebCorecssStyleBuilderConverterh">trunk/Source/WebCore/css/StyleBuilderConverter.h</a></li>
<li><a href="#trunkSourceWebCorecssStyleBuilderCustomh">trunk/Source/WebCore/css/StyleBuilderCustom.h</a></li>
<li><a href="#trunkSourceWebCorerenderingstyleRenderStyleh">trunk/Source/WebCore/rendering/style/RenderStyle.h</a></li>
<li><a href="#trunkSourceWebCorerenderingstyleRenderStyleConstantsh">trunk/Source/WebCore/rendering/style/RenderStyleConstants.h</a></li>
<li><a href="#trunkSourceWebCorerenderingstyleStyleGridDatacpp">trunk/Source/WebCore/rendering/style/StyleGridData.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingstyleStyleGridDatah">trunk/Source/WebCore/rendering/style/StyleGridData.h</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (200181 => 200182)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2016-04-28 08:54:33 UTC (rev 200181)
+++ trunk/Source/WebCore/ChangeLog        2016-04-28 09:27:55 UTC (rev 200182)
</span><span class="lines">@@ -1,3 +1,36 @@
</span><ins>+2016-04-28  Sergio Villar Senin  &lt;svillar@igalia.com&gt;
+
+        [css-grid] Store auto-repeat information in style
+        https://bugs.webkit.org/show_bug.cgi?id=157097
+
+        Reviewed by Darin Adler.
+
+        This is the second step to implement auto-repeat. This patch provides the necessary
+        machinery to store the auto-repeat data extracted by the parser in the RenderStyle class. We
+        are not doing anything with that information yet, it will be used later to compute the
+        number of auto-repeat tracks in a follow up patch.
+
+        No new tests required as there is no change in behavior yet (we're just storing the info we
+        already get from the parser).
+
+        * css/CSSComputedStyleDeclaration.cpp:
+        (WebCore::valueForGridTrackList): Check also that the auto-repeat list of tracks is empty.
+        * css/StyleBuilderConverter.h:
+        (WebCore::createGridLineNamesList): Refactored from createGridTrackList.
+        (WebCore::StyleBuilderConverter::createGridTrackList): Extract auto-repeat data from the
+        parser. Also gathered all the out arguments in a single new struct called TracksData.
+        * css/StyleBuilderCustom.h: Added new macro SET_TRACKS_DATA which properly sets the info
+        from TracksData struct into style.
+        (WebCore::StyleBuilderCustom::applyValueWebkitGridTemplateColumns): Store auto-repeat data
+        in RenderStyle.
+        (WebCore::StyleBuilderCustom::applyValueWebkitGridTemplateRows): Ditto.
+        * rendering/style/RenderStyle.h: Add methods and attributes for auto-repeat data.
+        * rendering/style/RenderStyleConstants.h: New AutoRepeatType enumerated type.
+        * rendering/style/StyleGridData.cpp:
+        (WebCore::StyleGridData::StyleGridData): Add auto-repeat data.
+        * rendering/style/StyleGridData.h:
+        (WebCore::StyleGridData::operator==): Check also auto-repeat data.
+
</ins><span class="cx"> 2016-04-28  Manuel Rego Casasnovas  &lt;rego@igalia.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [css-grid] Fix alignment with content distribution
</span></span></pre></div>
<a id="trunkSourceWebCorecssCSSComputedStyleDeclarationcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/CSSComputedStyleDeclaration.cpp (200181 => 200182)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/CSSComputedStyleDeclaration.cpp        2016-04-28 08:54:33 UTC (rev 200181)
+++ trunk/Source/WebCore/css/CSSComputedStyleDeclaration.cpp        2016-04-28 09:27:55 UTC (rev 200182)
</span><span class="lines">@@ -1049,12 +1049,14 @@
</span><span class="cx"> 
</span><span class="cx"> static Ref&lt;CSSValue&gt; valueForGridTrackList(GridTrackSizingDirection direction, RenderObject* renderer, const RenderStyle&amp; style)
</span><span class="cx"> {
</span><del>-    const Vector&lt;GridTrackSize&gt;&amp; trackSizes = direction == ForColumns ? style.gridColumns() : style.gridRows();
-    const OrderedNamedGridLinesMap&amp; orderedNamedGridLines = direction == ForColumns ? style.orderedNamedGridColumnLines() : style.orderedNamedGridRowLines();
</del><ins>+    bool isRowAxis = direction == ForColumns;
</ins><span class="cx">     bool isRenderGrid = is&lt;RenderGrid&gt;(renderer);
</span><ins>+    auto&amp; trackSizes = isRowAxis ? style.gridColumns() : style.gridRows();
+    auto&amp; autoRepeatTrackSizes = isRowAxis ? style.gridAutoRepeatColumns() : style.gridAutoRepeatRows();
+    auto&amp; orderedNamedGridLines = isRowAxis ? style.orderedNamedGridColumnLines() : style.orderedNamedGridRowLines();
</ins><span class="cx"> 
</span><span class="cx">     // Handle the 'none' case.
</span><del>-    bool trackListIsEmpty = trackSizes.isEmpty();
</del><ins>+    bool trackListIsEmpty = trackSizes.isEmpty() &amp;&amp; autoRepeatTrackSizes.isEmpty();
</ins><span class="cx">     if (isRenderGrid &amp;&amp; trackListIsEmpty) {
</span><span class="cx">         // For grids we should consider every listed track, whether implicitly or explicitly created. If we don't have
</span><span class="cx">         // any explicit track and there are no children then there are no implicit tracks. We cannot simply check the
</span></span></pre></div>
<a id="trunkSourceWebCorecssStyleBuilderConverterh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/StyleBuilderConverter.h (200181 => 200182)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/StyleBuilderConverter.h        2016-04-28 08:54:33 UTC (rev 200181)
+++ trunk/Source/WebCore/css/StyleBuilderConverter.h        2016-04-28 09:27:55 UTC (rev 200182)
</span><span class="lines">@@ -32,6 +32,7 @@
</span><span class="cx"> #include &quot;CSSContentDistributionValue.h&quot;
</span><span class="cx"> #include &quot;CSSFontFeatureValue.h&quot;
</span><span class="cx"> #include &quot;CSSFunctionValue.h&quot;
</span><ins>+#include &quot;CSSGridAutoRepeatValue.h&quot;
</ins><span class="cx"> #include &quot;CSSGridLineNamesValue.h&quot;
</span><span class="cx"> #include &quot;CSSGridTemplateAreasValue.h&quot;
</span><span class="cx"> #include &quot;CSSImageGeneratorValue.h&quot;
</span><span class="lines">@@ -156,7 +157,8 @@
</span><span class="cx"> #if ENABLE(CSS_GRID_LAYOUT)
</span><span class="cx">     static GridLength createGridTrackBreadth(CSSPrimitiveValue&amp;, StyleResolver&amp;);
</span><span class="cx">     static GridTrackSize createGridTrackSize(CSSValue&amp;, StyleResolver&amp;);
</span><del>-    static bool createGridTrackList(CSSValue&amp;, Vector&lt;GridTrackSize&gt;&amp; trackSizes, NamedGridLinesMap&amp;, OrderedNamedGridLinesMap&amp;, StyleResolver&amp;);
</del><ins>+    struct TracksData;
+    static bool createGridTrackList(CSSValue&amp;, TracksData&amp;, StyleResolver&amp;);
</ins><span class="cx">     static bool createGridPosition(CSSValue&amp;, GridPosition&amp;);
</span><span class="cx">     static void createImplicitNamedGridLinesFromGridArea(const NamedGridAreaMap&amp;, NamedGridLinesMap&amp;, GridTrackSizingDirection);
</span><span class="cx"> #endif // ENABLE(CSS_GRID_LAYOUT)
</span><span class="lines">@@ -852,8 +854,36 @@
</span><span class="cx">     return GridTrackSize(minTrackBreadth, maxTrackBreadth);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-inline bool StyleBuilderConverter::createGridTrackList(CSSValue&amp; value, Vector&lt;GridTrackSize&gt;&amp; trackSizes, NamedGridLinesMap&amp; namedGridLines, OrderedNamedGridLinesMap&amp; orderedNamedGridLines, StyleResolver&amp; styleResolver)
</del><ins>+static void createGridLineNamesList(const CSSValue&amp; value, unsigned currentNamedGridLine, NamedGridLinesMap&amp; namedGridLines, OrderedNamedGridLinesMap&amp; orderedNamedGridLines)
</ins><span class="cx"> {
</span><ins>+    ASSERT(value.isGridLineNamesValue());
+
+    for (auto&amp; namedGridLineValue : downcast&lt;CSSGridLineNamesValue&gt;(value)) {
+        String namedGridLine = downcast&lt;CSSPrimitiveValue&gt;(namedGridLineValue.get()).getStringValue();
+        auto result = namedGridLines.add(namedGridLine, Vector&lt;unsigned&gt;());
+        result.iterator-&gt;value.append(currentNamedGridLine);
+        auto orderedResult = orderedNamedGridLines.add(currentNamedGridLine, Vector&lt;String&gt;());
+        orderedResult.iterator-&gt;value.append(namedGridLine);
+    }
+}
+
+struct StyleBuilderConverter::TracksData {
+    WTF_MAKE_NONCOPYABLE(TracksData); WTF_MAKE_FAST_ALLOCATED;
+public:
+    TracksData() = default;
+
+    Vector&lt;GridTrackSize&gt; m_trackSizes;
+    NamedGridLinesMap m_namedGridLines;
+    OrderedNamedGridLinesMap m_orderedNamedGridLines;
+    Vector&lt;GridTrackSize&gt; m_autoRepeatTrackSizes;
+    NamedGridLinesMap m_autoRepeatNamedGridLines;
+    OrderedNamedGridLinesMap m_autoRepeatOrderedNamedGridLines;
+    unsigned m_autoRepeatInsertionPoint { RenderStyle::initialGridAutoRepeatInsertionPoint() };
+    AutoRepeatType m_autoRepeatType { RenderStyle::initialGridAutoRepeatType() };
+};
+
+inline bool StyleBuilderConverter::createGridTrackList(CSSValue&amp; value, TracksData&amp; tracksData, StyleResolver&amp; styleResolver)
+{
</ins><span class="cx">     // Handle 'none'.
</span><span class="cx">     if (is&lt;CSSPrimitiveValue&gt;(value))
</span><span class="cx">         return downcast&lt;CSSPrimitiveValue&gt;(value).getValueID() == CSSValueNone;
</span><span class="lines">@@ -864,23 +894,35 @@
</span><span class="cx">     unsigned currentNamedGridLine = 0;
</span><span class="cx">     for (auto&amp; currentValue : downcast&lt;CSSValueList&gt;(value)) {
</span><span class="cx">         if (is&lt;CSSGridLineNamesValue&gt;(currentValue.get())) {
</span><del>-            for (auto&amp; currentGridLineName : downcast&lt;CSSGridLineNamesValue&gt;(currentValue.get())) {
-                String namedGridLine = downcast&lt;CSSPrimitiveValue&gt;(currentGridLineName.get()).getStringValue();
-                NamedGridLinesMap::AddResult result = namedGridLines.add(namedGridLine, Vector&lt;unsigned&gt;());
-                result.iterator-&gt;value.append(currentNamedGridLine);
-                OrderedNamedGridLinesMap::AddResult orderedResult = orderedNamedGridLines.add(currentNamedGridLine, Vector&lt;String&gt;());
-                orderedResult.iterator-&gt;value.append(namedGridLine);
</del><ins>+            createGridLineNamesList(currentValue.get(), currentNamedGridLine, tracksData.m_namedGridLines, tracksData.m_orderedNamedGridLines);
+            continue;
+        }
+
+        if (is&lt;CSSGridAutoRepeatValue&gt;(currentValue)) {
+            ASSERT(tracksData.m_autoRepeatTrackSizes.isEmpty());
+            unsigned autoRepeatIndex = 0;
+            CSSValueID autoRepeatID = downcast&lt;CSSGridAutoRepeatValue&gt;(currentValue.get()).autoRepeatID();
+            ASSERT(autoRepeatID == CSSValueAutoFill || autoRepeatID == CSSValueAutoFit);
+            tracksData.m_autoRepeatType = autoRepeatID == CSSValueAutoFill ? AutoFill : AutoFit;
+            for (auto&amp; autoRepeatValue : downcast&lt;CSSValueList&gt;(currentValue.get())) {
+                if (is&lt;CSSGridLineNamesValue&gt;(autoRepeatValue.get())) {
+                    createGridLineNamesList(autoRepeatValue.get(), autoRepeatIndex, tracksData.m_autoRepeatNamedGridLines, tracksData.m_autoRepeatOrderedNamedGridLines);
+                    continue;
+                }
+                ++autoRepeatIndex;
+                tracksData.m_autoRepeatTrackSizes.append(createGridTrackSize(autoRepeatValue.get(), styleResolver));
</ins><span class="cx">             }
</span><ins>+            tracksData.m_autoRepeatInsertionPoint = currentNamedGridLine++;
</ins><span class="cx">             continue;
</span><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         ++currentNamedGridLine;
</span><del>-        trackSizes.append(createGridTrackSize(currentValue, styleResolver));
</del><ins>+        tracksData.m_trackSizes.append(createGridTrackSize(currentValue, styleResolver));
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     // The parser should have rejected any &lt;track-list&gt; without any &lt;track-size&gt; as
</span><span class="cx">     // this is not conformant to the syntax.
</span><del>-    ASSERT(!trackSizes.isEmpty());
</del><ins>+    ASSERT(!tracksData.m_trackSizes.isEmpty() || !tracksData.m_autoRepeatTrackSizes.isEmpty());
</ins><span class="cx">     return true;
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorecssStyleBuilderCustomh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/css/StyleBuilderCustom.h (200181 => 200182)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/css/StyleBuilderCustom.h        2016-04-28 08:54:33 UTC (rev 200181)
+++ trunk/Source/WebCore/css/StyleBuilderCustom.h        2016-04-28 09:27:55 UTC (rev 200182)
</span><span class="lines">@@ -1649,20 +1649,26 @@
</span><span class="cx">     styleResolver.style()-&gt;setOrderedNamedGridColumnLines(styleResolver.parentStyle()-&gt;orderedNamedGridColumnLines());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+#define SET_TRACKS_DATA(tracksData, style, TrackType) \
+    style-&gt;setGrid##TrackType##s(tracksData.m_trackSizes); \
+    style-&gt;setNamedGrid##TrackType##Lines(tracksData.m_namedGridLines); \
+    style-&gt;setOrderedNamedGrid##TrackType##Lines(tracksData.m_orderedNamedGridLines); \
+    style-&gt;setGridAutoRepeat##TrackType##s(tracksData.m_autoRepeatTrackSizes); \
+    style-&gt;setGridAutoRepeat##TrackType##sInsertionPoint(tracksData.m_autoRepeatInsertionPoint); \
+    style-&gt;setAutoRepeatNamedGrid##TrackType##Lines(tracksData.m_autoRepeatNamedGridLines); \
+    style-&gt;setAutoRepeatOrderedNamedGrid##TrackType##Lines(tracksData.m_autoRepeatOrderedNamedGridLines); \
+    style-&gt;setGridAutoRepeat##TrackType##sType(tracksData.m_autoRepeatType);
+
</ins><span class="cx"> inline void StyleBuilderCustom::applyValueWebkitGridTemplateColumns(StyleResolver&amp; styleResolver, CSSValue&amp; value)
</span><span class="cx"> {
</span><del>-    Vector&lt;GridTrackSize&gt; trackSizes;
-    NamedGridLinesMap namedGridLines;
-    OrderedNamedGridLinesMap orderedNamedGridLines;
-    if (!StyleBuilderConverter::createGridTrackList(value, trackSizes, namedGridLines, orderedNamedGridLines, styleResolver))
</del><ins>+    StyleBuilderConverter::TracksData tracksData;
+    if (!StyleBuilderConverter::createGridTrackList(value, tracksData, styleResolver))
</ins><span class="cx">         return;
</span><span class="cx">     const NamedGridAreaMap&amp; namedGridAreas = styleResolver.style()-&gt;namedGridArea();
</span><span class="cx">     if (!namedGridAreas.isEmpty())
</span><del>-        StyleBuilderConverter::createImplicitNamedGridLinesFromGridArea(namedGridAreas, namedGridLines, ForColumns);
</del><ins>+        StyleBuilderConverter::createImplicitNamedGridLinesFromGridArea(namedGridAreas, tracksData.m_namedGridLines, ForColumns);
</ins><span class="cx"> 
</span><del>-    styleResolver.style()-&gt;setGridColumns(trackSizes);
-    styleResolver.style()-&gt;setNamedGridColumnLines(namedGridLines);
-    styleResolver.style()-&gt;setOrderedNamedGridColumnLines(orderedNamedGridLines);
</del><ins>+    SET_TRACKS_DATA(tracksData, styleResolver.style(), Column);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> inline void StyleBuilderCustom::applyInitialWebkitGridTemplateRows(StyleResolver&amp; styleResolver)
</span><span class="lines">@@ -1681,18 +1687,14 @@
</span><span class="cx"> 
</span><span class="cx"> inline void StyleBuilderCustom::applyValueWebkitGridTemplateRows(StyleResolver&amp; styleResolver, CSSValue&amp; value)
</span><span class="cx"> {
</span><del>-    Vector&lt;GridTrackSize&gt; trackSizes;
-    NamedGridLinesMap namedGridLines;
-    OrderedNamedGridLinesMap orderedNamedGridLines;
-    if (!StyleBuilderConverter::createGridTrackList(value, trackSizes, namedGridLines, orderedNamedGridLines, styleResolver))
</del><ins>+    StyleBuilderConverter::TracksData tracksData;
+    if (!StyleBuilderConverter::createGridTrackList(value, tracksData, styleResolver))
</ins><span class="cx">         return;
</span><span class="cx">     const NamedGridAreaMap&amp; namedGridAreas = styleResolver.style()-&gt;namedGridArea();
</span><span class="cx">     if (!namedGridAreas.isEmpty())
</span><del>-        StyleBuilderConverter::createImplicitNamedGridLinesFromGridArea(namedGridAreas, namedGridLines, ForRows);
</del><ins>+        StyleBuilderConverter::createImplicitNamedGridLinesFromGridArea(namedGridAreas, tracksData.m_namedGridLines, ForRows);
</ins><span class="cx"> 
</span><del>-    styleResolver.style()-&gt;setGridRows(trackSizes);
-    styleResolver.style()-&gt;setNamedGridRowLines(namedGridLines);
-    styleResolver.style()-&gt;setOrderedNamedGridRowLines(orderedNamedGridLines);
</del><ins>+    SET_TRACKS_DATA(tracksData, styleResolver.style(), Row);
</ins><span class="cx"> }
</span><span class="cx"> #endif // ENABLE(CSS_GRID_LAYOUT)
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingstyleRenderStyleh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/style/RenderStyle.h (200181 => 200182)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/style/RenderStyle.h        2016-04-28 08:54:33 UTC (rev 200181)
+++ trunk/Source/WebCore/rendering/style/RenderStyle.h        2016-04-28 09:27:55 UTC (rev 200182)
</span><span class="lines">@@ -958,10 +958,20 @@
</span><span class="cx"> #if ENABLE(CSS_GRID_LAYOUT)
</span><span class="cx">     const Vector&lt;GridTrackSize&gt;&amp; gridColumns() const { return rareNonInheritedData-&gt;m_grid-&gt;m_gridColumns; }
</span><span class="cx">     const Vector&lt;GridTrackSize&gt;&amp; gridRows() const { return rareNonInheritedData-&gt;m_grid-&gt;m_gridRows; }
</span><ins>+    const Vector&lt;GridTrackSize&gt;&amp; gridAutoRepeatColumns() const { return rareNonInheritedData-&gt;m_grid-&gt;m_gridAutoRepeatColumns; }
+    const Vector&lt;GridTrackSize&gt;&amp; gridAutoRepeatRows() const { return rareNonInheritedData-&gt;m_grid-&gt;m_gridAutoRepeatRows; }
+    unsigned gridAutoRepeatColumnsInsertionPoint() const { return rareNonInheritedData-&gt;m_grid-&gt;m_autoRepeatColumnsInsertionPoint; }
+    unsigned gridAutoRepeatRowsInsertionPoint() const { return rareNonInheritedData-&gt;m_grid-&gt;m_autoRepeatRowsInsertionPoint; }
+    AutoRepeatType gridAutoRepeatColumnsType() const  { return rareNonInheritedData-&gt;m_grid-&gt;m_autoRepeatColumnsType; }
+    AutoRepeatType gridAutoRepeatRowsType() const  { return rareNonInheritedData-&gt;m_grid-&gt;m_autoRepeatRowsType; }
</ins><span class="cx">     const NamedGridLinesMap&amp; namedGridColumnLines() const { return rareNonInheritedData-&gt;m_grid-&gt;m_namedGridColumnLines; }
</span><span class="cx">     const NamedGridLinesMap&amp; namedGridRowLines() const { return rareNonInheritedData-&gt;m_grid-&gt;m_namedGridRowLines; }
</span><span class="cx">     const OrderedNamedGridLinesMap&amp; orderedNamedGridColumnLines() const { return rareNonInheritedData-&gt;m_grid-&gt;m_orderedNamedGridColumnLines; }
</span><span class="cx">     const OrderedNamedGridLinesMap&amp; orderedNamedGridRowLines() const { return rareNonInheritedData-&gt;m_grid-&gt;m_orderedNamedGridRowLines; }
</span><ins>+    const NamedGridLinesMap&amp; autoRepeatNamedGridColumnLines() const { return rareNonInheritedData-&gt;m_grid-&gt;m_autoRepeatNamedGridColumnLines; }
+    const NamedGridLinesMap&amp; autoRepeatNamedGridRowLines() const { return rareNonInheritedData-&gt;m_grid-&gt;m_autoRepeatNamedGridRowLines; }
+    const OrderedNamedGridLinesMap&amp; autoRepeatOrderedNamedGridColumnLines() const { return rareNonInheritedData-&gt;m_grid-&gt;m_autoRepeatOrderedNamedGridColumnLines; }
+    const OrderedNamedGridLinesMap&amp; autoRepeatOrderedNamedGridRowLines() const { return rareNonInheritedData-&gt;m_grid-&gt;m_autoRepeatOrderedNamedGridRowLines; }
</ins><span class="cx">     const NamedGridAreaMap&amp; namedGridArea() const { return rareNonInheritedData-&gt;m_grid-&gt;m_namedGridArea; }
</span><span class="cx">     size_t namedGridAreaRowCount() const { return rareNonInheritedData-&gt;m_grid-&gt;m_namedGridAreaRowCount; }
</span><span class="cx">     size_t namedGridAreaColumnCount() const { return rareNonInheritedData-&gt;m_grid-&gt;m_namedGridAreaColumnCount; }
</span><span class="lines">@@ -1555,10 +1565,20 @@
</span><span class="cx">     void setGridAutoRows(const GridTrackSize&amp; length) { SET_NESTED_VAR(rareNonInheritedData, m_grid, m_gridAutoRows, length); }
</span><span class="cx">     void setGridColumns(const Vector&lt;GridTrackSize&gt;&amp; lengths) { SET_NESTED_VAR(rareNonInheritedData, m_grid, m_gridColumns, lengths); }
</span><span class="cx">     void setGridRows(const Vector&lt;GridTrackSize&gt;&amp; lengths) { SET_NESTED_VAR(rareNonInheritedData, m_grid, m_gridRows, lengths); }
</span><ins>+    void setGridAutoRepeatColumns(const Vector&lt;GridTrackSize&gt;&amp; lengths) { SET_NESTED_VAR(rareNonInheritedData, m_grid, m_gridAutoRepeatColumns, lengths); }
+    void setGridAutoRepeatRows(const Vector&lt;GridTrackSize&gt;&amp; lengths) { SET_NESTED_VAR(rareNonInheritedData, m_grid, m_gridAutoRepeatRows, lengths); }
+    void setGridAutoRepeatColumnsInsertionPoint(const unsigned insertionPoint) { SET_NESTED_VAR(rareNonInheritedData, m_grid, m_autoRepeatColumnsInsertionPoint, insertionPoint); }
+    void setGridAutoRepeatRowsInsertionPoint(const unsigned insertionPoint) { SET_NESTED_VAR(rareNonInheritedData, m_grid, m_autoRepeatRowsInsertionPoint, insertionPoint); }
+    void setGridAutoRepeatColumnsType(const AutoRepeatType autoRepeatType) { SET_NESTED_VAR(rareNonInheritedData, m_grid, m_autoRepeatColumnsType, autoRepeatType); }
+    void setGridAutoRepeatRowsType(const AutoRepeatType autoRepeatType) { SET_NESTED_VAR(rareNonInheritedData, m_grid, m_autoRepeatRowsType, autoRepeatType); }
</ins><span class="cx">     void setNamedGridColumnLines(const NamedGridLinesMap&amp; namedGridColumnLines) { SET_NESTED_VAR(rareNonInheritedData, m_grid, m_namedGridColumnLines, namedGridColumnLines); }
</span><span class="cx">     void setNamedGridRowLines(const NamedGridLinesMap&amp; namedGridRowLines) { SET_NESTED_VAR(rareNonInheritedData, m_grid, m_namedGridRowLines, namedGridRowLines); }
</span><span class="cx">     void setOrderedNamedGridColumnLines(const OrderedNamedGridLinesMap&amp; orderedNamedGridColumnLines) { SET_NESTED_VAR(rareNonInheritedData, m_grid, m_orderedNamedGridColumnLines, orderedNamedGridColumnLines); }
</span><span class="cx">     void setOrderedNamedGridRowLines(const OrderedNamedGridLinesMap&amp; orderedNamedGridRowLines) { SET_NESTED_VAR(rareNonInheritedData, m_grid, m_orderedNamedGridRowLines, orderedNamedGridRowLines); }
</span><ins>+    void setAutoRepeatNamedGridColumnLines(const NamedGridLinesMap&amp; namedGridColumnLines) { SET_NESTED_VAR(rareNonInheritedData, m_grid, m_autoRepeatNamedGridColumnLines, namedGridColumnLines); }
+    void setAutoRepeatNamedGridRowLines(const NamedGridLinesMap&amp; namedGridRowLines) { SET_NESTED_VAR(rareNonInheritedData, m_grid, m_autoRepeatNamedGridRowLines, namedGridRowLines); }
+    void setAutoRepeatOrderedNamedGridColumnLines(const OrderedNamedGridLinesMap&amp; orderedNamedGridColumnLines) { SET_NESTED_VAR(rareNonInheritedData, m_grid, m_autoRepeatOrderedNamedGridColumnLines, orderedNamedGridColumnLines); }
+    void setAutoRepeatOrderedNamedGridRowLines(const OrderedNamedGridLinesMap&amp; orderedNamedGridRowLines) { SET_NESTED_VAR(rareNonInheritedData, m_grid, m_autoRepeatOrderedNamedGridRowLines, orderedNamedGridRowLines); }
</ins><span class="cx">     void setNamedGridArea(const NamedGridAreaMap&amp; namedGridArea) { SET_NESTED_VAR(rareNonInheritedData, m_grid, m_namedGridArea, namedGridArea); }
</span><span class="cx">     void setNamedGridAreaRowCount(size_t rowCount) { SET_NESTED_VAR(rareNonInheritedData, m_grid, m_namedGridAreaRowCount, rowCount); }
</span><span class="cx">     void setNamedGridAreaColumnCount(size_t columnCount) { SET_NESTED_VAR(rareNonInheritedData, m_grid, m_namedGridAreaColumnCount, columnCount); }
</span><span class="lines">@@ -2068,6 +2088,10 @@
</span><span class="cx">     static Vector&lt;GridTrackSize&gt; initialGridColumns() { return Vector&lt;GridTrackSize&gt;(); }
</span><span class="cx">     static Vector&lt;GridTrackSize&gt; initialGridRows() { return Vector&lt;GridTrackSize&gt;(); }
</span><span class="cx"> 
</span><ins>+    static Vector&lt;GridTrackSize&gt; initialGridAutoRepeatTracks() { return Vector&lt;GridTrackSize&gt;(); }
+    static unsigned initialGridAutoRepeatInsertionPoint() { return 0; }
+    static AutoRepeatType initialGridAutoRepeatType() { return NoAutoRepeat; }
+
</ins><span class="cx">     static GridAutoFlow initialGridAutoFlow() { return AutoFlowRow; }
</span><span class="cx"> 
</span><span class="cx">     static GridTrackSize initialGridAutoColumns() { return GridTrackSize(Length(Auto)); }
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingstyleRenderStyleConstantsh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/style/RenderStyleConstants.h (200181 => 200182)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/style/RenderStyleConstants.h        2016-04-28 08:54:33 UTC (rev 200181)
+++ trunk/Source/WebCore/rendering/style/RenderStyleConstants.h        2016-04-28 09:27:55 UTC (rev 200182)
</span><span class="lines">@@ -653,6 +653,12 @@
</span><span class="cx">     AutoFlowRowDense = InternalAutoFlowAlgorithmDense | InternalAutoFlowDirectionRow,
</span><span class="cx">     AutoFlowColumnDense = InternalAutoFlowAlgorithmDense | InternalAutoFlowDirectionColumn
</span><span class="cx"> };
</span><ins>+
+enum AutoRepeatType {
+    NoAutoRepeat,
+    AutoFill,
+    AutoFit
+};
</ins><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> // Reasonable maximum to prevent insane font sizes from causing crashes on some platforms (such as Windows).
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingstyleStyleGridDatacpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/style/StyleGridData.cpp (200181 => 200182)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/style/StyleGridData.cpp        2016-04-28 08:54:33 UTC (rev 200181)
+++ trunk/Source/WebCore/rendering/style/StyleGridData.cpp        2016-04-28 09:27:55 UTC (rev 200182)
</span><span class="lines">@@ -39,6 +39,10 @@
</span><span class="cx">     , m_namedGridRowLines(RenderStyle::initialNamedGridRowLines())
</span><span class="cx">     , m_orderedNamedGridColumnLines(RenderStyle::initialOrderedNamedGridColumnLines())
</span><span class="cx">     , m_orderedNamedGridRowLines(RenderStyle::initialOrderedNamedGridRowLines())
</span><ins>+    , m_autoRepeatNamedGridColumnLines(RenderStyle::initialNamedGridColumnLines())
+    , m_autoRepeatNamedGridRowLines(RenderStyle::initialNamedGridRowLines())
+    , m_autoRepeatOrderedNamedGridColumnLines(RenderStyle::initialOrderedNamedGridColumnLines())
+    , m_autoRepeatOrderedNamedGridRowLines(RenderStyle::initialOrderedNamedGridRowLines())
</ins><span class="cx">     , m_gridAutoFlow(RenderStyle::initialGridAutoFlow())
</span><span class="cx">     , m_gridAutoRows(RenderStyle::initialGridAutoRows())
</span><span class="cx">     , m_gridAutoColumns(RenderStyle::initialGridAutoColumns())
</span><span class="lines">@@ -47,6 +51,12 @@
</span><span class="cx">     , m_namedGridAreaColumnCount(RenderStyle::initialNamedGridAreaCount())
</span><span class="cx">     , m_gridColumnGap(RenderStyle::initialGridColumnGap())
</span><span class="cx">     , m_gridRowGap(RenderStyle::initialGridRowGap())
</span><ins>+    , m_gridAutoRepeatColumns(RenderStyle::initialGridAutoRepeatTracks())
+    , m_gridAutoRepeatRows(RenderStyle::initialGridAutoRepeatTracks())
+    , m_autoRepeatColumnsInsertionPoint(RenderStyle::initialGridAutoRepeatInsertionPoint())
+    , m_autoRepeatRowsInsertionPoint(RenderStyle::initialGridAutoRepeatInsertionPoint())
+    , m_autoRepeatColumnsType(RenderStyle::initialGridAutoRepeatType())
+    , m_autoRepeatRowsType(RenderStyle::initialGridAutoRepeatType())
</ins><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -58,6 +68,10 @@
</span><span class="cx">     , m_namedGridRowLines(o.m_namedGridRowLines)
</span><span class="cx">     , m_orderedNamedGridColumnLines(o.m_orderedNamedGridColumnLines)
</span><span class="cx">     , m_orderedNamedGridRowLines(o.m_orderedNamedGridRowLines)
</span><ins>+    , m_autoRepeatNamedGridColumnLines(o.m_autoRepeatNamedGridColumnLines)
+    , m_autoRepeatNamedGridRowLines(o.m_autoRepeatNamedGridRowLines)
+    , m_autoRepeatOrderedNamedGridColumnLines(o.m_autoRepeatOrderedNamedGridColumnLines)
+    , m_autoRepeatOrderedNamedGridRowLines(o.m_autoRepeatOrderedNamedGridRowLines)
</ins><span class="cx">     , m_gridAutoFlow(o.m_gridAutoFlow)
</span><span class="cx">     , m_gridAutoRows(o.m_gridAutoRows)
</span><span class="cx">     , m_gridAutoColumns(o.m_gridAutoColumns)
</span><span class="lines">@@ -66,6 +80,12 @@
</span><span class="cx">     , m_namedGridAreaColumnCount(o.m_namedGridAreaColumnCount)
</span><span class="cx">     , m_gridColumnGap(o.m_gridColumnGap)
</span><span class="cx">     , m_gridRowGap(o.m_gridRowGap)
</span><ins>+    , m_gridAutoRepeatColumns(o.m_gridAutoRepeatColumns)
+    , m_gridAutoRepeatRows(o.m_gridAutoRepeatRows)
+    , m_autoRepeatColumnsInsertionPoint(o.m_autoRepeatColumnsInsertionPoint)
+    , m_autoRepeatRowsInsertionPoint(o.m_autoRepeatRowsInsertionPoint)
+    , m_autoRepeatColumnsType(o.m_autoRepeatColumnsType)
+    , m_autoRepeatRowsType(o.m_autoRepeatRowsType)
</ins><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingstyleStyleGridDatah"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/style/StyleGridData.h (200181 => 200182)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/style/StyleGridData.h        2016-04-28 08:54:33 UTC (rev 200181)
+++ trunk/Source/WebCore/rendering/style/StyleGridData.h        2016-04-28 09:27:55 UTC (rev 200182)
</span><span class="lines">@@ -52,10 +52,15 @@
</span><span class="cx">         return m_gridColumns == o.m_gridColumns &amp;&amp; m_gridRows == o.m_gridRows
</span><span class="cx">             &amp;&amp; m_gridAutoFlow == o.m_gridAutoFlow &amp;&amp; m_gridAutoRows == o.m_gridAutoRows &amp;&amp; m_gridAutoColumns == o.m_gridAutoColumns
</span><span class="cx">             &amp;&amp; m_namedGridColumnLines == o.m_namedGridColumnLines &amp;&amp; m_namedGridRowLines == o.m_namedGridRowLines
</span><ins>+            &amp;&amp; m_autoRepeatNamedGridColumnLines == o.m_autoRepeatNamedGridColumnLines &amp;&amp; m_autoRepeatNamedGridRowLines == o.m_autoRepeatNamedGridRowLines
+            &amp;&amp; m_autoRepeatOrderedNamedGridColumnLines == o.m_autoRepeatOrderedNamedGridColumnLines &amp;&amp; m_autoRepeatOrderedNamedGridRowLines == o.m_autoRepeatOrderedNamedGridRowLines
</ins><span class="cx">             &amp;&amp; m_namedGridArea == o.m_namedGridArea &amp;&amp; m_namedGridArea == o.m_namedGridArea
</span><span class="cx">             &amp;&amp; m_namedGridAreaRowCount == o.m_namedGridAreaRowCount &amp;&amp; m_namedGridAreaColumnCount == o.m_namedGridAreaColumnCount
</span><span class="cx">             &amp;&amp; m_orderedNamedGridRowLines == o.m_orderedNamedGridRowLines &amp;&amp; m_orderedNamedGridColumnLines == o.m_orderedNamedGridColumnLines
</span><del>-            &amp;&amp; m_gridColumnGap == o.m_gridColumnGap &amp;&amp; m_gridRowGap == o.m_gridRowGap;
</del><ins>+            &amp;&amp; m_gridColumnGap == o.m_gridColumnGap &amp;&amp; m_gridRowGap == o.m_gridRowGap
+            &amp;&amp; m_gridAutoRepeatColumns == o.m_gridAutoRepeatColumns &amp;&amp; m_gridAutoRepeatRows == o.m_gridAutoRepeatRows
+            &amp;&amp; m_autoRepeatColumnsInsertionPoint == o.m_autoRepeatColumnsInsertionPoint &amp;&amp; m_autoRepeatRowsInsertionPoint == o.m_autoRepeatRowsInsertionPoint
+            &amp;&amp; m_autoRepeatColumnsType == o.m_autoRepeatColumnsType &amp;&amp; m_autoRepeatRowsType == o.m_autoRepeatRowsType;
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     bool operator!=(const StyleGridData&amp; o) const
</span><span class="lines">@@ -73,6 +78,11 @@
</span><span class="cx">     OrderedNamedGridLinesMap m_orderedNamedGridColumnLines;
</span><span class="cx">     OrderedNamedGridLinesMap m_orderedNamedGridRowLines;
</span><span class="cx"> 
</span><ins>+    NamedGridLinesMap m_autoRepeatNamedGridColumnLines;
+    NamedGridLinesMap m_autoRepeatNamedGridRowLines;
+    OrderedNamedGridLinesMap m_autoRepeatOrderedNamedGridColumnLines;
+    OrderedNamedGridLinesMap m_autoRepeatOrderedNamedGridRowLines;
+
</ins><span class="cx">     unsigned m_gridAutoFlow : GridAutoFlowBits;
</span><span class="cx"> 
</span><span class="cx">     GridTrackSize m_gridAutoRows;
</span><span class="lines">@@ -87,6 +97,15 @@
</span><span class="cx">     Length m_gridColumnGap;
</span><span class="cx">     Length m_gridRowGap;
</span><span class="cx"> 
</span><ins>+    Vector&lt;GridTrackSize&gt; m_gridAutoRepeatColumns;
+    Vector&lt;GridTrackSize&gt; m_gridAutoRepeatRows;
+
+    unsigned m_autoRepeatColumnsInsertionPoint;
+    unsigned m_autoRepeatRowsInsertionPoint;
+
+    AutoRepeatType m_autoRepeatColumnsType;
+    AutoRepeatType m_autoRepeatRowsType;
+
</ins><span class="cx"> private:
</span><span class="cx">     StyleGridData();
</span><span class="cx">     StyleGridData(const StyleGridData&amp;);
</span></span></pre>
</div>
</div>

</body>
</html>