[Webkit-unassigned] [Bug 187824] AX: Press tab to highlight items on a webpage is not working with voiceover enabled

bugzilla-daemon at webkit.org bugzilla-daemon at webkit.org
Thu Jul 19 21:52:13 PDT 2018


https://bugs.webkit.org/show_bug.cgi?id=187824

--- Comment #5 from Nan Wang <n_wang at apple.com> ---
Comment on attachment 345390
  --> https://bugs.webkit.org/attachment.cgi?id=345390
patch

View in context: https://bugs.webkit.org/attachment.cgi?id=345390&action=review

>>>> Source/WebCore/dom/Document.cpp:1871
>>>> +            }
>>> 
>>> Any style mutation with an associated renderer will trigger a RenderElement::setStyle() call. Even mutations that don't need layout. Consulting StyleDifference in setStyle() might be a better way to get the AX cache updated.  
>>> Also you may want to limit the performDeferredCacheUpdate() calls to focusable elements since calling AX cache on every repaint could be a performance hit.
>> 
>> Here we are doing the AX cache update on the document level and it's under the styleUpdate check. Are you saying:
>> 1. frameView.needsLayout() check is not enough, we should use the StyleDifference in renderElement?
>> 2. We should move the AX cache update to a RenderElement level, so for each RenderElement we check and update the cache in setStyle()? I think performDeferredCacheUpdate() is designed as a batch update mechanism. We are calling that in FrameView performPostLayoutTasks(). So I'm looking for some place similar, that indicates the FrameView;s style is resolved.
> 
> Oh right, this is the "perform" and not the "dirtying" part. So who is dirtying the AX tree when non-layout type of mutation happens? I would assume that if AX tree sees that the mutation is not going to trigger layout, it could just issue a timer and update the tree in the next runloop.

This one is triggered in Document::setFocusedElement()
if (!focusChangeBlocked && m_focusedElement) {
    // Create the AXObject cache in a focus change because GTK relies on it.
    if (AXObjectCache* cache = axObjectCache()) 
        cache->deferFocusedUIElementChangeIfNeeded(oldFocusedElement.get(), newFocusedElement.get());
 }

Should we just do not defer in this case?

-- 
You are receiving this mail because:
You are the assignee for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.webkit.org/pipermail/webkit-unassigned/attachments/20180720/ac97d40b/attachment.html>


More information about the webkit-unassigned mailing list