<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>317597</bug_id>
          
          <creation_ts>2026-06-22 11:13:29 -0700</creation_ts>
          <short_desc>AX: VoiceOver does not re-resolve aria-labelledby when referenced element&apos;s    accessible name is provided by aria-label</short_desc>
          <delta_ts>2026-07-01 13:31:54 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Accessibility</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sarah">sarahjane_ward</reporter>
          <assigned_to name="Tyler Wilcock">tyler_w</assigned_to>
          <cc>andresg_22</cc>
    
    <cc>sarahjane_ward</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>2222808</commentid>
    <comment_count>0</comment_count>
      <attachid>480179</attachid>
    <who name="Sarah">sarahjane_ward</who>
    <bug_when>2026-06-22 11:13:29 -0700</bug_when>
    <thetext>Created attachment 480179
Simple test case

Summary: VoiceOver reads stale aria-labelledby value when referenced element&apos;s name comes from aria-label                                                   
                             
Description:
When an element uses aria-labelledby to reference another element, and the referenced element&apos;s accessible name is provided via aria-label, VoiceOver caches the initial resolved value and does not update it on subsequent navigations. The same pattern works correctly when the referenced element derives its name from text content.

  Steps to reproduce:

  1. Open the attached test case in Safari
  2. Enable VoiceOver (Cmd+F5)
  3. Navigate to &quot;Section B&quot; using VO+Right Arrow — note the count value        
  announced                                                                     
  4. Navigate past the &quot;Focusable element&quot; link below Section B                 
  5. Wait a few seconds for the counter to increment                            
  6. Navigate back up to &quot;Section B&quot; using VO+Left Arrow                        
  7. Repeat steps 4-6 for &quot;Section A&quot; to compare                                
                                                                                
  Actual results: Section A (referenced element uses textContent) announces the 
  current count on every navigation. Section B (referenced element uses         
  aria-label) announces the value from page load and never updates.             
                                                       
  Expected results: Both sections should announce the current count value. The  
  Accessible Name and Description Computation spec (AccName 1.2) defines
  aria-labelledby resolution as a recursive computation of the referenced       
  element&apos;s accessible name, which includes aria-label. The spec does not
  distinguish between name sources.

  Build date and hardware: macOS 26.5.1, Safari 26.5                            
   
  Test case:                                                                    
                                                      
  &lt;!DOCTYPE html&gt;                                                               
  &lt;html lang=&quot;en&quot;&gt;                                     
  &lt;head&gt;
  &lt;meta charset=&quot;UTF-8&quot;&gt;
  &lt;title&gt;aria-labelledby resolution test&lt;/title&gt;
  &lt;/head&gt;                                                                       
  &lt;body&gt;
                                                                                
  &lt;h1&gt;aria-labelledby resolution test&lt;/h1&gt;                                      
  &lt;p&gt;Two sections update a counter every second. Navigate away and back with
  VoiceOver.&lt;/p&gt;                                                                
                                                       
  &lt;h2&gt;Section A — textContent on referenced element&lt;/h2&gt;                        
  &lt;section aria-labelledby=&quot;text-ref&quot;&gt;                 
    &lt;p id=&quot;text-ref&quot;&gt;Count: 0&lt;/p&gt;                                               
  &lt;/section&gt;                                           

  &lt;p&gt;&lt;a href=&quot;#&quot;&gt;Focusable element&lt;/a&gt;&lt;/p&gt;                                      
   
  &lt;h2&gt;Section B — aria-label on referenced element&lt;/h2&gt;                         
  &lt;section aria-labelledby=&quot;aria-ref&quot;&gt;                 
    &lt;p id=&quot;aria-ref&quot; role=&quot;img&quot; aria-label=&quot;Count: 0&quot;&gt;Visual content&lt;/p&gt;
  &lt;/section&gt;                                                                    
                                                                                
  &lt;p&gt;&lt;a href=&quot;#&quot;&gt;Focusable element&lt;/a&gt;&lt;/p&gt;                                      
                                                                                
  &lt;script&gt;                                             
  let count = 0;
  setInterval(() =&gt; {
    count++;
    document.getElementById(&apos;text-ref&apos;).textContent = &apos;Count: &apos; + count;
    document.getElementById(&apos;aria-ref&apos;).setAttribute(&apos;aria-label&apos;, &apos;Count: &apos; +  
  count);                                                                       
  }, 1000);                                                                     
  &lt;/script&gt;                                                                     
  &lt;/body&gt;                                              
  &lt;/html&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2222809</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2026-06-22 11:13:36 -0700</bug_when>
    <thetext>&lt;rdar://problem/180319221&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2225541</commentid>
    <comment_count>2</comment_count>
    <who name="Tyler Wilcock">tyler_w</who>
    <bug_when>2026-06-30 17:23:16 -0700</bug_when>
    <thetext>Pull request: https://github.com/WebKit/WebKit/pull/68382</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>2225862</commentid>
    <comment_count>3</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2026-07-01 13:31:52 -0700</bug_when>
    <thetext>Committed 316316@main (66ebec86604f): &lt;https://commits.webkit.org/316316@main&gt;

Reviewed commits have been landed. Closing PR #68382 and removing active labels.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>480179</attachid>
            <date>2026-06-22 11:13:29 -0700</date>
            <delta_ts>2026-06-22 11:13:29 -0700</delta_ts>
            <desc>Simple test case</desc>
            <filename>aria-labelledby-resolution-test.html</filename>
            <type>text/html</type>
            <size>903</size>
            <attacher name="Sarah">sarahjane_ward</attacher>
            
              <data encoding="base64">PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ImVuIj4KPGhlYWQ+CjxtZXRhIGNoYXJzZXQ9IlVU
Ri04Ij4KPHRpdGxlPmFyaWEtbGFiZWxsZWRieSByZXNvbHV0aW9uIHRlc3Q8L3RpdGxlPgo8L2hl
YWQ+Cjxib2R5PgoKPGgxPmFyaWEtbGFiZWxsZWRieSByZXNvbHV0aW9uIHRlc3Q8L2gxPgo8cD5U
d28gc2VjdGlvbnMgdXBkYXRlIGEgY291bnRlciBldmVyeSBzZWNvbmQuIE5hdmlnYXRlIGF3YXkg
YW5kIGJhY2sgd2l0aCBWb2ljZU92ZXIuPC9wPgoKPGgyPlNlY3Rpb24gQSDigJQgdGV4dENvbnRl
bnQgb24gcmVmZXJlbmNlZCBlbGVtZW50PC9oMj4KPHNlY3Rpb24gYXJpYS1sYWJlbGxlZGJ5PSJ0
ZXh0LXJlZiI+CiAgPHAgaWQ9InRleHQtcmVmIj5Db3VudDogMDwvcD4KPC9zZWN0aW9uPgoKPHA+
PGEgaHJlZj0iIyI+Rm9jdXNhYmxlIGVsZW1lbnQ8L2E+PC9wPgoKPGgyPlNlY3Rpb24gQiDigJQg
YXJpYS1sYWJlbCBvbiByZWZlcmVuY2VkIGVsZW1lbnQ8L2gyPgo8c2VjdGlvbiBhcmlhLWxhYmVs
bGVkYnk9ImFyaWEtcmVmIj4KICA8cCBpZD0iYXJpYS1yZWYiIHJvbGU9ImltZyIgYXJpYS1sYWJl
bD0iQ291bnQ6IDAiPlZpc3VhbCBjb250ZW50PC9wPgo8L3NlY3Rpb24+Cgo8cD48YSBocmVmPSIj
Ij5Gb2N1c2FibGUgZWxlbWVudDwvYT48L3A+Cgo8c2NyaXB0PgpsZXQgY291bnQgPSAwOwpzZXRJ
bnRlcnZhbCgoKSA9PiB7CiAgY291bnQrKzsKICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGV4
dC1yZWYnKS50ZXh0Q29udGVudCA9ICdDb3VudDogJyArIGNvdW50OwogIGRvY3VtZW50LmdldEVs
ZW1lbnRCeUlkKCdhcmlhLXJlZicpLnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcsICdDb3VudDog
JyArIGNvdW50KTsKfSwgMTAwMCk7Cjwvc2NyaXB0Pgo8L2JvZHk+CjwvaHRtbD4K
</data>

          </attachment>
      

    </bug>

</bugzilla>