[lacros] Add support for virtual keyboard occluded bounds.

This change introduces a new wayland event for zwp_extended_text_input_v1 that sends the virtual keyboard occluded bounds to the client. This allows the lacros client to know the part of the window that is occluded by the virtual keyboard and make adjustments like scrolling the web content to make a text input visible.

Design doc: go/lacros-vk-bounds

The current implementation has 3 bugs that I will investigate further:
* When changing focus from the omni-bar to a web content text input via mouse click, there's a race condition where the text input doesn't get focused sometimes.
* While focusing on a web content text input, clicking on an element in the browser toolbar, like the Extensions icon, doesn't un-scroll the web content back after the vk closes, resulting in extra empty space where the vk used to be.
* When changing focus back to a previously focused web content text input from the omni-bar or by closing popup menu, the web content will re-scroll unnecessarily.

Bug: 1253006
Change-Id: Ibf3734a08403f1530733a08c1b6c93e7327ba038
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3751738
Reviewed-by: Kramer Ge <fangzhoug@chromium.org>
Commit-Queue: Addison Luh <aluh@chromium.org>
Reviewed-by: Ken Buchanan <kenrb@chromium.org>
Reviewed-by: Darren Shen <shend@chromium.org>
Reviewed-by: Mitsuru Oshima <oshima@chromium.org>
Reviewed-by: Hidehiko Abe <hidehiko@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1030796}
18 files changed
tree: fff6020a7014841ed7a2debc87b543d97333b3f6
  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. weblayer/
  51. .clang-format
  52. .clang-tidy
  53. .eslintrc.js
  54. .git-blame-ignore-revs
  55. .gitattributes
  56. .gitignore
  57. .gn
  58. .mailmap
  59. .rustfmt.toml
  60. .vpython
  61. .vpython3
  62. .yapfignore
  63. AUTHORS
  64. BUILD.gn
  65. CODE_OF_CONDUCT.md
  66. codereview.settings
  67. DEPS
  68. DIR_METADATA
  69. ENG_REVIEW_OWNERS
  70. LICENSE
  71. LICENSE.chromium_os
  72. OWNERS
  73. PRESUBMIT.py
  74. PRESUBMIT_test.py
  75. PRESUBMIT_test_mocks.py
  76. README.md
  77. 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.