<!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>[205954] trunk</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/205954">205954</a></dd>
<dt>Author</dt> <dd>svillar@igalia.com</dd>
<dt>Date</dt> <dd>2016-09-15 00:40:20 -0700 (Thu, 15 Sep 2016)</dd>
</dl>

<h3>Log Message</h3>
<pre>[css-grid] Too many gaps with trailing collapsing tracks
https://bugs.webkit.org/show_bug.cgi?id=161905

Reviewed by Darin Adler.

Source/WebCore:

The total number and size of gaps were incorrectly computed whenever there were trailing
collapsed tracks (with collapsed gaps). The problem was that we were trying to optimize too
much the amount of hash table queries required to know the gaps between two lines. We were
considering that a gap always exist between 2 consecutive tracks if the first one is not
empty. That's generally true (for both NOTEMPTY|NOTEMPTY and NOTEMPTY|EMPTY+|NOTEMPTY
sequences) but not for all the cases (NOTEMPTY|EMPTY+).

* rendering/RenderGrid.cpp:
(WebCore::RenderGrid::guttersSize):

LayoutTests:

Added new test cases to check that trailing collapsed tracks do not add gutters at the end.

* fast/css-grid-layout/grid-auto-fit-columns-expected.txt:
* fast/css-grid-layout/grid-auto-fit-columns.html:</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkLayoutTestsfastcssgridlayoutgridautofitcolumnsexpectedtxt">trunk/LayoutTests/fast/css-grid-layout/grid-auto-fit-columns-expected.txt</a></li>
<li><a href="#trunkLayoutTestsfastcssgridlayoutgridautofitcolumnshtml">trunk/LayoutTests/fast/css-grid-layout/grid-auto-fit-columns.html</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderGridcpp">trunk/Source/WebCore/rendering/RenderGrid.cpp</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (205953 => 205954)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2016-09-15 07:21:18 UTC (rev 205953)
+++ trunk/LayoutTests/ChangeLog        2016-09-15 07:40:20 UTC (rev 205954)
</span><span class="lines">@@ -1,3 +1,15 @@
</span><ins>+2016-09-13  Sergio Villar Senin  &lt;svillar@igalia.com&gt;
+
+        [css-grid] Too many gaps with trailing collapsing tracks
+        https://bugs.webkit.org/show_bug.cgi?id=161905
+
+        Reviewed by Darin Adler.
+
+        Added new test cases to check that trailing collapsed tracks do not add gutters at the end.
+
+        * fast/css-grid-layout/grid-auto-fit-columns-expected.txt:
+        * fast/css-grid-layout/grid-auto-fit-columns.html:
+
</ins><span class="cx"> 2016-09-15  Youenn Fablet  &lt;youenn@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         callPromiseFunction should be made usable for custom binding code
</span></span></pre></div>
<a id="trunkLayoutTestsfastcssgridlayoutgridautofitcolumnsexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/css-grid-layout/grid-auto-fit-columns-expected.txt (205953 => 205954)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/css-grid-layout/grid-auto-fit-columns-expected.txt        2016-09-15 07:21:18 UTC (rev 205953)
+++ trunk/LayoutTests/fast/css-grid-layout/grid-auto-fit-columns-expected.txt        2016-09-15 07:40:20 UTC (rev 205954)
</span><span class="lines">@@ -29,3 +29,5 @@
</span><span class="cx"> PASS
</span><span class="cx"> PASS
</span><span class="cx"> PASS
</span><ins>+PASS
+PASS
</ins></span></pre></div>
<a id="trunkLayoutTestsfastcssgridlayoutgridautofitcolumnshtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/css-grid-layout/grid-auto-fit-columns.html (205953 => 205954)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/css-grid-layout/grid-auto-fit-columns.html        2016-09-15 07:21:18 UTC (rev 205953)
+++ trunk/LayoutTests/fast/css-grid-layout/grid-auto-fit-columns.html        2016-09-15 07:40:20 UTC (rev 205954)
</span><span class="lines">@@ -18,6 +18,7 @@
</span><span class="cx"> .gridAutoRepeatAndFixed { grid-template-columns: [start] repeat(2, 50px [a]) [middle] repeat(auto-fit, [autofoo] 15px [autobar]) minmax(5%, 10%) [end]; }
</span><span class="cx"> .gridMultipleNames { grid-template-columns: [start] 20px [foo] 50% repeat(auto-fit, [bar] 20px [start foo]) [foo] 10% [end bar]; }
</span><span class="cx"> .gridMultipleTracks { grid-template-columns: [start] 20px repeat(auto-fit, [a] 2em [b c] 10% [d]) [e] minmax(75px, 1fr) [last]; }
</span><ins>+.gridMinMaxFixedFlex { grid-template-columns: repeat(auto-fit, minmax(50px, 1fr)); }
</ins><span class="cx"> 
</span><span class="cx"> .item { background-color: cyan; }
</span><span class="cx"> .item:nth-child(2n) { background-color: green; }
</span><span class="lines">@@ -150,4 +151,13 @@
</span><span class="cx">     &lt;div class=&quot;item&quot; style=&quot;grid-column: c / -1;&quot;  data-offset-x=&quot;40&quot; data-offset-y=&quot;0&quot; data-expected-width=&quot;160&quot; data-expected-height=&quot;25&quot;&gt;&lt;/div&gt;
</span><span class="cx"> &lt;/div&gt;
</span><span class="cx"> 
</span><ins>+&lt;div class=&quot;grid gridMinMaxFixedFlex gap&quot;&gt;
+    &lt;div class=&quot;item&quot; style=&quot;grid-column-start: 1&quot; data-offset-x=&quot;0&quot; data-offset-y=&quot;0&quot; data-expected-width=&quot;200&quot; data-expected-height=&quot;25&quot;&gt;&lt;/div&gt;
+&lt;/div&gt;
+
+&lt;div class=&quot;grid gridMinMaxFixedFlex gap&quot;&gt;
+    &lt;div class=&quot;item&quot; style=&quot;grid-column-start: 1&quot; data-offset-x=&quot;0&quot; data-offset-y=&quot;0&quot; data-expected-width=&quot;90&quot; data-expected-height=&quot;25&quot;&gt;&lt;/div&gt;
+    &lt;div class=&quot;item&quot; style=&quot;grid-column-start: 2&quot; data-offset-x=&quot;110&quot; data-offset-y=&quot;0&quot; data-expected-width=&quot;90&quot; data-expected-height=&quot;25&quot;&gt;&lt;/div&gt;
+&lt;/div&gt;
+
</ins><span class="cx"> &lt;/body&gt;
</span></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (205953 => 205954)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2016-09-15 07:21:18 UTC (rev 205953)
+++ trunk/Source/WebCore/ChangeLog        2016-09-15 07:40:20 UTC (rev 205954)
</span><span class="lines">@@ -1,3 +1,20 @@
</span><ins>+2016-09-13  Sergio Villar Senin  &lt;svillar@igalia.com&gt;
+
+        [css-grid] Too many gaps with trailing collapsing tracks
+        https://bugs.webkit.org/show_bug.cgi?id=161905
+
+        Reviewed by Darin Adler.
+
+        The total number and size of gaps were incorrectly computed whenever there were trailing
+        collapsed tracks (with collapsed gaps). The problem was that we were trying to optimize too
+        much the amount of hash table queries required to know the gaps between two lines. We were
+        considering that a gap always exist between 2 consecutive tracks if the first one is not
+        empty. That's generally true (for both NOTEMPTY|NOTEMPTY and NOTEMPTY|EMPTY+|NOTEMPTY
+        sequences) but not for all the cases (NOTEMPTY|EMPTY+).
+
+        * rendering/RenderGrid.cpp:
+        (WebCore::RenderGrid::guttersSize):
+
</ins><span class="cx"> 2016-09-15  Youenn Fablet  &lt;youenn@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         callPromiseFunction should be made usable for custom binding code
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderGridcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderGrid.cpp (205953 => 205954)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderGrid.cpp        2016-09-15 07:21:18 UTC (rev 205953)
+++ trunk/Source/WebCore/rendering/RenderGrid.cpp        2016-09-15 07:40:20 UTC (rev 205954)
</span><span class="lines">@@ -546,6 +546,12 @@
</span><span class="cx">             gapAccumulator += gap;
</span><span class="cx">     }
</span><span class="cx"> 
</span><ins>+    // The above loop adds one extra gap for trailing collapsed tracks.
+    if (gapAccumulator &amp;&amp; isEmptyAutoRepeatTrack(direction, endLine - 1)) {
+        ASSERT(gapAccumulator &gt;= gap);
+        gapAccumulator -= gap;
+    }
+
</ins><span class="cx">     // If the startLine is the start line of a collapsed track we need to go backwards till we reach
</span><span class="cx">     // a non collapsed track. If we find a non collapsed track we need to add that gap.
</span><span class="cx">     if (startLine &amp;&amp; isEmptyAutoRepeatTrack(direction, startLine)) {
</span></span></pre>
</div>
</div>

</body>
</html>