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/profile_info_cache.h" | 5 #include "chrome/browser/profiles/profile_info_cache.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/files/file_util.h" | 8 #include "base/files/file_util.h" |
9 #include "base/i18n/case_conversion.h" | 9 #include "base/i18n/case_conversion.h" |
10 #include "base/logging.h" | 10 #include "base/logging.h" |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
53 const char kPasswordTokenKey[] = "gaia_password_token"; | 53 const char kPasswordTokenKey[] = "gaia_password_token"; |
54 const char kUseGAIAPictureKey[] = "use_gaia_picture"; | 54 const char kUseGAIAPictureKey[] = "use_gaia_picture"; |
55 const char kBackgroundAppsKey[] = "background_apps"; | 55 const char kBackgroundAppsKey[] = "background_apps"; |
56 const char kGAIAPictureFileNameKey[] = "gaia_picture_file_name"; | 56 const char kGAIAPictureFileNameKey[] = "gaia_picture_file_name"; |
57 const char kIsOmittedFromProfileListKey[] = "is_omitted_from_profile_list"; | 57 const char kIsOmittedFromProfileListKey[] = "is_omitted_from_profile_list"; |
58 const char kSigninRequiredKey[] = "signin_required"; | 58 const char kSigninRequiredKey[] = "signin_required"; |
59 const char kSupervisedUserId[] = "managed_user_id"; | 59 const char kSupervisedUserId[] = "managed_user_id"; |
60 const char kProfileIsEphemeral[] = "is_ephemeral"; | 60 const char kProfileIsEphemeral[] = "is_ephemeral"; |
61 const char kActiveTimeKey[] = "active_time"; | 61 const char kActiveTimeKey[] = "active_time"; |
62 const char kIsAuthErrorKey[] = "is_auth_error"; | 62 const char kIsAuthErrorKey[] = "is_auth_error"; |
63 const char kStatistics[] = "statistics"; | |
anthonyvd
2015/10/23 15:53:13
nit: kStatisticsKey
lwchkg
2015/10/24 02:02:32
Acknowledged.
| |
63 | 64 |
64 // First eight are generic icons, which use IDS_NUMBERED_PROFILE_NAME. | 65 // First eight are generic icons, which use IDS_NUMBERED_PROFILE_NAME. |
65 const int kDefaultNames[] = { | 66 const int kDefaultNames[] = { |
66 IDS_DEFAULT_AVATAR_NAME_8, | 67 IDS_DEFAULT_AVATAR_NAME_8, |
67 IDS_DEFAULT_AVATAR_NAME_9, | 68 IDS_DEFAULT_AVATAR_NAME_9, |
68 IDS_DEFAULT_AVATAR_NAME_10, | 69 IDS_DEFAULT_AVATAR_NAME_10, |
69 IDS_DEFAULT_AVATAR_NAME_11, | 70 IDS_DEFAULT_AVATAR_NAME_11, |
70 IDS_DEFAULT_AVATAR_NAME_12, | 71 IDS_DEFAULT_AVATAR_NAME_12, |
71 IDS_DEFAULT_AVATAR_NAME_13, | 72 IDS_DEFAULT_AVATAR_NAME_13, |
72 IDS_DEFAULT_AVATAR_NAME_14, | 73 IDS_DEFAULT_AVATAR_NAME_14, |
(...skipping 419 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
492 const { | 493 const { |
493 std::string icon_url; | 494 std::string icon_url; |
494 GetInfoForProfileAtIndex(index)->GetString(kAvatarIconKey, &icon_url); | 495 GetInfoForProfileAtIndex(index)->GetString(kAvatarIconKey, &icon_url); |
495 size_t icon_index = 0; | 496 size_t icon_index = 0; |
496 if (!profiles::IsDefaultAvatarIconUrl(icon_url, &icon_index)) | 497 if (!profiles::IsDefaultAvatarIconUrl(icon_url, &icon_index)) |
497 DLOG(WARNING) << "Unknown avatar icon: " << icon_url; | 498 DLOG(WARNING) << "Unknown avatar icon: " << icon_url; |
498 | 499 |
499 return icon_index; | 500 return icon_index; |
500 } | 501 } |
501 | 502 |
503 | |
504 bool ProfileInfoCache::GetStatisticOfProfileAtIndex(size_t index, | |
505 const std::string& category, int* out_value) const { | |
506 const base::DictionaryValue* statistics; | |
507 if (!GetInfoForProfileAtIndex(index)->GetDictionaryWithoutPathExpansion( | |
508 kStatistics, &statistics)) | |
509 return false; | |
510 | |
511 return statistics->GetIntegerWithoutPathExpansion(category, out_value); | |
512 } | |
513 | |
514 std::map<std::string, int> ProfileInfoCache::GetAllStatisticOfProfileAtIndex( | |
515 size_t index) const { | |
516 const base::DictionaryValue* statistics; | |
517 std::map<std::string, int> out_value; | |
518 | |
519 if (!GetInfoForProfileAtIndex(index)->GetDictionaryWithoutPathExpansion( | |
520 kStatistics, &statistics)) | |
521 return out_value; // No statistics are set, so return an empty map. | |
522 | |
523 for (base::DictionaryValue::Iterator it(*statistics); !it.IsAtEnd(); | |
524 it.Advance()) { | |
525 int value; | |
526 if (it.value().GetAsInteger(&value)) { | |
527 out_value.insert(std::make_pair(it.key(), value)); | |
528 } | |
529 } | |
530 return out_value; | |
531 } | |
532 | |
533 scoped_ptr<base::DictionaryValue> | |
534 ProfileInfoCache::GetAllStatisticsOfProfileAtIndexAsDictionaryValue( | |
535 size_t index) const { | |
536 const base::DictionaryValue* statistics; | |
537 | |
538 if (!GetInfoForProfileAtIndex(index)->GetDictionaryWithoutPathExpansion( | |
539 kStatistics, &statistics)) | |
540 // No statistics are set, so return an empty map. | |
541 return make_scoped_ptr(new base::DictionaryValue()).Pass(); | |
542 | |
543 return statistics->CreateDeepCopy().Pass(); | |
544 } | |
545 | |
502 void ProfileInfoCache::SetProfileActiveTimeAtIndex(size_t index) { | 546 void ProfileInfoCache::SetProfileActiveTimeAtIndex(size_t index) { |
503 if (base::Time::Now() - GetProfileActiveTimeAtIndex(index) < | 547 if (base::Time::Now() - GetProfileActiveTimeAtIndex(index) < |
504 base::TimeDelta::FromHours(1)) { | 548 base::TimeDelta::FromHours(1)) { |
505 return; | 549 return; |
506 } | 550 } |
507 | 551 |
508 scoped_ptr<base::DictionaryValue> info( | 552 scoped_ptr<base::DictionaryValue> info( |
509 GetInfoForProfileAtIndex(index)->DeepCopy()); | 553 GetInfoForProfileAtIndex(index)->DeepCopy()); |
510 info->SetDouble(kActiveTimeKey, base::Time::Now().ToDoubleT()); | 554 info->SetDouble(kActiveTimeKey, base::Time::Now().ToDoubleT()); |
511 // This takes ownership of |info|. | 555 // This takes ownership of |info|. |
(...skipping 390 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
902 if (ChooseAvatarIconIndexForNewProfile(true, true, &icon_index)) | 946 if (ChooseAvatarIconIndexForNewProfile(true, true, &icon_index)) |
903 return icon_index; | 947 return icon_index; |
904 // Settle for any random icon, even if it's not unique. | 948 // Settle for any random icon, even if it's not unique. |
905 if (ChooseAvatarIconIndexForNewProfile(true, false, &icon_index)) | 949 if (ChooseAvatarIconIndexForNewProfile(true, false, &icon_index)) |
906 return icon_index; | 950 return icon_index; |
907 | 951 |
908 NOTREACHED(); | 952 NOTREACHED(); |
909 return 0; | 953 return 0; |
910 } | 954 } |
911 | 955 |
956 void ProfileInfoCache::SetStatisticOfProfileAtIndex(size_t index, | |
957 const std::string& category, int value) { | |
958 scoped_ptr<base::DictionaryValue> info( | |
959 GetInfoForProfileAtIndex(index)->DeepCopy()); | |
960 | |
961 base::DictionaryValue* statistics; | |
962 if (info->GetDictionaryWithoutPathExpansion(kStatistics, &statistics)) { | |
963 statistics = new base::DictionaryValue(); | |
964 info->SetWithoutPathExpansion(kStatistics, make_scoped_ptr(statistics)); | |
965 } | |
966 | |
967 statistics->SetIntegerWithoutPathExpansion(category, value); | |
968 // This takes ownership of |info|. | |
969 SetInfoForProfileAtIndex(index, info.release()); | |
970 | |
971 base::FilePath profile_path = GetPathOfProfileAtIndex(index); | |
972 FOR_EACH_OBSERVER(ProfileInfoCacheObserver, | |
973 observer_list_, | |
974 OnProfileSigninRequiredChanged(profile_path)); | |
975 } | |
976 | |
912 const base::FilePath& ProfileInfoCache::GetUserDataDir() const { | 977 const base::FilePath& ProfileInfoCache::GetUserDataDir() const { |
913 return user_data_dir_; | 978 return user_data_dir_; |
914 } | 979 } |
915 | 980 |
916 // static | 981 // static |
917 void ProfileInfoCache::RegisterPrefs(PrefRegistrySimple* registry) { | 982 void ProfileInfoCache::RegisterPrefs(PrefRegistrySimple* registry) { |
918 registry->RegisterDictionaryPref(prefs::kProfileInfoCache); | 983 registry->RegisterDictionaryPref(prefs::kProfileInfoCache); |
919 } | 984 } |
920 | 985 |
921 void ProfileInfoCache::DownloadHighResAvatarIfNeeded( | 986 void ProfileInfoCache::DownloadHighResAvatarIfNeeded( |
(...skipping 359 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1281 // The profile info is in the cache but its entry isn't created yet, insert | 1346 // The profile info is in the cache but its entry isn't created yet, insert |
1282 // it in the map. | 1347 // it in the map. |
1283 scoped_ptr<ProfileAttributesEntry> new_entry(new ProfileAttributesEntry()); | 1348 scoped_ptr<ProfileAttributesEntry> new_entry(new ProfileAttributesEntry()); |
1284 profile_attributes_entries_.add(path, new_entry.Pass()); | 1349 profile_attributes_entries_.add(path, new_entry.Pass()); |
1285 profile_attributes_entries_.get(path)->Initialize(this, path); | 1350 profile_attributes_entries_.get(path)->Initialize(this, path); |
1286 } | 1351 } |
1287 | 1352 |
1288 *entry = profile_attributes_entries_.get(path); | 1353 *entry = profile_attributes_entries_.get(path); |
1289 return true; | 1354 return true; |
1290 } | 1355 } |
OLD | NEW |