<!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>[194558] 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/194558">194558</a></dd>
<dt>Author</dt> <dd>svillar@igalia.com</dd>
<dt>Date</dt> <dd>2016-01-04 14:43:41 -0800 (Mon, 04 Jan 2016)</dd>
</dl>

<h3>Log Message</h3>
<pre>REGRESSION(<a href="http://trac.webkit.org/projects/webkit/changeset/194143">r194143</a>): Float width incorrectly calculated on Wikipedia
https://bugs.webkit.org/show_bug.cgi?id=152644

Reviewed by Myles C. Maxfield.

Source/WebCore:

The min/max-content contribution computation for non replaced
blocks changed in <a href="http://trac.webkit.org/projects/webkit/changeset/194143">r194143</a>. The implementation was actually
more complex than it should be and actually incomplete as it
was not considering the case of out of flow elements (because
it was directly calling computeLogicalWidthInRegion()).

This new implementation simplifies a lot the code and makes it
more complete as it relies on min|maxPreferredLogicalWidth()
calls which already consider all the different types of boxes.

Test: fast/css-intrinsic-dimensions/inlinesize-contribution-floats.html

* rendering/RenderBlock.cpp:
(WebCore::RenderBlock::computeBlockPreferredLogicalWidths):

LayoutTests:

* fast/css-intrinsic-dimensions/inlinesize-contribution-floats-expected.html: Added.
* fast/css-intrinsic-dimensions/inlinesize-contribution-floats.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="#trunkSourceWebCorerenderingRenderBlockcpp">trunk/Source/WebCore/rendering/RenderBlock.cpp</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsfastcssintrinsicdimensionsinlinesizecontributionfloatsexpectedhtml">trunk/LayoutTests/fast/css-intrinsic-dimensions/inlinesize-contribution-floats-expected.html</a></li>
<li><a href="#trunkLayoutTestsfastcssintrinsicdimensionsinlinesizecontributionfloatshtml">trunk/LayoutTests/fast/css-intrinsic-dimensions/inlinesize-contribution-floats.html</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (194557 => 194558)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2016-01-04 22:42:20 UTC (rev 194557)
+++ trunk/LayoutTests/ChangeLog        2016-01-04 22:43:41 UTC (rev 194558)
</span><span class="lines">@@ -1,3 +1,13 @@
</span><ins>+2016-01-04  Sergio Villar Senin  &lt;svillar@igalia.com&gt;
+
+        REGRESSION(r194143): Float width incorrectly calculated on Wikipedia
+        https://bugs.webkit.org/show_bug.cgi?id=152644
+
+        Reviewed by Myles C. Maxfield.
+
+        * fast/css-intrinsic-dimensions/inlinesize-contribution-floats-expected.html: Added.
+        * fast/css-intrinsic-dimensions/inlinesize-contribution-floats.html: Added.
+
</ins><span class="cx"> 2016-01-04  David Hyatt  &lt;hyatt@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         word-wrap: break-word broken inside a flexbox
</span></span></pre></div>
<a id="trunkLayoutTestsfastcssintrinsicdimensionsinlinesizecontributionfloatsexpectedhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/css-intrinsic-dimensions/inlinesize-contribution-floats-expected.html (0 => 194558)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/css-intrinsic-dimensions/inlinesize-contribution-floats-expected.html                                (rev 0)
+++ trunk/LayoutTests/fast/css-intrinsic-dimensions/inlinesize-contribution-floats-expected.html        2016-01-04 22:43:41 UTC (rev 194558)
</span><span class="lines">@@ -0,0 +1,5 @@
</span><ins>+&lt;!DOCTYPE html&gt;
+
+&lt;div style=&quot;word-wrap: break-word; max-width: 100%; width: 222px;&quot;&gt;
+    The test PASS if this text is rendered horizontally.
+&lt;/div&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsfastcssintrinsicdimensionsinlinesizecontributionfloatshtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/css-intrinsic-dimensions/inlinesize-contribution-floats.html (0 => 194558)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/css-intrinsic-dimensions/inlinesize-contribution-floats.html                                (rev 0)
+++ trunk/LayoutTests/fast/css-intrinsic-dimensions/inlinesize-contribution-floats.html        2016-01-04 22:43:41 UTC (rev 194558)
</span><span class="lines">@@ -0,0 +1,7 @@
</span><ins>+&lt;!DOCTYPE html&gt;
+
+&lt;div style=&quot;float:left;&quot;&gt;
+    &lt;div style=&quot;word-wrap: break-word; max-width: 100%; width: 222px;&quot;&gt;
+        The test PASS if this text is rendered horizontally.
+    &lt;/div&gt;
+&lt;/div&gt;
</ins></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (194557 => 194558)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2016-01-04 22:42:20 UTC (rev 194557)
+++ trunk/Source/WebCore/ChangeLog        2016-01-04 22:43:41 UTC (rev 194558)
</span><span class="lines">@@ -1,3 +1,25 @@
</span><ins>+2016-01-04  Sergio Villar Senin  &lt;svillar@igalia.com&gt;
+
+        REGRESSION(r194143): Float width incorrectly calculated on Wikipedia
+        https://bugs.webkit.org/show_bug.cgi?id=152644
+
+        Reviewed by Myles C. Maxfield.
+
+        The min/max-content contribution computation for non replaced
+        blocks changed in r194143. The implementation was actually
+        more complex than it should be and actually incomplete as it
+        was not considering the case of out of flow elements (because
+        it was directly calling computeLogicalWidthInRegion()).
+
+        This new implementation simplifies a lot the code and makes it
+        more complete as it relies on min|maxPreferredLogicalWidth()
+        calls which already consider all the different types of boxes.
+
+        Test: fast/css-intrinsic-dimensions/inlinesize-contribution-floats.html
+
+        * rendering/RenderBlock.cpp:
+        (WebCore::RenderBlock::computeBlockPreferredLogicalWidths):
+
</ins><span class="cx"> 2016-01-04  David Hyatt  &lt;hyatt@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         word-wrap: break-word broken inside a flexbox
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderBlockcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderBlock.cpp (194557 => 194558)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderBlock.cpp        2016-01-04 22:42:20 UTC (rev 194557)
+++ trunk/Source/WebCore/rendering/RenderBlock.cpp        2016-01-04 22:43:41 UTC (rev 194558)
</span><span class="lines">@@ -2751,26 +2751,15 @@
</span><span class="cx">             childBox.computeLogicalHeight(childBox.borderAndPaddingLogicalHeight(), 0, computedValues);
</span><span class="cx">             childMinPreferredLogicalWidth = childMaxPreferredLogicalWidth = computedValues.m_extent;
</span><span class="cx">         } else {
</span><del>-            if (is&lt;RenderBlock&gt;(*child) &amp;&amp; !is&lt;RenderTable&gt;(*child)) {
</del><ins>+            childMinPreferredLogicalWidth = child-&gt;minPreferredLogicalWidth();
+            childMaxPreferredLogicalWidth = child-&gt;maxPreferredLogicalWidth();
+
+            if (is&lt;RenderBlock&gt;(*child)) {
</ins><span class="cx">                 const Length&amp; computedInlineSize = child-&gt;style().logicalWidth();
</span><del>-                if (computedInlineSize.isFitContent() || computedInlineSize.isFillAvailable() || computedInlineSize.isAuto()
-                    || computedInlineSize.isPercentOrCalculated()) {
-                    // FIXME: we could do a lot better for percents (we're considering them always indefinite)
-                    // but we need https://bugs.webkit.org/show_bug.cgi?id=152262 to be fixed first
-                    childMinPreferredLogicalWidth = child-&gt;minPreferredLogicalWidth();
-                    childMaxPreferredLogicalWidth = child-&gt;maxPreferredLogicalWidth();
-                } else {
-                    ASSERT(computedInlineSize.isMinContent() || computedInlineSize.isMaxContent() || computedInlineSize.isFixed());
-                    LogicalExtentComputedValues computedValues;
-                    downcast&lt;RenderBlock&gt;(*child).computeLogicalWidthInRegion(computedValues);
-                    childMinPreferredLogicalWidth = childMaxPreferredLogicalWidth = computedValues.m_extent;
-                    child-&gt;setPreferredLogicalWidthsDirty(false);
-                }
-            } else {
-                // FIXME: we leave the original implementation as default fallback. Still need to specialcase
-                // some other situations: https://drafts.csswg.org/css-sizing/#intrinsic
-                childMinPreferredLogicalWidth = child-&gt;minPreferredLogicalWidth();
-                childMaxPreferredLogicalWidth = child-&gt;maxPreferredLogicalWidth();
</del><ins>+                if (computedInlineSize.isMaxContent())
+                    childMinPreferredLogicalWidth = childMaxPreferredLogicalWidth;
+                else if (computedInlineSize.isMinContent())
+                    childMaxPreferredLogicalWidth = childMinPreferredLogicalWidth;
</ins><span class="cx">             }
</span><span class="cx">         }
</span><span class="cx"> 
</span></span></pre>
</div>
</div>

</body>
</html>