<!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>[192022] 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/192022">192022</a></dd>
<dt>Author</dt> <dd>mario@webkit.org</dd>
<dt>Date</dt> <dd>2015-11-04 06:46:19 -0800 (Wed, 04 Nov 2015)</dd>
</dl>

<h3>Log Message</h3>
<pre>[AX] WebProcess from WebKitGtk+ 2.10.0 compiled in Debug mode hits ASSERT on textUnderElement
https://bugs.webkit.org/show_bug.cgi?id=150670

Source/WebCore:

Patch by Mario Sanchez Prada &lt;mario@webkit.org&gt; on 2015-11-04
Reviewed by Chris Fleizach.

Move the ASSERTs stating that the render tree is stable before using the
TextIterator to their right place, in AccessibilityRenderObject, so that
we don't crash in debug builds in cases when this condition is irrelevant.

Test: accessibility/gtk/list-item-with-pseudo-element-crash.html

* accessibility/AccessibilityNodeObject.cpp:
(WebCore::AccessibilityNodeObject::textUnderElement): Removed ASSERTs.
* accessibility/AccessibilityRenderObject.cpp:
(WebCore::AccessibilityRenderObject::textUnderElement): Added ASSERTs, but
only before calling plainText and using the right document for the node.

LayoutTests:

Patch by Joanmarie Diggs &lt;jdiggs@igalia.com&gt; on 2015-11-04
Reviewed by Chris Fleizach.

* accessibility/list-item-with-pseudo-element-crash-expected.txt: Added.
* accessibility/list-item-with-pseudo-element-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="#trunkSourceWebCoreaccessibilityAccessibilityNodeObjectcpp">trunk/Source/WebCore/accessibility/AccessibilityNodeObject.cpp</a></li>
<li><a href="#trunkSourceWebCoreaccessibilityAccessibilityRenderObjectcpp">trunk/Source/WebCore/accessibility/AccessibilityRenderObject.cpp</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsaccessibilitylistitemwithpseudoelementcrashexpectedtxt">trunk/LayoutTests/accessibility/list-item-with-pseudo-element-crash-expected.txt</a></li>
<li><a href="#trunkLayoutTestsaccessibilitylistitemwithpseudoelementcrashhtml">trunk/LayoutTests/accessibility/list-item-with-pseudo-element-crash.html</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (192021 => 192022)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2015-11-04 11:15:51 UTC (rev 192021)
+++ trunk/LayoutTests/ChangeLog        2015-11-04 14:46:19 UTC (rev 192022)
</span><span class="lines">@@ -1,3 +1,13 @@
</span><ins>+2015-11-04  Joanmarie Diggs  &lt;jdiggs@igalia.com&gt;
+
+        [AX] WebProcess from WebKitGtk+ 2.10.0 compiled in Debug mode hits ASSERT on textUnderElement
+        https://bugs.webkit.org/show_bug.cgi?id=150670
+
+        Reviewed by Chris Fleizach.
+
+        * accessibility/list-item-with-pseudo-element-crash-expected.txt: Added.
+        * accessibility/list-item-with-pseudo-element-crash.html: Added.
+
</ins><span class="cx"> 2015-11-04  Xabier Rodriguez Calvar  &lt;calvaris@igalia.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [Streams API] Shield streams against user replacing the Promise constructor
</span></span></pre></div>
<a id="trunkLayoutTestsaccessibilitylistitemwithpseudoelementcrashexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/accessibility/list-item-with-pseudo-element-crash-expected.txt (0 => 192022)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/accessibility/list-item-with-pseudo-element-crash-expected.txt                                (rev 0)
+++ trunk/LayoutTests/accessibility/list-item-with-pseudo-element-crash-expected.txt        2015-11-04 14:46:19 UTC (rev 192022)
</span><span class="lines">@@ -0,0 +1,11 @@
</span><ins>+Foo
+BAR
+This verifies that list items with pseudo elements and styles do not trigger an assertion.
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsaccessibilitylistitemwithpseudoelementcrashhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/accessibility/list-item-with-pseudo-element-crash.html (0 => 192022)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/accessibility/list-item-with-pseudo-element-crash.html                                (rev 0)
+++ trunk/LayoutTests/accessibility/list-item-with-pseudo-element-crash.html        2015-11-04 14:46:19 UTC (rev 192022)
</span><span class="lines">@@ -0,0 +1,26 @@
</span><ins>+&lt;!DOCTYPE HTML PUBLIC &quot;-//IETF//DTD HTML//EN&quot;&gt;
+&lt;html&gt;
+&lt;head&gt;
+&lt;script src=&quot;../../resources/js-test-pre.js&quot;&gt;&lt;/script&gt;
+&lt;style&gt;
+.item:before {content:&quot;&quot;; }
+&lt;/style&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;ul id=&quot;list&quot; style=&quot;display:none;&quot;&gt;
+&lt;li id=&quot;item1&quot; class=&quot;item&quot; style=&quot;float:left;&quot;&gt;Foo&lt;/li&gt;
+&lt;li id=&quot;item2&quot; class=&quot;item&quot; style=&quot;text-transform:uppercase;&quot;&gt;Bar&lt;/li&gt;
+&lt;/ul&gt;
+&lt;p id=&quot;description&quot;&gt;&lt;/p&gt;
+&lt;div id=&quot;console&quot;&gt;&lt;/div&gt;
+&lt;script&gt;
+description(&quot;This verifies that list items with pseudo elements and styles do not trigger an assertion.&quot;);
+
+if (window.testRunner &amp;&amp; window.accessibilityController) {
+    var list = document.getElementById(&quot;list&quot;);
+    list.style.display = &quot;&quot;;
+}
+&lt;/script&gt;
+&lt;script src=&quot;../../resources/js-test-post.js&quot;&gt;&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 (192021 => 192022)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2015-11-04 11:15:51 UTC (rev 192021)
+++ trunk/Source/WebCore/ChangeLog        2015-11-04 14:46:19 UTC (rev 192022)
</span><span class="lines">@@ -1,3 +1,22 @@
</span><ins>+2015-11-04  Mario Sanchez Prada  &lt;mario@webkit.org&gt;
+
+        [AX] WebProcess from WebKitGtk+ 2.10.0 compiled in Debug mode hits ASSERT on textUnderElement
+        https://bugs.webkit.org/show_bug.cgi?id=150670
+
+        Reviewed by Chris Fleizach.
+
+        Move the ASSERTs stating that the render tree is stable before using the
+        TextIterator to their right place, in AccessibilityRenderObject, so that
+        we don't crash in debug builds in cases when this condition is irrelevant.
+
+        Test: accessibility/gtk/list-item-with-pseudo-element-crash.html
+
+        * accessibility/AccessibilityNodeObject.cpp:
+        (WebCore::AccessibilityNodeObject::textUnderElement): Removed ASSERTs.
+        * accessibility/AccessibilityRenderObject.cpp:
+        (WebCore::AccessibilityRenderObject::textUnderElement): Added ASSERTs, but
+        only before calling plainText and using the right document for the node.
+
</ins><span class="cx"> 2015-11-04  Xabier Rodriguez Calvar  &lt;calvaris@igalia.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [Streams API] Shield streams against user replacing the Promise constructor
</span></span></pre></div>
<a id="trunkSourceWebCoreaccessibilityAccessibilityNodeObjectcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/accessibility/AccessibilityNodeObject.cpp (192021 => 192022)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/accessibility/AccessibilityNodeObject.cpp        2015-11-04 11:15:51 UTC (rev 192021)
+++ trunk/Source/WebCore/accessibility/AccessibilityNodeObject.cpp        2015-11-04 14:46:19 UTC (rev 192022)
</span><span class="lines">@@ -1687,12 +1687,6 @@
</span><span class="cx">     if (is&lt;Text&gt;(node))
</span><span class="cx">         return downcast&lt;Text&gt;(*node).wholeText();
</span><span class="cx"> 
</span><del>-    // The render tree should be stable before going ahead. Otherwise, further uses of the
-    // TextIterator will force a layout update, potentially altering the accessibility tree
-    // and leading to crashes in the loop that computes the result text from the children.
-    ASSERT(!document()-&gt;renderView()-&gt;layoutState());
-    ASSERT(!document()-&gt;childNeedsStyleRecalc());
-
</del><span class="cx">     StringBuilder builder;
</span><span class="cx">     for (AccessibilityObject* child = firstChild(); child; child = child-&gt;nextSibling()) {
</span><span class="cx">         if (mode.ignoredChildNode &amp;&amp; child-&gt;node() == mode.ignoredChildNode)
</span></span></pre></div>
<a id="trunkSourceWebCoreaccessibilityAccessibilityRenderObjectcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/accessibility/AccessibilityRenderObject.cpp (192021 => 192022)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/accessibility/AccessibilityRenderObject.cpp        2015-11-04 11:15:51 UTC (rev 192021)
+++ trunk/Source/WebCore/accessibility/AccessibilityRenderObject.cpp        2015-11-04 14:46:19 UTC (rev 192022)
</span><span class="lines">@@ -686,6 +686,13 @@
</span><span class="cx">                 // catch stale WebCoreAXObject (see &lt;rdar://problem/3960196&gt;)
</span><span class="cx">                 if (frame-&gt;document() != nodeDocument)
</span><span class="cx">                     return String();
</span><ins>+
+                // The render tree should be stable before going ahead. Otherwise, further uses of the
+                // TextIterator will force a layout update, potentially altering the accessibility tree
+                // and leading to crashes in the loop that computes the result text from the children.
+                ASSERT(!nodeDocument-&gt;renderView()-&gt;layoutState());
+                ASSERT(!nodeDocument-&gt;childNeedsStyleRecalc());
+
</ins><span class="cx">                 return plainText(textRange.get(), textIteratorBehaviorForTextRange());
</span><span class="cx">             }
</span><span class="cx">         }
</span></span></pre>
</div>
</div>

</body>
</html>