Commit 75436967 authored by Thomas Tangl's avatar Thomas Tangl Committed by Commit Bot

[profile-menu] Move link handling to ProfileMenuViewBase

- The logic of the link actions remains in ProfileMenuView.
- The link handling is done in ProfileMenuViewBase.

Bug: 966388
Change-Id: I54100962956bd6acc873b88d1da1b196f967ffd2
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1757842Reviewed-by: default avatarMarc Treib <treib@chromium.org>
Commit-Queue: Thomas Tangl <tangltom@chromium.org>
Cr-Commit-Position: refs/heads/master@{#688079}
parent b7c92c38
...@@ -359,15 +359,12 @@ void ProfileMenuView::OnOtherProfileButtonClicked(int profile_index) { ...@@ -359,15 +359,12 @@ void ProfileMenuView::OnOtherProfileButtonClicked(int profile_index) {
Hide(); Hide();
} }
void ProfileMenuView::StyledLabelLinkClicked(views::StyledLabel* label, void ProfileMenuView::OnCookiesClearedOnExitLinkClicked() {
const gfx::Range& range, base::RecordAction(
int event_flags) { base::UserMetricsAction("ProfileChooser_CookieSettingsClicked"));
DCHECK_EQ(cookies_cleared_on_exit_label_, label);
chrome::ShowSettingsSubPage(browser(), chrome::kContentSettingsSubPage + chrome::ShowSettingsSubPage(browser(), chrome::kContentSettingsSubPage +
std::string("/") + std::string("/") +
chrome::kCookieSettingsSubPage); chrome::kCookieSettingsSubPage);
base::RecordAction(
base::UserMetricsAction("ProfileChooser_CookieSettingsClicked"));
} }
void ProfileMenuView::AddProfileMenuView(AvatarMenu* avatar_menu) { void ProfileMenuView::AddProfileMenuView(AvatarMenu* avatar_menu) {
...@@ -508,35 +505,16 @@ void ProfileMenuView::AddDiceSyncErrorView( ...@@ -508,35 +505,16 @@ void ProfileMenuView::AddDiceSyncErrorView(
} }
void ProfileMenuView::AddSyncPausedReasonCookiesClearedOnExit() { void ProfileMenuView::AddSyncPausedReasonCookiesClearedOnExit() {
size_t offset = 0;
std::unique_ptr<views::StyledLabel> sync_paused_reason =
std::make_unique<views::StyledLabel>(base::string16(), this);
base::string16 link_text = l10n_util::GetStringUTF16( base::string16 link_text = l10n_util::GetStringUTF16(
IDS_SYNC_PAUSED_REASON_CLEAR_COOKIES_ON_EXIT_LINK_TEXT); IDS_SYNC_PAUSED_REASON_CLEAR_COOKIES_ON_EXIT_LINK_TEXT);
size_t link_begin = 0;
base::string16 text = l10n_util::GetStringFUTF16(
IDS_SYNC_PAUSED_REASON_CLEAR_COOKIES_ON_EXIT, link_text, &link_begin);
base::string16 message = l10n_util::GetStringFUTF16( cookies_cleared_on_exit_label_ = CreateAndAddLabelWithLink(
IDS_SYNC_PAUSED_REASON_CLEAR_COOKIES_ON_EXIT, link_text, &offset); text, gfx::Range(link_begin, link_begin + link_text.length()),
base::BindRepeating(&ProfileMenuView::OnCookiesClearedOnExitLinkClicked,
sync_paused_reason->SetText(message); base::Unretained(this)));
// Mark the link text as link.
sync_paused_reason->AddStyleRange(
gfx::Range(offset, offset + link_text.length()),
views::StyledLabel::RangeStyleInfo::CreateForLink());
// Mark the rest of the text as secondary text.
views::StyledLabel::RangeStyleInfo message_style;
message_style.text_style = STYLE_SECONDARY;
gfx::Range before_link_range(0, offset);
if (!before_link_range.is_empty())
sync_paused_reason->AddStyleRange(before_link_range, message_style);
gfx::Range after_link_range(offset + link_text.length(), message.length());
if (!after_link_range.is_empty())
sync_paused_reason->AddStyleRange(after_link_range, message_style);
cookies_cleared_on_exit_label_ = sync_paused_reason.get();
AddViewItem(std::move(sync_paused_reason));
} }
void ProfileMenuView::AddCurrentProfileView( void ProfileMenuView::AddCurrentProfileView(
......
...@@ -51,7 +51,7 @@ class ProfileMenuView : public ProfileMenuViewBase, public AvatarMenuObserver { ...@@ -51,7 +51,7 @@ class ProfileMenuView : public ProfileMenuViewBase, public AvatarMenuObserver {
views::View* GetInitiallyFocusedView() override; views::View* GetInitiallyFocusedView() override;
base::string16 GetAccessibleWindowTitle() const override; base::string16 GetAccessibleWindowTitle() const override;
// Button actions. // Button/link actions.
void OnManageGoogleAccountButtonClicked(); void OnManageGoogleAccountButtonClicked();
void OnPasswordsButtonClicked(); void OnPasswordsButtonClicked();
void OnCreditCardsButtonClicked(); void OnCreditCardsButtonClicked();
...@@ -66,11 +66,7 @@ class ProfileMenuView : public ProfileMenuViewBase, public AvatarMenuObserver { ...@@ -66,11 +66,7 @@ class ProfileMenuView : public ProfileMenuViewBase, public AvatarMenuObserver {
void OnSigninAccountButtonClicked(); void OnSigninAccountButtonClicked();
void OnSignoutButtonClicked(); void OnSignoutButtonClicked();
void OnOtherProfileButtonClicked(int profile_index); void OnOtherProfileButtonClicked(int profile_index);
void OnCookiesClearedOnExitLinkClicked();
// views::StyledLabelListener
void StyledLabelLinkClicked(views::StyledLabel* label,
const gfx::Range& range,
int event_flags) override;
// AvatarMenuObserver: // AvatarMenuObserver:
void OnAvatarMenuChanged(AvatarMenu* avatar_menu) override; void OnAvatarMenuChanged(AvatarMenu* avatar_menu) override;
......
...@@ -13,6 +13,7 @@ ...@@ -13,6 +13,7 @@
#include "chrome/browser/profiles/profile.h" #include "chrome/browser/profiles/profile.h"
#include "chrome/browser/ui/chrome_pages.h" #include "chrome/browser/ui/chrome_pages.h"
#include "chrome/browser/ui/views/chrome_layout_provider.h" #include "chrome/browser/ui/views/chrome_layout_provider.h"
#include "chrome/browser/ui/views/chrome_typography.h"
#include "chrome/browser/ui/views/hover_button.h" #include "chrome/browser/ui/views/hover_button.h"
#include "chrome/browser/ui/views/profiles/incognito_menu_view.h" #include "chrome/browser/ui/views/profiles/incognito_menu_view.h"
#include "chrome/grit/generated_resources.h" #include "chrome/grit/generated_resources.h"
...@@ -24,6 +25,7 @@ ...@@ -24,6 +25,7 @@
#include "ui/views/controls/button/md_text_button.h" #include "ui/views/controls/button/md_text_button.h"
#include "ui/views/controls/scroll_view.h" #include "ui/views/controls/scroll_view.h"
#include "ui/views/controls/separator.h" #include "ui/views/controls/separator.h"
#include "ui/views/controls/styled_label.h"
#if !defined(OS_CHROMEOS) #if !defined(OS_CHROMEOS)
#include "chrome/browser/ui/views/profiles/profile_menu_view.h" #include "chrome/browser/ui/views/profiles/profile_menu_view.h"
...@@ -170,14 +172,15 @@ void ProfileMenuViewBase::WindowClosing() { ...@@ -170,14 +172,15 @@ void ProfileMenuViewBase::WindowClosing() {
void ProfileMenuViewBase::ButtonPressed(views::Button* sender, void ProfileMenuViewBase::ButtonPressed(views::Button* sender,
const ui::Event& event) { const ui::Event& event) {
DCHECK(!button_actions_[sender].is_null()); DCHECK(!click_actions_[sender].is_null());
button_actions_[sender].Run(); click_actions_[sender].Run();
} }
void ProfileMenuViewBase::StyledLabelLinkClicked(views::StyledLabel* label, void ProfileMenuViewBase::StyledLabelLinkClicked(views::StyledLabel* label,
const gfx::Range& range, const gfx::Range& range,
int event_flags) { int event_flags) {
chrome::ShowSettings(browser_); DCHECK(!click_actions_[label].is_null());
click_actions_[label].Run();
} }
int ProfileMenuViewBase::GetMaxHeight() const { int ProfileMenuViewBase::GetMaxHeight() const {
...@@ -250,7 +253,7 @@ views::Button* ProfileMenuViewBase::CreateAndAddTitleCard( ...@@ -250,7 +253,7 @@ views::Button* ProfileMenuViewBase::CreateAndAddTitleCard(
if (action.is_null()) if (action.is_null())
title_card->SetEnabled(false); title_card->SetEnabled(false);
views::Button* button_ptr = title_card.get(); views::Button* button_ptr = title_card.get();
RegisterButtonAction(button_ptr, std::move(action)); RegisterClickAction(button_ptr, std::move(action));
AddMenuItemInternal(std::move(title_card), MenuItems::kTitleCard); AddMenuItemInternal(std::move(title_card), MenuItems::kTitleCard);
return button_ptr; return button_ptr;
} }
...@@ -262,7 +265,7 @@ views::Button* ProfileMenuViewBase::CreateAndAddButton( ...@@ -262,7 +265,7 @@ views::Button* ProfileMenuViewBase::CreateAndAddButton(
std::unique_ptr<HoverButton> button = std::unique_ptr<HoverButton> button =
std::make_unique<HoverButton>(this, icon, title); std::make_unique<HoverButton>(this, icon, title);
views::Button* pointer = button.get(); views::Button* pointer = button.get();
RegisterButtonAction(pointer, std::move(action)); RegisterClickAction(pointer, std::move(action));
AddMenuItemInternal(std::move(button), MenuItems::kButton); AddMenuItemInternal(std::move(button), MenuItems::kButton);
return pointer; return pointer;
} }
...@@ -275,7 +278,7 @@ views::Button* ProfileMenuViewBase::CreateAndAddBlueButton( ...@@ -275,7 +278,7 @@ views::Button* ProfileMenuViewBase::CreateAndAddBlueButton(
md_style ? views::MdTextButton::CreateSecondaryUiBlueButton(this, text) md_style ? views::MdTextButton::CreateSecondaryUiBlueButton(this, text)
: views::MdTextButton::Create(this, text); : views::MdTextButton::Create(this, text);
views::Button* pointer = button.get(); views::Button* pointer = button.get();
RegisterButtonAction(pointer, std::move(action)); RegisterClickAction(pointer, std::move(action));
// Add margins. // Add margins.
std::unique_ptr<views::View> margined_view = std::make_unique<views::View>(); std::unique_ptr<views::View> margined_view = std::make_unique<views::View>();
...@@ -298,7 +301,7 @@ DiceSigninButtonView* ProfileMenuViewBase::CreateAndAddDiceSigninButton( ...@@ -298,7 +301,7 @@ DiceSigninButtonView* ProfileMenuViewBase::CreateAndAddDiceSigninButton(
*account_icon, this) *account_icon, this)
: std::make_unique<DiceSigninButtonView>(this); : std::make_unique<DiceSigninButtonView>(this);
DiceSigninButtonView* pointer = button.get(); DiceSigninButtonView* pointer = button.get();
RegisterButtonAction(pointer->signin_button(), std::move(action)); RegisterClickAction(pointer->signin_button(), std::move(action));
// Add margins. // Add margins.
std::unique_ptr<views::View> margined_view = std::make_unique<views::View>(); std::unique_ptr<views::View> margined_view = std::make_unique<views::View>();
...@@ -332,6 +335,21 @@ views::Label* ProfileMenuViewBase::CreateAndAddLabel(const base::string16& text, ...@@ -332,6 +335,21 @@ views::Label* ProfileMenuViewBase::CreateAndAddLabel(const base::string16& text,
return pointer; return pointer;
} }
views::StyledLabel* ProfileMenuViewBase::CreateAndAddLabelWithLink(
const base::string16& text,
gfx::Range link_range,
base::RepeatingClosure action) {
auto label_with_link = std::make_unique<views::StyledLabel>(text, this);
label_with_link->SetDefaultTextStyle(STYLE_SECONDARY);
label_with_link->AddStyleRange(
link_range, views::StyledLabel::RangeStyleInfo::CreateForLink());
views::StyledLabel* pointer = label_with_link.get();
RegisterClickAction(pointer, std::move(action));
AddViewItem(std::move(label_with_link));
return pointer;
}
void ProfileMenuViewBase::AddViewItem(std::unique_ptr<views::View> view) { void ProfileMenuViewBase::AddViewItem(std::unique_ptr<views::View> view) {
// Add margins. // Add margins.
std::unique_ptr<views::View> margined_view = std::make_unique<views::View>(); std::unique_ptr<views::View> margined_view = std::make_unique<views::View>();
...@@ -342,10 +360,10 @@ void ProfileMenuViewBase::AddViewItem(std::unique_ptr<views::View> view) { ...@@ -342,10 +360,10 @@ void ProfileMenuViewBase::AddViewItem(std::unique_ptr<views::View> view) {
AddMenuItemInternal(std::move(margined_view), MenuItems::kGeneral); AddMenuItemInternal(std::move(margined_view), MenuItems::kGeneral);
} }
void ProfileMenuViewBase::RegisterButtonAction(views::Button* button, void ProfileMenuViewBase::RegisterClickAction(views::View* clickable_view,
base::RepeatingClosure action) { base::RepeatingClosure action) {
DCHECK(button_actions_.count(button) == 0); DCHECK(click_actions_.count(clickable_view) == 0);
button_actions_[button] = std::move(action); click_actions_[clickable_view] = std::move(action);
} }
void ProfileMenuViewBase::RepopulateViewFromMenuItems() { void ProfileMenuViewBase::RepopulateViewFromMenuItems() {
......
...@@ -123,6 +123,9 @@ class ProfileMenuViewBase : public content::WebContentsDelegate, ...@@ -123,6 +123,9 @@ class ProfileMenuViewBase : public content::WebContentsDelegate,
views::Label* CreateAndAddLabel( views::Label* CreateAndAddLabel(
const base::string16& text, const base::string16& text,
int text_context = views::style::CONTEXT_LABEL); int text_context = views::style::CONTEXT_LABEL);
views::StyledLabel* CreateAndAddLabelWithLink(const base::string16& text,
gfx::Range link_range,
base::RepeatingClosure action);
void AddViewItem(std::unique_ptr<views::View> view); void AddViewItem(std::unique_ptr<views::View> view);
void RepopulateViewFromMenuItems(); void RepopulateViewFromMenuItems();
...@@ -163,10 +166,10 @@ class ProfileMenuViewBase : public content::WebContentsDelegate, ...@@ -163,10 +166,10 @@ class ProfileMenuViewBase : public content::WebContentsDelegate,
// views::StyledLabelListener: // views::StyledLabelListener:
void StyledLabelLinkClicked(views::StyledLabel* label, void StyledLabelLinkClicked(views::StyledLabel* label,
const gfx::Range& range, const gfx::Range& range,
int event_flags) override; int event_flags) final;
void RegisterButtonAction(views::Button* button, void RegisterClickAction(views::View* clickable_view,
base::RepeatingClosure action); base::RepeatingClosure action);
// Returns the size of different margin types. // Returns the size of different margin types.
int GetMarginSize(GroupMarginSize margin_size) const; int GetMarginSize(GroupMarginSize margin_size) const;
...@@ -182,7 +185,7 @@ class ProfileMenuViewBase : public content::WebContentsDelegate, ...@@ -182,7 +185,7 @@ class ProfileMenuViewBase : public content::WebContentsDelegate,
views::Button* const anchor_button_; views::Button* const anchor_button_;
std::map<views::Button*, base::RepeatingClosure> button_actions_; std::map<views::View*, base::RepeatingClosure> click_actions_;
CloseBubbleOnTabActivationHelper close_bubble_helper_; CloseBubbleOnTabActivationHelper close_bubble_helper_;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment