| Index: chrome/browser/engagement/site_engagement_score_unittest.cc
|
| diff --git a/chrome/browser/engagement/site_engagement_score_unittest.cc b/chrome/browser/engagement/site_engagement_score_unittest.cc
|
| index 51e32258e4281638f5359e992ca2bc9a20e57f65..96268a2981e632ae7667cd87181d9f8311d6be66 100644
|
| --- a/chrome/browser/engagement/site_engagement_score_unittest.cc
|
| +++ b/chrome/browser/engagement/site_engagement_score_unittest.cc
|
| @@ -9,7 +9,12 @@
|
| #include "base/macros.h"
|
| #include "base/test/simple_test_clock.h"
|
| #include "base/values.h"
|
| +#include "chrome/browser/content_settings/host_content_settings_map_factory.h"
|
| #include "chrome/browser/engagement/site_engagement_service.h"
|
| +#include "chrome/browser/profiles/profile.h"
|
| +#include "chrome/test/base/chrome_render_view_host_test_harness.h"
|
| +#include "chrome/test/base/testing_profile.h"
|
| +#include "components/content_settings/core/browser/host_content_settings_map.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
|
|
| namespace {
|
| @@ -42,12 +47,12 @@ base::Time GetReferenceTime() {
|
|
|
| } // namespace
|
|
|
| -class SiteEngagementScoreTest : public testing::Test {
|
| +class SiteEngagementScoreTest : public ChromeRenderViewHostTestHarness {
|
| public:
|
| SiteEngagementScoreTest() : score_(&test_clock_, GURL(), nullptr) {}
|
|
|
| void SetUp() override {
|
| - testing::Test::SetUp();
|
| + ChromeRenderViewHostTestHarness::SetUp();
|
| // Disable the first engagement bonus for tests.
|
| SiteEngagementScore::SetParamValuesForTesting();
|
| }
|
| @@ -114,10 +119,10 @@ TEST_F(SiteEngagementScoreTest, AccumulateOnSameDay) {
|
| score_.AddPoints(SiteEngagementScore::GetNavigationPoints());
|
| EXPECT_EQ(std::min(SiteEngagementScore::GetMaxPointsPerDay(),
|
| (i + 1) * SiteEngagementScore::GetNavigationPoints()),
|
| - score_.GetScore());
|
| + score_.GetTotalScore());
|
| }
|
|
|
| - EXPECT_EQ(SiteEngagementScore::GetMaxPointsPerDay(), score_.GetScore());
|
| + EXPECT_EQ(SiteEngagementScore::GetMaxPointsPerDay(), score_.GetTotalScore());
|
| }
|
|
|
| // Accumulate on the first day to max that day's engagement, then accumulate on
|
| @@ -130,7 +135,7 @@ TEST_F(SiteEngagementScoreTest, AccumulateOnTwoDays) {
|
| for (int i = 0; i < kMoreAccumulationsThanNeededToMaxDailyEngagement; ++i)
|
| score_.AddPoints(SiteEngagementScore::GetNavigationPoints());
|
|
|
| - EXPECT_EQ(SiteEngagementScore::GetMaxPointsPerDay(), score_.GetScore());
|
| + EXPECT_EQ(SiteEngagementScore::GetMaxPointsPerDay(), score_.GetTotalScore());
|
|
|
| test_clock_.SetNow(later_date);
|
| for (int i = 0; i < kMoreAccumulationsThanNeededToMaxDailyEngagement; ++i) {
|
| @@ -139,10 +144,11 @@ TEST_F(SiteEngagementScoreTest, AccumulateOnTwoDays) {
|
| std::min(SiteEngagementScore::GetMaxPointsPerDay(),
|
| (i + 1) * SiteEngagementScore::GetNavigationPoints());
|
| EXPECT_EQ(day_score + SiteEngagementScore::GetMaxPointsPerDay(),
|
| - score_.GetScore());
|
| + score_.GetTotalScore());
|
| }
|
|
|
| - EXPECT_EQ(2 * SiteEngagementScore::GetMaxPointsPerDay(), score_.GetScore());
|
| + EXPECT_EQ(2 * SiteEngagementScore::GetMaxPointsPerDay(),
|
| + score_.GetTotalScore());
|
| }
|
|
|
| // Accumulate score on many consecutive days and ensure the score doesn't exceed
|
| @@ -158,10 +164,10 @@ TEST_F(SiteEngagementScoreTest, AccumulateALotOnManyDays) {
|
|
|
| EXPECT_EQ(std::min(SiteEngagementScore::kMaxPoints,
|
| (i + 1) * SiteEngagementScore::GetMaxPointsPerDay()),
|
| - score_.GetScore());
|
| + score_.GetTotalScore());
|
| }
|
|
|
| - EXPECT_EQ(SiteEngagementScore::kMaxPoints, score_.GetScore());
|
| + EXPECT_EQ(SiteEngagementScore::kMaxPoints, score_.GetTotalScore());
|
| }
|
|
|
| // Accumulate a little on many consecutive days and ensure the score doesn't
|
| @@ -180,10 +186,10 @@ TEST_F(SiteEngagementScoreTest, AccumulateALittleOnManyDays) {
|
| std::min(SiteEngagementScore::kMaxPoints,
|
| (i + 1) * kLessAccumulationsThanNeededToMaxDailyEngagement *
|
| SiteEngagementScore::GetNavigationPoints()),
|
| - score_.GetScore());
|
| + score_.GetTotalScore());
|
| }
|
|
|
| - EXPECT_EQ(SiteEngagementScore::kMaxPoints, score_.GetScore());
|
| + EXPECT_EQ(SiteEngagementScore::kMaxPoints, score_.GetTotalScore());
|
| }
|
|
|
| // Accumulate a bit, then check the score decays properly for a range of times.
|
| @@ -199,14 +205,14 @@ TEST_F(SiteEngagementScoreTest, ScoresDecayOverTime) {
|
| score_.AddPoints(SiteEngagementScore::GetNavigationPoints());
|
| }
|
|
|
| - EXPECT_EQ(SiteEngagementScore::kMaxPoints, score_.GetScore());
|
| + EXPECT_EQ(SiteEngagementScore::kMaxPoints, score_.GetTotalScore());
|
|
|
| // The score should not have decayed before the first decay period has
|
| // elapsed.
|
| test_clock_.SetNow(current_day +
|
| base::TimeDelta::FromHours(
|
| SiteEngagementScore::GetDecayPeriodInHours() - 1));
|
| - EXPECT_EQ(SiteEngagementScore::kMaxPoints, score_.GetScore());
|
| + EXPECT_EQ(SiteEngagementScore::kMaxPoints, score_.GetTotalScore());
|
|
|
| // The score should have decayed by one chunk after one decay period has
|
| // elapsed.
|
| @@ -215,7 +221,7 @@ TEST_F(SiteEngagementScoreTest, ScoresDecayOverTime) {
|
| base::TimeDelta::FromHours(SiteEngagementScore::GetDecayPeriodInHours()));
|
| EXPECT_EQ(
|
| SiteEngagementScore::kMaxPoints - SiteEngagementScore::GetDecayPoints(),
|
| - score_.GetScore());
|
| + score_.GetTotalScore());
|
|
|
| // The score should have decayed by the right number of chunks after a few
|
| // decay periods have elapsed.
|
| @@ -226,14 +232,14 @@ TEST_F(SiteEngagementScoreTest, ScoresDecayOverTime) {
|
| EXPECT_EQ(SiteEngagementScore::kMaxPoints -
|
| kLessPeriodsThanNeededToDecayMaxScore *
|
| SiteEngagementScore::GetDecayPoints(),
|
| - score_.GetScore());
|
| + score_.GetTotalScore());
|
|
|
| // The score should not decay below zero.
|
| test_clock_.SetNow(
|
| current_day +
|
| base::TimeDelta::FromHours(kMorePeriodsThanNeededToDecayMaxScore *
|
| SiteEngagementScore::GetDecayPeriodInHours()));
|
| - EXPECT_EQ(0, score_.GetScore());
|
| + EXPECT_EQ(0, score_.GetTotalScore());
|
| }
|
|
|
| // Test that any expected decays are applied before adding points.
|
| @@ -251,7 +257,7 @@ TEST_F(SiteEngagementScoreTest, DecaysAppliedBeforeAdd) {
|
|
|
| double initial_score = kLessDaysThanNeededToMaxTotalEngagement *
|
| SiteEngagementScore::GetMaxPointsPerDay();
|
| - EXPECT_EQ(initial_score, score_.GetScore());
|
| + EXPECT_EQ(initial_score, score_.GetTotalScore());
|
|
|
| // Go forward a few decay periods.
|
| test_clock_.SetNow(
|
| @@ -262,12 +268,12 @@ TEST_F(SiteEngagementScoreTest, DecaysAppliedBeforeAdd) {
|
| double decayed_score = initial_score -
|
| kLessPeriodsThanNeededToDecayMaxScore *
|
| SiteEngagementScore::GetDecayPoints();
|
| - EXPECT_EQ(decayed_score, score_.GetScore());
|
| + EXPECT_EQ(decayed_score, score_.GetTotalScore());
|
|
|
| // Now add some points.
|
| score_.AddPoints(SiteEngagementScore::GetNavigationPoints());
|
| EXPECT_EQ(decayed_score + SiteEngagementScore::GetNavigationPoints(),
|
| - score_.GetScore());
|
| + score_.GetTotalScore());
|
| }
|
|
|
| // Test that going back in time is handled properly.
|
| @@ -278,7 +284,7 @@ TEST_F(SiteEngagementScoreTest, GoBackInTime) {
|
| for (int i = 0; i < kMoreAccumulationsThanNeededToMaxDailyEngagement; ++i)
|
| score_.AddPoints(SiteEngagementScore::GetNavigationPoints());
|
|
|
| - EXPECT_EQ(SiteEngagementScore::GetMaxPointsPerDay(), score_.GetScore());
|
| + EXPECT_EQ(SiteEngagementScore::GetMaxPointsPerDay(), score_.GetTotalScore());
|
|
|
| // Adding to the score on an earlier date should be treated like another day,
|
| // and should not cause any decay.
|
| @@ -291,10 +297,11 @@ TEST_F(SiteEngagementScoreTest, GoBackInTime) {
|
| std::min(SiteEngagementScore::GetMaxPointsPerDay(),
|
| (i + 1) * SiteEngagementScore::GetNavigationPoints());
|
| EXPECT_EQ(day_score + SiteEngagementScore::GetMaxPointsPerDay(),
|
| - score_.GetScore());
|
| + score_.GetTotalScore());
|
| }
|
|
|
| - EXPECT_EQ(2 * SiteEngagementScore::GetMaxPointsPerDay(), score_.GetScore());
|
| + EXPECT_EQ(2 * SiteEngagementScore::GetMaxPointsPerDay(),
|
| + score_.GetTotalScore());
|
| }
|
|
|
| // Test that scores are read / written correctly from / to empty score
|
| @@ -339,32 +346,32 @@ TEST_F(SiteEngagementScoreTest, FirstDailyEngagementBonus) {
|
|
|
| // The first engagement event gets the bonus.
|
| score1.AddPoints(0.5);
|
| - EXPECT_EQ(1.0, score1.GetScore());
|
| + EXPECT_EQ(1.0, score1.GetTotalScore());
|
|
|
| // Subsequent events do not.
|
| score1.AddPoints(0.5);
|
| - EXPECT_EQ(1.5, score1.GetScore());
|
| + EXPECT_EQ(1.5, score1.GetTotalScore());
|
|
|
| // Bonuses are awarded independently between scores.
|
| score2.AddPoints(1.0);
|
| - EXPECT_EQ(1.5, score2.GetScore());
|
| + EXPECT_EQ(1.5, score2.GetTotalScore());
|
| score2.AddPoints(1.0);
|
| - EXPECT_EQ(2.5, score2.GetScore());
|
| + EXPECT_EQ(2.5, score2.GetTotalScore());
|
|
|
| test_clock_.SetNow(current_day + base::TimeDelta::FromDays(1));
|
|
|
| // The first event for the next day gets the bonus.
|
| score1.AddPoints(0.5);
|
| - EXPECT_EQ(2.5, score1.GetScore());
|
| + EXPECT_EQ(2.5, score1.GetTotalScore());
|
|
|
| // Subsequent events do not.
|
| score1.AddPoints(0.5);
|
| - EXPECT_EQ(3.0, score1.GetScore());
|
| + EXPECT_EQ(3.0, score1.GetTotalScore());
|
|
|
| score2.AddPoints(1.0);
|
| - EXPECT_EQ(4.0, score2.GetScore());
|
| + EXPECT_EQ(4.0, score2.GetTotalScore());
|
| score2.AddPoints(1.0);
|
| - EXPECT_EQ(5.0, score2.GetScore());
|
| + EXPECT_EQ(5.0, score2.GetTotalScore());
|
| }
|
|
|
| // Test that resetting a score has the correct properties.
|
| @@ -373,26 +380,27 @@ TEST_F(SiteEngagementScoreTest, Reset) {
|
|
|
| test_clock_.SetNow(current_day);
|
| score_.AddPoints(SiteEngagementScore::GetNavigationPoints());
|
| - EXPECT_EQ(SiteEngagementScore::GetNavigationPoints(), score_.GetScore());
|
| + EXPECT_EQ(SiteEngagementScore::GetNavigationPoints(), score_.GetTotalScore());
|
|
|
| current_day += base::TimeDelta::FromDays(7);
|
| test_clock_.SetNow(current_day);
|
|
|
| score_.Reset(20.0, current_day);
|
| - EXPECT_DOUBLE_EQ(20.0, score_.GetScore());
|
| + EXPECT_DOUBLE_EQ(20.0, score_.GetTotalScore());
|
| EXPECT_DOUBLE_EQ(0, score_.points_added_today_);
|
| EXPECT_EQ(current_day, score_.last_engagement_time_);
|
| EXPECT_TRUE(score_.last_shortcut_launch_time_.is_null());
|
|
|
| // Adding points after the reset should work as normal.
|
| score_.AddPoints(5);
|
| - EXPECT_EQ(25.0, score_.GetScore());
|
| + EXPECT_EQ(25.0, score_.GetTotalScore());
|
|
|
| // The decay should happen one decay period from the current time.
|
| test_clock_.SetNow(current_day +
|
| base::TimeDelta::FromHours(
|
| SiteEngagementScore::GetDecayPeriodInHours() + 1));
|
| - EXPECT_EQ(25.0 - SiteEngagementScore::GetDecayPoints(), score_.GetScore());
|
| + EXPECT_EQ(25.0 - SiteEngagementScore::GetDecayPoints(),
|
| + score_.GetTotalScore());
|
|
|
| // Ensure that manually setting a time works as expected.
|
| score_.AddPoints(5);
|
| @@ -400,7 +408,7 @@ TEST_F(SiteEngagementScoreTest, Reset) {
|
| base::Time now = test_clock_.Now();
|
| score_.Reset(10.0, now);
|
|
|
| - EXPECT_DOUBLE_EQ(10.0, score_.GetScore());
|
| + EXPECT_DOUBLE_EQ(10.0, score_.GetTotalScore());
|
| EXPECT_DOUBLE_EQ(0, score_.points_added_today_);
|
| EXPECT_EQ(now, score_.last_engagement_time_);
|
| EXPECT_TRUE(score_.last_shortcut_launch_time_.is_null());
|
| @@ -413,7 +421,7 @@ TEST_F(SiteEngagementScoreTest, Reset) {
|
| score_.Reset(15.0, now);
|
|
|
| // 5 bonus from the last shortcut launch.
|
| - EXPECT_DOUBLE_EQ(20.0, score_.GetScore());
|
| + EXPECT_DOUBLE_EQ(20.0, score_.GetTotalScore());
|
| EXPECT_DOUBLE_EQ(0, score_.points_added_today_);
|
| EXPECT_EQ(now, score_.last_engagement_time_);
|
| EXPECT_EQ(old_now, score_.last_shortcut_launch_time_);
|
| @@ -431,19 +439,60 @@ TEST_F(SiteEngagementScoreTest, ProportionalDecay) {
|
| score_.AddPoints(2.0);
|
| current_day += base::TimeDelta::FromDays(7);
|
| test_clock_.SetNow(current_day);
|
| - EXPECT_DOUBLE_EQ(1.0, score_.GetScore());
|
| + EXPECT_DOUBLE_EQ(1.0, score_.GetTotalScore());
|
|
|
| // 3 decay periods, expect the score to be halved 3 times.
|
| score_.AddPoints(15.0);
|
| current_day += base::TimeDelta::FromDays(21);
|
| test_clock_.SetNow(current_day);
|
| - EXPECT_DOUBLE_EQ(2.0, score_.GetScore());
|
| + EXPECT_DOUBLE_EQ(2.0, score_.GetTotalScore());
|
|
|
| // Ensure point removal happens after proportional decay.
|
| score_.AddPoints(4.0);
|
| - EXPECT_DOUBLE_EQ(6.0, score_.GetScore());
|
| + EXPECT_DOUBLE_EQ(6.0, score_.GetTotalScore());
|
| SetParamValue(SiteEngagementScore::DECAY_POINTS, 2.0);
|
| current_day += base::TimeDelta::FromDays(7);
|
| test_clock_.SetNow(current_day);
|
| - EXPECT_NEAR(1.0, score_.GetScore(), kMaxRoundingDeviation);
|
| + EXPECT_NEAR(1.0, score_.GetTotalScore(), kMaxRoundingDeviation);
|
| +}
|
| +
|
| +// Verify that GetDetails fills out all fields correctly.
|
| +TEST_F(SiteEngagementScoreTest, GetDetails) {
|
| + // Advance the clock, otherwise Now() is the same as the null Time value.
|
| + test_clock_.Advance(base::TimeDelta::FromDays(365));
|
| +
|
| + GURL url("http://www.google.com/");
|
| +
|
| + // Replace |score_| with one with an actual URL, and with a settings map.
|
| + HostContentSettingsMap* settings_map =
|
| + HostContentSettingsMapFactory::GetForProfile(profile());
|
| + score_ = SiteEngagementScore(&test_clock_, url, settings_map);
|
| +
|
| + // Initially all component scores should be zero.
|
| + mojom::SiteEngagementDetails details = score_.GetDetails();
|
| + EXPECT_DOUBLE_EQ(0.0, details.total_score);
|
| + EXPECT_DOUBLE_EQ(0.0, details.installed_bonus);
|
| + EXPECT_DOUBLE_EQ(0.0, details.notifications_bonus);
|
| + EXPECT_DOUBLE_EQ(0.0, details.base_score);
|
| + EXPECT_EQ(url, details.origin);
|
| +
|
| + // Add notifications permission and verify that impacts the correct bonus,
|
| + // and the total.
|
| + settings_map->SetContentSettingDefaultScope(
|
| + url, url, CONTENT_SETTINGS_TYPE_NOTIFICATIONS, std::string(),
|
| + CONTENT_SETTING_ALLOW);
|
| + details = score_.GetDetails();
|
| + EXPECT_DOUBLE_EQ(details.notifications_bonus, details.total_score);
|
| + EXPECT_DOUBLE_EQ(0.0, details.installed_bonus);
|
| + EXPECT_LT(0.0, details.notifications_bonus);
|
| + EXPECT_DOUBLE_EQ(0.0, details.base_score);
|
| +
|
| + // Simulate the app having been launched.
|
| + score_.set_last_shortcut_launch_time(test_clock_.Now());
|
| + details = score_.GetDetails();
|
| + EXPECT_DOUBLE_EQ(details.installed_bonus + details.notifications_bonus,
|
| + details.total_score);
|
| + EXPECT_LT(0.0, details.installed_bonus);
|
| + EXPECT_LT(0.0, details.notifications_bonus);
|
| + EXPECT_DOUBLE_EQ(0.0, details.base_score);
|
| }
|
|
|