// Copyright 2016 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "components/ntp_tiles/metrics.h" #include #include #include #include "base/macros.h" #include "base/test/histogram_tester.h" #include "components/rappor/test_rappor_service.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" namespace ntp_tiles { namespace metrics { namespace { using testing::ElementsAre; using testing::IsEmpty; TEST(RecordPageImpressionTest, ShouldRecordUmaForIcons) { base::HistogramTester histogram_tester; RecordPageImpression( {{NTPTileSource::TOP_SITES, ICON_REAL, GURL()}, {NTPTileSource::TOP_SITES, ICON_REAL, GURL()}, {NTPTileSource::TOP_SITES, ICON_REAL, GURL()}, {NTPTileSource::TOP_SITES, ICON_COLOR, GURL()}, {NTPTileSource::TOP_SITES, ICON_COLOR, GURL()}, {NTPTileSource::SUGGESTIONS_SERVICE, ICON_REAL, GURL()}, {NTPTileSource::SUGGESTIONS_SERVICE, ICON_DEFAULT, GURL()}, {NTPTileSource::POPULAR, ICON_COLOR, GURL()}}, /*rappor_service=*/nullptr); EXPECT_THAT(histogram_tester.GetAllSamples("NewTabPage.NumberOfTiles"), ElementsAre(base::Bucket(/*min=*/8, /*count=*/1))); EXPECT_THAT( histogram_tester.GetAllSamples("NewTabPage.SuggestionsImpression"), ElementsAre(base::Bucket(/*min=*/0, /*count=*/1), base::Bucket(/*min=*/1, /*count=*/1), base::Bucket(/*min=*/2, /*count=*/1), base::Bucket(/*min=*/3, /*count=*/1), base::Bucket(/*min=*/4, /*count=*/1), base::Bucket(/*min=*/5, /*count=*/1), base::Bucket(/*min=*/6, /*count=*/1), base::Bucket(/*min=*/7, /*count=*/1))); EXPECT_THAT( histogram_tester.GetAllSamples("NewTabPage.SuggestionsImpression.server"), ElementsAre(base::Bucket(/*min=*/5, /*count=*/1), base::Bucket(/*min=*/6, /*count=*/1))); EXPECT_THAT( histogram_tester.GetAllSamples("NewTabPage.SuggestionsImpression.client"), ElementsAre(base::Bucket(/*min=*/0, /*count=*/1), base::Bucket(/*min=*/1, /*count=*/1), base::Bucket(/*min=*/2, /*count=*/1), base::Bucket(/*min=*/3, /*count=*/1), base::Bucket(/*min=*/4, /*count=*/1))); EXPECT_THAT(histogram_tester.GetAllSamples( "NewTabPage.SuggestionsImpression.popular"), ElementsAre(base::Bucket(/*min=*/7, /*count=*/1))); EXPECT_THAT(histogram_tester.GetAllSamples("NewTabPage.TileType"), ElementsAre(base::Bucket(/*min=*/ICON_REAL, /*count=*/4), base::Bucket(/*min=*/ICON_COLOR, /*count=*/3), base::Bucket(/*min=*/ICON_DEFAULT, /*count=*/1))); EXPECT_THAT(histogram_tester.GetAllSamples("NewTabPage.TileType.server"), ElementsAre(base::Bucket(/*min=*/ICON_REAL, /*count=*/1), base::Bucket(/*min=*/ICON_DEFAULT, /*count=*/1))); EXPECT_THAT(histogram_tester.GetAllSamples("NewTabPage.TileType.client"), ElementsAre(base::Bucket(/*min=*/ICON_REAL, /*count=*/3), base::Bucket(/*min=*/ICON_COLOR, /*count=*/2))); EXPECT_THAT(histogram_tester.GetAllSamples("NewTabPage.TileType.popular"), ElementsAre(base::Bucket(/*min=*/ICON_COLOR, /*count=*/1))); EXPECT_THAT(histogram_tester.GetAllSamples("NewTabPage.IconsReal"), ElementsAre(base::Bucket(/*min=*/4, /*count=*/1))); EXPECT_THAT(histogram_tester.GetAllSamples("NewTabPage.IconsColor"), ElementsAre(base::Bucket(/*min=*/3, /*count=*/1))); EXPECT_THAT(histogram_tester.GetAllSamples("NewTabPage.IconsGray"), ElementsAre(base::Bucket(/*min=*/1, /*count=*/1))); EXPECT_THAT(histogram_tester.GetAllSamples( "NewTabPage.SuggestionsImpression.IconsReal"), ElementsAre(base::Bucket(/*min=*/0, /*count=*/1), base::Bucket(/*min=*/1, /*count=*/1), base::Bucket(/*min=*/2, /*count=*/1), base::Bucket(/*min=*/5, /*count=*/1))); EXPECT_THAT(histogram_tester.GetAllSamples( "NewTabPage.SuggestionsImpression.IconsColor"), ElementsAre(base::Bucket(/*min=*/3, /*count=*/1), base::Bucket(/*min=*/4, /*count=*/1), base::Bucket(/*min=*/7, /*count=*/1))); EXPECT_THAT(histogram_tester.GetAllSamples( "NewTabPage.SuggestionsImpression.IconsGray"), ElementsAre(base::Bucket(/*min=*/6, /*count=*/1))); } TEST(RecordPageImpressionTest, ShouldRecordUmaForThumbnails) { base::HistogramTester histogram_tester; RecordPageImpression({{NTPTileSource::TOP_SITES, THUMBNAIL, GURL()}, {NTPTileSource::SUGGESTIONS_SERVICE, THUMBNAIL, GURL()}, {NTPTileSource::POPULAR, THUMBNAIL, GURL()}}, /*rappor_service=*/nullptr); EXPECT_THAT(histogram_tester.GetAllSamples("NewTabPage.NumberOfTiles"), ElementsAre(base::Bucket(/*min=*/3, /*count=*/1))); EXPECT_THAT( histogram_tester.GetAllSamples("NewTabPage.SuggestionsImpression"), ElementsAre(base::Bucket(/*min=*/0, /*count=*/1), base::Bucket(/*min=*/1, /*count=*/1), base::Bucket(/*min=*/2, /*count=*/1))); EXPECT_THAT( histogram_tester.GetAllSamples("NewTabPage.SuggestionsImpression.server"), ElementsAre(base::Bucket(/*min=*/1, /*count=*/1))); EXPECT_THAT( histogram_tester.GetAllSamples("NewTabPage.SuggestionsImpression.client"), ElementsAre(base::Bucket(/*min=*/0, /*count=*/1))); EXPECT_THAT(histogram_tester.GetAllSamples( "NewTabPage.SuggestionsImpression.popular"), ElementsAre(base::Bucket(/*min=*/2, /*count=*/1))); EXPECT_THAT(histogram_tester.GetAllSamples("NewTabPage.TileType"), IsEmpty()); EXPECT_THAT(histogram_tester.GetAllSamples("NewTabPage.TileType.server"), IsEmpty()); EXPECT_THAT(histogram_tester.GetAllSamples("NewTabPage.TileType.client"), IsEmpty()); EXPECT_THAT(histogram_tester.GetAllSamples("NewTabPage.TileType.popular"), IsEmpty()); EXPECT_THAT(histogram_tester.GetAllSamples("NewTabPage.IconsReal"), IsEmpty()); EXPECT_THAT(histogram_tester.GetAllSamples("NewTabPage.IconsColor"), IsEmpty()); EXPECT_THAT(histogram_tester.GetAllSamples("NewTabPage.IconsGray"), IsEmpty()); EXPECT_THAT(histogram_tester.GetAllSamples( "NewTabPage.SuggestionsImpression.IconsReal"), IsEmpty()); EXPECT_THAT(histogram_tester.GetAllSamples( "NewTabPage.SuggestionsImpression.IconsColor"), IsEmpty()); EXPECT_THAT(histogram_tester.GetAllSamples( "NewTabPage.SuggestionsImpression.IconsGray"), IsEmpty()); } TEST(RecordTileClickTest, ShouldRecordUma) { base::HistogramTester histogram_tester; RecordTileClick(3, NTPTileSource::TOP_SITES, ICON_REAL); EXPECT_THAT(histogram_tester.GetAllSamples("NewTabPage.MostVisited.client"), ElementsAre(base::Bucket(/*min=*/3, /*count=*/1))); EXPECT_THAT(histogram_tester.GetAllSamples("NewTabPage.MostVisited.server"), IsEmpty()); EXPECT_THAT(histogram_tester.GetAllSamples("NewTabPage.MostVisited.popular"), IsEmpty()); EXPECT_THAT( histogram_tester.GetAllSamples("NewTabPage.MostVisited.IconsReal"), ElementsAre(base::Bucket(/*min=*/3, /*count=*/1))); EXPECT_THAT( histogram_tester.GetAllSamples("NewTabPage.MostVisited.IconsColor"), IsEmpty()); EXPECT_THAT( histogram_tester.GetAllSamples("NewTabPage.MostVisited.IconsGray"), IsEmpty()); } TEST(RecordTileClickTest, ShouldIgnoreThumbnails) { base::HistogramTester histogram_tester; RecordTileClick(3, NTPTileSource::TOP_SITES, THUMBNAIL); EXPECT_THAT( histogram_tester.GetAllSamples("NewTabPage.MostVisited.IconsReal"), IsEmpty()); EXPECT_THAT( histogram_tester.GetAllSamples("NewTabPage.MostVisited.IconsColor"), IsEmpty()); EXPECT_THAT( histogram_tester.GetAllSamples("NewTabPage.MostVisited.IconsGray"), IsEmpty()); } TEST(RecordPageImpressionTest, ShouldRecordRappor) { rappor::TestRapporServiceImpl rappor_service; RecordPageImpression( {{NTPTileSource::TOP_SITES, ICON_REAL, GURL("http://www.site1.com/")}, {NTPTileSource::TOP_SITES, ICON_COLOR, GURL("http://www.site2.com/")}, {NTPTileSource::TOP_SITES, ICON_DEFAULT, GURL("http://www.site3.com/")}, {NTPTileSource::TOP_SITES, THUMBNAIL, GURL("http://www.site4.com/")}}, &rappor_service); // Thumbnail shouldn't get reported. EXPECT_EQ(3, rappor_service.GetReportsCount()); { std::string sample; rappor::RapporType type; EXPECT_TRUE(rappor_service.GetRecordedSampleForMetric( "NTP.SuggestionsImpressions.IconsReal", &sample, &type)); EXPECT_EQ("site1.com", sample); EXPECT_EQ(rappor::ETLD_PLUS_ONE_RAPPOR_TYPE, type); } { std::string sample; rappor::RapporType type; EXPECT_TRUE(rappor_service.GetRecordedSampleForMetric( "NTP.SuggestionsImpressions.IconsColor", &sample, &type)); EXPECT_EQ("site2.com", sample); EXPECT_EQ(rappor::ETLD_PLUS_ONE_RAPPOR_TYPE, type); } { std::string sample; rappor::RapporType type; EXPECT_TRUE(rappor_service.GetRecordedSampleForMetric( "NTP.SuggestionsImpressions.IconsGray", &sample, &type)); EXPECT_EQ("site3.com", sample); EXPECT_EQ(rappor::ETLD_PLUS_ONE_RAPPOR_TYPE, type); } } } // namespace } // namespace metrics } // namespace ntp_tiles