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

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

Issue 2535483002: Plumb site engagement to the renderer process. (Closed)
Patch Set: Address comments Created 4 years 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 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();

Powered by Google App Engine
This is Rietveld 408576698