commit | 0fedd71fce5cd27dcdf6acd7ddd31478f82a058f | [log] [tgz] |
---|---|---|
author | Nektarios Paisios <nektar@chromium.org> | Wed Feb 10 10:28:38 2021 |
committer | Chromium LUCI CQ <chromium-scoped@luci-project-accounts.iam.gserviceaccount.com> | Wed Feb 10 10:28:38 2021 |
tree | 604e32fa702d5b061a375e5d8a78d0cdf234bb09 | |
parent | 8190a2e8c4a27e0f9704b89d3d9ec1d0523d63a8 [diff] |
Fixed AXPosition's comparison operators in their handling of embedded objects and affinity This patch needs to land before we would be able to merge BrowserAccessibilityPosition with AXNodePosition. Example AX tree referred to from below: ++kRootWebArea "<embedded><embedded>" ++++kParagraph1 "hello" ++++kParagraph2 "world" 1. Embedded objects: According to the IAccessible2 Spec, a text position inside an embedded object is equivalent to an ancestor position after the embedded object, unless the former is at its start. A) In the middle of paragraph1. TextPosition anchor=kParagraph1 text_offset=3 annotated_text=hel<l>o B) Ancestor equivalent position to (A). TextPosition anchor=kRootWebArea text_offset=1 affinity=upstream Comparing (A) to (B) should return that they are equivalent. The reason behind this decision is that there would always be some loss of information when moving to an ancestor equivalent position from within an embedded object, and there had to be a default behavior as to where that ancestor position would be placed for purposes of comparing caret positions. If the caret position is after the embedded object character in the embedded object's parent, then the caret is either inside or after the embedded object, and the AT needs to query the embedded object to find out a more exact position. Similarly, AXPosition needs to have a default way of comparing a text position with a nancestor position in order to be able to compare caret and selection endpoints for Windows (IAccessible2) and Linux (ATK) AT clients. 2. Affinity: Two text positions with different affinities were compared correctly. However, in some cases, comparing a tree to a text position needs to have the same treatment. If everything else is equivalent except affinities, then an upstream affinity should be less than a downstream affinity. A) Right before the second paragraph TextPosition anchor=kRootWebArea text_offset=1 affinity=downstream B) After the first paragraph's text (an "after text position"). TreePosition anchor=kParagraph1 child_id=0 (child_index=0 signifies "after text".) Comparing (A) to (B) should not return that they are equal. 3. Re-enabled tests that had to be disabled in order to land https://crrev.com/c/2665948 because of bugs in `AXPosition::CompareTo` and `AXPosition::SlowCompareTo`, bugs that have been fixed by this patch. 4. Unexpectedly, this patch has also fixed a known bug (1039528) in one of our Windows unittests. R=dmazzoni@chromium.org, aleventhal@chromium.org, kschmi@microsoft.com AX-Relnotes: n/a. Change-Id: Ic075e18edaa97d0ece1bf795cc31a4b159d431ab Bug: 1049261, 1039528 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2658639 Commit-Queue: Nektarios Paisios <nektar@chromium.org> Reviewed-by: Dominic Mazzoni <dmazzoni@chromium.org> Cr-Commit-Position: refs/heads/master@{#852568}
Chromium is an open-source browser project that aims to build a safer, faster, and more stable way for all users to experience the web.
The project's web site is https://www.chromium.org.
To check out the source code locally, don't use git clone
! Instead, follow the instructions on how to get the code.
Documentation in the source is rooted in docs/README.md.
Learn how to Get Around the Chromium Source Code Directory Structure .
For historical reasons, there are some small top level directories. Now the guidance is that new top level directories are for product (e.g. Chrome, Android WebView, Ash). Even if these products have multiple executables, the code should be in subdirectories of the product.