<!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>[211283] 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/211283">211283</a></dd>
<dt>Author</dt> <dd>svillar@igalia.com</dd>
<dt>Date</dt> <dd>2017-01-27 08:28:24 -0800 (Fri, 27 Jan 2017)</dd>
</dl>

<h3>Log Message</h3>
<pre>[css-grid] Move Grid class out of RenderGrid
https://bugs.webkit.org/show_bug.cgi?id=167418

Reviewed by Antti Koivisto.

The RenderGrid should be able to use different implementations of
the Grid class. The latter is big enough to be in its own file. That
would help on the effort of moving the grid track sizing algorithm
out of RenderGrid too.

No new tests required as we're just moving code.

* CMakeLists.txt:
* rendering/Grid.cpp: Added.
(WebCore::Grid::Grid):
(WebCore::Grid::numTracks):
(WebCore::Grid::ensureGridSize):
(WebCore::Grid::insert):
(WebCore::Grid::setSmallestTracksStart):
(WebCore::Grid::smallestTrackStart):
(WebCore::Grid::gridItemArea):
(WebCore::Grid::setGridItemArea):
(WebCore::Grid::setAutoRepeatTracks):
(WebCore::Grid::autoRepeatTracks):
(WebCore::Grid::setAutoRepeatEmptyColumns):
(WebCore::Grid::setAutoRepeatEmptyRows):
(WebCore::Grid::hasAutoRepeatEmptyTracks):
(WebCore::Grid::isEmptyAutoRepeatTrack):
(WebCore::Grid::autoRepeatEmptyTracks):
(WebCore::Grid::gridItemSpan):
(WebCore::Grid::setNeedsItemsPlacement):
(WebCore::GridIterator::GridIterator):
(WebCore::GridIterator::nextGridItem):
(WebCore::GridIterator::isEmptyAreaEnough):
(WebCore::GridIterator::nextEmptyGridArea):
* rendering/Grid.h: Added.
* rendering/RenderGrid.cpp:
(WebCore::RenderGrid::computeEmptyTracksForAutoRepeat):
(WebCore::RenderGrid::Grid::numTracks): Deleted.
(WebCore::RenderGrid::Grid::ensureGridSize): Deleted.
(WebCore::RenderGrid::Grid::insert): Deleted.
(WebCore::RenderGrid::Grid::setSmallestTracksStart): Deleted.
(WebCore::RenderGrid::Grid::smallestTrackStart): Deleted.
(WebCore::RenderGrid::Grid::gridItemArea): Deleted.
(WebCore::RenderGrid::Grid::setGridItemArea): Deleted.
(WebCore::RenderGrid::Grid::setAutoRepeatTracks): Deleted.
(WebCore::RenderGrid::Grid::autoRepeatTracks): Deleted.
(WebCore::RenderGrid::Grid::setAutoRepeatEmptyColumns): Deleted.
(WebCore::RenderGrid::Grid::setAutoRepeatEmptyRows): Deleted.
(WebCore::RenderGrid::Grid::hasAutoRepeatEmptyTracks): Deleted.
(WebCore::RenderGrid::Grid::isEmptyAutoRepeatTrack): Deleted.
(WebCore::RenderGrid::Grid::autoRepeatEmptyTracks): Deleted.
(WebCore::RenderGrid::Grid::gridItemSpan): Deleted.
(WebCore::RenderGrid::Grid::setNeedsItemsPlacement): Deleted.
(WebCore::RenderGrid::GridIterator::GridIterator): Deleted.
(WebCore::RenderGrid::GridIterator::nextGridItem): Deleted.
(WebCore::RenderGrid::GridIterator::isEmptyAreaEnough): Deleted.
(WebCore::RenderGrid::GridIterator::nextEmptyGridArea): Deleted.
* rendering/RenderGrid.h:</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoreCMakeListstxt">trunk/Source/WebCore/CMakeLists.txt</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreWebCorexcodeprojprojectpbxproj">trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderGridcpp">trunk/Source/WebCore/rendering/RenderGrid.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderGridh">trunk/Source/WebCore/rendering/RenderGrid.h</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkSourceWebCorerenderingGridcpp">trunk/Source/WebCore/rendering/Grid.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingGridh">trunk/Source/WebCore/rendering/Grid.h</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebCoreCMakeListstxt"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/CMakeLists.txt (211282 => 211283)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/CMakeLists.txt        2017-01-27 15:58:05 UTC (rev 211282)
+++ trunk/Source/WebCore/CMakeLists.txt        2017-01-27 16:28:24 UTC (rev 211283)
</span><span class="lines">@@ -2362,6 +2362,7 @@
</span><span class="cx">     rendering/FixedTableLayout.cpp
</span><span class="cx">     rendering/FloatingObjects.cpp
</span><span class="cx">     rendering/FlowThreadController.cpp
</span><ins>+    rendering/Grid.cpp
</ins><span class="cx">     rendering/HitTestLocation.cpp
</span><span class="cx">     rendering/HitTestResult.cpp
</span><span class="cx">     rendering/HitTestingTransformState.cpp
</span></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (211282 => 211283)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2017-01-27 15:58:05 UTC (rev 211282)
+++ trunk/Source/WebCore/ChangeLog        2017-01-27 16:28:24 UTC (rev 211283)
</span><span class="lines">@@ -1,3 +1,65 @@
</span><ins>+2017-01-25  Sergio Villar Senin  &lt;svillar@igalia.com&gt;
+
+        [css-grid] Move Grid class out of RenderGrid
+        https://bugs.webkit.org/show_bug.cgi?id=167418
+
+        Reviewed by Antti Koivisto.
+
+        The RenderGrid should be able to use different implementations of
+        the Grid class. The latter is big enough to be in its own file. That
+        would help on the effort of moving the grid track sizing algorithm
+        out of RenderGrid too.
+
+        No new tests required as we're just moving code.
+
+        * CMakeLists.txt:
+        * rendering/Grid.cpp: Added.
+        (WebCore::Grid::Grid):
+        (WebCore::Grid::numTracks):
+        (WebCore::Grid::ensureGridSize):
+        (WebCore::Grid::insert):
+        (WebCore::Grid::setSmallestTracksStart):
+        (WebCore::Grid::smallestTrackStart):
+        (WebCore::Grid::gridItemArea):
+        (WebCore::Grid::setGridItemArea):
+        (WebCore::Grid::setAutoRepeatTracks):
+        (WebCore::Grid::autoRepeatTracks):
+        (WebCore::Grid::setAutoRepeatEmptyColumns):
+        (WebCore::Grid::setAutoRepeatEmptyRows):
+        (WebCore::Grid::hasAutoRepeatEmptyTracks):
+        (WebCore::Grid::isEmptyAutoRepeatTrack):
+        (WebCore::Grid::autoRepeatEmptyTracks):
+        (WebCore::Grid::gridItemSpan):
+        (WebCore::Grid::setNeedsItemsPlacement):
+        (WebCore::GridIterator::GridIterator):
+        (WebCore::GridIterator::nextGridItem):
+        (WebCore::GridIterator::isEmptyAreaEnough):
+        (WebCore::GridIterator::nextEmptyGridArea):
+        * rendering/Grid.h: Added.
+        * rendering/RenderGrid.cpp:
+        (WebCore::RenderGrid::computeEmptyTracksForAutoRepeat):
+        (WebCore::RenderGrid::Grid::numTracks): Deleted.
+        (WebCore::RenderGrid::Grid::ensureGridSize): Deleted.
+        (WebCore::RenderGrid::Grid::insert): Deleted.
+        (WebCore::RenderGrid::Grid::setSmallestTracksStart): Deleted.
+        (WebCore::RenderGrid::Grid::smallestTrackStart): Deleted.
+        (WebCore::RenderGrid::Grid::gridItemArea): Deleted.
+        (WebCore::RenderGrid::Grid::setGridItemArea): Deleted.
+        (WebCore::RenderGrid::Grid::setAutoRepeatTracks): Deleted.
+        (WebCore::RenderGrid::Grid::autoRepeatTracks): Deleted.
+        (WebCore::RenderGrid::Grid::setAutoRepeatEmptyColumns): Deleted.
+        (WebCore::RenderGrid::Grid::setAutoRepeatEmptyRows): Deleted.
+        (WebCore::RenderGrid::Grid::hasAutoRepeatEmptyTracks): Deleted.
+        (WebCore::RenderGrid::Grid::isEmptyAutoRepeatTrack): Deleted.
+        (WebCore::RenderGrid::Grid::autoRepeatEmptyTracks): Deleted.
+        (WebCore::RenderGrid::Grid::gridItemSpan): Deleted.
+        (WebCore::RenderGrid::Grid::setNeedsItemsPlacement): Deleted.
+        (WebCore::RenderGrid::GridIterator::GridIterator): Deleted.
+        (WebCore::RenderGrid::GridIterator::nextGridItem): Deleted.
+        (WebCore::RenderGrid::GridIterator::isEmptyAreaEnough): Deleted.
+        (WebCore::RenderGrid::GridIterator::nextEmptyGridArea): Deleted.
+        * rendering/RenderGrid.h:
+
</ins><span class="cx"> 2017-01-27  Yusuke Suzuki  &lt;utatane.tea@gmail.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Implement dynamic-import for WebCore
</span></span></pre></div>
<a id="trunkSourceWebCoreWebCorexcodeprojprojectpbxproj"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj (211282 => 211283)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj        2017-01-27 15:58:05 UTC (rev 211282)
+++ trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj        2017-01-27 16:28:24 UTC (rev 211283)
</span><span class="lines">@@ -6103,6 +6103,8 @@
</span><span class="cx">                 E10B9B6D0B747599003ED890 /* NativeXPathNSResolver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E10B9B6B0B747599003ED890 /* NativeXPathNSResolver.cpp */; };
</span><span class="cx">                 E11003301C9AC3DE00412DD0 /* CSSGridAutoRepeatValue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E110032E1C9AC3DE00412DD0 /* CSSGridAutoRepeatValue.cpp */; };
</span><span class="cx">                 E11003311C9AC3DE00412DD0 /* CSSGridAutoRepeatValue.h in Headers */ = {isa = PBXBuildFile; fileRef = E110032F1C9AC3DE00412DD0 /* CSSGridAutoRepeatValue.h */; };
</span><ins>+                E112F4711E3A861200D6CDFD /* Grid.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E112F4701E3A85F200D6CDFD /* Grid.cpp */; };
+                E112F4721E3A861600D6CDFD /* Grid.h in Headers */ = {isa = PBXBuildFile; fileRef = E112F46F1E3A85D800D6CDFD /* Grid.h */; };
</ins><span class="cx">                 E11AF15111B9A1A300805103 /* Cursor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E11AF15011B9A1A300805103 /* Cursor.cpp */; };
</span><span class="cx">                 E11C9D9B0EB3681200E409DB /* ScriptExecutionContext.h in Headers */ = {isa = PBXBuildFile; fileRef = E11C9D9A0EB3681200E409DB /* ScriptExecutionContext.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="cx">                 E11C9DB00EB3699500E409DB /* ScriptExecutionContext.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E11C9DAF0EB3699500E409DB /* ScriptExecutionContext.cpp */; };
</span><span class="lines">@@ -14135,6 +14137,8 @@
</span><span class="cx">                 E10B9B6B0B747599003ED890 /* NativeXPathNSResolver.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = NativeXPathNSResolver.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 E110032E1C9AC3DE00412DD0 /* CSSGridAutoRepeatValue.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CSSGridAutoRepeatValue.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 E110032F1C9AC3DE00412DD0 /* CSSGridAutoRepeatValue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CSSGridAutoRepeatValue.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><ins>+                E112F46F1E3A85D800D6CDFD /* Grid.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Grid.h; sourceTree = &quot;&lt;group&gt;&quot;; };
+                E112F4701E3A85F200D6CDFD /* Grid.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Grid.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</ins><span class="cx">                 E11AF15011B9A1A300805103 /* Cursor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Cursor.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 E11C9D9A0EB3681200E409DB /* ScriptExecutionContext.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScriptExecutionContext.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 E11C9DAF0EB3699500E409DB /* ScriptExecutionContext.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ScriptExecutionContext.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="lines">@@ -23808,6 +23812,8 @@
</span><span class="cx">                                 D72F6D77153159A3001EE44E /* FlowThreadController.cpp */,
</span><span class="cx">                                 D72F6D78153159A3001EE44E /* FlowThreadController.h */,
</span><span class="cx">                                 935C477409AC4D8D00A6AAB4 /* GapRects.h */,
</span><ins>+                                E112F4701E3A85F200D6CDFD /* Grid.cpp */,
+                                E112F46F1E3A85D800D6CDFD /* Grid.h */,
</ins><span class="cx">                                 4969B0F013D0B33F00DF3521 /* HitTestingTransformState.cpp */,
</span><span class="cx">                                 4969B0F113D0B33F00DF3521 /* HitTestingTransformState.h */,
</span><span class="cx">                                 2D8287F416E4A0380086BD00 /* HitTestLocation.cpp */,
</span><span class="lines">@@ -25861,6 +25867,7 @@
</span><span class="cx">                                 CEC337AF1A46086D009B8523 /* GraphicsServicesSPI.h in Headers */,
</span><span class="cx">                                 B2A015AB0AF6CD53006BCE0E /* GraphicsTypes.h in Headers */,
</span><span class="cx">                                 77A17A7B12F2890B004E02F6 /* GraphicsTypes3D.h in Headers */,
</span><ins>+                                E112F4721E3A861600D6CDFD /* Grid.h in Headers */,
</ins><span class="cx">                                 CD3E251C18046B0600E27F56 /* GridArea.h in Headers */,
</span><span class="cx">                                 CDEF4FD717E85C8F00AEE24B /* GridLength.h in Headers */,
</span><span class="cx">                                 A12705C31656BD6500C2E27C /* GridPosition.h in Headers */,
</span><span class="lines">@@ -29653,6 +29660,7 @@
</span><span class="cx">                                 499B3ED6128CD31400E726C2 /* GraphicsLayerCA.cpp in Sources */,
</span><span class="cx">                                 0FA24D79162DF91900A3F4C0 /* GraphicsLayerUpdater.cpp in Sources */,
</span><span class="cx">                                 B2A015AA0AF6CD53006BCE0E /* GraphicsTypes.cpp in Sources */,
</span><ins>+                                E112F4711E3A861200D6CDFD /* Grid.cpp in Sources */,
</ins><span class="cx">                                 CDF7483E18FEBCEC0006ECC0 /* GridPositionsResolver.cpp in Sources */,
</span><span class="cx">                                 F55B3DBF1251F12D003EF269 /* HiddenInputType.cpp in Sources */,
</span><span class="cx">                                 515BE19B1D54F6C100DD7C68 /* HIDGamepad.cpp in Sources */,
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingGridcpp"></a>
<div class="addfile"><h4>Added: trunk/Source/WebCore/rendering/Grid.cpp (0 => 211283)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/Grid.cpp                                (rev 0)
+++ trunk/Source/WebCore/rendering/Grid.cpp        2017-01-27 16:28:24 UTC (rev 211283)
</span><span class="lines">@@ -0,0 +1,242 @@
</span><ins>+/*
+ * Copyright (C) 2017 Igalia S.L.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include &quot;config.h&quot;
+#include &quot;Grid.h&quot;
+
+#if ENABLE(CSS_GRID_LAYOUT)
+
+#include &quot;GridArea.h&quot;
+#include &quot;RenderGrid.h&quot;
+
+namespace WebCore {
+
+Grid::Grid(RenderGrid&amp; grid)
+    : m_orderIterator(grid)
+{
+}
+
+unsigned Grid::numTracks(GridTrackSizingDirection direction) const
+{
+    if (direction == ForRows)
+        return m_grid.size();
+    return m_grid.size() ? m_grid[0].size() : 0;
+}
+
+void Grid::ensureGridSize(unsigned maximumRowSize, unsigned maximumColumnSize)
+{
+    const size_t oldColumnSize = numTracks(ForColumns);
+    const size_t oldRowSize = numTracks(ForRows);
+    if (maximumRowSize &gt; oldRowSize) {
+        m_grid.grow(maximumRowSize);
+        for (size_t row = oldRowSize; row &lt; maximumRowSize; ++row)
+            m_grid[row].grow(oldColumnSize);
+    }
+
+    if (maximumColumnSize &gt; oldColumnSize) {
+        for (size_t row = 0; row &lt; numTracks(ForRows); ++row)
+            m_grid[row].grow(maximumColumnSize);
+    }
+}
+
+void Grid::insert(RenderBox&amp; child, const GridArea&amp; area)
+{
+    ASSERT(area.rows.isTranslatedDefinite() &amp;&amp; area.columns.isTranslatedDefinite());
+    ensureGridSize(area.rows.endLine(), area.columns.endLine());
+
+    for (const auto&amp; row : area.rows) {
+        for (const auto&amp; column : area.columns)
+            m_grid[row][column].append(&amp;child);
+    }
+
+    setGridItemArea(child, area);
+}
+
+void Grid::setSmallestTracksStart(int rowStart, int columnStart)
+{
+    m_smallestRowStart = rowStart;
+    m_smallestColumnStart = columnStart;
+}
+
+int Grid::smallestTrackStart(GridTrackSizingDirection direction) const
+{
+    return direction == ForRows ? m_smallestRowStart : m_smallestColumnStart;
+}
+
+GridArea Grid::gridItemArea(const RenderBox&amp; item) const
+{
+    ASSERT(m_gridItemArea.contains(&amp;item));
+    return m_gridItemArea.get(&amp;item);
+}
+
+void Grid::setGridItemArea(const RenderBox&amp; item, GridArea area)
+{
+    m_gridItemArea.set(&amp;item, area);
+}
+
+void Grid::setAutoRepeatTracks(unsigned autoRepeatRows, unsigned autoRepeatColumns)
+{
+    m_autoRepeatRows = autoRepeatRows;
+    m_autoRepeatColumns =  autoRepeatColumns;
+}
+
+unsigned Grid::autoRepeatTracks(GridTrackSizingDirection direction) const
+{
+    return direction == ForRows ? m_autoRepeatRows : m_autoRepeatColumns;
+}
+
+void Grid::setAutoRepeatEmptyColumns(std::unique_ptr&lt;OrderedTrackIndexSet&gt; autoRepeatEmptyColumns)
+{
+    m_autoRepeatEmptyColumns = WTFMove(autoRepeatEmptyColumns);
+}
+
+void Grid::setAutoRepeatEmptyRows(std::unique_ptr&lt;OrderedTrackIndexSet&gt; autoRepeatEmptyRows)
+{
+    m_autoRepeatEmptyRows = WTFMove(autoRepeatEmptyRows);
+}
+
+bool Grid::hasAutoRepeatEmptyTracks(GridTrackSizingDirection direction) const
+{
+    return direction == ForColumns ? !!m_autoRepeatEmptyColumns : !!m_autoRepeatEmptyRows;
+}
+
+bool Grid::isEmptyAutoRepeatTrack(GridTrackSizingDirection direction, unsigned line) const
+{
+    ASSERT(hasAutoRepeatEmptyTracks(direction));
+    return autoRepeatEmptyTracks(direction)-&gt;contains(line);
+}
+
+OrderedTrackIndexSet* Grid::autoRepeatEmptyTracks(GridTrackSizingDirection direction) const
+{
+    ASSERT(hasAutoRepeatEmptyTracks(direction));
+    return direction == ForColumns ? m_autoRepeatEmptyColumns.get() : m_autoRepeatEmptyRows.get();
+}
+
+GridSpan Grid::gridItemSpan(const RenderBox&amp; gridItem, GridTrackSizingDirection direction) const
+{
+    GridArea area = gridItemArea(gridItem);
+    return direction == ForColumns ? area.columns : area.rows;
+}
+
+void Grid::setNeedsItemsPlacement(bool needsItemsPlacement)
+{
+    m_needsItemsPlacement = needsItemsPlacement;
+
+    if (!needsItemsPlacement) {
+        m_grid.shrinkToFit();
+        return;
+    }
+
+    m_grid.resize(0);
+    m_gridItemArea.clear();
+    m_hasAnyOrthogonalGridItem = false;
+    m_smallestRowStart = 0;
+    m_smallestColumnStart = 0;
+    m_autoRepeatEmptyColumns = nullptr;
+    m_autoRepeatEmptyRows = nullptr;
+    m_autoRepeatColumns = 0;
+    m_autoRepeatRows = 0;
+}
+
+GridIterator::GridIterator(const Grid&amp; grid, GridTrackSizingDirection direction, unsigned fixedTrackIndex, unsigned varyingTrackIndex)
+    : m_grid(grid.m_grid)
+    , m_direction(direction)
+    , m_rowIndex((direction == ForColumns) ? varyingTrackIndex : fixedTrackIndex)
+    , m_columnIndex((direction == ForColumns) ? fixedTrackIndex : varyingTrackIndex)
+    , m_childIndex(0)
+{
+    ASSERT(!m_grid.isEmpty());
+    ASSERT(!m_grid[0].isEmpty());
+    ASSERT(m_rowIndex &lt; m_grid.size());
+    ASSERT(m_columnIndex &lt; m_grid[0].size());
+}
+
+RenderBox* GridIterator::nextGridItem()
+{
+    ASSERT(!m_grid.isEmpty());
+    ASSERT(!m_grid[0].isEmpty());
+
+    unsigned&amp; varyingTrackIndex = (m_direction == ForColumns) ? m_rowIndex : m_columnIndex;
+    const unsigned endOfVaryingTrackIndex = (m_direction == ForColumns) ? m_grid.size() : m_grid[0].size();
+    for (; varyingTrackIndex &lt; endOfVaryingTrackIndex; ++varyingTrackIndex) {
+        const auto&amp; children = m_grid[m_rowIndex][m_columnIndex];
+        if (m_childIndex &lt; children.size())
+            return children[m_childIndex++];
+
+        m_childIndex = 0;
+    }
+    return 0;
+}
+
+bool GridIterator::isEmptyAreaEnough(unsigned rowSpan, unsigned columnSpan) const
+{
+    ASSERT(!m_grid.isEmpty());
+    ASSERT(!m_grid[0].isEmpty());
+
+    // Ignore cells outside current grid as we will grow it later if needed.
+    unsigned maxRows = std::min&lt;unsigned&gt;(m_rowIndex + rowSpan, m_grid.size());
+    unsigned maxColumns = std::min&lt;unsigned&gt;(m_columnIndex + columnSpan, m_grid[0].size());
+
+    // This adds a O(N^2) behavior that shouldn't be a big deal as we expect spanning areas to be small.
+    for (unsigned row = m_rowIndex; row &lt; maxRows; ++row) {
+        for (unsigned column = m_columnIndex; column &lt; maxColumns; ++column) {
+            auto&amp; children = m_grid[row][column];
+            if (!children.isEmpty())
+                return false;
+        }
+    }
+
+    return true;
+}
+
+std::unique_ptr&lt;GridArea&gt; GridIterator::nextEmptyGridArea(unsigned fixedTrackSpan, unsigned varyingTrackSpan)
+{
+    ASSERT(!m_grid.isEmpty());
+    ASSERT(!m_grid[0].isEmpty());
+    ASSERT(fixedTrackSpan &gt;= 1);
+    ASSERT(varyingTrackSpan &gt;= 1);
+
+    if (m_grid.isEmpty())
+        return nullptr;
+
+    unsigned rowSpan = (m_direction == ForColumns) ? varyingTrackSpan : fixedTrackSpan;
+    unsigned columnSpan = (m_direction == ForColumns) ? fixedTrackSpan : varyingTrackSpan;
+
+    unsigned&amp; varyingTrackIndex = (m_direction == ForColumns) ? m_rowIndex : m_columnIndex;
+    const unsigned endOfVaryingTrackIndex = (m_direction == ForColumns) ? m_grid.size() : m_grid[0].size();
+    for (; varyingTrackIndex &lt; endOfVaryingTrackIndex; ++varyingTrackIndex) {
+        if (isEmptyAreaEnough(rowSpan, columnSpan)) {
+            std::unique_ptr&lt;GridArea&gt; result = std::make_unique&lt;GridArea&gt;(GridSpan::translatedDefiniteGridSpan(m_rowIndex, m_rowIndex + rowSpan), GridSpan::translatedDefiniteGridSpan(m_columnIndex, m_columnIndex + columnSpan));
+            // Advance the iterator to avoid an infinite loop where we would return the same grid area over and over.
+            ++varyingTrackIndex;
+            return result;
+        }
+    }
+    return nullptr;
+}
+
+} // namespace WebCore
+
+#endif  /* ENABLE(CSS_GRID_LAYOUT) */
</ins><span class="cx">Property changes on: trunk/Source/WebCore/rendering/Grid.cpp
</span><span class="cx">___________________________________________________________________
</span></span></pre></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4>Added: svn:eol-style</h4></div>
<ins>+LF
</ins><span class="cx">\ No newline at end of property
</span><a id="trunkSourceWebCorerenderingGridh"></a>
<div class="addfile"><h4>Added: trunk/Source/WebCore/rendering/Grid.h (0 => 211283)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/Grid.h                                (rev 0)
+++ trunk/Source/WebCore/rendering/Grid.h        2017-01-27 16:28:24 UTC (rev 211283)
</span><span class="lines">@@ -0,0 +1,133 @@
</span><ins>+/*
+ * Copyright (C) 2017 Igalia S.L.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#if ENABLE(CSS_GRID_LAYOUT)
+
+#include &quot;GridPositionsResolver.h&quot;
+#include &quot;OrderIterator.h&quot;
+#include &lt;wtf/HashMap.h&gt;
+#include &lt;wtf/ListHashSet.h&gt;
+
+namespace WebCore {
+
+typedef Vector&lt;RenderBox*, 1&gt; GridCell;
+typedef Vector&lt;Vector&lt;GridCell&gt;&gt; GridAsMatrix;
+typedef ListHashSet&lt;size_t&gt; OrderedTrackIndexSet;
+
+class GridArea;
+class GridPositionsResolver;
+class RenderGrid;
+
+class Grid final {
+public:
+    explicit Grid(RenderGrid&amp;);
+
+    unsigned numTracks(GridTrackSizingDirection) const;
+
+    void ensureGridSize(unsigned maximumRowSize, unsigned maximumColumnSize);
+    void insert(RenderBox&amp;, const GridArea&amp;);
+
+    // Note that each in flow child of a grid container becomes a grid item. This means that
+    // this method will return false for a grid container with only out of flow children.
+    bool hasGridItems() const { return !m_gridItemArea.isEmpty(); }
+
+    // FIXME: move this to SizingData once placeItemsOnGrid() takes it as argument.
+    bool hasAnyOrthogonalGridItem() const { return m_hasAnyOrthogonalGridItem; }
+    void setHasAnyOrthogonalGridItem(bool hasAnyOrthogonalGridItem) { m_hasAnyOrthogonalGridItem = hasAnyOrthogonalGridItem; }
+
+    GridArea gridItemArea(const RenderBox&amp; item) const;
+    void setGridItemArea(const RenderBox&amp; item, GridArea);
+
+    GridSpan gridItemSpan(const RenderBox&amp;, GridTrackSizingDirection) const;
+
+    const GridCell&amp; cell(unsigned row, unsigned column) const { return m_grid[row][column]; }
+
+    int smallestTrackStart(GridTrackSizingDirection) const;
+    void setSmallestTracksStart(int rowStart, int columnStart);
+
+    unsigned autoRepeatTracks(GridTrackSizingDirection) const;
+    void setAutoRepeatTracks(unsigned autoRepeatRows, unsigned autoRepeatColumns);
+
+    void setAutoRepeatEmptyColumns(std::unique_ptr&lt;OrderedTrackIndexSet&gt;);
+    void setAutoRepeatEmptyRows(std::unique_ptr&lt;OrderedTrackIndexSet&gt;);
+
+    unsigned autoRepeatEmptyTracksCount(GridTrackSizingDirection) const;
+    bool hasAutoRepeatEmptyTracks(GridTrackSizingDirection) const;
+    bool isEmptyAutoRepeatTrack(GridTrackSizingDirection, unsigned) const;
+
+    OrderedTrackIndexSet* autoRepeatEmptyTracks(GridTrackSizingDirection) const;
+
+    OrderIterator&amp; orderIterator() { return m_orderIterator; }
+
+    void setNeedsItemsPlacement(bool);
+    bool needsItemsPlacement() const { return m_needsItemsPlacement; };
+
+private:
+    friend class GridIterator;
+
+    OrderIterator m_orderIterator;
+
+    int m_smallestColumnStart { 0 };
+    int m_smallestRowStart { 0 };
+
+    unsigned m_autoRepeatColumns { 0 };
+    unsigned m_autoRepeatRows { 0 };
+
+    bool m_hasAnyOrthogonalGridItem { false };
+    bool m_needsItemsPlacement { true };
+
+    GridAsMatrix m_grid;
+
+    HashMap&lt;const RenderBox*, GridArea&gt; m_gridItemArea;
+    HashMap&lt;const RenderBox*, size_t&gt; m_gridItemsIndexesMap;
+
+    std::unique_ptr&lt;OrderedTrackIndexSet&gt; m_autoRepeatEmptyColumns;
+    std::unique_ptr&lt;OrderedTrackIndexSet&gt; m_autoRepeatEmptyRows;
+};
+
+class GridIterator {
+    WTF_MAKE_NONCOPYABLE(GridIterator);
+public:
+    // |direction| is the direction that is fixed to |fixedTrackIndex| so e.g
+    // GridIterator(m_grid, ForColumns, 1) will walk over the rows of the 2nd column.
+    GridIterator(const Grid&amp;, GridTrackSizingDirection, unsigned fixedTrackIndex, unsigned varyingTrackIndex = 0);
+
+    RenderBox* nextGridItem();
+    bool isEmptyAreaEnough(unsigned rowSpan, unsigned columnSpan) const;
+    std::unique_ptr&lt;GridArea&gt; nextEmptyGridArea(unsigned fixedTrackSpan, unsigned varyingTrackSpan);
+
+private:
+    const GridAsMatrix&amp; m_grid;
+    GridTrackSizingDirection m_direction;
+    unsigned m_rowIndex;
+    unsigned m_columnIndex;
+    unsigned m_childIndex;
+};
+
+} // namespace WebCore
+
+#endif  /* ENABLE(CSS_GRID_LAYOUT) */
</ins><span class="cx">Property changes on: trunk/Source/WebCore/rendering/Grid.h
</span><span class="cx">___________________________________________________________________
</span></span></pre></div>
<a id="svneolstyle"></a>
<div class="addfile"><h4>Added: svn:eol-style</h4></div>
<ins>+LF
</ins><span class="cx">\ No newline at end of property
</span><a id="trunkSourceWebCorerenderingRenderGridcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderGrid.cpp (211282 => 211283)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderGrid.cpp        2017-01-27 15:58:05 UTC (rev 211282)
+++ trunk/Source/WebCore/rendering/RenderGrid.cpp        2017-01-27 16:28:24 UTC (rev 211283)
</span><span class="lines">@@ -46,128 +46,6 @@
</span><span class="cx">     ForbidInfinity,
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-unsigned RenderGrid::Grid::numTracks(GridTrackSizingDirection direction) const
-{
-    if (direction == ForRows)
-        return m_grid.size();
-    return m_grid.size() ? m_grid[0].size() : 0;
-}
-
-void RenderGrid::Grid::ensureGridSize(unsigned maximumRowSize, unsigned maximumColumnSize)
-{
-    const size_t oldColumnSize = numTracks(ForColumns);
-    const size_t oldRowSize = numTracks(ForRows);
-    if (maximumRowSize &gt; oldRowSize) {
-        m_grid.grow(maximumRowSize);
-        for (size_t row = oldRowSize; row &lt; maximumRowSize; ++row)
-            m_grid[row].grow(oldColumnSize);
-    }
-
-    if (maximumColumnSize &gt; oldColumnSize) {
-        for (size_t row = 0; row &lt; numTracks(ForRows); ++row)
-            m_grid[row].grow(maximumColumnSize);
-    }
-}
-
-void RenderGrid::Grid::insert(RenderBox&amp; child, const GridArea&amp; area)
-{
-    ASSERT(area.rows.isTranslatedDefinite() &amp;&amp; area.columns.isTranslatedDefinite());
-    ensureGridSize(area.rows.endLine(), area.columns.endLine());
-
-    for (const auto&amp; row : area.rows) {
-        for (const auto&amp; column : area.columns)
-            m_grid[row][column].append(&amp;child);
-    }
-
-    setGridItemArea(child, area);
-}
-
-void RenderGrid::Grid::setSmallestTracksStart(int rowStart, int columnStart)
-{
-    m_smallestRowStart = rowStart;
-    m_smallestColumnStart = columnStart;
-}
-
-int RenderGrid::Grid::smallestTrackStart(GridTrackSizingDirection direction) const
-{
-    return direction == ForRows ? m_smallestRowStart : m_smallestColumnStart;
-}
-
-GridArea RenderGrid::Grid::gridItemArea(const RenderBox&amp; item) const
-{
-    ASSERT(m_gridItemArea.contains(&amp;item));
-    return m_gridItemArea.get(&amp;item);
-}
-
-void RenderGrid::Grid::setGridItemArea(const RenderBox&amp; item, GridArea area)
-{
-    m_gridItemArea.set(&amp;item, area);
-}
-
-void RenderGrid::Grid::setAutoRepeatTracks(unsigned autoRepeatRows, unsigned autoRepeatColumns)
-{
-    m_autoRepeatRows = autoRepeatRows;
-    m_autoRepeatColumns =  autoRepeatColumns;
-}
-
-unsigned RenderGrid::Grid::autoRepeatTracks(GridTrackSizingDirection direction) const
-{
-    return direction == ForRows ? m_autoRepeatRows : m_autoRepeatColumns;
-}
-
-void RenderGrid::Grid::setAutoRepeatEmptyColumns(std::unique_ptr&lt;OrderedTrackIndexSet&gt; autoRepeatEmptyColumns)
-{
-    m_autoRepeatEmptyColumns = WTFMove(autoRepeatEmptyColumns);
-}
-
-void RenderGrid::Grid::setAutoRepeatEmptyRows(std::unique_ptr&lt;OrderedTrackIndexSet&gt; autoRepeatEmptyRows)
-{
-    m_autoRepeatEmptyRows = WTFMove(autoRepeatEmptyRows);
-}
-
-bool RenderGrid::Grid::hasAutoRepeatEmptyTracks(GridTrackSizingDirection direction) const
-{
-    return direction == ForColumns ? !!m_autoRepeatEmptyColumns : !!m_autoRepeatEmptyRows;
-}
-
-bool RenderGrid::Grid::isEmptyAutoRepeatTrack(GridTrackSizingDirection direction, unsigned line) const
-{
-    ASSERT(hasAutoRepeatEmptyTracks(direction));
-    return autoRepeatEmptyTracks(direction)-&gt;contains(line);
-}
-
-RenderGrid::OrderedTrackIndexSet* RenderGrid::Grid::autoRepeatEmptyTracks(GridTrackSizingDirection direction) const
-{
-    ASSERT(hasAutoRepeatEmptyTracks(direction));
-    return direction == ForColumns ? m_autoRepeatEmptyColumns.get() : m_autoRepeatEmptyRows.get();
-}
-
-GridSpan RenderGrid::Grid::gridItemSpan(const RenderBox&amp; gridItem, GridTrackSizingDirection direction) const
-{
-    GridArea area = gridItemArea(gridItem);
-    return direction == ForColumns ? area.columns : area.rows;
-}
-
-void RenderGrid::Grid::setNeedsItemsPlacement(bool needsItemsPlacement)
-{
-    m_needsItemsPlacement = needsItemsPlacement;
-
-    if (!needsItemsPlacement) {
-        m_grid.shrinkToFit();
-        return;
-    }
-
-    m_grid.resize(0);
-    m_gridItemArea.clear();
-    m_hasAnyOrthogonalGridItem = false;
-    m_smallestRowStart = 0;
-    m_smallestColumnStart = 0;
-    m_autoRepeatEmptyColumns = nullptr;
-    m_autoRepeatEmptyRows = nullptr;
-    m_autoRepeatColumns = 0;
-    m_autoRepeatRows = 0;
-}
-
</del><span class="cx"> class GridTrack {
</span><span class="cx"> public:
</span><span class="cx">     GridTrack() {}
</span><span class="lines">@@ -266,96 +144,6 @@
</span><span class="cx">     LayoutUnit distributionOffset;
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-class RenderGrid::GridIterator {
-    WTF_MAKE_NONCOPYABLE(GridIterator);
-public:
-    // |direction| is the direction that is fixed to |fixedTrackIndex| so e.g
-    // GridIterator(m_grid, ForColumns, 1) will walk over the rows of the 2nd column.
-    GridIterator(const Grid&amp; grid, GridTrackSizingDirection direction, unsigned fixedTrackIndex, unsigned varyingTrackIndex = 0)
-        : m_grid(grid.m_grid)
-        , m_direction(direction)
-        , m_rowIndex((direction == ForColumns) ? varyingTrackIndex : fixedTrackIndex)
-        , m_columnIndex((direction == ForColumns) ? fixedTrackIndex : varyingTrackIndex)
-        , m_childIndex(0)
-    {
-        ASSERT(!m_grid.isEmpty());
-        ASSERT(!m_grid[0].isEmpty());
-        ASSERT(m_rowIndex &lt; m_grid.size());
-        ASSERT(m_columnIndex &lt; m_grid[0].size());
-    }
-
-    RenderBox* nextGridItem()
-    {
-        ASSERT(!m_grid.isEmpty());
-        ASSERT(!m_grid[0].isEmpty());
-
-        unsigned&amp; varyingTrackIndex = (m_direction == ForColumns) ? m_rowIndex : m_columnIndex;
-        const unsigned endOfVaryingTrackIndex = (m_direction == ForColumns) ? m_grid.size() : m_grid[0].size();
-        for (; varyingTrackIndex &lt; endOfVaryingTrackIndex; ++varyingTrackIndex) {
-            const auto&amp; children = m_grid[m_rowIndex][m_columnIndex];
-            if (m_childIndex &lt; children.size())
-                return children[m_childIndex++];
-
-            m_childIndex = 0;
-        }
-        return 0;
-    }
-
-    bool isEmptyAreaEnough(unsigned rowSpan, unsigned columnSpan) const
-    {
-        ASSERT(!m_grid.isEmpty());
-        ASSERT(!m_grid[0].isEmpty());
-
-        // Ignore cells outside current grid as we will grow it later if needed.
-        unsigned maxRows = std::min&lt;unsigned&gt;(m_rowIndex + rowSpan, m_grid.size());
-        unsigned maxColumns = std::min&lt;unsigned&gt;(m_columnIndex + columnSpan, m_grid[0].size());
-
-        // This adds a O(N^2) behavior that shouldn't be a big deal as we expect spanning areas to be small.
-        for (unsigned row = m_rowIndex; row &lt; maxRows; ++row) {
-            for (unsigned column = m_columnIndex; column &lt; maxColumns; ++column) {
-                auto&amp; children = m_grid[row][column];
-                if (!children.isEmpty())
-                    return false;
-            }
-        }
-
-        return true;
-    }
-
-    std::unique_ptr&lt;GridArea&gt; nextEmptyGridArea(unsigned fixedTrackSpan, unsigned varyingTrackSpan)
-    {
-        ASSERT(!m_grid.isEmpty());
-        ASSERT(!m_grid[0].isEmpty());
-        ASSERT(fixedTrackSpan &gt;= 1);
-        ASSERT(varyingTrackSpan &gt;= 1);
-
-        if (m_grid.isEmpty())
-            return nullptr;
-
-        unsigned rowSpan = (m_direction == ForColumns) ? varyingTrackSpan : fixedTrackSpan;
-        unsigned columnSpan = (m_direction == ForColumns) ? fixedTrackSpan : varyingTrackSpan;
-
-        unsigned&amp; varyingTrackIndex = (m_direction == ForColumns) ? m_rowIndex : m_columnIndex;
-        const unsigned endOfVaryingTrackIndex = (m_direction == ForColumns) ? m_grid.size() : m_grid[0].size();
-        for (; varyingTrackIndex &lt; endOfVaryingTrackIndex; ++varyingTrackIndex) {
-            if (isEmptyAreaEnough(rowSpan, columnSpan)) {
-                std::unique_ptr&lt;GridArea&gt; result = std::make_unique&lt;GridArea&gt;(GridSpan::translatedDefiniteGridSpan(m_rowIndex, m_rowIndex + rowSpan), GridSpan::translatedDefiniteGridSpan(m_columnIndex, m_columnIndex + columnSpan));
-                // Advance the iterator to avoid an infinite loop where we would return the same grid area over and over.
-                ++varyingTrackIndex;
-                return result;
-            }
-        }
-        return nullptr;
-    }
-
-private:
-    const GridAsMatrix&amp; m_grid;
-    GridTrackSizingDirection m_direction;
-    unsigned m_rowIndex;
-    unsigned m_columnIndex;
-    unsigned m_childIndex;
-};
-
</del><span class="cx"> class RenderGrid::GridSizingData {
</span><span class="cx">     WTF_MAKE_NONCOPYABLE(GridSizingData);
</span><span class="cx"> public:
</span><span class="lines">@@ -1725,7 +1513,7 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> 
</span><del>-std::unique_ptr&lt;RenderGrid::OrderedTrackIndexSet&gt; RenderGrid::computeEmptyTracksForAutoRepeat(Grid&amp; grid, GridTrackSizingDirection direction) const
</del><ins>+std::unique_ptr&lt;OrderedTrackIndexSet&gt; RenderGrid::computeEmptyTracksForAutoRepeat(Grid&amp; grid, GridTrackSizingDirection direction) const
</ins><span class="cx"> {
</span><span class="cx">     bool isRowAxis = direction == ForColumns;
</span><span class="cx">     if ((isRowAxis &amp;&amp; style().gridAutoRepeatColumnsType() != AutoFit)
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderGridh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderGrid.h (211282 => 211283)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderGrid.h        2017-01-27 15:58:05 UTC (rev 211282)
+++ trunk/Source/WebCore/rendering/RenderGrid.h        2017-01-27 16:28:24 UTC (rev 211283)
</span><span class="lines">@@ -28,8 +28,7 @@
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(CSS_GRID_LAYOUT)
</span><span class="cx"> 
</span><del>-#include &quot;GridPositionsResolver.h&quot;
-#include &quot;OrderIterator.h&quot;
</del><ins>+#include &quot;Grid.h&quot;
</ins><span class="cx"> #include &quot;RenderBlock.h&quot;
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="lines">@@ -86,8 +85,6 @@
</span><span class="cx"> 
</span><span class="cx">     std::optional&lt;LayoutUnit&gt; computeIntrinsicLogicalContentHeightUsing(Length logicalHeightLength, std::optional&lt;LayoutUnit&gt; intrinsicContentHeight, LayoutUnit borderAndPadding) const override;
</span><span class="cx"> 
</span><del>-    class Grid;
-    class GridIterator;
</del><span class="cx">     class GridSizingData;
</span><span class="cx">     enum SizingOperation { TrackSizing, IntrinsicSizeComputation };
</span><span class="cx">     void computeUsedBreadthOfGridTracks(GridTrackSizingDirection, GridSizingData&amp;, LayoutUnit&amp; baseSizesWithoutMaximization, LayoutUnit&amp; growthLimitsWithoutMaximization) const;
</span><span class="lines">@@ -98,7 +95,6 @@
</span><span class="cx"> 
</span><span class="cx">     unsigned computeAutoRepeatTracksCount(GridTrackSizingDirection, SizingOperation) const;
</span><span class="cx"> 
</span><del>-    typedef ListHashSet&lt;size_t&gt; OrderedTrackIndexSet;
</del><span class="cx">     std::unique_ptr&lt;OrderedTrackIndexSet&gt; computeEmptyTracksForAutoRepeat(Grid&amp;, GridTrackSizingDirection) const;
</span><span class="cx"> 
</span><span class="cx">     void placeItemsOnGrid(Grid&amp;, SizingOperation) const;
</span><span class="lines">@@ -203,74 +199,6 @@
</span><span class="cx">     bool isOrthogonalChild(const RenderBox&amp;) const;
</span><span class="cx">     GridTrackSizingDirection flowAwareDirectionForChild(const RenderBox&amp;, GridTrackSizingDirection) const;
</span><span class="cx"> 
</span><del>-    typedef Vector&lt;RenderBox*, 1&gt; GridCell;
-    typedef Vector&lt;Vector&lt;GridCell&gt;&gt; GridAsMatrix;
-    class Grid final {
-    public:
-        Grid(RenderGrid&amp; grid) : m_orderIterator(grid) { }
-
-        unsigned numTracks(GridTrackSizingDirection) const;
-
-        void ensureGridSize(unsigned maximumRowSize, unsigned maximumColumnSize);
-        void insert(RenderBox&amp;, const GridArea&amp;);
-
-        // Note that each in flow child of a grid container becomes a grid item. This means that
-        // this method will return false for a grid container with only out of flow children.
-        bool hasGridItems() const { return !m_gridItemArea.isEmpty(); }
-
-        // FIXME: move this to SizingData once placeItemsOnGrid() takes it as argument.
-        bool hasAnyOrthogonalGridItem() const { return m_hasAnyOrthogonalGridItem; }
-        void setHasAnyOrthogonalGridItem(bool hasAnyOrthogonalGridItem) { m_hasAnyOrthogonalGridItem = hasAnyOrthogonalGridItem; }
-
-        GridArea gridItemArea(const RenderBox&amp; item) const;
-        void setGridItemArea(const RenderBox&amp; item, GridArea);
-
-        GridSpan gridItemSpan(const RenderBox&amp;, GridTrackSizingDirection) const;
-
-        const GridCell&amp; cell(unsigned row, unsigned column) const { return m_grid[row][column]; }
-
-        int smallestTrackStart(GridTrackSizingDirection) const;
-        void setSmallestTracksStart(int rowStart, int columnStart);
-
-        unsigned autoRepeatTracks(GridTrackSizingDirection) const;
-        void setAutoRepeatTracks(unsigned autoRepeatRows, unsigned autoRepeatColumns);
-
-        void setAutoRepeatEmptyColumns(std::unique_ptr&lt;OrderedTrackIndexSet&gt;);
-        void setAutoRepeatEmptyRows(std::unique_ptr&lt;OrderedTrackIndexSet&gt;);
-
-        unsigned autoRepeatEmptyTracksCount(GridTrackSizingDirection) const;
-        bool hasAutoRepeatEmptyTracks(GridTrackSizingDirection) const;
-        bool isEmptyAutoRepeatTrack(GridTrackSizingDirection, unsigned) const;
-
-        OrderedTrackIndexSet* autoRepeatEmptyTracks(GridTrackSizingDirection) const;
-
-        OrderIterator&amp; orderIterator() { return m_orderIterator; }
-
-        void setNeedsItemsPlacement(bool);
-        bool needsItemsPlacement() const { return m_needsItemsPlacement; };
-
-    private:
-        friend class GridIterator;
-
-        OrderIterator m_orderIterator;
-
-        int m_smallestColumnStart { 0 };
-        int m_smallestRowStart { 0 };
-
-        unsigned m_autoRepeatColumns { 0 };
-        unsigned m_autoRepeatRows { 0 };
-
-        bool m_hasAnyOrthogonalGridItem { false };
-        bool m_needsItemsPlacement { true };
-
-        GridAsMatrix m_grid;
-
-        HashMap&lt;const RenderBox*, GridArea&gt; m_gridItemArea;
-        HashMap&lt;const RenderBox*, size_t&gt; m_gridItemsIndexesMap;
-
-        std::unique_ptr&lt;OrderedTrackIndexSet&gt; m_autoRepeatEmptyColumns;
-        std::unique_ptr&lt;OrderedTrackIndexSet&gt; m_autoRepeatEmptyRows;
-    };
</del><span class="cx">     Grid m_grid;
</span><span class="cx"> 
</span><span class="cx">     Vector&lt;LayoutUnit&gt; m_columnPositions;
</span></span></pre>
</div>
</div>

</body>
</html>