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 kStatisticsKey[] = "statistics"; |
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 bool ProfileInfoCache::GetStatisticOfProfileAtIndex(size_t index, |
| 504 const std::string& category, int* out_value) const { |
| 505 const base::DictionaryValue* statistics; |
| 506 if (!GetInfoForProfileAtIndex(index)->GetDictionaryWithoutPathExpansion( |
| 507 kStatisticsKey, &statistics)) |
| 508 return false; |
| 509 |
| 510 return statistics->GetIntegerWithoutPathExpansion(category, out_value); |
| 511 } |
| 512 |
| 513 std::map<std::string, int> ProfileInfoCache::GetAllStatisticsOfProfileAtIndex( |
| 514 size_t index) const { |
| 515 const base::DictionaryValue* statistics; |
| 516 std::map<std::string, int> out_value; |
| 517 |
| 518 if (!GetInfoForProfileAtIndex(index)->GetDictionaryWithoutPathExpansion( |
| 519 kStatisticsKey, &statistics)) |
| 520 return out_value; // No statistics are set, so return an empty map. |
| 521 |
| 522 for (base::DictionaryValue::Iterator it(*statistics); !it.IsAtEnd(); |
| 523 it.Advance()) { |
| 524 int value; |
| 525 if (it.value().GetAsInteger(&value)) { |
| 526 out_value[it.key()] = value; |
| 527 } |
| 528 } |
| 529 return out_value; |
| 530 } |
| 531 |
502 void ProfileInfoCache::SetProfileActiveTimeAtIndex(size_t index) { | 532 void ProfileInfoCache::SetProfileActiveTimeAtIndex(size_t index) { |
503 if (base::Time::Now() - GetProfileActiveTimeAtIndex(index) < | 533 if (base::Time::Now() - GetProfileActiveTimeAtIndex(index) < |
504 base::TimeDelta::FromHours(1)) { | 534 base::TimeDelta::FromHours(1)) { |
505 return; | 535 return; |
506 } | 536 } |
507 | 537 |
508 scoped_ptr<base::DictionaryValue> info( | 538 scoped_ptr<base::DictionaryValue> info( |
509 GetInfoForProfileAtIndex(index)->DeepCopy()); | 539 GetInfoForProfileAtIndex(index)->DeepCopy()); |
510 info->SetDouble(kActiveTimeKey, base::Time::Now().ToDoubleT()); | 540 info->SetDouble(kActiveTimeKey, base::Time::Now().ToDoubleT()); |
511 // This takes ownership of |info|. | 541 // 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)) | 932 if (ChooseAvatarIconIndexForNewProfile(true, true, &icon_index)) |
903 return icon_index; | 933 return icon_index; |
904 // Settle for any random icon, even if it's not unique. | 934 // Settle for any random icon, even if it's not unique. |
905 if (ChooseAvatarIconIndexForNewProfile(true, false, &icon_index)) | 935 if (ChooseAvatarIconIndexForNewProfile(true, false, &icon_index)) |
906 return icon_index; | 936 return icon_index; |
907 | 937 |
908 NOTREACHED(); | 938 NOTREACHED(); |
909 return 0; | 939 return 0; |
910 } | 940 } |
911 | 941 |
| 942 void ProfileInfoCache::SetStatisticOfProfileAtIndex(size_t index, |
| 943 const std::string& category, int value) { |
| 944 scoped_ptr<base::DictionaryValue> info( |
| 945 GetInfoForProfileAtIndex(index)->DeepCopy()); |
| 946 base::DictionaryValue* statistics; |
| 947 if (!info->GetDictionaryWithoutPathExpansion(kStatisticsKey, &statistics)) { |
| 948 statistics = new base::DictionaryValue(); |
| 949 info->SetWithoutPathExpansion(kStatisticsKey, make_scoped_ptr(statistics)); |
| 950 } |
| 951 |
| 952 statistics->SetIntegerWithoutPathExpansion(category, value); |
| 953 // This takes ownership of |info|. |
| 954 SetInfoForProfileAtIndex(index, info.release()); |
| 955 } |
| 956 |
912 const base::FilePath& ProfileInfoCache::GetUserDataDir() const { | 957 const base::FilePath& ProfileInfoCache::GetUserDataDir() const { |
913 return user_data_dir_; | 958 return user_data_dir_; |
914 } | 959 } |
915 | 960 |
916 // static | 961 // static |
917 void ProfileInfoCache::RegisterPrefs(PrefRegistrySimple* registry) { | 962 void ProfileInfoCache::RegisterPrefs(PrefRegistrySimple* registry) { |
918 registry->RegisterDictionaryPref(prefs::kProfileInfoCache); | 963 registry->RegisterDictionaryPref(prefs::kProfileInfoCache); |
919 } | 964 } |
920 | 965 |
921 void ProfileInfoCache::DownloadHighResAvatarIfNeeded( | 966 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 | 1326 // The profile info is in the cache but its entry isn't created yet, insert |
1282 // it in the map. | 1327 // it in the map. |
1283 scoped_ptr<ProfileAttributesEntry> new_entry(new ProfileAttributesEntry()); | 1328 scoped_ptr<ProfileAttributesEntry> new_entry(new ProfileAttributesEntry()); |
1284 profile_attributes_entries_.add(path, new_entry.Pass()); | 1329 profile_attributes_entries_.add(path, new_entry.Pass()); |
1285 profile_attributes_entries_.get(path)->Initialize(this, path); | 1330 profile_attributes_entries_.get(path)->Initialize(this, path); |
1286 } | 1331 } |
1287 | 1332 |
1288 *entry = profile_attributes_entries_.get(path); | 1333 *entry = profile_attributes_entries_.get(path); |
1289 return true; | 1334 return true; |
1290 } | 1335 } |
OLD | NEW |