<!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>[189208] 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/189208">189208</a></dd>
<dt>Author</dt> <dd>jfernandez@igalia.com</dd>
<dt>Date</dt> <dd>2015-09-01 08:04:08 -0700 (Tue, 01 Sep 2015)</dd>
</dl>

<h3>Log Message</h3>
<pre>[CSS Grid Layout] Layout is wrong for flex factor sum between 0 and 1
https://bugs.webkit.org/show_bug.cgi?id=148645

Reviewed by Darin Adler.

Source/WebCore:

This patch ensures that we don't normalize the individual tracks
to fill the space. More precisely, when we sum up the flexes, that
tells us how many &quot;units&quot; of flex need to fit into the free
space. We then figure out what size to assign to the flex unit
based on that, and send that back to the individual items, sizing
them appropriately to their flex value.

This way we get flex fraction values applied correctly so they fill
the available space in the indicated proportion. This approach has
an additional advantage of dealing with division by 0 when reducing
automatically the flex value.

Test: fast/css-grid-layout/flex-factor-sum-less-than-1.html

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

LayoutTests:

Ensure we don't normalize individual tracks to fill the space, so
at least, the sum of flex values must be 1. We also needed to
modify the grid-element-shrink-to-fit to adapt it to the new
behavior of flex fraction units.

* fast/css-grid-layout/flex-factor-sum-less-than-1-expected.txt: Added.
* fast/css-grid-layout/flex-factor-sum-less-than-1.html: Added.
* fast/css-grid-layout/grid-element-shrink-to-fit.html:</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkLayoutTestsfastcssgridlayoutgridelementshrinktofithtml">trunk/LayoutTests/fast/css-grid-layout/grid-element-shrink-to-fit.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>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsfastcssgridlayoutflexfactorsumlessthan1expectedtxt">trunk/LayoutTests/fast/css-grid-layout/flex-factor-sum-less-than-1-expected.txt</a></li>
<li><a href="#trunkLayoutTestsfastcssgridlayoutflexfactorsumlessthan1html">trunk/LayoutTests/fast/css-grid-layout/flex-factor-sum-less-than-1.html</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (189207 => 189208)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2015-09-01 13:06:57 UTC (rev 189207)
+++ trunk/LayoutTests/ChangeLog        2015-09-01 15:04:08 UTC (rev 189208)
</span><span class="lines">@@ -1,3 +1,19 @@
</span><ins>+2015-09-01  Javier Fernandez  &lt;jfernandez@igalia.com&gt;
+
+        [CSS Grid Layout] Layout is wrong for flex factor sum between 0 and 1
+        https://bugs.webkit.org/show_bug.cgi?id=148645
+
+        Reviewed by Darin Adler.
+
+        Ensure we don't normalize individual tracks to fill the space, so
+        at least, the sum of flex values must be 1. We also needed to
+        modify the grid-element-shrink-to-fit to adapt it to the new
+        behavior of flex fraction units.
+
+        * fast/css-grid-layout/flex-factor-sum-less-than-1-expected.txt: Added.
+        * fast/css-grid-layout/flex-factor-sum-less-than-1.html: Added.
+        * fast/css-grid-layout/grid-element-shrink-to-fit.html:
+
</ins><span class="cx"> 2015-09-01  Gyuyoung Kim  &lt;gyuyoung.kim@webkit.org&gt;
</span><span class="cx"> 
</span><span class="cx">         Unreviewed EFL gardening. Skip new two tests which aren't supported by EFL port.
</span></span></pre></div>
<a id="trunkLayoutTestsfastcssgridlayoutflexfactorsumlessthan1expectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/css-grid-layout/flex-factor-sum-less-than-1-expected.txt (0 => 189208)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/css-grid-layout/flex-factor-sum-less-than-1-expected.txt                                (rev 0)
+++ trunk/LayoutTests/fast/css-grid-layout/flex-factor-sum-less-than-1-expected.txt        2015-09-01 15:04:08 UTC (rev 189208)
</span><span class="lines">@@ -0,0 +1,5 @@
</span><ins>+Test that resolving auto tracks on grid items works properly.
+
+PASS
+PASS
+PASS
</ins></span></pre></div>
<a id="trunkLayoutTestsfastcssgridlayoutflexfactorsumlessthan1html"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/css-grid-layout/flex-factor-sum-less-than-1.html (0 => 189208)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/css-grid-layout/flex-factor-sum-less-than-1.html                                (rev 0)
+++ trunk/LayoutTests/fast/css-grid-layout/flex-factor-sum-less-than-1.html        2015-09-01 15:04:08 UTC (rev 189208)
</span><span class="lines">@@ -0,0 +1,81 @@
</span><ins>+&lt;!DOCTYPE html&gt;
+&lt;html&gt;
+&lt;link href=&quot;resources/grid.css&quot; rel=&quot;stylesheet&quot;&gt;
+&lt;style&gt;
+.onlyColumnFractionFlexFactors {
+    -webkit-grid-template-columns: minmax(0,0.1fr) minmax(0,0.2fr) minmax(0,0.3fr);
+    -webkit-grid-template-rows: 50px;
+    width: 100px;
+}
+.onlyRowFractionFlexFactors {
+    -webkit-grid-template-columns: 50px;
+    -webkit-grid-template-rows: minmax(0,0.1fr) minmax(0,0.2fr) minmax(0,0.3fr);
+    width: 50px;
+    height: 100px;
+}
+.fixedAndfractionFlexFactors {
+    -webkit-grid-template-columns: 50px minmax(0,0.2fr) 30px;
+    -webkit-grid-template-rows: minmax(0,0.1fr) 50px minmax(0,0.3fr);
+    width: 100px;
+    height: 100px;
+}
+.firstRowThirdColumn {
+    background-color: yellow;
+    -webkit-grid-column: 3;
+    -webkit-grid-row: 1;
+}
+.secondRowThirdColumn {
+    background-color: yellow;
+    -webkit-grid-column: 3;
+    -webkit-grid-row: 2;
+}
+.thirdRowFirstColumn {
+    background-color: brown;
+    -webkit-grid-column: 1;
+    -webkit-grid-row: 3;
+}
+.thirdRowThirdColumn {
+    background-color: magenta;
+    -webkit-grid-column: 3;
+    -webkit-grid-row: 3;
+}
+&lt;/style&gt;
+&lt;script src=&quot;../../resources/check-layout.js&quot;&gt;&lt;/script&gt;
+&lt;body onload=&quot;checkLayout('.grid');&quot;&gt;
+
+&lt;p&gt;Test that resolving auto tracks on grid items works properly.&lt;/p&gt;
+
+&lt;div style=&quot;position: relative;&quot;&gt;
+    &lt;div class=&quot;grid onlyColumnFractionFlexFactors&quot;&gt;
+        &lt;div class=&quot;firstRowFirstColumn&quot; data-expected-width=&quot;10&quot; data-expected-height=&quot;50&quot;&gt;&lt;/div&gt;
+        &lt;div class=&quot;firstRowSecondColumn&quot; data-expected-width=&quot;20&quot; data-expected-height=&quot;50&quot;&gt;&lt;/div&gt;
+        &lt;div class=&quot;firstRowThirdColumn&quot; data-expected-width=&quot;30&quot; data-expected-height=&quot;50&quot;&gt;&lt;/div&gt;
+    &lt;/div&gt;
+&lt;/div&gt;
+
+&lt;div style=&quot;position: relative;&quot;&gt;
+    &lt;div class=&quot;grid onlyRowFractionFlexFactors&quot;&gt;
+        &lt;div class=&quot;firstRowFirstColumn&quot; data-expected-width=&quot;50&quot; data-expected-height=&quot;10&quot;&gt;&lt;/div&gt;
+        &lt;div class=&quot;secondRowFirstColumn&quot; data-expected-width=&quot;50&quot; data-expected-height=&quot;20&quot;&gt;&lt;/div&gt;
+        &lt;div class=&quot;thirdRowFirstColumn&quot; data-expected-width=&quot;50&quot; data-expected-height=&quot;30&quot;&gt;&lt;/div&gt;
+    &lt;/div&gt;
+&lt;/div&gt;
+
+&lt;div style=&quot;position: relative;&quot;&gt;
+    &lt;div class=&quot;grid fixedAndfractionFlexFactors&quot;&gt;
+        &lt;div class=&quot;firstRowFirstColumn&quot; data-expected-width=&quot;50&quot; data-expected-height=&quot;5&quot;&gt;&lt;/div&gt;
+        &lt;div class=&quot;firstRowSecondColumn&quot; data-expected-width=&quot;4&quot; data-expected-height=&quot;5&quot;&gt;&lt;/div&gt;
+        &lt;div class=&quot;firstRowThirdColumn&quot; data-expected-width=&quot;30&quot; data-expected-height=&quot;5&quot;&gt;&lt;/div&gt;
+        &lt;div class=&quot;secondRowFirstColumn&quot; data-expected-width=&quot;50&quot; data-expected-height=&quot;50&quot;&gt;&lt;/div&gt;
+        &lt;div class=&quot;secondRowSecondColumn&quot; data-expected-width=&quot;4&quot; data-expected-height=&quot;50&quot;&gt;&lt;/div&gt;
+        &lt;div class=&quot;secondRowThirdColumn&quot; data-expected-width=&quot;30&quot; data-expected-height=&quot;50&quot;&gt;&lt;/div&gt;
+        &lt;div class=&quot;thirdRowFirstColumn&quot; data-expected-width=&quot;50&quot; data-expected-height=&quot;15&quot;&gt;&lt;/div&gt;
+        &lt;div class=&quot;thirdRowSecondColumn&quot; data-expected-width=&quot;4&quot; data-expected-height=&quot;15&quot;&gt;&lt;/div&gt;
+        &lt;div class=&quot;thirdRowThirdColumn&quot; data-expected-width=&quot;30&quot; data-expected-height=&quot;15&quot;&gt;&lt;/div&gt;
+    &lt;/div&gt;
+&lt;/div&gt;
+
+&lt;/body&gt;
+&lt;/html&gt;
+
+
</ins></span></pre></div>
<a id="trunkLayoutTestsfastcssgridlayoutgridelementshrinktofithtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/css-grid-layout/grid-element-shrink-to-fit.html (189207 => 189208)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/css-grid-layout/grid-element-shrink-to-fit.html        2015-09-01 13:06:57 UTC (rev 189207)
+++ trunk/LayoutTests/fast/css-grid-layout/grid-element-shrink-to-fit.html        2015-09-01 15:04:08 UTC (rev 189208)
</span><span class="lines">@@ -4,7 +4,7 @@
</span><span class="cx"> &lt;style&gt;
</span><span class="cx"> .grid {
</span><span class="cx">     -webkit-grid-template-rows: 50px 50px;
</span><del>-    -webkit-grid-template-columns: 0.5fr 0.5fr;
</del><ins>+    -webkit-grid-template-columns: 1fr 1fr;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> .floatPos {
</span></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (189207 => 189208)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2015-09-01 13:06:57 UTC (rev 189207)
+++ trunk/Source/WebCore/ChangeLog        2015-09-01 15:04:08 UTC (rev 189208)
</span><span class="lines">@@ -1,3 +1,27 @@
</span><ins>+2015-09-01  Javier Fernandez  &lt;jfernandez@igalia.com&gt;
+
+        [CSS Grid Layout] Layout is wrong for flex factor sum between 0 and 1
+        https://bugs.webkit.org/show_bug.cgi?id=148645
+
+        Reviewed by Darin Adler.
+
+        This patch ensures that we don't normalize the individual tracks
+        to fill the space. More precisely, when we sum up the flexes, that
+        tells us how many &quot;units&quot; of flex need to fit into the free
+        space. We then figure out what size to assign to the flex unit
+        based on that, and send that back to the individual items, sizing
+        them appropriately to their flex value.
+
+        This way we get flex fraction values applied correctly so they fill
+        the available space in the indicated proportion. This approach has
+        an additional advantage of dealing with division by 0 when reducing
+        automatically the flex value.
+
+        Test: fast/css-grid-layout/flex-factor-sum-less-than-1.html
+
+        * rendering/RenderGrid.cpp:
+        (WebCore::RenderGrid::computeNormalizedFractionBreadth):
+
</ins><span class="cx"> 2015-08-31  Commit Queue  &lt;commit-queue@webkit.org&gt;
</span><span class="cx"> 
</span><span class="cx">         Unreviewed, rolling out r189198.
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderGridcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderGrid.cpp (189207 => 189208)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderGrid.cpp        2015-09-01 13:06:57 UTC (rev 189207)
+++ trunk/Source/WebCore/rendering/RenderGrid.cpp        2015-09-01 15:04:08 UTC (rev 189208)
</span><span class="lines">@@ -500,6 +500,11 @@
</span><span class="cx">         availableLogicalSpaceIgnoringFractionTracks += track.m_track-&gt;baseSize();
</span><span class="cx">     }
</span><span class="cx"> 
</span><ins>+    // Let flex factor sum be the sum of the flex factors of the flexible tracks. If this value
+    // is less than 1, set it to 1 instead.
+    if (accumulatedFractions &lt; 1)
+        return availableLogicalSpaceIgnoringFractionTracks;
+
</ins><span class="cx">     return availableLogicalSpaceIgnoringFractionTracks / accumulatedFractions;
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre>
</div>
</div>

</body>
</html>