<!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>[164321] 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/164321">164321</a></dd>
<dt>Author</dt> <dd>samuel_white@apple.com</dd>
<dt>Date</dt> <dd>2014-02-18 14:39:45 -0800 (Tue, 18 Feb 2014)</dd>
</dl>

<h3>Log Message</h3>
<pre>AX: Searching for &quot;immediate descendants only&quot; can return unexpected results.
https://bugs.webkit.org/show_bug.cgi?id=128986

Reviewed by Chris Fleizach.

Source/WebCore:

Missed an application of the immediateDescendantsOnly flag during the initial implementation. We
need to make sure we don't decend into the startObject first if it is provided. This fix causes
the outer loop to 'skip' the first iteration so only siblings of the startObject are considered.

No new tests, updated existing search-predicate-immediate-descendants-only.html test to cover this case.

* accessibility/AccessibilityObject.cpp:
(WebCore::AccessibilityObject::findMatchingObjects):

LayoutTests:

Updated test and expectations to make sure the results match traditional &quot;children&quot; results when appropriate.

* platform/mac/accessibility/search-predicate-immediate-descendants-only-expected.txt:
* platform/mac/accessibility/search-predicate-immediate-descendants-only.html:</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkLayoutTestsplatformmacaccessibilitysearchpredicateimmediatedescendantsonlyexpectedtxt">trunk/LayoutTests/platform/mac/accessibility/search-predicate-immediate-descendants-only-expected.txt</a></li>
<li><a href="#trunkLayoutTestsplatformmacaccessibilitysearchpredicateimmediatedescendantsonlyhtml">trunk/LayoutTests/platform/mac/accessibility/search-predicate-immediate-descendants-only.html</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreaccessibilityAccessibilityObjectcpp">trunk/Source/WebCore/accessibility/AccessibilityObject.cpp</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (164320 => 164321)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2014-02-18 22:37:58 UTC (rev 164320)
+++ trunk/LayoutTests/ChangeLog        2014-02-18 22:39:45 UTC (rev 164321)
</span><span class="lines">@@ -1,3 +1,15 @@
</span><ins>+2014-02-18  Samuel White  &lt;samuel_white@apple.com&gt;
+
+        AX: Searching for &quot;immediate descendants only&quot; can return unexpected results.
+        https://bugs.webkit.org/show_bug.cgi?id=128986
+
+        Reviewed by Chris Fleizach.
+
+        Updated test and expectations to make sure the results match traditional &quot;children&quot; results when appropriate.
+
+        * platform/mac/accessibility/search-predicate-immediate-descendants-only-expected.txt:
+        * platform/mac/accessibility/search-predicate-immediate-descendants-only.html:
+
</ins><span class="cx"> 2014-02-18  Ryosuke Niwa  &lt;rniwa@webkit.org&gt;
</span><span class="cx"> 
</span><span class="cx">         setSelectionRange should set selection without validation
</span></span></pre></div>
<a id="trunkLayoutTestsplatformmacaccessibilitysearchpredicateimmediatedescendantsonlyexpectedtxt"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/mac/accessibility/search-predicate-immediate-descendants-only-expected.txt (164320 => 164321)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/mac/accessibility/search-predicate-immediate-descendants-only-expected.txt        2014-02-18 22:37:58 UTC (rev 164320)
+++ trunk/LayoutTests/platform/mac/accessibility/search-predicate-immediate-descendants-only-expected.txt        2014-02-18 22:39:45 UTC (rev 164321)
</span><span class="lines">@@ -3,8 +3,9 @@
</span><span class="cx"> On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
</span><span class="cx"> 
</span><span class="cx"> 
</span><del>-PASS allDescendantsCount is 6
-PASS immediateDescendantsCount is 3
</del><ins>+PASS allDescendantsCount is 25
+PASS immediateDescendantsCount is 6
+PASS immediateDescendantsCount is childrenCount
</ins><span class="cx"> PASS successfullyParsed is true
</span><span class="cx"> 
</span><span class="cx"> TEST COMPLETE
</span></span></pre></div>
<a id="trunkLayoutTestsplatformmacaccessibilitysearchpredicateimmediatedescendantsonlyhtml"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/mac/accessibility/search-predicate-immediate-descendants-only.html (164320 => 164321)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/mac/accessibility/search-predicate-immediate-descendants-only.html        2014-02-18 22:37:58 UTC (rev 164320)
+++ trunk/LayoutTests/platform/mac/accessibility/search-predicate-immediate-descendants-only.html        2014-02-18 22:39:45 UTC (rev 164321)
</span><span class="lines">@@ -7,9 +7,9 @@
</span><span class="cx"> &lt;body&gt;
</span><span class="cx"> 
</span><span class="cx"> &lt;div id=&quot;container&quot;&gt;
</span><del>-&lt;ul&gt;&lt;li&gt;immediate descendant&lt;/li&gt;&lt;li&gt;&lt;ul&gt;&lt;li&gt;distant descendant&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;
-&lt;ul&gt;&lt;li&gt;immediate descendant&lt;/li&gt;&lt;li&gt;&lt;ul&gt;&lt;li&gt;distant descendant&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;
-&lt;ul&gt;&lt;li&gt;immediate descendant&lt;/li&gt;&lt;li&gt;&lt;ul&gt;&lt;li&gt;distant descendant&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;
</del><ins>+&lt;h1&gt;heading&lt;img src=&quot;resources/cake.png&quot; alt=&quot;Cake&quot;&gt;&lt;/h1&gt;
+&lt;p&gt;text &lt;a href=&quot;#&quot;&gt;link&lt;/a&gt;&lt;/p&gt;
+&lt;ul&gt;&lt;li&gt;item&lt;/li&gt;&lt;li&gt;&lt;ul&gt;&lt;li&gt;subitem&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;
</ins><span class="cx"> &lt;/div&gt;
</span><span class="cx"> 
</span><span class="cx"> &lt;p id=&quot;description&quot;&gt;&lt;/p&gt;
</span><span class="lines">@@ -23,13 +23,17 @@
</span><span class="cx">         var containerElement = accessibilityController.focusedElement;
</span><span class="cx">         
</span><span class="cx">         // All descendants.
</span><del>-        var allDescendantsCount = containerElement.uiElementCountForSearchPredicate(null, true, &quot;AXListSearchKey&quot;, &quot;&quot;, false, false);
-        shouldBe(&quot;allDescendantsCount&quot;, &quot;6&quot;);
</del><ins>+        var allDescendantsCount = containerElement.uiElementCountForSearchPredicate(null, true, &quot;AXAnyTypeSearchKey&quot;, &quot;&quot;, false, false);
+        shouldBe(&quot;allDescendantsCount&quot;, &quot;25&quot;);
</ins><span class="cx">         
</span><del>-        // Immediate descendants.
-        var immediateDescendantsCount = containerElement.uiElementCountForSearchPredicate(null, true, &quot;AXListSearchKey&quot;, &quot;&quot;, false, true);
-        shouldBe(&quot;immediateDescendantsCount&quot;, &quot;3&quot;);
</del><ins>+        // Immeditate descendants.
+        var immediateDescendantsCount = containerElement.uiElementCountForSearchPredicate(null, true, &quot;AXAnyTypeSearchKey&quot;, &quot;&quot;, false, true);
+        shouldBe(&quot;immediateDescendantsCount&quot;, &quot;6&quot;);
</ins><span class="cx">         
</span><ins>+        // The number of immediate descendants should be equal to the number of children (when using &quot;AXAnyTypeSearchKey&quot;).
+        var childrenCount = containerElement.childrenCount;
+        shouldBe(&quot;immediateDescendantsCount&quot;, &quot;childrenCount&quot;);
+        
</ins><span class="cx">         // Hide superfluous text.
</span><span class="cx">         document.getElementById(&quot;container&quot;).style.display = &quot;none&quot;;
</span><span class="cx">     }
</span></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (164320 => 164321)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2014-02-18 22:37:58 UTC (rev 164320)
+++ trunk/Source/WebCore/ChangeLog        2014-02-18 22:39:45 UTC (rev 164321)
</span><span class="lines">@@ -1,3 +1,19 @@
</span><ins>+2014-02-18  Samuel White  &lt;samuel_white@apple.com&gt;
+
+        AX: Searching for &quot;immediate descendants only&quot; can return unexpected results.
+        https://bugs.webkit.org/show_bug.cgi?id=128986
+
+        Reviewed by Chris Fleizach.
+
+        Missed an application of the immediateDescendantsOnly flag during the initial implementation. We
+        need to make sure we don't decend into the startObject first if it is provided. This fix causes
+        the outer loop to 'skip' the first iteration so only siblings of the startObject are considered.
+
+        No new tests, updated existing search-predicate-immediate-descendants-only.html test to cover this case.
+
+        * accessibility/AccessibilityObject.cpp:
+        (WebCore::AccessibilityObject::findMatchingObjects):
+
</ins><span class="cx"> 2014-02-18 Ryosuke Niwa &lt;rniwa@webkit.org&gt;
</span><span class="cx"> 
</span><span class="cx">         Merge notifyComponentsOnChangedSelection into respondToSelectionChange
</span></span></pre></div>
<a id="trunkSourceWebCoreaccessibilityAccessibilityObjectcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/accessibility/AccessibilityObject.cpp (164320 => 164321)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/accessibility/AccessibilityObject.cpp        2014-02-18 22:37:58 UTC (rev 164320)
+++ trunk/Source/WebCore/accessibility/AccessibilityObject.cpp        2014-02-18 22:39:45 UTC (rev 164321)
</span><span class="lines">@@ -489,7 +489,8 @@
</span><span class="cx">         // Only append the children after/before the previous element, so that the search does not check elements that are 
</span><span class="cx">         // already behind/ahead of start element.
</span><span class="cx">         AccessibilityChildrenVector searchStack;
</span><del>-        appendChildrenToArray(startObject, isForward, previousObject, searchStack);
</del><ins>+        if (!criteria-&gt;immediateDescendantsOnly || startObject == this)
+            appendChildrenToArray(startObject, isForward, previousObject, searchStack);
</ins><span class="cx"> 
</span><span class="cx">         // This now does a DFS at the current level of the parent.
</span><span class="cx">         while (!searchStack.isEmpty()) {
</span></span></pre>
</div>
</div>

</body>
</html>