Add means to expose the displayed/tab-strip URL to AXPlatformNodes

NSAccessibility expects the URL from the active, top-level document to
be exposed on the NSWindow via accessibilityDocument.  In order to
reliably identify and return the correct URL, push it from the
BrowserView to the root platform accessible object as follows:

1. Watch for TabChangedAt in BrowserView.

2. For TabChangeType::kLoadingOnly, for the active web contents which
   is no longer loading, update the accessible URL for the RootView.

3. Have the RootView set the URL on the ViewAccessibility object
   which will cause it to be added to that object's AXNodeData so it
   can be retrieved via the delegate.

4. Add getters to AXPlatformNodeDelegate and AXPlatformNodeBase, the
   latter being the superclass of the various AXPlatformNode* classes
   on macOS, Linux, and Windows).

Test: `out/.../views_unittests --gtest_filter="*AccessibleURL*"`

Test: `out/.../accessibility_unittests --gtest_filter="*AccessibleURL*"`

Test: `out/.../unit_tests --gtest_filter="*AccessibleURL*"`

Test: `out/.../browser_tests \
   --gtest_filter="*.AccessibilityDocumentExposedOnWindow*"`

Low-Coverage-Reason: COVERAGE_UNDERREPORTED

* The change in native_widget_mac_nswindow.mm is covered by the
  updated test expectations in browser_window_mac_browsertest.mm.

* Those in ax_platform_node_delegate.cc + ax_platform_node_base.cc
  are covered by tests in view_ax_platform_node_delegate_unittest.cc
  and ax_platform_node_auralinux_unittest.cc.

Bug: 363275809

Change-Id: I486d31a0630a5da78390277bd0e11d546cf9ed7c
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6187085
Reviewed-by: Jayson Adams <shrike@chromium.org>
Commit-Queue: Joanmarie Diggs <jdiggs@igalia.com>
Reviewed-by: David Tseng <dtseng@chromium.org>
Reviewed-by: Benjamin Beaudry <benjamin.beaudry@microsoft.com>
Reviewed-by: Peter Kasting <pkasting@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1411899}
25 files changed
tree: 0c61ad5d1f4462f6e693ad93ddfc22a7f1364d70
  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. description
  71. DIR_METADATA
  72. LICENSE
  73. LICENSE.chromium_os
  74. OWNERS
  75. PRESUBMIT.py
  76. PRESUBMIT_test.py
  77. PRESUBMIT_test_mocks.py
  78. README.md
  79. 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.