Index: chrome/browser/profiles/profile_info_cache.cc |
diff --git a/chrome/browser/profiles/profile_info_cache.cc b/chrome/browser/profiles/profile_info_cache.cc |
index f7e8b2b9dff8991e2583c48f556cf6a675e1d6ea..ff5e47056817865270936ed55d02fc90a3304b97 100644 |
--- a/chrome/browser/profiles/profile_info_cache.cc |
+++ b/chrome/browser/profiles/profile_info_cache.cc |
@@ -60,6 +60,7 @@ const char kSupervisedUserId[] = "managed_user_id"; |
const char kProfileIsEphemeral[] = "is_ephemeral"; |
const char kActiveTimeKey[] = "active_time"; |
const char kIsAuthErrorKey[] = "is_auth_error"; |
+const char kStatistics[] = "statistics"; |
anthonyvd
2015/10/23 15:53:13
nit: kStatisticsKey
lwchkg
2015/10/24 02:02:32
Acknowledged.
|
// First eight are generic icons, which use IDS_NUMBERED_PROFILE_NAME. |
const int kDefaultNames[] = { |
@@ -499,6 +500,49 @@ size_t ProfileInfoCache::GetAvatarIconIndexOfProfileAtIndex(size_t index) |
return icon_index; |
} |
+ |
+bool ProfileInfoCache::GetStatisticOfProfileAtIndex(size_t index, |
+ const std::string& category, int* out_value) const { |
+ const base::DictionaryValue* statistics; |
+ if (!GetInfoForProfileAtIndex(index)->GetDictionaryWithoutPathExpansion( |
+ kStatistics, &statistics)) |
+ return false; |
+ |
+ return statistics->GetIntegerWithoutPathExpansion(category, out_value); |
+} |
+ |
+std::map<std::string, int> ProfileInfoCache::GetAllStatisticOfProfileAtIndex( |
+ size_t index) const { |
+ const base::DictionaryValue* statistics; |
+ std::map<std::string, int> out_value; |
+ |
+ if (!GetInfoForProfileAtIndex(index)->GetDictionaryWithoutPathExpansion( |
+ kStatistics, &statistics)) |
+ return out_value; // No statistics are set, so return an empty map. |
+ |
+ for (base::DictionaryValue::Iterator it(*statistics); !it.IsAtEnd(); |
+ it.Advance()) { |
+ int value; |
+ if (it.value().GetAsInteger(&value)) { |
+ out_value.insert(std::make_pair(it.key(), value)); |
+ } |
+ } |
+ return out_value; |
+} |
+ |
+scoped_ptr<base::DictionaryValue> |
+ ProfileInfoCache::GetAllStatisticsOfProfileAtIndexAsDictionaryValue( |
+ size_t index) const { |
+ const base::DictionaryValue* statistics; |
+ |
+ if (!GetInfoForProfileAtIndex(index)->GetDictionaryWithoutPathExpansion( |
+ kStatistics, &statistics)) |
+ // No statistics are set, so return an empty map. |
+ return make_scoped_ptr(new base::DictionaryValue()).Pass(); |
+ |
+ return statistics->CreateDeepCopy().Pass(); |
+} |
+ |
void ProfileInfoCache::SetProfileActiveTimeAtIndex(size_t index) { |
if (base::Time::Now() - GetProfileActiveTimeAtIndex(index) < |
base::TimeDelta::FromHours(1)) { |
@@ -909,6 +953,27 @@ size_t ProfileInfoCache::ChooseAvatarIconIndexForNewProfile() const { |
return 0; |
} |
+void ProfileInfoCache::SetStatisticOfProfileAtIndex(size_t index, |
+ const std::string& category, int value) { |
+ scoped_ptr<base::DictionaryValue> info( |
+ GetInfoForProfileAtIndex(index)->DeepCopy()); |
+ |
+ base::DictionaryValue* statistics; |
+ if (info->GetDictionaryWithoutPathExpansion(kStatistics, &statistics)) { |
+ statistics = new base::DictionaryValue(); |
+ info->SetWithoutPathExpansion(kStatistics, make_scoped_ptr(statistics)); |
+ } |
+ |
+ statistics->SetIntegerWithoutPathExpansion(category, value); |
+ // This takes ownership of |info|. |
+ SetInfoForProfileAtIndex(index, info.release()); |
+ |
+ base::FilePath profile_path = GetPathOfProfileAtIndex(index); |
+ FOR_EACH_OBSERVER(ProfileInfoCacheObserver, |
+ observer_list_, |
+ OnProfileSigninRequiredChanged(profile_path)); |
+} |
+ |
const base::FilePath& ProfileInfoCache::GetUserDataDir() const { |
return user_data_dir_; |
} |