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(); |
} |
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(); |