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 int ProfileInfoCache::GetStatisticOfProfileAtIndex(size_t index, |
| 504 const std::string& category) const { |
| 505 const base::DictionaryValue* statistics; |
| 506 if (!GetInfoForProfileAtIndex(index)->GetDictionaryWithoutPathExpansion( |
| 507 kStatisticsKey, &statistics)) |
| 508 return 0; |
| 509 |
| 510 int out_value; |
| 511 return statistics->GetIntegerWithoutPathExpansion(category, &out_value) ? |
| 512 out_value : 0; |
| 513 } |
| 514 |
| 515 std::map<std::string, int> ProfileInfoCache::GetAllStatisticsOfProfileAtIndex( |
| 516 size_t index) const { |
| 517 const base::DictionaryValue* statistics; |
| 518 std::map<std::string, int> out_value; |
| 519 |
| 520 if (!GetInfoForProfileAtIndex(index)->GetDictionaryWithoutPathExpansion( |
| 521 kStatisticsKey, &statistics)) |
| 522 return out_value; // No statistics are set, so return an empty map. |
| 523 |
| 524 for (base::DictionaryValue::Iterator it(*statistics); !it.IsAtEnd(); |
| 525 it.Advance()) { |
| 526 int value; |
| 527 if (it.value().GetAsInteger(&value)) { |
| 528 out_value[it.key()] = value; |
| 529 } |
| 530 } |
| 531 return out_value; |
| 532 } |
| 533 |
| 534 scoped_ptr<base::DictionaryValue> |
| 535 ProfileInfoCache::GetAllStatisticsOfProfileAtIndexAsDictionaryValue( |
| 536 size_t index) const { |
| 537 const base::DictionaryValue* statistics; |
| 538 |
| 539 if (!GetInfoForProfileAtIndex(index)->GetDictionaryWithoutPathExpansion( |
| 540 kStatisticsKey, &statistics)) |
| 541 // No statistics are set, so return an empty map. |
| 542 return make_scoped_ptr(new base::DictionaryValue()).Pass(); |
| 543 |
| 544 return statistics->CreateDeepCopy().Pass(); |
| 545 } |
| 546 |
502 void ProfileInfoCache::SetProfileActiveTimeAtIndex(size_t index) { | 547 void ProfileInfoCache::SetProfileActiveTimeAtIndex(size_t index) { |
503 if (base::Time::Now() - GetProfileActiveTimeAtIndex(index) < | 548 if (base::Time::Now() - GetProfileActiveTimeAtIndex(index) < |
504 base::TimeDelta::FromHours(1)) { | 549 base::TimeDelta::FromHours(1)) { |
505 return; | 550 return; |
506 } | 551 } |
507 | 552 |
508 scoped_ptr<base::DictionaryValue> info( | 553 scoped_ptr<base::DictionaryValue> info( |
509 GetInfoForProfileAtIndex(index)->DeepCopy()); | 554 GetInfoForProfileAtIndex(index)->DeepCopy()); |
510 info->SetDouble(kActiveTimeKey, base::Time::Now().ToDoubleT()); | 555 info->SetDouble(kActiveTimeKey, base::Time::Now().ToDoubleT()); |
511 // This takes ownership of |info|. | 556 // 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)) | 947 if (ChooseAvatarIconIndexForNewProfile(true, true, &icon_index)) |
903 return icon_index; | 948 return icon_index; |
904 // Settle for any random icon, even if it's not unique. | 949 // Settle for any random icon, even if it's not unique. |
905 if (ChooseAvatarIconIndexForNewProfile(true, false, &icon_index)) | 950 if (ChooseAvatarIconIndexForNewProfile(true, false, &icon_index)) |
906 return icon_index; | 951 return icon_index; |
907 | 952 |
908 NOTREACHED(); | 953 NOTREACHED(); |
909 return 0; | 954 return 0; |
910 } | 955 } |
911 | 956 |
| 957 void ProfileInfoCache::SetStatisticOfProfileAtIndex(size_t index, |
| 958 const std::string& category, int value) { |
| 959 scoped_ptr<base::DictionaryValue> info( |
| 960 GetInfoForProfileAtIndex(index)->DeepCopy()); |
| 961 base::DictionaryValue* statistics; |
| 962 if (!info->GetDictionaryWithoutPathExpansion(kStatisticsKey, &statistics)) { |
| 963 statistics = new base::DictionaryValue(); |
| 964 info->SetWithoutPathExpansion(kStatisticsKey, make_scoped_ptr(statistics)); |
| 965 } |
| 966 |
| 967 statistics->SetIntegerWithoutPathExpansion(category, value); |
| 968 // This takes ownership of |info|. |
| 969 SetInfoForProfileAtIndex(index, info.release()); |
| 970 } |
| 971 |
912 const base::FilePath& ProfileInfoCache::GetUserDataDir() const { | 972 const base::FilePath& ProfileInfoCache::GetUserDataDir() const { |
913 return user_data_dir_; | 973 return user_data_dir_; |
914 } | 974 } |
915 | 975 |
916 // static | 976 // static |
917 void ProfileInfoCache::RegisterPrefs(PrefRegistrySimple* registry) { | 977 void ProfileInfoCache::RegisterPrefs(PrefRegistrySimple* registry) { |
918 registry->RegisterDictionaryPref(prefs::kProfileInfoCache); | 978 registry->RegisterDictionaryPref(prefs::kProfileInfoCache); |
919 } | 979 } |
920 | 980 |
921 void ProfileInfoCache::DownloadHighResAvatarIfNeeded( | 981 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 | 1341 // The profile info is in the cache but its entry isn't created yet, insert |
1282 // it in the map. | 1342 // it in the map. |
1283 scoped_ptr<ProfileAttributesEntry> new_entry(new ProfileAttributesEntry()); | 1343 scoped_ptr<ProfileAttributesEntry> new_entry(new ProfileAttributesEntry()); |
1284 profile_attributes_entries_.add(path, new_entry.Pass()); | 1344 profile_attributes_entries_.add(path, new_entry.Pass()); |
1285 profile_attributes_entries_.get(path)->Initialize(this, path); | 1345 profile_attributes_entries_.get(path)->Initialize(this, path); |
1286 } | 1346 } |
1287 | 1347 |
1288 *entry = profile_attributes_entries_.get(path); | 1348 *entry = profile_attributes_entries_.get(path); |
1289 return true; | 1349 return true; |
1290 } | 1350 } |
OLD | NEW |