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

Unified Diff: chrome/browser/profiles/profile_statistics.cc

Issue 1428973003: Utilize ProfileInfoCache to support data type counts in profile deletion flow (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: user_pod_row.js done, statistics now saved when the last window of a profile is closed. Created 5 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/profiles/profile_statistics.cc
diff --git a/chrome/browser/profiles/profile_statistics.cc b/chrome/browser/profiles/profile_statistics.cc
index 88b48f933b5e55983e991439d07c35d720664c00..511384eade308b07aebe11c4f49e6db865da6a15 100644
--- a/chrome/browser/profiles/profile_statistics.cc
+++ b/chrome/browser/profiles/profile_statistics.cc
@@ -10,8 +10,13 @@
#include "base/task_runner.h"
#include "base/time/time.h"
#include "chrome/browser/bookmarks/bookmark_model_factory.h"
+#include "chrome/browser/browser_process.h"
#include "chrome/browser/history/history_service_factory.h"
#include "chrome/browser/password_manager/password_store_factory.h"
+#include "chrome/browser/profiles/profile_attributes_entry.h"
+#include "chrome/browser/profiles/profile_attributes_storage.h"
+#include "chrome/browser/profiles/profile_info_cache.h"
+#include "chrome/browser/profiles/profile_manager.h"
#include "components/bookmarks/browser/bookmark_model.h"
#include "components/history/core/browser/history_service.h"
#include "components/password_manager/core/browser/password_store.h"
@@ -27,6 +32,8 @@ struct ProfileStatValue {
bool success; // false means the statistics failed to load
};
+void NoOp(profiles::ProfileCategoryStats result) {}
+
int CountBookmarksFromNode(const bookmarks::BookmarkNode* node) {
int count = 0;
if (node->is_url()) {
@@ -86,6 +93,7 @@ class ProfileStatisticsAggregator
const profiles::ProfileStatisticsCallback callback_;
base::CancelableTaskTracker* tracker_;
+ scoped_ptr<base::CancelableTaskTracker> default_tracker_;
// Password counting.
class PasswordStoreConsumerHelper
@@ -118,6 +126,10 @@ ProfileStatisticsAggregator::ProfileStatisticsAggregator(
callback_(callback),
tracker_(tracker),
password_store_consumer_helper_(this) {
+ if (!tracker_) {
+ default_tracker_.reset(new base::CancelableTaskTracker);
+ tracker_ = default_tracker_.get();
+ }
Init();
}
@@ -173,6 +185,20 @@ void ProfileStatisticsAggregator::StatisticsCallback(
datum.success = result.success;
profile_category_stats_.push_back(datum);
callback_.Run(profile_category_stats_);
+
+ // Set statistic in ProfileInfoCache if possible.
+ // Note: if local_state() is null, profile_manager() will seg-fault.
+ if (result.success && g_browser_process && g_browser_process->local_state()) {
+ ProfileInfoCache& profile_info_cache =
Mike Lerman 2015/11/03 20:50:42 const ProfileInfoCache& please
lwchkg 2015/11/04 00:11:07 Acknowledged.
lwchkg 2015/11/05 22:21:30 I've tried, but the compiler complains. e:\chromi
Mike Lerman 2015/11/10 15:45:44 Ah - getProfileAttributesWithPath isn't const. Sor
+ g_browser_process->profile_manager()->GetProfileInfoCache();
+ if (&profile_info_cache) {
Mike Lerman 2015/11/03 20:50:42 you can assume if you have a ProfileManager than y
lwchkg 2015/11/04 00:11:07 You're right. Thanks.
+ ProfileAttributesEntry* entry = nullptr;
+ if (profile_info_cache.GetProfileAttributesWithPath(
+ profile_->GetPath(), &entry)) {
+ entry->SetStatistic(datum.category, result.count);
+ }
+ }
+ }
}
void ProfileStatisticsAggregator::StatisticsCallbackSuccess(
@@ -263,4 +289,8 @@ void GetProfileStatistics(Profile* profile,
new ProfileStatisticsAggregator(profile, callback, tracker);
}
+void StoreProfileStatisticsToCache(Profile* profile) {
+ GetProfileStatistics(profile, base::Bind(&NoOp), nullptr);
Mike Lerman 2015/11/03 20:50:42 I think you can just write profiles::ProfileCatgeo
lwchkg 2015/11/04 00:11:07 Not sure about this. Will try tonight.
lwchkg 2015/11/05 22:21:30 Tried but not succeeded. I've tried to make a lamb
Mike Lerman 2015/11/10 15:45:44 Aha! Found an example: https://code.google.com/p/c
lwchkg 2015/11/10 18:11:07 Thanks. It's working well!
+}
+
} // namespace profiles

Powered by Google App Engine
This is Rietveld 408576698