Chromium Code Reviews| 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 66a2b4976dcf901a748a3c385fe9a88499480e08..e089262e14b83e60df7a544e59ae69849fae1d89 100644 |
| --- a/chrome/browser/engagement/site_engagement_service.cc |
| +++ b/chrome/browser/engagement/site_engagement_service.cc |
| @@ -21,6 +21,7 @@ |
| #include "chrome/browser/banners/app_banner_settings_helper.h" |
| #include "chrome/browser/content_settings/host_content_settings_map_factory.h" |
| #include "chrome/browser/engagement/site_engagement_eviction_policy.h" |
| +#include "chrome/browser/engagement/site_engagement_helper.h" |
| #include "chrome/browser/engagement/site_engagement_metrics.h" |
| #include "chrome/browser/engagement/site_engagement_score.h" |
| #include "chrome/browser/engagement/site_engagement_service_factory.h" |
| @@ -33,7 +34,9 @@ |
| #include "components/history/core/browser/history_service.h" |
| #include "components/prefs/pref_service.h" |
| #include "content/public/browser/browser_thread.h" |
| +#include "content/public/browser/render_frame_host.h" |
| #include "content/public/browser/web_contents.h" |
| +#include "content/public/common/associated_interface_provider.h" |
| #include "url/gurl.h" |
| namespace { |
| @@ -123,24 +126,12 @@ SiteEngagementService::~SiteEngagementService() { |
| history->RemoveObserver(this); |
| } |
| -SiteEngagementService::EngagementLevel |
| +blink::mojom::EngagementLevel |
| SiteEngagementService::GetEngagementLevel(const GURL& url) const { |
| - DCHECK_LT(SiteEngagementScore::GetMediumEngagementBoundary(), |
| - SiteEngagementScore::GetHighEngagementBoundary()); |
| - double score = GetScore(url); |
| - if (score == 0) |
| - return ENGAGEMENT_LEVEL_NONE; |
| - |
| - if (score < SiteEngagementScore::GetMediumEngagementBoundary()) |
| - return ENGAGEMENT_LEVEL_LOW; |
| - |
| - if (score < SiteEngagementScore::GetHighEngagementBoundary()) |
| - return ENGAGEMENT_LEVEL_MEDIUM; |
| - |
| - if (score < SiteEngagementScore::kMaxPoints) |
| - return ENGAGEMENT_LEVEL_HIGH; |
| + if (IsLastEngagementStale()) |
| + CleanupEngagementScores(true); |
| - return ENGAGEMENT_LEVEL_MAX; |
| + return CreateEngagementScore(url).GetEngagementLevel(); |
|
benwells
2016/12/09 06:11:23
It looks like every time something calls CreateEng
dominickn
2016/12/13 06:27:37
Not quite: OriginsWithMaxDailyEngagement, GetCount
benwells
2016/12/14 06:17:53
OK. If it was me I'd try to find a way to clean th
|
| } |
| std::map<GURL, double> SiteEngagementService::GetScoreMap() const { |
| @@ -166,21 +157,24 @@ bool SiteEngagementService::IsBootstrapped() const { |
| SiteEngagementScore::GetBootstrapPoints(); |
| } |
| -bool SiteEngagementService::IsEngagementAtLeast(const GURL& url, |
| - EngagementLevel level) const { |
| +bool SiteEngagementService::IsEngagementAtLeast( |
| + const GURL& url, |
| + blink::mojom::EngagementLevel level) const { |
| DCHECK_LT(SiteEngagementScore::GetMediumEngagementBoundary(), |
| SiteEngagementScore::GetHighEngagementBoundary()); |
| double score = GetScore(url); |
| switch (level) { |
| - case ENGAGEMENT_LEVEL_NONE: |
| + case blink::mojom::EngagementLevel::NONE: |
| return true; |
| - case ENGAGEMENT_LEVEL_LOW: |
| + case blink::mojom::EngagementLevel::MINIMAL: |
| return score > 0; |
| - case ENGAGEMENT_LEVEL_MEDIUM: |
| + case blink::mojom::EngagementLevel::LOW: |
| + return score >= 1; |
| + case blink::mojom::EngagementLevel::MEDIUM: |
| return score >= SiteEngagementScore::GetMediumEngagementBoundary(); |
| - case ENGAGEMENT_LEVEL_HIGH: |
| + case blink::mojom::EngagementLevel::HIGH: |
| return score >= SiteEngagementScore::GetHighEngagementBoundary(); |
| - case ENGAGEMENT_LEVEL_MAX: |
| + case blink::mojom::EngagementLevel::MAX: |
| return score == SiteEngagementScore::kMaxPoints; |
| } |
| NOTREACHED(); |
| @@ -219,6 +213,16 @@ void SiteEngagementService::SetLastShortcutLaunchTime(const GURL& url) { |
| score.Commit(); |
| } |
| +void SiteEngagementService::HelperCreated( |
| + SiteEngagementService::Helper* helper) { |
| + helpers_.insert(helper); |
| +} |
| + |
| +void SiteEngagementService::HelperDeleted( |
| + SiteEngagementService::Helper* helper) { |
| + helpers_.erase(helper); |
| +} |
| + |
| double SiteEngagementService::GetScore(const GURL& url) const { |
| // Ensure that if engagement is stale, we clean things up before fetching the |
| // score. |
| @@ -259,10 +263,16 @@ void SiteEngagementService::AddPoints(const GURL& url, double points) { |
| CleanupEngagementScores(true); |
| SiteEngagementScore score = CreateEngagementScore(url); |
| + blink::mojom::EngagementLevel old_level = score.GetEngagementLevel(); |
| + |
| score.AddPoints(points); |
| score.Commit(); |
| SetLastEngagementTime(score.last_engagement_time()); |
| + |
| + blink::mojom::EngagementLevel new_level = score.GetEngagementLevel(); |
| + if (old_level != new_level) |
| + SendLevelChangeToHelpers(url, new_level); |
| } |
| void SiteEngagementService::AfterStartupTask() { |
| @@ -484,6 +494,13 @@ void SiteEngagementService::HandleUserInput( |
| observer.OnEngagementIncreased(web_contents, url, GetScore(url)); |
| } |
| +void SiteEngagementService::SendLevelChangeToHelpers( |
| + const GURL& url, |
| + blink::mojom::EngagementLevel level) { |
| + for (SiteEngagementService::Helper* helper : helpers_) |
| + helper->OnEngagementLevelChanged(url, level); |
| +} |
| + |
| bool SiteEngagementService::IsLastEngagementStale() const { |
| // Only happens on first run when no engagement has ever been recorded. |
| base::Time last_engagement_time = GetLastEngagementTime(); |