Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(608)

Side by Side Diff: chrome/browser/profiles/profile_info_cache.cc

Issue 8502033: Add Windows desktop shortcut for multiple profiles. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: fix install.cc Created 9 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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/profile_info_cache.h" 5 #include "chrome/browser/profiles/profile_info_cache.h"
6 6
7 #include "base/format_macros.h" 7 #include "base/format_macros.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "base/memory/scoped_ptr.h" 9 #include "base/memory/scoped_ptr.h"
10 #include "base/rand_util.h" 10 #include "base/rand_util.h"
11 #include "base/string_number_conversions.h" 11 #include "base/string_number_conversions.h"
12 #include "base/stringprintf.h" 12 #include "base/stringprintf.h"
13 #include "base/utf_string_conversions.h" 13 #include "base/utf_string_conversions.h"
14 #include "base/values.h" 14 #include "base/values.h"
15 #include "chrome/browser/browser_process.h"
15 #include "chrome/browser/prefs/pref_service.h" 16 #include "chrome/browser/prefs/pref_service.h"
16 #include "chrome/browser/prefs/scoped_user_pref_update.h" 17 #include "chrome/browser/prefs/scoped_user_pref_update.h"
17 #include "chrome/common/chrome_notification_types.h" 18 #include "chrome/common/chrome_notification_types.h"
18 #include "chrome/common/pref_names.h" 19 #include "chrome/common/pref_names.h"
19 #include "content/public/browser/notification_service.h" 20 #include "content/public/browser/notification_service.h"
20 #include "grit/generated_resources.h" 21 #include "grit/generated_resources.h"
21 #include "grit/theme_resources.h" 22 #include "grit/theme_resources.h"
22 #include "ui/base/l10n/l10n_util.h" 23 #include "ui/base/l10n/l10n_util.h"
23 #include "ui/base/resource/resource_bundle.h" 24 #include "ui/base/resource/resource_bundle.h"
24 25
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
79 IDS_DEFAULT_AVATAR_NAME_18, 80 IDS_DEFAULT_AVATAR_NAME_18,
80 IDS_DEFAULT_AVATAR_NAME_19, 81 IDS_DEFAULT_AVATAR_NAME_19,
81 IDS_DEFAULT_AVATAR_NAME_20, 82 IDS_DEFAULT_AVATAR_NAME_20,
82 IDS_DEFAULT_AVATAR_NAME_21, 83 IDS_DEFAULT_AVATAR_NAME_21,
83 IDS_DEFAULT_AVATAR_NAME_22, 84 IDS_DEFAULT_AVATAR_NAME_22,
84 IDS_DEFAULT_AVATAR_NAME_23, 85 IDS_DEFAULT_AVATAR_NAME_23,
85 IDS_DEFAULT_AVATAR_NAME_24, 86 IDS_DEFAULT_AVATAR_NAME_24,
86 IDS_DEFAULT_AVATAR_NAME_25 87 IDS_DEFAULT_AVATAR_NAME_25
87 }; 88 };
88 89
89 } // namespace 90 } // namespace
90 91
91 ProfileInfoCache::ProfileInfoCache(PrefService* prefs, 92 ProfileInfoCache::ProfileInfoCache(PrefService* prefs,
92 const FilePath& user_data_dir) 93 const FilePath& user_data_dir)
93 : prefs_(prefs), 94 : prefs_(prefs),
94 user_data_dir_(user_data_dir) { 95 user_data_dir_(user_data_dir) {
95 // Populate the cache 96 // Populate the cache
96 const DictionaryValue* cache = 97 const DictionaryValue* cache =
97 prefs_->GetDictionary(prefs::kProfileInfoCache); 98 prefs_->GetDictionary(prefs::kProfileInfoCache);
98 for (DictionaryValue::key_iterator it = cache->begin_keys(); 99 for (DictionaryValue::key_iterator it = cache->begin_keys();
99 it != cache->end_keys(); ++it) { 100 it != cache->end_keys(); ++it) {
(...skipping 20 matching lines...) Expand all
120 scoped_ptr<DictionaryValue> info(new DictionaryValue); 121 scoped_ptr<DictionaryValue> info(new DictionaryValue);
121 info->SetString(kNameKey, name); 122 info->SetString(kNameKey, name);
122 info->SetString(kUserNameKey, username); 123 info->SetString(kUserNameKey, username);
123 info->SetString(kAvatarIconKey, GetDefaultAvatarIconUrl(icon_index)); 124 info->SetString(kAvatarIconKey, GetDefaultAvatarIconUrl(icon_index));
124 // Default value for whether background apps are running is false. 125 // Default value for whether background apps are running is false.
125 info->SetBoolean(kBackgroundAppsKey, false); 126 info->SetBoolean(kBackgroundAppsKey, false);
126 cache->Set(key, info.release()); 127 cache->Set(key, info.release());
127 128
128 sorted_keys_.insert(FindPositionForProfile(key, name), key); 129 sorted_keys_.insert(FindPositionForProfile(key, name), key);
129 130
131 FOR_EACH_OBSERVER(ProfileInfoCacheObserver,
132 observer_list_,
133 OnProfileAdded(name, UTF8ToUTF16(key)));
134
130 content::NotificationService::current()->Notify( 135 content::NotificationService::current()->Notify(
131 chrome::NOTIFICATION_PROFILE_CACHED_INFO_CHANGED, 136 chrome::NOTIFICATION_PROFILE_CACHED_INFO_CHANGED,
132 content::NotificationService::AllSources(), 137 content::NotificationService::AllSources(),
133 content::NotificationService::NoDetails()); 138 content::NotificationService::NoDetails());
134 } 139 }
135 140
141 void ProfileInfoCache::AddObserver(ProfileInfoCacheObserver* obs) {
142 observer_list_.AddObserver(obs);
143 }
144
145 void ProfileInfoCache::RemoveObserver(ProfileInfoCacheObserver* obs) {
146 observer_list_.RemoveObserver(obs);
147 }
148
136 void ProfileInfoCache::DeleteProfileFromCache(const FilePath& profile_path) { 149 void ProfileInfoCache::DeleteProfileFromCache(const FilePath& profile_path) {
137 DictionaryPrefUpdate update(prefs_, prefs::kProfileInfoCache); 150 DictionaryPrefUpdate update(prefs_, prefs::kProfileInfoCache);
138 DictionaryValue* cache = update.Get(); 151 DictionaryValue* cache = update.Get();
152 DCHECK(cache);
153 std::string key = CacheKeyFromProfilePath(profile_path);
154 DictionaryValue* info = NULL;
155 cache->GetDictionary(key, &info);
156 DCHECK(info);
157 string16 name;
158 info->GetString(kNameKey, &name);
139 159
140 std::string key = CacheKeyFromProfilePath(profile_path); 160 FOR_EACH_OBSERVER(ProfileInfoCacheObserver,
161 observer_list_,
162 OnProfileRemoved(name));
163
141 cache->Remove(key, NULL); 164 cache->Remove(key, NULL);
142 sorted_keys_.erase(std::find(sorted_keys_.begin(), sorted_keys_.end(), key)); 165 sorted_keys_.erase(std::find(sorted_keys_.begin(), sorted_keys_.end(), key));
143 166
144 content::NotificationService::current()->Notify( 167 content::NotificationService::current()->Notify(
145 chrome::NOTIFICATION_PROFILE_CACHED_INFO_CHANGED, 168 chrome::NOTIFICATION_PROFILE_CACHED_INFO_CHANGED,
146 content::NotificationService::AllSources(), 169 content::NotificationService::AllSources(),
147 content::NotificationService::NoDetails()); 170 content::NotificationService::NoDetails());
148 } 171 }
149 172
150 size_t ProfileInfoCache::GetNumberOfProfiles() const { 173 size_t ProfileInfoCache::GetNumberOfProfiles() const {
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
208 if (IsDefaultAvatarIconUrl(icon_url, &icon_index)) 231 if (IsDefaultAvatarIconUrl(icon_url, &icon_index))
209 return icon_index; 232 return icon_index;
210 233
211 DLOG(WARNING) << "Unknown avatar icon: " << icon_url; 234 DLOG(WARNING) << "Unknown avatar icon: " << icon_url;
212 return GetDefaultAvatarIconResourceIDAtIndex(0); 235 return GetDefaultAvatarIconResourceIDAtIndex(0);
213 } 236 }
214 237
215 void ProfileInfoCache::SetNameOfProfileAtIndex(size_t index, 238 void ProfileInfoCache::SetNameOfProfileAtIndex(size_t index,
216 const string16& name) { 239 const string16& name) {
217 scoped_ptr<DictionaryValue> info(GetInfoForProfileAtIndex(index)->DeepCopy()); 240 scoped_ptr<DictionaryValue> info(GetInfoForProfileAtIndex(index)->DeepCopy());
241 string16 old_name;
242 info->GetString(kNameKey, &old_name);
218 info->SetString(kNameKey, name); 243 info->SetString(kNameKey, name);
219 // This takes ownership of |info|. 244 // This takes ownership of |info|.
220 SetInfoForProfileAtIndex(index, info.release()); 245 SetInfoForProfileAtIndex(index, info.release());
221 246
222 // Remove and reinsert key in |sorted_keys_| to alphasort. 247 // Remove and reinsert key in |sorted_keys_| to alphasort.
223 std::string key = CacheKeyFromProfilePath(GetPathOfProfileAtIndex(index)); 248 std::string key = CacheKeyFromProfilePath(GetPathOfProfileAtIndex(index));
224 std::vector<std::string>::iterator key_it = 249 std::vector<std::string>::iterator key_it =
225 std::find(sorted_keys_.begin(), sorted_keys_.end(), key); 250 std::find(sorted_keys_.begin(), sorted_keys_.end(), key);
226 DCHECK(key_it != sorted_keys_.end()); 251 DCHECK(key_it != sorted_keys_.end());
227 sorted_keys_.erase(key_it); 252 sorted_keys_.erase(key_it);
228 sorted_keys_.insert(FindPositionForProfile(key, name), key); 253 sorted_keys_.insert(FindPositionForProfile(key, name), key);
229 254
255 FOR_EACH_OBSERVER(ProfileInfoCacheObserver,
256 observer_list_,
257 OnProfileNameChanged(old_name, name));
258
230 content::NotificationService::current()->Notify( 259 content::NotificationService::current()->Notify(
231 chrome::NOTIFICATION_PROFILE_CACHED_INFO_CHANGED, 260 chrome::NOTIFICATION_PROFILE_CACHED_INFO_CHANGED,
232 content::NotificationService::AllSources(), 261 content::NotificationService::AllSources(),
233 content::NotificationService::NoDetails()); 262 content::NotificationService::NoDetails());
234 } 263 }
235 264
236 void ProfileInfoCache::SetUserNameOfProfileAtIndex(size_t index, 265 void ProfileInfoCache::SetUserNameOfProfileAtIndex(size_t index,
237 const string16& user_name) { 266 const string16& user_name) {
238 string16 old_user_name; 267 string16 old_user_name;
239 const base::DictionaryValue* old_info = GetInfoForProfileAtIndex(index); 268 const base::DictionaryValue* old_info = GetInfoForProfileAtIndex(index);
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after
378 return false; 407 return false;
379 } 408 }
380 409
381 const DictionaryValue* ProfileInfoCache::GetInfoForProfileAtIndex( 410 const DictionaryValue* ProfileInfoCache::GetInfoForProfileAtIndex(
382 size_t index) const { 411 size_t index) const {
383 DCHECK_LT(index, GetNumberOfProfiles()); 412 DCHECK_LT(index, GetNumberOfProfiles());
384 const DictionaryValue* cache = 413 const DictionaryValue* cache =
385 prefs_->GetDictionary(prefs::kProfileInfoCache); 414 prefs_->GetDictionary(prefs::kProfileInfoCache);
386 DictionaryValue* info = NULL; 415 DictionaryValue* info = NULL;
387 cache->GetDictionary(sorted_keys_[index], &info); 416 cache->GetDictionary(sorted_keys_[index], &info);
417 DCHECK(info);
388 return info; 418 return info;
389 } 419 }
390 420
391 void ProfileInfoCache::SetInfoForProfileAtIndex(size_t index, 421 void ProfileInfoCache::SetInfoForProfileAtIndex(size_t index,
392 DictionaryValue* info) { 422 DictionaryValue* info) {
393 DictionaryPrefUpdate update(prefs_, prefs::kProfileInfoCache); 423 DictionaryPrefUpdate update(prefs_, prefs::kProfileInfoCache);
394 DictionaryValue* cache = update.Get(); 424 DictionaryValue* cache = update.Get();
395 cache->Set(sorted_keys_[index], info); 425 cache->Set(sorted_keys_[index], info);
396 426
397 content::NotificationService::current()->Notify( 427 content::NotificationService::current()->Notify(
(...skipping 18 matching lines...) Expand all
416 return sorted_keys_.begin() + i; 446 return sorted_keys_.begin() + i;
417 if (name_compare == 0) { 447 if (name_compare == 0) {
418 int key_compare = search_key.compare(sorted_keys_[i]); 448 int key_compare = search_key.compare(sorted_keys_[i]);
419 if (key_compare < 0) 449 if (key_compare < 0)
420 return sorted_keys_.begin() + i; 450 return sorted_keys_.begin() + i;
421 } 451 }
422 } 452 }
423 return sorted_keys_.end(); 453 return sorted_keys_.end();
424 } 454 }
425 455
456 // static
457 std::vector<string16> ProfileInfoCache::GetProfileNames() {
458 std::vector<string16> names;
459 PrefService* local_state = g_browser_process->local_state();
460 const DictionaryValue* cache = local_state->GetDictionary(
461 prefs::kProfileInfoCache);
462 string16 name;
463 for (base::DictionaryValue::key_iterator it = cache->begin_keys();
464 it != cache->end_keys();
465 ++it) {
grt (UTC plus 2) 2011/11/18 20:02:54 indent
Miranda Callahan 2011/11/18 22:41:33 Done.
466 base::DictionaryValue* info = NULL;
467 cache->GetDictionary(*it, &info);
468 info->GetString(kNameKey, &name);
469 names.push_back(name);
470 }
471 return names;
472 }
473
474 // static
426 void ProfileInfoCache::RegisterPrefs(PrefService* prefs) { 475 void ProfileInfoCache::RegisterPrefs(PrefService* prefs) {
427 prefs->RegisterDictionaryPref(prefs::kProfileInfoCache); 476 prefs->RegisterDictionaryPref(prefs::kProfileInfoCache);
428 } 477 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698