blob: 8973fe4bd123ea7a263acea3be349dcb7eb7211f [file] [log] [blame]
// Copyright 2013 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 "chrome/browser/ui/search/ntp_user_data_logger.h"
#include <memory>
#include <string>
#include <vector>
#include "base/metrics/histogram.h"
#include "base/test/metrics/histogram_tester.h"
#include "base/test/scoped_feature_list.h"
#include "base/time/time.h"
#include "chrome/browser/search/ntp_features.h"
#include "chrome/browser/ui/search/ntp_user_data_types.h"
#include "chrome/common/search/ntp_logging_events.h"
#include "chrome/common/url_constants.h"
#include "components/favicon_base/favicon_types.h"
#include "components/ntp_tiles/constants.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
using base::Bucket;
using ntp_tiles::TileSource;
using ntp_tiles::TileTitleSource;
using ntp_tiles::TileVisualType;
using testing::ContainerEq;
using testing::ElementsAre;
using testing::IsEmpty;
using testing::SizeIs;
namespace {
constexpr int kUnknownTitleSource = static_cast<int>(TileTitleSource::UNKNOWN);
constexpr int kManifestTitleSource =
static_cast<int>(TileTitleSource::MANIFEST);
constexpr int kMetaTagTitleSource = static_cast<int>(TileTitleSource::META_TAG);
constexpr int kTitleTagTitleSource =
static_cast<int>(TileTitleSource::TITLE_TAG);
constexpr int kInferredTitleSource =
static_cast<int>(TileTitleSource::INFERRED);
using Sample = base::HistogramBase::Sample;
using Samples = std::vector<Sample>;
// Helper function that uses sensible defaults for irrelevant fields of
// NTPTileImpression.
ntp_tiles::NTPTileImpression MakeNTPTileImpression(int index,
TileSource source,
TileTitleSource title_source,
TileVisualType visual_type) {
return ntp_tiles::NTPTileImpression(index, source, title_source, visual_type,
favicon_base::IconType::kInvalid,
/*data_generation_time=*/base::Time(),
/*url_for_rappor=*/GURL());
}
// Helper function that populates a list of expected impressions, each with the
// expected |count|.
std::vector<base::Bucket> FillImpressions(int numImpressions, int count) {
std::vector<base::Bucket> impressions;
for (int i = 0; i < numImpressions; ++i) {
impressions.push_back(Bucket(i, count));
}
return impressions;
}
class TestNTPUserDataLogger : public NTPUserDataLogger {
public:
explicit TestNTPUserDataLogger(const GURL& ntp_url)
: NTPUserDataLogger(nullptr) {
set_ntp_url_for_testing(ntp_url);
}
~TestNTPUserDataLogger() override {}
bool DefaultSearchProviderIsGoogle() const override { return is_google_; }
bool CustomBackgroundIsConfigured() const override {
return is_custom_background_configured_;
}
bool is_google_ = true;
bool is_custom_background_configured_ = false;
};
using NTPUserDataLoggerTest = testing::Test;
MATCHER_P3(IsBucketBetween, lower_bound, upper_bound, count, "") {
return arg.min >= lower_bound && arg.min <= upper_bound && arg.count == count;
}
} // namespace
TEST_F(NTPUserDataLoggerTest, ShouldRecordNumberOfTiles) {
base::HistogramTester histogram_tester;
// Ensure non-zero statistics.
TestNTPUserDataLogger logger(GURL("chrome://newtab/"));
const base::TimeDelta delta = base::TimeDelta::FromMilliseconds(73);
for (int i = 0; i < ntp_tiles::kMaxNumTiles; ++i) {
logger.LogMostVisitedImpression(MakeNTPTileImpression(
i, TileSource::SUGGESTIONS_SERVICE, TileTitleSource::UNKNOWN,
TileVisualType::THUMBNAIL));
}
logger.LogEvent(NTP_ALL_TILES_LOADED, delta);
EXPECT_THAT(histogram_tester.GetAllSamples("NewTabPage.NumberOfTiles"),
ElementsAre(Bucket(ntp_tiles::kMaxNumTiles, 1)));
// We should not log again for the same NTP.
logger.LogEvent(NTP_ALL_TILES_LOADED, delta);
EXPECT_THAT(histogram_tester.GetAllSamples("NewTabPage.NumberOfTiles"),
ElementsAre(Bucket(ntp_tiles::kMaxNumTiles, 1)));
// Navigating away and back resets stats.
logger.NavigatedFromURLToURL(GURL("chrome://newtab/"),
GURL("http://chromium.org"));
logger.NavigatedFromURLToURL(GURL("http://chromium.org"),
GURL("chrome://newtab/"));
logger.LogEvent(NTP_ALL_TILES_LOADED, delta);
EXPECT_THAT(histogram_tester.GetAllSamples("NewTabPage.NumberOfTiles"),
ElementsAre(Bucket(0, 1), Bucket(ntp_tiles::kMaxNumTiles, 1)));
}
TEST_F(NTPUserDataLoggerTest, ShouldNotRecordImpressionsBeforeAllTilesLoaded) {
TestNTPUserDataLogger logger(GURL("chrome://newtab/"));
base::HistogramTester histogram_tester;
logger.LogMostVisitedImpression(MakeNTPTileImpression(
0, TileSource::SUGGESTIONS_SERVICE, TileTitleSource::INFERRED,
TileVisualType::THUMBNAIL));
logger.LogMostVisitedImpression(
MakeNTPTileImpression(1, TileSource::TOP_SITES, TileTitleSource::INFERRED,
TileVisualType::THUMBNAIL_FAILED));
// The actual histograms are emitted only after the ALL_TILES_LOADED event,
// so at this point everything should still be empty.
EXPECT_THAT(
histogram_tester.GetAllSamples("NewTabPage.SuggestionsImpression"),
IsEmpty());
EXPECT_THAT(
histogram_tester.GetAllSamples("NewTabPage.SuggestionsImpression.server"),
IsEmpty());
EXPECT_THAT(
histogram_tester.GetAllSamples("NewTabPage.SuggestionsImpression.client"),
IsEmpty());
EXPECT_THAT(histogram_tester.GetAllSamples("NewTabPage.TileType"), IsEmpty());
EXPECT_THAT(histogram_tester.GetAllSamples("NewTabPage.TileType.client"),
IsEmpty());
EXPECT_THAT(histogram_tester.GetAllSamples("NewTabPage.TileType.server"),
IsEmpty());
EXPECT_THAT(histogram_tester.GetAllSamples("NewTabPage.TileTitle"),
IsEmpty());
EXPECT_THAT(histogram_tester.GetAllSamples("NewTabPage.TileTitle.client"),
IsEmpty());
EXPECT_THAT(histogram_tester.GetAllSamples("NewTabPage.TileTitle.server"),
IsEmpty());
}
TEST_F(NTPUserDataLoggerTest, ShouldRecordImpressions) {
TestNTPUserDataLogger logger(GURL("chrome://newtab/"));
base::HistogramTester histogram_tester;
// Impressions increment the associated bins.
logger.LogMostVisitedImpression(MakeNTPTileImpression(
0, TileSource::SUGGESTIONS_SERVICE, TileTitleSource::INFERRED,
TileVisualType::THUMBNAIL));
logger.LogMostVisitedImpression(MakeNTPTileImpression(
1, TileSource::SUGGESTIONS_SERVICE, TileTitleSource::INFERRED,
TileVisualType::THUMBNAIL_FAILED));
logger.LogMostVisitedImpression(MakeNTPTileImpression(
2, TileSource::SUGGESTIONS_SERVICE, TileTitleSource::INFERRED,
TileVisualType::THUMBNAIL));
logger.LogMostVisitedImpression(MakeNTPTileImpression(
3, TileSource::SUGGESTIONS_SERVICE, TileTitleSource::INFERRED,
TileVisualType::THUMBNAIL));
logger.LogMostVisitedImpression(MakeNTPTileImpression(
4, TileSource::TOP_SITES, TileTitleSource::TITLE_TAG,
TileVisualType::THUMBNAIL));
logger.LogMostVisitedImpression(
MakeNTPTileImpression(5, TileSource::TOP_SITES, TileTitleSource::MANIFEST,
TileVisualType::THUMBNAIL));
logger.LogMostVisitedImpression(
MakeNTPTileImpression(6, TileSource::POPULAR, TileTitleSource::TITLE_TAG,
TileVisualType::THUMBNAIL));
logger.LogMostVisitedImpression(MakeNTPTileImpression(
7, TileSource::POPULAR_BAKED_IN, TileTitleSource::META_TAG,
TileVisualType::THUMBNAIL));
// Send the ALL_TILES_LOADED event, this should trigger emitting histograms.
logger.LogEvent(NTP_ALL_TILES_LOADED, base::TimeDelta::FromMilliseconds(73));
EXPECT_THAT(
histogram_tester.GetAllSamples("NewTabPage.SuggestionsImpression"),
ElementsAre(Bucket(0, 1), Bucket(1, 1), Bucket(2, 1), Bucket(3, 1),
Bucket(4, 1), Bucket(5, 1), Bucket(6, 1), Bucket(7, 1)));
EXPECT_THAT(
histogram_tester.GetAllSamples("NewTabPage.SuggestionsImpression.server"),
ElementsAre(Bucket(0, 1), Bucket(1, 1), Bucket(2, 1), Bucket(3, 1)));
EXPECT_THAT(
histogram_tester.GetAllSamples("NewTabPage.SuggestionsImpression.client"),
ElementsAre(Bucket(4, 1), Bucket(5, 1)));
EXPECT_THAT(histogram_tester.GetAllSamples(
"NewTabPage.SuggestionsImpression.popular_fetched"),
ElementsAre(Bucket(6, 1)));
EXPECT_THAT(histogram_tester.GetAllSamples(
"NewTabPage.SuggestionsImpression.popular_baked_in"),
ElementsAre(Bucket(7, 1)));
EXPECT_THAT(
histogram_tester.GetAllSamples("NewTabPage.TileType"),
ElementsAre(Bucket(ntp_tiles::TileVisualType::THUMBNAIL, 7),
Bucket(ntp_tiles::TileVisualType::THUMBNAIL_FAILED, 1)));
EXPECT_THAT(
histogram_tester.GetAllSamples("NewTabPage.TileType.server"),
ElementsAre(Bucket(ntp_tiles::TileVisualType::THUMBNAIL, 3),
Bucket(ntp_tiles::TileVisualType::THUMBNAIL_FAILED, 1)));
EXPECT_THAT(histogram_tester.GetAllSamples("NewTabPage.TileType.client"),
ElementsAre(Bucket(ntp_tiles::TileVisualType::THUMBNAIL, 2)));
EXPECT_THAT(
histogram_tester.GetAllSamples("NewTabPage.TileType.popular_fetched"),
ElementsAre(Bucket(ntp_tiles::TileVisualType::THUMBNAIL, 1)));
EXPECT_THAT(
histogram_tester.GetAllSamples("NewTabPage.TileType.popular_baked_in"),
ElementsAre(Bucket(ntp_tiles::TileVisualType::THUMBNAIL, 1)));
EXPECT_THAT(histogram_tester.GetAllSamples("NewTabPage.TileTitle"),
ElementsAre(Bucket(kManifestTitleSource, 1),
Bucket(kMetaTagTitleSource, 1),
Bucket(kTitleTagTitleSource, 2),
Bucket(kInferredTitleSource, 4)));
EXPECT_THAT(histogram_tester.GetAllSamples("NewTabPage.TileTitle.server"),
ElementsAre(Bucket(kInferredTitleSource, 4)));
EXPECT_THAT(histogram_tester.GetAllSamples("NewTabPage.TileTitle.client"),
ElementsAre(Bucket(kManifestTitleSource, 1),
Bucket(kTitleTagTitleSource, 1)));
EXPECT_THAT(
histogram_tester.GetAllSamples("NewTabPage.TileTitle.popular_fetched"),
ElementsAre(Bucket(kTitleTagTitleSource, 1)));
EXPECT_THAT(
histogram_tester.GetAllSamples("NewTabPage.TileTitle.popular_baked_in"),
ElementsAre(Bucket(kMetaTagTitleSource, 1)));
}
TEST_F(NTPUserDataLoggerTest, ShouldNotRecordRepeatedImpressions) {
TestNTPUserDataLogger logger(GURL("chrome://newtab/"));
base::HistogramTester histogram_tester;
// Impressions increment the associated bins.
logger.LogMostVisitedImpression(MakeNTPTileImpression(
0, TileSource::SUGGESTIONS_SERVICE, TileTitleSource::INFERRED,
TileVisualType::THUMBNAIL));
logger.LogMostVisitedImpression(MakeNTPTileImpression(
1, TileSource::SUGGESTIONS_SERVICE, TileTitleSource::INFERRED,
TileVisualType::THUMBNAIL_FAILED));
logger.LogMostVisitedImpression(MakeNTPTileImpression(
2, TileSource::SUGGESTIONS_SERVICE, TileTitleSource::INFERRED,
TileVisualType::THUMBNAIL));
logger.LogMostVisitedImpression(MakeNTPTileImpression(
3, TileSource::SUGGESTIONS_SERVICE, TileTitleSource::INFERRED,
TileVisualType::THUMBNAIL));
// Repeated impressions for the same bins are ignored.
logger.LogMostVisitedImpression(MakeNTPTileImpression(
0, TileSource::SUGGESTIONS_SERVICE, TileTitleSource::UNKNOWN,
TileVisualType::THUMBNAIL_FAILED));
logger.LogMostVisitedImpression(
MakeNTPTileImpression(1, TileSource::TOP_SITES, TileTitleSource::UNKNOWN,
TileVisualType::THUMBNAIL_FAILED));
logger.LogMostVisitedImpression(MakeNTPTileImpression(
2, TileSource::SUGGESTIONS_SERVICE, TileTitleSource::UNKNOWN,
TileVisualType::THUMBNAIL));
logger.LogMostVisitedImpression(
MakeNTPTileImpression(3, TileSource::TOP_SITES, TileTitleSource::UNKNOWN,
TileVisualType::THUMBNAIL));
// Send the ALL_TILES_LOADED event, this should trigger emitting histograms.
logger.LogEvent(NTP_ALL_TILES_LOADED, base::TimeDelta::FromMilliseconds(73));
EXPECT_THAT(
histogram_tester.GetAllSamples("NewTabPage.SuggestionsImpression"),
ElementsAre(Bucket(0, 1), Bucket(1, 1), Bucket(2, 1), Bucket(3, 1)));
EXPECT_THAT(
histogram_tester.GetAllSamples("NewTabPage.SuggestionsImpression.server"),
ElementsAre(Bucket(0, 1), Bucket(1, 1), Bucket(2, 1), Bucket(3, 1)));
EXPECT_THAT(
histogram_tester.GetAllSamples("NewTabPage.SuggestionsImpression.client"),
IsEmpty());
EXPECT_THAT(
histogram_tester.GetAllSamples("NewTabPage.TileType"),
ElementsAre(Bucket(ntp_tiles::TileVisualType::THUMBNAIL, 3),
Bucket(ntp_tiles::TileVisualType::THUMBNAIL_FAILED, 1)));
EXPECT_THAT(
histogram_tester.GetAllSamples("NewTabPage.TileType.server"),
ElementsAre(Bucket(ntp_tiles::TileVisualType::THUMBNAIL, 3),
Bucket(ntp_tiles::TileVisualType::THUMBNAIL_FAILED, 1)));
EXPECT_THAT(histogram_tester.GetAllSamples("NewTabPage.TileType.client"),
IsEmpty());
EXPECT_THAT(histogram_tester.GetAllSamples("NewTabPage.TileTitle"),
ElementsAre(Bucket(kInferredTitleSource, 4)));
EXPECT_THAT(histogram_tester.GetAllSamples("NewTabPage.TileTitle.server"),
ElementsAre(Bucket(kInferredTitleSource, 4)));
EXPECT_THAT(histogram_tester.GetAllSamples("NewTabPage.TileTitle.client"),
IsEmpty());
}
TEST_F(NTPUserDataLoggerTest, ShouldNotRecordImpressionsForBinsBeyondMax) {
TestNTPUserDataLogger logger(GURL("chrome://newtab/"));
base::HistogramTester histogram_tester;
// Impressions increment the associated bins.
for (int bin = 0; bin < ntp_tiles::kMaxNumTiles; bin++) {
logger.LogMostVisitedImpression(MakeNTPTileImpression(
bin, TileSource::SUGGESTIONS_SERVICE, TileTitleSource::INFERRED,
TileVisualType::THUMBNAIL));
}
// Impressions are silently ignored for tiles >= ntp_tiles::kMaxNumTiles.
logger.LogMostVisitedImpression(MakeNTPTileImpression(
ntp_tiles::kMaxNumTiles, TileSource::TOP_SITES, TileTitleSource::UNKNOWN,
TileVisualType::THUMBNAIL));
logger.LogMostVisitedImpression(MakeNTPTileImpression(
ntp_tiles::kMaxNumTiles + 1, TileSource::TOP_SITES,
TileTitleSource::UNKNOWN, TileVisualType::THUMBNAIL_FAILED));
// Send the ALL_TILES_LOADED event, this should trigger emitting histograms.
logger.LogEvent(NTP_ALL_TILES_LOADED, base::TimeDelta::FromMilliseconds(73));
std::vector<base::Bucket> expectedImpressions =
FillImpressions(ntp_tiles::kMaxNumTiles, 1);
EXPECT_THAT(
histogram_tester.GetAllSamples("NewTabPage.SuggestionsImpression"),
ContainerEq(expectedImpressions));
EXPECT_THAT(
histogram_tester.GetAllSamples("NewTabPage.SuggestionsImpression.server"),
ContainerEq(expectedImpressions));
EXPECT_THAT(
histogram_tester.GetAllSamples("NewTabPage.SuggestionsImpression.client"),
IsEmpty());
EXPECT_THAT(histogram_tester.GetAllSamples("NewTabPage.TileType"),
ElementsAre(Bucket(ntp_tiles::TileVisualType::THUMBNAIL,
ntp_tiles::kMaxNumTiles)));
EXPECT_THAT(histogram_tester.GetAllSamples("NewTabPage.TileType.server"),
ElementsAre(Bucket(ntp_tiles::TileVisualType::THUMBNAIL,
ntp_tiles::kMaxNumTiles)));
EXPECT_THAT(histogram_tester.GetAllSamples("NewTabPage.TileType.client"),
IsEmpty());
EXPECT_THAT(
histogram_tester.GetAllSamples("NewTabPage.TileTitle"),
ElementsAre(Bucket(kInferredTitleSource, ntp_tiles::kMaxNumTiles)));
EXPECT_THAT(
histogram_tester.GetAllSamples("NewTabPage.TileTitle.server"),
ElementsAre(Bucket(kInferredTitleSource, ntp_tiles::kMaxNumTiles)));
EXPECT_THAT(histogram_tester.GetAllSamples("NewTabPage.TileTitle.client"),
IsEmpty());
}
TEST_F(NTPUserDataLoggerTest, ShouldRecordImpressionsAgainAfterNavigating) {
TestNTPUserDataLogger logger(GURL("chrome://newtab/"));
// Record some previous tile impressions.
for (int bin = 0; bin < ntp_tiles::kMaxNumTiles; bin++) {
logger.LogMostVisitedImpression(MakeNTPTileImpression(
bin, TileSource::SUGGESTIONS_SERVICE, TileTitleSource::INFERRED,
TileVisualType::THUMBNAIL));
}
logger.LogEvent(NTP_ALL_TILES_LOADED, base::TimeDelta::FromMilliseconds(73));
// After navigating away from the NTP and back, we should record again.
base::HistogramTester histogram_tester;
logger.NavigatedFromURLToURL(GURL("chrome://newtab/"),
GURL("http://chromium.org"));
logger.NavigatedFromURLToURL(GURL("http://chromium.org"),
GURL("chrome://newtab/"));
logger.LogMostVisitedImpression(MakeNTPTileImpression(
0, TileSource::SUGGESTIONS_SERVICE, TileTitleSource::INFERRED,
TileVisualType::THUMBNAIL));
logger.LogMostVisitedImpression(
MakeNTPTileImpression(1, TileSource::POPULAR, TileTitleSource::MANIFEST,
TileVisualType::THUMBNAIL));
logger.LogMostVisitedImpression(MakeNTPTileImpression(
2, TileSource::SUGGESTIONS_SERVICE, TileTitleSource::INFERRED,
TileVisualType::THUMBNAIL));
logger.LogMostVisitedImpression(
MakeNTPTileImpression(3, TileSource::TOP_SITES, TileTitleSource::MANIFEST,
TileVisualType::THUMBNAIL_FAILED));
logger.LogEvent(NTP_ALL_TILES_LOADED, base::TimeDelta::FromMilliseconds(73));
EXPECT_THAT(
histogram_tester.GetAllSamples("NewTabPage.SuggestionsImpression"),
ElementsAre(Bucket(0, 1), Bucket(1, 1), Bucket(2, 1), Bucket(3, 1)));
EXPECT_THAT(
histogram_tester.GetAllSamples("NewTabPage.SuggestionsImpression.server"),
ElementsAre(Bucket(0, 1), Bucket(2, 1)));
EXPECT_THAT(
histogram_tester.GetAllSamples("NewTabPage.SuggestionsImpression.client"),
ElementsAre(Bucket(3, 1)));
EXPECT_THAT(histogram_tester.GetAllSamples(
"NewTabPage.SuggestionsImpression.popular_fetched"),
ElementsAre(Bucket(1, 1)));
EXPECT_THAT(histogram_tester.GetAllSamples(
"NewTabPage.SuggestionsImpression.popular_baked_in"),
IsEmpty());
EXPECT_THAT(
histogram_tester.GetAllSamples("NewTabPage.TileType"),
ElementsAre(Bucket(ntp_tiles::TileVisualType::THUMBNAIL, 3),
Bucket(ntp_tiles::TileVisualType::THUMBNAIL_FAILED, 1)));
EXPECT_THAT(histogram_tester.GetAllSamples("NewTabPage.TileType.server"),
ElementsAre(Bucket(ntp_tiles::TileVisualType::THUMBNAIL, 2)));
EXPECT_THAT(
histogram_tester.GetAllSamples("NewTabPage.TileType.client"),
ElementsAre(Bucket(ntp_tiles::TileVisualType::THUMBNAIL_FAILED, 1)));
EXPECT_THAT(
histogram_tester.GetAllSamples("NewTabPage.TileType.popular_fetched"),
ElementsAre(Bucket(ntp_tiles::TileVisualType::THUMBNAIL, 1)));
EXPECT_THAT(
histogram_tester.GetAllSamples("NewTabPage.TileType.popular_baked_in"),
IsEmpty());
EXPECT_THAT(histogram_tester.GetAllSamples("NewTabPage.TileTitle"),
ElementsAre(Bucket(kManifestTitleSource, 2),
Bucket(kInferredTitleSource, 2)));
EXPECT_THAT(histogram_tester.GetAllSamples("NewTabPage.TileTitle.server"),
ElementsAre(Bucket(kInferredTitleSource, 2)));
EXPECT_THAT(histogram_tester.GetAllSamples("NewTabPage.TileTitle.client"),
ElementsAre(Bucket(kManifestTitleSource, 1)));
EXPECT_THAT(
histogram_tester.GetAllSamples("NewTabPage.TileTitle.popular_fetched"),
ElementsAre(Bucket(kManifestTitleSource, 1)));
EXPECT_THAT(
histogram_tester.GetAllSamples("NewTabPage.TileTitle.popular_baked_in"),
IsEmpty());
}
TEST_F(NTPUserDataLoggerTest, ShouldRecordNavigations) {
TestNTPUserDataLogger logger(GURL("chrome://newtab/"));
{
base::HistogramTester histogram_tester;
logger.LogMostVisitedNavigation(MakeNTPTileImpression(
0, TileSource::SUGGESTIONS_SERVICE, TileTitleSource::UNKNOWN,
TileVisualType::THUMBNAIL));
EXPECT_THAT(histogram_tester.GetAllSamples("NewTabPage.MostVisited"),
ElementsAre(Bucket(0, 1)));
EXPECT_THAT(histogram_tester.GetAllSamples("NewTabPage.MostVisited.server"),
ElementsAre(Bucket(0, 1)));
EXPECT_THAT(histogram_tester.GetAllSamples("NewTabPage.MostVisited.client"),
IsEmpty());
EXPECT_THAT(histogram_tester.GetAllSamples("NewTabPage.TileTypeClicked"),
ElementsAre(Bucket(ntp_tiles::TileVisualType::THUMBNAIL, 1)));
EXPECT_THAT(
histogram_tester.GetAllSamples("NewTabPage.TileTypeClicked.server"),
ElementsAre(Bucket(ntp_tiles::TileVisualType::THUMBNAIL, 1)));
EXPECT_THAT(
histogram_tester.GetAllSamples("NewTabPage.TileTypeClicked.client"),
IsEmpty());
}
{
base::HistogramTester histogram_tester;
logger.LogMostVisitedNavigation(MakeNTPTileImpression(
1, TileSource::SUGGESTIONS_SERVICE, TileTitleSource::UNKNOWN,
TileVisualType::THUMBNAIL_FAILED));
EXPECT_THAT(histogram_tester.GetAllSamples("NewTabPage.MostVisited"),
ElementsAre(Bucket(1, 1)));
EXPECT_THAT(histogram_tester.GetAllSamples("NewTabPage.MostVisited.server"),
ElementsAre(Bucket(1, 1)));
EXPECT_THAT(histogram_tester.GetAllSamples("NewTabPage.MostVisited.client"),
IsEmpty());
EXPECT_THAT(
histogram_tester.GetAllSamples("NewTabPage.TileTypeClicked"),
ElementsAre(Bucket(ntp_tiles::TileVisualType::THUMBNAIL_FAILED, 1)));
EXPECT_THAT(
histogram_tester.GetAllSamples("NewTabPage.TileTypeClicked.server"),
ElementsAre(Bucket(ntp_tiles::TileVisualType::THUMBNAIL_FAILED, 1)));
EXPECT_THAT(
histogram_tester.GetAllSamples("NewTabPage.TileTypeClicked.client"),
IsEmpty());
}
{
base::HistogramTester histogram_tester;
logger.LogMostVisitedNavigation(MakeNTPTileImpression(
2, TileSource::TOP_SITES, TileTitleSource::MANIFEST,
TileVisualType::THUMBNAIL_FAILED));
EXPECT_THAT(histogram_tester.GetAllSamples("NewTabPage.MostVisited"),
ElementsAre(Bucket(2, 1)));
EXPECT_THAT(histogram_tester.GetAllSamples("NewTabPage.MostVisited.server"),
IsEmpty());
EXPECT_THAT(histogram_tester.GetAllSamples("NewTabPage.MostVisited.client"),
ElementsAre(Bucket(2, 1)));
EXPECT_THAT(
histogram_tester.GetAllSamples("NewTabPage.TileTypeClicked"),
ElementsAre(Bucket(ntp_tiles::TileVisualType::THUMBNAIL_FAILED, 1)));
EXPECT_THAT(
histogram_tester.GetAllSamples("NewTabPage.TileTypeClicked.server"),
IsEmpty());
EXPECT_THAT(
histogram_tester.GetAllSamples("NewTabPage.TileTypeClicked.client"),
ElementsAre(Bucket(ntp_tiles::TileVisualType::THUMBNAIL_FAILED, 1)));
}
{
base::HistogramTester histogram_tester;
logger.LogMostVisitedNavigation(
MakeNTPTileImpression(3, TileSource::POPULAR, TileTitleSource::META_TAG,
TileVisualType::THUMBNAIL));
EXPECT_THAT(histogram_tester.GetAllSamples("NewTabPage.MostVisited"),
ElementsAre(Bucket(3, 1)));
EXPECT_THAT(histogram_tester.GetAllSamples("NewTabPage.MostVisited.server"),
IsEmpty());
EXPECT_THAT(histogram_tester.GetAllSamples("NewTabPage.MostVisited.client"),
IsEmpty());
EXPECT_THAT(histogram_tester.GetAllSamples(
"NewTabPage.MostVisited.popular_fetched"),
ElementsAre(Bucket(3, 1)));
EXPECT_THAT(histogram_tester.GetAllSamples("NewTabPage.TileTypeClicked"),
ElementsAre(Bucket(ntp_tiles::TileVisualType::THUMBNAIL, 1)));
EXPECT_THAT(
histogram_tester.GetAllSamples("NewTabPage.TileTypeClicked.server"),
IsEmpty());
EXPECT_THAT(
histogram_tester.GetAllSamples("NewTabPage.TileTypeClicked.client"),
IsEmpty());
EXPECT_THAT(histogram_tester.GetAllSamples(
"NewTabPage.TileTypeClicked.popular_fetched"),
ElementsAre(Bucket(ntp_tiles::TileVisualType::THUMBNAIL, 1)));
EXPECT_THAT(histogram_tester.GetAllSamples("NewTabPage.TileTitleClicked"),
ElementsAre(Bucket(kMetaTagTitleSource, 1)));
EXPECT_THAT(
histogram_tester.GetAllSamples("NewTabPage.TileTitleClicked.server"),
IsEmpty());
EXPECT_THAT(
histogram_tester.GetAllSamples("NewTabPage.TileTitleClicked.client"),
IsEmpty());
EXPECT_THAT(histogram_tester.GetAllSamples(
"NewTabPage.TileTitleClicked.popular_fetched"),
ElementsAre(Bucket(kMetaTagTitleSource, 1)));
}
{
base::HistogramTester histogram_tester;
// Navigations always increase.
logger.LogMostVisitedNavigation(MakeNTPTileImpression(
0, TileSource::SUGGESTIONS_SERVICE, TileTitleSource::UNKNOWN,
TileVisualType::THUMBNAIL));
logger.LogMostVisitedNavigation(MakeNTPTileImpression(
1, TileSource::TOP_SITES, TileTitleSource::TITLE_TAG,
TileVisualType::THUMBNAIL));
logger.LogMostVisitedNavigation(MakeNTPTileImpression(
2, TileSource::SUGGESTIONS_SERVICE, TileTitleSource::UNKNOWN,
TileVisualType::THUMBNAIL));
logger.LogMostVisitedNavigation(
MakeNTPTileImpression(3, TileSource::POPULAR, TileTitleSource::MANIFEST,
TileVisualType::THUMBNAIL));
EXPECT_THAT(
histogram_tester.GetAllSamples("NewTabPage.MostVisited"),
ElementsAre(Bucket(0, 1), Bucket(1, 1), Bucket(2, 1), Bucket(3, 1)));
EXPECT_THAT(histogram_tester.GetAllSamples("NewTabPage.MostVisited.server"),
ElementsAre(Bucket(0, 1), Bucket(2, 1)));
EXPECT_THAT(histogram_tester.GetAllSamples("NewTabPage.MostVisited.client"),
ElementsAre(Bucket(1, 1)));
EXPECT_THAT(histogram_tester.GetAllSamples(
"NewTabPage.MostVisited.popular_fetched"),
ElementsAre(Bucket(3, 1)));
EXPECT_THAT(histogram_tester.GetAllSamples("NewTabPage.TileTypeClicked"),
ElementsAre(Bucket(ntp_tiles::TileVisualType::THUMBNAIL, 4)));
EXPECT_THAT(
histogram_tester.GetAllSamples("NewTabPage.TileTypeClicked.server"),
ElementsAre(Bucket(ntp_tiles::TileVisualType::THUMBNAIL, 2)));
EXPECT_THAT(
histogram_tester.GetAllSamples("NewTabPage.TileTypeClicked.client"),
ElementsAre(Bucket(ntp_tiles::TileVisualType::THUMBNAIL, 1)));
EXPECT_THAT(histogram_tester.GetAllSamples(
"NewTabPage.TileTypeClicked.popular_fetched"),
ElementsAre(Bucket(ntp_tiles::TileVisualType::THUMBNAIL, 1)));
EXPECT_THAT(histogram_tester.GetAllSamples("NewTabPage.TileTitleClicked"),
ElementsAre(Bucket(kUnknownTitleSource, 2),
Bucket(kManifestTitleSource, 1),
Bucket(kTitleTagTitleSource, 1)));
EXPECT_THAT(
histogram_tester.GetAllSamples("NewTabPage.TileTitleClicked.server"),
ElementsAre(Bucket(kUnknownTitleSource, 2)));
EXPECT_THAT(
histogram_tester.GetAllSamples("NewTabPage.TileTitleClicked.client"),
ElementsAre(Bucket(kTitleTagTitleSource, 1)));
EXPECT_THAT(histogram_tester.GetAllSamples(
"NewTabPage.TileTitleClicked.popular_fetched"),
ElementsAre(Bucket(kManifestTitleSource, 1)));
}
}
TEST_F(NTPUserDataLoggerTest, ShouldRecordLoadTime) {
base::HistogramTester histogram_tester;
TestNTPUserDataLogger logger(GURL("chrome://newtab/"));
base::TimeDelta delta_tiles_received = base::TimeDelta::FromMilliseconds(10);
base::TimeDelta delta_tiles_loaded = base::TimeDelta::FromMilliseconds(100);
// Send the ALL_TILES_RECEIVED event.
logger.LogEvent(NTP_ALL_TILES_RECEIVED, delta_tiles_received);
// Log a TOP_SITES impression (for the .MostVisited vs .MostLikely split in
// the time histograms).
logger.LogMostVisitedImpression(
MakeNTPTileImpression(0, TileSource::TOP_SITES, TileTitleSource::UNKNOWN,
TileVisualType::THUMBNAIL));
// Send the ALL_TILES_LOADED event, this should trigger emitting histograms.
logger.LogEvent(NTP_ALL_TILES_LOADED, delta_tiles_loaded);
EXPECT_THAT(histogram_tester.GetAllSamples("NewTabPage.TilesReceivedTime"),
SizeIs(1));
EXPECT_THAT(histogram_tester.GetAllSamples(
"NewTabPage.TilesReceivedTime.MostVisited"),
SizeIs(1));
EXPECT_THAT(
histogram_tester.GetAllSamples("NewTabPage.TilesReceivedTime.MostLikely"),
IsEmpty());
EXPECT_THAT(histogram_tester.GetAllSamples("NewTabPage.LoadTime"), SizeIs(1));
EXPECT_THAT(histogram_tester.GetAllSamples("NewTabPage.LoadTime.MostVisited"),
SizeIs(1));
EXPECT_THAT(histogram_tester.GetAllSamples("NewTabPage.LoadTime.MostLikely"),
IsEmpty());
histogram_tester.ExpectTimeBucketCount("NewTabPage.TilesReceivedTime",
delta_tiles_received, 1);
histogram_tester.ExpectTimeBucketCount(
"NewTabPage.TilesReceivedTime.MostVisited", delta_tiles_received, 1);
histogram_tester.ExpectTimeBucketCount("NewTabPage.LoadTime",
delta_tiles_loaded, 1);
histogram_tester.ExpectTimeBucketCount("NewTabPage.LoadTime.MostVisited",
delta_tiles_loaded, 1);
// We should not log again for the same NTP.
logger.LogEvent(NTP_ALL_TILES_RECEIVED, delta_tiles_received);
logger.LogEvent(NTP_ALL_TILES_LOADED, delta_tiles_loaded);
histogram_tester.ExpectTimeBucketCount("NewTabPage.TilesReceivedTime",
delta_tiles_received, 1);
histogram_tester.ExpectTimeBucketCount("NewTabPage.LoadTime",
delta_tiles_loaded, 1);
// After navigating away from the NTP and back, we record again.
logger.NavigatedFromURLToURL(GURL("chrome://newtab/"),
GURL("http://chromium.org"));
logger.NavigatedFromURLToURL(GURL("http://chromium.org"),
GURL("chrome://newtab/"));
// This time, log a SUGGESTIONS_SERVICE impression, so the times will end up
// in .MostLikely.
logger.LogMostVisitedImpression(MakeNTPTileImpression(
0, TileSource::SUGGESTIONS_SERVICE, TileTitleSource::UNKNOWN,
TileVisualType::THUMBNAIL));
base::TimeDelta delta_tiles_received2 = base::TimeDelta::FromMilliseconds(50);
base::TimeDelta delta_tiles_loaded2 = base::TimeDelta::FromMilliseconds(500);
logger.LogEvent(NTP_ALL_TILES_RECEIVED, delta_tiles_received2);
logger.LogEvent(NTP_ALL_TILES_LOADED, delta_tiles_loaded2);
EXPECT_THAT(histogram_tester.GetAllSamples("NewTabPage.TilesReceivedTime"),
SizeIs(2));
EXPECT_THAT(histogram_tester.GetAllSamples(
"NewTabPage.TilesReceivedTime.MostVisited"),
SizeIs(1));
EXPECT_THAT(
histogram_tester.GetAllSamples("NewTabPage.TilesReceivedTime.MostLikely"),
SizeIs(1));
EXPECT_THAT(histogram_tester.GetAllSamples("NewTabPage.LoadTime"), SizeIs(2));
EXPECT_THAT(histogram_tester.GetAllSamples("NewTabPage.LoadTime.MostVisited"),
SizeIs(1));
EXPECT_THAT(histogram_tester.GetAllSamples("NewTabPage.LoadTime.MostLikely"),
SizeIs(1));
histogram_tester.ExpectTimeBucketCount("NewTabPage.TilesReceivedTime",
delta_tiles_received2, 1);
histogram_tester.ExpectTimeBucketCount(
"NewTabPage.TilesReceivedTime.MostLikely", delta_tiles_received2, 1);
histogram_tester.ExpectTimeBucketCount("NewTabPage.LoadTime",
delta_tiles_loaded2, 1);
histogram_tester.ExpectTimeBucketCount("NewTabPage.LoadTime.MostLikely",
delta_tiles_loaded2, 1);
}
TEST_F(NTPUserDataLoggerTest, ShouldRecordLoadTimeLocalNTPGoogle) {
base::HistogramTester histogram_tester;
TestNTPUserDataLogger logger((GURL(chrome::kChromeSearchLocalNtpUrl)));
logger.is_google_ = true;
base::TimeDelta delta_tiles_received = base::TimeDelta::FromMilliseconds(10);
base::TimeDelta delta_tiles_loaded = base::TimeDelta::FromMilliseconds(100);
// Send the ALL_TILES_RECEIVED event.
logger.LogEvent(NTP_ALL_TILES_RECEIVED, delta_tiles_received);
// Send the ALL_TILES_LOADED event, this should trigger emitting histograms.
logger.LogEvent(NTP_ALL_TILES_LOADED, delta_tiles_loaded);
EXPECT_THAT(histogram_tester.GetAllSamples("NewTabPage.LoadTime"), SizeIs(1));
EXPECT_THAT(histogram_tester.GetAllSamples("NewTabPage.LoadTime.LocalNTP"),
SizeIs(1));
EXPECT_THAT(
histogram_tester.GetAllSamples("NewTabPage.LoadTime.LocalNTP.Google"),
SizeIs(1));
EXPECT_THAT(
histogram_tester.GetAllSamples("NewTabPage.LoadTime.LocalNTP.Other"),
IsEmpty());
EXPECT_THAT(histogram_tester.GetAllSamples("NewTabPage.LoadTime.Web"),
IsEmpty());
histogram_tester.ExpectTimeBucketCount("NewTabPage.LoadTime",
delta_tiles_loaded, 1);
histogram_tester.ExpectTimeBucketCount("NewTabPage.LoadTime.LocalNTP",
delta_tiles_loaded, 1);
histogram_tester.ExpectTimeBucketCount("NewTabPage.LoadTime.LocalNTP.Google",
delta_tiles_loaded, 1);
EXPECT_THAT(
histogram_tester.GetAllSamples(
"NewTabPage.CustomizationAvailability.Backgrounds"),
ElementsAre(Bucket(
static_cast<int>(
BackgroundCustomization::BACKGROUND_CUSTOMIZATION_AVAILABLE),
1)));
}
TEST_F(NTPUserDataLoggerTest, ShouldRecordLoadTimeLocalNTPOther) {
base::HistogramTester histogram_tester;
TestNTPUserDataLogger logger((GURL(chrome::kChromeSearchLocalNtpUrl)));
logger.is_google_ = false;
base::TimeDelta delta_tiles_received = base::TimeDelta::FromMilliseconds(10);
base::TimeDelta delta_tiles_loaded = base::TimeDelta::FromMilliseconds(100);
// Send the ALL_TILES_RECEIVED event.
logger.LogEvent(NTP_ALL_TILES_RECEIVED, delta_tiles_received);
// Send the ALL_TILES_LOADED event, this should trigger emitting histograms.
logger.LogEvent(NTP_ALL_TILES_LOADED, delta_tiles_loaded);
EXPECT_THAT(histogram_tester.GetAllSamples("NewTabPage.LoadTime"), SizeIs(1));
EXPECT_THAT(histogram_tester.GetAllSamples("NewTabPage.LoadTime.LocalNTP"),
SizeIs(1));
EXPECT_THAT(
histogram_tester.GetAllSamples("NewTabPage.LoadTime.LocalNTP.Google"),
IsEmpty());
EXPECT_THAT(
histogram_tester.GetAllSamples("NewTabPage.LoadTime.LocalNTP.Other"),
SizeIs(1));
EXPECT_THAT(histogram_tester.GetAllSamples("NewTabPage.LoadTime.Web"),
IsEmpty());
histogram_tester.ExpectTimeBucketCount("NewTabPage.LoadTime",
delta_tiles_loaded, 1);
histogram_tester.ExpectTimeBucketCount("NewTabPage.LoadTime.LocalNTP",
delta_tiles_loaded, 1);
histogram_tester.ExpectTimeBucketCount("NewTabPage.LoadTime.LocalNTP.Other",
delta_tiles_loaded, 1);
EXPECT_THAT(histogram_tester.GetAllSamples(
"NewTabPage.CustomizationAvailability.Backgrounds"),
ElementsAre(Bucket(
static_cast<int>(
BackgroundCustomization::
BACKGROUND_CUSTOMIZATION_UNAVAILABLE_SEARCH_PROVIDER),
1)));
}
TEST_F(NTPUserDataLoggerTest, ShouldRecordLoadTimeRemoteNTPOther) {
base::HistogramTester histogram_tester;
TestNTPUserDataLogger logger(GURL("https://www.notgoogle.com/newtab"));
logger.is_google_ = false;
base::TimeDelta delta_tiles_received = base::TimeDelta::FromMilliseconds(10);
base::TimeDelta delta_tiles_loaded = base::TimeDelta::FromMilliseconds(100);
// Send the ALL_TILES_RECEIVED event.
logger.LogEvent(NTP_ALL_TILES_RECEIVED, delta_tiles_received);
// Send the ALL_TILES_LOADED event, this should trigger emitting histograms.
logger.LogEvent(NTP_ALL_TILES_LOADED, delta_tiles_loaded);
EXPECT_THAT(histogram_tester.GetAllSamples("NewTabPage.LoadTime"), SizeIs(1));
EXPECT_THAT(histogram_tester.GetAllSamples("NewTabPage.LoadTime.LocalNTP"),
IsEmpty());
EXPECT_THAT(histogram_tester.GetAllSamples("NewTabPage.LoadTime.Web"),
SizeIs(1));
EXPECT_THAT(histogram_tester.GetAllSamples("NewTabPage.LoadTime.Web.Google"),
IsEmpty());
EXPECT_THAT(histogram_tester.GetAllSamples("NewTabPage.LoadTime.Web.Other"),
SizeIs(1));
histogram_tester.ExpectTimeBucketCount("NewTabPage.LoadTime",
delta_tiles_loaded, 1);
histogram_tester.ExpectTimeBucketCount("NewTabPage.LoadTime.Web",
delta_tiles_loaded, 1);
histogram_tester.ExpectTimeBucketCount("NewTabPage.LoadTime.Web.Other",
delta_tiles_loaded, 1);
EXPECT_THAT(histogram_tester.GetAllSamples(
"NewTabPage.CustomizationAvailability.Backgrounds"),
ElementsAre(Bucket(
static_cast<int>(
BackgroundCustomization::
BACKGROUND_CUSTOMIZATION_UNAVAILABLE_SEARCH_PROVIDER),
1)));
}
TEST_F(NTPUserDataLoggerTest, ShouldRecordImpressionsAge) {
base::HistogramTester histogram_tester;
// Ensure non-zero statistics.
TestNTPUserDataLogger logger(GURL("chrome://newtab/"));
constexpr base::TimeDelta delta = base::TimeDelta::FromMilliseconds(0);
constexpr base::TimeDelta kSuggestionAge = base::TimeDelta::FromMinutes(1);
constexpr base::TimeDelta kBucketTolerance = base::TimeDelta::FromSeconds(20);
logger.LogMostVisitedImpression(ntp_tiles::NTPTileImpression(
0, TileSource::SUGGESTIONS_SERVICE, TileTitleSource::UNKNOWN,
TileVisualType::THUMBNAIL, favicon_base::IconType::kInvalid,
base::Time::Now() - kSuggestionAge, GURL()));
logger.LogEvent(NTP_ALL_TILES_LOADED, delta);
EXPECT_THAT(histogram_tester.GetAllSamples(
"NewTabPage.SuggestionsImpressionAge.server"),
ElementsAre(IsBucketBetween(
(kSuggestionAge - kBucketTolerance).InSeconds(),
(kSuggestionAge + kBucketTolerance).InSeconds(),
/*count=*/1)));
}
TEST_F(NTPUserDataLoggerTest, ShouldRecordBackgroundCustomization) {
base::HistogramTester histogram_tester;
TestNTPUserDataLogger logger((GURL(chrome::kChromeSearchLocalNtpUrl)));
logger.is_custom_background_configured_ = true;
base::TimeDelta delta_tiles_received = base::TimeDelta::FromMilliseconds(10);
base::TimeDelta delta_tiles_loaded = base::TimeDelta::FromMilliseconds(100);
// Send the ALL_TILES_RECEIVED event.
logger.LogEvent(NTP_ALL_TILES_RECEIVED, delta_tiles_received);
// Send the ALL_TILES_LOADED event, this should trigger emitting histograms.
logger.LogEvent(NTP_ALL_TILES_LOADED, delta_tiles_loaded);
EXPECT_THAT(histogram_tester.GetAllSamples("NewTabPage.LoadTime"), SizeIs(1));
EXPECT_THAT(histogram_tester.GetAllSamples("NewTabPage.LoadTime.LocalNTP"),
SizeIs(1));
EXPECT_THAT(
histogram_tester.GetAllSamples("NewTabPage.LoadTime.LocalNTP.Google"),
SizeIs(1));
EXPECT_THAT(
histogram_tester.GetAllSamples("NewTabPage.LoadTime.LocalNTP.Other"),
IsEmpty());
EXPECT_THAT(histogram_tester.GetAllSamples("NewTabPage.LoadTime.Web"),
IsEmpty());
histogram_tester.ExpectTimeBucketCount("NewTabPage.LoadTime",
delta_tiles_loaded, 1);
histogram_tester.ExpectTimeBucketCount("NewTabPage.LoadTime.LocalNTP",
delta_tiles_loaded, 1);
histogram_tester.ExpectTimeBucketCount("NewTabPage.LoadTime.LocalNTP.Google",
delta_tiles_loaded, 1);
EXPECT_THAT(
histogram_tester.GetAllSamples(
"NewTabPage.CustomizationAvailability.Backgrounds"),
ElementsAre(Bucket(
static_cast<int>(
BackgroundCustomization::BACKGROUND_CUSTOMIZATION_AVAILABLE),
1)));
EXPECT_THAT(
histogram_tester.GetAllSamples("NewTabPage.Customized"),
ElementsAre(Bucket(
static_cast<int>(CustomizedFeature::CUSTOMIZED_FEATURE_BACKGROUND),
1)));
}
TEST_F(NTPUserDataLoggerTest, ShouldRecordCustomizationActionFromNTPGoogle) {
base::HistogramTester histogram_tester;
GURL local_ntp(chrome::kChromeSearchLocalNtpUrl);
TestNTPUserDataLogger logger(local_ntp);
logger.is_google_ = true;
base::TimeDelta delta_tiles_received = base::TimeDelta::FromMilliseconds(10);
base::TimeDelta delta_tiles_loaded = base::TimeDelta::FromMilliseconds(100);
// Send the ALL_TILES_RECEIVED event.
logger.LogEvent(NTP_ALL_TILES_RECEIVED, delta_tiles_received);
// Send the ALL_TILES_LOADED event, this should trigger emitting histograms.
logger.LogEvent(NTP_ALL_TILES_LOADED, delta_tiles_loaded);
// Attempt to log an event that is only supported when the default search
// provider is Google.
logger.LogEvent(NTP_CUSTOMIZE_CHROME_BACKGROUNDS_CLICKED, delta_tiles_loaded);
EXPECT_THAT(histogram_tester.GetAllSamples("NewTabPage.LoadTime"), SizeIs(1));
EXPECT_THAT(histogram_tester.GetAllSamples("NewTabPage.LoadTime.LocalNTP"),
SizeIs(1));
EXPECT_THAT(
histogram_tester.GetAllSamples("NewTabPage.LoadTime.LocalNTP.Google"),
SizeIs(1));
EXPECT_THAT(
histogram_tester.GetAllSamples("NewTabPage.LoadTime.LocalNTP.Other"),
IsEmpty());
EXPECT_THAT(histogram_tester.GetAllSamples("NewTabPage.LoadTime.Web"),
IsEmpty());
histogram_tester.ExpectTimeBucketCount("NewTabPage.LoadTime",
delta_tiles_loaded, 1);
histogram_tester.ExpectTimeBucketCount("NewTabPage.LoadTime.LocalNTP",
delta_tiles_loaded, 1);
histogram_tester.ExpectTimeBucketCount("NewTabPage.LoadTime.LocalNTP.Google",
delta_tiles_loaded, 1);
EXPECT_THAT(
histogram_tester.GetAllSamples(
"NewTabPage.CustomizationAvailability.Backgrounds"),
ElementsAre(Bucket(
static_cast<int>(
BackgroundCustomization::BACKGROUND_CUSTOMIZATION_AVAILABLE),
1)));
EXPECT_THAT(histogram_tester.GetAllSamples("NewTabPage.CustomizeAction"),
ElementsAre(Bucket(
static_cast<int>(
CustomizeAction::CUSTOMIZE_ACTION_CHROME_BACKGROUNDS),
1)));
}
TEST_F(NTPUserDataLoggerTest, ShouldNotRecordCustomizationActionFromNTPOther) {
base::HistogramTester histogram_tester;
TestNTPUserDataLogger logger(GURL("https://www.notgoogle.com/newtab"));
logger.is_google_ = false;
base::TimeDelta delta_tiles_received = base::TimeDelta::FromMilliseconds(10);
base::TimeDelta delta_tiles_loaded = base::TimeDelta::FromMilliseconds(100);
// Send the ALL_TILES_RECEIVED event.
logger.LogEvent(NTP_ALL_TILES_RECEIVED, delta_tiles_received);
// Send the ALL_TILES_LOADED event, this should trigger emitting histograms.
logger.LogEvent(NTP_ALL_TILES_LOADED, delta_tiles_loaded);
// Attempt to log an event that is only supported when the default search
// provider is Google.
logger.LogEvent(NTP_CUSTOMIZE_CHROME_BACKGROUNDS_CLICKED, delta_tiles_loaded);
EXPECT_THAT(histogram_tester.GetAllSamples("NewTabPage.LoadTime"), SizeIs(1));
EXPECT_THAT(histogram_tester.GetAllSamples("NewTabPage.LoadTime.LocalNTP"),
IsEmpty());
EXPECT_THAT(histogram_tester.GetAllSamples("NewTabPage.LoadTime.Web"),
SizeIs(1));
EXPECT_THAT(histogram_tester.GetAllSamples("NewTabPage.LoadTime.Web.Google"),
IsEmpty());
EXPECT_THAT(histogram_tester.GetAllSamples("NewTabPage.LoadTime.Web.Other"),
SizeIs(1));
histogram_tester.ExpectTimeBucketCount("NewTabPage.LoadTime",
delta_tiles_loaded, 1);
histogram_tester.ExpectTimeBucketCount("NewTabPage.LoadTime.Web",
delta_tiles_loaded, 1);
histogram_tester.ExpectTimeBucketCount("NewTabPage.LoadTime.Web.Other",
delta_tiles_loaded, 1);
EXPECT_THAT(histogram_tester.GetAllSamples(
"NewTabPage.CustomizationAvailability.Backgrounds"),
ElementsAre(Bucket(
static_cast<int>(
BackgroundCustomization::
BACKGROUND_CUSTOMIZATION_UNAVAILABLE_SEARCH_PROVIDER),
1)));
EXPECT_THAT(histogram_tester.GetAllSamples("NewTabPage.CustomizeAction"),
IsEmpty());
}