Populate emoji bar after PickerView is added to widget.

When items are added to the Picker emoji bar, the preferred size of
emoji bar views is used to determine how many items can be added without
overflowing the emoji bar.

Currently, Picker populates its emoji bar (with recent emojis etc.) when
PickerView is being created. This occurs before PickerView is added to a
widget, at which point the gif button preferred size may not be correct.
Then, too many emoji items can be added and the gif button can end up
truncated.

To fix this, instead populate the emoji bar after PickerView is added to
the Picker widget (after preferred sizes have been correctly computed).

As drive by, also simplify ResetEmojiBarToZeroState (since delegate_ is
guaranteed to be non-null) and prevent the gif button from eliding (for
better fallback behaviour if a similar truncation bug arises).

Bug: b:355544058
Change-Id: I99bd501a31246f61840036eaab6fb4cd52d91b6d
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5751545
Reviewed-by: Darren Shen <shend@chromium.org>
Commit-Queue: Michelle Chen <michellegc@google.com>
Cr-Commit-Position: refs/heads/main@{#1335841}
2 files changed
tree: 6bf516a21691bd2ccb0994457da46ce2562b3dae
  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.