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..2feb3b4faa26122a6130b2b7b3375359496ee295 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), |
+ : AvatarBaseButton(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,30 @@ bool AvatarMenuButton::GetAvatarImages(Profile* profile, |
return true; |
} |
+void AvatarMenuButton::Update() { |
+ // The browser can be null in 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. |
+ const bool should_show_avatar_menu = AvatarMenu::ShouldShowAvatarMenu(); |
+ |
+ if (!AvatarMenuButton::GetAvatarImages( |
+ browser()->profile(), should_show_avatar_menu, &avatar, |
+ &taskbar_badge_avatar, &is_rectangle)) { |
+ return; |
msw
2015/04/16 22:53:34
I still think this shouldn't early return... If we
yao
2015/05/04 17:30:06
Done.
|
+ } |
+ |
+ // Disable the menu when we should not show the menu. |
msw
2015/04/16 22:53:34
Ping, I think this code should unconditionally cal
yao
2015/05/04 17:30:06
Done.
|
+ if (!should_show_avatar_menu) |
+ SetEnabled(false); |
+ SetAvatarIcon(avatar, is_rectangle); |
+} |
+ |
// views::ViewTargeterDelegate: |
bool AvatarMenuButton::DoesIntersectRect(const views::View* target, |
const gfx::Rect& rect) const { |
@@ -156,5 +182,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()); |
} |