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

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

Issue 2788413003: Add SiteEngagementService::GetAllDetails(), to return detailed scores. (Closed)
Patch Set: Cleanups Created 3 years, 8 months 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 43b83532572753245b9cc3450ba3c21d540158c9..7c0c534fd41c2c64bef40c2503ba21d0cdd05df9 100644
--- a/chrome/browser/engagement/site_engagement_service.cc
+++ b/chrome/browser/engagement/site_engagement_service.cc
@@ -8,7 +8,6 @@
#include <algorithm>
#include <utility>
-#include <vector>
#include "base/command_line.h"
#include "base/memory/ptr_util.h"
@@ -52,13 +51,34 @@ bool g_updated_from_variations = false;
// Length of time between metrics logging.
const int kMetricsIntervalInMinutes = 60;
-std::unique_ptr<ContentSettingsForOneType> GetEngagementContentSettings(
- HostContentSettingsMap* settings_map) {
- std::unique_ptr<ContentSettingsForOneType> engagement_settings(
- new ContentSettingsForOneType);
+// Returns the combined list of origins which either have site engagement
+// data stored, or have other settings that would provide a score bonus.
+std::set<GURL> GetEngagementOriginsFromContentSettings(Profile* profile) {
+ HostContentSettingsMap* settings_map =
+ HostContentSettingsMapFactory::GetForProfile(profile);
+
+ ContentSettingsForOneType content_settings_list;
+ std::set<GURL> urls;
+
+ // Fetch site engagement content settings.
settings_map->GetSettingsForOneType(CONTENT_SETTINGS_TYPE_SITE_ENGAGEMENT,
- std::string(), engagement_settings.get());
- return engagement_settings;
+ content_settings::ResourceIdentifier(),
+ &content_settings_list);
+ for (const auto& site : content_settings_list) {
dominickn 2017/04/10 04:41:26 Nit: no braces
Wez 2017/04/10 21:18:09 Done, though note that other areas of Chromium ten
+ urls.insert(GURL(site.primary_pattern.ToString()));
+ }
+
+ // Fetch notifications allowed content settings.
+ settings_map->GetSettingsForOneType(CONTENT_SETTINGS_TYPE_NOTIFICATIONS,
+ content_settings::ResourceIdentifier(),
+ &content_settings_list);
+ for (const auto& site : content_settings_list) {
+ if (site.setting == CONTENT_SETTING_ALLOW)
dominickn 2017/04/10 04:41:26 Should this be != ?
Wez 2017/04/10 21:18:09 Yup; and of course my simple test wouldn't catch t
+ continue;
+ urls.insert(GURL(site.primary_pattern.ToString()));
+ }
+
+ return urls;
}
// Only accept a navigation event for engagement if it is one of:
@@ -104,8 +124,7 @@ double SiteEngagementService::GetScoreFromSettings(
HostContentSettingsMap* settings,
const GURL& origin) {
auto clock = base::MakeUnique<base::DefaultClock>();
- return SiteEngagementScore(clock.get(), origin, settings)
- .GetScore();
+ return SiteEngagementScore(clock.get(), origin, settings).GetTotalScore();
}
SiteEngagementService::SiteEngagementService(Profile* profile)
@@ -139,21 +158,28 @@ SiteEngagementService::GetEngagementLevel(const GURL& url) const {
return CreateEngagementScore(url).GetEngagementLevel();
}
-std::map<GURL, double> SiteEngagementService::GetScoreMap() const {
- HostContentSettingsMap* settings_map =
- HostContentSettingsMapFactory::GetForProfile(profile_);
- std::unique_ptr<ContentSettingsForOneType> engagement_settings =
- GetEngagementContentSettings(settings_map);
+std::vector<mojom::SiteEngagementDetails> SiteEngagementService::GetAllDetails()
+ const {
+ std::set<GURL> origins = GetEngagementOriginsFromContentSettings(profile_);
- std::map<GURL, double> score_map;
- for (const auto& site : *engagement_settings) {
- GURL origin(site.primary_pattern.ToString());
+ std::vector<mojom::SiteEngagementDetails> details;
+ details.reserve(origins.size());
+ for (const GURL& origin : origins) {
if (!origin.is_valid())
continue;
+ details.push_back(GetDetails(origin));
+ }
+
+ return details;
+}
+std::map<GURL, double> SiteEngagementService::GetScoreMap() const {
+ std::map<GURL, double> score_map;
+ for (const GURL& origin : GetEngagementOriginsFromContentSettings(profile_)) {
+ if (!origin.is_valid())
+ continue;
score_map[origin] = GetScore(origin);
}
-
return score_map;
}
@@ -244,12 +270,17 @@ void SiteEngagementService::HelperDeleted(
}
double SiteEngagementService::GetScore(const GURL& url) const {
+ return GetDetails(url).total_score;
+}
+
+mojom::SiteEngagementDetails SiteEngagementService::GetDetails(
+ const GURL& url) const {
// Ensure that if engagement is stale, we clean things up before fetching the
// score.
if (IsLastEngagementStale())
CleanupEngagementScores(true);
- return CreateEngagementScore(url).GetScore();
+ return CreateEngagementScore(url).GetDetails();
}
double SiteEngagementService::GetTotalEngagementPoints() const {
@@ -317,11 +348,6 @@ void SiteEngagementService::AfterStartupTask() {
void SiteEngagementService::CleanupEngagementScores(
dominickn 2017/04/10 04:41:26 This cleanup method doesn't need to iterate over o
Wez 2017/04/10 21:18:09 Done.
bool update_last_engagement_time) const {
- HostContentSettingsMap* settings_map =
- HostContentSettingsMapFactory::GetForProfile(profile_);
- std::unique_ptr<ContentSettingsForOneType> engagement_settings =
- GetEngagementContentSettings(settings_map);
-
// We want to rebase last engagement times relative to MaxDecaysPerScore
// periods of decay in the past.
base::Time now = clock_->Now();
@@ -341,9 +367,9 @@ void SiteEngagementService::CleanupEngagementScores(
if (last_engagement_time > now)
last_engagement_time = now;
- for (const auto& site : *engagement_settings) {
- GURL origin(site.primary_pattern.ToString());
-
+ HostContentSettingsMap* settings_map =
+ HostContentSettingsMapFactory::GetForProfile(profile_);
+ for (const GURL& origin : GetEngagementOriginsFromContentSettings(profile_)) {
if (origin.is_valid()) {
SiteEngagementScore score = CreateEngagementScore(origin);
if (update_last_engagement_time) {
@@ -376,7 +402,8 @@ void SiteEngagementService::CleanupEngagementScores(
score.Commit();
}
- if (score.GetScore() > SiteEngagementScore::GetScoreCleanupThreshold())
+ if (score.GetTotalScore() >
+ SiteEngagementScore::GetScoreCleanupThreshold())
continue;
}
@@ -577,16 +604,10 @@ SiteEngagementScore SiteEngagementService::CreateEngagementScore(
}
int SiteEngagementService::OriginsWithMaxDailyEngagement() const {
- HostContentSettingsMap* settings_map =
- HostContentSettingsMapFactory::GetForProfile(profile_);
- std::unique_ptr<ContentSettingsForOneType> engagement_settings =
- GetEngagementContentSettings(settings_map);
-
int total_origins = 0;
// We cannot call GetScoreMap as we need the score objects, not raw scores.
- for (const auto& site : *engagement_settings) {
- GURL origin(site.primary_pattern.ToString());
+ for (const GURL& origin : GetEngagementOriginsFromContentSettings(profile_)) {
dominickn 2017/04/10 04:41:26 An origin can't possibly get maximum daily engagem
Wez 2017/04/10 21:18:09 Done.
if (!origin.is_valid())
continue;
@@ -655,7 +676,7 @@ void SiteEngagementService::GetCountsAndLastVisitForOriginsComplete(
// when it is next accessed.
SiteEngagementScore engagement_score = CreateEngagementScore(origin);
- double new_score = proportion_remaining * engagement_score.GetScore();
+ double new_score = proportion_remaining * engagement_score.raw_score();
int hours_since_engagement = (now - last_visit).InHours();
int periods =
hours_since_engagement / SiteEngagementScore::GetDecayPeriodInHours();

Powered by Google App Engine
This is Rietveld 408576698