OLD | NEW |
---|---|
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 #include "chrome/browser/profiles/avatar_menu.h" | 5 #include "chrome/browser/profiles/avatar_menu.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/i18n/case_conversion.h" | 8 #include "base/i18n/case_conversion.h" |
9 #include "base/metrics/field_trial.h" | 9 #include "base/metrics/field_trial.h" |
10 #include "base/profiler/scoped_tracker.h" | 10 #include "base/profiler/scoped_tracker.h" |
(...skipping 29 matching lines...) Expand all Loading... | |
40 using content::BrowserThread; | 40 using content::BrowserThread; |
41 | 41 |
42 namespace { | 42 namespace { |
43 | 43 |
44 // Constants for the show profile switcher experiment | 44 // Constants for the show profile switcher experiment |
45 const char kShowProfileSwitcherFieldTrialName[] = "ShowProfileSwitcher"; | 45 const char kShowProfileSwitcherFieldTrialName[] = "ShowProfileSwitcher"; |
46 const char kAlwaysShowSwitcherGroupName[] = "AlwaysShow"; | 46 const char kAlwaysShowSwitcherGroupName[] = "AlwaysShow"; |
47 | 47 |
48 } // namespace | 48 } // namespace |
49 | 49 |
50 AvatarMenu::AvatarMenu(ProfileInfoInterface* profile_cache, | 50 AvatarMenu::AvatarMenu(ProfileAttributesStorage* profile_storage, |
51 AvatarMenuObserver* observer, | 51 AvatarMenuObserver* observer, |
52 Browser* browser) | 52 Browser* browser) |
53 : profile_list_(ProfileList::Create(profile_cache)), | 53 : profile_list_(ProfileList::Create(profile_storage)), |
54 menu_actions_(AvatarMenuActions::Create()), | 54 menu_actions_(AvatarMenuActions::Create()), |
55 #if defined(ENABLE_SUPERVISED_USERS) | 55 #if defined(ENABLE_SUPERVISED_USERS) |
56 supervised_user_observer_(this), | 56 supervised_user_observer_(this), |
57 #endif | 57 #endif |
58 profile_info_(profile_cache), | |
59 observer_(observer), | 58 observer_(observer), |
60 browser_(browser) { | 59 browser_(browser) { |
61 DCHECK(profile_info_); | |
62 // Don't DCHECK(browser_) so that unit tests can reuse this ctor. | 60 // Don't DCHECK(browser_) so that unit tests can reuse this ctor. |
63 | 61 |
64 ActiveBrowserChanged(browser_); | 62 ActiveBrowserChanged(browser_); |
65 | 63 |
66 // Register this as an observer of the info cache. | 64 // Register this as an observer of the info cache. |
67 g_browser_process->profile_manager()->GetProfileInfoCache().AddObserver(this); | 65 g_browser_process->profile_manager()-> |
Mike Lerman
2015/08/06 16:06:19
The ctor was passed a ProfileAttributesStorage; wh
| |
66 GetProfileAttributesStorage().AddObserver(this); | |
68 | 67 |
69 #if defined(ENABLE_SUPERVISED_USERS) | 68 #if defined(ENABLE_SUPERVISED_USERS) |
70 // Register this as an observer of the SupervisedUserService to be notified | 69 // Register this as an observer of the SupervisedUserService to be notified |
71 // of changes to the custodian info. | 70 // of changes to the custodian info. |
72 if (browser_) { | 71 if (browser_) { |
73 supervised_user_observer_.Add( | 72 supervised_user_observer_.Add( |
74 SupervisedUserServiceFactory::GetForProfile(browser_->profile())); | 73 SupervisedUserServiceFactory::GetForProfile(browser_->profile())); |
75 } | 74 } |
76 #endif | 75 #endif |
77 } | 76 } |
78 | 77 |
79 AvatarMenu::~AvatarMenu() { | 78 AvatarMenu::~AvatarMenu() { |
80 g_browser_process->profile_manager()-> | 79 g_browser_process->profile_manager()-> |
81 GetProfileInfoCache().RemoveObserver(this); | 80 GetProfileAttributesStorage().RemoveObserver(this); |
82 } | 81 } |
83 | 82 |
84 AvatarMenu::Item::Item(size_t menu_index, | 83 AvatarMenu::Item::Item(size_t menu_index, |
85 size_t profile_index, | |
86 const gfx::Image& icon) | 84 const gfx::Image& icon) |
87 : icon(icon), | 85 : icon(icon), |
88 active(false), | 86 active(false), |
89 signed_in(false), | 87 signed_in(false), |
90 signin_required(false), | 88 signin_required(false), |
91 menu_index(menu_index), | 89 menu_index(menu_index) { |
92 profile_index(profile_index) { | |
93 } | 90 } |
94 | 91 |
95 AvatarMenu::Item::~Item() { | 92 AvatarMenu::Item::~Item() { |
96 } | 93 } |
97 | 94 |
98 // static | 95 // static |
99 bool AvatarMenu::ShouldShowAvatarMenu() { | 96 bool AvatarMenu::ShouldShowAvatarMenu() { |
100 if (base::FieldTrialList::FindFullName(kShowProfileSwitcherFieldTrialName) == | 97 if (base::FieldTrialList::FindFullName(kShowProfileSwitcherFieldTrialName) == |
101 kAlwaysShowSwitcherGroupName) { | 98 kAlwaysShowSwitcherGroupName) { |
102 // We should only be in this group when multi-profiles is enabled. | 99 // We should only be in this group when multi-profiles is enabled. |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
135 if (switches::IsNewAvatarMenu()) { | 132 if (switches::IsNewAvatarMenu()) { |
136 // Don't open a browser window for signed-out profiles. | 133 // Don't open a browser window for signed-out profiles. |
137 if (item.signin_required) { | 134 if (item.signin_required) { |
138 UserManager::Show(item.profile_path, | 135 UserManager::Show(item.profile_path, |
139 profiles::USER_MANAGER_NO_TUTORIAL, | 136 profiles::USER_MANAGER_NO_TUTORIAL, |
140 profiles::USER_MANAGER_SELECT_PROFILE_NO_ACTION); | 137 profiles::USER_MANAGER_SELECT_PROFILE_NO_ACTION); |
141 return; | 138 return; |
142 } | 139 } |
143 } | 140 } |
144 | 141 |
145 base::FilePath path = | |
146 profile_info_->GetPathOfProfileAtIndex(item.profile_index); | |
147 | |
148 chrome::HostDesktopType desktop_type = chrome::GetActiveDesktop(); | 142 chrome::HostDesktopType desktop_type = chrome::GetActiveDesktop(); |
149 if (browser_) | 143 if (browser_) |
150 desktop_type = browser_->host_desktop_type(); | 144 desktop_type = browser_->host_desktop_type(); |
151 | 145 |
152 profiles::SwitchToProfile(path, desktop_type, always_create, | 146 profiles::SwitchToProfile(item.profile_path, desktop_type, always_create, |
153 ProfileManager::CreateCallback(), | 147 ProfileManager::CreateCallback(), |
154 metric); | 148 metric); |
155 } | 149 } |
156 | 150 |
157 void AvatarMenu::AddNewProfile(ProfileMetrics::ProfileAdd type) { | 151 void AvatarMenu::AddNewProfile(ProfileMetrics::ProfileAdd type) { |
158 menu_actions_->AddNewProfile(type); | 152 menu_actions_->AddNewProfile(type); |
159 } | 153 } |
160 | 154 |
161 void AvatarMenu::EditProfile(size_t index) { | 155 void AvatarMenu::EditProfile(size_t index) { |
162 // Get the index in the profile cache from the menu index. | 156 base::FilePath profile_path = profile_list_->GetItemAt(index).profile_path; |
163 size_t profile_index = profile_list_->GetItemAt(index).profile_index; | |
164 | |
165 Profile* profile = g_browser_process->profile_manager()->GetProfileByPath( | 157 Profile* profile = g_browser_process->profile_manager()->GetProfileByPath( |
166 profile_info_->GetPathOfProfileAtIndex(profile_index)); | 158 profile_path); |
Mike Lerman
2015/08/06 16:06:19
Don't need to declare a FilePath, you can just inl
| |
167 | 159 menu_actions_->EditProfile(profile); |
168 menu_actions_->EditProfile(profile, profile_index); | |
169 } | 160 } |
170 | 161 |
171 void AvatarMenu::RebuildMenu() { | 162 void AvatarMenu::RebuildMenu() { |
172 profile_list_->RebuildMenu(); | 163 profile_list_->RebuildMenu(); |
173 } | 164 } |
174 | 165 |
175 size_t AvatarMenu::GetNumberOfItems() const { | 166 size_t AvatarMenu::GetNumberOfItems() const { |
176 return profile_list_->GetNumberOfItems(); | 167 return profile_list_->GetNumberOfItems(); |
177 } | 168 } |
178 | 169 |
179 const AvatarMenu::Item& AvatarMenu::GetItemAt(size_t index) const { | 170 const AvatarMenu::Item& AvatarMenu::GetItemAt(size_t index) const { |
180 return profile_list_->GetItemAt(index); | 171 return profile_list_->GetItemAt(index); |
181 } | 172 } |
173 | |
174 size_t AvatarMenu::GetIndexOfItemWithProfilePath(const base::FilePath& path) { | |
175 return profile_list_->MenuIndexFromProfilePath(path); | |
176 } | |
177 | |
182 size_t AvatarMenu::GetActiveProfileIndex() { | 178 size_t AvatarMenu::GetActiveProfileIndex() { |
183 | 179 |
184 // During singleton profile deletion, this function can be called with no | 180 // During singleton profile deletion, this function can be called with no |
185 // profiles in the model - crbug.com/102278 . | 181 // profiles in the model - crbug.com/102278 . |
186 if (profile_list_->GetNumberOfItems() == 0) | 182 if (profile_list_->GetNumberOfItems() == 0) |
187 return 0; | 183 return 0; |
188 | 184 |
189 Profile* active_profile = NULL; | 185 Profile* active_profile = NULL; |
190 if (!browser_) | 186 if (!browser_) |
191 active_profile = ProfileManager::GetLastUsedProfile(); | 187 active_profile = ProfileManager::GetLastUsedProfile(); |
192 else | 188 else |
193 active_profile = browser_->profile(); | 189 active_profile = browser_->profile(); |
194 | 190 |
195 size_t index = | 191 size_t index = |
196 profile_info_->GetIndexOfProfileWithPath(active_profile->GetPath()); | 192 profile_list_->MenuIndexFromProfilePath(active_profile->GetPath()); |
197 | |
198 index = profile_list_->MenuIndexFromProfileIndex(index); | |
199 DCHECK_LT(index, profile_list_->GetNumberOfItems()); | 193 DCHECK_LT(index, profile_list_->GetNumberOfItems()); |
200 return index; | 194 return index; |
201 } | 195 } |
202 | 196 |
203 base::string16 AvatarMenu::GetSupervisedUserInformation() const { | 197 base::string16 AvatarMenu::GetSupervisedUserInformation() const { |
204 // |browser_| can be NULL in unit_tests. | 198 // |browser_| can be NULL in unit_tests. |
205 if (browser_ && browser_->profile()->IsSupervised()) { | 199 if (browser_ && browser_->profile()->IsSupervised()) { |
206 #if defined(ENABLE_SUPERVISED_USERS) | 200 #if defined(ENABLE_SUPERVISED_USERS) |
207 SupervisedUserService* service = | 201 SupervisedUserService* service = |
208 SupervisedUserServiceFactory::GetForProfile(browser_->profile()); | 202 SupervisedUserServiceFactory::GetForProfile(browser_->profile()); |
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
299 if (observer_) | 293 if (observer_) |
300 observer_->OnAvatarMenuChanged(this); | 294 observer_->OnAvatarMenuChanged(this); |
301 } | 295 } |
302 #endif | 296 #endif |
303 | 297 |
304 void AvatarMenu::Update() { | 298 void AvatarMenu::Update() { |
305 RebuildMenu(); | 299 RebuildMenu(); |
306 if (observer_) | 300 if (observer_) |
307 observer_->OnAvatarMenuChanged(this); | 301 observer_->OnAvatarMenuChanged(this); |
308 } | 302 } |
OLD | NEW |