Bug 254205

Summary: AX: iOS VoiceOver skips newly rendered Web DOM elements
Product: WebKit Reporter: Gintaras Grazinskis <gintaras.grazinskis1>
Component: UI EventsAssignee: Nobody <webkit-unassigned>
Status: NEW ---    
Severity: Critical CC: webkit-bug-importer
Priority: P2 Keywords: InRadar
Version: Safari 16   
Hardware: iPhone / iPad   
OS: iOS 16   
URL: https://suex2z.csb.app/
Attachments:
Description Flags
Bug reproduction on iPad none

Description Gintaras Grazinskis 2023-03-21 02:39:11 PDT
Created attachment 465537 [details]
Bug reproduction on iPad

VoiceOver sometimes cannot “see” newly rendered elements. This can happen with or without user interaction. For example: virtualized list that renders new elements as user scrolls; some status page that updates DOM based on Ajax polling. 

Steps to reproduce:
1. Open https://suex2z.csb.app/ on an iOS device;
2. Turn on VoiceOver;
3. Click button “0”;
4. App will render four new buttons: 1, 2, 3, 4 with one second delay between each render;
5. Before “4” is rendered, swipe right to navigate to the next button;
6. After “4” is rendered, try to navigate onto “4” by swiping right.
 
Expected result: VO focus shifts to button “4”.
 
Actual result: VO focus goes to “Open sandbox” button. Last focused button is 1, 2 or 3. But never “4”. "4" was skipped.
 
While this example might look like an edge case, such bug can occur with list virtualization. For example, we’ve encountered this behaviour with the library https://virtuoso.dev/.

Is this behaviour documented somewhere? We were not able to find information on this online.
 
Devices where we were able to reproduce this: iPad 9th gen (iOS 15.6), iPhone 11 (iOS 16.02).
Comment 1 Radar WebKit Bug Importer 2023-03-28 02:40:15 PDT
<rdar://problem/107308215>