Index: chrome/browser/engagement/site_engagement_service.h |
diff --git a/chrome/browser/engagement/site_engagement_service.h b/chrome/browser/engagement/site_engagement_service.h |
index 1d733322e887cced1264f0a6ac062984c06b8a99..1c0d9857d2935ad3deea2c5fe919e5f00e726122 100644 |
--- a/chrome/browser/engagement/site_engagement_service.h |
+++ b/chrome/browser/engagement/site_engagement_service.h |
@@ -12,8 +12,10 @@ |
#include "base/gtest_prod_util.h" |
#include "base/macros.h" |
#include "base/memory/weak_ptr.h" |
+#include "base/observer_list.h" |
#include "base/time/time.h" |
#include "chrome/browser/engagement/site_engagement_metrics.h" |
+#include "chrome/browser/engagement/site_engagement_observer.h" |
#include "components/history/core/browser/history_service_observer.h" |
#include "components/keyed_service/core/keyed_service.h" |
#include "ui/base/page_transition_types.h" |
@@ -109,6 +111,7 @@ class SiteEngagementService : public KeyedService, |
double GetTotalEngagementPoints() const override; |
private: |
+ friend class SiteEngagementObserver; |
FRIEND_TEST_ALL_PREFIXES(SiteEngagementServiceTest, CheckHistograms); |
FRIEND_TEST_ALL_PREFIXES(SiteEngagementServiceTest, CleanupEngagementScores); |
FRIEND_TEST_ALL_PREFIXES(SiteEngagementServiceTest, ClearHistoryForURLs); |
@@ -120,6 +123,7 @@ class SiteEngagementService : public KeyedService, |
CleanupOriginsOnHistoryDeletion); |
FRIEND_TEST_ALL_PREFIXES(SiteEngagementServiceTest, IsBootstrapped); |
FRIEND_TEST_ALL_PREFIXES(SiteEngagementServiceTest, EngagementLevel); |
+ FRIEND_TEST_ALL_PREFIXES(SiteEngagementServiceTest, Observers); |
FRIEND_TEST_ALL_PREFIXES(SiteEngagementServiceTest, ScoreDecayHistograms); |
FRIEND_TEST_ALL_PREFIXES(AppBannerSettingsHelperTest, SiteEngagementTrigger); |
@@ -139,6 +143,9 @@ class SiteEngagementService : public KeyedService, |
// Returns the median engagement score of all recorded origins. |
double GetMedianEngagement(const std::map<GURL, double>& score_map) const; |
+ // Returns the minimum engagement score corresponding to |level|. |
+ double GetScoreForEngagementLevel(EngagementLevel level) const; |
+ |
// Update the engagement score of the origin matching |url| for media playing. |
// The points awarded are discounted if the media is being played in a non- |
// visible tab. |
@@ -172,6 +179,10 @@ class SiteEngagementService : public KeyedService, |
bool expired, |
const history::OriginCountAndLastVisitMap& remaining_origin_counts); |
+ // Add and remove observers of this service. |
+ void AddObserver(SiteEngagementObserver* observer); |
+ void RemoveObserver(SiteEngagementObserver* observer); |
+ |
// Resets the engagement score for |url| to |score|, and sets the last |
// engagement time and last shortcut launch time (if it is non-null) to |
// |updated_time|. Clears daily limits. |
@@ -191,6 +202,10 @@ class SiteEngagementService : public KeyedService, |
// upload. |
base::Time last_metrics_time_; |
+ // A list of observers. When any origin registers an engagement-increasing |
+ // event, each observer's OnEngagementIncreased method will be called. |
+ base::ObserverList<SiteEngagementObserver> observer_list_; |
+ |
base::WeakPtrFactory<SiteEngagementService> weak_factory_; |
DISALLOW_COPY_AND_ASSIGN(SiteEngagementService); |