From 8486eb843602d04a4bf919ec3d7b9e6231a992d4 Mon Sep 17 00:00:00 2001 From: wukko Date: Fri, 7 Nov 2025 18:59:55 +0600 Subject: [PATCH] helium: merge toolbar prefs, move to ui --- .../helium/core/add-updater-preference.patch | 4 +- .../hide-extensions-via-toolbar-prefs.patch | 234 ------------------ .../core/remove-dead-toolbar-actions.patch | 14 +- .../helium/core/ublock-helium-services.patch | 4 +- .../core/webrtc-default-handling-policy.patch | 2 +- .../helium/ui/remove-toolbar-corners.patch | 6 +- .../toolbar-button-prefs.patch} | 130 ++++++++-- patches/series | 3 +- 8 files changed, 123 insertions(+), 274 deletions(-) delete mode 100644 patches/helium/core/hide-extensions-via-toolbar-prefs.patch rename patches/helium/{core/hide-avatar-via-toolbar-prefs.patch => ui/toolbar-button-prefs.patch} (62%) diff --git a/patches/helium/core/add-updater-preference.patch b/patches/helium/core/add-updater-preference.patch index 9914bdc4..d2ff395e 100644 --- a/patches/helium/core/add-updater-preference.patch +++ b/patches/helium/core/add-updater-preference.patch @@ -115,7 +115,7 @@ TODO: guard services_page.html with is_mac IDS_SETTINGS_HELIUM_SERVICES_OVERRIDE_DESCRIPTION}, --- a/chrome/browser/extensions/api/settings_private/prefs_util.cc +++ b/chrome/browser/extensions/api/settings_private/prefs_util.cc -@@ -367,6 +367,8 @@ const PrefsUtil::TypedPrefMap& PrefsUtil +@@ -361,6 +361,8 @@ const PrefsUtil::TypedPrefMap& PrefsUtil settings_api::PrefType::kBoolean; (*s_allowlist)[::prefs::kHeliumSpellcheckEnabled] = settings_api::PrefType::kBoolean; @@ -126,7 +126,7 @@ TODO: guard services_page.html with is_mac (*s_allowlist)[::prefs::kHeliumServicesConsented] = --- a/chrome/browser/ui/browser_ui_prefs.cc +++ b/chrome/browser/ui/browser_ui_prefs.cc -@@ -219,6 +219,7 @@ void RegisterBrowserUserPrefs(user_prefs +@@ -214,6 +214,7 @@ void RegisterBrowserUserPrefs(user_prefs registry->RegisterStringPref(prefs::kHeliumServicesOrigin, ""); registry->RegisterBooleanPref(prefs::kHeliumDidOnboarding, false); registry->RegisterBooleanPref(prefs::kHeliumServicesConsented, false); diff --git a/patches/helium/core/hide-extensions-via-toolbar-prefs.patch b/patches/helium/core/hide-extensions-via-toolbar-prefs.patch deleted file mode 100644 index 5125f3be..00000000 --- a/patches/helium/core/hide-extensions-via-toolbar-prefs.patch +++ /dev/null @@ -1,234 +0,0 @@ ---- a/chrome/browser/extensions/api/settings_private/prefs_util.cc -+++ b/chrome/browser/extensions/api/settings_private/prefs_util.cc -@@ -233,6 +233,8 @@ const PrefsUtil::TypedPrefMap& PrefsUtil - // Custom toolbar button settings. - (*s_allowlist)[::prefs::kShowAvatarButton] = - settings_api::PrefType::kBoolean; -+ (*s_allowlist)[::prefs::kShowExtensionsButton] = -+ settings_api::PrefType::kBoolean; - - // Appearance settings. - (*s_allowlist)[::prefs::kCurrentThemeID] = settings_api::PrefType::kString; ---- a/chrome/browser/ui/actions/chrome_action_id.h -+++ b/chrome/browser/ui/actions/chrome_action_id.h -@@ -559,6 +559,7 @@ - E(kActionHome, IDC_HOME) \ - E(kActionForward, IDC_FORWARD) \ - E(kActionAvatar, IDC_SHOW_AVATAR_MENU) \ -+ E(kActionExtensions) \ - E(kActionNewIncognitoWindow, IDC_NEW_INCOGNITO_WINDOW) \ - E(kActionSendSharedTabGroupFeedback, IDC_SEND_SHARED_TAB_GROUP_FEEDBACK) \ - E(kActionShowPasswordManager, IDC_SHOW_PASSWORD_MANAGER) \ ---- a/chrome/browser/ui/browser_ui_prefs.cc -+++ b/chrome/browser/ui/browser_ui_prefs.cc -@@ -125,6 +125,8 @@ void RegisterBrowserUserPrefs(user_prefs - - registry->RegisterBooleanPref( - prefs::kShowAvatarButton, true); -+ registry->RegisterBooleanPref( -+ prefs::kShowExtensionsButton, true); - - registry->RegisterInt64Pref(prefs::kDefaultBrowserLastDeclined, 0); - registry->RegisterBooleanPref(prefs::kWebAppCreateOnDesktop, true); ---- a/chrome/browser/ui/toolbar/pinned_toolbar/pinned_toolbar_actions_model.cc -+++ b/chrome/browser/ui/toolbar/pinned_toolbar/pinned_toolbar_actions_model.cc -@@ -217,6 +217,7 @@ void PinnedToolbarActionsModel::ResetToD - pref_service_->ClearPref(prefs::kShowHomeButton); - pref_service_->ClearPref(prefs::kShowForwardButton); - pref_service_->ClearPref(prefs::kShowAvatarButton); -+ pref_service_->ClearPref(prefs::kShowExtensionsButton); - pref_service_->ClearPref(prefs::kPinnedActions); - } - -@@ -233,7 +234,12 @@ bool PinnedToolbarActionsModel::IsDefaul - const bool avatar_is_default = - pref_service_->GetDefaultPrefValue(prefs::kShowAvatarButton) - ->GetBool() == pref_service_->GetBoolean(prefs::kShowAvatarButton); -- return action_are_default && home_is_default && forward_is_default && avatar_is_default; -+ const bool extensions_is_default = -+ pref_service_->GetDefaultPrefValue(prefs::kShowExtensionsButton) -+ ->GetBool() == pref_service_->GetBoolean(prefs::kShowExtensionsButton); -+ return action_are_default && home_is_default && -+ forward_is_default && avatar_is_default && -+ extensions_is_default; - } - - void PinnedToolbarActionsModel::MaybeMigrateExistingPinnedStates() { ---- a/chrome/browser/ui/views/extensions/extensions_toolbar_container.cc -+++ b/chrome/browser/ui/views/extensions/extensions_toolbar_container.cc -@@ -552,7 +552,9 @@ void ExtensionsToolbarContainer::AnchorA - - // Fix the position of widgets. Without this fix, extension-installed-bubble - // and extension-uninstall-dialog may be out of the window border on Linux. -- if (base::CommandLine::ForCurrentProcess()->HasSwitch("hide-extensions-menu")) -+ if (!browser_->profile()->GetPrefs()->GetBoolean( -+ prefs::kShowExtensionsButton) || -+ base::CommandLine::ForCurrentProcess()->HasSwitch("hide-extensions-menu")) - { - views::View* anchor_view = BrowserView::GetBrowserViewForBrowser(browser_) - ->toolbar_button_provider()->GetAppMenuButton(); -@@ -962,7 +964,9 @@ void ExtensionsToolbarContainer::UpdateC - } - - bool ExtensionsToolbarContainer::ShouldContainerBeVisible() const { -- if (base::CommandLine::ForCurrentProcess()->HasSwitch("hide-extensions-menu")) -+ if (!browser_->profile()->GetPrefs()->GetBoolean( -+ prefs::kShowExtensionsButton) || -+ base::CommandLine::ForCurrentProcess()->HasSwitch("hide-extensions-menu")) - return false; - - // The container (and extensions-menu button) should not be visible if we have ---- a/chrome/browser/ui/views/toolbar/toolbar_view.cc -+++ b/chrome/browser/ui/views/toolbar/toolbar_view.cc -@@ -543,6 +543,14 @@ void ToolbarView::Init() { - avatar_->SetVisible(show_avatar_button_.GetValue()); - } - -+ if (extensions_container_) { -+ show_extensions_button_.Init( -+ prefs::kShowExtensionsButton, prefs, -+ base::BindRepeating(&ToolbarView::OnShowExtensionsButtonChanged, -+ base::Unretained(this))); -+ extensions_container_->SetVisible(show_extensions_button_.GetValue()); -+ } -+ - InitLayout(); - - for (auto* button : std::array{back_, forward_, reload_, -@@ -1267,6 +1275,10 @@ void ToolbarView::OnShowAvatarButtonChan - avatar_->SetVisible(show_avatar_button_.GetValue()); - } - -+void ToolbarView::OnShowExtensionsButtonChanged() { -+ extensions_container_->SetVisible(show_extensions_button_.GetValue()); -+} -+ - void ToolbarView::OnTouchUiChanged() { - if (display_mode_ == DisplayMode::NORMAL) { - // Update the internal margins for touch layout. ---- a/chrome/browser/ui/views/toolbar/toolbar_view.h -+++ b/chrome/browser/ui/views/toolbar/toolbar_view.h -@@ -270,6 +270,8 @@ class ToolbarView : public views::Access - - void OnShowAvatarButtonChanged(); - -+ void OnShowExtensionsButtonChanged(); -+ - void OnTouchUiChanged(); - - void UpdateClipPath(); -@@ -322,6 +324,8 @@ class ToolbarView : public views::Access - - BooleanPrefMember show_avatar_button_; - -+ BooleanPrefMember show_extensions_button_; -+ - BooleanPrefMember show_chrome_labs_button_; - - // The display mode used when laying out the toolbar. ---- a/chrome/browser/ui/webui/side_panel/customize_chrome/customize_toolbar/customize_toolbar.mojom -+++ b/chrome/browser/ui/webui/side_panel/customize_chrome/customize_toolbar/customize_toolbar.mojom -@@ -17,6 +17,7 @@ enum ActionId { - kHome, - kForward, - kAvatar, -+ kExtensions, - kNewIncognitoWindow, - kShowPasswordManager, - kShowPaymentMethods, ---- a/chrome/browser/ui/webui/side_panel/customize_chrome/customize_toolbar/customize_toolbar_handler.cc -+++ b/chrome/browser/ui/webui/side_panel/customize_chrome/customize_toolbar/customize_toolbar_handler.cc -@@ -52,6 +52,8 @@ MojoActionForChromeAction(actions::Actio - return side_panel::customize_chrome::mojom::ActionId::kForward; - case kActionAvatar: - return side_panel::customize_chrome::mojom::ActionId::kAvatar; -+ case kActionExtensions: -+ return side_panel::customize_chrome::mojom::ActionId::kExtensions; - case kActionNewIncognitoWindow: - return side_panel::customize_chrome::mojom::ActionId::kNewIncognitoWindow; - case kActionShowPasswordsBubbleOrPage: -@@ -113,6 +115,8 @@ std::optional ChromeA - return kActionForward; - case side_panel::customize_chrome::mojom::ActionId::kAvatar: - return kActionAvatar; -+ case side_panel::customize_chrome::mojom::ActionId::kExtensions: -+ return kActionExtensions; - case side_panel::customize_chrome::mojom::ActionId::kNewIncognitoWindow: - return kActionNewIncognitoWindow; - case side_panel::customize_chrome::mojom::ActionId::kShowPasswordManager: -@@ -182,6 +186,10 @@ CustomizeToolbarHandler::CustomizeToolba - prefs::kShowAvatarButton, - base::BindRepeating(&CustomizeToolbarHandler::OnShowAvatarButtonChanged, - base::Unretained(this))); -+ pref_change_registrar_.Add( -+ prefs::kShowExtensionsButton, -+ base::BindRepeating(&CustomizeToolbarHandler::OnShowExtensionsButtonChanged, -+ base::Unretained(this))); - } - - CustomizeToolbarHandler::~CustomizeToolbarHandler() = default; -@@ -240,6 +248,19 @@ void CustomizeToolbarHandler::ListAction - - actions.push_back(std::move(avatar_action)); - -+ auto extensions_action = side_panel::customize_chrome::mojom::Action::New( -+ MojoActionForChromeAction(kActionExtensions).value(), -+ base::UTF16ToUTF8(l10n_util::GetStringUTF16(IDS_TOOLTIP_EXTENSIONS_BUTTON)), -+ prefs()->GetBoolean(prefs::kShowExtensionsButton), false, -+ side_panel::customize_chrome::mojom::CategoryId::kYourChrome, -+ GURL(webui::EncodePNGAndMakeDataURI( -+ ui::ImageModel::FromVectorIcon( -+ vector_icons::kExtensionChromeRefreshIcon, icon_color_id) -+ .Rasterize(&provider), -+ scale_factor))); -+ -+ actions.push_back(std::move(extensions_action)); -+ - if (base::FeatureList::IsEnabled(features::kSideBySide)) { - auto split_tab_action = side_panel::customize_chrome::mojom::Action::New( - MojoActionForChromeAction(kActionSplitTab).value(), -@@ -391,6 +412,9 @@ void CustomizeToolbarHandler::PinAction( - case kActionAvatar: - prefs()->SetBoolean(prefs::kShowAvatarButton, pin); - break; -+ case kActionExtensions: -+ prefs()->SetBoolean(prefs::kShowExtensionsButton, pin); -+ break; - default: - model_->UpdatePinnedState(chrome_action.value(), pin); - const std::optional metrics_name = -@@ -449,6 +473,11 @@ void CustomizeToolbarHandler::OnShowAvat - prefs()->GetBoolean(prefs::kShowAvatarButton)); - } - -+void CustomizeToolbarHandler::OnShowExtensionsButtonChanged() { -+ OnActionPinnedChanged(kActionExtensions, -+ prefs()->GetBoolean(prefs::kShowExtensionsButton)); -+} -+ - void CustomizeToolbarHandler::OnActionItemChanged() { - client_->NotifyActionsUpdated(); - } ---- a/chrome/browser/ui/webui/side_panel/customize_chrome/customize_toolbar/customize_toolbar_handler.h -+++ b/chrome/browser/ui/webui/side_panel/customize_chrome/customize_toolbar/customize_toolbar_handler.h -@@ -55,6 +55,7 @@ class CustomizeToolbarHandler - void OnShowForwardButtonChanged(); - void OnPinSplitTabButtonChanged(); - void OnShowAvatarButtonChanged(); -+ void OnShowExtensionsButtonChanged(); - void OnActionItemChanged(); - - PrefService* prefs() const; ---- a/chrome/common/pref_names.h -+++ b/chrome/common/pref_names.h -@@ -1336,6 +1336,10 @@ inline constexpr char kSplitViewDragAndD - // toolbar. - inline constexpr char kShowAvatarButton[] = "helium.browser.show_avatar_button"; - -+// A boolean pref set to true if the Extensions button should be visible on the -+// toolbar. -+inline constexpr char kShowExtensionsButton[] = "helium.browser.show_extensions_button"; -+ - // A boolean pref set to true if Gemini integration be enabled. This is managed - // by enterprise policy. - inline constexpr char kGeminiSettings[] = "browser.gemini_settings"; diff --git a/patches/helium/core/remove-dead-toolbar-actions.patch b/patches/helium/core/remove-dead-toolbar-actions.patch index f5f660c9..f1310bd6 100644 --- a/patches/helium/core/remove-dead-toolbar-actions.patch +++ b/patches/helium/core/remove-dead-toolbar-actions.patch @@ -1,6 +1,6 @@ --- a/chrome/browser/ui/webui/side_panel/customize_chrome/customize_toolbar/customize_toolbar_handler.cc +++ b/chrome/browser/ui/webui/side_panel/customize_chrome/customize_toolbar/customize_toolbar_handler.cc -@@ -37,15 +37,6 @@ MojoActionForChromeAction(actions::Actio +@@ -37,28 +37,12 @@ MojoActionForChromeAction(actions::Actio return side_panel::customize_chrome::mojom::ActionId::kShowBookmarks; case kActionSidePanelShowHistoryCluster: return side_panel::customize_chrome::mojom::ActionId::kShowHistoryCluster; @@ -16,8 +16,7 @@ case kActionHome: return side_panel::customize_chrome::mojom::ActionId::kHome; case kActionForward: -@@ -56,13 +47,6 @@ MojoActionForChromeAction(actions::Actio - return side_panel::customize_chrome::mojom::ActionId::kExtensions; + return side_panel::customize_chrome::mojom::ActionId::kForward; case kActionNewIncognitoWindow: return side_panel::customize_chrome::mojom::ActionId::kNewIncognitoWindow; - case kActionShowPasswordsBubbleOrPage: @@ -30,7 +29,7 @@ case kActionShowDownloads: return side_panel::customize_chrome::mojom::ActionId::kShowDownloads; case kActionClearBrowsingData: -@@ -101,14 +85,6 @@ std::optional ChromeA +@@ -97,26 +81,12 @@ std::optional ChromeA return kActionSidePanelShowBookmarks; case side_panel::customize_chrome::mojom::ActionId::kShowHistoryCluster: return kActionSidePanelShowHistoryCluster; @@ -45,8 +44,7 @@ case side_panel::customize_chrome::mojom::ActionId::kHome: return kActionHome; case side_panel::customize_chrome::mojom::ActionId::kForward: -@@ -119,12 +95,6 @@ std::optional ChromeA - return kActionExtensions; + return kActionForward; case side_panel::customize_chrome::mojom::ActionId::kNewIncognitoWindow: return kActionNewIncognitoWindow; - case side_panel::customize_chrome::mojom::ActionId::kShowPasswordManager: @@ -58,7 +56,7 @@ case side_panel::customize_chrome::mojom::ActionId::kShowDownloads: return kActionShowDownloads; case side_panel::customize_chrome::mojom::ActionId::kClearBrowsingData: -@@ -322,16 +292,8 @@ void CustomizeToolbarHandler::ListAction +@@ -280,16 +250,8 @@ void CustomizeToolbarHandler::ListAction add_action(kActionNewIncognitoWindow, side_panel::customize_chrome::mojom::CategoryId::kNavigation); @@ -75,7 +73,7 @@ add_action(kActionSidePanelShowHistoryCluster, side_panel::customize_chrome::mojom::CategoryId::kYourChrome); add_action(kActionShowDownloads, -@@ -345,18 +307,12 @@ void CustomizeToolbarHandler::ListAction +@@ -303,18 +265,12 @@ void CustomizeToolbarHandler::ListAction } add_action(kActionPrint, side_panel::customize_chrome::mojom::CategoryId::kTools); diff --git a/patches/helium/core/ublock-helium-services.patch b/patches/helium/core/ublock-helium-services.patch index 3cd28b9c..05945fca 100644 --- a/patches/helium/core/ublock-helium-services.patch +++ b/patches/helium/core/ublock-helium-services.patch @@ -57,7 +57,7 @@ #endif // COMPONENTS_HELIUM_SERVICES_PREF_NAMES_H_ --- a/chrome/browser/extensions/api/settings_private/prefs_util.cc +++ b/chrome/browser/extensions/api/settings_private/prefs_util.cc -@@ -369,6 +369,8 @@ const PrefsUtil::TypedPrefMap& PrefsUtil +@@ -363,6 +363,8 @@ const PrefsUtil::TypedPrefMap& PrefsUtil settings_api::PrefType::kBoolean; (*s_allowlist)[::prefs::kHeliumUpdateFetchingEnabled] = settings_api::PrefType::kBoolean; @@ -68,7 +68,7 @@ (*s_allowlist)[::prefs::kHeliumServicesConsented] = --- a/chrome/browser/ui/browser_ui_prefs.cc +++ b/chrome/browser/ui/browser_ui_prefs.cc -@@ -220,6 +220,7 @@ void RegisterBrowserUserPrefs(user_prefs +@@ -215,6 +215,7 @@ void RegisterBrowserUserPrefs(user_prefs registry->RegisterBooleanPref(prefs::kHeliumDidOnboarding, false); registry->RegisterBooleanPref(prefs::kHeliumServicesConsented, false); registry->RegisterBooleanPref(prefs::kHeliumUpdateFetchingEnabled, true); diff --git a/patches/helium/core/webrtc-default-handling-policy.patch b/patches/helium/core/webrtc-default-handling-policy.patch index e6023eaf..9fe541a7 100644 --- a/patches/helium/core/webrtc-default-handling-policy.patch +++ b/patches/helium/core/webrtc-default-handling-policy.patch @@ -1,6 +1,6 @@ --- a/chrome/browser/ui/browser_ui_prefs.cc +++ b/chrome/browser/ui/browser_ui_prefs.cc -@@ -147,7 +147,7 @@ void RegisterBrowserUserPrefs(user_prefs +@@ -142,7 +142,7 @@ void RegisterBrowserUserPrefs(user_prefs false); #endif registry->RegisterStringPref(prefs::kWebRTCIPHandlingPolicy, diff --git a/patches/helium/ui/remove-toolbar-corners.patch b/patches/helium/ui/remove-toolbar-corners.patch index d79772cd..1819b250 100644 --- a/patches/helium/ui/remove-toolbar-corners.patch +++ b/patches/helium/ui/remove-toolbar-corners.patch @@ -19,7 +19,7 @@ auto location_bar = std::make_unique( browser_, browser_->profile(), browser_->command_controller(), this, display_mode_ != DisplayMode::NORMAL); -@@ -841,14 +829,6 @@ void ToolbarView::Layout(PassKey) { +@@ -823,14 +811,6 @@ void ToolbarView::Layout(PassKey) { // The container view should be the exact same size/position as ToolbarView. container_view_->SetSize(size()); @@ -34,7 +34,7 @@ if (display_mode_ == DisplayMode::CUSTOM_TAB) { custom_tab_bar_->SetBounds(0, 0, width(), custom_tab_bar_->GetPreferredSize().height()); -@@ -858,7 +838,6 @@ void ToolbarView::Layout(PassKey) { +@@ -840,7 +820,6 @@ void ToolbarView::Layout(PassKey) { if (display_mode_ == DisplayMode::NORMAL) { LayoutCommon(); @@ -42,7 +42,7 @@ } if (toolbar_controller_) { -@@ -896,38 +875,6 @@ void ToolbarView::OnThemeChanged() { +@@ -878,38 +857,6 @@ void ToolbarView::OnThemeChanged() { SchedulePaint(); } diff --git a/patches/helium/core/hide-avatar-via-toolbar-prefs.patch b/patches/helium/ui/toolbar-button-prefs.patch similarity index 62% rename from patches/helium/core/hide-avatar-via-toolbar-prefs.patch rename to patches/helium/ui/toolbar-button-prefs.patch index 2b054aee..753e94f4 100644 --- a/patches/helium/core/hide-avatar-via-toolbar-prefs.patch +++ b/patches/helium/ui/toolbar-button-prefs.patch @@ -1,49 +1,55 @@ --- a/chrome/browser/extensions/api/settings_private/prefs_util.cc +++ b/chrome/browser/extensions/api/settings_private/prefs_util.cc -@@ -230,6 +230,10 @@ const PrefsUtil::TypedPrefMap& PrefsUtil +@@ -234,6 +234,12 @@ const PrefsUtil::TypedPrefMap& PrefsUtil (*s_allowlist)[::prefs::kSplitViewDragAndDropEnabled] = settings_api::PrefType::kBoolean; + // Custom toolbar button settings. + (*s_allowlist)[::prefs::kShowAvatarButton] = + settings_api::PrefType::kBoolean; ++ (*s_allowlist)[::prefs::kShowExtensionsButton] = ++ settings_api::PrefType::kBoolean; + // Appearance settings. (*s_allowlist)[::prefs::kCurrentThemeID] = settings_api::PrefType::kString; (*s_allowlist)[::prefs::kPinnedActions] = settings_api::PrefType::kList; --- a/chrome/browser/ui/actions/chrome_action_id.h +++ b/chrome/browser/ui/actions/chrome_action_id.h -@@ -558,6 +558,7 @@ +@@ -558,6 +558,8 @@ #define TOOLBAR_PINNABLE_ACTION_IDS \ E(kActionHome, IDC_HOME) \ E(kActionForward, IDC_FORWARD) \ + E(kActionAvatar, IDC_SHOW_AVATAR_MENU) \ ++ E(kActionExtensions) \ E(kActionNewIncognitoWindow, IDC_NEW_INCOGNITO_WINDOW) \ E(kActionSendSharedTabGroupFeedback, IDC_SEND_SHARED_TAB_GROUP_FEEDBACK) \ E(kActionShowPasswordManager, IDC_SHOW_PASSWORD_MANAGER) \ --- a/chrome/browser/ui/browser_ui_prefs.cc +++ b/chrome/browser/ui/browser_ui_prefs.cc -@@ -123,6 +123,9 @@ void RegisterBrowserUserPrefs(user_prefs +@@ -125,6 +125,11 @@ void RegisterBrowserUserPrefs(user_prefs registry->RegisterBooleanPref(prefs::kPinSplitTabButton, false, pref_registration_flags); + registry->RegisterBooleanPref( + prefs::kShowAvatarButton, true); ++ registry->RegisterBooleanPref( ++ prefs::kShowExtensionsButton, true); + registry->RegisterInt64Pref(prefs::kDefaultBrowserLastDeclined, 0); registry->RegisterBooleanPref(prefs::kWebAppCreateOnDesktop, true); registry->RegisterBooleanPref(prefs::kWebAppCreateInAppsMenu, true); --- a/chrome/browser/ui/toolbar/pinned_toolbar/pinned_toolbar_actions_model.cc +++ b/chrome/browser/ui/toolbar/pinned_toolbar/pinned_toolbar_actions_model.cc -@@ -216,6 +216,7 @@ void PinnedToolbarActionsModel::UpdatePi +@@ -216,6 +216,8 @@ void PinnedToolbarActionsModel::UpdatePi void PinnedToolbarActionsModel::ResetToDefault() { pref_service_->ClearPref(prefs::kShowHomeButton); pref_service_->ClearPref(prefs::kShowForwardButton); + pref_service_->ClearPref(prefs::kShowAvatarButton); ++ pref_service_->ClearPref(prefs::kShowExtensionsButton); pref_service_->ClearPref(prefs::kPinnedActions); } -@@ -229,7 +230,10 @@ bool PinnedToolbarActionsModel::IsDefaul +@@ -229,7 +231,15 @@ bool PinnedToolbarActionsModel::IsDefaul const bool forward_is_default = pref_service_->GetDefaultPrefValue(prefs::kShowForwardButton) ->GetBool() == pref_service_->GetBoolean(prefs::kShowForwardButton); @@ -51,13 +57,18 @@ + const bool avatar_is_default = + pref_service_->GetDefaultPrefValue(prefs::kShowAvatarButton) + ->GetBool() == pref_service_->GetBoolean(prefs::kShowAvatarButton); -+ return action_are_default && home_is_default && forward_is_default && avatar_is_default; ++ const bool extensions_is_default = ++ pref_service_->GetDefaultPrefValue(prefs::kShowExtensionsButton) ++ ->GetBool() == pref_service_->GetBoolean(prefs::kShowExtensionsButton); ++ return action_are_default && home_is_default && ++ forward_is_default && avatar_is_default && ++ extensions_is_default; } void PinnedToolbarActionsModel::MaybeMigrateExistingPinnedStates() { --- a/chrome/browser/ui/views/toolbar/toolbar_view.cc +++ b/chrome/browser/ui/views/toolbar/toolbar_view.cc -@@ -463,8 +463,7 @@ void ToolbarView::Init() { +@@ -451,8 +451,7 @@ void ToolbarView::Init() { #else // DevTools profiles are OffTheRecord, so hide it there. show_avatar_toolbar_button = browser_->profile()->IsIncognitoProfile() || @@ -67,7 +78,7 @@ #endif const std::string sab_value = base::CommandLine::ForCurrentProcess()-> -@@ -533,6 +532,17 @@ void ToolbarView::Init() { +@@ -521,6 +520,25 @@ void ToolbarView::Init() { home_->SetVisible(show_home_button_.GetValue()); @@ -81,83 +92,108 @@ + if (browser_->profile()->IsRegularProfile()) { + avatar_->SetVisible(show_avatar_button_.GetValue()); + } ++ ++ if (extensions_container_) { ++ show_extensions_button_.Init( ++ prefs::kShowExtensionsButton, prefs, ++ base::BindRepeating(&ToolbarView::OnShowExtensionsButtonChanged, ++ base::Unretained(this))); ++ extensions_container_->SetVisible(show_extensions_button_.GetValue()); ++ } + InitLayout(); for (auto* button : std::array{back_, forward_, reload_, -@@ -1253,6 +1263,10 @@ void ToolbarView::OnShowHomeButtonChange +@@ -1200,6 +1218,14 @@ void ToolbarView::OnShowHomeButtonChange home_->SetVisible(show_home_button_.GetValue()); } +void ToolbarView::OnShowAvatarButtonChanged() { + avatar_->SetVisible(show_avatar_button_.GetValue()); +} ++ ++void ToolbarView::OnShowExtensionsButtonChanged() { ++ extensions_container_->SetVisible(show_extensions_button_.GetValue()); ++} + void ToolbarView::OnTouchUiChanged() { if (display_mode_ == DisplayMode::NORMAL) { // Update the internal margins for touch layout. --- a/chrome/browser/ui/views/toolbar/toolbar_view.h +++ b/chrome/browser/ui/views/toolbar/toolbar_view.h -@@ -268,6 +268,8 @@ class ToolbarView : public views::Access +@@ -268,6 +268,10 @@ class ToolbarView : public views::Access void OnShowHomeButtonChanged(); + void OnShowAvatarButtonChanged(); ++ ++ void OnShowExtensionsButtonChanged(); + void OnTouchUiChanged(); void UpdateClipPath(); -@@ -318,6 +320,8 @@ class ToolbarView : public views::Access +@@ -318,6 +322,10 @@ class ToolbarView : public views::Access // Controls whether or not a home button should be shown on the toolbar. BooleanPrefMember show_home_button_; + BooleanPrefMember show_avatar_button_; ++ ++ BooleanPrefMember show_extensions_button_; + BooleanPrefMember show_chrome_labs_button_; // The display mode used when laying out the toolbar. --- a/chrome/browser/ui/webui/side_panel/customize_chrome/customize_toolbar/customize_toolbar.mojom +++ b/chrome/browser/ui/webui/side_panel/customize_chrome/customize_toolbar/customize_toolbar.mojom -@@ -16,6 +16,7 @@ enum ActionId { +@@ -16,6 +16,8 @@ enum ActionId { kShowSearchCompanion, kHome, kForward, + kAvatar, ++ kExtensions, kNewIncognitoWindow, kShowPasswordManager, kShowPaymentMethods, --- a/chrome/browser/ui/webui/side_panel/customize_chrome/customize_toolbar/customize_toolbar_handler.cc +++ b/chrome/browser/ui/webui/side_panel/customize_chrome/customize_toolbar/customize_toolbar_handler.cc -@@ -50,6 +50,8 @@ MojoActionForChromeAction(actions::Actio +@@ -41,6 +41,10 @@ MojoActionForChromeAction(actions::Actio return side_panel::customize_chrome::mojom::ActionId::kHome; case kActionForward: return side_panel::customize_chrome::mojom::ActionId::kForward; + case kActionAvatar: + return side_panel::customize_chrome::mojom::ActionId::kAvatar; ++ case kActionExtensions: ++ return side_panel::customize_chrome::mojom::ActionId::kExtensions; case kActionNewIncognitoWindow: return side_panel::customize_chrome::mojom::ActionId::kNewIncognitoWindow; - case kActionShowPasswordsBubbleOrPage: -@@ -109,6 +111,8 @@ std::optional ChromeA + case kActionShowDownloads: +@@ -85,6 +89,10 @@ std::optional ChromeA return kActionHome; case side_panel::customize_chrome::mojom::ActionId::kForward: return kActionForward; + case side_panel::customize_chrome::mojom::ActionId::kAvatar: + return kActionAvatar; ++ case side_panel::customize_chrome::mojom::ActionId::kExtensions: ++ return kActionExtensions; case side_panel::customize_chrome::mojom::ActionId::kNewIncognitoWindow: return kActionNewIncognitoWindow; - case side_panel::customize_chrome::mojom::ActionId::kShowPasswordManager: -@@ -174,6 +178,10 @@ CustomizeToolbarHandler::CustomizeToolba + case side_panel::customize_chrome::mojom::ActionId::kShowDownloads: +@@ -144,6 +152,14 @@ CustomizeToolbarHandler::CustomizeToolba prefs::kPinSplitTabButton, base::BindRepeating(&CustomizeToolbarHandler::OnPinSplitTabButtonChanged, base::Unretained(this))); + pref_change_registrar_.Add( + prefs::kShowAvatarButton, + base::BindRepeating(&CustomizeToolbarHandler::OnShowAvatarButtonChanged, ++ base::Unretained(this))); ++ pref_change_registrar_.Add( ++ prefs::kShowExtensionsButton, ++ base::BindRepeating(&CustomizeToolbarHandler::OnShowExtensionsButtonChanged, + base::Unretained(this))); } CustomizeToolbarHandler::~CustomizeToolbarHandler() = default; -@@ -219,6 +227,19 @@ void CustomizeToolbarHandler::ListAction +@@ -189,6 +205,32 @@ void CustomizeToolbarHandler::ListAction actions.push_back(std::move(home_action)); actions.push_back(std::move(forward_action)); @@ -173,21 +209,37 @@ + scale_factor))); + + actions.push_back(std::move(avatar_action)); ++ ++ auto extensions_action = side_panel::customize_chrome::mojom::Action::New( ++ MojoActionForChromeAction(kActionExtensions).value(), ++ base::UTF16ToUTF8(l10n_util::GetStringUTF16(IDS_TOOLTIP_EXTENSIONS_BUTTON)), ++ prefs()->GetBoolean(prefs::kShowExtensionsButton), false, ++ side_panel::customize_chrome::mojom::CategoryId::kYourChrome, ++ GURL(webui::EncodePNGAndMakeDataURI( ++ ui::ImageModel::FromVectorIcon( ++ vector_icons::kExtensionChromeRefreshIcon, icon_color_id) ++ .Rasterize(&provider), ++ scale_factor))); ++ ++ actions.push_back(std::move(extensions_action)); + if (base::FeatureList::IsEnabled(features::kSideBySide)) { auto split_tab_action = side_panel::customize_chrome::mojom::Action::New( MojoActionForChromeAction(kActionSplitTab).value(), -@@ -367,6 +388,9 @@ void CustomizeToolbarHandler::PinAction( +@@ -323,6 +365,12 @@ void CustomizeToolbarHandler::PinAction( case kActionSplitTab: prefs()->SetBoolean(prefs::kPinSplitTabButton, pin); break; + case kActionAvatar: + prefs()->SetBoolean(prefs::kShowAvatarButton, pin); ++ break; ++ case kActionExtensions: ++ prefs()->SetBoolean(prefs::kShowExtensionsButton, pin); + break; default: model_->UpdatePinnedState(chrome_action.value(), pin); const std::optional metrics_name = -@@ -420,6 +444,11 @@ void CustomizeToolbarHandler::OnPinSplit +@@ -376,6 +424,16 @@ void CustomizeToolbarHandler::OnPinSplit prefs()->GetBoolean(prefs::kPinSplitTabButton)); } @@ -195,30 +247,64 @@ + OnActionPinnedChanged(kActionAvatar, + prefs()->GetBoolean(prefs::kShowAvatarButton)); +} ++ ++void CustomizeToolbarHandler::OnShowExtensionsButtonChanged() { ++ OnActionPinnedChanged(kActionExtensions, ++ prefs()->GetBoolean(prefs::kShowExtensionsButton)); ++} + void CustomizeToolbarHandler::OnActionItemChanged() { client_->NotifyActionsUpdated(); } --- a/chrome/browser/ui/webui/side_panel/customize_chrome/customize_toolbar/customize_toolbar_handler.h +++ b/chrome/browser/ui/webui/side_panel/customize_chrome/customize_toolbar/customize_toolbar_handler.h -@@ -54,6 +54,7 @@ class CustomizeToolbarHandler +@@ -54,6 +54,8 @@ class CustomizeToolbarHandler void OnShowHomeButtonChanged(); void OnShowForwardButtonChanged(); void OnPinSplitTabButtonChanged(); + void OnShowAvatarButtonChanged(); ++ void OnShowExtensionsButtonChanged(); void OnActionItemChanged(); PrefService* prefs() const; --- a/chrome/common/pref_names.h +++ b/chrome/common/pref_names.h -@@ -1332,6 +1332,10 @@ inline constexpr char kSplitViewDragAndD +@@ -1336,6 +1336,14 @@ inline constexpr char kSplitViewDragAndD inline constexpr char kSplitViewDragAndDropNudgeUsedCount[] = "browser.split_view_drag_and_drop_nudge_used_count"; +// A boolean pref set to true if the Avatar button should be visible on the +// toolbar. +inline constexpr char kShowAvatarButton[] = "helium.browser.show_avatar_button"; ++ ++// A boolean pref set to true if the Extensions button should be visible on the ++// toolbar. ++inline constexpr char kShowExtensionsButton[] = "helium.browser.show_extensions_button"; + // A boolean pref set to true if Gemini integration be enabled. This is managed // by enterprise policy. inline constexpr char kGeminiSettings[] = "browser.gemini_settings"; +--- a/chrome/browser/ui/views/extensions/extensions_toolbar_container.cc ++++ b/chrome/browser/ui/views/extensions/extensions_toolbar_container.cc +@@ -552,7 +552,9 @@ void ExtensionsToolbarContainer::AnchorA + + // Fix the position of widgets. Without this fix, extension-installed-bubble + // and extension-uninstall-dialog may be out of the window border on Linux. +- if (base::CommandLine::ForCurrentProcess()->HasSwitch("hide-extensions-menu")) ++ if (!browser_->profile()->GetPrefs()->GetBoolean( ++ prefs::kShowExtensionsButton) || ++ base::CommandLine::ForCurrentProcess()->HasSwitch("hide-extensions-menu")) + { + views::View* anchor_view = BrowserView::GetBrowserViewForBrowser(browser_) + ->toolbar_button_provider()->GetAppMenuButton(); +@@ -962,7 +964,9 @@ void ExtensionsToolbarContainer::UpdateC + } + + bool ExtensionsToolbarContainer::ShouldContainerBeVisible() const { +- if (base::CommandLine::ForCurrentProcess()->HasSwitch("hide-extensions-menu")) ++ if (!browser_->profile()->GetPrefs()->GetBoolean( ++ prefs::kShowExtensionsButton) || ++ base::CommandLine::ForCurrentProcess()->HasSwitch("hide-extensions-menu")) + return false; + + // The container (and extensions-menu button) should not be visible if we have diff --git a/patches/series b/patches/series index 52c373ce..5fc0a52b 100644 --- a/patches/series +++ b/patches/series @@ -145,8 +145,6 @@ helium/core/spoof-extension-downloader-platform.patch helium/core/spoof-chrome-ua-brand.patch helium/core/add-helium-versioning.patch helium/core/enable-tab-search-toolbar-button.patch -helium/core/hide-avatar-via-toolbar-prefs.patch -helium/core/hide-extensions-via-toolbar-prefs.patch helium/core/clean-context-menu.patch helium/core/split-view.patch helium/core/fix-tab-sync-unreached-error.patch @@ -212,6 +210,7 @@ helium/ui/layout-constants.patch helium/ui/tabs.patch helium/ui/tab-strip-controls.patch helium/ui/toolbar.patch +helium/ui/toolbar-button-prefs.patch helium/ui/omnibox.patch helium/ui/app-menu-style.patch helium/ui/app-menu-model.patch