Chromium Code Reviews| Index: chrome/browser/profiles/profile_info_cache.cc |
| =================================================================== |
| --- chrome/browser/profiles/profile_info_cache.cc (revision 110719) |
| +++ chrome/browser/profiles/profile_info_cache.cc (working copy) |
| @@ -12,6 +12,7 @@ |
| #include "base/stringprintf.h" |
| #include "base/utf_string_conversions.h" |
| #include "base/values.h" |
| +#include "chrome/browser/browser_process.h" |
| #include "chrome/browser/prefs/pref_service.h" |
| #include "chrome/browser/prefs/scoped_user_pref_update.h" |
| #include "chrome/common/chrome_notification_types.h" |
| @@ -86,7 +87,7 @@ |
| IDS_DEFAULT_AVATAR_NAME_25 |
| }; |
| -} // namespace |
| +} // namespace |
| ProfileInfoCache::ProfileInfoCache(PrefService* prefs, |
| const FilePath& user_data_dir) |
| @@ -127,17 +128,39 @@ |
| sorted_keys_.insert(FindPositionForProfile(key, name), key); |
| + FOR_EACH_OBSERVER(ProfileInfoCacheObserver, |
| + observer_list_, |
| + OnProfileAdded(name, UTF8ToUTF16(key))); |
| + |
| content::NotificationService::current()->Notify( |
| chrome::NOTIFICATION_PROFILE_CACHED_INFO_CHANGED, |
| content::NotificationService::AllSources(), |
| content::NotificationService::NoDetails()); |
| } |
| +void ProfileInfoCache::AddObserver(ProfileInfoCacheObserver* obs) { |
| + observer_list_.AddObserver(obs); |
| +} |
| + |
| +void ProfileInfoCache::RemoveObserver(ProfileInfoCacheObserver* obs) { |
| + observer_list_.RemoveObserver(obs); |
| +} |
| + |
| void ProfileInfoCache::DeleteProfileFromCache(const FilePath& profile_path) { |
| DictionaryPrefUpdate update(prefs_, prefs::kProfileInfoCache); |
| DictionaryValue* cache = update.Get(); |
| + DCHECK(cache); |
| + std::string key = CacheKeyFromProfilePath(profile_path); |
| + DictionaryValue* info = NULL; |
| + cache->GetDictionary(key, &info); |
| + DCHECK(info); |
| + string16 name; |
| + info->GetString(kNameKey, &name); |
| - std::string key = CacheKeyFromProfilePath(profile_path); |
| + FOR_EACH_OBSERVER(ProfileInfoCacheObserver, |
| + observer_list_, |
| + OnProfileRemoved(name)); |
| + |
| cache->Remove(key, NULL); |
| sorted_keys_.erase(std::find(sorted_keys_.begin(), sorted_keys_.end(), key)); |
| @@ -215,6 +238,8 @@ |
| void ProfileInfoCache::SetNameOfProfileAtIndex(size_t index, |
| const string16& name) { |
| scoped_ptr<DictionaryValue> info(GetInfoForProfileAtIndex(index)->DeepCopy()); |
| + string16 old_name; |
| + info->GetString(kNameKey, &old_name); |
| info->SetString(kNameKey, name); |
| // This takes ownership of |info|. |
| SetInfoForProfileAtIndex(index, info.release()); |
| @@ -227,6 +252,10 @@ |
| sorted_keys_.erase(key_it); |
| sorted_keys_.insert(FindPositionForProfile(key, name), key); |
| + FOR_EACH_OBSERVER(ProfileInfoCacheObserver, |
| + observer_list_, |
| + OnProfileNameChanged(old_name, name)); |
| + |
| content::NotificationService::current()->Notify( |
| chrome::NOTIFICATION_PROFILE_CACHED_INFO_CHANGED, |
| content::NotificationService::AllSources(), |
| @@ -385,6 +414,7 @@ |
| prefs_->GetDictionary(prefs::kProfileInfoCache); |
| DictionaryValue* info = NULL; |
| cache->GetDictionary(sorted_keys_[index], &info); |
| + DCHECK(info); |
| return info; |
| } |
| @@ -423,6 +453,25 @@ |
| return sorted_keys_.end(); |
| } |
| +// static |
| +std::vector<string16> ProfileInfoCache::GetProfileNames() { |
| + std::vector<string16> names; |
| + PrefService* local_state = g_browser_process->local_state(); |
| + const DictionaryValue* cache = local_state->GetDictionary( |
| + prefs::kProfileInfoCache); |
| + string16 name; |
| + for (base::DictionaryValue::key_iterator it = cache->begin_keys(); |
| + it != cache->end_keys(); |
| + ++it) { |
|
grt (UTC plus 2)
2011/11/18 20:02:54
indent
Miranda Callahan
2011/11/18 22:41:33
Done.
|
| + base::DictionaryValue* info = NULL; |
| + cache->GetDictionary(*it, &info); |
| + info->GetString(kNameKey, &name); |
| + names.push_back(name); |
| + } |
| + return names; |
| +} |
| + |
| +// static |
| void ProfileInfoCache::RegisterPrefs(PrefService* prefs) { |
| prefs->RegisterDictionaryPref(prefs::kProfileInfoCache); |
| } |