OLD | NEW |
---|---|
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #import "chrome/browser/ui/cocoa/profiles/avatar_base_controller.h" | 5 #import "chrome/browser/ui/cocoa/profiles/avatar_base_controller.h" |
6 | 6 |
7 #include "chrome/app/chrome_command_ids.h" | 7 #include "chrome/app/chrome_command_ids.h" |
8 #include "chrome/browser/browser_process.h" | 8 #include "chrome/browser/browser_process.h" |
9 #include "chrome/browser/profiles/profile_info_cache_observer.h" | 9 #include "chrome/browser/profiles/profile_info_cache_observer.h" |
10 #include "chrome/browser/profiles/profile_avatar_icon_util.h" | 10 #include "chrome/browser/profiles/profile_avatar_icon_util.h" |
11 #include "chrome/browser/profiles/profile_manager.h" | 11 #include "chrome/browser/profiles/profile_manager.h" |
12 #include "chrome/browser/profiles/profile_metrics.h" | 12 #include "chrome/browser/profiles/profile_metrics.h" |
13 #include "chrome/browser/profiles/profiles_state.h" | |
13 #include "chrome/browser/ui/browser.h" | 14 #include "chrome/browser/ui/browser.h" |
14 #include "chrome/browser/ui/browser_commands.h" | 15 #include "chrome/browser/ui/browser_commands.h" |
15 #include "chrome/browser/ui/browser_window.h" | 16 #include "chrome/browser/ui/browser_window.h" |
16 #import "chrome/browser/ui/cocoa/base_bubble_controller.h" | 17 #import "chrome/browser/ui/cocoa/base_bubble_controller.h" |
17 #import "chrome/browser/ui/cocoa/browser_window_controller.h" | 18 #import "chrome/browser/ui/cocoa/browser_window_controller.h" |
18 #import "chrome/browser/ui/cocoa/profiles/avatar_menu_bubble_controller.h" | 19 #import "chrome/browser/ui/cocoa/profiles/avatar_menu_bubble_controller.h" |
19 #import "chrome/browser/ui/cocoa/profiles/profile_chooser_controller.h" | 20 #import "chrome/browser/ui/cocoa/profiles/profile_chooser_controller.h" |
21 #include "components/signin/core/browser/signin_error_controller.h" | |
20 #include "components/signin/core/common/profile_management_switches.h" | 22 #include "components/signin/core/common/profile_management_switches.h" |
21 #include "ui/base/resource/resource_bundle.h" | 23 #include "ui/base/resource/resource_bundle.h" |
22 | 24 |
23 // Space between the avatar icon and the avatar menu bubble. | 25 // Space between the avatar icon and the avatar menu bubble. |
24 const CGFloat kMenuYOffsetAdjust = 1.0; | 26 const CGFloat kMenuYOffsetAdjust = 1.0; |
25 | 27 |
26 @interface AvatarBaseController (Private) | 28 @interface AvatarBaseController (Private) |
27 // Shows the avatar bubble. | 29 // Shows the avatar bubble. |
28 - (IBAction)buttonClicked:(id)sender; | 30 - (IBAction)buttonClicked:(id)sender; |
29 - (void)bubbleWillClose:(NSNotification*)notif; | 31 - (void)bubbleWillClose:(NSNotification*)notif; |
30 // Updates the profile name displayed by the avatar button. If |layoutParent| is | 32 // Updates the profile name displayed by the avatar button. If |layoutParent| is |
31 // yes, then the BrowserWindowController is notified to relayout the subviews, | 33 // yes, then the BrowserWindowController is notified to relayout the subviews, |
32 // as the button needs to be repositioned. | 34 // as the button needs to be repositioned. |
33 - (void)updateAvatarButtonAndLayoutParent:(BOOL)layoutParent; | 35 - (void)updateAvatarButtonAndLayoutParent:(BOOL)layoutParent; |
36 - (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.
| |
34 @end | 37 @end |
35 | 38 |
36 class ProfileInfoUpdateObserver : public ProfileInfoCacheObserver { | 39 class ProfileInfoUpdateObserver : public ProfileInfoCacheObserver, |
40 public SigninErrorController::Observer { | |
37 public: | 41 public: |
38 ProfileInfoUpdateObserver(AvatarBaseController* avatarButton) | 42 ProfileInfoUpdateObserver(Profile* profile, |
39 : avatarButton_(avatarButton) { | 43 AvatarBaseController* avatarButton) |
44 : profile_(profile), | |
45 avatarButton_(avatarButton) { | |
40 g_browser_process->profile_manager()-> | 46 g_browser_process->profile_manager()-> |
41 GetProfileInfoCache().AddObserver(this); | 47 GetProfileInfoCache().AddObserver(this); |
48 | |
49 // Subscribe to authentication error changes so that the avatar button | |
50 // can update itself. | |
51 SigninErrorController* error = profiles::GetSigninErrorController(profile_); | |
52 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
| |
53 error->AddObserver(this); | |
42 } | 54 } |
43 | 55 |
44 virtual ~ProfileInfoUpdateObserver() { | 56 virtual ~ProfileInfoUpdateObserver() { |
45 g_browser_process->profile_manager()-> | 57 g_browser_process->profile_manager()-> |
46 GetProfileInfoCache().RemoveObserver(this); | 58 GetProfileInfoCache().RemoveObserver(this); |
59 SigninErrorController* error = profiles::GetSigninErrorController(profile_); | |
60 if(error) | |
msw
2014/06/03 04:15:31
nit: space after if
noms (inactive)
2014/06/06 20:33:43
Done.
| |
61 error->RemoveObserver(this); | |
47 } | 62 } |
48 | 63 |
49 // ProfileInfoCacheObserver: | 64 // ProfileInfoCacheObserver: |
50 virtual void OnProfileAdded(const base::FilePath& profile_path) OVERRIDE { | 65 virtual void OnProfileAdded(const base::FilePath& profile_path) OVERRIDE { |
51 [avatarButton_ updateAvatarButtonAndLayoutParent:YES]; | 66 [avatarButton_ updateAvatarButtonAndLayoutParent:YES]; |
52 } | 67 } |
53 | 68 |
54 virtual void OnProfileWasRemoved( | 69 virtual void OnProfileWasRemoved( |
55 const base::FilePath& profile_path, | 70 const base::FilePath& profile_path, |
56 const base::string16& profile_name) OVERRIDE { | 71 const base::string16& profile_name) OVERRIDE { |
57 [avatarButton_ updateAvatarButtonAndLayoutParent:YES]; | 72 [avatarButton_ updateAvatarButtonAndLayoutParent:YES]; |
58 } | 73 } |
59 | 74 |
60 virtual void OnProfileNameChanged( | 75 virtual void OnProfileNameChanged( |
61 const base::FilePath& profile_path, | 76 const base::FilePath& profile_path, |
62 const base::string16& old_profile_name) OVERRIDE { | 77 const base::string16& old_profile_name) OVERRIDE { |
63 [avatarButton_ updateAvatarButtonAndLayoutParent:YES]; | 78 [avatarButton_ updateAvatarButtonAndLayoutParent:YES]; |
64 } | 79 } |
65 | 80 |
66 virtual void OnProfileAvatarChanged( | 81 virtual void OnProfileAvatarChanged( |
67 const base::FilePath& profile_path) OVERRIDE { | 82 const base::FilePath& profile_path) OVERRIDE { |
68 [avatarButton_ updateAvatarButtonAndLayoutParent:YES]; | 83 [avatarButton_ updateAvatarButtonAndLayoutParent:YES]; |
69 } | 84 } |
70 | 85 |
86 // SigninErrorController::Observer: | |
87 virtual void OnErrorChanged() OVERRIDE { | |
88 SigninErrorController* error = profiles::GetSigninErrorController(profile_); | |
89 if (error) | |
90 [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
| |
91 } | |
92 | |
71 private: | 93 private: |
94 Profile* profile_; | |
72 AvatarBaseController* avatarButton_; // Weak; owns this. | 95 AvatarBaseController* avatarButton_; // Weak; owns this. |
73 | 96 |
74 DISALLOW_COPY_AND_ASSIGN(ProfileInfoUpdateObserver); | 97 DISALLOW_COPY_AND_ASSIGN(ProfileInfoUpdateObserver); |
75 }; | 98 }; |
76 | 99 |
77 @implementation AvatarBaseController | 100 @implementation AvatarBaseController |
78 | 101 |
79 - (id)initWithBrowser:(Browser*)browser { | 102 - (id)initWithBrowser:(Browser*)browser { |
80 if ((self = [super init])) { | 103 if ((self = [super init])) { |
81 browser_ = browser; | 104 browser_ = browser; |
82 profileInfoObserver_.reset(new ProfileInfoUpdateObserver(self)); | 105 profileInfoObserver_.reset( |
106 new ProfileInfoUpdateObserver(browser_->profile(), self)); | |
83 } | 107 } |
84 return self; | 108 return self; |
85 } | 109 } |
86 | 110 |
87 - (void)dealloc { | 111 - (void)dealloc { |
88 [[NSNotificationCenter defaultCenter] | 112 [[NSNotificationCenter defaultCenter] |
89 removeObserver:self | 113 removeObserver:self |
90 name:NSWindowWillCloseNotification | 114 name:NSWindowWillCloseNotification |
91 object:[menuController_ window]]; | 115 object:[menuController_ window]]; |
92 [super dealloc]; | 116 [super dealloc]; |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
159 [static_cast<BrowserWindowController*>(wc) | 183 [static_cast<BrowserWindowController*>(wc) |
160 releaseBarVisibilityForOwner:self withAnimation:YES delay:NO]; | 184 releaseBarVisibilityForOwner:self withAnimation:YES delay:NO]; |
161 } | 185 } |
162 menuController_ = nil; | 186 menuController_ = nil; |
163 } | 187 } |
164 | 188 |
165 - (void)updateAvatarButtonAndLayoutParent:(BOOL)layoutParent { | 189 - (void)updateAvatarButtonAndLayoutParent:(BOOL)layoutParent { |
166 NOTREACHED(); | 190 NOTREACHED(); |
167 } | 191 } |
168 | 192 |
193 - (void)updateErrorStatus:(BOOL)hasError { | |
194 } | |
195 | |
169 - (BaseBubbleController*)menuController { | 196 - (BaseBubbleController*)menuController { |
170 return menuController_; | 197 return menuController_; |
171 } | 198 } |
172 | 199 |
173 @end | 200 @end |
OLD | NEW |