OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/engagement/site_engagement_service.h" | 5 #include "chrome/browser/engagement/site_engagement_service.h" |
6 | 6 |
7 #include <utility> | 7 #include <utility> |
8 | 8 |
9 #include "base/files/scoped_temp_dir.h" | 9 #include "base/files/scoped_temp_dir.h" |
10 #include "base/macros.h" | 10 #include "base/macros.h" |
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
147 | 147 |
148 class SiteEngagementServiceTest : public ChromeRenderViewHostTestHarness { | 148 class SiteEngagementServiceTest : public ChromeRenderViewHostTestHarness { |
149 public: | 149 public: |
150 void SetUp() override { | 150 void SetUp() override { |
151 ChromeRenderViewHostTestHarness::SetUp(); | 151 ChromeRenderViewHostTestHarness::SetUp(); |
152 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); | 152 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); |
153 g_temp_history_dir = temp_dir_.GetPath(); | 153 g_temp_history_dir = temp_dir_.GetPath(); |
154 HistoryServiceFactory::GetInstance()->SetTestingFactory( | 154 HistoryServiceFactory::GetInstance()->SetTestingFactory( |
155 profile(), &BuildTestHistoryService); | 155 profile(), &BuildTestHistoryService); |
156 SiteEngagementScore::SetParamValuesForTesting(); | 156 SiteEngagementScore::SetParamValuesForTesting(); |
| 157 clock_ = new base::SimpleTestClock(); |
| 158 service_ = base::WrapUnique( |
| 159 new SiteEngagementService(profile(), base::WrapUnique(clock_))); |
| 160 } |
| 161 |
| 162 void TearDown() override { |
| 163 service_->Shutdown(); |
| 164 service_.reset(); |
| 165 ChromeRenderViewHostTestHarness::TearDown(); |
157 } | 166 } |
158 | 167 |
159 void NavigateWithTransitionAndExpectHigherScore( | 168 void NavigateWithTransitionAndExpectHigherScore( |
160 SiteEngagementService* service, | 169 SiteEngagementService* service, |
161 const GURL& url, | 170 const GURL& url, |
162 ui::PageTransition transition) { | 171 ui::PageTransition transition) { |
163 double prev_score = service->GetScore(url); | 172 double prev_score = service->GetScore(url); |
164 controller().LoadURL(url, content::Referrer(), transition, std::string()); | 173 controller().LoadURL(url, content::Referrer(), transition, std::string()); |
165 int pending_id = controller().GetPendingEntry()->GetUniqueID(); | 174 int pending_id = controller().GetPendingEntry()->GetUniqueID(); |
166 content::WebContentsTester::For(web_contents()) | 175 content::WebContentsTester::For(web_contents()) |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
198 base::RunLoop run_loop; | 207 base::RunLoop run_loop; |
199 content::BrowserThread::PostTaskAndReply( | 208 content::BrowserThread::PostTaskAndReply( |
200 thread_id, FROM_HERE, | 209 thread_id, FROM_HERE, |
201 base::Bind(&SiteEngagementServiceTest::CheckScoreFromSettings, | 210 base::Bind(&SiteEngagementServiceTest::CheckScoreFromSettings, |
202 base::Unretained(this), settings_map, url, &score), | 211 base::Unretained(this), settings_map, url, &score), |
203 run_loop.QuitClosure()); | 212 run_loop.QuitClosure()); |
204 run_loop.Run(); | 213 run_loop.Run(); |
205 return score; | 214 return score; |
206 } | 215 } |
207 | 216 |
208 private: | 217 protected: |
209 void CheckScoreFromSettings(HostContentSettingsMap* settings_map, | 218 void CheckScoreFromSettings(HostContentSettingsMap* settings_map, |
210 const GURL& url, | 219 const GURL& url, |
211 double *score) { | 220 double *score) { |
212 *score = SiteEngagementService::GetScoreFromSettings(settings_map, url); | 221 *score = SiteEngagementService::GetScoreFromSettings(settings_map, url); |
213 } | 222 } |
214 | 223 |
215 base::ScopedTempDir temp_dir_; | 224 base::ScopedTempDir temp_dir_; |
| 225 std::unique_ptr<SiteEngagementService> service_; |
| 226 base::SimpleTestClock* clock_ = nullptr; // Owned by the service. |
216 }; | 227 }; |
217 | 228 |
218 TEST_F(SiteEngagementServiceTest, GetMedianEngagement) { | 229 TEST_F(SiteEngagementServiceTest, GetMedianEngagement) { |
219 SiteEngagementService* service = SiteEngagementService::Get(profile()); | 230 SiteEngagementService* service = SiteEngagementService::Get(profile()); |
220 ASSERT_TRUE(service); | 231 ASSERT_TRUE(service); |
221 | 232 |
222 GURL url1("http://www.google.com/"); | 233 GURL url1("http://www.google.com/"); |
223 GURL url2("https://www.google.com/"); | 234 GURL url2("https://www.google.com/"); |
224 GURL url3("https://drive.google.com/"); | 235 GURL url3("https://drive.google.com/"); |
225 GURL url4("https://maps.google.com/"); | 236 GURL url4("https://maps.google.com/"); |
(...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
414 service->HandleMediaPlaying(web_contents(), true); | 425 service->HandleMediaPlaying(web_contents(), true); |
415 EXPECT_EQ(0, service->GetScore(url3)); | 426 EXPECT_EQ(0, service->GetScore(url3)); |
416 | 427 |
417 NavigateAndCommit(url4); | 428 NavigateAndCommit(url4); |
418 service->HandleUserInput(web_contents(), | 429 service->HandleUserInput(web_contents(), |
419 SiteEngagementMetrics::ENGAGEMENT_KEYPRESS); | 430 SiteEngagementMetrics::ENGAGEMENT_KEYPRESS); |
420 EXPECT_EQ(0, service->GetScore(url4)); | 431 EXPECT_EQ(0, service->GetScore(url4)); |
421 } | 432 } |
422 | 433 |
423 TEST_F(SiteEngagementServiceTest, LastShortcutLaunch) { | 434 TEST_F(SiteEngagementServiceTest, LastShortcutLaunch) { |
424 base::SimpleTestClock* clock = new base::SimpleTestClock(); | |
425 std::unique_ptr<SiteEngagementService> service( | |
426 new SiteEngagementService(profile(), base::WrapUnique(clock))); | |
427 | |
428 base::HistogramTester histograms; | 435 base::HistogramTester histograms; |
429 | 436 |
430 base::Time current_day = GetReferenceTime(); | 437 base::Time current_day = GetReferenceTime(); |
431 clock->SetNow(current_day - base::TimeDelta::FromDays(5)); | 438 clock_->SetNow(current_day - base::TimeDelta::FromDays(5)); |
432 | 439 |
433 // The https and http versions of www.google.com should be separate. But | 440 // The https and http versions of www.google.com should be separate. But |
434 // different paths on the same origin should be treated the same. | 441 // different paths on the same origin should be treated the same. |
435 GURL url1("https://www.google.com/"); | 442 GURL url1("https://www.google.com/"); |
436 GURL url2("http://www.google.com/"); | 443 GURL url2("http://www.google.com/"); |
437 GURL url3("http://www.google.com/maps"); | 444 GURL url3("http://www.google.com/maps"); |
438 | 445 |
439 EXPECT_EQ(0, service->GetScore(url1)); | 446 EXPECT_EQ(0, service_->GetScore(url1)); |
440 EXPECT_EQ(0, service->GetScore(url2)); | 447 EXPECT_EQ(0, service_->GetScore(url2)); |
441 EXPECT_EQ(0, service->GetScore(url3)); | 448 EXPECT_EQ(0, service_->GetScore(url3)); |
442 | 449 |
443 service->SetLastShortcutLaunchTime(url2); | 450 service_->SetLastShortcutLaunchTime(url2); |
444 histograms.ExpectTotalCount( | 451 histograms.ExpectTotalCount( |
445 SiteEngagementMetrics::kDaysSinceLastShortcutLaunchHistogram, 0); | 452 SiteEngagementMetrics::kDaysSinceLastShortcutLaunchHistogram, 0); |
446 histograms.ExpectUniqueSample( | 453 histograms.ExpectUniqueSample( |
447 SiteEngagementMetrics::kEngagementTypeHistogram, | 454 SiteEngagementMetrics::kEngagementTypeHistogram, |
448 SiteEngagementMetrics::ENGAGEMENT_WEBAPP_SHORTCUT_LAUNCH, 1); | 455 SiteEngagementMetrics::ENGAGEMENT_WEBAPP_SHORTCUT_LAUNCH, 1); |
449 | 456 |
450 service->AddPoints(url1, 2.0); | 457 service_->AddPoints(url1, 2.0); |
451 service->AddPoints(url2, 2.0); | 458 service_->AddPoints(url2, 2.0); |
452 clock->SetNow(current_day); | 459 clock_->SetNow(current_day); |
453 service->SetLastShortcutLaunchTime(url2); | 460 service_->SetLastShortcutLaunchTime(url2); |
454 | 461 |
455 histograms.ExpectTotalCount( | 462 histograms.ExpectTotalCount( |
456 SiteEngagementMetrics::kDaysSinceLastShortcutLaunchHistogram, 1); | 463 SiteEngagementMetrics::kDaysSinceLastShortcutLaunchHistogram, 1); |
457 histograms.ExpectTotalCount(SiteEngagementMetrics::kEngagementTypeHistogram, | 464 histograms.ExpectTotalCount(SiteEngagementMetrics::kEngagementTypeHistogram, |
458 4); | 465 4); |
459 histograms.ExpectBucketCount( | 466 histograms.ExpectBucketCount( |
460 SiteEngagementMetrics::kEngagementTypeHistogram, | 467 SiteEngagementMetrics::kEngagementTypeHistogram, |
461 SiteEngagementMetrics::ENGAGEMENT_WEBAPP_SHORTCUT_LAUNCH, 2); | 468 SiteEngagementMetrics::ENGAGEMENT_WEBAPP_SHORTCUT_LAUNCH, 2); |
462 histograms.ExpectBucketCount( | 469 histograms.ExpectBucketCount( |
463 SiteEngagementMetrics::kEngagementTypeHistogram, | 470 SiteEngagementMetrics::kEngagementTypeHistogram, |
464 SiteEngagementMetrics::ENGAGEMENT_FIRST_DAILY_ENGAGEMENT, 2); | 471 SiteEngagementMetrics::ENGAGEMENT_FIRST_DAILY_ENGAGEMENT, 2); |
465 | 472 |
466 EXPECT_DOUBLE_EQ(2.0, service->GetScore(url1)); | 473 EXPECT_DOUBLE_EQ(2.0, service_->GetScore(url1)); |
467 EXPECT_DOUBLE_EQ(7.0, service->GetScore(url2)); | 474 EXPECT_DOUBLE_EQ(7.0, service_->GetScore(url2)); |
468 | 475 |
469 clock->SetNow(GetReferenceTime() + base::TimeDelta::FromDays(1)); | 476 clock_->SetNow(GetReferenceTime() + base::TimeDelta::FromDays(1)); |
470 EXPECT_DOUBLE_EQ(2.0, service->GetScore(url1)); | 477 EXPECT_DOUBLE_EQ(2.0, service_->GetScore(url1)); |
471 EXPECT_DOUBLE_EQ(7.0, service->GetScore(url2)); | 478 EXPECT_DOUBLE_EQ(7.0, service_->GetScore(url2)); |
472 | 479 |
473 clock->SetNow(GetReferenceTime() + base::TimeDelta::FromDays(7)); | 480 clock_->SetNow(GetReferenceTime() + base::TimeDelta::FromDays(7)); |
474 EXPECT_DOUBLE_EQ(0.0, service->GetScore(url1)); | 481 EXPECT_DOUBLE_EQ(0.0, service_->GetScore(url1)); |
475 EXPECT_DOUBLE_EQ(5.0, service->GetScore(url2)); | 482 EXPECT_DOUBLE_EQ(5.0, service_->GetScore(url2)); |
476 | 483 |
477 service->AddPoints(url1, 1.0); | 484 service_->AddPoints(url1, 1.0); |
478 clock->SetNow(GetReferenceTime() + base::TimeDelta::FromDays(10)); | 485 clock_->SetNow(GetReferenceTime() + base::TimeDelta::FromDays(10)); |
479 EXPECT_DOUBLE_EQ(1.0, service->GetScore(url1)); | 486 EXPECT_DOUBLE_EQ(1.0, service_->GetScore(url1)); |
480 EXPECT_DOUBLE_EQ(5.0, service->GetScore(url2)); | 487 EXPECT_DOUBLE_EQ(5.0, service_->GetScore(url2)); |
481 | 488 |
482 clock->SetNow(GetReferenceTime() + base::TimeDelta::FromDays(11)); | 489 clock_->SetNow(GetReferenceTime() + base::TimeDelta::FromDays(11)); |
483 EXPECT_DOUBLE_EQ(1.0, service->GetScore(url1)); | 490 EXPECT_DOUBLE_EQ(1.0, service_->GetScore(url1)); |
484 EXPECT_DOUBLE_EQ(0.0, service->GetScore(url2)); | 491 EXPECT_DOUBLE_EQ(0.0, service_->GetScore(url2)); |
485 } | 492 } |
486 | 493 |
487 TEST_F(SiteEngagementServiceTest, NotificationPermission) { | 494 TEST_F(SiteEngagementServiceTest, NotificationPermission) { |
488 base::SimpleTestClock* clock = new base::SimpleTestClock(); | |
489 std::unique_ptr<SiteEngagementService> service( | |
490 new SiteEngagementService(profile(), base::WrapUnique(clock))); | |
491 | |
492 GURL url1("https://www.google.com/"); | 495 GURL url1("https://www.google.com/"); |
493 GURL url2("http://www.google.com/"); | 496 GURL url2("http://www.google.com/"); |
494 GURL url3("https://drive.google.com/"); | 497 GURL url3("https://drive.google.com/"); |
495 clock->SetNow(GetReferenceTime()); | 498 clock_->SetNow(GetReferenceTime()); |
496 | 499 |
497 EXPECT_EQ(0, service->GetScore(url1)); | 500 EXPECT_EQ(0, service_->GetScore(url1)); |
498 EXPECT_EQ(0, service->GetScore(url2)); | 501 EXPECT_EQ(0, service_->GetScore(url2)); |
499 EXPECT_EQ(0, service->GetScore(url3)); | 502 EXPECT_EQ(0, service_->GetScore(url3)); |
500 | 503 |
501 HostContentSettingsMap* settings_map = | 504 HostContentSettingsMap* settings_map = |
502 HostContentSettingsMapFactory::GetForProfile(profile()); | 505 HostContentSettingsMapFactory::GetForProfile(profile()); |
503 | 506 |
504 settings_map->SetContentSettingDefaultScope( | 507 settings_map->SetContentSettingDefaultScope( |
505 url1, url1, CONTENT_SETTINGS_TYPE_NOTIFICATIONS, std::string(), | 508 url1, url1, CONTENT_SETTINGS_TYPE_NOTIFICATIONS, std::string(), |
506 CONTENT_SETTING_ALLOW); | 509 CONTENT_SETTING_ALLOW); |
507 | 510 |
508 settings_map->SetContentSettingDefaultScope( | 511 settings_map->SetContentSettingDefaultScope( |
509 url2, url2, CONTENT_SETTINGS_TYPE_NOTIFICATIONS, std::string(), | 512 url2, url2, CONTENT_SETTINGS_TYPE_NOTIFICATIONS, std::string(), |
510 CONTENT_SETTING_BLOCK); | 513 CONTENT_SETTING_BLOCK); |
511 | 514 |
512 settings_map->SetContentSettingDefaultScope( | 515 settings_map->SetContentSettingDefaultScope( |
513 url3, url3, CONTENT_SETTINGS_TYPE_NOTIFICATIONS, std::string(), | 516 url3, url3, CONTENT_SETTINGS_TYPE_NOTIFICATIONS, std::string(), |
514 CONTENT_SETTING_ASK); | 517 CONTENT_SETTING_ASK); |
515 | 518 |
516 EXPECT_EQ(5, service->GetScore(url1)); | 519 EXPECT_EQ(5, service_->GetScore(url1)); |
517 EXPECT_EQ(0, service->GetScore(url2)); | 520 EXPECT_EQ(0, service_->GetScore(url2)); |
518 EXPECT_EQ(0, service->GetScore(url3)); | 521 EXPECT_EQ(0, service_->GetScore(url3)); |
519 | 522 |
520 service->AddPoints(url1, 1.0); | 523 service_->AddPoints(url1, 1.0); |
521 service->AddPoints(url2, 3.0); | 524 service_->AddPoints(url2, 3.0); |
522 EXPECT_EQ(6, service->GetScore(url1)); | 525 EXPECT_EQ(6, service_->GetScore(url1)); |
523 EXPECT_EQ(3, service->GetScore(url2)); | 526 EXPECT_EQ(3, service_->GetScore(url2)); |
524 | 527 |
525 settings_map->SetContentSettingDefaultScope( | 528 settings_map->SetContentSettingDefaultScope( |
526 url1, url1, CONTENT_SETTINGS_TYPE_NOTIFICATIONS, std::string(), | 529 url1, url1, CONTENT_SETTINGS_TYPE_NOTIFICATIONS, std::string(), |
527 CONTENT_SETTING_BLOCK); | 530 CONTENT_SETTING_BLOCK); |
528 | 531 |
529 EXPECT_EQ(1, service->GetScore(url1)); | 532 EXPECT_EQ(1, service_->GetScore(url1)); |
530 } | 533 } |
531 | 534 |
532 TEST_F(SiteEngagementServiceTest, CheckHistograms) { | 535 TEST_F(SiteEngagementServiceTest, CheckHistograms) { |
533 base::HistogramTester histograms; | 536 base::HistogramTester histograms; |
534 | 537 |
535 base::SimpleTestClock* clock = new base::SimpleTestClock(); | |
536 std::unique_ptr<SiteEngagementService> service( | |
537 new SiteEngagementService(profile(), base::WrapUnique(clock))); | |
538 | |
539 base::Time current_day = GetReferenceTime(); | 538 base::Time current_day = GetReferenceTime(); |
540 clock->SetNow(current_day); | 539 clock_->SetNow(current_day); |
541 | 540 |
542 // Histograms should start empty as the testing SiteEngagementService | 541 // Histograms should start empty as the testing SiteEngagementService |
543 // constructor does not record metrics. | 542 // constructor does not record metrics. |
544 histograms.ExpectTotalCount(SiteEngagementMetrics::kTotalEngagementHistogram, | 543 histograms.ExpectTotalCount(SiteEngagementMetrics::kTotalEngagementHistogram, |
545 0); | 544 0); |
546 histograms.ExpectTotalCount(SiteEngagementMetrics::kTotalOriginsHistogram, 0); | 545 histograms.ExpectTotalCount(SiteEngagementMetrics::kTotalOriginsHistogram, 0); |
547 histograms.ExpectTotalCount(SiteEngagementMetrics::kMeanEngagementHistogram, | 546 histograms.ExpectTotalCount(SiteEngagementMetrics::kMeanEngagementHistogram, |
548 0); | 547 0); |
549 histograms.ExpectTotalCount(SiteEngagementMetrics::kMedianEngagementHistogram, | 548 histograms.ExpectTotalCount(SiteEngagementMetrics::kMedianEngagementHistogram, |
550 0); | 549 0); |
551 histograms.ExpectTotalCount(SiteEngagementMetrics::kEngagementScoreHistogram, | 550 histograms.ExpectTotalCount(SiteEngagementMetrics::kEngagementScoreHistogram, |
552 0); | 551 0); |
553 histograms.ExpectTotalCount( | 552 histograms.ExpectTotalCount( |
554 SiteEngagementMetrics::kEngagementScoreHistogramHTTP, 0); | 553 SiteEngagementMetrics::kEngagementScoreHistogramHTTP, 0); |
555 histograms.ExpectTotalCount( | 554 histograms.ExpectTotalCount( |
556 SiteEngagementMetrics::kEngagementScoreHistogramHTTPS, 0); | 555 SiteEngagementMetrics::kEngagementScoreHistogramHTTPS, 0); |
557 histograms.ExpectTotalCount( | 556 histograms.ExpectTotalCount( |
558 SiteEngagementMetrics::kOriginsWithMaxEngagementHistogram, 0); | 557 SiteEngagementMetrics::kOriginsWithMaxEngagementHistogram, 0); |
559 histograms.ExpectTotalCount( | 558 histograms.ExpectTotalCount( |
560 SiteEngagementMetrics::kOriginsWithMaxDailyEngagementHistogram, 0); | 559 SiteEngagementMetrics::kOriginsWithMaxDailyEngagementHistogram, 0); |
561 histograms.ExpectTotalCount( | 560 histograms.ExpectTotalCount( |
562 SiteEngagementMetrics::kPercentOriginsWithMaxEngagementHistogram, 0); | 561 SiteEngagementMetrics::kPercentOriginsWithMaxEngagementHistogram, 0); |
563 histograms.ExpectTotalCount(SiteEngagementMetrics::kEngagementTypeHistogram, | 562 histograms.ExpectTotalCount(SiteEngagementMetrics::kEngagementTypeHistogram, |
564 0); | 563 0); |
565 | 564 |
566 // Record metrics for an empty engagement system. | 565 // Record metrics for an empty engagement system. |
567 service->RecordMetrics(); | 566 service_->RecordMetrics(); |
568 | 567 |
569 histograms.ExpectUniqueSample( | 568 histograms.ExpectUniqueSample( |
570 SiteEngagementMetrics::kTotalEngagementHistogram, 0, 1); | 569 SiteEngagementMetrics::kTotalEngagementHistogram, 0, 1); |
571 histograms.ExpectUniqueSample(SiteEngagementMetrics::kTotalOriginsHistogram, | 570 histograms.ExpectUniqueSample(SiteEngagementMetrics::kTotalOriginsHistogram, |
572 0, 1); | 571 0, 1); |
573 histograms.ExpectTotalCount(SiteEngagementMetrics::kEngagementScoreHistogram, | 572 histograms.ExpectTotalCount(SiteEngagementMetrics::kEngagementScoreHistogram, |
574 0); | 573 0); |
575 histograms.ExpectTotalCount( | 574 histograms.ExpectTotalCount( |
576 SiteEngagementMetrics::kEngagementScoreHistogramHTTP, 0); | 575 SiteEngagementMetrics::kEngagementScoreHistogramHTTP, 0); |
577 histograms.ExpectTotalCount( | 576 histograms.ExpectTotalCount( |
(...skipping 10 matching lines...) Expand all Loading... |
588 SiteEngagementMetrics::kPercentOriginsWithMaxEngagementHistogram, 0, 1); | 587 SiteEngagementMetrics::kPercentOriginsWithMaxEngagementHistogram, 0, 1); |
589 histograms.ExpectTotalCount(SiteEngagementMetrics::kEngagementTypeHistogram, | 588 histograms.ExpectTotalCount(SiteEngagementMetrics::kEngagementTypeHistogram, |
590 0); | 589 0); |
591 | 590 |
592 const std::vector<std::string> engagement_bucket_histogram_names = | 591 const std::vector<std::string> engagement_bucket_histogram_names = |
593 SiteEngagementMetrics::GetEngagementBucketHistogramNames(); | 592 SiteEngagementMetrics::GetEngagementBucketHistogramNames(); |
594 | 593 |
595 for (const std::string& histogram_name : engagement_bucket_histogram_names) | 594 for (const std::string& histogram_name : engagement_bucket_histogram_names) |
596 histograms.ExpectTotalCount(histogram_name, 0); | 595 histograms.ExpectTotalCount(histogram_name, 0); |
597 | 596 |
598 clock->SetNow(clock->Now() + base::TimeDelta::FromMinutes(60)); | 597 clock_->SetNow(clock_->Now() + base::TimeDelta::FromMinutes(60)); |
599 | 598 |
600 // The https and http versions of www.google.com should be separate. | 599 // The https and http versions of www.google.com should be separate. |
601 GURL url1("https://www.google.com/"); | 600 GURL url1("https://www.google.com/"); |
602 GURL url2("http://www.google.com/"); | 601 GURL url2("http://www.google.com/"); |
603 GURL url3("http://drive.google.com/"); | 602 GURL url3("http://drive.google.com/"); |
604 | 603 |
605 NavigateAndCommit(url1); | 604 NavigateAndCommit(url1); |
606 service->HandleNavigation(web_contents(), ui::PAGE_TRANSITION_TYPED); | 605 service_->HandleNavigation(web_contents(), ui::PAGE_TRANSITION_TYPED); |
607 service->HandleUserInput(web_contents(), | 606 service_->HandleUserInput(web_contents(), |
608 SiteEngagementMetrics::ENGAGEMENT_KEYPRESS); | 607 SiteEngagementMetrics::ENGAGEMENT_KEYPRESS); |
609 service->HandleUserInput(web_contents(), | 608 service_->HandleUserInput(web_contents(), |
610 SiteEngagementMetrics::ENGAGEMENT_MOUSE); | 609 SiteEngagementMetrics::ENGAGEMENT_MOUSE); |
611 NavigateAndCommit(url2); | 610 NavigateAndCommit(url2); |
612 service->HandleMediaPlaying(web_contents(), true); | 611 service_->HandleMediaPlaying(web_contents(), true); |
613 | 612 |
614 histograms.ExpectTotalCount(SiteEngagementMetrics::kTotalEngagementHistogram, | 613 histograms.ExpectTotalCount(SiteEngagementMetrics::kTotalEngagementHistogram, |
615 2); | 614 2); |
616 histograms.ExpectTotalCount(SiteEngagementMetrics::kTotalOriginsHistogram, 2); | 615 histograms.ExpectTotalCount(SiteEngagementMetrics::kTotalOriginsHistogram, 2); |
617 histograms.ExpectBucketCount(SiteEngagementMetrics::kTotalOriginsHistogram, 0, | 616 histograms.ExpectBucketCount(SiteEngagementMetrics::kTotalOriginsHistogram, 0, |
618 1); | 617 1); |
619 histograms.ExpectBucketCount(SiteEngagementMetrics::kTotalOriginsHistogram, 1, | 618 histograms.ExpectBucketCount(SiteEngagementMetrics::kTotalOriginsHistogram, 1, |
620 1); | 619 1); |
621 histograms.ExpectTotalCount(SiteEngagementMetrics::kMeanEngagementHistogram, | 620 histograms.ExpectTotalCount(SiteEngagementMetrics::kMeanEngagementHistogram, |
622 2); | 621 2); |
(...skipping 23 matching lines...) Expand all Loading... |
646 histograms.ExpectBucketCount(SiteEngagementMetrics::kEngagementTypeHistogram, | 645 histograms.ExpectBucketCount(SiteEngagementMetrics::kEngagementTypeHistogram, |
647 SiteEngagementMetrics::ENGAGEMENT_MOUSE, 1); | 646 SiteEngagementMetrics::ENGAGEMENT_MOUSE, 1); |
648 histograms.ExpectBucketCount(SiteEngagementMetrics::kEngagementTypeHistogram, | 647 histograms.ExpectBucketCount(SiteEngagementMetrics::kEngagementTypeHistogram, |
649 SiteEngagementMetrics::ENGAGEMENT_MEDIA_HIDDEN, | 648 SiteEngagementMetrics::ENGAGEMENT_MEDIA_HIDDEN, |
650 1); | 649 1); |
651 histograms.ExpectBucketCount( | 650 histograms.ExpectBucketCount( |
652 SiteEngagementMetrics::kEngagementTypeHistogram, | 651 SiteEngagementMetrics::kEngagementTypeHistogram, |
653 SiteEngagementMetrics::ENGAGEMENT_FIRST_DAILY_ENGAGEMENT, 2); | 652 SiteEngagementMetrics::ENGAGEMENT_FIRST_DAILY_ENGAGEMENT, 2); |
654 | 653 |
655 // Navigations are still logged within the 1 hour refresh period | 654 // Navigations are still logged within the 1 hour refresh period |
656 clock->SetNow(clock->Now() + base::TimeDelta::FromMinutes(59)); | 655 clock_->SetNow(clock_->Now() + base::TimeDelta::FromMinutes(59)); |
657 | 656 |
658 NavigateAndCommit(url2); | 657 NavigateAndCommit(url2); |
659 service->HandleNavigation(web_contents(), ui::PAGE_TRANSITION_GENERATED); | 658 service_->HandleNavigation(web_contents(), ui::PAGE_TRANSITION_GENERATED); |
660 service->HandleNavigation(web_contents(), ui::PAGE_TRANSITION_AUTO_BOOKMARK); | 659 service_->HandleNavigation(web_contents(), ui::PAGE_TRANSITION_AUTO_BOOKMARK); |
661 | 660 |
662 histograms.ExpectTotalCount(SiteEngagementMetrics::kEngagementTypeHistogram, | 661 histograms.ExpectTotalCount(SiteEngagementMetrics::kEngagementTypeHistogram, |
663 8); | 662 8); |
664 histograms.ExpectBucketCount(SiteEngagementMetrics::kEngagementTypeHistogram, | 663 histograms.ExpectBucketCount(SiteEngagementMetrics::kEngagementTypeHistogram, |
665 SiteEngagementMetrics::ENGAGEMENT_NAVIGATION, 3); | 664 SiteEngagementMetrics::ENGAGEMENT_NAVIGATION, 3); |
666 histograms.ExpectBucketCount(SiteEngagementMetrics::kEngagementTypeHistogram, | 665 histograms.ExpectBucketCount(SiteEngagementMetrics::kEngagementTypeHistogram, |
667 SiteEngagementMetrics::ENGAGEMENT_KEYPRESS, 1); | 666 SiteEngagementMetrics::ENGAGEMENT_KEYPRESS, 1); |
668 histograms.ExpectBucketCount(SiteEngagementMetrics::kEngagementTypeHistogram, | 667 histograms.ExpectBucketCount(SiteEngagementMetrics::kEngagementTypeHistogram, |
669 SiteEngagementMetrics::ENGAGEMENT_MOUSE, 1); | 668 SiteEngagementMetrics::ENGAGEMENT_MOUSE, 1); |
670 histograms.ExpectBucketCount(SiteEngagementMetrics::kEngagementTypeHistogram, | 669 histograms.ExpectBucketCount(SiteEngagementMetrics::kEngagementTypeHistogram, |
671 SiteEngagementMetrics::ENGAGEMENT_MEDIA_HIDDEN, | 670 SiteEngagementMetrics::ENGAGEMENT_MEDIA_HIDDEN, |
672 1); | 671 1); |
673 histograms.ExpectBucketCount( | 672 histograms.ExpectBucketCount( |
674 SiteEngagementMetrics::kEngagementTypeHistogram, | 673 SiteEngagementMetrics::kEngagementTypeHistogram, |
675 SiteEngagementMetrics::ENGAGEMENT_FIRST_DAILY_ENGAGEMENT, 2); | 674 SiteEngagementMetrics::ENGAGEMENT_FIRST_DAILY_ENGAGEMENT, 2); |
676 | 675 |
677 // Update the hourly histograms again. | 676 // Update the hourly histograms again. |
678 clock->SetNow(clock->Now() + base::TimeDelta::FromMinutes(1)); | 677 clock_->SetNow(clock_->Now() + base::TimeDelta::FromMinutes(1)); |
679 | 678 |
680 NavigateAndCommit(url3); | 679 NavigateAndCommit(url3); |
681 service->HandleNavigation(web_contents(), ui::PAGE_TRANSITION_TYPED); | 680 service_->HandleNavigation(web_contents(), ui::PAGE_TRANSITION_TYPED); |
682 service->HandleMediaPlaying(web_contents(), false); | 681 service_->HandleMediaPlaying(web_contents(), false); |
683 NavigateAndCommit(url2); | 682 NavigateAndCommit(url2); |
684 service->HandleUserInput(web_contents(), | 683 service_->HandleUserInput(web_contents(), |
685 SiteEngagementMetrics::ENGAGEMENT_TOUCH_GESTURE); | 684 SiteEngagementMetrics::ENGAGEMENT_TOUCH_GESTURE); |
686 | 685 |
687 histograms.ExpectTotalCount(SiteEngagementMetrics::kTotalEngagementHistogram, | 686 histograms.ExpectTotalCount(SiteEngagementMetrics::kTotalEngagementHistogram, |
688 3); | 687 3); |
689 histograms.ExpectBucketCount(SiteEngagementMetrics::kTotalOriginsHistogram, 0, | 688 histograms.ExpectBucketCount(SiteEngagementMetrics::kTotalOriginsHistogram, 0, |
690 1); | 689 1); |
691 histograms.ExpectBucketCount(SiteEngagementMetrics::kTotalOriginsHistogram, 1, | 690 histograms.ExpectBucketCount(SiteEngagementMetrics::kTotalOriginsHistogram, 1, |
692 1); | 691 1); |
693 histograms.ExpectBucketCount(SiteEngagementMetrics::kTotalOriginsHistogram, 3, | 692 histograms.ExpectBucketCount(SiteEngagementMetrics::kTotalOriginsHistogram, 3, |
694 1); | 693 1); |
695 histograms.ExpectTotalCount(SiteEngagementMetrics::kMeanEngagementHistogram, | 694 histograms.ExpectTotalCount(SiteEngagementMetrics::kMeanEngagementHistogram, |
(...skipping 30 matching lines...) Expand all Loading... |
726 SiteEngagementMetrics::ENGAGEMENT_MEDIA_VISIBLE, | 725 SiteEngagementMetrics::ENGAGEMENT_MEDIA_VISIBLE, |
727 1); | 726 1); |
728 histograms.ExpectBucketCount(SiteEngagementMetrics::kEngagementTypeHistogram, | 727 histograms.ExpectBucketCount(SiteEngagementMetrics::kEngagementTypeHistogram, |
729 SiteEngagementMetrics::ENGAGEMENT_MEDIA_HIDDEN, | 728 SiteEngagementMetrics::ENGAGEMENT_MEDIA_HIDDEN, |
730 1); | 729 1); |
731 histograms.ExpectBucketCount( | 730 histograms.ExpectBucketCount( |
732 SiteEngagementMetrics::kEngagementTypeHistogram, | 731 SiteEngagementMetrics::kEngagementTypeHistogram, |
733 SiteEngagementMetrics::ENGAGEMENT_FIRST_DAILY_ENGAGEMENT, 3); | 732 SiteEngagementMetrics::ENGAGEMENT_FIRST_DAILY_ENGAGEMENT, 3); |
734 | 733 |
735 NavigateAndCommit(url1); | 734 NavigateAndCommit(url1); |
736 service->HandleNavigation(web_contents(), ui::PAGE_TRANSITION_GENERATED); | 735 service_->HandleNavigation(web_contents(), ui::PAGE_TRANSITION_GENERATED); |
737 service->HandleNavigation(web_contents(), ui::PAGE_TRANSITION_TYPED); | 736 service_->HandleNavigation(web_contents(), ui::PAGE_TRANSITION_TYPED); |
738 NavigateAndCommit(url2); | 737 NavigateAndCommit(url2); |
739 service->HandleUserInput(web_contents(), | 738 service_->HandleUserInput(web_contents(), |
740 SiteEngagementMetrics::ENGAGEMENT_SCROLL); | 739 SiteEngagementMetrics::ENGAGEMENT_SCROLL); |
741 NavigateAndCommit(url1); | 740 NavigateAndCommit(url1); |
742 service->HandleUserInput(web_contents(), | 741 service_->HandleUserInput(web_contents(), |
743 SiteEngagementMetrics::ENGAGEMENT_KEYPRESS); | 742 SiteEngagementMetrics::ENGAGEMENT_KEYPRESS); |
744 NavigateAndCommit(url3); | 743 NavigateAndCommit(url3); |
745 service->HandleUserInput(web_contents(), | 744 service_->HandleUserInput(web_contents(), |
746 SiteEngagementMetrics::ENGAGEMENT_MOUSE); | 745 SiteEngagementMetrics::ENGAGEMENT_MOUSE); |
747 | 746 |
748 histograms.ExpectTotalCount(SiteEngagementMetrics::kEngagementTypeHistogram, | 747 histograms.ExpectTotalCount(SiteEngagementMetrics::kEngagementTypeHistogram, |
749 17); | 748 17); |
750 histograms.ExpectBucketCount(SiteEngagementMetrics::kEngagementTypeHistogram, | 749 histograms.ExpectBucketCount(SiteEngagementMetrics::kEngagementTypeHistogram, |
751 SiteEngagementMetrics::ENGAGEMENT_NAVIGATION, 6); | 750 SiteEngagementMetrics::ENGAGEMENT_NAVIGATION, 6); |
752 histograms.ExpectBucketCount(SiteEngagementMetrics::kEngagementTypeHistogram, | 751 histograms.ExpectBucketCount(SiteEngagementMetrics::kEngagementTypeHistogram, |
753 SiteEngagementMetrics::ENGAGEMENT_KEYPRESS, 2); | 752 SiteEngagementMetrics::ENGAGEMENT_KEYPRESS, 2); |
754 histograms.ExpectBucketCount(SiteEngagementMetrics::kEngagementTypeHistogram, | 753 histograms.ExpectBucketCount(SiteEngagementMetrics::kEngagementTypeHistogram, |
755 SiteEngagementMetrics::ENGAGEMENT_MOUSE, 2); | 754 SiteEngagementMetrics::ENGAGEMENT_MOUSE, 2); |
756 histograms.ExpectBucketCount(SiteEngagementMetrics::kEngagementTypeHistogram, | 755 histograms.ExpectBucketCount(SiteEngagementMetrics::kEngagementTypeHistogram, |
757 SiteEngagementMetrics::ENGAGEMENT_TOUCH_GESTURE, | 756 SiteEngagementMetrics::ENGAGEMENT_TOUCH_GESTURE, |
758 1); | 757 1); |
759 histograms.ExpectBucketCount(SiteEngagementMetrics::kEngagementTypeHistogram, | 758 histograms.ExpectBucketCount(SiteEngagementMetrics::kEngagementTypeHistogram, |
760 SiteEngagementMetrics::ENGAGEMENT_SCROLL, 1); | 759 SiteEngagementMetrics::ENGAGEMENT_SCROLL, 1); |
761 histograms.ExpectBucketCount( | 760 histograms.ExpectBucketCount( |
762 SiteEngagementMetrics::kEngagementTypeHistogram, | 761 SiteEngagementMetrics::kEngagementTypeHistogram, |
763 SiteEngagementMetrics::ENGAGEMENT_FIRST_DAILY_ENGAGEMENT, 3); | 762 SiteEngagementMetrics::ENGAGEMENT_FIRST_DAILY_ENGAGEMENT, 3); |
764 | 763 |
765 // Advance an origin to the max for a day and advance the clock an hour before | 764 // Advance an origin to the max for a day and advance the clock an hour before |
766 // the last increment before max. Expect the histogram to be updated. | 765 // the last increment before max. Expect the histogram to be updated. |
767 NavigateAndCommit(url1); | 766 NavigateAndCommit(url1); |
768 for (int i = 0; i < 6; ++i) | 767 for (int i = 0; i < 6; ++i) |
769 service->HandleNavigation(web_contents(), ui::PAGE_TRANSITION_TYPED); | 768 service_->HandleNavigation(web_contents(), ui::PAGE_TRANSITION_TYPED); |
770 | 769 |
771 clock->SetNow(clock->Now() + base::TimeDelta::FromMinutes(60)); | 770 clock_->SetNow(clock_->Now() + base::TimeDelta::FromMinutes(60)); |
772 service->HandleNavigation(web_contents(), ui::PAGE_TRANSITION_TYPED); | 771 service_->HandleNavigation(web_contents(), ui::PAGE_TRANSITION_TYPED); |
773 | 772 |
774 histograms.ExpectTotalCount(SiteEngagementMetrics::kTotalEngagementHistogram, | 773 histograms.ExpectTotalCount(SiteEngagementMetrics::kTotalEngagementHistogram, |
775 4); | 774 4); |
776 histograms.ExpectBucketCount(SiteEngagementMetrics::kTotalOriginsHistogram, 0, | 775 histograms.ExpectBucketCount(SiteEngagementMetrics::kTotalOriginsHistogram, 0, |
777 1); | 776 1); |
778 histograms.ExpectBucketCount(SiteEngagementMetrics::kTotalOriginsHistogram, 1, | 777 histograms.ExpectBucketCount(SiteEngagementMetrics::kTotalOriginsHistogram, 1, |
779 1); | 778 1); |
780 histograms.ExpectBucketCount(SiteEngagementMetrics::kTotalOriginsHistogram, 3, | 779 histograms.ExpectBucketCount(SiteEngagementMetrics::kTotalOriginsHistogram, 3, |
781 2); | 780 2); |
782 histograms.ExpectTotalCount(SiteEngagementMetrics::kMeanEngagementHistogram, | 781 histograms.ExpectTotalCount(SiteEngagementMetrics::kMeanEngagementHistogram, |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
815 histograms.ExpectBucketCount(engagement_bucket_histogram_names[0], 33, 1); | 814 histograms.ExpectBucketCount(engagement_bucket_histogram_names[0], 33, 1); |
816 histograms.ExpectBucketCount(engagement_bucket_histogram_names[0], 66, 1); | 815 histograms.ExpectBucketCount(engagement_bucket_histogram_names[0], 66, 1); |
817 histograms.ExpectBucketCount(engagement_bucket_histogram_names[1], 33, 1); | 816 histograms.ExpectBucketCount(engagement_bucket_histogram_names[1], 33, 1); |
818 histograms.ExpectBucketCount(engagement_bucket_histogram_names[1], 66, 1); | 817 histograms.ExpectBucketCount(engagement_bucket_histogram_names[1], 66, 1); |
819 } | 818 } |
820 | 819 |
821 // Expect that sites that have reached zero engagement are cleaned up. Expect | 820 // Expect that sites that have reached zero engagement are cleaned up. Expect |
822 // engagement times to be reset if too much time has passed since the last | 821 // engagement times to be reset if too much time has passed since the last |
823 // engagement. | 822 // engagement. |
824 TEST_F(SiteEngagementServiceTest, CleanupEngagementScores) { | 823 TEST_F(SiteEngagementServiceTest, CleanupEngagementScores) { |
825 base::SimpleTestClock* clock = new base::SimpleTestClock(); | |
826 std::unique_ptr<SiteEngagementService> service( | |
827 new SiteEngagementService(profile(), base::WrapUnique(clock))); | |
828 | |
829 // Set the base time to be 3 weeks past the stale period in the past. | 824 // Set the base time to be 3 weeks past the stale period in the past. |
830 // Use a 1 second offset to make sure scores don't yet decay. | 825 // Use a 1 second offset to make sure scores don't yet decay. |
831 base::TimeDelta one_second = base::TimeDelta::FromSeconds(1); | 826 base::TimeDelta one_second = base::TimeDelta::FromSeconds(1); |
832 base::TimeDelta one_day = base::TimeDelta::FromDays(1); | 827 base::TimeDelta one_day = base::TimeDelta::FromDays(1); |
833 base::TimeDelta decay_period = | 828 base::TimeDelta decay_period = |
834 base::TimeDelta::FromHours(SiteEngagementScore::GetDecayPeriodInHours()); | 829 base::TimeDelta::FromHours(SiteEngagementScore::GetDecayPeriodInHours()); |
835 base::TimeDelta shorter_than_decay_period = decay_period - one_second; | 830 base::TimeDelta shorter_than_decay_period = decay_period - one_second; |
836 | 831 |
837 base::Time max_decay_time = GetReferenceTime() - service->GetMaxDecayPeriod(); | 832 base::Time max_decay_time = |
838 base::Time stale_time = GetReferenceTime() - service->GetStalePeriod(); | 833 GetReferenceTime() - service_->GetMaxDecayPeriod(); |
| 834 base::Time stale_time = GetReferenceTime() - service_->GetStalePeriod(); |
839 base::Time base_time = stale_time - shorter_than_decay_period * 4; | 835 base::Time base_time = stale_time - shorter_than_decay_period * 4; |
840 clock->SetNow(base_time); | 836 clock_->SetNow(base_time); |
841 | 837 |
842 // The https and http versions of www.google.com should be separate. | 838 // The https and http versions of www.google.com should be separate. |
843 GURL url1("https://www.google.com/"); | 839 GURL url1("https://www.google.com/"); |
844 GURL url2("http://www.google.com/"); | 840 GURL url2("http://www.google.com/"); |
845 GURL url3("http://maps.google.com/"); | 841 GURL url3("http://maps.google.com/"); |
846 GURL url4("http://drive.google.com/"); | 842 GURL url4("http://drive.google.com/"); |
847 | 843 |
848 EXPECT_EQ(0, service->GetScore(url1)); | 844 EXPECT_EQ(0, service_->GetScore(url1)); |
849 EXPECT_EQ(0, service->GetScore(url2)); | 845 EXPECT_EQ(0, service_->GetScore(url2)); |
850 EXPECT_EQ(0, service->GetScore(url3)); | 846 EXPECT_EQ(0, service_->GetScore(url3)); |
851 EXPECT_EQ(0, service->GetScore(url4)); | 847 EXPECT_EQ(0, service_->GetScore(url4)); |
852 | 848 |
853 // Add some points | 849 // Add some points |
854 service->AddPoints(url1, 1.0); | 850 service_->AddPoints(url1, 1.0); |
855 service->AddPoints(url2, 5.0); | 851 service_->AddPoints(url2, 5.0); |
856 EXPECT_EQ(1.0, service->GetScore(url1)); | 852 EXPECT_EQ(1.0, service_->GetScore(url1)); |
857 EXPECT_EQ(5.0, service->GetScore(url2)); | 853 EXPECT_EQ(5.0, service_->GetScore(url2)); |
858 | 854 |
859 // Add more to url2 over the next few days. Leave it completely alone after | 855 // Add more to url2 over the next few days. Leave it completely alone after |
860 // this. | 856 // this. |
861 clock->SetNow(base_time + one_day); | 857 clock_->SetNow(base_time + one_day); |
862 service->AddPoints(url2, 5.0); | 858 service_->AddPoints(url2, 5.0); |
863 EXPECT_EQ(10.0, service->GetScore(url2)); | 859 EXPECT_EQ(10.0, service_->GetScore(url2)); |
864 | 860 |
865 clock->SetNow(base_time + 2 * one_day); | 861 clock_->SetNow(base_time + 2 * one_day); |
866 service->AddPoints(url2, 5.0); | 862 service_->AddPoints(url2, 5.0); |
867 EXPECT_EQ(15.0, service->GetScore(url2)); | 863 EXPECT_EQ(15.0, service_->GetScore(url2)); |
868 | 864 |
869 clock->SetNow(base_time + 3 * one_day); | 865 clock_->SetNow(base_time + 3 * one_day); |
870 service->AddPoints(url2, 2.0); | 866 service_->AddPoints(url2, 2.0); |
871 EXPECT_EQ(17.0, service->GetScore(url2)); | 867 EXPECT_EQ(17.0, service_->GetScore(url2)); |
872 base::Time url2_last_modified = clock->Now(); | 868 base::Time url2_last_modified = clock_->Now(); |
873 | 869 |
874 // Move to (3 * shorter_than_decay_period) before the stale period. | 870 // Move to (3 * shorter_than_decay_period) before the stale period. |
875 base_time += shorter_than_decay_period; | 871 base_time += shorter_than_decay_period; |
876 clock->SetNow(base_time); | 872 clock_->SetNow(base_time); |
877 service->AddPoints(url1, 1.0); | 873 service_->AddPoints(url1, 1.0); |
878 service->AddPoints(url3, 5.0); | 874 service_->AddPoints(url3, 5.0); |
879 EXPECT_EQ(2.0, service->GetScore(url1)); | 875 EXPECT_EQ(2.0, service_->GetScore(url1)); |
880 EXPECT_EQ(5.0, service->GetScore(url3)); | 876 EXPECT_EQ(5.0, service_->GetScore(url3)); |
881 | 877 |
882 // Add more to url3, and then leave it alone. | 878 // Add more to url3, and then leave it alone. |
883 clock->SetNow(base_time + one_day); | 879 clock_->SetNow(base_time + one_day); |
884 service->AddPoints(url1, 5.0); | 880 service_->AddPoints(url1, 5.0); |
885 service->AddPoints(url3, 5.0); | 881 service_->AddPoints(url3, 5.0); |
886 EXPECT_EQ(7.0, service->GetScore(url1)); | 882 EXPECT_EQ(7.0, service_->GetScore(url1)); |
887 EXPECT_EQ(10.0, service->GetScore(url3)); | 883 EXPECT_EQ(10.0, service_->GetScore(url3)); |
888 | 884 |
889 // Move to (2 * shorter_than_decay_period) before the stale period. | 885 // Move to (2 * shorter_than_decay_period) before the stale period. |
890 base_time += shorter_than_decay_period; | 886 base_time += shorter_than_decay_period; |
891 clock->SetNow(base_time); | 887 clock_->SetNow(base_time); |
892 service->AddPoints(url1, 5.0); | 888 service_->AddPoints(url1, 5.0); |
893 service->AddPoints(url4, 5.0); | 889 service_->AddPoints(url4, 5.0); |
894 EXPECT_EQ(12.0, service->GetScore(url1)); | 890 EXPECT_EQ(12.0, service_->GetScore(url1)); |
895 EXPECT_EQ(5.0, service->GetScore(url4)); | 891 EXPECT_EQ(5.0, service_->GetScore(url4)); |
896 | 892 |
897 // Move to shorter_than_decay_period before the stale period. | 893 // Move to shorter_than_decay_period before the stale period. |
898 base_time += shorter_than_decay_period; | 894 base_time += shorter_than_decay_period; |
899 clock->SetNow(base_time); | 895 clock_->SetNow(base_time); |
900 service->AddPoints(url1, 1.5); | 896 service_->AddPoints(url1, 1.5); |
901 service->AddPoints(url4, 2.0); | 897 service_->AddPoints(url4, 2.0); |
902 EXPECT_EQ(13.5, service->GetScore(url1)); | 898 EXPECT_EQ(13.5, service_->GetScore(url1)); |
903 EXPECT_EQ(7.0, service->GetScore(url4)); | 899 EXPECT_EQ(7.0, service_->GetScore(url4)); |
904 | 900 |
905 // After cleanup, url2 should be last modified offset to max_decay_time by the | 901 // After cleanup, url2 should be last modified offset to max_decay_time by the |
906 // current offset to now. | 902 // current offset to now. |
907 url2_last_modified = max_decay_time - (clock->Now() - url2_last_modified); | 903 url2_last_modified = max_decay_time - (clock_->Now() - url2_last_modified); |
908 base_time = GetReferenceTime(); | 904 base_time = GetReferenceTime(); |
909 | 905 |
910 { | 906 { |
911 clock->SetNow(base_time); | 907 clock_->SetNow(base_time); |
912 ASSERT_TRUE(service->IsLastEngagementStale()); | 908 ASSERT_TRUE(service_->IsLastEngagementStale()); |
913 | 909 |
914 // Run a cleanup. Last engagement times will be reset relative to | 910 // Run a cleanup. Last engagement times will be reset relative to |
915 // max_decay_time. After the reset, url2 will go through 3 decays, url3 | 911 // max_decay_time. After the reset, url2 will go through 3 decays, url3 |
916 // will go through 2 decays, and url1/url4 will go through 1 decay. This | 912 // will go through 2 decays, and url1/url4 will go through 1 decay. This |
917 // decay is uncommitted! | 913 // decay is uncommitted! |
918 service->CleanupEngagementScores(true); | 914 service_->CleanupEngagementScores(true); |
919 ASSERT_FALSE(service->IsLastEngagementStale()); | 915 ASSERT_FALSE(service_->IsLastEngagementStale()); |
920 | 916 |
921 std::map<GURL, double> score_map = service->GetScoreMap(); | 917 std::map<GURL, double> score_map = service_->GetScoreMap(); |
922 EXPECT_EQ(3u, score_map.size()); | 918 EXPECT_EQ(3u, score_map.size()); |
923 EXPECT_EQ(8.5, score_map[url1]); | 919 EXPECT_EQ(8.5, score_map[url1]); |
924 EXPECT_EQ(2.0, score_map[url2]); | 920 EXPECT_EQ(2.0, score_map[url2]); |
925 EXPECT_EQ(2.0, score_map[url4]); | 921 EXPECT_EQ(2.0, score_map[url4]); |
926 EXPECT_EQ(0, service->GetScore(url3)); | 922 EXPECT_EQ(0, service_->GetScore(url3)); |
927 | 923 |
928 EXPECT_EQ(max_decay_time, | 924 EXPECT_EQ(max_decay_time, |
929 service->CreateEngagementScore(url1).last_engagement_time()); | 925 service_->CreateEngagementScore(url1).last_engagement_time()); |
930 EXPECT_EQ(url2_last_modified, | 926 EXPECT_EQ(url2_last_modified, |
931 service->CreateEngagementScore(url2).last_engagement_time()); | 927 service_->CreateEngagementScore(url2).last_engagement_time()); |
932 EXPECT_EQ(max_decay_time, | 928 EXPECT_EQ(max_decay_time, |
933 service->CreateEngagementScore(url4).last_engagement_time()); | 929 service_->CreateEngagementScore(url4).last_engagement_time()); |
934 EXPECT_EQ(max_decay_time, service->GetLastEngagementTime()); | 930 EXPECT_EQ(max_decay_time, service_->GetLastEngagementTime()); |
935 } | 931 } |
936 | 932 |
937 { | 933 { |
938 // Advance time by the stale period. Nothing should happen in the cleanup. | 934 // Advance time by the stale period. Nothing should happen in the cleanup. |
939 // Last engagement times are now relative to max_decay_time + stale period | 935 // Last engagement times are now relative to max_decay_time + stale period |
940 base_time += service->GetStalePeriod(); | 936 base_time += service_->GetStalePeriod(); |
941 clock->SetNow(base_time); | 937 clock_->SetNow(base_time); |
942 ASSERT_TRUE(service->IsLastEngagementStale()); | 938 ASSERT_TRUE(service_->IsLastEngagementStale()); |
943 | 939 |
944 std::map<GURL, double> score_map = service->GetScoreMap(); | 940 std::map<GURL, double> score_map = service_->GetScoreMap(); |
945 EXPECT_EQ(3u, score_map.size()); | 941 EXPECT_EQ(3u, score_map.size()); |
946 EXPECT_EQ(8.5, score_map[url1]); | 942 EXPECT_EQ(8.5, score_map[url1]); |
947 EXPECT_EQ(2.0, score_map[url2]); | 943 EXPECT_EQ(2.0, score_map[url2]); |
948 EXPECT_EQ(2.0, score_map[url4]); | 944 EXPECT_EQ(2.0, score_map[url4]); |
949 | 945 |
950 EXPECT_EQ(max_decay_time + service->GetStalePeriod(), | 946 EXPECT_EQ(max_decay_time + service_->GetStalePeriod(), |
951 service->CreateEngagementScore(url1).last_engagement_time()); | 947 service_->CreateEngagementScore(url1).last_engagement_time()); |
952 EXPECT_EQ(url2_last_modified + service->GetStalePeriod(), | 948 EXPECT_EQ(url2_last_modified + service_->GetStalePeriod(), |
953 service->CreateEngagementScore(url2).last_engagement_time()); | 949 service_->CreateEngagementScore(url2).last_engagement_time()); |
954 EXPECT_EQ(max_decay_time + service->GetStalePeriod(), | 950 EXPECT_EQ(max_decay_time + service_->GetStalePeriod(), |
955 service->CreateEngagementScore(url4).last_engagement_time()); | 951 service_->CreateEngagementScore(url4).last_engagement_time()); |
956 EXPECT_EQ(max_decay_time + service->GetStalePeriod(), | 952 EXPECT_EQ(max_decay_time + service_->GetStalePeriod(), |
957 service->GetLastEngagementTime()); | 953 service_->GetLastEngagementTime()); |
958 } | 954 } |
959 | 955 |
960 { | 956 { |
961 // Add points to commit the decay. | 957 // Add points to commit the decay. |
962 service->AddPoints(url1, 0.5); | 958 service_->AddPoints(url1, 0.5); |
963 service->AddPoints(url2, 0.5); | 959 service_->AddPoints(url2, 0.5); |
964 service->AddPoints(url4, 1); | 960 service_->AddPoints(url4, 1); |
965 | 961 |
966 std::map<GURL, double> score_map = service->GetScoreMap(); | 962 std::map<GURL, double> score_map = service_->GetScoreMap(); |
967 EXPECT_EQ(3u, score_map.size()); | 963 EXPECT_EQ(3u, score_map.size()); |
968 EXPECT_EQ(9.0, score_map[url1]); | 964 EXPECT_EQ(9.0, score_map[url1]); |
969 EXPECT_EQ(2.5, score_map[url2]); | 965 EXPECT_EQ(2.5, score_map[url2]); |
970 EXPECT_EQ(3.0, score_map[url4]); | 966 EXPECT_EQ(3.0, score_map[url4]); |
971 EXPECT_EQ(clock->Now(), | 967 EXPECT_EQ(clock_->Now(), |
972 service->CreateEngagementScore(url1).last_engagement_time()); | 968 service_->CreateEngagementScore(url1).last_engagement_time()); |
973 EXPECT_EQ(clock->Now(), | 969 EXPECT_EQ(clock_->Now(), |
974 service->CreateEngagementScore(url2).last_engagement_time()); | 970 service_->CreateEngagementScore(url2).last_engagement_time()); |
975 EXPECT_EQ(clock->Now(), | 971 EXPECT_EQ(clock_->Now(), |
976 service->CreateEngagementScore(url4).last_engagement_time()); | 972 service_->CreateEngagementScore(url4).last_engagement_time()); |
977 EXPECT_EQ(clock->Now(), service->GetLastEngagementTime()); | 973 EXPECT_EQ(clock_->Now(), service_->GetLastEngagementTime()); |
978 } | 974 } |
979 | 975 |
980 { | 976 { |
981 // Advance time by a decay period after the current last engagement time. | 977 // Advance time by a decay period after the current last engagement time. |
982 // Expect url2/url4 to be decayed to zero and url1 to decay once. | 978 // Expect url2/url4 to be decayed to zero and url1 to decay once. |
983 base_time = clock->Now() + decay_period; | 979 base_time = clock_->Now() + decay_period; |
984 clock->SetNow(base_time); | 980 clock_->SetNow(base_time); |
985 ASSERT_FALSE(service->IsLastEngagementStale()); | 981 ASSERT_FALSE(service_->IsLastEngagementStale()); |
986 | 982 |
987 std::map<GURL, double> score_map = service->GetScoreMap(); | 983 std::map<GURL, double> score_map = service_->GetScoreMap(); |
988 EXPECT_EQ(3u, score_map.size()); | 984 EXPECT_EQ(3u, score_map.size()); |
989 EXPECT_EQ(4, score_map[url1]); | 985 EXPECT_EQ(4, score_map[url1]); |
990 EXPECT_EQ(0, score_map[url2]); | 986 EXPECT_EQ(0, score_map[url2]); |
991 EXPECT_EQ(0, score_map[url4]); | 987 EXPECT_EQ(0, score_map[url4]); |
992 | 988 |
993 service->CleanupEngagementScores(false); | 989 service_->CleanupEngagementScores(false); |
994 ASSERT_FALSE(service->IsLastEngagementStale()); | 990 ASSERT_FALSE(service_->IsLastEngagementStale()); |
995 | 991 |
996 score_map = service->GetScoreMap(); | 992 score_map = service_->GetScoreMap(); |
997 EXPECT_EQ(1u, score_map.size()); | 993 EXPECT_EQ(1u, score_map.size()); |
998 EXPECT_EQ(4, score_map[url1]); | 994 EXPECT_EQ(4, score_map[url1]); |
999 EXPECT_EQ(0, service->GetScore(url2)); | 995 EXPECT_EQ(0, service_->GetScore(url2)); |
1000 EXPECT_EQ(0, service->GetScore(url4)); | 996 EXPECT_EQ(0, service_->GetScore(url4)); |
1001 EXPECT_EQ(clock->Now() - decay_period, | 997 EXPECT_EQ(clock_->Now() - decay_period, |
1002 service->CreateEngagementScore(url1).last_engagement_time()); | 998 service_->CreateEngagementScore(url1).last_engagement_time()); |
1003 EXPECT_EQ(clock->Now() - decay_period, service->GetLastEngagementTime()); | 999 EXPECT_EQ(clock_->Now() - decay_period, service_->GetLastEngagementTime()); |
1004 } | 1000 } |
1005 | 1001 |
1006 { | 1002 { |
1007 // Add points to commit the decay. | 1003 // Add points to commit the decay. |
1008 service->AddPoints(url1, 0.5); | 1004 service_->AddPoints(url1, 0.5); |
1009 | 1005 |
1010 std::map<GURL, double> score_map = service->GetScoreMap(); | 1006 std::map<GURL, double> score_map = service_->GetScoreMap(); |
1011 EXPECT_EQ(1u, score_map.size()); | 1007 EXPECT_EQ(1u, score_map.size()); |
1012 EXPECT_EQ(4.5, score_map[url1]); | 1008 EXPECT_EQ(4.5, score_map[url1]); |
1013 EXPECT_EQ(clock->Now(), | 1009 EXPECT_EQ(clock_->Now(), |
1014 service->CreateEngagementScore(url1).last_engagement_time()); | 1010 service_->CreateEngagementScore(url1).last_engagement_time()); |
1015 EXPECT_EQ(clock->Now(), service->GetLastEngagementTime()); | 1011 EXPECT_EQ(clock_->Now(), service_->GetLastEngagementTime()); |
1016 } | 1012 } |
1017 | 1013 |
1018 { | 1014 { |
1019 // Another decay period will decay url1 to zero. | 1015 // Another decay period will decay url1 to zero. |
1020 clock->SetNow(clock->Now() + decay_period); | 1016 clock_->SetNow(clock_->Now() + decay_period); |
1021 ASSERT_FALSE(service->IsLastEngagementStale()); | 1017 ASSERT_FALSE(service_->IsLastEngagementStale()); |
1022 | 1018 |
1023 std::map<GURL, double> score_map = service->GetScoreMap(); | 1019 std::map<GURL, double> score_map = service_->GetScoreMap(); |
1024 EXPECT_EQ(1u, score_map.size()); | 1020 EXPECT_EQ(1u, score_map.size()); |
1025 EXPECT_EQ(0, score_map[url1]); | 1021 EXPECT_EQ(0, score_map[url1]); |
1026 EXPECT_EQ(clock->Now() - decay_period, | 1022 EXPECT_EQ(clock_->Now() - decay_period, |
1027 service->CreateEngagementScore(url1).last_engagement_time()); | 1023 service_->CreateEngagementScore(url1).last_engagement_time()); |
1028 EXPECT_EQ(clock->Now() - decay_period, service->GetLastEngagementTime()); | 1024 EXPECT_EQ(clock_->Now() - decay_period, service_->GetLastEngagementTime()); |
1029 | 1025 |
1030 service->CleanupEngagementScores(false); | 1026 service_->CleanupEngagementScores(false); |
1031 ASSERT_FALSE(service->IsLastEngagementStale()); | 1027 ASSERT_FALSE(service_->IsLastEngagementStale()); |
1032 | 1028 |
1033 score_map = service->GetScoreMap(); | 1029 score_map = service_->GetScoreMap(); |
1034 EXPECT_EQ(0u, score_map.size()); | 1030 EXPECT_EQ(0u, score_map.size()); |
1035 EXPECT_EQ(0, service->GetScore(url1)); | 1031 EXPECT_EQ(0, service_->GetScore(url1)); |
1036 EXPECT_EQ(clock->Now() - decay_period, service->GetLastEngagementTime()); | 1032 EXPECT_EQ(clock_->Now() - decay_period, service_->GetLastEngagementTime()); |
1037 } | 1033 } |
1038 } | 1034 } |
1039 | 1035 |
1040 TEST_F(SiteEngagementServiceTest, CleanupEngagementScoresProportional) { | 1036 TEST_F(SiteEngagementServiceTest, CleanupEngagementScoresProportional) { |
1041 SetParamValue(SiteEngagementScore::DECAY_PROPORTION, 0.5); | 1037 SetParamValue(SiteEngagementScore::DECAY_PROPORTION, 0.5); |
1042 SetParamValue(SiteEngagementScore::DECAY_POINTS, 0); | 1038 SetParamValue(SiteEngagementScore::DECAY_POINTS, 0); |
1043 SetParamValue(SiteEngagementScore::SCORE_CLEANUP_THRESHOLD, 0.5); | 1039 SetParamValue(SiteEngagementScore::SCORE_CLEANUP_THRESHOLD, 0.5); |
1044 | 1040 |
1045 base::SimpleTestClock* clock = new base::SimpleTestClock(); | |
1046 std::unique_ptr<SiteEngagementService> service( | |
1047 new SiteEngagementService(profile(), base::WrapUnique(clock))); | |
1048 | |
1049 base::Time current_day = GetReferenceTime(); | 1041 base::Time current_day = GetReferenceTime(); |
1050 clock->SetNow(current_day); | 1042 clock_->SetNow(current_day); |
1051 | 1043 |
1052 GURL url1("https://www.google.com/"); | 1044 GURL url1("https://www.google.com/"); |
1053 GURL url2("https://www.somewhereelse.com/"); | 1045 GURL url2("https://www.somewhereelse.com/"); |
1054 | 1046 |
1055 service->AddPoints(url1, 1.0); | 1047 service_->AddPoints(url1, 1.0); |
1056 service->AddPoints(url2, 1.2); | 1048 service_->AddPoints(url2, 1.2); |
1057 | 1049 |
1058 current_day += base::TimeDelta::FromDays(7); | 1050 current_day += base::TimeDelta::FromDays(7); |
1059 clock->SetNow(current_day); | 1051 clock_->SetNow(current_day); |
1060 std::map<GURL, double> score_map = service->GetScoreMap(); | 1052 std::map<GURL, double> score_map = service_->GetScoreMap(); |
1061 EXPECT_EQ(2u, score_map.size()); | 1053 EXPECT_EQ(2u, score_map.size()); |
1062 AssertInRange(0.5, service->GetScore(url1)); | 1054 AssertInRange(0.5, service_->GetScore(url1)); |
1063 AssertInRange(0.6, service->GetScore(url2)); | 1055 AssertInRange(0.6, service_->GetScore(url2)); |
1064 | 1056 |
1065 service->CleanupEngagementScores(false); | 1057 service_->CleanupEngagementScores(false); |
1066 score_map = service->GetScoreMap(); | 1058 score_map = service_->GetScoreMap(); |
1067 EXPECT_EQ(1u, score_map.size()); | 1059 EXPECT_EQ(1u, score_map.size()); |
1068 EXPECT_EQ(0, service->GetScore(url1)); | 1060 EXPECT_EQ(0, service_->GetScore(url1)); |
1069 AssertInRange(0.6, service->GetScore(url2)); | 1061 AssertInRange(0.6, service_->GetScore(url2)); |
1070 } | 1062 } |
1071 | 1063 |
1072 TEST_F(SiteEngagementServiceTest, NavigationAccumulation) { | 1064 TEST_F(SiteEngagementServiceTest, NavigationAccumulation) { |
1073 GURL url("https://www.google.com/"); | 1065 GURL url("https://www.google.com/"); |
1074 | 1066 |
1075 SiteEngagementService* service = SiteEngagementService::Get(profile()); | 1067 SiteEngagementService* service = SiteEngagementService::Get(profile()); |
1076 ASSERT_TRUE(service); | 1068 ASSERT_TRUE(service); |
1077 | 1069 |
1078 // Create the helper manually since it isn't present when a tab isn't created. | 1070 // Create the helper manually since it isn't present when a tab isn't created. |
1079 SiteEngagementService::Helper::CreateForWebContents(web_contents()); | 1071 SiteEngagementService::Helper::CreateForWebContents(web_contents()); |
(...skipping 13 matching lines...) Expand all Loading... |
1093 ui::PAGE_TRANSITION_AUTO_TOPLEVEL); | 1085 ui::PAGE_TRANSITION_AUTO_TOPLEVEL); |
1094 NavigateWithTransitionAndExpectEqualScore(service, url, | 1086 NavigateWithTransitionAndExpectEqualScore(service, url, |
1095 ui::PAGE_TRANSITION_LINK); | 1087 ui::PAGE_TRANSITION_LINK); |
1096 NavigateWithTransitionAndExpectEqualScore(service, url, | 1088 NavigateWithTransitionAndExpectEqualScore(service, url, |
1097 ui::PAGE_TRANSITION_RELOAD); | 1089 ui::PAGE_TRANSITION_RELOAD); |
1098 NavigateWithTransitionAndExpectEqualScore(service, url, | 1090 NavigateWithTransitionAndExpectEqualScore(service, url, |
1099 ui::PAGE_TRANSITION_FORM_SUBMIT); | 1091 ui::PAGE_TRANSITION_FORM_SUBMIT); |
1100 } | 1092 } |
1101 | 1093 |
1102 TEST_F(SiteEngagementServiceTest, IsBootstrapped) { | 1094 TEST_F(SiteEngagementServiceTest, IsBootstrapped) { |
1103 base::SimpleTestClock* clock = new base::SimpleTestClock(); | |
1104 std::unique_ptr<SiteEngagementService> service( | |
1105 new SiteEngagementService(profile(), base::WrapUnique(clock))); | |
1106 | |
1107 base::Time current_day = GetReferenceTime(); | 1095 base::Time current_day = GetReferenceTime(); |
1108 clock->SetNow(current_day); | 1096 clock_->SetNow(current_day); |
1109 | 1097 |
1110 GURL url1("https://www.google.com/"); | 1098 GURL url1("https://www.google.com/"); |
1111 GURL url2("https://www.somewhereelse.com/"); | 1099 GURL url2("https://www.somewhereelse.com/"); |
1112 | 1100 |
1113 EXPECT_FALSE(service->IsBootstrapped()); | 1101 EXPECT_FALSE(service_->IsBootstrapped()); |
1114 | 1102 |
1115 service->AddPoints(url1, 5.0); | 1103 service_->AddPoints(url1, 5.0); |
1116 EXPECT_FALSE(service->IsBootstrapped()); | 1104 EXPECT_FALSE(service_->IsBootstrapped()); |
1117 | 1105 |
1118 service->AddPoints(url2, 5.0); | 1106 service_->AddPoints(url2, 5.0); |
1119 EXPECT_TRUE(service->IsBootstrapped()); | 1107 EXPECT_TRUE(service_->IsBootstrapped()); |
1120 | 1108 |
1121 clock->SetNow(current_day + base::TimeDelta::FromDays(8)); | 1109 clock_->SetNow(current_day + base::TimeDelta::FromDays(8)); |
1122 EXPECT_FALSE(service->IsBootstrapped()); | 1110 EXPECT_FALSE(service_->IsBootstrapped()); |
1123 } | 1111 } |
1124 | 1112 |
1125 TEST_F(SiteEngagementServiceTest, CleanupOriginsOnHistoryDeletion) { | 1113 TEST_F(SiteEngagementServiceTest, CleanupOriginsOnHistoryDeletion) { |
1126 // Enable proportional decay to ensure that the undecay that happens to | 1114 // Enable proportional decay to ensure that the undecay that happens to |
1127 // balance out history deletion also accounts for the proportional decay. | 1115 // balance out history deletion also accounts for the proportional decay. |
1128 SetParamValue(SiteEngagementScore::DECAY_PROPORTION, 0.5); | 1116 SetParamValue(SiteEngagementScore::DECAY_PROPORTION, 0.5); |
1129 | 1117 |
1130 base::SimpleTestClock* clock = new base::SimpleTestClock(); | |
1131 std::unique_ptr<SiteEngagementService> engagement( | |
1132 new SiteEngagementService(profile(), base::WrapUnique(clock))); | |
1133 ASSERT_TRUE(engagement.get()); | |
1134 | |
1135 GURL origin1("http://www.google.com/"); | 1118 GURL origin1("http://www.google.com/"); |
1136 GURL origin1a("http://www.google.com/search?q=asdf"); | 1119 GURL origin1a("http://www.google.com/search?q=asdf"); |
1137 GURL origin1b("http://www.google.com/maps/search?q=asdf"); | 1120 GURL origin1b("http://www.google.com/maps/search?q=asdf"); |
1138 GURL origin2("https://drive.google.com/"); | 1121 GURL origin2("https://drive.google.com/"); |
1139 GURL origin2a("https://drive.google.com/somedoc"); | 1122 GURL origin2a("https://drive.google.com/somedoc"); |
1140 GURL origin3("http://notdeleted.com/"); | 1123 GURL origin3("http://notdeleted.com/"); |
1141 GURL origin4("http://decayed.com/"); | 1124 GURL origin4("http://decayed.com/"); |
1142 GURL origin4a("http://decayed.com/index.html"); | 1125 GURL origin4a("http://decayed.com/index.html"); |
1143 | 1126 |
1144 base::Time today = GetReferenceTime(); | 1127 base::Time today = GetReferenceTime(); |
1145 base::Time yesterday = GetReferenceTime() - base::TimeDelta::FromDays(1); | 1128 base::Time yesterday = GetReferenceTime() - base::TimeDelta::FromDays(1); |
1146 base::Time yesterday_afternoon = GetReferenceTime() - | 1129 base::Time yesterday_afternoon = GetReferenceTime() - |
1147 base::TimeDelta::FromDays(1) + | 1130 base::TimeDelta::FromDays(1) + |
1148 base::TimeDelta::FromHours(4); | 1131 base::TimeDelta::FromHours(4); |
1149 base::Time yesterday_week = GetReferenceTime() - base::TimeDelta::FromDays(8); | 1132 base::Time yesterday_week = GetReferenceTime() - base::TimeDelta::FromDays(8); |
1150 clock->SetNow(today); | 1133 clock_->SetNow(today); |
1151 | 1134 |
1152 history::HistoryService* history = HistoryServiceFactory::GetForProfile( | 1135 history::HistoryService* history = HistoryServiceFactory::GetForProfile( |
1153 profile(), ServiceAccessType::IMPLICIT_ACCESS); | 1136 profile(), ServiceAccessType::IMPLICIT_ACCESS); |
1154 | 1137 |
1155 history->AddPage(origin1, yesterday_afternoon, history::SOURCE_BROWSED); | 1138 history->AddPage(origin1, yesterday_afternoon, history::SOURCE_BROWSED); |
1156 history->AddPage(origin1a, yesterday_week, history::SOURCE_BROWSED); | 1139 history->AddPage(origin1a, yesterday_week, history::SOURCE_BROWSED); |
1157 history->AddPage(origin1b, today, history::SOURCE_BROWSED); | 1140 history->AddPage(origin1b, today, history::SOURCE_BROWSED); |
1158 engagement->AddPoints(origin1, 3.0); | 1141 service_->AddPoints(origin1, 3.0); |
1159 | 1142 |
1160 history->AddPage(origin2, yesterday_afternoon, history::SOURCE_BROWSED); | 1143 history->AddPage(origin2, yesterday_afternoon, history::SOURCE_BROWSED); |
1161 history->AddPage(origin2a, yesterday_afternoon, history::SOURCE_BROWSED); | 1144 history->AddPage(origin2a, yesterday_afternoon, history::SOURCE_BROWSED); |
1162 engagement->AddPoints(origin2, 5.0); | 1145 service_->AddPoints(origin2, 5.0); |
1163 | 1146 |
1164 history->AddPage(origin3, today, history::SOURCE_BROWSED); | 1147 history->AddPage(origin3, today, history::SOURCE_BROWSED); |
1165 engagement->AddPoints(origin3, 5.0); | 1148 service_->AddPoints(origin3, 5.0); |
1166 | 1149 |
1167 history->AddPage(origin4, yesterday_week, history::SOURCE_BROWSED); | 1150 history->AddPage(origin4, yesterday_week, history::SOURCE_BROWSED); |
1168 history->AddPage(origin4a, yesterday_afternoon, history::SOURCE_BROWSED); | 1151 history->AddPage(origin4a, yesterday_afternoon, history::SOURCE_BROWSED); |
1169 engagement->AddPoints(origin4, 5.0); | 1152 service_->AddPoints(origin4, 5.0); |
1170 | 1153 |
1171 AssertInRange(3.0, engagement->GetScore(origin1)); | 1154 AssertInRange(3.0, service_->GetScore(origin1)); |
1172 AssertInRange(5.0, engagement->GetScore(origin2)); | 1155 AssertInRange(5.0, service_->GetScore(origin2)); |
1173 AssertInRange(5.0, engagement->GetScore(origin3)); | 1156 AssertInRange(5.0, service_->GetScore(origin3)); |
1174 AssertInRange(5.0, engagement->GetScore(origin4)); | 1157 AssertInRange(5.0, service_->GetScore(origin4)); |
1175 | 1158 |
1176 { | 1159 { |
1177 SiteEngagementChangeWaiter waiter(profile()); | 1160 SiteEngagementChangeWaiter waiter(profile()); |
1178 | 1161 |
1179 base::CancelableTaskTracker task_tracker; | 1162 base::CancelableTaskTracker task_tracker; |
1180 // Expire origin1, origin2, origin2a, and origin4's most recent visit. | 1163 // Expire origin1, origin2, origin2a, and origin4's most recent visit. |
1181 history->ExpireHistoryBetween(std::set<GURL>(), yesterday, today, | 1164 history->ExpireHistoryBetween(std::set<GURL>(), yesterday, today, |
1182 base::Bind(&base::DoNothing), &task_tracker); | 1165 base::Bind(&base::DoNothing), &task_tracker); |
1183 waiter.Wait(); | 1166 waiter.Wait(); |
1184 | 1167 |
1185 // origin2 is cleaned up because all its urls are deleted. origin1a and | 1168 // origin2 is cleaned up because all its urls are deleted. origin1a and |
1186 // origin1b are still in history, but 33% of urls have been deleted, thus | 1169 // origin1b are still in history, but 33% of urls have been deleted, thus |
1187 // cutting origin1's score by 1/3. origin3 is untouched. origin4 has 1 URL | 1170 // cutting origin1's score by 1/3. origin3 is untouched. origin4 has 1 URL |
1188 // deleted and 1 remaining, but its most recent visit is more than 1 week in | 1171 // deleted and 1 remaining, but its most recent visit is more than 1 week in |
1189 // the past. Ensure that its scored is halved, and not decayed further. | 1172 // the past. Ensure that its scored is halved, and not decayed further. |
1190 AssertInRange(2, engagement->GetScore(origin1)); | 1173 AssertInRange(2, service_->GetScore(origin1)); |
1191 EXPECT_EQ(0, engagement->GetScore(origin2)); | 1174 EXPECT_EQ(0, service_->GetScore(origin2)); |
1192 AssertInRange(5.0, engagement->GetScore(origin3)); | 1175 AssertInRange(5.0, service_->GetScore(origin3)); |
1193 AssertInRange(2.5, engagement->GetScore(origin4)); | 1176 AssertInRange(2.5, service_->GetScore(origin4)); |
1194 AssertInRange(9.5, engagement->GetTotalEngagementPoints()); | 1177 AssertInRange(9.5, service_->GetTotalEngagementPoints()); |
1195 } | 1178 } |
1196 | 1179 |
1197 { | 1180 { |
1198 SiteEngagementChangeWaiter waiter(profile()); | 1181 SiteEngagementChangeWaiter waiter(profile()); |
1199 | 1182 |
1200 // Expire origin1a. | 1183 // Expire origin1a. |
1201 std::vector<history::ExpireHistoryArgs> expire_list; | 1184 std::vector<history::ExpireHistoryArgs> expire_list; |
1202 history::ExpireHistoryArgs args; | 1185 history::ExpireHistoryArgs args; |
1203 args.urls.insert(origin1a); | 1186 args.urls.insert(origin1a); |
1204 args.SetTimeRangeForOneDay(yesterday_week); | 1187 args.SetTimeRangeForOneDay(yesterday_week); |
1205 expire_list.push_back(args); | 1188 expire_list.push_back(args); |
1206 | 1189 |
1207 base::CancelableTaskTracker task_tracker; | 1190 base::CancelableTaskTracker task_tracker; |
1208 history->ExpireHistory(expire_list, base::Bind(&base::DoNothing), | 1191 history->ExpireHistory(expire_list, base::Bind(&base::DoNothing), |
1209 &task_tracker); | 1192 &task_tracker); |
1210 waiter.Wait(); | 1193 waiter.Wait(); |
1211 | 1194 |
1212 // origin1's score should be halved again. origin3 and origin4 remain | 1195 // origin1's score should be halved again. origin3 and origin4 remain |
1213 // untouched. | 1196 // untouched. |
1214 AssertInRange(1, engagement->GetScore(origin1)); | 1197 AssertInRange(1, service_->GetScore(origin1)); |
1215 EXPECT_EQ(0, engagement->GetScore(origin2)); | 1198 EXPECT_EQ(0, service_->GetScore(origin2)); |
1216 AssertInRange(5.0, engagement->GetScore(origin3)); | 1199 AssertInRange(5.0, service_->GetScore(origin3)); |
1217 AssertInRange(2.5, engagement->GetScore(origin4)); | 1200 AssertInRange(2.5, service_->GetScore(origin4)); |
1218 AssertInRange(8.5, engagement->GetTotalEngagementPoints()); | 1201 AssertInRange(8.5, service_->GetTotalEngagementPoints()); |
1219 } | 1202 } |
1220 | 1203 |
1221 { | 1204 { |
1222 SiteEngagementChangeWaiter waiter(profile()); | 1205 SiteEngagementChangeWaiter waiter(profile()); |
1223 | 1206 |
1224 // Expire origin1b. | 1207 // Expire origin1b. |
1225 std::vector<history::ExpireHistoryArgs> expire_list; | 1208 std::vector<history::ExpireHistoryArgs> expire_list; |
1226 history::ExpireHistoryArgs args; | 1209 history::ExpireHistoryArgs args; |
1227 args.urls.insert(origin1b); | 1210 args.urls.insert(origin1b); |
1228 args.SetTimeRangeForOneDay(today); | 1211 args.SetTimeRangeForOneDay(today); |
1229 expire_list.push_back(args); | 1212 expire_list.push_back(args); |
1230 | 1213 |
1231 base::CancelableTaskTracker task_tracker; | 1214 base::CancelableTaskTracker task_tracker; |
1232 history->ExpireHistory(expire_list, base::Bind(&base::DoNothing), | 1215 history->ExpireHistory(expire_list, base::Bind(&base::DoNothing), |
1233 &task_tracker); | 1216 &task_tracker); |
1234 waiter.Wait(); | 1217 waiter.Wait(); |
1235 | 1218 |
1236 // origin1 should be removed. origin3 and origin4 remain untouched. | 1219 // origin1 should be removed. origin3 and origin4 remain untouched. |
1237 EXPECT_EQ(0, engagement->GetScore(origin1)); | 1220 EXPECT_EQ(0, service_->GetScore(origin1)); |
1238 EXPECT_EQ(0, engagement->GetScore(origin2)); | 1221 EXPECT_EQ(0, service_->GetScore(origin2)); |
1239 AssertInRange(5.0, engagement->GetScore(origin3)); | 1222 AssertInRange(5.0, service_->GetScore(origin3)); |
1240 AssertInRange(2.5, engagement->GetScore(origin4)); | 1223 AssertInRange(2.5, service_->GetScore(origin4)); |
1241 AssertInRange(7.5, engagement->GetTotalEngagementPoints()); | 1224 AssertInRange(7.5, service_->GetTotalEngagementPoints()); |
1242 } | 1225 } |
1243 } | 1226 } |
1244 | 1227 |
1245 TEST_F(SiteEngagementServiceTest, EngagementLevel) { | 1228 TEST_F(SiteEngagementServiceTest, EngagementLevel) { |
1246 static_assert(blink::mojom::EngagementLevel::NONE != | 1229 static_assert(blink::mojom::EngagementLevel::NONE != |
1247 blink::mojom::EngagementLevel::LOW, | 1230 blink::mojom::EngagementLevel::LOW, |
1248 "enum values should not be equal"); | 1231 "enum values should not be equal"); |
1249 static_assert(blink::mojom::EngagementLevel::LOW != | 1232 static_assert(blink::mojom::EngagementLevel::LOW != |
1250 blink::mojom::EngagementLevel::MEDIUM, | 1233 blink::mojom::EngagementLevel::MEDIUM, |
1251 "enum values should not be equal"); | 1234 "enum values should not be equal"); |
1252 static_assert(blink::mojom::EngagementLevel::MEDIUM != | 1235 static_assert(blink::mojom::EngagementLevel::MEDIUM != |
1253 blink::mojom::EngagementLevel::HIGH, | 1236 blink::mojom::EngagementLevel::HIGH, |
1254 "enum values should not be equal"); | 1237 "enum values should not be equal"); |
1255 static_assert(blink::mojom::EngagementLevel::HIGH != | 1238 static_assert(blink::mojom::EngagementLevel::HIGH != |
1256 blink::mojom::EngagementLevel::MAX, | 1239 blink::mojom::EngagementLevel::MAX, |
1257 "enum values should not be equal"); | 1240 "enum values should not be equal"); |
1258 | 1241 |
1259 base::SimpleTestClock* clock = new base::SimpleTestClock(); | |
1260 std::unique_ptr<SiteEngagementService> service( | |
1261 new SiteEngagementService(profile(), base::WrapUnique(clock))); | |
1262 | |
1263 base::Time current_day = GetReferenceTime(); | 1242 base::Time current_day = GetReferenceTime(); |
1264 clock->SetNow(current_day); | 1243 clock_->SetNow(current_day); |
1265 | 1244 |
1266 GURL url1("https://www.google.com/"); | 1245 GURL url1("https://www.google.com/"); |
1267 GURL url2("http://www.google.com/"); | 1246 GURL url2("http://www.google.com/"); |
1268 | 1247 |
1269 EXPECT_EQ(blink::mojom::EngagementLevel::NONE, | 1248 EXPECT_EQ(blink::mojom::EngagementLevel::NONE, |
1270 service->GetEngagementLevel(url1)); | 1249 service_->GetEngagementLevel(url1)); |
1271 EXPECT_EQ(blink::mojom::EngagementLevel::NONE, | 1250 EXPECT_EQ(blink::mojom::EngagementLevel::NONE, |
1272 service->GetEngagementLevel(url2)); | 1251 service_->GetEngagementLevel(url2)); |
1273 EXPECT_TRUE( | 1252 EXPECT_TRUE( |
1274 service->IsEngagementAtLeast(url1, blink::mojom::EngagementLevel::NONE)); | 1253 service_->IsEngagementAtLeast(url1, blink::mojom::EngagementLevel::NONE)); |
1275 EXPECT_FALSE(service->IsEngagementAtLeast( | 1254 EXPECT_FALSE(service_->IsEngagementAtLeast( |
1276 url1, blink::mojom::EngagementLevel::MINIMAL)); | 1255 url1, blink::mojom::EngagementLevel::MINIMAL)); |
1277 EXPECT_FALSE( | 1256 EXPECT_FALSE( |
1278 service->IsEngagementAtLeast(url1, blink::mojom::EngagementLevel::LOW)); | 1257 service_->IsEngagementAtLeast(url1, blink::mojom::EngagementLevel::LOW)); |
1279 EXPECT_FALSE(service->IsEngagementAtLeast( | 1258 EXPECT_FALSE(service_->IsEngagementAtLeast( |
1280 url1, blink::mojom::EngagementLevel::MEDIUM)); | 1259 url1, blink::mojom::EngagementLevel::MEDIUM)); |
1281 EXPECT_FALSE( | 1260 EXPECT_FALSE( |
1282 service->IsEngagementAtLeast(url1, blink::mojom::EngagementLevel::HIGH)); | 1261 service_->IsEngagementAtLeast(url1, blink::mojom::EngagementLevel::HIGH)); |
1283 EXPECT_FALSE( | 1262 EXPECT_FALSE( |
1284 service->IsEngagementAtLeast(url1, blink::mojom::EngagementLevel::MAX)); | 1263 service_->IsEngagementAtLeast(url1, blink::mojom::EngagementLevel::MAX)); |
1285 | 1264 |
1286 // Bring url2 to MINIMAL engagement. | 1265 // Bring url2 to MINIMAL engagement. |
1287 service->AddPoints(url2, 0.5); | 1266 service_->AddPoints(url2, 0.5); |
1288 EXPECT_EQ(blink::mojom::EngagementLevel::NONE, | 1267 EXPECT_EQ(blink::mojom::EngagementLevel::NONE, |
1289 service->GetEngagementLevel(url1)); | 1268 service_->GetEngagementLevel(url1)); |
1290 EXPECT_EQ(blink::mojom::EngagementLevel::MINIMAL, | 1269 EXPECT_EQ(blink::mojom::EngagementLevel::MINIMAL, |
1291 service->GetEngagementLevel(url2)); | 1270 service_->GetEngagementLevel(url2)); |
1292 EXPECT_TRUE( | 1271 EXPECT_TRUE( |
1293 service->IsEngagementAtLeast(url2, blink::mojom::EngagementLevel::NONE)); | 1272 service_->IsEngagementAtLeast(url2, blink::mojom::EngagementLevel::NONE)); |
1294 EXPECT_TRUE(service->IsEngagementAtLeast( | 1273 EXPECT_TRUE(service_->IsEngagementAtLeast( |
1295 url2, blink::mojom::EngagementLevel::MINIMAL)); | 1274 url2, blink::mojom::EngagementLevel::MINIMAL)); |
1296 EXPECT_FALSE( | 1275 EXPECT_FALSE( |
1297 service->IsEngagementAtLeast(url2, blink::mojom::EngagementLevel::LOW)); | 1276 service_->IsEngagementAtLeast(url2, blink::mojom::EngagementLevel::LOW)); |
1298 EXPECT_FALSE(service->IsEngagementAtLeast( | 1277 EXPECT_FALSE(service_->IsEngagementAtLeast( |
1299 url2, blink::mojom::EngagementLevel::MEDIUM)); | 1278 url2, blink::mojom::EngagementLevel::MEDIUM)); |
1300 EXPECT_FALSE( | 1279 EXPECT_FALSE( |
1301 service->IsEngagementAtLeast(url2, blink::mojom::EngagementLevel::HIGH)); | 1280 service_->IsEngagementAtLeast(url2, blink::mojom::EngagementLevel::HIGH)); |
1302 EXPECT_FALSE( | 1281 EXPECT_FALSE( |
1303 service->IsEngagementAtLeast(url2, blink::mojom::EngagementLevel::MAX)); | 1282 service_->IsEngagementAtLeast(url2, blink::mojom::EngagementLevel::MAX)); |
1304 | 1283 |
1305 // Bring url1 to LOW engagement. | 1284 // Bring url1 to LOW engagement. |
1306 service->AddPoints(url1, 1.0); | 1285 service_->AddPoints(url1, 1.0); |
1307 EXPECT_EQ(blink::mojom::EngagementLevel::LOW, | 1286 EXPECT_EQ(blink::mojom::EngagementLevel::LOW, |
1308 service->GetEngagementLevel(url1)); | 1287 service_->GetEngagementLevel(url1)); |
1309 EXPECT_EQ(blink::mojom::EngagementLevel::MINIMAL, | 1288 EXPECT_EQ(blink::mojom::EngagementLevel::MINIMAL, |
1310 service->GetEngagementLevel(url2)); | 1289 service_->GetEngagementLevel(url2)); |
1311 EXPECT_TRUE( | 1290 EXPECT_TRUE( |
1312 service->IsEngagementAtLeast(url1, blink::mojom::EngagementLevel::NONE)); | 1291 service_->IsEngagementAtLeast(url1, blink::mojom::EngagementLevel::NONE)); |
1313 EXPECT_TRUE(service->IsEngagementAtLeast( | 1292 EXPECT_TRUE(service_->IsEngagementAtLeast( |
1314 url1, blink::mojom::EngagementLevel::MINIMAL)); | 1293 url1, blink::mojom::EngagementLevel::MINIMAL)); |
1315 EXPECT_TRUE( | 1294 EXPECT_TRUE( |
1316 service->IsEngagementAtLeast(url1, blink::mojom::EngagementLevel::LOW)); | 1295 service_->IsEngagementAtLeast(url1, blink::mojom::EngagementLevel::LOW)); |
1317 EXPECT_FALSE(service->IsEngagementAtLeast( | 1296 EXPECT_FALSE(service_->IsEngagementAtLeast( |
1318 url1, blink::mojom::EngagementLevel::MEDIUM)); | 1297 url1, blink::mojom::EngagementLevel::MEDIUM)); |
1319 EXPECT_FALSE( | 1298 EXPECT_FALSE( |
1320 service->IsEngagementAtLeast(url1, blink::mojom::EngagementLevel::HIGH)); | 1299 service_->IsEngagementAtLeast(url1, blink::mojom::EngagementLevel::HIGH)); |
1321 EXPECT_FALSE( | 1300 EXPECT_FALSE( |
1322 service->IsEngagementAtLeast(url1, blink::mojom::EngagementLevel::MAX)); | 1301 service_->IsEngagementAtLeast(url1, blink::mojom::EngagementLevel::MAX)); |
1323 | 1302 |
1324 // Bring url2 to MEDIUM engagement. | 1303 // Bring url2 to MEDIUM engagement. |
1325 service->AddPoints(url2, 4.5); | 1304 service_->AddPoints(url2, 4.5); |
1326 EXPECT_EQ(blink::mojom::EngagementLevel::LOW, | 1305 EXPECT_EQ(blink::mojom::EngagementLevel::LOW, |
1327 service->GetEngagementLevel(url1)); | 1306 service_->GetEngagementLevel(url1)); |
1328 EXPECT_EQ(blink::mojom::EngagementLevel::MEDIUM, | 1307 EXPECT_EQ(blink::mojom::EngagementLevel::MEDIUM, |
1329 service->GetEngagementLevel(url2)); | 1308 service_->GetEngagementLevel(url2)); |
1330 EXPECT_TRUE( | 1309 EXPECT_TRUE( |
1331 service->IsEngagementAtLeast(url2, blink::mojom::EngagementLevel::NONE)); | 1310 service_->IsEngagementAtLeast(url2, blink::mojom::EngagementLevel::NONE)); |
1332 EXPECT_TRUE(service->IsEngagementAtLeast( | 1311 EXPECT_TRUE(service_->IsEngagementAtLeast( |
1333 url2, blink::mojom::EngagementLevel::MINIMAL)); | 1312 url2, blink::mojom::EngagementLevel::MINIMAL)); |
1334 EXPECT_TRUE( | 1313 EXPECT_TRUE( |
1335 service->IsEngagementAtLeast(url2, blink::mojom::EngagementLevel::LOW)); | 1314 service_->IsEngagementAtLeast(url2, blink::mojom::EngagementLevel::LOW)); |
1336 EXPECT_TRUE(service->IsEngagementAtLeast( | 1315 EXPECT_TRUE(service_->IsEngagementAtLeast( |
1337 url2, blink::mojom::EngagementLevel::MEDIUM)); | 1316 url2, blink::mojom::EngagementLevel::MEDIUM)); |
1338 EXPECT_FALSE( | 1317 EXPECT_FALSE( |
1339 service->IsEngagementAtLeast(url2, blink::mojom::EngagementLevel::HIGH)); | 1318 service_->IsEngagementAtLeast(url2, blink::mojom::EngagementLevel::HIGH)); |
1340 EXPECT_FALSE( | 1319 EXPECT_FALSE( |
1341 service->IsEngagementAtLeast(url2, blink::mojom::EngagementLevel::MAX)); | 1320 service_->IsEngagementAtLeast(url2, blink::mojom::EngagementLevel::MAX)); |
1342 | 1321 |
1343 // Bring url2 to HIGH engagement. | 1322 // Bring url2 to HIGH engagement. |
1344 for (int i = 0; i < 9; ++i) { | 1323 for (int i = 0; i < 9; ++i) { |
1345 current_day += base::TimeDelta::FromDays(1); | 1324 current_day += base::TimeDelta::FromDays(1); |
1346 clock->SetNow(current_day); | 1325 clock_->SetNow(current_day); |
1347 service->AddPoints(url2, 5.0); | 1326 service_->AddPoints(url2, 5.0); |
1348 } | 1327 } |
1349 EXPECT_EQ(blink::mojom::EngagementLevel::HIGH, | 1328 EXPECT_EQ(blink::mojom::EngagementLevel::HIGH, |
1350 service->GetEngagementLevel(url2)); | 1329 service_->GetEngagementLevel(url2)); |
1351 | 1330 |
1352 EXPECT_TRUE( | 1331 EXPECT_TRUE( |
1353 service->IsEngagementAtLeast(url2, blink::mojom::EngagementLevel::NONE)); | 1332 service_->IsEngagementAtLeast(url2, blink::mojom::EngagementLevel::NONE)); |
1354 EXPECT_TRUE(service->IsEngagementAtLeast( | 1333 EXPECT_TRUE(service_->IsEngagementAtLeast( |
1355 url2, blink::mojom::EngagementLevel::MINIMAL)); | 1334 url2, blink::mojom::EngagementLevel::MINIMAL)); |
1356 EXPECT_TRUE( | 1335 EXPECT_TRUE( |
1357 service->IsEngagementAtLeast(url2, blink::mojom::EngagementLevel::LOW)); | 1336 service_->IsEngagementAtLeast(url2, blink::mojom::EngagementLevel::LOW)); |
1358 EXPECT_TRUE(service->IsEngagementAtLeast( | 1337 EXPECT_TRUE(service_->IsEngagementAtLeast( |
1359 url2, blink::mojom::EngagementLevel::MEDIUM)); | 1338 url2, blink::mojom::EngagementLevel::MEDIUM)); |
1360 EXPECT_TRUE( | 1339 EXPECT_TRUE( |
1361 service->IsEngagementAtLeast(url2, blink::mojom::EngagementLevel::HIGH)); | 1340 service_->IsEngagementAtLeast(url2, blink::mojom::EngagementLevel::HIGH)); |
1362 EXPECT_FALSE( | 1341 EXPECT_FALSE( |
1363 service->IsEngagementAtLeast(url2, blink::mojom::EngagementLevel::MAX)); | 1342 service_->IsEngagementAtLeast(url2, blink::mojom::EngagementLevel::MAX)); |
1364 | 1343 |
1365 // Bring url2 to MAX engagement. | 1344 // Bring url2 to MAX engagement. |
1366 for (int i = 0; i < 10; ++i) { | 1345 for (int i = 0; i < 10; ++i) { |
1367 current_day += base::TimeDelta::FromDays(1); | 1346 current_day += base::TimeDelta::FromDays(1); |
1368 clock->SetNow(current_day); | 1347 clock_->SetNow(current_day); |
1369 service->AddPoints(url2, 5.0); | 1348 service_->AddPoints(url2, 5.0); |
1370 } | 1349 } |
1371 EXPECT_EQ(blink::mojom::EngagementLevel::MAX, | 1350 EXPECT_EQ(blink::mojom::EngagementLevel::MAX, |
1372 service->GetEngagementLevel(url2)); | 1351 service_->GetEngagementLevel(url2)); |
1373 EXPECT_TRUE( | 1352 EXPECT_TRUE( |
1374 service->IsEngagementAtLeast(url2, blink::mojom::EngagementLevel::NONE)); | 1353 service_->IsEngagementAtLeast(url2, blink::mojom::EngagementLevel::NONE)); |
1375 EXPECT_TRUE(service->IsEngagementAtLeast( | 1354 EXPECT_TRUE(service_->IsEngagementAtLeast( |
1376 url2, blink::mojom::EngagementLevel::MINIMAL)); | 1355 url2, blink::mojom::EngagementLevel::MINIMAL)); |
1377 EXPECT_TRUE( | 1356 EXPECT_TRUE( |
1378 service->IsEngagementAtLeast(url2, blink::mojom::EngagementLevel::LOW)); | 1357 service_->IsEngagementAtLeast(url2, blink::mojom::EngagementLevel::LOW)); |
1379 EXPECT_TRUE(service->IsEngagementAtLeast( | 1358 EXPECT_TRUE(service_->IsEngagementAtLeast( |
1380 url2, blink::mojom::EngagementLevel::MEDIUM)); | 1359 url2, blink::mojom::EngagementLevel::MEDIUM)); |
1381 EXPECT_TRUE( | 1360 EXPECT_TRUE( |
1382 service->IsEngagementAtLeast(url2, blink::mojom::EngagementLevel::HIGH)); | 1361 service_->IsEngagementAtLeast(url2, blink::mojom::EngagementLevel::HIGH)); |
1383 EXPECT_TRUE( | 1362 EXPECT_TRUE( |
1384 service->IsEngagementAtLeast(url2, blink::mojom::EngagementLevel::MAX)); | 1363 service_->IsEngagementAtLeast(url2, blink::mojom::EngagementLevel::MAX)); |
1385 } | 1364 } |
1386 | 1365 |
1387 TEST_F(SiteEngagementServiceTest, Observers) { | 1366 TEST_F(SiteEngagementServiceTest, Observers) { |
1388 SiteEngagementService* service = SiteEngagementService::Get(profile()); | 1367 SiteEngagementService* service = SiteEngagementService::Get(profile()); |
1389 | 1368 |
1390 GURL url_score_1("http://www.google.com/maps"); | 1369 GURL url_score_1("http://www.google.com/maps"); |
1391 GURL url_score_2("http://www.google.com/drive"); | 1370 GURL url_score_2("http://www.google.com/drive"); |
1392 GURL url_score_3("http://www.google.com/"); | 1371 GURL url_score_3("http://www.google.com/"); |
1393 GURL url_not_called("https://www.google.com/"); | 1372 GURL url_not_called("https://www.google.com/"); |
1394 | 1373 |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1441 service->HandleMediaPlaying(web_contents(), true); | 1420 service->HandleMediaPlaying(web_contents(), true); |
1442 tester.Wait(); | 1421 tester.Wait(); |
1443 | 1422 |
1444 EXPECT_TRUE(tester.callback_called()); | 1423 EXPECT_TRUE(tester.callback_called()); |
1445 EXPECT_FALSE(tester_not_called.callback_called()); | 1424 EXPECT_FALSE(tester_not_called.callback_called()); |
1446 tester.Observe(nullptr); | 1425 tester.Observe(nullptr); |
1447 } | 1426 } |
1448 } | 1427 } |
1449 | 1428 |
1450 TEST_F(SiteEngagementServiceTest, ScoreDecayHistograms) { | 1429 TEST_F(SiteEngagementServiceTest, ScoreDecayHistograms) { |
1451 base::SimpleTestClock* clock = new base::SimpleTestClock(); | |
1452 std::unique_ptr<SiteEngagementService> service( | |
1453 new SiteEngagementService(profile(), base::WrapUnique(clock))); | |
1454 | |
1455 base::Time current_day = GetReferenceTime(); | 1430 base::Time current_day = GetReferenceTime(); |
1456 clock->SetNow(current_day); | 1431 clock_->SetNow(current_day); |
1457 base::HistogramTester histograms; | 1432 base::HistogramTester histograms; |
1458 GURL origin1("http://www.google.com/"); | 1433 GURL origin1("http://www.google.com/"); |
1459 GURL origin2("http://drive.google.com/"); | 1434 GURL origin2("http://drive.google.com/"); |
1460 | 1435 |
1461 histograms.ExpectTotalCount(SiteEngagementMetrics::kScoreDecayedFromHistogram, | 1436 histograms.ExpectTotalCount(SiteEngagementMetrics::kScoreDecayedFromHistogram, |
1462 0); | 1437 0); |
1463 histograms.ExpectTotalCount(SiteEngagementMetrics::kScoreDecayedToHistogram, | 1438 histograms.ExpectTotalCount(SiteEngagementMetrics::kScoreDecayedToHistogram, |
1464 0); | 1439 0); |
1465 | 1440 |
1466 service->AddPoints(origin2, SiteEngagementScore::GetNavigationPoints()); | 1441 service_->AddPoints(origin2, SiteEngagementScore::GetNavigationPoints()); |
1467 | 1442 |
1468 // Max the score for origin1. | 1443 // Max the score for origin1. |
1469 for (int i = 0; i < kMoreDaysThanNeededToMaxTotalEngagement; ++i) { | 1444 for (int i = 0; i < kMoreDaysThanNeededToMaxTotalEngagement; ++i) { |
1470 current_day += base::TimeDelta::FromDays(1); | 1445 current_day += base::TimeDelta::FromDays(1); |
1471 clock->SetNow(current_day); | 1446 clock_->SetNow(current_day); |
1472 | 1447 |
1473 for (int j = 0; j < kMoreAccumulationsThanNeededToMaxDailyEngagement; ++j) | 1448 for (int j = 0; j < kMoreAccumulationsThanNeededToMaxDailyEngagement; ++j) |
1474 service->AddPoints(origin1, SiteEngagementScore::GetNavigationPoints()); | 1449 service_->AddPoints(origin1, SiteEngagementScore::GetNavigationPoints()); |
1475 } | 1450 } |
1476 | 1451 |
1477 EXPECT_EQ(SiteEngagementScore::kMaxPoints, service->GetScore(origin1)); | 1452 EXPECT_EQ(SiteEngagementScore::kMaxPoints, service_->GetScore(origin1)); |
1478 histograms.ExpectTotalCount(SiteEngagementMetrics::kScoreDecayedFromHistogram, | 1453 histograms.ExpectTotalCount(SiteEngagementMetrics::kScoreDecayedFromHistogram, |
1479 0); | 1454 0); |
1480 histograms.ExpectTotalCount(SiteEngagementMetrics::kScoreDecayedToHistogram, | 1455 histograms.ExpectTotalCount(SiteEngagementMetrics::kScoreDecayedToHistogram, |
1481 0); | 1456 0); |
1482 | 1457 |
1483 // Check histograms after one decay period. | 1458 // Check histograms after one decay period. |
1484 clock->SetNow( | 1459 clock_->SetNow( |
1485 current_day + | 1460 current_day + |
1486 base::TimeDelta::FromHours(SiteEngagementScore::GetDecayPeriodInHours())); | 1461 base::TimeDelta::FromHours(SiteEngagementScore::GetDecayPeriodInHours())); |
1487 | 1462 |
1488 // Trigger decay and histogram hit. | 1463 // Trigger decay and histogram hit. |
1489 service->AddPoints(origin1, 0.01); | 1464 service_->AddPoints(origin1, 0.01); |
1490 histograms.ExpectUniqueSample( | 1465 histograms.ExpectUniqueSample( |
1491 SiteEngagementMetrics::kScoreDecayedFromHistogram, | 1466 SiteEngagementMetrics::kScoreDecayedFromHistogram, |
1492 SiteEngagementScore::kMaxPoints, 1); | 1467 SiteEngagementScore::kMaxPoints, 1); |
1493 histograms.ExpectUniqueSample( | 1468 histograms.ExpectUniqueSample( |
1494 SiteEngagementMetrics::kScoreDecayedToHistogram, | 1469 SiteEngagementMetrics::kScoreDecayedToHistogram, |
1495 SiteEngagementScore::kMaxPoints - SiteEngagementScore::GetDecayPoints(), | 1470 SiteEngagementScore::kMaxPoints - SiteEngagementScore::GetDecayPoints(), |
1496 1); | 1471 1); |
1497 | 1472 |
1498 // Check histograms after another decay period. | 1473 // Check histograms after another decay period. |
1499 clock->SetNow(current_day + | 1474 clock_->SetNow(current_day + |
1500 base::TimeDelta::FromHours( | 1475 base::TimeDelta::FromHours( |
1501 2 * SiteEngagementScore::GetDecayPeriodInHours())); | 1476 2 * SiteEngagementScore::GetDecayPeriodInHours())); |
1502 // Trigger decay and histogram hit. | 1477 // Trigger decay and histogram hit. |
1503 service->AddPoints(origin1, 0.01); | 1478 service_->AddPoints(origin1, 0.01); |
1504 histograms.ExpectTotalCount(SiteEngagementMetrics::kScoreDecayedFromHistogram, | 1479 histograms.ExpectTotalCount(SiteEngagementMetrics::kScoreDecayedFromHistogram, |
1505 2); | 1480 2); |
1506 histograms.ExpectTotalCount(SiteEngagementMetrics::kScoreDecayedToHistogram, | 1481 histograms.ExpectTotalCount(SiteEngagementMetrics::kScoreDecayedToHistogram, |
1507 2); | 1482 2); |
1508 | 1483 |
1509 // Check decay to zero. Start at the 3rd decay period (we have had two | 1484 // Check decay to zero. Start at the 3rd decay period (we have had two |
1510 // already). This will be 40 decays in total. | 1485 // already). This will be 40 decays in total. |
1511 for (int i = 3; i <= kMorePeriodsThanNeededToDecayMaxScore; ++i) { | 1486 for (int i = 3; i <= kMorePeriodsThanNeededToDecayMaxScore; ++i) { |
1512 clock->SetNow(current_day + | 1487 clock_->SetNow(current_day + |
1513 base::TimeDelta::FromHours( | 1488 base::TimeDelta::FromHours( |
1514 i * SiteEngagementScore::GetDecayPeriodInHours())); | 1489 i * SiteEngagementScore::GetDecayPeriodInHours())); |
1515 // Trigger decay and histogram hit. | 1490 // Trigger decay and histogram hit. |
1516 service->AddPoints(origin1, 0.01); | 1491 service_->AddPoints(origin1, 0.01); |
1517 } | 1492 } |
1518 histograms.ExpectTotalCount(SiteEngagementMetrics::kScoreDecayedFromHistogram, | 1493 histograms.ExpectTotalCount(SiteEngagementMetrics::kScoreDecayedFromHistogram, |
1519 kMorePeriodsThanNeededToDecayMaxScore); | 1494 kMorePeriodsThanNeededToDecayMaxScore); |
1520 histograms.ExpectTotalCount(SiteEngagementMetrics::kScoreDecayedToHistogram, | 1495 histograms.ExpectTotalCount(SiteEngagementMetrics::kScoreDecayedToHistogram, |
1521 kMorePeriodsThanNeededToDecayMaxScore); | 1496 kMorePeriodsThanNeededToDecayMaxScore); |
1522 // It should have taken (20 - 3) = 17 of the 38 decays to get to zero, since | 1497 // It should have taken (20 - 3) = 17 of the 38 decays to get to zero, since |
1523 // we started from 95. Expect the remaining 21 decays to be to bucket 0 (and | 1498 // we started from 95. Expect the remaining 21 decays to be to bucket 0 (and |
1524 // hence 20 from bucket 0). | 1499 // hence 20 from bucket 0). |
1525 histograms.ExpectBucketCount( | 1500 histograms.ExpectBucketCount( |
1526 SiteEngagementMetrics::kScoreDecayedFromHistogram, 0, 20); | 1501 SiteEngagementMetrics::kScoreDecayedFromHistogram, 0, 20); |
1527 histograms.ExpectBucketCount(SiteEngagementMetrics::kScoreDecayedToHistogram, | 1502 histograms.ExpectBucketCount(SiteEngagementMetrics::kScoreDecayedToHistogram, |
1528 0, 21); | 1503 0, 21); |
1529 // Trigger decay and histogram hit for origin2, checking an independent decay. | 1504 // Trigger decay and histogram hit for origin2, checking an independent decay. |
1530 service->AddPoints(origin2, 0.01); | 1505 service_->AddPoints(origin2, 0.01); |
1531 histograms.ExpectTotalCount(SiteEngagementMetrics::kScoreDecayedFromHistogram, | 1506 histograms.ExpectTotalCount(SiteEngagementMetrics::kScoreDecayedFromHistogram, |
1532 kMorePeriodsThanNeededToDecayMaxScore + 1); | 1507 kMorePeriodsThanNeededToDecayMaxScore + 1); |
1533 histograms.ExpectTotalCount(SiteEngagementMetrics::kScoreDecayedToHistogram, | 1508 histograms.ExpectTotalCount(SiteEngagementMetrics::kScoreDecayedToHistogram, |
1534 kMorePeriodsThanNeededToDecayMaxScore + 1); | 1509 kMorePeriodsThanNeededToDecayMaxScore + 1); |
1535 histograms.ExpectBucketCount( | 1510 histograms.ExpectBucketCount( |
1536 SiteEngagementMetrics::kScoreDecayedFromHistogram, 0, 21); | 1511 SiteEngagementMetrics::kScoreDecayedFromHistogram, 0, 21); |
1537 histograms.ExpectBucketCount(SiteEngagementMetrics::kScoreDecayedToHistogram, | 1512 histograms.ExpectBucketCount(SiteEngagementMetrics::kScoreDecayedToHistogram, |
1538 0, 22); | 1513 0, 22); |
1539 | 1514 |
1540 // Add more points and ensure no more samples are present. | 1515 // Add more points and ensure no more samples are present. |
1541 service->AddPoints(origin1, 0.01); | 1516 service_->AddPoints(origin1, 0.01); |
1542 service->AddPoints(origin2, 0.01); | 1517 service_->AddPoints(origin2, 0.01); |
1543 histograms.ExpectTotalCount(SiteEngagementMetrics::kScoreDecayedFromHistogram, | 1518 histograms.ExpectTotalCount(SiteEngagementMetrics::kScoreDecayedFromHistogram, |
1544 kMorePeriodsThanNeededToDecayMaxScore + 1); | 1519 kMorePeriodsThanNeededToDecayMaxScore + 1); |
1545 histograms.ExpectTotalCount(SiteEngagementMetrics::kScoreDecayedToHistogram, | 1520 histograms.ExpectTotalCount(SiteEngagementMetrics::kScoreDecayedToHistogram, |
1546 kMorePeriodsThanNeededToDecayMaxScore + 1); | 1521 kMorePeriodsThanNeededToDecayMaxScore + 1); |
1547 } | 1522 } |
1548 | 1523 |
1549 TEST_F(SiteEngagementServiceTest, LastEngagementTime) { | 1524 TEST_F(SiteEngagementServiceTest, LastEngagementTime) { |
1550 // The last engagement time should start off null in prefs and in the service. | 1525 // The last engagement time should start off null in prefs and in the service. |
1551 base::Time last_engagement_time = base::Time::FromInternalValue( | 1526 base::Time last_engagement_time = base::Time::FromInternalValue( |
1552 profile()->GetPrefs()->GetInt64(prefs::kSiteEngagementLastUpdateTime)); | 1527 profile()->GetPrefs()->GetInt64(prefs::kSiteEngagementLastUpdateTime)); |
1553 | 1528 |
1554 ASSERT_TRUE(last_engagement_time.is_null()); | 1529 ASSERT_TRUE(last_engagement_time.is_null()); |
1555 | 1530 ASSERT_TRUE(service_->GetLastEngagementTime().is_null()); |
1556 base::SimpleTestClock* clock = new base::SimpleTestClock(); | |
1557 std::unique_ptr<SiteEngagementService> service( | |
1558 new SiteEngagementService(profile(), base::WrapUnique(clock))); | |
1559 | |
1560 ASSERT_TRUE(service->GetLastEngagementTime().is_null()); | |
1561 | 1531 |
1562 base::Time current_day = GetReferenceTime(); | 1532 base::Time current_day = GetReferenceTime(); |
1563 clock->SetNow(current_day); | 1533 clock_->SetNow(current_day); |
1564 | 1534 |
1565 // Add points should set the last engagement time in the service, and persist | 1535 // Add points should set the last engagement time in the service, and persist |
1566 // it to disk. | 1536 // it to disk. |
1567 GURL origin("http://www.google.com/"); | 1537 GURL origin("http://www.google.com/"); |
1568 service->AddPoints(origin, 1); | 1538 service_->AddPoints(origin, 1); |
1569 | 1539 |
1570 last_engagement_time = base::Time::FromInternalValue( | 1540 last_engagement_time = base::Time::FromInternalValue( |
1571 profile()->GetPrefs()->GetInt64(prefs::kSiteEngagementLastUpdateTime)); | 1541 profile()->GetPrefs()->GetInt64(prefs::kSiteEngagementLastUpdateTime)); |
1572 | 1542 |
1573 EXPECT_EQ(current_day, service->GetLastEngagementTime()); | 1543 EXPECT_EQ(current_day, service_->GetLastEngagementTime()); |
1574 EXPECT_EQ(current_day, last_engagement_time); | 1544 EXPECT_EQ(current_day, last_engagement_time); |
1575 | 1545 |
1576 // Running a cleanup and updating last engagement times should persist the | 1546 // Running a cleanup and updating last engagement times should persist the |
1577 // last engagement time to disk. | 1547 // last engagement time to disk. |
1578 current_day += service->GetStalePeriod(); | 1548 current_day += service_->GetStalePeriod(); |
1579 base::Time rebased_time = current_day - service->GetMaxDecayPeriod(); | 1549 base::Time rebased_time = current_day - service_->GetMaxDecayPeriod(); |
1580 clock->SetNow(current_day); | 1550 clock_->SetNow(current_day); |
1581 service->CleanupEngagementScores(true); | 1551 service_->CleanupEngagementScores(true); |
1582 | 1552 |
1583 last_engagement_time = base::Time::FromInternalValue( | 1553 last_engagement_time = base::Time::FromInternalValue( |
1584 profile()->GetPrefs()->GetInt64(prefs::kSiteEngagementLastUpdateTime)); | 1554 profile()->GetPrefs()->GetInt64(prefs::kSiteEngagementLastUpdateTime)); |
1585 | 1555 |
1586 EXPECT_EQ(rebased_time, last_engagement_time); | 1556 EXPECT_EQ(rebased_time, last_engagement_time); |
1587 EXPECT_EQ(rebased_time, service->GetLastEngagementTime()); | 1557 EXPECT_EQ(rebased_time, service_->GetLastEngagementTime()); |
1588 | 1558 |
1589 // Adding 0 points shouldn't update the last engagement time. | 1559 // Adding 0 points shouldn't update the last engagement time. |
1590 base::Time later_in_day = current_day + base::TimeDelta::FromSeconds(30); | 1560 base::Time later_in_day = current_day + base::TimeDelta::FromSeconds(30); |
1591 clock->SetNow(later_in_day); | 1561 clock_->SetNow(later_in_day); |
1592 service->AddPoints(origin, 0); | 1562 service_->AddPoints(origin, 0); |
1593 | 1563 |
1594 last_engagement_time = base::Time::FromInternalValue( | 1564 last_engagement_time = base::Time::FromInternalValue( |
1595 profile()->GetPrefs()->GetInt64(prefs::kSiteEngagementLastUpdateTime)); | 1565 profile()->GetPrefs()->GetInt64(prefs::kSiteEngagementLastUpdateTime)); |
1596 EXPECT_EQ(rebased_time, last_engagement_time); | 1566 EXPECT_EQ(rebased_time, last_engagement_time); |
1597 EXPECT_EQ(rebased_time, service->GetLastEngagementTime()); | 1567 EXPECT_EQ(rebased_time, service_->GetLastEngagementTime()); |
1598 | 1568 |
1599 // Add some more points and ensure the value is persisted. | 1569 // Add some more points and ensure the value is persisted. |
1600 service->AddPoints(origin, 3); | 1570 service_->AddPoints(origin, 3); |
1601 | 1571 |
1602 last_engagement_time = base::Time::FromInternalValue( | 1572 last_engagement_time = base::Time::FromInternalValue( |
1603 profile()->GetPrefs()->GetInt64(prefs::kSiteEngagementLastUpdateTime)); | 1573 profile()->GetPrefs()->GetInt64(prefs::kSiteEngagementLastUpdateTime)); |
1604 | 1574 |
1605 EXPECT_EQ(later_in_day, last_engagement_time); | 1575 EXPECT_EQ(later_in_day, last_engagement_time); |
1606 EXPECT_EQ(later_in_day, service->GetLastEngagementTime()); | 1576 EXPECT_EQ(later_in_day, service_->GetLastEngagementTime()); |
1607 } | 1577 } |
1608 | 1578 |
1609 TEST_F(SiteEngagementServiceTest, CleanupMovesScoreBackToNow) { | 1579 TEST_F(SiteEngagementServiceTest, CleanupMovesScoreBackToNow) { |
1610 base::SimpleTestClock* clock = new base::SimpleTestClock(); | |
1611 std::unique_ptr<SiteEngagementService> service( | |
1612 new SiteEngagementService(profile(), base::WrapUnique(clock))); | |
1613 base::Time last_engagement_time; | 1580 base::Time last_engagement_time; |
1614 | 1581 |
1615 base::Time current_day = GetReferenceTime(); | 1582 base::Time current_day = GetReferenceTime(); |
1616 clock->SetNow(current_day); | 1583 clock_->SetNow(current_day); |
1617 | 1584 |
1618 GURL origin("http://www.google.com/"); | 1585 GURL origin("http://www.google.com/"); |
1619 service->AddPoints(origin, 1); | 1586 service_->AddPoints(origin, 1); |
1620 EXPECT_EQ(1, service->GetScore(origin)); | 1587 EXPECT_EQ(1, service_->GetScore(origin)); |
1621 EXPECT_EQ(current_day, service->GetLastEngagementTime()); | 1588 EXPECT_EQ(current_day, service_->GetLastEngagementTime()); |
1622 | 1589 |
1623 // Send the clock back in time before the stale period and add engagement for | 1590 // Send the clock back in time before the stale period and add engagement for |
1624 // a new origin. Ensure that the original origin has its last engagement time | 1591 // a new origin. Ensure that the original origin has its last engagement time |
1625 // updated to now as a result. | 1592 // updated to now as a result. |
1626 base::Time before_stale_period = | 1593 base::Time before_stale_period = clock_->Now() - service_->GetStalePeriod() - |
1627 clock->Now() - service->GetStalePeriod() - service->GetMaxDecayPeriod(); | 1594 service_->GetMaxDecayPeriod(); |
1628 clock->SetNow(before_stale_period); | 1595 clock_->SetNow(before_stale_period); |
1629 | 1596 |
1630 GURL origin1("http://maps.google.com/"); | 1597 GURL origin1("http://maps.google.com/"); |
1631 service->AddPoints(origin1, 1); | 1598 service_->AddPoints(origin1, 1); |
1632 | 1599 |
1633 EXPECT_EQ(before_stale_period, | 1600 EXPECT_EQ(before_stale_period, |
1634 service->CreateEngagementScore(origin).last_engagement_time()); | 1601 service_->CreateEngagementScore(origin).last_engagement_time()); |
1635 EXPECT_EQ(before_stale_period, service->GetLastEngagementTime()); | 1602 EXPECT_EQ(before_stale_period, service_->GetLastEngagementTime()); |
1636 EXPECT_EQ(1, service->GetScore(origin)); | 1603 EXPECT_EQ(1, service_->GetScore(origin)); |
1637 EXPECT_EQ(1, service->GetScore(origin1)); | 1604 EXPECT_EQ(1, service_->GetScore(origin1)); |
1638 | 1605 |
1639 // Advance within a decay period and add points. | 1606 // Advance within a decay period and add points. |
1640 base::TimeDelta less_than_decay_period = | 1607 base::TimeDelta less_than_decay_period = |
1641 base::TimeDelta::FromHours(SiteEngagementScore::GetDecayPeriodInHours()) - | 1608 base::TimeDelta::FromHours(SiteEngagementScore::GetDecayPeriodInHours()) - |
1642 base::TimeDelta::FromSeconds(30); | 1609 base::TimeDelta::FromSeconds(30); |
1643 base::Time origin1_last_updated = clock->Now() + less_than_decay_period; | 1610 base::Time origin1_last_updated = clock_->Now() + less_than_decay_period; |
1644 clock->SetNow(origin1_last_updated); | 1611 clock_->SetNow(origin1_last_updated); |
1645 service->AddPoints(origin, 1); | 1612 service_->AddPoints(origin, 1); |
1646 service->AddPoints(origin1, 5); | 1613 service_->AddPoints(origin1, 5); |
1647 EXPECT_EQ(2, service->GetScore(origin)); | 1614 EXPECT_EQ(2, service_->GetScore(origin)); |
1648 EXPECT_EQ(6, service->GetScore(origin1)); | 1615 EXPECT_EQ(6, service_->GetScore(origin1)); |
1649 | 1616 |
1650 clock->SetNow(clock->Now() + less_than_decay_period); | 1617 clock_->SetNow(clock_->Now() + less_than_decay_period); |
1651 service->AddPoints(origin, 5); | 1618 service_->AddPoints(origin, 5); |
1652 EXPECT_EQ(7, service->GetScore(origin)); | 1619 EXPECT_EQ(7, service_->GetScore(origin)); |
1653 | 1620 |
1654 // Move forward to the max number of decays per score. This is within the | 1621 // Move forward to the max number of decays per score. This is within the |
1655 // stale period so no cleanup should be run. | 1622 // stale period so no cleanup should be run. |
1656 for (int i = 0; i < SiteEngagementScore::GetMaxDecaysPerScore(); ++i) { | 1623 for (int i = 0; i < SiteEngagementScore::GetMaxDecaysPerScore(); ++i) { |
1657 clock->SetNow(clock->Now() + less_than_decay_period); | 1624 clock_->SetNow(clock_->Now() + less_than_decay_period); |
1658 service->AddPoints(origin, 5); | 1625 service_->AddPoints(origin, 5); |
1659 EXPECT_EQ(clock->Now(), service->GetLastEngagementTime()); | 1626 EXPECT_EQ(clock_->Now(), service_->GetLastEngagementTime()); |
1660 } | 1627 } |
1661 EXPECT_EQ(12, service->GetScore(origin)); | 1628 EXPECT_EQ(12, service_->GetScore(origin)); |
1662 EXPECT_EQ(clock->Now(), service->GetLastEngagementTime()); | 1629 EXPECT_EQ(clock_->Now(), service_->GetLastEngagementTime()); |
1663 | 1630 |
1664 // Move the clock back to precisely 1 decay period after origin1's last | 1631 // Move the clock back to precisely 1 decay period after origin1's last |
1665 // updated time. |last_engagement_time| is in the future, so AddPoints | 1632 // updated time. |last_engagement_time| is in the future, so AddPoints |
1666 // triggers a cleanup. Ensure that |last_engagement_time| is moved back | 1633 // triggers a cleanup. Ensure that |last_engagement_time| is moved back |
1667 // appropriately, while origin1 is decayed correctly (once). | 1634 // appropriately, while origin1 is decayed correctly (once). |
1668 clock->SetNow(origin1_last_updated + less_than_decay_period + | 1635 clock_->SetNow(origin1_last_updated + less_than_decay_period + |
1669 base::TimeDelta::FromSeconds(30)); | 1636 base::TimeDelta::FromSeconds(30)); |
1670 service->AddPoints(origin1, 1); | 1637 service_->AddPoints(origin1, 1); |
1671 | 1638 |
1672 EXPECT_EQ(clock->Now(), | 1639 EXPECT_EQ(clock_->Now(), |
1673 service->CreateEngagementScore(origin).last_engagement_time()); | 1640 service_->CreateEngagementScore(origin).last_engagement_time()); |
1674 EXPECT_EQ(clock->Now(), service->GetLastEngagementTime()); | 1641 EXPECT_EQ(clock_->Now(), service_->GetLastEngagementTime()); |
1675 EXPECT_EQ(12, service->GetScore(origin)); | 1642 EXPECT_EQ(12, service_->GetScore(origin)); |
1676 EXPECT_EQ(1, service->GetScore(origin1)); | 1643 EXPECT_EQ(1, service_->GetScore(origin1)); |
1677 } | 1644 } |
1678 | 1645 |
1679 TEST_F(SiteEngagementServiceTest, CleanupMovesScoreBackToRebase) { | 1646 TEST_F(SiteEngagementServiceTest, CleanupMovesScoreBackToRebase) { |
1680 base::SimpleTestClock* clock = new base::SimpleTestClock(); | |
1681 std::unique_ptr<SiteEngagementService> service( | |
1682 new SiteEngagementService(profile(), base::WrapUnique(clock))); | |
1683 base::Time last_engagement_time; | 1647 base::Time last_engagement_time; |
1684 | 1648 |
1685 base::Time current_day = GetReferenceTime(); | 1649 base::Time current_day = GetReferenceTime(); |
1686 clock->SetNow(current_day); | 1650 clock_->SetNow(current_day); |
1687 | 1651 |
1688 GURL origin("http://www.google.com/"); | 1652 GURL origin("http://www.google.com/"); |
1689 service->ResetBaseScoreForURL(origin, 5); | 1653 service_->ResetBaseScoreForURL(origin, 5); |
1690 service->AddPoints(origin, 5); | 1654 service_->AddPoints(origin, 5); |
1691 EXPECT_EQ(10, service->GetScore(origin)); | 1655 EXPECT_EQ(10, service_->GetScore(origin)); |
1692 EXPECT_EQ(current_day, service->GetLastEngagementTime()); | 1656 EXPECT_EQ(current_day, service_->GetLastEngagementTime()); |
1693 | 1657 |
1694 // Send the clock back in time before the stale period and add engagement for | 1658 // Send the clock back in time before the stale period and add engagement for |
1695 // a new origin. | 1659 // a new origin. |
1696 base::Time before_stale_period = | 1660 base::Time before_stale_period = clock_->Now() - service_->GetStalePeriod() - |
1697 clock->Now() - service->GetStalePeriod() - service->GetMaxDecayPeriod(); | 1661 service_->GetMaxDecayPeriod(); |
1698 clock->SetNow(before_stale_period); | 1662 clock_->SetNow(before_stale_period); |
1699 | 1663 |
1700 GURL origin1("http://maps.google.com/"); | 1664 GURL origin1("http://maps.google.com/"); |
1701 service->AddPoints(origin1, 1); | 1665 service_->AddPoints(origin1, 1); |
1702 | 1666 |
1703 EXPECT_EQ(before_stale_period, service->GetLastEngagementTime()); | 1667 EXPECT_EQ(before_stale_period, service_->GetLastEngagementTime()); |
1704 | 1668 |
1705 // Set the clock such that |origin|'s last engagement time is between | 1669 // Set the clock such that |origin|'s last engagement time is between |
1706 // last_engagement_time and rebase_time. | 1670 // last_engagement_time and rebase_time. |
1707 clock->SetNow(current_day + service->GetStalePeriod() + | 1671 clock_->SetNow(current_day + service_->GetStalePeriod() + |
1708 service->GetMaxDecayPeriod() - | 1672 service_->GetMaxDecayPeriod() - |
1709 base::TimeDelta::FromSeconds((30))); | 1673 base::TimeDelta::FromSeconds((30))); |
1710 base::Time rebased_time = clock->Now() - service->GetMaxDecayPeriod(); | 1674 base::Time rebased_time = clock_->Now() - service_->GetMaxDecayPeriod(); |
1711 service->CleanupEngagementScores(true); | 1675 service_->CleanupEngagementScores(true); |
1712 | 1676 |
1713 // Ensure that the original origin has its last engagement time updated to | 1677 // Ensure that the original origin has its last engagement time updated to |
1714 // rebase_time, and it has decayed when we access the score. | 1678 // rebase_time, and it has decayed when we access the score. |
1715 EXPECT_EQ(rebased_time, | 1679 EXPECT_EQ(rebased_time, |
1716 service->CreateEngagementScore(origin).last_engagement_time()); | 1680 service_->CreateEngagementScore(origin).last_engagement_time()); |
1717 EXPECT_EQ(rebased_time, service->GetLastEngagementTime()); | 1681 EXPECT_EQ(rebased_time, service_->GetLastEngagementTime()); |
1718 EXPECT_EQ(5, service->GetScore(origin)); | 1682 EXPECT_EQ(5, service_->GetScore(origin)); |
1719 EXPECT_EQ(0, service->GetScore(origin1)); | 1683 EXPECT_EQ(0, service_->GetScore(origin1)); |
1720 } | 1684 } |
1721 | 1685 |
1722 TEST_F(SiteEngagementServiceTest, IncognitoEngagementService) { | 1686 TEST_F(SiteEngagementServiceTest, IncognitoEngagementService) { |
1723 SiteEngagementService* service = SiteEngagementService::Get(profile()); | 1687 SiteEngagementService* service = SiteEngagementService::Get(profile()); |
1724 ASSERT_TRUE(service); | 1688 ASSERT_TRUE(service); |
1725 | 1689 |
1726 GURL url1("http://www.google.com/"); | 1690 GURL url1("http://www.google.com/"); |
1727 GURL url2("https://www.google.com/"); | 1691 GURL url2("https://www.google.com/"); |
1728 GURL url3("https://drive.google.com/"); | 1692 GURL url3("https://drive.google.com/"); |
1729 GURL url4("https://maps.google.com/"); | 1693 GURL url4("https://maps.google.com/"); |
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1809 | 1773 |
1810 EXPECT_EQ(3, CheckScoreFromSettingsOnThread(content::BrowserThread::IO, | 1774 EXPECT_EQ(3, CheckScoreFromSettingsOnThread(content::BrowserThread::IO, |
1811 settings_map, url1)); | 1775 settings_map, url1)); |
1812 EXPECT_EQ(3, CheckScoreFromSettingsOnThread(content::BrowserThread::FILE, | 1776 EXPECT_EQ(3, CheckScoreFromSettingsOnThread(content::BrowserThread::FILE, |
1813 settings_map, url2)); | 1777 settings_map, url2)); |
1814 EXPECT_EQ(4, CheckScoreFromSettingsOnThread(content::BrowserThread::FILE, | 1778 EXPECT_EQ(4, CheckScoreFromSettingsOnThread(content::BrowserThread::FILE, |
1815 incognito_settings_map, url1)); | 1779 incognito_settings_map, url1)); |
1816 EXPECT_EQ(3, CheckScoreFromSettingsOnThread(content::BrowserThread::IO, | 1780 EXPECT_EQ(3, CheckScoreFromSettingsOnThread(content::BrowserThread::IO, |
1817 incognito_settings_map, url2)); | 1781 incognito_settings_map, url2)); |
1818 } | 1782 } |
OLD | NEW |