<!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>[203538] 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/203538">203538</a></dd>
<dt>Author</dt> <dd>n_wang@apple.com</dd>
<dt>Date</dt> <dd>2016-07-21 16:47:53 -0700 (Thu, 21 Jul 2016)</dd>
</dl>

<h3>Log Message</h3>
<pre>AX: aria-label not being used correctly in accessible name calculation of heading
https://bugs.webkit.org/show_bug.cgi?id=160009

Reviewed by Chris Fleizach.

Source/WebCore:

Actually we are exposing the correct information for heading objects. On macOS, 
VoiceOver should handle the logic that picks the right information to speak.
On iOS, VoiceOver is speaking the static text child instead of the heading object.
So we should set the accessibilityLabel of the static text based on the parent's 
alternate label.

Test: accessibility/ios-simulator/heading-with-aria-label.html

* accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
(-[WebAccessibilityObjectWrapper _accessibilityTraitsFromAncestors]):

LayoutTests:

* accessibility/ios-simulator/heading-with-aria-label-expected.txt: Added.
* accessibility/ios-simulator/heading-with-aria-label.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="#trunkSourceWebCoreaccessibilityiosWebAccessibilityObjectWrapperIOSmm">trunk/Source/WebCore/accessibility/ios/WebAccessibilityObjectWrapperIOS.mm</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsaccessibilityiossimulatorheadingwitharialabelexpectedtxt">trunk/LayoutTests/accessibility/ios-simulator/heading-with-aria-label-expected.txt</a></li>
<li><a href="#trunkLayoutTestsaccessibilityiossimulatorheadingwitharialabelhtml">trunk/LayoutTests/accessibility/ios-simulator/heading-with-aria-label.html</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (203537 => 203538)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2016-07-21 23:41:44 UTC (rev 203537)
+++ trunk/LayoutTests/ChangeLog        2016-07-21 23:47:53 UTC (rev 203538)
</span><span class="lines">@@ -1,3 +1,13 @@
</span><ins>+2016-07-21  Nan Wang  &lt;n_wang@apple.com&gt;
+
+        AX: aria-label not being used correctly in accessible name calculation of heading
+        https://bugs.webkit.org/show_bug.cgi?id=160009
+
+        Reviewed by Chris Fleizach.
+
+        * accessibility/ios-simulator/heading-with-aria-label-expected.txt: Added.
+        * accessibility/ios-simulator/heading-with-aria-label.html: Added.
+
</ins><span class="cx"> 2016-07-21  Ryan Haddad  &lt;ryanhaddad@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Move expected.txt file for editing/deleting/delete-emoji.html from mac-elcapitan to mac-yosemite
</span></span></pre></div>
<a id="trunkLayoutTestsaccessibilityiossimulatorheadingwitharialabelexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/accessibility/ios-simulator/heading-with-aria-label-expected.txt (0 => 203538)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/accessibility/ios-simulator/heading-with-aria-label-expected.txt                                (rev 0)
+++ trunk/LayoutTests/accessibility/ios-simulator/heading-with-aria-label-expected.txt        2016-07-21 23:47:53 UTC (rev 203538)
</span><span class="lines">@@ -0,0 +1,13 @@
</span><ins>+visible text visible text
+This tests that if heading has aria-label, it will override the visible text as necessary.
+
+On success, you will see a series of &quot;PASS&quot; messages, followed by &quot;TEST COMPLETE&quot;.
+
+
+PASS heading1Text.traits == heading2Text.traits is true
+PASS heading1Text.description is 'AXLabel: test label'
+PASS heading2Text.description is 'AXLabel: visible text'
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
</ins></span></pre></div>
<a id="trunkLayoutTestsaccessibilityiossimulatorheadingwitharialabelhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/accessibility/ios-simulator/heading-with-aria-label.html (0 => 203538)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/accessibility/ios-simulator/heading-with-aria-label.html                                (rev 0)
+++ trunk/LayoutTests/accessibility/ios-simulator/heading-with-aria-label.html        2016-07-21 23:47:53 UTC (rev 203538)
</span><span class="lines">@@ -0,0 +1,39 @@
</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;script&gt;
+var successfullyParsed = false;
+&lt;/script&gt;
+&lt;/head&gt;
+&lt;body id=&quot;body&quot;&gt;
+
+&lt;span id=&quot;heading1&quot; role=&quot;heading&quot; aria-label=&quot;test label&quot;&gt;visible text&lt;/span&gt;
+&lt;span id=&quot;heading2&quot; role=&quot;heading&quot;&gt;visible text&lt;/span&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 tests that if heading has aria-label, it will override the visible text as necessary.&quot;);
+
+    if (window.accessibilityController) {
+
+        var heading1Text = accessibilityController.accessibleElementById(&quot;heading1&quot;).childAtIndex(0);
+        var heading2Text = accessibilityController.accessibleElementById(&quot;heading2&quot;).childAtIndex(0);
+        
+        // Get the trait so that the label will be set.
+        shouldBeTrue(&quot;heading1Text.traits == heading2Text.traits&quot;);
+        
+        shouldBe(&quot;heading1Text.description&quot;, &quot;'AXLabel: test label'&quot;);
+        shouldBe(&quot;heading2Text.description&quot;, &quot;'AXLabel: visible text'&quot;);
+    }
+
+    successfullyParsed = true;
+&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 (203537 => 203538)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2016-07-21 23:41:44 UTC (rev 203537)
+++ trunk/Source/WebCore/ChangeLog        2016-07-21 23:47:53 UTC (rev 203538)
</span><span class="lines">@@ -1,3 +1,21 @@
</span><ins>+2016-07-21  Nan Wang  &lt;n_wang@apple.com&gt;
+
+        AX: aria-label not being used correctly in accessible name calculation of heading
+        https://bugs.webkit.org/show_bug.cgi?id=160009
+
+        Reviewed by Chris Fleizach.
+
+        Actually we are exposing the correct information for heading objects. On macOS, 
+        VoiceOver should handle the logic that picks the right information to speak.
+        On iOS, VoiceOver is speaking the static text child instead of the heading object.
+        So we should set the accessibilityLabel of the static text based on the parent's 
+        alternate label.
+
+        Test: accessibility/ios-simulator/heading-with-aria-label.html
+
+        * accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:
+        (-[WebAccessibilityObjectWrapper _accessibilityTraitsFromAncestors]):
+
</ins><span class="cx"> 2016-07-21  Saam Barati  &lt;sbarati@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         op_add/ValueAdd should be an IC in all JIT tiers
</span></span></pre></div>
<a id="trunkSourceWebCoreaccessibilityiosWebAccessibilityObjectWrapperIOSmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/accessibility/ios/WebAccessibilityObjectWrapperIOS.mm (203537 => 203538)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/accessibility/ios/WebAccessibilityObjectWrapperIOS.mm        2016-07-21 23:41:44 UTC (rev 203537)
+++ trunk/Source/WebCore/accessibility/ios/WebAccessibilityObjectWrapperIOS.mm        2016-07-21 23:47:53 UTC (rev 203538)
</span><span class="lines">@@ -598,8 +598,15 @@
</span><span class="cx">                 // to the heading level. If it was a static text element, we need to store
</span><span class="cx">                 // the value as the label, because the heading level needs to the value.
</span><span class="cx">                 AccessibilityObjectWrapper* wrapper = parent-&gt;wrapper();
</span><del>-                if (role == StaticTextRole) 
-                    [self setAccessibilityLabel:m_object-&gt;stringValue()];                
</del><ins>+                if (role == StaticTextRole) {
+                    // We should only set the text value as the label when there's no
+                    // alternate text on the heading parent.
+                    NSString *headingLabel = [wrapper accessibilityLabel];
+                    if (![headingLabel length])
+                        [self setAccessibilityLabel:m_object-&gt;stringValue()];
+                    else
+                        [self setAccessibilityLabel:headingLabel];
+                }
</ins><span class="cx">                 [self setAccessibilityValue:[wrapper accessibilityValue]];
</span><span class="cx">                 break;
</span><span class="cx">             }
</span></span></pre>
</div>
</div>

</body>
</html>