<!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>[208648] 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/208648">208648</a></dd>
<dt>Author</dt> <dd>commit-queue@webkit.org</dd>
<dt>Date</dt> <dd>2016-11-12 06:50:50 -0800 (Sat, 12 Nov 2016)</dd>
</dl>

<h3>Log Message</h3>
<pre>Ensure MathML render tree are clean by the end of FrameView::layout().
https://bugs.webkit.org/show_bug.cgi?id=162824

Patch by Frederic Wang &lt;fwang@igalia.com&gt; on 2016-11-12
Reviewed by Darin Adler.

Source/WebCore:

clearNeedsLayout is not called during the layout of invalid MathML markup. We introduce a new
helper function to perform proper layout of such markup and we now call it from the various
MathML layoutBlock functions. Additionally, we ensure that the preferred width is dirty after
computation in RenderMathMLScripts::computePreferredLogicalWidths.

Test: mathml/invalid-markup.html

* rendering/mathml/RenderMathMLBlock.cpp:
(WebCore::RenderMathMLBlock::layoutInvalidMarkup): Helper function to layout invalid markup.
* rendering/mathml/RenderMathMLBlock.h: Declare layoutInvalidMarkup.
* rendering/mathml/RenderMathMLFraction.cpp:
(WebCore::RenderMathMLFraction::layoutBlock): Call layoutInvalidMarkup.
* rendering/mathml/RenderMathMLRoot.cpp:
(WebCore::RenderMathMLRoot::layoutBlock): Ditto.
* rendering/mathml/RenderMathMLScripts.cpp:
(WebCore::RenderMathMLScripts::computePreferredLogicalWidths): Set the preferred width dirty
after computation to avoid that it is computed again and again.
(WebCore::RenderMathMLScripts::layoutBlock): Call layoutInvalidMarkup.
* rendering/mathml/RenderMathMLUnderOver.cpp:
(WebCore::RenderMathMLUnderOver::layoutBlock): Ditto.

LayoutTests:

* mathml/invalid-markup-expected.txt: Added.
* mathml/invalid-markup.html: Added.
* mathml/mn-as-list-item-assert-expected.txt: Update text expectation now that invalid
subtree appears in the output.
* mathml/msubsup-fuzz-expected.txt: Ditto.
* accessibility/mac/mathml-multiscript.txt: Ditto.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkLayoutTestsaccessibilitymacmathmlmultiscriptexpectedtxt">trunk/LayoutTests/accessibility/mac/mathml-multiscript-expected.txt</a></li>
<li><a href="#trunkLayoutTestsmathmlmnaslistitemassertexpectedtxt">trunk/LayoutTests/mathml/mn-as-list-item-assert-expected.txt</a></li>
<li><a href="#trunkLayoutTestsmathmlmsubsupfuzzexpectedtxt">trunk/LayoutTests/mathml/msubsup-fuzz-expected.txt</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCorerenderingmathmlRenderMathMLBlockcpp">trunk/Source/WebCore/rendering/mathml/RenderMathMLBlock.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingmathmlRenderMathMLBlockh">trunk/Source/WebCore/rendering/mathml/RenderMathMLBlock.h</a></li>
<li><a href="#trunkSourceWebCorerenderingmathmlRenderMathMLFractioncpp">trunk/Source/WebCore/rendering/mathml/RenderMathMLFraction.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingmathmlRenderMathMLRootcpp">trunk/Source/WebCore/rendering/mathml/RenderMathMLRoot.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingmathmlRenderMathMLScriptscpp">trunk/Source/WebCore/rendering/mathml/RenderMathMLScripts.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingmathmlRenderMathMLUnderOvercpp">trunk/Source/WebCore/rendering/mathml/RenderMathMLUnderOver.cpp</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsmathmlinvalidmarkupexpectedtxt">trunk/LayoutTests/mathml/invalid-markup-expected.txt</a></li>
<li><a href="#trunkLayoutTestsmathmlinvalidmarkuphtml">trunk/LayoutTests/mathml/invalid-markup.html</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (208647 => 208648)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2016-11-12 12:41:35 UTC (rev 208647)
+++ trunk/LayoutTests/ChangeLog        2016-11-12 14:50:50 UTC (rev 208648)
</span><span class="lines">@@ -1,3 +1,17 @@
</span><ins>+2016-11-12  Frederic Wang  &lt;fwang@igalia.com&gt;
+
+        Ensure MathML render tree are clean by the end of FrameView::layout().
+        https://bugs.webkit.org/show_bug.cgi?id=162824
+
+        Reviewed by Darin Adler.
+
+        * mathml/invalid-markup-expected.txt: Added.
+        * mathml/invalid-markup.html: Added.
+        * mathml/mn-as-list-item-assert-expected.txt: Update text expectation now that invalid
+        subtree appears in the output.
+        * mathml/msubsup-fuzz-expected.txt: Ditto.
+        * accessibility/mac/mathml-multiscript.txt: Ditto.
+
</ins><span class="cx"> 2016-11-11  Ryosuke Niwa  &lt;rniwa@webkit.org&gt;
</span><span class="cx"> 
</span><span class="cx">         event.composedPath() does not include window
</span></span></pre></div>
<a id="trunkLayoutTestsaccessibilitymacmathmlmultiscriptexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/accessibility/mac/mathml-multiscript-expected.txt (208647 => 208648)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/accessibility/mac/mathml-multiscript-expected.txt        2016-11-12 12:41:35 UTC (rev 208647)
+++ trunk/LayoutTests/accessibility/mac/mathml-multiscript-expected.txt        2016-11-12 14:50:50 UTC (rev 208648)
</span><span class="lines">@@ -2,15 +2,35 @@
</span><span class="cx"> 1
</span><span class="cx"> 2
</span><span class="cx">  
</span><ins>+A
+1
+2
+3
</ins><span class="cx">  
</span><span class="cx"> A
</span><span class="cx"> 4
</span><span class="cx"> 5
</span><span class="cx">  
</span><ins>+A
+4
+5
+6
</ins><span class="cx">  
</span><ins>+A
+1
+2
+3
+4
+5
+6
</ins><span class="cx">  
</span><span class="cx"> A
</span><span class="cx">  
</span><ins>+A
+1
+3
+5
+6
</ins><span class="cx"> This tests checks that mmultiscript tags will create the correct accessibility math hierarchy.
</span><span class="cx"> 
</span><span class="cx"> On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
</span></span></pre></div>
<a id="trunkLayoutTestsmathmlinvalidmarkupexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/mathml/invalid-markup-expected.txt (0 => 208648)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/mathml/invalid-markup-expected.txt                                (rev 0)
+++ trunk/LayoutTests/mathml/invalid-markup-expected.txt        2016-11-12 14:50:50 UTC (rev 208648)
</span><span class="lines">@@ -0,0 +1,65 @@
</span><ins>+Test passes if it does not debug assert.
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+Test 1: Invalid &lt;mfrac&gt; tag:
+
+1
+2
+3
+Test 2: Invalid &lt;mroot&gt; tag:
+
+1
+2
+3
+Test 3: Invalid &lt;munder&gt; tag:
+
+1
+2
+3
+Test 4: Invalid &lt;mover&gt; tag:
+
+1
+2
+3
+Test 5: Invalid &lt;munderover&gt; tag:
+
+1
+2
+1
+2
+3
+4
+Test 6: Invalid &lt;msub&gt; tag:
+
+1
+2
+3
+Test 7: Invalid &lt;msup&gt; tag:
+
+1
+2
+3
+Test 8: Invalid &lt;msubsup&gt; tag:
+
+1
+2
+1
+2
+3
+4
+Test 9: Invalid &lt;mmultiscripts&gt; tag:
+
+1
+2
+3
+4
+1
+2
+3
+4
+
</ins></span></pre></div>
<a id="trunkLayoutTestsmathmlinvalidmarkuphtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/mathml/invalid-markup.html (0 => 208648)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/mathml/invalid-markup.html                                (rev 0)
+++ trunk/LayoutTests/mathml/invalid-markup.html        2016-11-12 14:50:50 UTC (rev 208648)
</span><span class="lines">@@ -0,0 +1,90 @@
</span><ins>+&lt;!DOCTYPE html&gt;
+&lt;html&gt;
+  &lt;head&gt;
+    &lt;script src=&quot;../resources/js-test.js&quot;&gt;&lt;/script&gt;
+    &lt;script&gt;
+      description(&quot;Test passes if it does not debug assert.&quot;);
+    &lt;/script&gt;
+  &lt;/head&gt;
+  &lt;body&gt;
+    &lt;div&gt;
+      &lt;p&gt;Test 1: Invalid &amp;lt;mfrac&amp;gt; tag:&lt;/p&gt;
+      &lt;math&gt;
+        &lt;mfrac&gt;&lt;/mfrac&gt;
+        &lt;mfrac&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;mn&gt;3&lt;/mn&gt;&lt;/mfrac&gt;
+      &lt;/math&gt;
+    &lt;/div&gt;
+    &lt;div&gt;
+      &lt;p&gt;Test 2: Invalid &amp;lt;mroot&amp;gt; tag:&lt;/p&gt;
+      &lt;math&gt;
+        &lt;mroot&gt;&lt;/mroot&gt;
+        &lt;mroot&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;mn&gt;3&lt;/mn&gt;&lt;/mroot&gt;
+      &lt;/math&gt;
+    &lt;/div&gt;
+    &lt;div&gt;
+      &lt;p&gt;Test 3: Invalid &amp;lt;munder&amp;gt; tag:&lt;/p&gt;
+      &lt;math&gt;
+        &lt;munder&gt;&lt;/munder&gt;
+        &lt;munder&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;mn&gt;3&lt;/mn&gt;&lt;/munder&gt;
+      &lt;/math&gt;
+    &lt;/div&gt;
+    &lt;div&gt;
+      &lt;p&gt;Test 4: Invalid &amp;lt;mover&amp;gt; tag:&lt;/p&gt;
+      &lt;math&gt;
+        &lt;mover&gt;&lt;/mover&gt;
+        &lt;mover&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;mn&gt;3&lt;/mn&gt;&lt;/mover&gt;
+      &lt;/math&gt;
+    &lt;/div&gt;
+    &lt;div&gt;
+      &lt;p&gt;Test 5: Invalid &amp;lt;munderover&amp;gt; tag:&lt;/p&gt;
+      &lt;math&gt;
+        &lt;munderover&gt;&lt;/munderover&gt;
+        &lt;munderover&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;/munderover&gt;
+        &lt;munderover&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;mn&gt;3&lt;/mn&gt;&lt;mn&gt;4&lt;/mn&gt;&lt;/munderover&gt;
+      &lt;/math&gt;
+    &lt;/div&gt;
+    &lt;div&gt;
+      &lt;p&gt;Test 6: Invalid &amp;lt;msub&amp;gt; tag:&lt;/p&gt;
+      &lt;math&gt;
+        &lt;msub&gt;&lt;/msub&gt;
+        &lt;msub&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;mn&gt;3&lt;/mn&gt;&lt;/msub&gt;
+      &lt;/math&gt;
+    &lt;/div&gt;
+    &lt;div&gt;
+      &lt;p&gt;Test 7: Invalid &amp;lt;msup&amp;gt; tag:&lt;/p&gt;
+      &lt;math&gt;
+        &lt;msup&gt;&lt;/msup&gt;
+        &lt;msup&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;mn&gt;3&lt;/mn&gt;&lt;/msup&gt;
+      &lt;/math&gt;
+    &lt;/div&gt;
+    &lt;div&gt;
+      &lt;p&gt;Test 8: Invalid &amp;lt;msubsup&amp;gt; tag:&lt;/p&gt;
+      &lt;math&gt;
+        &lt;msubsup&gt;&lt;/msubsup&gt;
+        &lt;msubsup&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;/msubsup&gt;
+        &lt;msubsup&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;mn&gt;2&lt;/mn&gt;&lt;mn&gt;3&lt;/mn&gt;&lt;mn&gt;4&lt;/mn&gt;&lt;/msubsup&gt;
+      &lt;/math&gt;
+    &lt;/div&gt;
+    &lt;div&gt;
+      &lt;p&gt;Test 9: Invalid &amp;lt;mmultiscripts&amp;gt; tag:&lt;/p&gt;
+      &lt;math&gt;
+        &lt;mmultiscripts&gt;
+        &lt;/mmultiscripts&gt;
+        &lt;mmultiscripts&gt;
+          &lt;mn&gt;1&lt;/mn&gt;
+          &lt;mn&gt;2&lt;/mn&gt;
+          &lt;mn&gt;3&lt;/mn&gt;
+          &lt;mprescripts/&gt;
+          &lt;mn&gt;4&lt;/mn&gt;
+        &lt;/mmultiscripts&gt;
+        &lt;mmultiscripts&gt;
+          &lt;mn&gt;1&lt;/mn&gt;
+          &lt;mn&gt;2&lt;/mn&gt;
+          &lt;mprescripts/&gt;
+          &lt;mn&gt;3&lt;/mn&gt;
+          &lt;mn&gt;4&lt;/mn&gt;
+        &lt;/mmultiscripts&gt;
+      &lt;/math&gt;
+    &lt;/div&gt;
+  &lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsmathmlmnaslistitemassertexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/mathml/mn-as-list-item-assert-expected.txt (208647 => 208648)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/mathml/mn-as-list-item-assert-expected.txt        2016-11-12 12:41:35 UTC (rev 208647)
+++ trunk/LayoutTests/mathml/mn-as-list-item-assert-expected.txt        2016-11-12 14:50:50 UTC (rev 208648)
</span><span class="lines">@@ -1,3 +1,4 @@
</span><span class="cx"> This test PASSES if it does not CRASH or ASSERT.
</span><span class="cx"> 
</span><ins>+mn
</ins><span class="cx"> 
</span></span></pre></div>
<a id="trunkLayoutTestsmathmlmsubsupfuzzexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/mathml/msubsup-fuzz-expected.txt (208647 => 208648)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/mathml/msubsup-fuzz-expected.txt        2016-11-12 12:41:35 UTC (rev 208647)
+++ trunk/LayoutTests/mathml/msubsup-fuzz-expected.txt        2016-11-12 14:50:50 UTC (rev 208648)
</span><span class="lines">@@ -1,3 +1,4 @@
</span><span class="cx"> This test passes if it does not crash.
</span><span class="cx"> 
</span><ins>+3
</ins><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (208647 => 208648)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2016-11-12 12:41:35 UTC (rev 208647)
+++ trunk/Source/WebCore/ChangeLog        2016-11-12 14:50:50 UTC (rev 208648)
</span><span class="lines">@@ -1,5 +1,33 @@
</span><span class="cx"> 2016-11-12  Frederic Wang  &lt;fwang@igalia.com&gt;
</span><span class="cx"> 
</span><ins>+        Ensure MathML render tree are clean by the end of FrameView::layout().
+        https://bugs.webkit.org/show_bug.cgi?id=162824
+
+        Reviewed by Darin Adler.
+
+        clearNeedsLayout is not called during the layout of invalid MathML markup. We introduce a new
+        helper function to perform proper layout of such markup and we now call it from the various
+        MathML layoutBlock functions. Additionally, we ensure that the preferred width is dirty after
+        computation in RenderMathMLScripts::computePreferredLogicalWidths.
+
+        Test: mathml/invalid-markup.html
+
+        * rendering/mathml/RenderMathMLBlock.cpp:
+        (WebCore::RenderMathMLBlock::layoutInvalidMarkup): Helper function to layout invalid markup.
+        * rendering/mathml/RenderMathMLBlock.h: Declare layoutInvalidMarkup.
+        * rendering/mathml/RenderMathMLFraction.cpp:
+        (WebCore::RenderMathMLFraction::layoutBlock): Call layoutInvalidMarkup.
+        * rendering/mathml/RenderMathMLRoot.cpp:
+        (WebCore::RenderMathMLRoot::layoutBlock): Ditto.
+        * rendering/mathml/RenderMathMLScripts.cpp:
+        (WebCore::RenderMathMLScripts::computePreferredLogicalWidths): Set the preferred width dirty
+        after computation to avoid that it is computed again and again.
+        (WebCore::RenderMathMLScripts::layoutBlock): Call layoutInvalidMarkup.
+        * rendering/mathml/RenderMathMLUnderOver.cpp:
+        (WebCore::RenderMathMLUnderOver::layoutBlock): Ditto.
+
+2016-11-12  Frederic Wang  &lt;fwang@igalia.com&gt;
+
</ins><span class="cx">         Remove RenderMathMLOperator::shouldAllowStretching
</span><span class="cx">         https://bugs.webkit.org/show_bug.cgi?id=164313
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingmathmlRenderMathMLBlockcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/mathml/RenderMathMLBlock.cpp (208647 => 208648)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/mathml/RenderMathMLBlock.cpp        2016-11-12 12:41:35 UTC (rev 208647)
+++ trunk/Source/WebCore/rendering/mathml/RenderMathMLBlock.cpp        2016-11-12 14:50:50 UTC (rev 208648)
</span><span class="lines">@@ -248,6 +248,18 @@
</span><span class="cx">     clearNeedsLayout();
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+void RenderMathMLBlock::layoutInvalidMarkup()
+{
+    // Invalid MathML subtrees are just renderered as empty boxes.
+    // FIXME: https://webkit.org/b/135460 - Should we display some &quot;invalid&quot; markup message instead?
+    ASSERT(needsLayout());
+    for (auto child = firstChildBox(); child; child = child-&gt;nextSiblingBox())
+        child-&gt;layoutIfNeeded();
+    setLogicalWidth(0);
+    setLogicalHeight(0);
+    clearNeedsLayout();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+}
+
</ins><span class="cx"> #endif
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingmathmlRenderMathMLBlockh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/mathml/RenderMathMLBlock.h (208647 => 208648)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/mathml/RenderMathMLBlock.h        2016-11-12 12:41:35 UTC (rev 208647)
+++ trunk/Source/WebCore/rendering/mathml/RenderMathMLBlock.h        2016-11-12 14:50:50 UTC (rev 208648)
</span><span class="lines">@@ -83,6 +83,7 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     void layoutBlock(bool relayoutChildren, LayoutUnit pageLogicalHeight = 0) override;
</span><ins>+    void layoutInvalidMarkup();
</ins><span class="cx"> 
</span><span class="cx"> private:
</span><span class="cx">     bool isRenderMathMLBlock() const final { return true; }
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingmathmlRenderMathMLFractioncpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/mathml/RenderMathMLFraction.cpp (208647 => 208648)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/mathml/RenderMathMLFraction.cpp        2016-11-12 12:41:35 UTC (rev 208647)
+++ trunk/Source/WebCore/rendering/mathml/RenderMathMLFraction.cpp        2016-11-12 14:50:50 UTC (rev 208648)
</span><span class="lines">@@ -180,9 +180,7 @@
</span><span class="cx">         return;
</span><span class="cx"> 
</span><span class="cx">     if (!isValid()) {
</span><del>-        setLogicalWidth(0);
-        setLogicalHeight(0);
-        clearNeedsLayout();
</del><ins>+        layoutInvalidMarkup();
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingmathmlRenderMathMLRootcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/mathml/RenderMathMLRoot.cpp (208647 => 208648)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/mathml/RenderMathMLRoot.cpp        2016-11-12 12:41:35 UTC (rev 208647)
+++ trunk/Source/WebCore/rendering/mathml/RenderMathMLRoot.cpp        2016-11-12 14:50:50 UTC (rev 208648)
</span><span class="lines">@@ -185,9 +185,7 @@
</span><span class="cx">     m_baseWidth = 0;
</span><span class="cx"> 
</span><span class="cx">     if (!isValid()) {
</span><del>-        setLogicalWidth(0);
-        setLogicalHeight(0);
-        clearNeedsLayout();
</del><ins>+        layoutInvalidMarkup();
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingmathmlRenderMathMLScriptscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/mathml/RenderMathMLScripts.cpp (208647 => 208648)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/mathml/RenderMathMLScripts.cpp        2016-11-12 12:41:35 UTC (rev 208647)
+++ trunk/Source/WebCore/rendering/mathml/RenderMathMLScripts.cpp        2016-11-12 14:50:50 UTC (rev 208648)
</span><span class="lines">@@ -182,12 +182,16 @@
</span><span class="cx"> 
</span><span class="cx"> void RenderMathMLScripts::computePreferredLogicalWidths()
</span><span class="cx"> {
</span><ins>+    ASSERT(preferredLogicalWidthsDirty());
+
</ins><span class="cx">     m_minPreferredLogicalWidth = 0;
</span><span class="cx">     m_maxPreferredLogicalWidth = 0;
</span><span class="cx"> 
</span><span class="cx">     auto possibleReference = validateAndGetReferenceChildren();
</span><del>-    if (!possibleReference)
</del><ins>+    if (!possibleReference) {
+        setPreferredLogicalWidthsDirty(false);
</ins><span class="cx">         return;
</span><ins>+    }
</ins><span class="cx">     auto&amp; reference = possibleReference.value();
</span><span class="cx"> 
</span><span class="cx">     LayoutUnit baseItalicCorrection = std::min(reference.base-&gt;maxPreferredLogicalWidth(), italicCorrection(reference));
</span><span class="lines">@@ -228,6 +232,8 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     m_minPreferredLogicalWidth = m_maxPreferredLogicalWidth;
</span><ins>+
+    setPreferredLogicalWidthsDirty(false);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> auto RenderMathMLScripts::verticalParameters() const -&gt; VerticalParameters
</span><span class="lines">@@ -357,9 +363,7 @@
</span><span class="cx"> 
</span><span class="cx">     auto possibleReference = validateAndGetReferenceChildren();
</span><span class="cx">     if (!possibleReference) {
</span><del>-        setLogicalWidth(0);
-        setLogicalHeight(0);
-        clearNeedsLayout();
</del><ins>+        layoutInvalidMarkup();
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx">     auto&amp; reference = possibleReference.value();
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingmathmlRenderMathMLUnderOvercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/mathml/RenderMathMLUnderOver.cpp (208647 => 208648)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/mathml/RenderMathMLUnderOver.cpp        2016-11-12 12:41:35 UTC (rev 208647)
+++ trunk/Source/WebCore/rendering/mathml/RenderMathMLUnderOver.cpp        2016-11-12 14:50:50 UTC (rev 208648)
</span><span class="lines">@@ -247,9 +247,7 @@
</span><span class="cx">         return;
</span><span class="cx"> 
</span><span class="cx">     if (!isValid()) {
</span><del>-        setLogicalWidth(0);
-        setLogicalHeight(0);
-        clearNeedsLayout();
</del><ins>+        layoutInvalidMarkup();
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> 
</span></span></pre>
</div>
</div>

</body>
</html>