[Read aloud] Refactor to separate server-side and app-side voice state.

We were keeping track of the responses from the VoicePackManager in the
same object as we were keeping track of our own application state. This
change decouples the client-side state and the responses that we receive
from the backend.

This introduces `voicePackInstallStatusServerResponses`, which is
essentially a cache of the server side statuses, and
`voiceStatusLocalState`, the state that our UI application needs.

For example, if we send a request to install a language, we mark it as
installing on the client side, if that's not the state yet on the server
side. Or, if the server says that it's INSTALLed but we don't see it yet
in getVoices(), we can mark it as not having been downloaded yet in the
client logic, and not have to overwrite the server response by
differentiating between INSTALLED and DOWNLOADED states. Or, if
installation takes a long time, we can mark it as failed in the client
side state, and keep the state representing the server as still
downloading.

I have more examples of where this was slowing down my development
where I needed to modify and react to application state, but needed to
be careful about overwriting the server responses for other parts of the
application that were using it. So I figured this was a good time to make the change.

Change-Id: I2ec4c8d9dd19ff2f43cf0f40b73b5a81a1e93001
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5584467
Commit-Queue: Eitan Goldberger <eitang@google.com>
Reviewed-by: Kristi Saney <kristislee@google.com>
Cr-Commit-Position: refs/heads/main@{#1308968}
12 files changed
tree: cbb8446765d587ce9b75fbd5f2d5e71f39ca6be3
  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. webkit/
  51. .clang-format
  52. .clang-tidy
  53. .clangd
  54. .eslintrc.js
  55. .git-blame-ignore-revs
  56. .gitallowed
  57. .gitattributes
  58. .gitignore
  59. .gitmodules
  60. .gn
  61. .mailmap
  62. .rustfmt.toml
  63. .vpython3
  64. .yapfignore
  65. ATL_OWNERS
  66. AUTHORS
  67. BUILD.gn
  68. CODE_OF_CONDUCT.md
  69. codereview.settings
  70. CPPLINT.cfg
  71. DEPS
  72. DIR_METADATA
  73. LICENSE
  74. LICENSE.chromium_os
  75. OWNERS
  76. PRESUBMIT.py
  77. PRESUBMIT_test.py
  78. PRESUBMIT_test_mocks.py
  79. README.md
  80. 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.