Chromium Code Reviews| Index: chrome/browser/ui/views/profiles/avatar_menu_button.cc |
| diff --git a/chrome/browser/ui/views/profiles/avatar_menu_button.cc b/chrome/browser/ui/views/profiles/avatar_menu_button.cc |
| index 3100a621347f5472fc4cd93069aa26796d068af4..e051939953b676563ad707a54d883f04f2f80260 100644 |
| --- a/chrome/browser/ui/views/profiles/avatar_menu_button.cc |
| +++ b/chrome/browser/ui/views/profiles/avatar_menu_button.cc |
| @@ -35,8 +35,8 @@ static inline int Round(double x) { |
| const char AvatarMenuButton::kViewClassName[] = "AvatarMenuButton"; |
| AvatarMenuButton::AvatarMenuButton(Browser* browser, bool disabled) |
| - : MenuButton(NULL, base::string16(), this, false), |
| - browser_(browser), |
| + : AvatarBaseController(browser), |
| + MenuButton(NULL, base::string16(), this, false), |
| disabled_(disabled), |
| is_rectangle_(false), |
| old_height_(0), |
| @@ -46,6 +46,8 @@ AvatarMenuButton::AvatarMenuButton(Browser* browser, bool disabled) |
| SetEventTargeter( |
| scoped_ptr<views::ViewTargeter>(new views::ViewTargeter(this))); |
| + |
| + Update(); |
| } |
| AvatarMenuButton::~AvatarMenuButton() { |
| @@ -144,6 +146,31 @@ bool AvatarMenuButton::GetAvatarImages(Profile* profile, |
| return true; |
| } |
| +void AvatarMenuButton::Update() { |
| + // Check the validity of browser() so that this function can be bypassed in |
|
noms (inactive)
2015/03/26 15:26:56
nit: maybe just "The browser can be null in tests"
yao
2015/03/26 18:45:01
Yes, because nullptr is passsed when the button is
|
| + // unit tests. |
| + if (!browser()) |
| + return; |
| + |
| + gfx::Image avatar; |
| + gfx::Image taskbar_badge_avatar; |
| + bool is_rectangle = false; |
| + |
| + // Update the avatar button in the window frame and the taskbar overlay. |
| + bool should_show_avatar_menu = AvatarMenu::ShouldShowAvatarMenu(); |
| + |
| + if (!AvatarMenuButton::GetAvatarImages( |
| + browser()->profile(), should_show_avatar_menu, &avatar, |
| + &taskbar_badge_avatar, &is_rectangle)) { |
| + return; |
| + } |
| + |
| + // Disable the menu when we should not show the menu. |
| + if (!AvatarMenu::ShouldShowAvatarMenu()) |
| + this->SetEnabled(false); |
| + this->SetAvatarIcon(avatar, is_rectangle); |
| +} |
| + |
| // views::ViewTargeterDelegate: |
| bool AvatarMenuButton::DoesIntersectRect(const views::View* target, |
| const gfx::Rect& rect) const { |
| @@ -156,5 +183,5 @@ bool AvatarMenuButton::DoesIntersectRect(const views::View* target, |
| void AvatarMenuButton::OnMenuButtonClicked(views::View* source, |
| const gfx::Point& point) { |
| if (!disabled_) |
| - chrome::ShowAvatarMenu(browser_); |
| + chrome::ShowAvatarMenu(browser()); |
| } |