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

Side by Side Diff: chrome/browser/engagement/site_engagement_service_unittest.cc

Issue 1368533004: Add UMA metrics to the site engagement service. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@time-on-site
Patch Set: Rebase Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 319 matching lines...) Expand 10 before | Expand all | Expand 10 after
338 EXPECT_LT(prev_score, service->GetScore(url)); 340 EXPECT_LT(prev_score, service->GetScore(url));
339 prev_score = service->GetScore(url); 341 prev_score = service->GetScore(url);
340 342
341 NavigateAndCommitActiveTab(url); 343 NavigateAndCommitActiveTab(url);
342 EXPECT_LT(prev_score, service->GetScore(url)); 344 EXPECT_LT(prev_score, service->GetScore(url));
343 } 345 }
344 346
345 // Expect that site engagement scores for several sites are correctly aggregated 347 // Expect that site engagement scores for several sites are correctly aggregated
346 // by GetTotalEngagementPoints(). 348 // by GetTotalEngagementPoints().
347 TEST_F(SiteEngagementServiceTest, GetTotalNavigationPoints) { 349 TEST_F(SiteEngagementServiceTest, GetTotalNavigationPoints) {
348 SiteEngagementService* service = 350 base::SimpleTestClock* clock = new base::SimpleTestClock();
349 SiteEngagementServiceFactory::GetForProfile(profile()); 351 scoped_ptr<SiteEngagementService> service(
350 DCHECK(service); 352 new SiteEngagementService(profile(), make_scoped_ptr(clock)));
353
354 base::Time current_day = GetReferenceTime();
355 clock->SetNow(current_day);
356
357 base::HistogramTester histograms;
358
359 // Histograms should start empty.
360 histograms.ExpectTotalCount(SiteEngagementMetrics::kEngagementTypeHistogram,
361 0);
362 histograms.ExpectTotalCount(
363 SiteEngagementMetrics::kOriginsWithMaxDailyEngagementHistogram, 0);
364 histograms.ExpectTotalCount(
365 SiteEngagementMetrics::kOriginsWithMaxEngagementHistogram, 0);
351 366
352 // The https and http versions of www.google.com should be separate. 367 // The https and http versions of www.google.com should be separate.
353 GURL url1("https://www.google.com/"); 368 GURL url1("https://www.google.com/");
354 GURL url2("http://www.google.com/"); 369 GURL url2("http://www.google.com/");
355 GURL url3("http://drive.google.com/"); 370 GURL url3("http://drive.google.com/");
356 371
357 EXPECT_EQ(0, service->GetScore(url1)); 372 EXPECT_EQ(0, service->GetScore(url1));
358 EXPECT_EQ(0, service->GetScore(url2)); 373 EXPECT_EQ(0, service->GetScore(url2));
359 EXPECT_EQ(0, service->GetScore(url3)); 374 EXPECT_EQ(0, service->GetScore(url3));
360 375
361 service->HandleNavigation(url1, ui::PAGE_TRANSITION_TYPED); 376 service->HandleNavigation(url1, ui::PAGE_TRANSITION_TYPED);
362 EXPECT_EQ(0.5, service->GetScore(url1)); 377 EXPECT_EQ(0.5, service->GetScore(url1));
363 EXPECT_EQ(0.5, service->GetTotalEngagementPoints()); 378 EXPECT_EQ(0.5, service->GetTotalEngagementPoints());
379 histograms.ExpectTotalCount(SiteEngagementMetrics::kEngagementTypeHistogram,
380 1);
381 histograms.ExpectBucketCount(SiteEngagementMetrics::kEngagementTypeHistogram,
382 SiteEngagementMetrics::ENGAGEMENT_NAVIGATION, 1);
383 histograms.ExpectTotalCount(
384 SiteEngagementMetrics::kOriginsWithMaxDailyEngagementHistogram, 1);
385 histograms.ExpectBucketCount(
386 SiteEngagementMetrics::kOriginsWithMaxDailyEngagementHistogram, 0, 1);
387 histograms.ExpectTotalCount(
388 SiteEngagementMetrics::kOriginsWithMaxEngagementHistogram, 1);
389 histograms.ExpectBucketCount(
390 SiteEngagementMetrics::kOriginsWithMaxEngagementHistogram, 0, 1);
391
392 clock->SetNow(GetReferenceTime() + base::TimeDelta::FromMinutes(59));
364 393
365 service->HandleNavigation(url2, ui::PAGE_TRANSITION_GENERATED); 394 service->HandleNavigation(url2, ui::PAGE_TRANSITION_GENERATED);
366 service->HandleNavigation(url2, ui::PAGE_TRANSITION_AUTO_TOPLEVEL); 395 service->HandleNavigation(url2, ui::PAGE_TRANSITION_AUTO_TOPLEVEL);
367 EXPECT_EQ(1, service->GetScore(url2)); 396 EXPECT_EQ(1, service->GetScore(url2));
368 EXPECT_EQ(1.5, service->GetTotalEngagementPoints()); 397 EXPECT_EQ(1.5, service->GetTotalEngagementPoints());
398 histograms.ExpectTotalCount(SiteEngagementMetrics::kEngagementTypeHistogram,
399 3);
400 histograms.ExpectBucketCount(SiteEngagementMetrics::kEngagementTypeHistogram,
401 SiteEngagementMetrics::ENGAGEMENT_NAVIGATION, 3);
402 histograms.ExpectTotalCount(
403 SiteEngagementMetrics::kOriginsWithMaxDailyEngagementHistogram, 1);
404 histograms.ExpectTotalCount(
405 SiteEngagementMetrics::kOriginsWithMaxEngagementHistogram, 1);
406
407 clock->SetNow(GetReferenceTime() + base::TimeDelta::FromMinutes(60));
369 408
370 service->HandleNavigation(url3, ui::PAGE_TRANSITION_TYPED); 409 service->HandleNavigation(url3, ui::PAGE_TRANSITION_TYPED);
371 EXPECT_EQ(0.5, service->GetScore(url3)); 410 EXPECT_EQ(0.5, service->GetScore(url3));
372 EXPECT_EQ(2, service->GetTotalEngagementPoints()); 411 EXPECT_EQ(2, service->GetTotalEngagementPoints());
412 histograms.ExpectTotalCount(SiteEngagementMetrics::kEngagementTypeHistogram,
413 4);
414 histograms.ExpectBucketCount(SiteEngagementMetrics::kEngagementTypeHistogram,
415 SiteEngagementMetrics::ENGAGEMENT_NAVIGATION, 4);
416 histograms.ExpectTotalCount(
417 SiteEngagementMetrics::kOriginsWithMaxDailyEngagementHistogram, 2);
418 histograms.ExpectTotalCount(
419 SiteEngagementMetrics::kOriginsWithMaxEngagementHistogram, 2);
373 420
374 service->HandleNavigation(url1, ui::PAGE_TRANSITION_GENERATED); 421 service->HandleNavigation(url1, ui::PAGE_TRANSITION_GENERATED);
375 service->HandleNavigation(url1, ui::PAGE_TRANSITION_TYPED); 422 service->HandleNavigation(url1, ui::PAGE_TRANSITION_TYPED);
376 EXPECT_EQ(1.5, service->GetScore(url1)); 423 EXPECT_EQ(1.5, service->GetScore(url1));
377 EXPECT_EQ(3, service->GetTotalEngagementPoints()); 424 EXPECT_EQ(3, service->GetTotalEngagementPoints());
425 histograms.ExpectTotalCount(SiteEngagementMetrics::kEngagementTypeHistogram,
426 6);
427 histograms.ExpectBucketCount(SiteEngagementMetrics::kEngagementTypeHistogram,
428 SiteEngagementMetrics::ENGAGEMENT_NAVIGATION, 6);
429 histograms.ExpectTotalCount(
430 SiteEngagementMetrics::kOriginsWithMaxDailyEngagementHistogram, 2);
431 histograms.ExpectBucketCount(
432 SiteEngagementMetrics::kOriginsWithMaxDailyEngagementHistogram, 0, 2);
433 histograms.ExpectTotalCount(
434 SiteEngagementMetrics::kOriginsWithMaxEngagementHistogram, 2);
435 histograms.ExpectBucketCount(
436 SiteEngagementMetrics::kOriginsWithMaxEngagementHistogram, 0, 2);
437
438 // Advance an origin to the max for a day and advance the clock an hour before
439 // the last increment before max. Expect the histogram to be updated.
440 for (int i = 0; i < 6; ++i)
441 service->HandleNavigation(url1, ui::PAGE_TRANSITION_TYPED);
442
443 clock->SetNow(GetReferenceTime() + base::TimeDelta::FromMinutes(121));
444 service->HandleNavigation(url1, ui::PAGE_TRANSITION_TYPED);
445
446 histograms.ExpectTotalCount(SiteEngagementMetrics::kEngagementTypeHistogram,
447 13);
448 histograms.ExpectTotalCount(
449 SiteEngagementMetrics::kOriginsWithMaxDailyEngagementHistogram, 3);
450 histograms.ExpectBucketCount(
451 SiteEngagementMetrics::kOriginsWithMaxDailyEngagementHistogram, 0, 2);
452 histograms.ExpectBucketCount(
453 SiteEngagementMetrics::kOriginsWithMaxDailyEngagementHistogram, 1, 1);
454 histograms.ExpectTotalCount(
455 SiteEngagementMetrics::kOriginsWithMaxEngagementHistogram, 3);
456 histograms.ExpectBucketCount(
457 SiteEngagementMetrics::kOriginsWithMaxEngagementHistogram, 0, 3);
378 } 458 }
379 459
380 TEST_F(SiteEngagementServiceTest, GetTotalUserInputPoints) { 460 TEST_F(SiteEngagementServiceTest, GetTotalUserInputPoints) {
381 SiteEngagementService* service = 461 base::SimpleTestClock* clock = new base::SimpleTestClock();
382 SiteEngagementServiceFactory::GetForProfile(profile()); 462 scoped_ptr<SiteEngagementService> service(
383 DCHECK(service); 463 new SiteEngagementService(profile(), make_scoped_ptr(clock)));
464
465 base::Time current_day = GetReferenceTime();
466 clock->SetNow(current_day);
467
468 base::HistogramTester histograms;
469
470 // Histograms should start off empty.
471 histograms.ExpectTotalCount(SiteEngagementMetrics::kEngagementTypeHistogram,
472 0);
473 histograms.ExpectTotalCount(
474 SiteEngagementMetrics::kOriginsWithMaxDailyEngagementHistogram, 0);
475 histograms.ExpectTotalCount(
476 SiteEngagementMetrics::kOriginsWithMaxEngagementHistogram, 0);
384 477
385 // The https and http versions of www.google.com should be separate. 478 // The https and http versions of www.google.com should be separate.
386 GURL url1("https://www.google.com/"); 479 GURL url1("https://www.google.com/");
387 GURL url2("http://www.google.com/"); 480 GURL url2("http://www.google.com/");
388 GURL url3("http://drive.google.com/"); 481 GURL url3("http://drive.google.com/");
389 482
390 EXPECT_EQ(0, service->GetScore(url1)); 483 EXPECT_EQ(0, service->GetScore(url1));
391 EXPECT_EQ(0, service->GetScore(url2)); 484 EXPECT_EQ(0, service->GetScore(url2));
392 EXPECT_EQ(0, service->GetScore(url3)); 485 EXPECT_EQ(0, service->GetScore(url3));
393 486
394 service->HandleUserInput(url1); 487 service->HandleUserInput(url1, SiteEngagementMetrics::ENGAGEMENT_MOUSE);
395 EXPECT_DOUBLE_EQ(0.05, service->GetScore(url1)); 488 EXPECT_DOUBLE_EQ(0.05, service->GetScore(url1));
396 EXPECT_DOUBLE_EQ(0.05, service->GetTotalEngagementPoints()); 489 EXPECT_DOUBLE_EQ(0.05, service->GetTotalEngagementPoints());
490 histograms.ExpectTotalCount(SiteEngagementMetrics::kEngagementTypeHistogram,
491 1);
492 histograms.ExpectBucketCount(SiteEngagementMetrics::kEngagementTypeHistogram,
493 SiteEngagementMetrics::ENGAGEMENT_MOUSE, 1);
494 histograms.ExpectTotalCount(
495 SiteEngagementMetrics::kOriginsWithMaxDailyEngagementHistogram, 1);
496 histograms.ExpectBucketCount(
497 SiteEngagementMetrics::kOriginsWithMaxDailyEngagementHistogram, 0, 1);
498 histograms.ExpectTotalCount(
499 SiteEngagementMetrics::kOriginsWithMaxEngagementHistogram, 1);
500 histograms.ExpectBucketCount(
501 SiteEngagementMetrics::kOriginsWithMaxEngagementHistogram, 0, 1);
397 502
398 service->HandleUserInput(url2); 503 clock->SetNow(GetReferenceTime() + base::TimeDelta::FromMinutes(45));
399 service->HandleUserInput(url2); 504 service->HandleUserInput(url2, SiteEngagementMetrics::ENGAGEMENT_MOUSE);
505 clock->SetNow(GetReferenceTime() + base::TimeDelta::FromMinutes(60));
506 service->HandleUserInput(url2, SiteEngagementMetrics::ENGAGEMENT_KEYPRESS);
400 EXPECT_DOUBLE_EQ(0.1, service->GetScore(url2)); 507 EXPECT_DOUBLE_EQ(0.1, service->GetScore(url2));
401 EXPECT_DOUBLE_EQ(0.15, service->GetTotalEngagementPoints()); 508 EXPECT_DOUBLE_EQ(0.15, service->GetTotalEngagementPoints());
509 histograms.ExpectTotalCount(SiteEngagementMetrics::kEngagementTypeHistogram,
510 3);
511 histograms.ExpectBucketCount(SiteEngagementMetrics::kEngagementTypeHistogram,
512 SiteEngagementMetrics::ENGAGEMENT_MOUSE, 2);
513 histograms.ExpectBucketCount(SiteEngagementMetrics::kEngagementTypeHistogram,
514 SiteEngagementMetrics::ENGAGEMENT_KEYPRESS, 1);
515 histograms.ExpectTotalCount(
516 SiteEngagementMetrics::kOriginsWithMaxDailyEngagementHistogram, 2);
517 histograms.ExpectBucketCount(
518 SiteEngagementMetrics::kOriginsWithMaxDailyEngagementHistogram, 0, 2);
519 histograms.ExpectTotalCount(
520 SiteEngagementMetrics::kOriginsWithMaxEngagementHistogram, 2);
521 histograms.ExpectBucketCount(
522 SiteEngagementMetrics::kOriginsWithMaxEngagementHistogram, 0, 2);
402 523
403 service->HandleUserInput(url3); 524 clock->SetNow(GetReferenceTime() + base::TimeDelta::FromMinutes(150));
525 service->HandleUserInput(url3, SiteEngagementMetrics::ENGAGEMENT_KEYPRESS);
404 EXPECT_DOUBLE_EQ(0.05, service->GetScore(url3)); 526 EXPECT_DOUBLE_EQ(0.05, service->GetScore(url3));
405 EXPECT_DOUBLE_EQ(0.2, service->GetTotalEngagementPoints()); 527 EXPECT_DOUBLE_EQ(0.2, service->GetTotalEngagementPoints());
528 histograms.ExpectTotalCount(SiteEngagementMetrics::kEngagementTypeHistogram,
529 4);
530 histograms.ExpectBucketCount(SiteEngagementMetrics::kEngagementTypeHistogram,
531 SiteEngagementMetrics::ENGAGEMENT_KEYPRESS, 2);
532 histograms.ExpectTotalCount(
533 SiteEngagementMetrics::kOriginsWithMaxDailyEngagementHistogram, 3);
534 histograms.ExpectBucketCount(
535 SiteEngagementMetrics::kOriginsWithMaxDailyEngagementHistogram, 0, 3);
536 histograms.ExpectTotalCount(
537 SiteEngagementMetrics::kOriginsWithMaxEngagementHistogram, 3);
538 histograms.ExpectBucketCount(
539 SiteEngagementMetrics::kOriginsWithMaxEngagementHistogram, 0, 3);
406 540
407 service->HandleUserInput(url1); 541 service->HandleUserInput(url1, SiteEngagementMetrics::ENGAGEMENT_KEYPRESS);
408 service->HandleUserInput(url1); 542 service->HandleUserInput(url1, SiteEngagementMetrics::ENGAGEMENT_MOUSE);
409 EXPECT_DOUBLE_EQ(0.15, service->GetScore(url1)); 543 EXPECT_DOUBLE_EQ(0.15, service->GetScore(url1));
410 EXPECT_DOUBLE_EQ(0.3, service->GetTotalEngagementPoints()); 544 EXPECT_DOUBLE_EQ(0.3, service->GetTotalEngagementPoints());
545 histograms.ExpectTotalCount(SiteEngagementMetrics::kEngagementTypeHistogram,
546 6);
547 histograms.ExpectBucketCount(SiteEngagementMetrics::kEngagementTypeHistogram,
548 SiteEngagementMetrics::ENGAGEMENT_MOUSE, 3);
549 histograms.ExpectBucketCount(SiteEngagementMetrics::kEngagementTypeHistogram,
550 SiteEngagementMetrics::ENGAGEMENT_KEYPRESS, 3);
551
552 // Advance an origin to the max and ensure the histogram is correctly
553 // incremented.
554 for (int i = 0; i < 1996; ++i)
555 service->HandleUserInput(url1, SiteEngagementMetrics::ENGAGEMENT_MOUSE);
556 clock->SetNow(GetReferenceTime() + base::TimeDelta::FromMinutes(210));
557 service->HandleUserInput(url1, SiteEngagementMetrics::ENGAGEMENT_MOUSE);
558
559 histograms.ExpectTotalCount(
560 SiteEngagementMetrics::kOriginsWithMaxDailyEngagementHistogram, 4);
561 histograms.ExpectBucketCount(
562 SiteEngagementMetrics::kOriginsWithMaxDailyEngagementHistogram, 0, 3);
563 histograms.ExpectBucketCount(
564 SiteEngagementMetrics::kOriginsWithMaxDailyEngagementHistogram, 1, 1);
565 histograms.ExpectTotalCount(
566 SiteEngagementMetrics::kOriginsWithMaxEngagementHistogram, 4);
567 histograms.ExpectBucketCount(
568 SiteEngagementMetrics::kOriginsWithMaxEngagementHistogram, 0, 4);
411 } 569 }
412 570
413 // Expect that sites that have reached zero engagement are cleaned up. 571 // Expect that sites that have reached zero engagement are cleaned up.
414 TEST_F(SiteEngagementServiceTest, CleanupEngagementScores) { 572 TEST_F(SiteEngagementServiceTest, CleanupEngagementScores) {
415 base::SimpleTestClock* clock = new base::SimpleTestClock(); 573 base::SimpleTestClock* clock = new base::SimpleTestClock();
416 scoped_ptr<SiteEngagementService> service( 574 scoped_ptr<SiteEngagementService> service(
417 new SiteEngagementService(profile(), make_scoped_ptr(clock))); 575 new SiteEngagementService(profile(), make_scoped_ptr(clock)));
418 576
419 base::Time current_day = GetReferenceTime(); 577 base::Time current_day = GetReferenceTime();
420 clock->SetNow(current_day); 578 clock->SetNow(current_day);
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
470 EXPECT_EQ(1u, score_map.size()); 628 EXPECT_EQ(1u, score_map.size());
471 EXPECT_EQ(0, score_map[url1]); 629 EXPECT_EQ(0, score_map[url1]);
472 630
473 service->CleanupEngagementScores(); 631 service->CleanupEngagementScores();
474 632
475 score_map = service->GetScoreMap(); 633 score_map = service->GetScoreMap();
476 EXPECT_EQ(0u, score_map.size()); 634 EXPECT_EQ(0u, score_map.size());
477 EXPECT_EQ(0, service->GetScore(url1)); 635 EXPECT_EQ(0, service->GetScore(url1));
478 } 636 }
479 } 637 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698