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}
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.