Issue metadata
Sign in to add a comment
|
a11y: AT software compatibility - Allow assistive technology to retrieve the character after the caret from the caret object |
||||||||||||||||||||||
Issue descriptionThis is part of a trio bugs around AT software and: A) Text editing B) Caret tracking and C) Address bar This is for item B: On Windows, an assistive technology can call GetAccessibleObjectFromWindow (…OBJID_CARET…) in response to the EVENT_OBJECT_LOCATIONCHANGE or IA2_TEXT_CARET_MOVED events to retrieve an IAccessible representing the caret object. Actual results: Calling IAccessible::accValue on that object returns the empty string. Expected results: Some assistive technology vendors would like us to return the character after the caret so that they can easily track it. This bug is related to the following bugs: item A: a11y: AT software compatibility - ensure that the order of caret events is consistent https://bugs.chromium.org/p/chromium/issues/detail?id=785129 item C: a11y: AT software compatibility - Ensure that in the address bar will return a valid location https://bugs.chromium.org/p/chromium/issues/detail?id=785131 Another related bug not listed above # Valid caret bounds should be reported when the container containing the caret moves, not only when the caret offset changes https://bugs.chromium.org/p/chromium/issues/detail?id=782843
,
Nov 15 2017
,
Nov 15 2017
,
Nov 15 2017
Update from a user using Chrome 62.0.3202.94 (64 bit) on Windows 10 (64 bit v-1703.15063.674) I don’t see a caret object created event (but no matter if a move event comes in, we will treat that as created as well) I don’t see a caret object destroyed event (but generally, a focus event occurs which causes ZoomText to declare the caret destroyed until another move) I get 2 caret move events which provide different information in different cases Using www.freedomscientific.com as the reference webpage, this is what I saw happen: When the caret is positioned in the URL edit field IA2_EVENT_TEXT_CARET_MOVED is fired regardless of whether the field contains any text (THIS IS GOOD) Asking for the location of the event’s IAccessible returns the location of the entire edit field which is of no use since we want the caret’s location Calls to IAccessibleText get_characterextents specifying IA2_TEXT_OFFSET_CARET & IA2CoordinateType::IA2_COORDTYPE_SCREEN_RELATIVE returned 0x80004001L: // E_NOTIMPL Calls to IAccessibleText get_textAtOffset specifying IA2_TEXT_OFFSET_CARET, IA2TextBoundaryType::IA2_TEXT_BOUNDARY_CHAR, were successful and returned the character to the right of the caret location EVENT_OBJECT_LOCATIONCHANGE event with OBJID_CARET is fired regardless of whether the field contains any text (THIS IS GOOD) Calls to GetAccessibleObjectFromWindow with OBJID_CARET returned an IAccessible whose location was the caret name was “edit” value was “” Calls to IAccessibleText get_textAtOffset specifying IA2_TEXT_OFFSET_CARET, IA2TextBoundaryType::IA2_TEXT_BOUNDARY_CHAR, always returns ‘E’ as in “Edit” the name of the control When the caret is positioned in the Search edit field in the upper right side on that webpage IA2_EVENT_TEXT_CARET_MOVED is fired regardless of whether the field contains any text (THIS IS GOOD) Asking for the location of the event’s IAccessible returns the location of the entire edit field which is of no use since we want the caret’s location If there is no text in the edit control, calls to IAccessibleText get_characterextents specifying IA2_TEXT_OFFSET_CARET & IA2CoordinateType::IA2_COORDTYPE_SCREEN_RELATIVE returned an empty rect (THIS IS BAD – there is a blinking caret there) If there is text in the edit control, calls to IAccessibleText get_characterextents specifying IA2_TEXT_OFFSET_CARET & IA2CoordinateType::IA2_COORDTYPE_SCREEN_RELATIVE returned the location of the caret Calls to IAccessibleText get_textAtOffset specifying IA2_TEXT_OFFSET_CARET, IA2TextBoundaryType::IA2_TEXT_BOUNDARY_CHAR, were successful and returned the character to the right of the caret location (if there was one) EVENT_OBJECT_LOCATIONCHANGE event with OBJID_CARET is fired only if the field contains text (THIS IS BAD) If the field has text, actually got two EVENT_OBJECT_LOCATIONCHANGE events from different windows and Calls to GetAccessibleObjectFromWindow with OBJID_CARET returned an IAccessible with a location as follows: Chrome_RenderWidgetHostHWND first with previous caret location Chrome_WidgetWin_1 second with correct caret location Calls to GetAccessibleObjectFromWindow with OBJID_CARET returned an IAccessible whose location was the caret name was “edit” value was “” Calls to IAccessibleText get_textAtOffset specifying IA2_TEXT_OFFSET_CARET, IA2TextBoundaryType::IA2_TEXT_BOUNDARY_CHAR, always returns ‘E’ as in “Edit” the name of the control A quick check in a reply to an email in gmail yielded: IA2_EVENT_TEXT_CARET_MOVED not fired at all EVENT_OBJECT_LOCATIONCHANGE event with OBJID_CARET is fired twice (same window classes as above) only if the field (or line) contains text (THIS IS BAD) If the field has text, actually got two EVENT_OBJECT_LOCATIONCHANGE events from different windows and Calls to GetAccessibleObjectFromWindow with OBJID_CARET returned an IAccessible with a location as follows: Chrome_RenderWidgetHostHWND first with last caret location Chrome_WidgetWin_1 second with correct caret location Calls to GetAccessibleObjectFromWindow with OBJID_CARET returned an IAccessible whose location was the caret name was “edit” value was “”
,
Dec 15 2017
,
Jan 26 2018
I can confirm/replicate all these problems (with Supernova). |
|||||||||||||||||||||||
►
Sign in to add a comment |
|||||||||||||||||||||||
Comment 1 by leberly@chromium.org
, Nov 15 2017