| Index: chrome/browser/engagement/site_engagement_eviction_policy_unittest.cc
|
| diff --git a/chrome/browser/engagement/site_engagement_eviction_policy_unittest.cc b/chrome/browser/engagement/site_engagement_eviction_policy_unittest.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..5cd7813b43ccd184ac550808ee13efc1ac28a968
|
| --- /dev/null
|
| +++ b/chrome/browser/engagement/site_engagement_eviction_policy_unittest.cc
|
| @@ -0,0 +1,96 @@
|
| +// Copyright 2015 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "chrome/browser/engagement/site_engagement_eviction_policy.h"
|
| +#include "chrome/browser/engagement/site_engagement_service.h"
|
| +#include "testing/gtest/include/gtest/gtest.h"
|
| +
|
| +namespace {
|
| +
|
| +const int64 kGlobalQuota = 25 * 1024;
|
| +
|
| +} // namespace
|
| +
|
| +class TestSiteEngagementScoreProvider : public SiteEngagementScoreProvider {
|
| + public:
|
| + TestSiteEngagementScoreProvider() {}
|
| +
|
| + ~TestSiteEngagementScoreProvider() {}
|
| +
|
| + int GetScore(const GURL& url) override { return engagement_score_map_[url]; }
|
| +
|
| + int GetTotalEngagementPoints() override {
|
| + int total = 0;
|
| + for (const auto& site : engagement_score_map_)
|
| + total += site.second;
|
| + return total;
|
| + }
|
| +
|
| + void SetScore(const GURL& origin, int score) {
|
| + engagement_score_map_[origin] = score;
|
| + }
|
| +
|
| + private:
|
| + std::map<GURL, int> engagement_score_map_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(TestSiteEngagementScoreProvider);
|
| +};
|
| +
|
| +class SiteEngagementEvictionPolicyTest : public testing::Test {
|
| + public:
|
| + SiteEngagementEvictionPolicyTest()
|
| + : score_provider_(new TestSiteEngagementScoreProvider()) {}
|
| +
|
| + ~SiteEngagementEvictionPolicyTest() override {}
|
| +
|
| + GURL CalculateEvictionOrigin(const std::map<GURL, int64>& usage) {
|
| + return SiteEngagementEvictionPolicy::CalculateEvictionOrigin(
|
| + score_provider_, usage, kGlobalQuota);
|
| + }
|
| +
|
| + TestSiteEngagementScoreProvider* score_provider() { return score_provider_; }
|
| +
|
| + private:
|
| + TestSiteEngagementScoreProvider* score_provider_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(SiteEngagementEvictionPolicyTest);
|
| +};
|
| +
|
| +TEST_F(SiteEngagementEvictionPolicyTest, GetEvictionOrigin) {
|
| + GURL url1("http://www.google.com");
|
| + GURL url2("http://www.example.com");
|
| + GURL url3("http://www.spam.me");
|
| +
|
| + std::map<GURL, int64> usage;
|
| + usage[url1] = 10 * 1024;
|
| + usage[url2] = 10 * 1024;
|
| + usage[url3] = 10 * 1024;
|
| +
|
| + score_provider()->SetScore(url1, 50);
|
| + score_provider()->SetScore(url2, 25);
|
| +
|
| + // When 3 sites have equal usage, evict the site with the least engagement.
|
| + EXPECT_EQ(url3, CalculateEvictionOrigin(usage));
|
| +
|
| + usage[url2] = usage[url3] + 10;
|
| +
|
| + // Now |url2| has the most usage but |url3| has the least engagement score so
|
| + // one of them should be evicted. In this case the heuristic chooses |url3|.
|
| + EXPECT_EQ(url3, CalculateEvictionOrigin(usage));
|
| +
|
| + // But exceeding allocated usage too much will still result in being evicted
|
| + // even though the engagement with |url2| is higher.
|
| + usage[url2] = 15 * 1024;
|
| + EXPECT_EQ(url2, CalculateEvictionOrigin(usage));
|
| +
|
| + // When all origins have the same engagement, the origin with the highest
|
| + // usage is evicted.
|
| + score_provider()->SetScore(url1, 50);
|
| + score_provider()->SetScore(url2, 50);
|
| + score_provider()->SetScore(url3, 50);
|
| +
|
| + usage[url2] = 10 * 1024;
|
| + usage[url3] = 20 * 1024;
|
| + EXPECT_EQ(url3, CalculateEvictionOrigin(usage));
|
| +}
|
|
|