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

Unified Diff: chrome/browser/engagement/site_engagement_service.cc

Issue 1919383005: Small cleanup of SiteEngagementService. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 8 months 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/engagement/site_engagement_service.cc
diff --git a/chrome/browser/engagement/site_engagement_service.cc b/chrome/browser/engagement/site_engagement_service.cc
index df709189e6bfac5542aad42bf67fcacb6e6c1e24..64531715876c21ea6904e95c6ab57df98a6a34e3 100644
--- a/chrome/browser/engagement/site_engagement_service.cc
+++ b/chrome/browser/engagement/site_engagement_service.cc
@@ -271,18 +271,12 @@ void SiteEngagementScore::AddPoints(double points) {
last_engagement_time_ = now;
}
-void SiteEngagementScore::Reset(double points, const base::Time* updated_time) {
+void SiteEngagementScore::Reset(double points,
+ const base::Time last_engagement_time) {
raw_score_ = points;
points_added_today_ = 0;
- // This must be set in order to prevent the score from decaying when read.
- if (updated_time) {
- last_engagement_time_ = *updated_time;
- if (!last_shortcut_launch_time_.is_null())
- last_shortcut_launch_time_ = *updated_time;
- } else {
- last_engagement_time_ = clock_->Now();
- }
+ last_engagement_time_ = last_engagement_time;
}
bool SiteEngagementScore::MaxPointsPerDayAdded() const {
@@ -455,7 +449,9 @@ void SiteEngagementService::HandleMediaPlaying(const GURL& url,
}
void SiteEngagementService::ResetScoreForURL(const GURL& url, double score) {
- ResetScoreAndAccessTimesForURL(url, score, nullptr);
+ // Set the last engagement time to Now in order to prevent the newly set
+ // score from decaying when read.
+ ResetScoreAndAccessTimesForURL(url, score, clock_->Now(), nullptr);
}
void SiteEngagementService::OnURLsDeleted(
@@ -478,16 +474,12 @@ void SiteEngagementService::OnURLsDeleted(
}
void SiteEngagementService::SetLastShortcutLaunchTime(const GURL& url) {
- HostContentSettingsMap* settings_map =
- HostContentSettingsMapFactory::GetForProfile(profile_);
- std::unique_ptr<base::DictionaryValue> score_dict =
- GetScoreDictForOrigin(settings_map, url);
- SiteEngagementScore score(clock_.get(), *score_dict);
+ std::unique_ptr<ScopedEngagementScore> score = GetEngagementScore(url, true);
// Record the number of days since the last launch in UMA. If the user's clock
// has changed back in time, set this to 0.
base::Time now = clock_->Now();
- base::Time last_launch = score.last_shortcut_launch_time();
+ base::Time last_launch = score->get()->last_shortcut_launch_time();
if (!last_launch.is_null()) {
SiteEngagementMetrics::RecordDaysSinceLastShortcutLaunch(
std::max(0, (now - last_launch).InDays()));
@@ -495,22 +487,11 @@ void SiteEngagementService::SetLastShortcutLaunchTime(const GURL& url) {
SiteEngagementMetrics::RecordEngagement(
SiteEngagementMetrics::ENGAGEMENT_WEBAPP_SHORTCUT_LAUNCH);
- score.set_last_shortcut_launch_time(now);
- if (score.UpdateScoreDict(score_dict.get())) {
- settings_map->SetWebsiteSettingDefaultScope(
- url, GURL(), CONTENT_SETTINGS_TYPE_SITE_ENGAGEMENT, std::string(),
- score_dict.release());
- }
+ score->get()->set_last_shortcut_launch_time(now);
}
double SiteEngagementService::GetScore(const GURL& url) const {
- HostContentSettingsMap* settings_map =
- HostContentSettingsMapFactory::GetForProfile(profile_);
- std::unique_ptr<base::DictionaryValue> score_dict =
- GetScoreDictForOrigin(settings_map, url);
- SiteEngagementScore score(clock_.get(), *score_dict);
-
- return score.Score();
+ return GetEngagementScore(url)->get()->Score();
}
double SiteEngagementService::GetTotalEngagementPoints() const {
@@ -535,10 +516,7 @@ std::map<GURL, double> SiteEngagementService::GetScoreMap() const {
if (!origin.is_valid())
continue;
- std::unique_ptr<base::DictionaryValue> score_dict =
- GetScoreDictForOrigin(settings_map, origin);
- SiteEngagementScore score(clock_.get(), *score_dict);
- score_map[origin] = score.Score();
+ score_map[origin] = GetEngagementScore(origin)->get()->Score();
}
return score_map;
@@ -591,6 +569,34 @@ bool SiteEngagementService::IsEngagementAtLeast(
return false;
}
+SiteEngagementService::ScopedEngagementScore::ScopedEngagementScore(
+ HostContentSettingsMap* settings_map,
+ const GURL& url,
+ base::Clock* clock,
+ bool update)
+ : score_dict_(GetScoreDictForOrigin(settings_map, url)),
+ score_(clock, *score_dict_),
+ update_(update),
+ url_(url),
+ settings_map_(settings_map) {}
+
+SiteEngagementService::ScopedEngagementScore::~ScopedEngagementScore() {
+ if (update_) {
+ if (score_.Score() == 0) {
+ settings_map_->SetWebsiteSettingDefaultScope(
+ url_, GURL(), CONTENT_SETTINGS_TYPE_SITE_ENGAGEMENT, std::string(),
+ nullptr);
+ return;
+ }
+
+ if (score_.UpdateScoreDict(score_dict_.get())) {
+ settings_map_->SetWebsiteSettingDefaultScope(
+ url_, GURL(), CONTENT_SETTINGS_TYPE_SITE_ENGAGEMENT, std::string(),
+ score_dict_.release());
+ }
+ }
+}
+
SiteEngagementService::SiteEngagementService(Profile* profile,
std::unique_ptr<base::Clock> clock)
: profile_(profile), clock_(std::move(clock)), weak_factory_(this) {
@@ -601,19 +607,23 @@ SiteEngagementService::SiteEngagementService(Profile* profile,
history->AddObserver(this);
}
+std::unique_ptr<SiteEngagementService::ScopedEngagementScore>
+SiteEngagementService::GetEngagementScore(const GURL& url, bool update) {
+ return base::WrapUnique(new ScopedEngagementScore(
+ HostContentSettingsMapFactory::GetForProfile(profile_), url, clock_.get(),
+ update));
+}
+
+std::unique_ptr<SiteEngagementService::ScopedEngagementScore>
+SiteEngagementService::GetEngagementScore(const GURL& url) const {
+ return base::WrapUnique(new ScopedEngagementScore(
+ HostContentSettingsMapFactory::GetForProfile(profile_), url, clock_.get(),
+ false));
+}
+
void SiteEngagementService::AddPoints(const GURL& url, double points) {
- HostContentSettingsMap* settings_map =
- HostContentSettingsMapFactory::GetForProfile(profile_);
- std::unique_ptr<base::DictionaryValue> score_dict =
- GetScoreDictForOrigin(settings_map, url);
- SiteEngagementScore score(clock_.get(), *score_dict);
-
- score.AddPoints(points);
- if (score.UpdateScoreDict(score_dict.get())) {
- settings_map->SetWebsiteSettingDefaultScope(
- url, GURL(), CONTENT_SETTINGS_TYPE_SITE_ENGAGEMENT, std::string(),
- score_dict.release());
- }
+ std::unique_ptr<ScopedEngagementScore> score = GetEngagementScore(url, true);
+ score->get()->AddPoints(points);
dominickn 2016/05/02 21:13:49 Nit: if you're not going to null check, then GetEn
}
void SiteEngagementService::AfterStartupTask() {
@@ -630,16 +640,9 @@ void SiteEngagementService::CleanupEngagementScores() {
for (const auto& site : *engagement_settings) {
GURL origin(site.primary_pattern.ToString());
if (origin.is_valid()) {
- std::unique_ptr<base::DictionaryValue> score_dict =
- GetScoreDictForOrigin(settings_map, origin);
- SiteEngagementScore score(clock_.get(), *score_dict);
- if (score.Score() != 0)
- continue;
+ // When this goes out of scope, the update will trigger a delete.
+ GetEngagementScore(origin, true);
}
-
- settings_map->SetWebsiteSettingDefaultScope(
- origin, GURL(), CONTENT_SETTINGS_TYPE_SITE_ENGAGEMENT, std::string(),
- nullptr);
}
}
@@ -711,10 +714,7 @@ int SiteEngagementService::OriginsWithMaxDailyEngagement() const {
if (!origin.is_valid())
continue;
- std::unique_ptr<base::DictionaryValue> score_dict =
- GetScoreDictForOrigin(settings_map, origin);
- SiteEngagementScore score(clock_.get(), *score_dict);
- if (score.MaxPointsPerDayAdded())
+ if (GetEngagementScore(origin)->get()->MaxPointsPerDayAdded())
++total_origins;
}
@@ -784,33 +784,29 @@ void SiteEngagementService::GetCountsAndLastVisitForOriginsComplete(
double score =
std::min(SiteEngagementScore::kMaxPoints,
(proportion_remaining * GetScore(origin)) + undecay);
- ResetScoreAndAccessTimesForURL(origin, score, &last_visit);
+ base::Time last_shortcut_launch_time =
+ GetEngagementScore(origin, false)->get()->last_shortcut_launch_time();
+ std::unique_ptr<base::Time> new_last_shortcut_time;
+ if (last_shortcut_launch_time > last_visit)
+ new_last_shortcut_time.reset(new base::Time(last_visit));
+ ResetScoreAndAccessTimesForURL(origin, score, last_visit,
+ new_last_shortcut_time.get());
}
}
void SiteEngagementService::ResetScoreAndAccessTimesForURL(
- const GURL& url, double score, const base::Time* updated_time) {
+ const GURL& url,
+ double score,
+ const base::Time last_engagement_time,
+ const base::Time* last_shortcut_launch_time) {
DCHECK(url.is_valid());
DCHECK_GE(score, 0);
DCHECK_LE(score, SiteEngagementScore::kMaxPoints);
- HostContentSettingsMap* settings_map =
- HostContentSettingsMapFactory::GetForProfile(profile_);
- std::unique_ptr<base::DictionaryValue> score_dict =
- GetScoreDictForOrigin(settings_map, url);
- SiteEngagementScore engagement_score(clock_.get(), *score_dict);
-
- engagement_score.Reset(score, updated_time);
- if (score == 0) {
- settings_map->SetWebsiteSettingDefaultScope(
- url, GURL(), CONTENT_SETTINGS_TYPE_SITE_ENGAGEMENT, std::string(),
- nullptr);
- return;
- }
-
- if (engagement_score.UpdateScoreDict(score_dict.get())) {
- settings_map->SetWebsiteSettingDefaultScope(
- url, GURL(), CONTENT_SETTINGS_TYPE_SITE_ENGAGEMENT, std::string(),
- score_dict.release());
- }
+ std::unique_ptr<ScopedEngagementScore> engagement_score =
+ GetEngagementScore(url, true);
+ engagement_score->get()->Reset(score, last_engagement_time);
+ if (last_shortcut_launch_time)
+ engagement_score->get()->set_last_shortcut_launch_time(
+ *last_shortcut_launch_time);
}

Powered by Google App Engine
This is Rietveld 408576698