| 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..b88e5d46fbf832d7f90f4d71c9e8dff8059892b2 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,14 @@ void SiteEngagementService::HandleUserInput(
|
| observer.OnEngagementIncreased(web_contents, url, GetScore(url));
|
| }
|
|
|
| +void SiteEngagementService::SendLevelChangeToHelpers(
|
| + const GURL& url,
|
| + blink::mojom::EngagementLevel level) {
|
| + GURL origin = url.GetOrigin();
|
| + for (SiteEngagementService::Helper* helper : helpers_)
|
| + helper->OnEngagementLevelChanged(origin, level);
|
| +}
|
| +
|
| bool SiteEngagementService::IsLastEngagementStale() const {
|
| // Only happens on first run when no engagement has ever been recorded.
|
| base::Time last_engagement_time = GetLastEngagementTime();
|
|
|