| 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 f8f8dfb31898127295d6306352b280550bff2ce5..4ccc85d9cb7541e5eb8bcd57dd09d62b5bb55f81 100644
|
| --- a/chrome/browser/ui/cocoa/profiles/avatar_base_controller.mm
|
| +++ b/chrome/browser/ui/cocoa/profiles/avatar_base_controller.mm
|
| @@ -11,6 +11,7 @@
|
| #include "chrome/browser/profiles/profile_manager.h"
|
| #include "chrome/browser/profiles/profile_metrics.h"
|
| #include "chrome/browser/signin/signin_header_helper.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"
|
| @@ -18,6 +19,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"
|
|
|
| @@ -32,19 +34,34 @@ 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;
|
| +// Displays an error icon if any accounts associated with this profile have an
|
| +// auth error.
|
| +- (void)updateErrorStatus:(BOOL)hasError;
|
| @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)
|
| + error->AddObserver(this);
|
| }
|
|
|
| virtual ~ProfileInfoUpdateObserver() {
|
| g_browser_process->profile_manager()->
|
| GetProfileInfoCache().RemoveObserver(this);
|
| + SigninErrorController* error = profiles::GetSigninErrorController(profile_);
|
| + if (error)
|
| + error->RemoveObserver(this);
|
| }
|
|
|
| // ProfileInfoCacheObserver:
|
| @@ -69,7 +86,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()];
|
| + }
|
| +
|
| private:
|
| + Profile* profile_;
|
| AvatarBaseController* avatarButton_; // Weak; owns this.
|
|
|
| DISALLOW_COPY_AND_ASSIGN(ProfileInfoUpdateObserver);
|
| @@ -80,7 +105,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;
|
| }
|
| @@ -170,6 +196,9 @@ class ProfileInfoUpdateObserver : public ProfileInfoCacheObserver {
|
| NOTREACHED();
|
| }
|
|
|
| +- (void)updateErrorStatus:(BOOL)hasError {
|
| +}
|
| +
|
| - (BaseBubbleController*)menuController {
|
| return menuController_;
|
| }
|
|
|