| 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_model.h" | 5 #include "chrome/browser/profiles/avatar_menu_model.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/stl_util.h" | 8 #include "base/stl_util.h" |
| 9 #include "base/string_number_conversions.h" | 9 #include "base/string_number_conversions.h" |
| 10 #include "chrome/browser/browser_process.h" | 10 #include "chrome/browser/browser_process.h" |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 44 | 44 |
| 45 } // namespace | 45 } // namespace |
| 46 | 46 |
| 47 AvatarMenuModel::AvatarMenuModel(ProfileInfoInterface* profile_cache, | 47 AvatarMenuModel::AvatarMenuModel(ProfileInfoInterface* profile_cache, |
| 48 AvatarMenuModelObserver* observer, | 48 AvatarMenuModelObserver* observer, |
| 49 Browser* browser) | 49 Browser* browser) |
| 50 : profile_info_(profile_cache), | 50 : profile_info_(profile_cache), |
| 51 observer_(observer), | 51 observer_(observer), |
| 52 browser_(browser) { | 52 browser_(browser) { |
| 53 DCHECK(profile_info_); | 53 DCHECK(profile_info_); |
| 54 DCHECK(observer_); | |
| 55 // Don't DCHECK(browser_) so that unit tests can reuse this ctor. | 54 // Don't DCHECK(browser_) so that unit tests can reuse this ctor. |
| 56 | 55 |
| 57 // Register this as an observer of the info cache. | 56 // Register this as an observer of the info cache. |
| 58 registrar_.Add(this, chrome::NOTIFICATION_PROFILE_CACHED_INFO_CHANGED, | 57 registrar_.Add(this, chrome::NOTIFICATION_PROFILE_CACHED_INFO_CHANGED, |
| 59 content::NotificationService::AllSources()); | 58 content::NotificationService::AllSources()); |
| 60 | 59 |
| 61 // Build the initial menu. | 60 // Build the initial menu. |
| 62 RebuildMenu(); | 61 RebuildMenu(); |
| 63 } | 62 } |
| 64 | 63 |
| 65 AvatarMenuModel::~AvatarMenuModel() { | 64 AvatarMenuModel::~AvatarMenuModel() { |
| 66 ClearMenu(); | 65 ClearMenu(); |
| 67 } | 66 } |
| 68 | 67 |
| 69 AvatarMenuModel::Item::Item(size_t model_index, const gfx::Image& icon) | 68 AvatarMenuModel::Item::Item(size_t model_index, const gfx::Image& icon) |
| 70 : icon(icon), | 69 : icon(icon), |
| 71 active(false), | 70 active(false), |
| 72 model_index(model_index) { | 71 model_index(model_index) { |
| 73 } | 72 } |
| 74 | 73 |
| 75 AvatarMenuModel::Item::~Item() { | 74 AvatarMenuModel::Item::~Item() { |
| 76 } | 75 } |
| 77 | 76 |
| 78 void AvatarMenuModel::SwitchToProfile(size_t index, bool always_create) { | 77 void AvatarMenuModel::SwitchToProfile(size_t index, bool always_create) { |
| 78 DCHECK(ProfileManager::IsMultipleProfilesEnabled() || |
| 79 index == GetActiveProfileIndex()); |
| 79 const Item& item = GetItemAt(index); | 80 const Item& item = GetItemAt(index); |
| 80 FilePath path = profile_info_->GetPathOfProfileAtIndex(item.model_index); | 81 FilePath path = profile_info_->GetPathOfProfileAtIndex(item.model_index); |
| 81 g_browser_process->profile_manager()->CreateProfileAsync( | 82 g_browser_process->profile_manager()->CreateProfileAsync( |
| 82 path, base::Bind(&OnProfileCreated, always_create)); | 83 path, base::Bind(&OnProfileCreated, always_create)); |
| 83 | 84 |
| 84 ProfileMetrics::LogProfileSwitchUser(ProfileMetrics::SWITCH_PROFILE_ICON); | 85 ProfileMetrics::LogProfileSwitchUser(ProfileMetrics::SWITCH_PROFILE_ICON); |
| 85 } | 86 } |
| 86 | 87 |
| 87 void AvatarMenuModel::EditProfile(size_t index) { | 88 void AvatarMenuModel::EditProfile(size_t index) { |
| 88 Browser* browser = browser_; | 89 Browser* browser = browser_; |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 128 const AvatarMenuModel::Item& AvatarMenuModel::GetItemAt(size_t index) { | 129 const AvatarMenuModel::Item& AvatarMenuModel::GetItemAt(size_t index) { |
| 129 DCHECK_LT(index, items_.size()); | 130 DCHECK_LT(index, items_.size()); |
| 130 return *items_[index]; | 131 return *items_[index]; |
| 131 } | 132 } |
| 132 | 133 |
| 133 void AvatarMenuModel::Observe(int type, | 134 void AvatarMenuModel::Observe(int type, |
| 134 const content::NotificationSource& source, | 135 const content::NotificationSource& source, |
| 135 const content::NotificationDetails& details) { | 136 const content::NotificationDetails& details) { |
| 136 DCHECK_EQ(chrome::NOTIFICATION_PROFILE_CACHED_INFO_CHANGED, type); | 137 DCHECK_EQ(chrome::NOTIFICATION_PROFILE_CACHED_INFO_CHANGED, type); |
| 137 RebuildMenu(); | 138 RebuildMenu(); |
| 138 observer_->OnAvatarMenuModelChanged(this); | 139 if (observer_) |
| 140 observer_->OnAvatarMenuModelChanged(this); |
| 139 } | 141 } |
| 140 | 142 |
| 141 // static | 143 // static |
| 142 bool AvatarMenuModel::ShouldShowAvatarMenu() { | 144 bool AvatarMenuModel::ShouldShowAvatarMenu() { |
| 143 return ProfileManager::IsMultipleProfilesEnabled() && | 145 return ProfileManager::IsMultipleProfilesEnabled() && |
| 144 g_browser_process->profile_manager()->GetNumberOfProfiles() > 1; | 146 g_browser_process->profile_manager()->GetNumberOfProfiles() > 1; |
| 145 } | 147 } |
| 146 | 148 |
| 147 void AvatarMenuModel::RebuildMenu() { | 149 void AvatarMenuModel::RebuildMenu() { |
| 148 ClearMenu(); | 150 ClearMenu(); |
| (...skipping 19 matching lines...) Expand all Loading... |
| 168 item->active = browser_->profile()->GetPath() == path; | 170 item->active = browser_->profile()->GetPath() == path; |
| 169 } | 171 } |
| 170 items_.push_back(item); | 172 items_.push_back(item); |
| 171 } | 173 } |
| 172 } | 174 } |
| 173 | 175 |
| 174 void AvatarMenuModel::ClearMenu() { | 176 void AvatarMenuModel::ClearMenu() { |
| 175 STLDeleteContainerPointers(items_.begin(), items_.end()); | 177 STLDeleteContainerPointers(items_.begin(), items_.end()); |
| 176 items_.clear(); | 178 items_.clear(); |
| 177 } | 179 } |
| OLD | NEW |