Add internal state boolean for Android AccessibilityState class

This CL adds a new boolean to the AccessibilityState class to track
whether or not the class has registered ContentObservers, which we will
now distinguish from the boolean to track initialized state.

The AccessibilityState is lazily initialized when the first request for
the current system state is received, due to the heaviness of the calls.
We first create the class, and register observers for various changes
in app and system states, and then later we initialize the state on the
first query. When the app is backgrounded we unregister our observers
and re-register when the app is brought to foreground (as long as the
class has not been initialized). The issue was that there were edge
cases where the app could be backgrounded, and then afterwards a client
queries the state (e.g. the accessibility historam recorders during the
subsequent onHide methods), which re-initializes the AccessibilityState.
If this happens, then when we re-open Chrome, we do not re-register
the observers because it appears that the AccessibilityState is already
initialized.

We cannot remove the logic to query state from the histogram recorder,
and we need to keep it in the onHide to handle such cases as tab
switches or closing pages. So, we separate out the sInitialized into
two pieces (which makes more sense anyway since there are two distinct
things this was technically tracking). We create a boolean to track
sHasRegisteredObservers, which is effectively "has the class been
constructed and connected to the system", while keeping the existing
sInitialized, which is effectively "has the class been queried by a
client and is storing the system state". With two distinct booleans we
are now able to catch the edge cases where one may be true but not the
other.

AX-Relnotes: N/A
Bug: 40949421
Change-Id: I66f99d93c2cd8e50d731faf05533cd57e111ec80
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5907263
Commit-Queue: Mark Schillaci <mschillaci@google.com>
Reviewed-by: Akihiro Ota <akihiroota@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1363618}
1 file changed
tree: e4b64b45fe70ea6e2ceb8ef3677fca36565cd4c2
  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. google_update/
  24. gpu/
  25. headless/
  26. infra/
  27. ios/
  28. ipc/
  29. media/
  30. mojo/
  31. native_client_sdk/
  32. net/
  33. pdf/
  34. ppapi/
  35. printing/
  36. remoting/
  37. rlz/
  38. sandbox/
  39. services/
  40. skia/
  41. sql/
  42. storage/
  43. styleguide/
  44. testing/
  45. third_party/
  46. tools/
  47. ui/
  48. url/
  49. webkit/
  50. .clang-format
  51. .clang-tidy
  52. .clangd
  53. .git-blame-ignore-revs
  54. .gitallowed
  55. .gitattributes
  56. .gitignore
  57. .gitmodules
  58. .gn
  59. .mailmap
  60. .rustfmt.toml
  61. .vpython3
  62. .yapfignore
  63. ATL_OWNERS
  64. AUTHORS
  65. BUILD.gn
  66. CODE_OF_CONDUCT.md
  67. codereview.settings
  68. CPPLINT.cfg
  69. CRYPTO_OWNERS
  70. DEPS
  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.