[NTP Customization] Add NTP Customization toolbar button (part 7)

This CL adds the NTP Customization toolbar button next to the Home
button by integrating it into ToolbarPhone. The timing of their
appearance is shown below:
1. When the current page is the NTP:
   a. If the homepage is disabled or set to the NTP, only the NTP
customization button will be shown.
   b. If the homepage is enabled and set to a different webpage, both
the Home button and the NTP customization button will be displayed.
2. When the current page is not the NTP:
   a. The NTP customization button will not be shown.
   b. The Home button will be shown only if the homepage is enabled.

As a result, there may be two buttons on the left side of the toolbar,
which can appear or disappear depending on the context. Therefore, we
deprecated the original Home button and replaced it with two list menu
buttons to manage their individual behavior. These buttons are centrally
managed by the HomePageButtonsCoordinator, which is created in the
ToolbarManager and passed into ToolbarPhone. The coordinator updates the
appearance of the two optional buttons based on changes such as the
visual state of ToolbarPhone or homepage updates. The final behavior is
shown below:https://drive.google.com/file/d/1fLqV27_lbo5gqWVqzTMI4_e9kmQXGaCI/view?
usp=sharing&resourcekey=0-qctOPf4qXh0iNjlVVbP9UA

To integrate the new home page buttons feature, which is controlled by a
flag, I've introduced a HomeButtonDisplay interface. This interface
helps encapsulate the logic for both the new buttons and the original
home button. Both the new HomePageButtonsCoordinator and the original
HomeButtonCoordinator implement this interface. The ToolbarManager is
responsible for creating both coordinators. It checks the flag to
determine which coordinator to use and then passes the selected one to
ToolbarPhone as a HomeButtonDisplay object. This approach centralizes
the feature flag logic, avoiding the need for checks throughout the
codebase.

Bug: 407554279
Change-Id: I4969b3d2ffa304d1b1db3d9c7b7bedf0a0783537
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6394955
Commit-Queue: Xinyi Ji <xinyiji@chromium.org>
Reviewed-by: Patrick Noland <pnoland@chromium.org>
Reviewed-by: Xi Han <hanxi@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1468821}
19 files changed
tree: 904e54b20c9b610b9ad7c3c93a42db10e3cf6cef
  1. .github/
  2. android_webview/
  3. apps/
  4. ash/
  5. base/
  6. build/
  7. build_overrides/
  8. buildtools/
  9. cc/
  10. chrome/
  11. chromecast/
  12. chromeos/
  13. codelabs/
  14. components/
  15. content/
  16. crypto/
  17. dbus/
  18. device/
  19. docs/
  20. extensions/
  21. fuchsia_web/
  22. gin/
  23. google_apis/
  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. SECURITY_OWNERS
  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.