Backlight OCR: Implements the "hit test" accessibility action.

When a hit test accessibility action is performed, the assistive
software provides a screen point and expects to get back
the accessibility node under that point. This is primarily used by
Select-to-Speak, which is a piece of assistive software
on ChromeOS that reads the text that the user points to using the
mouse.

When a PDF is opened in the Media App on ChromeOS, we perform OCR on
all the PDF content, get bounding rectangles from the OCR engine,
thus allowing the Select-to-Speak user to point to any on-screen
item to have it read.

Security considerations:
The renderer controls the tree ID of the OCRed content that it
provides to the hit test action for that
content.
However:
the stitched child tree ID is an unguessable token and thus hard to
come up with for any random renderer,
the renderer already provides the node ID for the hit test target and
could thus provide any target it wants in that renderer - so why
should there be a need to maskarate as another renderer.
There is no accessibility tree on the browser side for the renderer
content that can therefore be used to validate the renderer provided
tree ID.
The renderer does not control the event that should be fired,
nor the request ID of the hit test action.

Design doc at:
https://docs.google.com/document/d/1k8OH4XGjZrLVA705Xfy6vzSwGL9DkfRt9DG5s66lRjQ/edit?usp=sharing&resourcekey=0-K_9Y1EMhNoo8Ez9RPbQNMA

R=kyungjunlee@google.com

AX-Relnotes: Select-to-Speak now works in the MediaApp, AKA Backlight.
Change-Id: Ic6b0eb764aa2c27c5f145a23be65973f0bca9c40
Bug: 342563905
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6000136
Reviewed-by: Kyungjun Lee <kyungjunlee@google.com>
Commit-Queue: Nektarios Paisios <nektar@chromium.org>
Reviewed-by: Ken Buchanan <kenrb@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1382208}
9 files changed
tree: c8a9c9bd653804d39969d132539bed57dbad2b61
  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. crypto/
  16. dbus/
  17. device/
  18. docs/
  19. extensions/
  20. fuchsia_web/
  21. gin/
  22. google_apis/
  23. gpu/
  24. headless/
  25. infra/
  26. ios/
  27. ipc/
  28. media/
  29. mojo/
  30. native_client_sdk/
  31. net/
  32. pdf/
  33. ppapi/
  34. printing/
  35. remoting/
  36. rlz/
  37. sandbox/
  38. services/
  39. skia/
  40. sql/
  41. storage/
  42. styleguide/
  43. testing/
  44. third_party/
  45. tools/
  46. ui/
  47. url/
  48. webkit/
  49. .clang-format
  50. .clang-tidy
  51. .clangd
  52. .git-blame-ignore-revs
  53. .gitallowed
  54. .gitattributes
  55. .gitignore
  56. .gitmodules
  57. .gn
  58. .mailmap
  59. .rustfmt.toml
  60. .vpython3
  61. .yapfignore
  62. ATL_OWNERS
  63. AUTHORS
  64. BUILD.gn
  65. CODE_OF_CONDUCT.md
  66. codereview.settings
  67. CPPLINT.cfg
  68. CRYPTO_OWNERS
  69. DEPS
  70. DIR_METADATA
  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.