Chromium Code Reviews| Index: chrome/browser/ui/cocoa/profiles/avatar_base_controller.mm |
| diff --git a/chrome/browser/ui/cocoa/profiles/avatar_base_controller.mm b/chrome/browser/ui/cocoa/profiles/avatar_base_controller.mm |
| index 88b8f00def2ce9589f6e84011039e21fccc5f9cb..23db640bda449c735227500101c5bb319f0d5270 100644 |
| --- a/chrome/browser/ui/cocoa/profiles/avatar_base_controller.mm |
| +++ b/chrome/browser/ui/cocoa/profiles/avatar_base_controller.mm |
| @@ -10,6 +10,7 @@ |
| #include "chrome/browser/profiles/profile_avatar_icon_util.h" |
| #include "chrome/browser/profiles/profile_manager.h" |
| #include "chrome/browser/profiles/profile_metrics.h" |
| +#include "chrome/browser/profiles/profiles_state.h" |
| #include "chrome/browser/ui/browser.h" |
| #include "chrome/browser/ui/browser_commands.h" |
| #include "chrome/browser/ui/browser_window.h" |
| @@ -17,6 +18,7 @@ |
| #import "chrome/browser/ui/cocoa/browser_window_controller.h" |
| #import "chrome/browser/ui/cocoa/profiles/avatar_menu_bubble_controller.h" |
| #import "chrome/browser/ui/cocoa/profiles/profile_chooser_controller.h" |
| +#include "components/signin/core/browser/signin_error_controller.h" |
| #include "components/signin/core/common/profile_management_switches.h" |
| #include "ui/base/resource/resource_bundle.h" |
| @@ -31,19 +33,32 @@ const CGFloat kMenuYOffsetAdjust = 1.0; |
| // yes, then the BrowserWindowController is notified to relayout the subviews, |
| // as the button needs to be repositioned. |
| - (void)updateAvatarButtonAndLayoutParent:(BOOL)layoutParent; |
| +- (void)updateErrorStatus:(BOOL)hasError; |
|
msw
2014/06/03 04:15:31
nit: consider a more descriptive name or add a com
noms (inactive)
2014/06/06 20:33:43
Done.
|
| @end |
| -class ProfileInfoUpdateObserver : public ProfileInfoCacheObserver { |
| +class ProfileInfoUpdateObserver : public ProfileInfoCacheObserver, |
| + public SigninErrorController::Observer { |
| public: |
| - ProfileInfoUpdateObserver(AvatarBaseController* avatarButton) |
| - : avatarButton_(avatarButton) { |
| + ProfileInfoUpdateObserver(Profile* profile, |
| + AvatarBaseController* avatarButton) |
| + : profile_(profile), |
| + avatarButton_(avatarButton) { |
| g_browser_process->profile_manager()-> |
| GetProfileInfoCache().AddObserver(this); |
| + |
| + // Subscribe to authentication error changes so that the avatar button |
| + // can update itself. |
| + SigninErrorController* error = profiles::GetSigninErrorController(profile_); |
| + if (error) |
|
msw
2014/06/03 04:15:31
nit: Can this generally ever be NIL? (remove if st
noms (inactive)
2014/06/06 20:33:43
Yes. The SigninErrorController can be null for Gue
|
| + error->AddObserver(this); |
| } |
| virtual ~ProfileInfoUpdateObserver() { |
| g_browser_process->profile_manager()-> |
| GetProfileInfoCache().RemoveObserver(this); |
| + SigninErrorController* error = profiles::GetSigninErrorController(profile_); |
| + if(error) |
|
msw
2014/06/03 04:15:31
nit: space after if
noms (inactive)
2014/06/06 20:33:43
Done.
|
| + error->RemoveObserver(this); |
| } |
| // ProfileInfoCacheObserver: |
| @@ -68,7 +83,15 @@ class ProfileInfoUpdateObserver : public ProfileInfoCacheObserver { |
| [avatarButton_ updateAvatarButtonAndLayoutParent:YES]; |
| } |
| + // SigninErrorController::Observer: |
| + virtual void OnErrorChanged() OVERRIDE { |
| + SigninErrorController* error = profiles::GetSigninErrorController(profile_); |
| + if (error) |
| + [avatarButton_ updateErrorStatus:error->HasError()]; |
|
msw
2014/06/03 04:15:31
When won't error exist? Should the button be updat
noms (inactive)
2014/06/06 20:33:43
|error| can be null for guest or incognito profile
|
| + } |
| + |
| private: |
| + Profile* profile_; |
| AvatarBaseController* avatarButton_; // Weak; owns this. |
| DISALLOW_COPY_AND_ASSIGN(ProfileInfoUpdateObserver); |
| @@ -79,7 +102,8 @@ class ProfileInfoUpdateObserver : public ProfileInfoCacheObserver { |
| - (id)initWithBrowser:(Browser*)browser { |
| if ((self = [super init])) { |
| browser_ = browser; |
| - profileInfoObserver_.reset(new ProfileInfoUpdateObserver(self)); |
| + profileInfoObserver_.reset( |
| + new ProfileInfoUpdateObserver(browser_->profile(), self)); |
| } |
| return self; |
| } |
| @@ -166,6 +190,9 @@ class ProfileInfoUpdateObserver : public ProfileInfoCacheObserver { |
| NOTREACHED(); |
| } |
| +- (void)updateErrorStatus:(BOOL)hasError { |
| +} |
| + |
| - (BaseBubbleController*)menuController { |
| return menuController_; |
| } |