<!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>[206310] 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/206310">206310</a></dd>
<dt>Author</dt> <dd>svillar@igalia.com</dd>
<dt>Date</dt> <dd>2016-09-23 09:29:43 -0700 (Fri, 23 Sep 2016)</dd>
</dl>

<h3>Log Message</h3>
<pre>[css-grid] ASSERT when sizing tracks with percentages inside calc
https://bugs.webkit.org/show_bug.cgi?id=162383

Reviewed by Darin Adler.

Source/WebCore:

There is an ASSERT to check that tracks are at least as wide as the initial base size. This
was added to verify that we never shrink tracks bellow that value. In order to compute the
value used for initialization we need a max size which is the value used to resolve
percentages to. The remaining free space was used to compute that value, that's totally
wrong because the free space decreases as the track sizing algorithm is run. The available
space should be used instead.

An extra ASSERT was removed too because it was redundant, we do always check the sizes of
the tracks after running the track sizing algorithm and that's precisely the unique point
were they could be modified.

Test: fast/css-grid-layout/tracks-wider-min-track-breadth-crash.html

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

LayoutTests:

* fast/css-grid-layout/tracks-wider-min-track-breadth-crash-expected.txt: Added.
* fast/css-grid-layout/tracks-wider-min-track-breadth-crash.html: Added.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</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>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsfastcssgridlayouttrackswidermintrackbreadthcrashexpectedtxt">trunk/LayoutTests/fast/css-grid-layout/tracks-wider-min-track-breadth-crash-expected.txt</a></li>
<li><a href="#trunkLayoutTestsfastcssgridlayouttrackswidermintrackbreadthcrashhtml">trunk/LayoutTests/fast/css-grid-layout/tracks-wider-min-track-breadth-crash.html</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (206309 => 206310)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2016-09-23 16:25:42 UTC (rev 206309)
+++ trunk/LayoutTests/ChangeLog        2016-09-23 16:29:43 UTC (rev 206310)
</span><span class="lines">@@ -1,3 +1,13 @@
</span><ins>+2016-09-22  Sergio Villar Senin  &lt;svillar@igalia.com&gt;
+
+        [css-grid] ASSERT when sizing tracks with percentages inside calc
+        https://bugs.webkit.org/show_bug.cgi?id=162383
+
+        Reviewed by Darin Adler.
+
+        * fast/css-grid-layout/tracks-wider-min-track-breadth-crash-expected.txt: Added.
+        * fast/css-grid-layout/tracks-wider-min-track-breadth-crash.html: Added.
+
</ins><span class="cx"> 2016-09-23  Chris Dumez  &lt;cdumez@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         document.title getter does not strip / collapse the right whitespace characters
</span></span></pre></div>
<a id="trunkLayoutTestsfastcssgridlayouttrackswidermintrackbreadthcrashexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/css-grid-layout/tracks-wider-min-track-breadth-crash-expected.txt (0 => 206310)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/css-grid-layout/tracks-wider-min-track-breadth-crash-expected.txt                                (rev 0)
+++ trunk/LayoutTests/fast/css-grid-layout/tracks-wider-min-track-breadth-crash-expected.txt        2016-09-23 16:29:43 UTC (rev 206310)
</span><span class="lines">@@ -0,0 +1,3 @@
</span><ins>+The test PASS if it does not trigger an ASSERT on Debug builds.
+
+
</ins><span class="cx">Property changes on: trunk/LayoutTests/fast/css-grid-layout/tracks-wider-min-track-breadth-crash-expected.txt
</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="trunkLayoutTestsfastcssgridlayouttrackswidermintrackbreadthcrashhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/css-grid-layout/tracks-wider-min-track-breadth-crash.html (0 => 206310)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/css-grid-layout/tracks-wider-min-track-breadth-crash.html                                (rev 0)
+++ trunk/LayoutTests/fast/css-grid-layout/tracks-wider-min-track-breadth-crash.html        2016-09-23 16:29:43 UTC (rev 206310)
</span><span class="lines">@@ -0,0 +1,15 @@
</span><ins>+&lt;!DOCTYPE HTML&gt;
+&lt;link href='resources/grid.css' rel='stylesheet'&gt;
+&lt;style&gt;
+.grid {
+  height: 100px;
+  grid-template-rows: calc(10px - 5%);
+}
+&lt;/style&gt;
+&lt;script&gt;
+if (window.testRunner)
+    testRunner.dumpAsText();
+&lt;/script&gt;
+
+&lt;p&gt;The test PASS if it does not trigger an ASSERT on Debug builds.&lt;/p&gt;
+&lt;div class=&quot;grid&quot;&gt;&lt;/div&gt;
</ins><span class="cx">Property changes on: trunk/LayoutTests/fast/css-grid-layout/tracks-wider-min-track-breadth-crash.html
</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="svnmimetype"></a>
<div class="addfile"><h4>Added: svn:mime-type</h4></div>
<ins>+text/html
</ins><span class="cx">\ No newline at end of property
</span><a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (206309 => 206310)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2016-09-23 16:25:42 UTC (rev 206309)
+++ trunk/Source/WebCore/ChangeLog        2016-09-23 16:29:43 UTC (rev 206310)
</span><span class="lines">@@ -1,3 +1,26 @@
</span><ins>+2016-09-22  Sergio Villar Senin  &lt;svillar@igalia.com&gt;
+
+        [css-grid] ASSERT when sizing tracks with percentages inside calc
+        https://bugs.webkit.org/show_bug.cgi?id=162383
+
+        Reviewed by Darin Adler.
+
+        There is an ASSERT to check that tracks are at least as wide as the initial base size. This
+        was added to verify that we never shrink tracks bellow that value. In order to compute the
+        value used for initialization we need a max size which is the value used to resolve
+        percentages to. The remaining free space was used to compute that value, that's totally
+        wrong because the free space decreases as the track sizing algorithm is run. The available
+        space should be used instead.
+
+        An extra ASSERT was removed too because it was redundant, we do always check the sizes of
+        the tracks after running the track sizing algorithm and that's precisely the unique point
+        were they could be modified.
+
+        Test: fast/css-grid-layout/tracks-wider-min-track-breadth-crash.html
+
+        * rendering/RenderGrid.cpp:
+        (WebCore::RenderGrid::tracksAreWiderThanMinTrackBreadth):
+
</ins><span class="cx"> 2016-09-23  Chris Dumez  &lt;cdumez@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         document.title getter does not strip / collapse the right whitespace characters
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderGridcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderGrid.cpp (206309 => 206310)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderGrid.cpp        2016-09-23 16:25:42 UTC (rev 206309)
+++ trunk/Source/WebCore/rendering/RenderGrid.cpp        2016-09-23 16:29:43 UTC (rev 206310)
</span><span class="lines">@@ -630,7 +630,6 @@
</span><span class="cx"> void RenderGrid::computeIntrinsicLogicalHeight(GridSizingData&amp; sizingData)
</span><span class="cx"> {
</span><span class="cx">     ASSERT(sizingData.isValidTransition(ForRows));
</span><del>-    ASSERT(tracksAreWiderThanMinTrackBreadth(ForColumns, sizingData));
</del><span class="cx">     sizingData.setAvailableSpace(Nullopt);
</span><span class="cx">     sizingData.setFreeSpace(ForRows, Nullopt);
</span><span class="cx">     sizingData.sizingOperation = IntrinsicSizeComputation;
</span><span class="lines">@@ -1439,7 +1438,7 @@
</span><span class="cx"> bool RenderGrid::tracksAreWiderThanMinTrackBreadth(GridTrackSizingDirection direction, GridSizingData&amp; sizingData)
</span><span class="cx"> {
</span><span class="cx">     const Vector&lt;GridTrack&gt;&amp; tracks = (direction == ForColumns) ? sizingData.columnTracks : sizingData.rowTracks;
</span><del>-    const LayoutUnit maxSize = sizingData.freeSpace(direction).valueOr(0);
</del><ins>+    const LayoutUnit maxSize = sizingData.availableSpace().valueOr(0);
</ins><span class="cx">     for (unsigned i = 0; i &lt; tracks.size(); ++i) {
</span><span class="cx">         const GridTrackSize&amp; trackSize = gridTrackSize(direction, i, sizingData.sizingOperation);
</span><span class="cx">         if (computeUsedBreadthOfMinLength(trackSize, maxSize) &gt; tracks[i].baseSize())
</span></span></pre>
</div>
</div>

</body>
</html>