Assign "click ancestor" default action to text nodes.

Text nodes did not have any default action set by AXObject::Action(),
because they don't have a backing Element object. On the other hand,
ATs expect that clicking the text node inside a container has the same
effect as clicking on the container, and that was the cause of
crbug.com/1370076. To address the bug, we allowed ATs to run the
default action on nodes that don't have any, but a better solution
would have been to assign text nodes a default action, if their
parent node has any.

This CL makes text nodes expose a "click ancestor" default action when
their parent has any default action. This is the same action that would
be assigned to containers which are inside a clickable parent, e.g. in
<a href="#"><div>link</div></a>, the <a> node has the action
"jump" and the <div> has "click ancestor". Now, the text node inside
the div would get "click ancestor", too. Alternatively, in the example
<a href="#">link</a>, the <a> would expose "jump" and the text node
would expose "click ancestor" after this CL.

As a positive side effect, we also set the default action for nodes
corresponding to pseudo elements, following the same rules.

We don't revert the workaround that allows ATs to run a default action
when it's "none" yet. We will address that with a DCHECK that detects
other potentially problematic situations.

Bug: 1382034
Change-Id: Ia99d86975486745f37860b7d3fc7fc0e39b04262
AX-relnotes: Expose default action on text nodes to AX toolkits
Cq-Include-Trybots: luci.chromium.try:linux-blink-web-tests-force-accessibility-rel
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4009258
Reviewed-by: Nektarios Paisios <nektar@chromium.org>
Commit-Queue: Jacobo Aragunde Pérez <jaragunde@igalia.com>
Reviewed-by: David Tseng <dtseng@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1075708}
27 files changed
tree: 96a03f22d68293374d50a60c32855fc5f668659d
  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. codelabs/
  13. components/
  14. content/
  15. courgette/
  16. crypto/
  17. dbus/
  18. device/
  19. docs/
  20. extensions/
  21. fuchsia_web/
  22. gin/
  23. google_apis/
  24. google_update/
  25. gpu/
  26. headless/
  27. infra/
  28. ios/
  29. ipc/
  30. media/
  31. mojo/
  32. native_client_sdk/
  33. net/
  34. pdf/
  35. ppapi/
  36. printing/
  37. remoting/
  38. rlz/
  39. sandbox/
  40. services/
  41. skia/
  42. sql/
  43. storage/
  44. styleguide/
  45. testing/
  46. third_party/
  47. tools/
  48. ui/
  49. url/
  50. weblayer/
  51. .clang-format
  52. .clang-tidy
  53. .eslintrc.js
  54. .git-blame-ignore-revs
  55. .gitattributes
  56. .gitignore
  57. .gn
  58. .mailmap
  59. .rustfmt.toml
  60. .vpython3
  61. .yapfignore
  62. AUTHORS
  63. BUILD.gn
  64. CODE_OF_CONDUCT.md
  65. codereview.settings
  66. DEPS
  67. DIR_METADATA
  68. ENG_REVIEW_OWNERS
  69. LICENSE
  70. LICENSE.chromium_os
  71. OWNERS
  72. PRESUBMIT.py
  73. PRESUBMIT_test.py
  74. PRESUBMIT_test_mocks.py
  75. README.md
  76. 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.