<!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>[210120] 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/210120">210120</a></dd>
<dt>Author</dt> <dd>zalan@apple.com</dd>
<dt>Date</dt> <dd>2016-12-22 15:48:53 -0800 (Thu, 22 Dec 2016)</dd>
</dl>

<h3>Log Message</h3>
<pre>Do not destroy the RenderNamedFlowFragment as leftover anonymous block.
https://bugs.webkit.org/show_bug.cgi?id=166436
rdar://problem/29772233

Reviewed by Simon Fraser.

Source/WebCore:

When as the result of certain style change, the generated anonymous block is not needed anymore, we
move its descendants up to the parent and destroy the generated box. While RenderNamedFlowFragment is a generated
block, the cleanup code should just ignore it the same way we ignore boxes like multicolumn, mathml etc.

Test: fast/regions/flow-fragment-as-anonymous-block-crash.html

* rendering/RenderObject.h:
(WebCore::RenderObject::isAnonymousBlock):

LayoutTests:

* fast/regions/flow-fragment-as-anonymous-block-crash-expected.txt: Added.
* fast/regions/flow-fragment-as-anonymous-block-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="#trunkSourceWebCorerenderingRenderObjecth">trunk/Source/WebCore/rendering/RenderObject.h</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsfastregionsflowfragmentasanonymousblockcrashexpectedtxt">trunk/LayoutTests/fast/regions/flow-fragment-as-anonymous-block-crash-expected.txt</a></li>
<li><a href="#trunkLayoutTestsfastregionsflowfragmentasanonymousblockcrashhtml">trunk/LayoutTests/fast/regions/flow-fragment-as-anonymous-block-crash.html</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (210119 => 210120)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2016-12-22 23:23:51 UTC (rev 210119)
+++ trunk/LayoutTests/ChangeLog        2016-12-22 23:48:53 UTC (rev 210120)
</span><span class="lines">@@ -1,3 +1,14 @@
</span><ins>+2016-12-22  Zalan Bujtas  &lt;zalan@apple.com&gt;
+
+        Do not destroy the RenderNamedFlowFragment as leftover anonymous block.
+        https://bugs.webkit.org/show_bug.cgi?id=166436
+        rdar://problem/29772233
+
+        Reviewed by Simon Fraser.
+
+        * fast/regions/flow-fragment-as-anonymous-block-crash-expected.txt: Added.
+        * fast/regions/flow-fragment-as-anonymous-block-crash.html: Added.
+
</ins><span class="cx"> 2016-12-22  Wenson Hsieh  &lt;wenson_hsieh@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         CSS Scroll Snap does not work if scrollbar is hidden
</span></span></pre></div>
<a id="trunkLayoutTestsfastregionsflowfragmentasanonymousblockcrashexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/regions/flow-fragment-as-anonymous-block-crash-expected.txt (0 => 210120)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/regions/flow-fragment-as-anonymous-block-crash-expected.txt                                (rev 0)
+++ trunk/LayoutTests/fast/regions/flow-fragment-as-anonymous-block-crash-expected.txt        2016-12-22 23:48:53 UTC (rev 210120)
</span><span class="lines">@@ -0,0 +1,2 @@
</span><ins>+PASS if no crash or assert.
+
</ins></span></pre></div>
<a id="trunkLayoutTestsfastregionsflowfragmentasanonymousblockcrashhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/regions/flow-fragment-as-anonymous-block-crash.html (0 => 210120)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/regions/flow-fragment-as-anonymous-block-crash.html                                (rev 0)
+++ trunk/LayoutTests/fast/regions/flow-fragment-as-anonymous-block-crash.html        2016-12-22 23:48:53 UTC (rev 210120)
</span><span class="lines">@@ -0,0 +1,31 @@
</span><ins>+&lt;!DOCTYPE html&gt;
+&lt;html&gt;
+&lt;head&gt;
+&lt;title&gt;This tests that we don't destroy the fragment anonymous block while cleaning up the render tree.&lt;/title&gt; 
+&lt;style&gt;
+li { 
+  -webkit-flow-from: foobar;
+}
+
+q {
+  display: list-item;
+  -webkit-flow-from: foobar;
+}
+
+.fuzz0::before{
+  display: block;
+}
+&lt;/style&gt;
+&lt;/head&gt;
+&lt;body&gt;
+PASS if no crash or assert.
+&lt;li&gt;&lt;/li&gt;&lt;q&gt;&lt;/q&gt;
+&lt;script&gt;
+if (window.testRunner)
+  testRunner.dumpAsText();
+document.body.offsetHeight;
+document.getElementsByTagName(&quot;q&quot;)[0].className = &quot;fuzz0&quot;;
+document.body.offsetHeight;
+&lt;/script&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (210119 => 210120)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2016-12-22 23:23:51 UTC (rev 210119)
+++ trunk/Source/WebCore/ChangeLog        2016-12-22 23:48:53 UTC (rev 210120)
</span><span class="lines">@@ -1,3 +1,20 @@
</span><ins>+2016-12-22  Zalan Bujtas  &lt;zalan@apple.com&gt;
+
+        Do not destroy the RenderNamedFlowFragment as leftover anonymous block.
+        https://bugs.webkit.org/show_bug.cgi?id=166436
+        rdar://problem/29772233
+
+        Reviewed by Simon Fraser.
+
+        When as the result of certain style change, the generated anonymous block is not needed anymore, we
+        move its descendants up to the parent and destroy the generated box. While RenderNamedFlowFragment is a generated
+        block, the cleanup code should just ignore it the same way we ignore boxes like multicolumn, mathml etc. 
+
+        Test: fast/regions/flow-fragment-as-anonymous-block-crash.html
+
+        * rendering/RenderObject.h:
+        (WebCore::RenderObject::isAnonymousBlock):
+
</ins><span class="cx"> 2016-12-22  Wenson Hsieh  &lt;wenson_hsieh@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         CSS Scroll Snap does not work if scrollbar is hidden
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderObjecth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderObject.h (210119 => 210120)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderObject.h        2016-12-22 23:23:51 UTC (rev 210119)
+++ trunk/Source/WebCore/rendering/RenderObject.h        2016-12-22 23:48:53 UTC (rev 210120)
</span><span class="lines">@@ -410,7 +410,7 @@
</span><span class="cx">         // RenderBlock::createAnonymousBlock(). This includes creating an anonymous
</span><span class="cx">         // RenderBlock having a BLOCK or BOX display. Other classes such as RenderTextFragment
</span><span class="cx">         // are not RenderBlocks and will return false. See https://bugs.webkit.org/show_bug.cgi?id=56709. 
</span><del>-        return isAnonymous() &amp;&amp; (style().display() == BLOCK || style().display() == BOX) &amp;&amp; style().styleType() == NOPSEUDO &amp;&amp; isRenderBlock() &amp;&amp; !isListMarker() &amp;&amp; !isRenderFlowThread() &amp;&amp; !isRenderMultiColumnSet() &amp;&amp; !isRenderView()
</del><ins>+        return isAnonymous() &amp;&amp; (style().display() == BLOCK || style().display() == BOX) &amp;&amp; style().styleType() == NOPSEUDO &amp;&amp; isRenderBlock() &amp;&amp; !isListMarker() &amp;&amp; !isRenderFlowThread() &amp;&amp; !isRenderNamedFlowFragment() &amp;&amp; !isRenderMultiColumnSet() &amp;&amp; !isRenderView()
</ins><span class="cx"> #if ENABLE(FULLSCREEN_API)
</span><span class="cx">             &amp;&amp; !isRenderFullScreen()
</span><span class="cx">             &amp;&amp; !isRenderFullScreenPlaceholder()
</span></span></pre>
</div>
</div>

</body>
</html>