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

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

Issue 1986033002: Implement an observer interface for the site engagement service. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@site-engagement-refactor
Patch Set: Convert to an observer interface Created 4 years, 7 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_unittest.cc
diff --git a/chrome/browser/engagement/site_engagement_service_unittest.cc b/chrome/browser/engagement/site_engagement_service_unittest.cc
index e43d6d63f38d409f1452d918097426f4ac572b93..fd08ff48ec4d8f37768009c396b79fb6831fc70d 100644
--- a/chrome/browser/engagement/site_engagement_service_unittest.cc
+++ b/chrome/browser/engagement/site_engagement_service_unittest.cc
@@ -97,6 +97,46 @@ std::unique_ptr<KeyedService> BuildTestHistoryService(
} // namespace
+class ObserverTester : public SiteEngagementObserver {
+ public:
+ ObserverTester(SiteEngagementService* service, const GURL& url, double score)
+ : SiteEngagementObserver(service),
+ url_(url),
+ score_(score),
+ callback_called_(false),
+ run_loop_() {}
+
+ void OnEngagementIncreased(const SiteEngagementService* service,
+ const GURL& url,
+ double score) override {
+ EXPECT_EQ(url_, url);
+ EXPECT_EQ(score_, score);
+ set_callback_called(true);
+ run_loop_.Quit();
+ }
+
+ void Wait() { run_loop_.Run(); }
+
+ bool callback_called() { return callback_called_; }
+ void set_callback_called(bool callback_called) {
+ callback_called_ = callback_called;
+ }
+
+ void UpdateExpectations(const GURL& url, double score) {
calamity 2016/05/24 08:09:33 Unused.
dominickn 2016/05/25 07:21:32 Done.
+ url_ = url;
+ score_ = score;
+ set_callback_called(false);
+ }
+
+ private:
+ GURL url_;
+ double score_;
+ bool callback_called_;
+ base::RunLoop run_loop_;
+
+ DISALLOW_COPY_AND_ASSIGN(ObserverTester);
+};
+
class SiteEngagementServiceTest : public ChromeRenderViewHostTestHarness {
public:
void SetUp() override {
@@ -983,6 +1023,54 @@ TEST_F(SiteEngagementServiceTest, EngagementLevel) {
url2, SiteEngagementService::ENGAGEMENT_LEVEL_MAX));
}
+TEST_F(SiteEngagementServiceTest, Observers) {
+ SiteEngagementService* service = SiteEngagementService::Get(profile());
+
+ GURL url_score_1("http://www.google.com/maps");
+ GURL url_score_2("http://www.google.com/drive");
+ GURL url_score_3("http://www.google.com/");
+ GURL url_not_called("https://www.google.com/");
+
+ // Create an observer and Observe(nullptr).
+ ObserverTester tester_not_called(service, url_not_called, 1);
+ tester_not_called.Observe(nullptr);
+
+ {
+ // Create an observer for score 1.
+ ObserverTester tester(service, url_score_1, 1);
+ service->AddPoints(url_score_1, 1);
+ tester.Wait();
+ EXPECT_TRUE(tester.callback_called());
+ EXPECT_FALSE(tester_not_called.callback_called());
+ tester.Observe(nullptr);
+ }
+
+ {
+ // Update observer for score 1.05
+ ObserverTester tester(service, url_score_2, 1.05);
+ service->AddPoints(url_score_2, 0.05);
+ tester.Wait();
+ EXPECT_TRUE(tester.callback_called());
+ EXPECT_FALSE(tester_not_called.callback_called());
+ tester.Observe(nullptr);
+ }
+
+ // Add two observers for score 1.55.
+ {
+ ObserverTester tester_1(service, url_score_3, 1.55);
+ ObserverTester tester_2(service, url_score_3, 1.55);
+ service->AddPoints(url_score_3, 0.5);
+ tester_1.Wait();
+ tester_2.Wait();
+
+ EXPECT_TRUE(tester_1.callback_called());
+ EXPECT_TRUE(tester_2.callback_called());
+ EXPECT_FALSE(tester_not_called.callback_called());
+ tester_1.Observe(nullptr);
+ tester_2.Observe(nullptr);
+ }
+}
+
TEST_F(SiteEngagementServiceTest, ScoreDecayHistograms) {
base::SimpleTestClock* clock = new base::SimpleTestClock();
std::unique_ptr<SiteEngagementService> service(

Powered by Google App Engine
This is Rietveld 408576698