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

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

Issue 1986033002: Implement an observer interface for the site engagement service. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@site-engagement-refactor
Patch Set: Rebase to fix leak Created 4 years, 6 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 3780227d8785054211d8ef993c99ce054c036b3b..f4ca599441ceb8a992d3f27e1c5095e8d2aeb291 100644
--- a/chrome/browser/engagement/site_engagement_service.cc
+++ b/chrome/browser/engagement/site_engagement_service.cc
@@ -167,9 +167,8 @@ bool SiteEngagementService::IsBootstrapped() const {
SiteEngagementScore::GetBootstrapPoints();
}
-bool SiteEngagementService::IsEngagementAtLeast(
- const GURL& url,
- EngagementLevel level) const {
+bool SiteEngagementService::IsEngagementAtLeast(const GURL& url,
+ EngagementLevel level) const {
DCHECK_LT(SiteEngagementScore::GetMediumEngagementBoundary(),
SiteEngagementScore::GetHighEngagementBoundary());
double score = GetScore(url);
@@ -189,6 +188,14 @@ bool SiteEngagementService::IsEngagementAtLeast(
return false;
}
+void SiteEngagementService::AddObserver(SiteEngagementObserver* observer) {
+ observer_list_.AddObserver(observer);
+}
+
+void SiteEngagementService::RemoveObserver(SiteEngagementObserver* observer) {
+ observer_list_.RemoveObserver(observer);
+}
+
void SiteEngagementService::ResetScoreForURL(const GURL& url, double score) {
SiteEngagementScore engagement_score = CreateEngagementScore(url);
engagement_score.Reset(score, clock_->Now());
@@ -251,14 +258,14 @@ void SiteEngagementService::AfterStartupTask() {
void SiteEngagementService::CleanupEngagementScores() {
HostContentSettingsMap* settings_map =
- HostContentSettingsMapFactory::GetForProfile(profile_);
+ HostContentSettingsMapFactory::GetForProfile(profile_);
std::unique_ptr<ContentSettingsForOneType> engagement_settings =
GetEngagementContentSettings(settings_map);
for (const auto& site : *engagement_settings) {
GURL origin(site.primary_pattern.ToString());
if (origin.is_valid() && GetScore(origin) != 0)
- continue;
+ continue;
settings_map->SetWebsiteSettingDefaultScope(
origin, GURL(), CONTENT_SETTINGS_TYPE_SITE_ENGAGEMENT, std::string(),
@@ -276,8 +283,9 @@ void SiteEngagementService::RecordMetrics() {
int origins_with_max_engagement = OriginsWithMaxEngagement(score_map);
int total_origins = score_map.size();
int percent_origins_with_max_engagement =
- (total_origins == 0 ? 0 : (origins_with_max_engagement * 100) /
- total_origins);
+ (total_origins == 0
+ ? 0
+ : (origins_with_max_engagement * 100) / total_origins);
double total_engagement = GetTotalEngagementPoints();
double mean_engagement =
@@ -321,34 +329,47 @@ double SiteEngagementService::GetMedianEngagement(
}
void SiteEngagementService::HandleMediaPlaying(
- content::WebContents* web_contents, bool is_hidden) {
+ content::WebContents* web_contents,
+ bool is_hidden) {
+ const GURL& url = web_contents->GetVisibleURL();
SiteEngagementMetrics::RecordEngagement(
is_hidden ? SiteEngagementMetrics::ENGAGEMENT_MEDIA_HIDDEN
: SiteEngagementMetrics::ENGAGEMENT_MEDIA_VISIBLE);
- AddPoints(web_contents->GetVisibleURL(),
- is_hidden ? SiteEngagementScore::GetHiddenMediaPoints()
- : SiteEngagementScore::GetVisibleMediaPoints());
+ AddPoints(url, is_hidden ? SiteEngagementScore::GetHiddenMediaPoints()
+ : SiteEngagementScore::GetVisibleMediaPoints());
+
RecordMetrics();
+ FOR_EACH_OBSERVER(
+ SiteEngagementObserver, observer_list_,
+ OnEngagementIncreased(web_contents, url, GetScore(url), is_hidden));
}
void SiteEngagementService::HandleNavigation(content::WebContents* web_contents,
ui::PageTransition transition) {
if (IsEngagementNavigation(transition)) {
+ const GURL& url = web_contents->GetLastCommittedURL();
SiteEngagementMetrics::RecordEngagement(
SiteEngagementMetrics::ENGAGEMENT_NAVIGATION);
- AddPoints(web_contents->GetLastCommittedURL(),
- SiteEngagementScore::GetNavigationPoints());
+ AddPoints(url, SiteEngagementScore::GetNavigationPoints());
+
RecordMetrics();
+ FOR_EACH_OBSERVER(
+ SiteEngagementObserver, observer_list_,
+ OnEngagementIncreased(web_contents, url, GetScore(url), false));
benwells 2016/06/11 09:31:23 Is this always not hidden? What about if the navig
dominickn 2016/06/11 15:05:50 The assumption right now is that navigation engage
}
}
void SiteEngagementService::HandleUserInput(
content::WebContents* web_contents,
SiteEngagementMetrics::EngagementType type) {
+ const GURL& url = web_contents->GetVisibleURL();
SiteEngagementMetrics::RecordEngagement(type);
- AddPoints(web_contents->GetVisibleURL(),
- SiteEngagementScore::GetUserInputPoints());
+ AddPoints(url, SiteEngagementScore::GetUserInputPoints());
+
RecordMetrics();
+ FOR_EACH_OBSERVER(
+ SiteEngagementObserver, observer_list_,
+ OnEngagementIncreased(web_contents, url, GetScore(url), false));
}
void SiteEngagementService::OnURLsDeleted(
@@ -421,7 +442,6 @@ void SiteEngagementService::GetCountsAndLastVisitForOriginsComplete(
const std::multiset<GURL>& deleted_origins,
bool expired,
const history::OriginCountAndLastVisitMap& remaining_origins) {
-
// The most in-the-past option in the Clear Browsing Dialog aside from "all
// time" is 4 weeks ago. Set the last updated date to 4 weeks ago for origins
// where we can't find a valid last visit date.
@@ -465,8 +485,8 @@ void SiteEngagementService::GetCountsAndLastVisitForOriginsComplete(
int undecay = 0;
int days_since_engagement = (now - last_visit).InDays();
if (days_since_engagement > 0) {
- int periods = days_since_engagement /
- SiteEngagementScore::GetDecayPeriodInDays();
+ int periods =
+ days_since_engagement / SiteEngagementScore::GetDecayPeriodInDays();
undecay = periods * SiteEngagementScore::GetDecayPoints();
}
@@ -476,8 +496,8 @@ void SiteEngagementService::GetCountsAndLastVisitForOriginsComplete(
SiteEngagementScore::kMaxPoints,
(proportion_remaining * engagement_score.GetScore()) + undecay);
engagement_score.Reset(score, last_visit);
- if (!engagement_score.last_shortcut_launch_time().is_null()
- && engagement_score.last_shortcut_launch_time() > last_visit) {
+ if (!engagement_score.last_shortcut_launch_time().is_null() &&
+ engagement_score.last_shortcut_launch_time() > last_visit) {
engagement_score.set_last_shortcut_launch_time(last_visit);
}

Powered by Google App Engine
This is Rietveld 408576698