| 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 "ash/ash_switches.h" | 7 #include "ash/ash_switches.h" |
| 8 #include "base/bind.h" | 8 #include "base/bind.h" |
| 9 #include "base/i18n/case_conversion.h" | 9 #include "base/i18n/case_conversion.h" |
| 10 #include "base/metrics/field_trial.h" | 10 #include "base/metrics/field_trial.h" |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 76 | 76 |
| 77 // Register this as an observer of the info cache. | 77 // Register this as an observer of the info cache. |
| 78 registrar_.Add(this, chrome::NOTIFICATION_PROFILE_CACHED_INFO_CHANGED, | 78 registrar_.Add(this, chrome::NOTIFICATION_PROFILE_CACHED_INFO_CHANGED, |
| 79 content::NotificationService::AllSources()); | 79 content::NotificationService::AllSources()); |
| 80 } | 80 } |
| 81 | 81 |
| 82 AvatarMenu::~AvatarMenu() { | 82 AvatarMenu::~AvatarMenu() { |
| 83 } | 83 } |
| 84 | 84 |
| 85 AvatarMenu::Item::Item(size_t menu_index, | 85 AvatarMenu::Item::Item(size_t menu_index, |
| 86 size_t profile_index, | |
| 87 const gfx::Image& icon) | 86 const gfx::Image& icon) |
| 88 : icon(icon), | 87 : icon(icon), |
| 89 active(false), | 88 active(false), |
| 90 signed_in(false), | 89 signed_in(false), |
| 91 signin_required(false), | 90 signin_required(false), |
| 92 menu_index(menu_index), | 91 menu_index(menu_index) { |
| 93 profile_index(profile_index) { | |
| 94 } | 92 } |
| 95 | 93 |
| 96 AvatarMenu::Item::~Item() { | 94 AvatarMenu::Item::~Item() { |
| 97 } | 95 } |
| 98 | 96 |
| 99 // static | 97 // static |
| 100 bool AvatarMenu::ShouldShowAvatarMenu() { | 98 bool AvatarMenu::ShouldShowAvatarMenu() { |
| 101 if (base::FieldTrialList::FindFullName(kShowProfileSwitcherFieldTrialName) == | 99 if (base::FieldTrialList::FindFullName(kShowProfileSwitcherFieldTrialName) == |
| 102 kAlwaysShowSwitcherGroupName) { | 100 kAlwaysShowSwitcherGroupName) { |
| 103 // We should only be in this group when multi-profiles is enabled. | 101 // 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... |
| 136 profile_manager->CreateProfileAsync(ProfileManager::GetGuestProfilePath(), | 134 profile_manager->CreateProfileAsync(ProfileManager::GetGuestProfilePath(), |
| 137 base::Bind(&OnProfileCreated, | 135 base::Bind(&OnProfileCreated, |
| 138 false, | 136 false, |
| 139 desktop_type), | 137 desktop_type), |
| 140 string16(), | 138 string16(), |
| 141 string16(), | 139 string16(), |
| 142 std::string()); | 140 std::string()); |
| 143 } | 141 } |
| 144 | 142 |
| 145 void AvatarMenu::SwitchToProfile(size_t index, bool always_create) { | 143 void AvatarMenu::SwitchToProfile(size_t index, bool always_create) { |
| 144 const Item& active_item = GetActiveProfileItem(); |
| 146 DCHECK(profiles::IsMultipleProfilesEnabled() || | 145 DCHECK(profiles::IsMultipleProfilesEnabled() || |
| 147 index == GetActiveProfileIndex()); | 146 index == active_item.menu_index); |
| 147 |
| 148 const Item& item = GetItemAt(index); | 148 const Item& item = GetItemAt(index); |
| 149 base::FilePath path = | 149 base::FilePath path = item.profile_path; |
| 150 profile_info_->GetPathOfProfileAtIndex(item.profile_index); | |
| 151 | |
| 152 chrome::HostDesktopType desktop_type = chrome::GetActiveDesktop(); | 150 chrome::HostDesktopType desktop_type = chrome::GetActiveDesktop(); |
| 153 if (browser_) | 151 if (browser_) |
| 154 desktop_type = browser_->host_desktop_type(); | 152 desktop_type = browser_->host_desktop_type(); |
| 155 | 153 |
| 156 profiles::SwitchToProfile(path, desktop_type, always_create); | 154 profiles::SwitchToProfile(path, desktop_type, always_create); |
| 157 ProfileMetrics::LogProfileSwitchUser(ProfileMetrics::SWITCH_PROFILE_ICON); | 155 ProfileMetrics::LogProfileSwitchUser(ProfileMetrics::SWITCH_PROFILE_ICON); |
| 158 } | 156 } |
| 159 | 157 |
| 160 void AvatarMenu::AddNewProfile(ProfileMetrics::ProfileAdd type) { | 158 void AvatarMenu::AddNewProfile(ProfileMetrics::ProfileAdd type) { |
| 161 menu_actions_->AddNewProfile(type); | 159 menu_actions_->AddNewProfile(type); |
| 162 } | 160 } |
| 163 | 161 |
| 164 void AvatarMenu::EditProfile(size_t index) { | 162 void AvatarMenu::EditProfile(size_t index) { |
| 165 // Get the index in the profile cache from the menu index. | 163 // Get the index in the profile cache from the menu index. |
| 166 size_t profile_index = profile_list_->GetItemAt(index).profile_index; | 164 size_t profile_index = profile_list_->GetItemAt(index).profile_path; |
| 167 | 165 |
| 168 Profile* profile = g_browser_process->profile_manager()->GetProfileByPath( | 166 Profile* profile = g_browser_process->profile_manager()->GetProfileByPath( |
| 169 profile_info_->GetPathOfProfileAtIndex(profile_index)); | 167 profile_list_->GetItemAt(index).profile_path); |
| 170 | 168 |
| 171 menu_actions_->EditProfile(profile, profile_index); | 169 menu_actions_->EditProfile(profile); |
| 172 } | 170 } |
| 173 | 171 |
| 174 void AvatarMenu::RebuildMenu() { | 172 void AvatarMenu::RebuildMenu() { |
| 175 profile_list_->RebuildMenu(); | 173 profile_list_->RebuildMenu(); |
| 176 } | 174 } |
| 177 | 175 |
| 178 size_t AvatarMenu::GetNumberOfItems() const { | 176 size_t AvatarMenu::GetNumberOfItems() const { |
| 179 return profile_list_->GetNumberOfItems(); | 177 return profile_list_->GetNumberOfItems(); |
| 180 } | 178 } |
| 181 | 179 |
| 182 const AvatarMenu::Item& AvatarMenu::GetItemAt(size_t index) const { | 180 const AvatarMenu::Item& AvatarMenu::GetItemAt(size_t index) const { |
| 183 return profile_list_->GetItemAt(index); | 181 return profile_list_->GetItemAt(index); |
| 184 } | 182 } |
| 185 size_t AvatarMenu::GetActiveProfileIndex() { | |
| 186 | 183 |
| 187 // During singleton profile deletion, this function can be called with no | 184 const AvatarMenu::Item& AvatarMenu::GetActiveProfileItem() const { |
| 188 // profiles in the model - crbug.com/102278 . | 185 return profile_list_->GetActiveItem(); |
| 189 if (profile_list_->GetNumberOfItems() == 0) | |
| 190 return 0; | |
| 191 | |
| 192 Profile* active_profile = NULL; | |
| 193 if (!browser_) | |
| 194 active_profile = ProfileManager::GetLastUsedProfile(); | |
| 195 else | |
| 196 active_profile = browser_->profile(); | |
| 197 | |
| 198 size_t index = | |
| 199 profile_info_->GetIndexOfProfileWithPath(active_profile->GetPath()); | |
| 200 | |
| 201 index = profile_list_->MenuIndexFromProfileIndex(index); | |
| 202 DCHECK_LT(index, profile_list_->GetNumberOfItems()); | |
| 203 return index; | |
| 204 } | 186 } |
| 205 | 187 |
| 206 base::string16 AvatarMenu::GetManagedUserInformation() const { | 188 base::string16 AvatarMenu::GetManagedUserInformation() const { |
| 207 // |browser_| can be NULL in unit_tests. | 189 // |browser_| can be NULL in unit_tests. |
| 208 if (browser_ && browser_->profile()->IsManaged()) { | 190 if (browser_ && browser_->profile()->IsManaged()) { |
| 209 #if defined(ENABLE_MANAGED_USERS) | 191 #if defined(ENABLE_MANAGED_USERS) |
| 210 ManagedUserService* service = ManagedUserServiceFactory::GetForProfile( | 192 ManagedUserService* service = ManagedUserServiceFactory::GetForProfile( |
| 211 browser_->profile()); | 193 browser_->profile()); |
| 212 base::string16 custodian = UTF8ToUTF16(service->GetCustodianEmailAddress()); | 194 base::string16 custodian = UTF8ToUTF16(service->GetCustodianEmailAddress()); |
| 213 return l10n_util::GetStringFUTF16(IDS_MANAGED_USER_INFO, custodian); | 195 return l10n_util::GetStringFUTF16(IDS_MANAGED_USER_INFO, custodian); |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 249 observer_->OnAvatarMenuChanged(this); | 231 observer_->OnAvatarMenuChanged(this); |
| 250 } | 232 } |
| 251 | 233 |
| 252 content::WebContents* AvatarMenu::BeginSignOut() { | 234 content::WebContents* AvatarMenu::BeginSignOut() { |
| 253 return menu_actions_->BeginSignOut(); | 235 return menu_actions_->BeginSignOut(); |
| 254 } | 236 } |
| 255 | 237 |
| 256 void AvatarMenu::SetLogoutURL(const std::string& logout_url) { | 238 void AvatarMenu::SetLogoutURL(const std::string& logout_url) { |
| 257 menu_actions_->SetLogoutURL(logout_url); | 239 menu_actions_->SetLogoutURL(logout_url); |
| 258 } | 240 } |
| OLD | NEW |