[webkit-changes] [WebKit/WebKit] edd3ae: AX: VoiceOver hangs in Safari when a select elemen...

Tyler Wilcock noreply at github.com
Wed Jan 29 15:34:45 PST 2025


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: edd3aebf883a942b39a45c649da0218e74b9b4c2
      https://github.com/WebKit/WebKit/commit/edd3aebf883a942b39a45c649da0218e74b9b4c2
  Author: Tyler Wilcock <tyler_w at apple.com>
  Date:   2025-01-29 (Wed, 29 Jan 2025)

  Changed paths:
    A LayoutTests/accessibility/self-deleting-select-element-expected.txt
    A LayoutTests/accessibility/self-deleting-select-element.html
    M Source/WebCore/accessibility/AccessibilityObject.cpp

  Log Message:
  -----------
  AX: VoiceOver hangs in Safari when a select element deletes itself as a result of an onchange event
https://bugs.webkit.org/show_bug.cgi?id=286690
rdar://143830006

Reviewed by Chris Fleizach.

AccessibilityObject::documentFrameView() is called a result of isIgnored(). When we process tree updates as a result
of a select element removing itself from the DOM, we can get into an infinite loop, as there may be strong references
to the select accessibility object on the stack, but its renderer and node are gone. So when a descendant iterates up
to it in AccessibilityObject::documentFrameView(), we try to use it to get a documentFrameView() because it
isAccessibilityRenderObject(), even though it no longer has a renderer. Then the descendant continues trying to find
a documentFrameView(), hits the renderer-less and node-less ancestor select again, repeating forever.

Fix this by making AccessibilityObject::documentFrameView() ensure the AccessibilityRenderObject or AccessibilityNodeObject
it iterates to actually has a valid node or renderer.

* Source/WebCore/accessibility/AccessibilityObject.cpp:
(WebCore::AccessibilityObject::documentFrameView const):
* LayoutTests/accessibility/self-deleting-select-element-expected.txt: Added.
* LayoutTests/accessibility/self-deleting-select-element.html: Added.

Canonical link: https://commits.webkit.org/289526@main



To unsubscribe from these emails, change your notification settings at https://github.com/WebKit/WebKit/settings/notifications


More information about the webkit-changes mailing list