Adds a predicate for finding empty paragraphs and uses it for defining a new paragraph boundary for UIA

In AXPosition, we add a new predicate that defines the "empty paragraph" and we then use this in order to
be able to skip all trailing empty paragraphs that come after a non-empty paragraph.
This is because according to the Microsoft developer documentation, for UI Automation, all trailing empty lines should be merged with the previous paragraph
when searching for the next paragraph.


Meanwhile, this patch makes certain necessary parallel fixes:

1. If two lines or two paragraphs are separated by multiple line / paragraph boundaries that are ignored in the
accessibility tree, treat them as one. This could happen when multiple consecutive
boundaries are hidden via aria-hidden.

2. If the next / previous boundary is requested while on an ignored node, skip to the next / previous unignored
node, so as not to prematurely stop searching for the next / previous boundary:
<div>Paragraph 1</div>
<div aria-hidden="true">Ignored paragraph</div>
<div>Paragraph 2</div>
If we are searching for the previous paragraph start boundary while being on "Paragraph 2", if we don't skip the
"Ignored paragraph" we will prematurely stop there, and would then adjust to the next unignored position, therefore returning back
to "Paragraph 2". This is certainly erronious.
Similar issues arise for format and line boundaries, in addition to paragraph ones.

Lastly, this patch modifies a few comments that describe the various line / paragraph predicates to explain their behavior better.

Split out from:
https://chromium-review.googlesource.com/c/chromium/src/+/3001275/

R=dmazzoni@chromium.org

AX-Relnotes: n/a.
Change-Id: I88335ab06b56cfd6d4f55adc62fb8c05b29652c7
Bug: 1135589, 1147543, 1027753, 1015408
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3063058
Commit-Queue: Nektarios Paisios <nektar@chromium.org>
Auto-Submit: Nektarios Paisios <nektar@chromium.org>
Reviewed-by: Adam Ettenberger <Adam.Ettenberger@microsoft.com>
Reviewed-by: Dominic Mazzoni <dmazzoni@chromium.org>
Cr-Commit-Position: refs/heads/master@{#912135}
1 file changed
tree: 0c13896716134ac1b6884b6782531efc3c47131a
  1. android_webview/
  2. apps/
  3. ash/
  4. base/
  5. build/
  6. build_overrides/
  7. buildtools/
  8. cc/
  9. chrome/
  10. chromecast/
  11. chromeos/
  12. cloud_print/
  13. codelabs/
  14. components/
  15. content/
  16. courgette/
  17. crypto/
  18. dbus/
  19. device/
  20. docs/
  21. extensions/
  22. fuchsia/
  23. gin/
  24. google_apis/
  25. google_update/
  26. gpu/
  27. headless/
  28. infra/
  29. ios/
  30. ipc/
  31. jingle/
  32. media/
  33. mojo/
  34. native_client_sdk/
  35. net/
  36. pdf/
  37. ppapi/
  38. printing/
  39. remoting/
  40. rlz/
  41. sandbox/
  42. services/
  43. skia/
  44. sql/
  45. storage/
  46. styleguide/
  47. testing/
  48. third_party/
  49. tools/
  50. ui/
  51. url/
  52. weblayer/
  53. .clang-format
  54. .clang-tidy
  55. .eslintrc.js
  56. .git-blame-ignore-revs
  57. .gitattributes
  58. .gitignore
  59. .gn
  60. .mailmap
  61. .vpython
  62. .vpython3
  63. .yapfignore
  64. AUTHORS
  65. BUILD.gn
  66. CODE_OF_CONDUCT.md
  67. codereview.settings
  68. DEPS
  69. DIR_METADATA
  70. ENG_REVIEW_OWNERS
  71. LICENSE
  72. LICENSE.chromium_os
  73. OWNERS
  74. PRESUBMIT.py
  75. PRESUBMIT_test.py
  76. PRESUBMIT_test_mocks.py
  77. README.md
  78. WATCHLISTS
README.md

Logo Chromium

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.

If you found a bug, please file it at https://crbug.com/new.