Bug 166705

Summary: AX: Element with display:none's aria-flowto is not considered
Product: WebKit Reporter: Jonathan Deutsch <jonathan>
Component: AccessibilityAssignee: Nobody <webkit-unassigned>
Status: NEW ---    
Severity: Normal CC: webkit-bug-importer
Priority: P2 Keywords: InRadar
Version: Safari 10   
Hardware: iPhone / iPad   
OS: iOS 10   

Description Jonathan Deutsch 2017-01-04 17:12:29 PST
If there is an aria-flowto chain and one of the elements is set to display:none, it will ignore the subsequent pointers and go by DOM ordering.

Consider the following HTML:

<div id="item1" role="img", aria-flowto="item2">  Item 1 (role=img, flowto=item2)</div>
<div id="item2" role="button" aria-flowto="item5">  Item 2 (role=button, flowto=item5)</div>
<div id="item3" role="img" aria-flowto="item6">  Item 3 (role=img, flowto=item6)</div>
<div id="item4" role="img" aria-flowto="item3">  Item 4 (role=img, flowto=item3)</div>
<div id="item5" role="img"   aria-flowto="item4" style="display:none">  Item 5 (role=img, flowto=item4, display:none)</div>
<div id="item6" role="radio">  Item 6 (role=radio)</div>

The flowto order would be:

1, 2, 5, 4, 3, 6

However, because item5 has display:none, the actual ordering is:

1, 2, 3, 6

This ordering misses 4, which clearly was meant to be visited.  I would have expected aria-flowto to be considered, and simply jump ahead to the next element so it would look like:

1, 2, 4, 3, 6

This means developers need to be very careful when setting display:none, and tools like Tumult Hype need to take extra care in managing flowto chains.

Interestingly this is different than if aria-hidden=true were on the element (see https://bugs.webkit.org/show_bug.cgi?id=166703)

I am reproducing on iPad Pro with iOS 10.2.1 via:
1. Enabling VoiceOver
2. Swiping to the right
Comment 1 Radar WebKit Bug Importer 2017-01-04 17:12:49 PST
<rdar://problem/29875302>