Chromium Code Reviews| 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 "base/command_line.h" | 5 #include "base/command_line.h" |
| 6 #include "base/test/histogram_tester.h" | |
| 6 #include "base/test/simple_test_clock.h" | 7 #include "base/test/simple_test_clock.h" |
| 7 #include "base/values.h" | 8 #include "base/values.h" |
| 8 #include "chrome/browser/engagement/site_engagement_helper.h" | 9 #include "chrome/browser/engagement/site_engagement_helper.h" |
| 10 #include "chrome/browser/engagement/site_engagement_metrics.h" | |
| 9 #include "chrome/browser/engagement/site_engagement_service.h" | 11 #include "chrome/browser/engagement/site_engagement_service.h" |
| 10 #include "chrome/browser/engagement/site_engagement_service_factory.h" | 12 #include "chrome/browser/engagement/site_engagement_service_factory.h" |
| 11 #include "chrome/common/chrome_switches.h" | 13 #include "chrome/common/chrome_switches.h" |
| 12 #include "chrome/test/base/browser_with_test_window_test.h" | 14 #include "chrome/test/base/browser_with_test_window_test.h" |
| 13 #include "testing/gtest/include/gtest/gtest.h" | 15 #include "testing/gtest/include/gtest/gtest.h" |
| 14 | 16 |
| 15 namespace { | 17 namespace { |
| 16 | 18 |
| 17 const int kLessAccumulationsThanNeededToMaxDailyEngagement = 2; | 19 const int kLessAccumulationsThanNeededToMaxDailyEngagement = 2; |
| 18 const int kMoreAccumulationsThanNeededToMaxDailyEngagement = 40; | 20 const int kMoreAccumulationsThanNeededToMaxDailyEngagement = 40; |
| (...skipping 294 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 313 public: | 315 public: |
| 314 SiteEngagementServiceTest() {} | 316 SiteEngagementServiceTest() {} |
| 315 | 317 |
| 316 void SetUp() override { | 318 void SetUp() override { |
| 317 BrowserWithTestWindowTest::SetUp(); | 319 BrowserWithTestWindowTest::SetUp(); |
| 318 base::CommandLine::ForCurrentProcess()->AppendSwitch( | 320 base::CommandLine::ForCurrentProcess()->AppendSwitch( |
| 319 switches::kEnableSiteEngagementService); | 321 switches::kEnableSiteEngagementService); |
| 320 } | 322 } |
| 321 }; | 323 }; |
| 322 | 324 |
| 325 TEST_F(SiteEngagementServiceTest, GetMedianEngagement) { | |
| 326 SiteEngagementService* service = | |
| 327 SiteEngagementServiceFactory::GetForProfile(profile()); | |
| 328 DCHECK(service); | |
| 329 | |
| 330 GURL url1("http://www.google.com/"); | |
| 331 GURL url2("https://www.google.com/"); | |
| 332 GURL url3("https://drive.google.com/"); | |
| 333 GURL url4("https://maps.google.com/"); | |
| 334 GURL url5("https://youtube.com/"); | |
| 335 GURL url6("https://images.google.com/"); | |
| 336 | |
| 337 { | |
| 338 // For zero total sites, the median is 0. | |
| 339 std::map<GURL, double> score_map = service->GetScoreMap(); | |
| 340 EXPECT_TRUE(0 == score_map.size()); | |
| 341 EXPECT_DOUBLE_EQ(0, service->GetMedianEngagement(score_map)); | |
| 342 } | |
| 343 | |
| 344 { | |
| 345 // For odd total sites, the median is the middle score. | |
| 346 service->AddPoints(url1, 1); | |
| 347 std::map<GURL, double> score_map = service->GetScoreMap(); | |
| 348 EXPECT_TRUE(1 == score_map.size()); | |
| 349 EXPECT_DOUBLE_EQ(1, service->GetMedianEngagement(score_map)); | |
| 350 } | |
| 351 | |
| 352 { | |
| 353 // For even total sites, the median is the mean of the middle two scores. | |
| 354 service->AddPoints(url2, 2); | |
| 355 std::map<GURL, double> score_map = service->GetScoreMap(); | |
| 356 EXPECT_TRUE(2 == score_map.size()); | |
| 357 EXPECT_DOUBLE_EQ(1.5, service->GetMedianEngagement(score_map)); | |
| 358 } | |
| 359 | |
| 360 { | |
| 361 service->AddPoints(url3, 1.4); | |
| 362 std::map<GURL, double> score_map = service->GetScoreMap(); | |
| 363 EXPECT_TRUE(3 == score_map.size()); | |
| 364 EXPECT_DOUBLE_EQ(1.4, service->GetMedianEngagement(score_map)); | |
| 365 } | |
| 366 | |
| 367 { | |
| 368 service->AddPoints(url4, 1.8); | |
| 369 std::map<GURL, double> score_map = service->GetScoreMap(); | |
| 370 EXPECT_TRUE(4 == score_map.size()); | |
| 371 EXPECT_DOUBLE_EQ(1.6, service->GetMedianEngagement(score_map)); | |
| 372 } | |
| 373 | |
| 374 { | |
| 375 service->AddPoints(url5, 2.5); | |
| 376 std::map<GURL, double> score_map = service->GetScoreMap(); | |
| 377 EXPECT_TRUE(5 == score_map.size()); | |
| 378 EXPECT_DOUBLE_EQ(1.8, service->GetMedianEngagement(score_map)); | |
| 379 } | |
| 380 | |
| 381 { | |
| 382 service->AddPoints(url6, 3); | |
| 383 std::map<GURL, double> score_map = service->GetScoreMap(); | |
| 384 EXPECT_TRUE(6 == score_map.size()); | |
| 385 EXPECT_DOUBLE_EQ(1.9, service->GetMedianEngagement(score_map)); | |
| 386 } | |
| 387 } | |
| 388 | |
| 323 // Tests that the Site Engagement service is hooked up properly to navigations | 389 // Tests that the Site Engagement service is hooked up properly to navigations |
| 324 // by performing two navigations and checking the engagement score increases | 390 // by performing two navigations and checking the engagement score increases |
| 325 // both times. | 391 // both times. |
| 326 TEST_F(SiteEngagementServiceTest, ScoreIncrementsOnPageRequest) { | 392 TEST_F(SiteEngagementServiceTest, ScoreIncrementsOnPageRequest) { |
| 327 SiteEngagementService* service = | 393 SiteEngagementService* service = |
| 328 SiteEngagementServiceFactory::GetForProfile(profile()); | 394 SiteEngagementServiceFactory::GetForProfile(profile()); |
| 329 DCHECK(service); | 395 DCHECK(service); |
| 330 | 396 |
| 331 GURL url("http://www.google.com/"); | 397 GURL url("http://www.google.com/"); |
| 332 | 398 |
| 333 AddTab(browser(), GURL("about:blank")); | 399 AddTab(browser(), GURL("about:blank")); |
| 334 EXPECT_EQ(0, service->GetScore(url)); | 400 EXPECT_EQ(0, service->GetScore(url)); |
| 335 double prev_score = service->GetScore(url); | 401 double prev_score = service->GetScore(url); |
| 336 | 402 |
| 337 NavigateAndCommitActiveTab(url); | 403 NavigateAndCommitActiveTab(url); |
| 338 EXPECT_LT(prev_score, service->GetScore(url)); | 404 EXPECT_LT(prev_score, service->GetScore(url)); |
| 339 prev_score = service->GetScore(url); | 405 prev_score = service->GetScore(url); |
| 340 | 406 |
| 341 NavigateAndCommitActiveTab(url); | 407 NavigateAndCommitActiveTab(url); |
| 342 EXPECT_LT(prev_score, service->GetScore(url)); | 408 EXPECT_LT(prev_score, service->GetScore(url)); |
| 343 } | 409 } |
| 344 | 410 |
| 345 // Expect that site engagement scores for several sites are correctly aggregated | 411 // Expect that site engagement scores for several sites are correctly |
| 346 // by GetTotalEngagementPoints(). | 412 // aggregated during navigation events. |
| 347 TEST_F(SiteEngagementServiceTest, GetTotalNavigationPoints) { | 413 TEST_F(SiteEngagementServiceTest, GetNavigationPointsAndHistograms) { |
| 348 SiteEngagementService* service = | 414 base::SimpleTestClock* clock = new base::SimpleTestClock(); |
| 349 SiteEngagementServiceFactory::GetForProfile(profile()); | 415 scoped_ptr<SiteEngagementService> service( |
| 350 DCHECK(service); | 416 new SiteEngagementService(profile(), make_scoped_ptr(clock))); |
| 417 | |
| 418 base::Time current_day = GetReferenceTime(); | |
| 419 clock->SetNow(current_day); | |
| 420 | |
| 421 base::HistogramTester histograms; | |
| 422 | |
| 423 // Histograms should start empty as the testing SiteEngagementService | |
| 424 // constructor does not record metrics. | |
| 425 histograms.ExpectTotalCount(SiteEngagementMetrics::kTotalEngagementHistogram, | |
| 426 0); | |
| 427 histograms.ExpectTotalCount(SiteEngagementMetrics::kTotalOriginsHistogram, 0); | |
| 428 histograms.ExpectTotalCount(SiteEngagementMetrics::kMeanEngagementHistogram, | |
| 429 0); | |
| 430 histograms.ExpectTotalCount(SiteEngagementMetrics::kMedianEngagementHistogram, | |
| 431 0); | |
| 432 histograms.ExpectTotalCount(SiteEngagementMetrics::kEngagementScoreHistogram, | |
| 433 0); | |
| 434 histograms.ExpectTotalCount( | |
| 435 SiteEngagementMetrics::kOriginsWithMaxEngagementHistogram, 0); | |
| 436 histograms.ExpectTotalCount( | |
| 437 SiteEngagementMetrics::kOriginsWithMaxDailyEngagementHistogram, 0); | |
| 438 histograms.ExpectTotalCount( | |
| 439 SiteEngagementMetrics::kPercentOriginsWithMaxEngagementHistogram, 0); | |
| 440 histograms.ExpectTotalCount(SiteEngagementMetrics::kEngagementTypeHistogram, | |
| 441 0); | |
| 351 | 442 |
| 352 // The https and http versions of www.google.com should be separate. | 443 // The https and http versions of www.google.com should be separate. |
| 353 GURL url1("https://www.google.com/"); | 444 GURL url1("https://www.google.com/"); |
| 354 GURL url2("http://www.google.com/"); | 445 GURL url2("http://www.google.com/"); |
| 355 GURL url3("http://drive.google.com/"); | 446 GURL url3("http://drive.google.com/"); |
| 356 | 447 |
| 357 EXPECT_EQ(0, service->GetScore(url1)); | 448 EXPECT_EQ(0, service->GetScore(url1)); |
| 358 EXPECT_EQ(0, service->GetScore(url2)); | 449 EXPECT_EQ(0, service->GetScore(url2)); |
| 359 EXPECT_EQ(0, service->GetScore(url3)); | 450 EXPECT_EQ(0, service->GetScore(url3)); |
| 360 | 451 |
| 361 service->HandleNavigation(url1, ui::PAGE_TRANSITION_TYPED); | 452 service->HandleNavigation(url1, ui::PAGE_TRANSITION_TYPED); |
| 362 EXPECT_EQ(0.5, service->GetScore(url1)); | 453 EXPECT_EQ(0.5, service->GetScore(url1)); |
| 363 EXPECT_EQ(0.5, service->GetTotalEngagementPoints()); | 454 EXPECT_EQ(0.5, service->GetTotalEngagementPoints()); |
| 364 | 455 |
| 456 histograms.ExpectTotalCount(SiteEngagementMetrics::kTotalEngagementHistogram, | |
| 457 1); | |
| 458 histograms.ExpectUniqueSample(SiteEngagementMetrics::kTotalOriginsHistogram, | |
| 459 1, 1); | |
| 460 histograms.ExpectTotalCount(SiteEngagementMetrics::kMeanEngagementHistogram, | |
| 461 1); | |
| 462 histograms.ExpectTotalCount(SiteEngagementMetrics::kMedianEngagementHistogram, | |
| 463 1); | |
| 464 histograms.ExpectTotalCount(SiteEngagementMetrics::kEngagementScoreHistogram, | |
| 465 1); | |
| 466 histograms.ExpectUniqueSample( | |
| 467 SiteEngagementMetrics::kOriginsWithMaxEngagementHistogram, 0, 1); | |
| 468 histograms.ExpectUniqueSample( | |
| 469 SiteEngagementMetrics::kOriginsWithMaxDailyEngagementHistogram, 0, 1); | |
| 470 histograms.ExpectUniqueSample( | |
| 471 SiteEngagementMetrics::kPercentOriginsWithMaxEngagementHistogram, 0, 1); | |
| 472 histograms.ExpectUniqueSample(SiteEngagementMetrics::kEngagementTypeHistogram, | |
| 473 SiteEngagementMetrics::ENGAGEMENT_NAVIGATION, | |
| 474 1); | |
| 475 | |
| 476 clock->SetNow(GetReferenceTime() + base::TimeDelta::FromMinutes(59)); | |
| 477 | |
| 365 service->HandleNavigation(url2, ui::PAGE_TRANSITION_GENERATED); | 478 service->HandleNavigation(url2, ui::PAGE_TRANSITION_GENERATED); |
| 366 service->HandleNavigation(url2, ui::PAGE_TRANSITION_AUTO_TOPLEVEL); | 479 service->HandleNavigation(url2, ui::PAGE_TRANSITION_AUTO_TOPLEVEL); |
| 367 EXPECT_EQ(1, service->GetScore(url2)); | 480 EXPECT_EQ(1, service->GetScore(url2)); |
| 368 EXPECT_EQ(1.5, service->GetTotalEngagementPoints()); | 481 EXPECT_EQ(1.5, service->GetTotalEngagementPoints()); |
| 369 | 482 |
| 483 histograms.ExpectUniqueSample(SiteEngagementMetrics::kEngagementTypeHistogram, | |
| 484 SiteEngagementMetrics::ENGAGEMENT_NAVIGATION, | |
| 485 3); | |
| 486 | |
| 487 clock->SetNow(GetReferenceTime() + base::TimeDelta::FromMinutes(60)); | |
| 488 | |
| 370 service->HandleNavigation(url3, ui::PAGE_TRANSITION_TYPED); | 489 service->HandleNavigation(url3, ui::PAGE_TRANSITION_TYPED); |
| 371 EXPECT_EQ(0.5, service->GetScore(url3)); | 490 EXPECT_EQ(0.5, service->GetScore(url3)); |
| 372 EXPECT_EQ(2, service->GetTotalEngagementPoints()); | 491 EXPECT_EQ(2, service->GetTotalEngagementPoints()); |
| 373 | 492 |
| 493 histograms.ExpectTotalCount(SiteEngagementMetrics::kTotalEngagementHistogram, | |
| 494 2); | |
| 495 histograms.ExpectBucketCount(SiteEngagementMetrics::kTotalOriginsHistogram, 1, | |
| 496 1); | |
| 497 histograms.ExpectBucketCount(SiteEngagementMetrics::kTotalOriginsHistogram, 3, | |
| 498 1); | |
| 499 histograms.ExpectTotalCount(SiteEngagementMetrics::kMeanEngagementHistogram, | |
| 500 2); | |
| 501 histograms.ExpectTotalCount(SiteEngagementMetrics::kMedianEngagementHistogram, | |
| 502 2); | |
| 503 // Recorded per origin. | |
| 504 histograms.ExpectTotalCount(SiteEngagementMetrics::kEngagementScoreHistogram, | |
| 505 4); | |
| 506 histograms.ExpectUniqueSample( | |
| 507 SiteEngagementMetrics::kOriginsWithMaxEngagementHistogram, 0, 2); | |
| 508 histograms.ExpectUniqueSample( | |
| 509 SiteEngagementMetrics::kOriginsWithMaxDailyEngagementHistogram, 0, 2); | |
| 510 histograms.ExpectUniqueSample( | |
| 511 SiteEngagementMetrics::kPercentOriginsWithMaxEngagementHistogram, 0, 2); | |
| 512 histograms.ExpectUniqueSample(SiteEngagementMetrics::kEngagementTypeHistogram, | |
| 513 SiteEngagementMetrics::ENGAGEMENT_NAVIGATION, | |
| 514 4); | |
| 515 | |
| 374 service->HandleNavigation(url1, ui::PAGE_TRANSITION_GENERATED); | 516 service->HandleNavigation(url1, ui::PAGE_TRANSITION_GENERATED); |
| 375 service->HandleNavigation(url1, ui::PAGE_TRANSITION_TYPED); | 517 service->HandleNavigation(url1, ui::PAGE_TRANSITION_TYPED); |
| 376 EXPECT_EQ(1.5, service->GetScore(url1)); | 518 EXPECT_EQ(1.5, service->GetScore(url1)); |
| 377 EXPECT_EQ(3, service->GetTotalEngagementPoints()); | 519 EXPECT_EQ(3, service->GetTotalEngagementPoints()); |
| 520 | |
| 521 histograms.ExpectUniqueSample(SiteEngagementMetrics::kEngagementTypeHistogram, | |
| 522 SiteEngagementMetrics::ENGAGEMENT_NAVIGATION, | |
| 523 6); | |
| 524 | |
| 525 // Advance an origin to the max for a day and advance the clock an hour before | |
| 526 // the last increment before max. Expect the histogram to be updated. | |
| 527 for (int i = 0; i < 6; ++i) | |
| 528 service->HandleNavigation(url1, ui::PAGE_TRANSITION_TYPED); | |
| 529 | |
| 530 clock->SetNow(GetReferenceTime() + base::TimeDelta::FromMinutes(121)); | |
| 531 service->HandleNavigation(url1, ui::PAGE_TRANSITION_TYPED); | |
| 532 | |
| 533 histograms.ExpectTotalCount(SiteEngagementMetrics::kTotalEngagementHistogram, | |
| 534 3); | |
| 535 histograms.ExpectBucketCount(SiteEngagementMetrics::kTotalOriginsHistogram, 1, | |
| 536 1); | |
| 537 histograms.ExpectBucketCount(SiteEngagementMetrics::kTotalOriginsHistogram, 3, | |
| 538 2); | |
| 539 histograms.ExpectTotalCount(SiteEngagementMetrics::kMeanEngagementHistogram, | |
| 540 3); | |
| 541 histograms.ExpectTotalCount(SiteEngagementMetrics::kMedianEngagementHistogram, | |
| 542 3); | |
| 543 // Recorded per origin. | |
| 544 histograms.ExpectTotalCount(SiteEngagementMetrics::kEngagementScoreHistogram, | |
| 545 7); | |
| 546 histograms.ExpectUniqueSample( | |
| 547 SiteEngagementMetrics::kOriginsWithMaxEngagementHistogram, 0, 3); | |
| 548 histograms.ExpectBucketCount( | |
| 549 SiteEngagementMetrics::kOriginsWithMaxDailyEngagementHistogram, 0, 2); | |
| 550 histograms.ExpectBucketCount( | |
| 551 SiteEngagementMetrics::kOriginsWithMaxDailyEngagementHistogram, 1, 1); | |
| 552 histograms.ExpectUniqueSample( | |
| 553 SiteEngagementMetrics::kPercentOriginsWithMaxEngagementHistogram, 0, 3); | |
| 554 histograms.ExpectUniqueSample(SiteEngagementMetrics::kEngagementTypeHistogram, | |
| 555 SiteEngagementMetrics::ENGAGEMENT_NAVIGATION, | |
| 556 13); | |
| 378 } | 557 } |
| 379 | 558 |
| 380 TEST_F(SiteEngagementServiceTest, GetTotalUserInputPoints) { | 559 TEST_F(SiteEngagementServiceTest, GetUserInputPointsAndHistograms) { |
| 381 SiteEngagementService* service = | 560 base::SimpleTestClock* clock = new base::SimpleTestClock(); |
| 382 SiteEngagementServiceFactory::GetForProfile(profile()); | 561 scoped_ptr<SiteEngagementService> service( |
| 383 DCHECK(service); | 562 new SiteEngagementService(profile(), make_scoped_ptr(clock))); |
| 563 | |
| 564 base::Time current_day = GetReferenceTime(); | |
| 565 clock->SetNow(current_day); | |
| 566 | |
| 567 base::HistogramTester histograms; | |
| 568 | |
| 569 // Histograms should start empty as the testing SiteEngagementService | |
| 570 // constructor does not record metrics. | |
| 571 histograms.ExpectTotalCount(SiteEngagementMetrics::kTotalEngagementHistogram, | |
| 572 0); | |
| 573 histograms.ExpectTotalCount(SiteEngagementMetrics::kTotalOriginsHistogram, 0); | |
| 574 histograms.ExpectTotalCount(SiteEngagementMetrics::kMeanEngagementHistogram, | |
| 575 0); | |
| 576 histograms.ExpectTotalCount(SiteEngagementMetrics::kMedianEngagementHistogram, | |
| 577 0); | |
| 578 histograms.ExpectTotalCount(SiteEngagementMetrics::kEngagementScoreHistogram, | |
| 579 0); | |
| 580 histograms.ExpectTotalCount( | |
| 581 SiteEngagementMetrics::kOriginsWithMaxEngagementHistogram, 0); | |
| 582 histograms.ExpectTotalCount( | |
| 583 SiteEngagementMetrics::kOriginsWithMaxDailyEngagementHistogram, 0); | |
| 584 histograms.ExpectTotalCount( | |
| 585 SiteEngagementMetrics::kPercentOriginsWithMaxEngagementHistogram, 0); | |
| 586 histograms.ExpectTotalCount(SiteEngagementMetrics::kEngagementTypeHistogram, | |
| 587 0); | |
| 384 | 588 |
| 385 // The https and http versions of www.google.com should be separate. | 589 // The https and http versions of www.google.com should be separate. |
| 386 GURL url1("https://www.google.com/"); | 590 GURL url1("https://www.google.com/"); |
| 387 GURL url2("http://www.google.com/"); | 591 GURL url2("http://www.google.com/"); |
| 388 GURL url3("http://drive.google.com/"); | 592 GURL url3("http://drive.google.com/"); |
| 389 | 593 |
| 390 EXPECT_EQ(0, service->GetScore(url1)); | 594 EXPECT_EQ(0, service->GetScore(url1)); |
| 391 EXPECT_EQ(0, service->GetScore(url2)); | 595 EXPECT_EQ(0, service->GetScore(url2)); |
| 392 EXPECT_EQ(0, service->GetScore(url3)); | 596 EXPECT_EQ(0, service->GetScore(url3)); |
| 393 | 597 |
| 394 service->HandleUserInput(url1); | 598 service->HandleUserInput(url1, SiteEngagementMetrics::ENGAGEMENT_MOUSE); |
| 395 EXPECT_DOUBLE_EQ(0.05, service->GetScore(url1)); | 599 EXPECT_DOUBLE_EQ(0.05, service->GetScore(url1)); |
| 396 EXPECT_DOUBLE_EQ(0.05, service->GetTotalEngagementPoints()); | 600 EXPECT_DOUBLE_EQ(0.05, service->GetTotalEngagementPoints()); |
| 397 | 601 |
| 398 service->HandleUserInput(url2); | 602 histograms.ExpectTotalCount(SiteEngagementMetrics::kTotalEngagementHistogram, |
| 399 service->HandleUserInput(url2); | 603 1); |
| 604 histograms.ExpectUniqueSample(SiteEngagementMetrics::kTotalOriginsHistogram, | |
| 605 1, 1); | |
| 606 histograms.ExpectTotalCount(SiteEngagementMetrics::kMeanEngagementHistogram, | |
| 607 1); | |
| 608 histograms.ExpectTotalCount(SiteEngagementMetrics::kMedianEngagementHistogram, | |
| 609 1); | |
| 610 histograms.ExpectTotalCount(SiteEngagementMetrics::kEngagementScoreHistogram, | |
| 611 1); | |
| 612 histograms.ExpectUniqueSample( | |
| 613 SiteEngagementMetrics::kOriginsWithMaxEngagementHistogram, 0, 1); | |
| 614 histograms.ExpectUniqueSample( | |
| 615 SiteEngagementMetrics::kOriginsWithMaxDailyEngagementHistogram, 0, 1); | |
| 616 histograms.ExpectUniqueSample( | |
| 617 SiteEngagementMetrics::kPercentOriginsWithMaxEngagementHistogram, 0, 1); | |
| 618 histograms.ExpectUniqueSample(SiteEngagementMetrics::kEngagementTypeHistogram, | |
| 619 SiteEngagementMetrics::ENGAGEMENT_MOUSE, 1); | |
| 620 | |
| 621 clock->SetNow(GetReferenceTime() + base::TimeDelta::FromMinutes(45)); | |
| 622 service->HandleUserInput(url2, SiteEngagementMetrics::ENGAGEMENT_MOUSE); | |
| 623 clock->SetNow(GetReferenceTime() + base::TimeDelta::FromMinutes(60)); | |
| 624 service->HandleUserInput(url2, SiteEngagementMetrics::ENGAGEMENT_KEYPRESS); | |
| 400 EXPECT_DOUBLE_EQ(0.1, service->GetScore(url2)); | 625 EXPECT_DOUBLE_EQ(0.1, service->GetScore(url2)); |
| 401 EXPECT_DOUBLE_EQ(0.15, service->GetTotalEngagementPoints()); | 626 EXPECT_DOUBLE_EQ(0.15, service->GetTotalEngagementPoints()); |
| 402 | 627 |
| 403 service->HandleUserInput(url3); | 628 histograms.ExpectTotalCount(SiteEngagementMetrics::kTotalEngagementHistogram, |
| 629 2); | |
| 630 histograms.ExpectTotalCount(SiteEngagementMetrics::kTotalOriginsHistogram, 2); | |
| 631 histograms.ExpectBucketCount(SiteEngagementMetrics::kTotalOriginsHistogram, 1, | |
| 632 1); | |
| 633 histograms.ExpectBucketCount(SiteEngagementMetrics::kTotalOriginsHistogram, 2, | |
| 634 1); | |
| 635 histograms.ExpectTotalCount(SiteEngagementMetrics::kMeanEngagementHistogram, | |
| 636 2); | |
| 637 histograms.ExpectTotalCount(SiteEngagementMetrics::kMedianEngagementHistogram, | |
| 638 2); | |
| 639 // Per origin. | |
| 640 histograms.ExpectTotalCount(SiteEngagementMetrics::kEngagementScoreHistogram, | |
| 641 3); | |
| 642 histograms.ExpectUniqueSample( | |
| 643 SiteEngagementMetrics::kOriginsWithMaxEngagementHistogram, 0, 2); | |
| 644 histograms.ExpectUniqueSample( | |
| 645 SiteEngagementMetrics::kOriginsWithMaxDailyEngagementHistogram, 0, 2); | |
| 646 histograms.ExpectUniqueSample( | |
| 647 SiteEngagementMetrics::kPercentOriginsWithMaxEngagementHistogram, 0, 2); | |
| 648 histograms.ExpectTotalCount(SiteEngagementMetrics::kEngagementTypeHistogram, | |
| 649 3); | |
| 650 histograms.ExpectBucketCount(SiteEngagementMetrics::kEngagementTypeHistogram, | |
| 651 SiteEngagementMetrics::ENGAGEMENT_MOUSE, 2); | |
| 652 histograms.ExpectBucketCount(SiteEngagementMetrics::kEngagementTypeHistogram, | |
| 653 SiteEngagementMetrics::ENGAGEMENT_KEYPRESS, 1); | |
| 654 | |
| 655 clock->SetNow(GetReferenceTime() + base::TimeDelta::FromMinutes(150)); | |
| 656 service->HandleUserInput(url3, SiteEngagementMetrics::ENGAGEMENT_KEYPRESS); | |
| 404 EXPECT_DOUBLE_EQ(0.05, service->GetScore(url3)); | 657 EXPECT_DOUBLE_EQ(0.05, service->GetScore(url3)); |
| 405 EXPECT_DOUBLE_EQ(0.2, service->GetTotalEngagementPoints()); | 658 EXPECT_DOUBLE_EQ(0.2, service->GetTotalEngagementPoints()); |
| 659 histograms.ExpectTotalCount(SiteEngagementMetrics::kEngagementTypeHistogram, | |
| 660 4); | |
| 661 histograms.ExpectBucketCount(SiteEngagementMetrics::kEngagementTypeHistogram, | |
| 662 SiteEngagementMetrics::ENGAGEMENT_KEYPRESS, 2); | |
| 406 | 663 |
| 407 service->HandleUserInput(url1); | 664 service->HandleUserInput(url1, SiteEngagementMetrics::ENGAGEMENT_KEYPRESS); |
| 408 service->HandleUserInput(url1); | 665 service->HandleUserInput(url1, SiteEngagementMetrics::ENGAGEMENT_MOUSE); |
| 409 EXPECT_DOUBLE_EQ(0.15, service->GetScore(url1)); | 666 EXPECT_DOUBLE_EQ(0.15, service->GetScore(url1)); |
| 410 EXPECT_DOUBLE_EQ(0.3, service->GetTotalEngagementPoints()); | 667 EXPECT_DOUBLE_EQ(0.3, service->GetTotalEngagementPoints()); |
| 668 histograms.ExpectTotalCount(SiteEngagementMetrics::kEngagementTypeHistogram, | |
| 669 6); | |
| 670 histograms.ExpectBucketCount(SiteEngagementMetrics::kEngagementTypeHistogram, | |
| 671 SiteEngagementMetrics::ENGAGEMENT_MOUSE, 3); | |
| 672 histograms.ExpectBucketCount(SiteEngagementMetrics::kEngagementTypeHistogram, | |
| 673 SiteEngagementMetrics::ENGAGEMENT_KEYPRESS, 3); | |
| 674 | |
| 675 // Advance an origin to the max and ensure the histogram is correctly | |
| 676 // incremented. | |
| 677 for (int i = 0; i < 1996; ++i) | |
| 678 service->HandleUserInput(url1, SiteEngagementMetrics::ENGAGEMENT_MOUSE); | |
| 679 | |
| 680 clock->SetNow(GetReferenceTime() + base::TimeDelta::FromMinutes(210)); | |
| 681 service->HandleUserInput(url1, SiteEngagementMetrics::ENGAGEMENT_MOUSE); | |
| 682 | |
| 683 histograms.ExpectTotalCount(SiteEngagementMetrics::kTotalEngagementHistogram, | |
| 684 4); | |
| 685 histograms.ExpectTotalCount(SiteEngagementMetrics::kTotalOriginsHistogram, 4); | |
| 686 histograms.ExpectBucketCount(SiteEngagementMetrics::kTotalOriginsHistogram, 1, | |
| 687 1); | |
| 688 histograms.ExpectBucketCount(SiteEngagementMetrics::kTotalOriginsHistogram, 2, | |
| 689 1); | |
| 690 histograms.ExpectBucketCount(SiteEngagementMetrics::kTotalOriginsHistogram, 3, | |
| 691 2); | |
| 692 histograms.ExpectTotalCount(SiteEngagementMetrics::kMeanEngagementHistogram, | |
| 693 4); | |
| 694 histograms.ExpectTotalCount(SiteEngagementMetrics::kMedianEngagementHistogram, | |
| 695 4); | |
| 696 // Recorded per origin. | |
| 697 histograms.ExpectTotalCount(SiteEngagementMetrics::kEngagementScoreHistogram, | |
| 698 9); | |
| 699 histograms.ExpectUniqueSample( | |
| 700 SiteEngagementMetrics::kOriginsWithMaxEngagementHistogram, 0, 4); | |
| 701 histograms.ExpectTotalCount( | |
| 702 SiteEngagementMetrics::kOriginsWithMaxDailyEngagementHistogram, 4); | |
| 703 histograms.ExpectBucketCount( | |
| 704 SiteEngagementMetrics::kOriginsWithMaxDailyEngagementHistogram, 0, 3); | |
| 705 histograms.ExpectBucketCount( | |
| 706 SiteEngagementMetrics::kOriginsWithMaxDailyEngagementHistogram, 1, 1); | |
| 707 histograms.ExpectUniqueSample( | |
| 708 SiteEngagementMetrics::kPercentOriginsWithMaxEngagementHistogram, 0, 4); | |
| 709 histograms.ExpectTotalCount(SiteEngagementMetrics::kEngagementTypeHistogram, | |
| 710 2003); | |
| 711 histograms.ExpectBucketCount(SiteEngagementMetrics::kEngagementTypeHistogram, | |
| 712 SiteEngagementMetrics::ENGAGEMENT_MOUSE, 2000); | |
| 713 histograms.ExpectBucketCount(SiteEngagementMetrics::kEngagementTypeHistogram, | |
| 714 SiteEngagementMetrics::ENGAGEMENT_KEYPRESS, 3); | |
|
calamity
2015/10/02 05:31:18
These tests are getting too unruly. Can you just f
dominickn
2015/10/02 06:06:17
Done.
| |
| 411 } | 715 } |
| 412 | 716 |
| 413 // Expect that sites that have reached zero engagement are cleaned up. | 717 // Expect that sites that have reached zero engagement are cleaned up. |
| 414 TEST_F(SiteEngagementServiceTest, CleanupEngagementScores) { | 718 TEST_F(SiteEngagementServiceTest, CleanupEngagementScores) { |
| 415 base::SimpleTestClock* clock = new base::SimpleTestClock(); | 719 base::SimpleTestClock* clock = new base::SimpleTestClock(); |
| 416 scoped_ptr<SiteEngagementService> service( | 720 scoped_ptr<SiteEngagementService> service( |
| 417 new SiteEngagementService(profile(), make_scoped_ptr(clock))); | 721 new SiteEngagementService(profile(), make_scoped_ptr(clock))); |
| 418 | 722 |
| 419 base::Time current_day = GetReferenceTime(); | 723 base::Time current_day = GetReferenceTime(); |
| 420 clock->SetNow(current_day); | 724 clock->SetNow(current_day); |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 470 EXPECT_EQ(1u, score_map.size()); | 774 EXPECT_EQ(1u, score_map.size()); |
| 471 EXPECT_EQ(0, score_map[url1]); | 775 EXPECT_EQ(0, score_map[url1]); |
| 472 | 776 |
| 473 service->CleanupEngagementScores(); | 777 service->CleanupEngagementScores(); |
| 474 | 778 |
| 475 score_map = service->GetScoreMap(); | 779 score_map = service->GetScoreMap(); |
| 476 EXPECT_EQ(0u, score_map.size()); | 780 EXPECT_EQ(0u, score_map.size()); |
| 477 EXPECT_EQ(0, service->GetScore(url1)); | 781 EXPECT_EQ(0, service->GetScore(url1)); |
| 478 } | 782 } |
| 479 } | 783 } |
| OLD | NEW |