| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/ui/webui/ntp/ntp_user_data_logger.h" | 5 #include "chrome/browser/ui/webui/ntp/ntp_user_data_logger.h" |
| 6 | 6 |
| 7 #include <memory> | 7 #include <memory> |
| 8 #include <string> | 8 #include <string> |
| 9 #include <vector> | 9 #include <vector> |
| 10 | 10 |
| 11 #include "base/metrics/histogram.h" | 11 #include "base/metrics/histogram.h" |
| 12 #include "base/metrics/statistics_recorder.h" | 12 #include "base/metrics/statistics_recorder.h" |
| 13 #include "base/test/histogram_tester.h" | 13 #include "base/test/histogram_tester.h" |
| 14 #include "chrome/common/search/ntp_logging_events.h" | 14 #include "chrome/common/search/ntp_logging_events.h" |
| 15 #include "testing/gmock/include/gmock/gmock.h" | 15 #include "testing/gmock/include/gmock/gmock.h" |
| 16 #include "testing/gtest/include/gtest/gtest.h" | 16 #include "testing/gtest/include/gtest/gtest.h" |
| 17 | 17 |
| 18 using base::Bucket; | 18 using base::Bucket; |
| 19 using ntp_tiles::NTPTileSource; |
| 19 using testing::ElementsAre; | 20 using testing::ElementsAre; |
| 20 using testing::IsEmpty; | 21 using testing::IsEmpty; |
| 21 | 22 |
| 22 namespace { | 23 namespace { |
| 23 | 24 |
| 24 using Sample = base::HistogramBase::Sample; | 25 using Sample = base::HistogramBase::Sample; |
| 25 using Samples = std::vector<Sample>; | 26 using Samples = std::vector<Sample>; |
| 26 | 27 |
| 27 class TestNTPUserDataLogger : public NTPUserDataLogger { | 28 class TestNTPUserDataLogger : public NTPUserDataLogger { |
| 28 public: | 29 public: |
| 29 TestNTPUserDataLogger() : NTPUserDataLogger(nullptr) {} | 30 TestNTPUserDataLogger() : NTPUserDataLogger(nullptr) {} |
| 30 ~TestNTPUserDataLogger() override {} | 31 ~TestNTPUserDataLogger() override {} |
| 31 }; | 32 }; |
| 32 | 33 |
| 33 } // namespace | 34 } // namespace |
| 34 | 35 |
| 35 TEST(NTPUserDataLoggerTest, TestNumberOfTiles) { | 36 TEST(NTPUserDataLoggerTest, TestNumberOfTiles) { |
| 36 base::StatisticsRecorder::Initialize(); | 37 base::StatisticsRecorder::Initialize(); |
| 37 | 38 |
| 38 base::HistogramTester histogram_tester; | 39 base::HistogramTester histogram_tester; |
| 39 | 40 |
| 40 // Ensure non-zero statistics. | 41 // Ensure non-zero statistics. |
| 41 TestNTPUserDataLogger logger; | 42 TestNTPUserDataLogger logger; |
| 42 logger.ntp_url_ = GURL("chrome://newtab/"); | 43 logger.ntp_url_ = GURL("chrome://newtab/"); |
| 43 | 44 |
| 44 base::TimeDelta delta = base::TimeDelta::FromMilliseconds(0); | 45 base::TimeDelta delta = base::TimeDelta::FromMilliseconds(0); |
| 45 | 46 |
| 46 for (int i = 0; i < 8; ++i) | 47 for (int i = 0; i < 8; ++i) |
| 47 logger.LogMostVisitedImpression(i, NTPLoggingTileSource::SERVER); | 48 logger.LogMostVisitedImpression(i, NTPTileSource::SUGGESTIONS_SERVICE); |
| 48 logger.LogEvent(NTP_ALL_TILES_LOADED, delta); | 49 logger.LogEvent(NTP_ALL_TILES_LOADED, delta); |
| 49 EXPECT_THAT(histogram_tester.GetAllSamples("NewTabPage.NumberOfTiles"), | 50 EXPECT_THAT(histogram_tester.GetAllSamples("NewTabPage.NumberOfTiles"), |
| 50 ElementsAre(Bucket(8, 1))); | 51 ElementsAre(Bucket(8, 1))); |
| 51 | 52 |
| 52 // We should not log again for the same NTP. | 53 // We should not log again for the same NTP. |
| 53 logger.LogEvent(NTP_ALL_TILES_LOADED, delta); | 54 logger.LogEvent(NTP_ALL_TILES_LOADED, delta); |
| 54 EXPECT_THAT(histogram_tester.GetAllSamples("NewTabPage.NumberOfTiles"), | 55 EXPECT_THAT(histogram_tester.GetAllSamples("NewTabPage.NumberOfTiles"), |
| 55 ElementsAre(Bucket(8, 1))); | 56 ElementsAre(Bucket(8, 1))); |
| 56 | 57 |
| 57 // Navigating away and back resets stats. | 58 // Navigating away and back resets stats. |
| (...skipping 10 matching lines...) Expand all Loading... |
| 68 base::StatisticsRecorder::Initialize(); | 69 base::StatisticsRecorder::Initialize(); |
| 69 | 70 |
| 70 base::HistogramTester histogram_tester; | 71 base::HistogramTester histogram_tester; |
| 71 | 72 |
| 72 TestNTPUserDataLogger logger; | 73 TestNTPUserDataLogger logger; |
| 73 logger.ntp_url_ = GURL("chrome://newtab/"); | 74 logger.ntp_url_ = GURL("chrome://newtab/"); |
| 74 | 75 |
| 75 base::TimeDelta delta = base::TimeDelta::FromMilliseconds(0); | 76 base::TimeDelta delta = base::TimeDelta::FromMilliseconds(0); |
| 76 | 77 |
| 77 // Impressions increment the associated bins. | 78 // Impressions increment the associated bins. |
| 78 logger.LogMostVisitedImpression(0, NTPLoggingTileSource::SERVER); | 79 logger.LogMostVisitedImpression(0, NTPTileSource::SUGGESTIONS_SERVICE); |
| 79 logger.LogMostVisitedImpression(1, NTPLoggingTileSource::SERVER); | 80 logger.LogMostVisitedImpression(1, NTPTileSource::SUGGESTIONS_SERVICE); |
| 80 logger.LogMostVisitedImpression(2, NTPLoggingTileSource::SERVER); | 81 logger.LogMostVisitedImpression(2, NTPTileSource::SUGGESTIONS_SERVICE); |
| 81 logger.LogMostVisitedImpression(3, NTPLoggingTileSource::SERVER); | 82 logger.LogMostVisitedImpression(3, NTPTileSource::SUGGESTIONS_SERVICE); |
| 82 logger.LogMostVisitedImpression(4, NTPLoggingTileSource::CLIENT); | 83 logger.LogMostVisitedImpression(4, NTPTileSource::TOP_SITES); |
| 83 logger.LogMostVisitedImpression(5, NTPLoggingTileSource::CLIENT); | 84 logger.LogMostVisitedImpression(5, NTPTileSource::TOP_SITES); |
| 84 logger.LogMostVisitedImpression(6, NTPLoggingTileSource::CLIENT); | 85 logger.LogMostVisitedImpression(6, NTPTileSource::TOP_SITES); |
| 85 logger.LogMostVisitedImpression(7, NTPLoggingTileSource::CLIENT); | 86 logger.LogMostVisitedImpression(7, NTPTileSource::TOP_SITES); |
| 86 | 87 |
| 87 // Repeated impressions for the same bins are ignored. | 88 // Repeated impressions for the same bins are ignored. |
| 88 logger.LogMostVisitedImpression(0, NTPLoggingTileSource::SERVER); | 89 logger.LogMostVisitedImpression(0, NTPTileSource::SUGGESTIONS_SERVICE); |
| 89 logger.LogMostVisitedImpression(1, NTPLoggingTileSource::CLIENT); | 90 logger.LogMostVisitedImpression(1, NTPTileSource::TOP_SITES); |
| 90 logger.LogMostVisitedImpression(2, NTPLoggingTileSource::SERVER); | 91 logger.LogMostVisitedImpression(2, NTPTileSource::SUGGESTIONS_SERVICE); |
| 91 logger.LogMostVisitedImpression(3, NTPLoggingTileSource::CLIENT); | 92 logger.LogMostVisitedImpression(3, NTPTileSource::TOP_SITES); |
| 92 | 93 |
| 93 // Impressions are silently ignored for tiles >= 8. | 94 // Impressions are silently ignored for tiles >= 8. |
| 94 logger.LogMostVisitedImpression(8, NTPLoggingTileSource::SERVER); | 95 logger.LogMostVisitedImpression(8, NTPTileSource::SUGGESTIONS_SERVICE); |
| 95 logger.LogMostVisitedImpression(9, NTPLoggingTileSource::CLIENT); | 96 logger.LogMostVisitedImpression(9, NTPTileSource::TOP_SITES); |
| 96 | 97 |
| 97 // The actual histograms are emitted only after the ALL_TILES_LOADED event, so | 98 // The actual histograms are emitted only after the ALL_TILES_LOADED event, so |
| 98 // at this point everything should still be empty. | 99 // at this point everything should still be empty. |
| 99 EXPECT_THAT( | 100 EXPECT_THAT( |
| 100 histogram_tester.GetAllSamples("NewTabPage.SuggestionsImpression"), | 101 histogram_tester.GetAllSamples("NewTabPage.SuggestionsImpression"), |
| 101 IsEmpty()); | 102 IsEmpty()); |
| 102 EXPECT_THAT( | 103 EXPECT_THAT( |
| 103 histogram_tester.GetAllSamples("NewTabPage.SuggestionsImpression.server"), | 104 histogram_tester.GetAllSamples("NewTabPage.SuggestionsImpression.server"), |
| 104 IsEmpty()); | 105 IsEmpty()); |
| 105 EXPECT_THAT( | 106 EXPECT_THAT( |
| (...skipping 12 matching lines...) Expand all Loading... |
| 118 ElementsAre(Bucket(0, 1), Bucket(1, 1), Bucket(2, 1), Bucket(3, 1))); | 119 ElementsAre(Bucket(0, 1), Bucket(1, 1), Bucket(2, 1), Bucket(3, 1))); |
| 119 EXPECT_THAT( | 120 EXPECT_THAT( |
| 120 histogram_tester.GetAllSamples("NewTabPage.SuggestionsImpression.client"), | 121 histogram_tester.GetAllSamples("NewTabPage.SuggestionsImpression.client"), |
| 121 ElementsAre(Bucket(4, 1), Bucket(5, 1), Bucket(6, 1), Bucket(7, 1))); | 122 ElementsAre(Bucket(4, 1), Bucket(5, 1), Bucket(6, 1), Bucket(7, 1))); |
| 122 | 123 |
| 123 // After navigating away from the NTP and back, we record again. | 124 // After navigating away from the NTP and back, we record again. |
| 124 logger.NavigatedFromURLToURL(GURL("chrome://newtab/"), | 125 logger.NavigatedFromURLToURL(GURL("chrome://newtab/"), |
| 125 GURL("http://chromium.org")); | 126 GURL("http://chromium.org")); |
| 126 logger.NavigatedFromURLToURL(GURL("http://chromium.org"), | 127 logger.NavigatedFromURLToURL(GURL("http://chromium.org"), |
| 127 GURL("chrome://newtab/")); | 128 GURL("chrome://newtab/")); |
| 128 logger.LogMostVisitedImpression(0, NTPLoggingTileSource::SERVER); | 129 logger.LogMostVisitedImpression(0, NTPTileSource::SUGGESTIONS_SERVICE); |
| 129 logger.LogMostVisitedImpression(1, NTPLoggingTileSource::CLIENT); | 130 logger.LogMostVisitedImpression(1, NTPTileSource::TOP_SITES); |
| 130 logger.LogMostVisitedImpression(2, NTPLoggingTileSource::SERVER); | 131 logger.LogMostVisitedImpression(2, NTPTileSource::SUGGESTIONS_SERVICE); |
| 131 logger.LogMostVisitedImpression(3, NTPLoggingTileSource::CLIENT); | 132 logger.LogMostVisitedImpression(3, NTPTileSource::TOP_SITES); |
| 132 logger.LogEvent(NTP_ALL_TILES_LOADED, delta); | 133 logger.LogEvent(NTP_ALL_TILES_LOADED, delta); |
| 133 | 134 |
| 134 EXPECT_THAT( | 135 EXPECT_THAT( |
| 135 histogram_tester.GetAllSamples("NewTabPage.SuggestionsImpression"), | 136 histogram_tester.GetAllSamples("NewTabPage.SuggestionsImpression"), |
| 136 ElementsAre(Bucket(0, 2), Bucket(1, 2), Bucket(2, 2), Bucket(3, 2), | 137 ElementsAre(Bucket(0, 2), Bucket(1, 2), Bucket(2, 2), Bucket(3, 2), |
| 137 Bucket(4, 1), Bucket(5, 1), Bucket(6, 1), Bucket(7, 1))); | 138 Bucket(4, 1), Bucket(5, 1), Bucket(6, 1), Bucket(7, 1))); |
| 138 EXPECT_THAT( | 139 EXPECT_THAT( |
| 139 histogram_tester.GetAllSamples("NewTabPage.SuggestionsImpression.server"), | 140 histogram_tester.GetAllSamples("NewTabPage.SuggestionsImpression.server"), |
| 140 ElementsAre(Bucket(0, 2), Bucket(1, 1), Bucket(2, 2), Bucket(3, 1))); | 141 ElementsAre(Bucket(0, 2), Bucket(1, 1), Bucket(2, 2), Bucket(3, 1))); |
| 141 EXPECT_THAT( | 142 EXPECT_THAT( |
| 142 histogram_tester.GetAllSamples("NewTabPage.SuggestionsImpression.client"), | 143 histogram_tester.GetAllSamples("NewTabPage.SuggestionsImpression.client"), |
| 143 ElementsAre(Bucket(1, 1), Bucket(3, 1), Bucket(4, 1), Bucket(5, 1), | 144 ElementsAre(Bucket(1, 1), Bucket(3, 1), Bucket(4, 1), Bucket(5, 1), |
| 144 Bucket(6, 1), Bucket(7, 1))); | 145 Bucket(6, 1), Bucket(7, 1))); |
| 145 } | 146 } |
| 146 | 147 |
| 147 TEST(NTPUserDataLoggerTest, TestLogMostVisitedNavigation) { | 148 TEST(NTPUserDataLoggerTest, TestLogMostVisitedNavigation) { |
| 148 base::StatisticsRecorder::Initialize(); | 149 base::StatisticsRecorder::Initialize(); |
| 149 | 150 |
| 150 base::HistogramTester histogram_tester; | 151 base::HistogramTester histogram_tester; |
| 151 | 152 |
| 152 TestNTPUserDataLogger logger; | 153 TestNTPUserDataLogger logger; |
| 153 | 154 |
| 154 logger.LogMostVisitedNavigation(0, NTPLoggingTileSource::SERVER); | 155 logger.LogMostVisitedNavigation(0, NTPTileSource::SUGGESTIONS_SERVICE); |
| 155 EXPECT_THAT( | 156 EXPECT_THAT( |
| 156 histogram_tester.GetAllSamples("NewTabPage.MostVisited"), | 157 histogram_tester.GetAllSamples("NewTabPage.MostVisited"), |
| 157 ElementsAre(Bucket(0, 1))); | 158 ElementsAre(Bucket(0, 1))); |
| 158 EXPECT_THAT( | 159 EXPECT_THAT( |
| 159 histogram_tester.GetAllSamples("NewTabPage.MostVisited.server"), | 160 histogram_tester.GetAllSamples("NewTabPage.MostVisited.server"), |
| 160 ElementsAre(Bucket(0, 1))); | 161 ElementsAre(Bucket(0, 1))); |
| 161 EXPECT_THAT( | 162 EXPECT_THAT( |
| 162 histogram_tester.GetAllSamples("NewTabPage.MostVisited.client"), | 163 histogram_tester.GetAllSamples("NewTabPage.MostVisited.client"), |
| 163 IsEmpty()); | 164 IsEmpty()); |
| 164 | 165 |
| 165 logger.LogMostVisitedNavigation(1, NTPLoggingTileSource::SERVER); | 166 logger.LogMostVisitedNavigation(1, NTPTileSource::SUGGESTIONS_SERVICE); |
| 166 EXPECT_THAT( | 167 EXPECT_THAT( |
| 167 histogram_tester.GetAllSamples("NewTabPage.MostVisited"), | 168 histogram_tester.GetAllSamples("NewTabPage.MostVisited"), |
| 168 ElementsAre(Bucket(0, 1), Bucket(1, 1))); | 169 ElementsAre(Bucket(0, 1), Bucket(1, 1))); |
| 169 EXPECT_THAT( | 170 EXPECT_THAT( |
| 170 histogram_tester.GetAllSamples("NewTabPage.MostVisited.server"), | 171 histogram_tester.GetAllSamples("NewTabPage.MostVisited.server"), |
| 171 ElementsAre(Bucket(0, 1), Bucket(1, 1))); | 172 ElementsAre(Bucket(0, 1), Bucket(1, 1))); |
| 172 EXPECT_THAT( | 173 EXPECT_THAT( |
| 173 histogram_tester.GetAllSamples("NewTabPage.MostVisited.client"), | 174 histogram_tester.GetAllSamples("NewTabPage.MostVisited.client"), |
| 174 IsEmpty()); | 175 IsEmpty()); |
| 175 | 176 |
| 176 logger.LogMostVisitedNavigation(2, NTPLoggingTileSource::CLIENT); | 177 logger.LogMostVisitedNavigation(2, NTPTileSource::TOP_SITES); |
| 177 EXPECT_THAT( | 178 EXPECT_THAT( |
| 178 histogram_tester.GetAllSamples("NewTabPage.MostVisited"), | 179 histogram_tester.GetAllSamples("NewTabPage.MostVisited"), |
| 179 ElementsAre(Bucket(0, 1), Bucket(1, 1), Bucket(2, 1))); | 180 ElementsAre(Bucket(0, 1), Bucket(1, 1), Bucket(2, 1))); |
| 180 EXPECT_THAT( | 181 EXPECT_THAT( |
| 181 histogram_tester.GetAllSamples("NewTabPage.MostVisited.server"), | 182 histogram_tester.GetAllSamples("NewTabPage.MostVisited.server"), |
| 182 ElementsAre(Bucket(0, 1), Bucket(1, 1))); | 183 ElementsAre(Bucket(0, 1), Bucket(1, 1))); |
| 183 EXPECT_THAT( | 184 EXPECT_THAT( |
| 184 histogram_tester.GetAllSamples("NewTabPage.MostVisited.client"), | 185 histogram_tester.GetAllSamples("NewTabPage.MostVisited.client"), |
| 185 ElementsAre(Bucket(2, 1))); | 186 ElementsAre(Bucket(2, 1))); |
| 186 | 187 |
| 187 logger.LogMostVisitedNavigation(3, NTPLoggingTileSource::CLIENT); | 188 logger.LogMostVisitedNavigation(3, NTPTileSource::TOP_SITES); |
| 188 EXPECT_THAT( | 189 EXPECT_THAT( |
| 189 histogram_tester.GetAllSamples("NewTabPage.MostVisited"), | 190 histogram_tester.GetAllSamples("NewTabPage.MostVisited"), |
| 190 ElementsAre(Bucket(0, 1), Bucket(1, 1), Bucket(2, 1), Bucket(3, 1))); | 191 ElementsAre(Bucket(0, 1), Bucket(1, 1), Bucket(2, 1), Bucket(3, 1))); |
| 191 EXPECT_THAT( | 192 EXPECT_THAT( |
| 192 histogram_tester.GetAllSamples("NewTabPage.MostVisited.server"), | 193 histogram_tester.GetAllSamples("NewTabPage.MostVisited.server"), |
| 193 ElementsAre(Bucket(0, 1), Bucket(1, 1))); | 194 ElementsAre(Bucket(0, 1), Bucket(1, 1))); |
| 194 EXPECT_THAT( | 195 EXPECT_THAT( |
| 195 histogram_tester.GetAllSamples("NewTabPage.MostVisited.client"), | 196 histogram_tester.GetAllSamples("NewTabPage.MostVisited.client"), |
| 196 ElementsAre(Bucket(2, 1), Bucket(3, 1))); | 197 ElementsAre(Bucket(2, 1), Bucket(3, 1))); |
| 197 | 198 |
| 198 // Navigations always increase. | 199 // Navigations always increase. |
| 199 logger.LogMostVisitedNavigation(0, NTPLoggingTileSource::SERVER); | 200 logger.LogMostVisitedNavigation(0, NTPTileSource::SUGGESTIONS_SERVICE); |
| 200 logger.LogMostVisitedNavigation(1, NTPLoggingTileSource::CLIENT); | 201 logger.LogMostVisitedNavigation(1, NTPTileSource::TOP_SITES); |
| 201 logger.LogMostVisitedNavigation(2, NTPLoggingTileSource::SERVER); | 202 logger.LogMostVisitedNavigation(2, NTPTileSource::SUGGESTIONS_SERVICE); |
| 202 logger.LogMostVisitedNavigation(3, NTPLoggingTileSource::CLIENT); | 203 logger.LogMostVisitedNavigation(3, NTPTileSource::TOP_SITES); |
| 203 EXPECT_THAT( | 204 EXPECT_THAT( |
| 204 histogram_tester.GetAllSamples("NewTabPage.MostVisited"), | 205 histogram_tester.GetAllSamples("NewTabPage.MostVisited"), |
| 205 ElementsAre(Bucket(0, 2), Bucket(1, 2), Bucket(2, 2), Bucket(3, 2))); | 206 ElementsAre(Bucket(0, 2), Bucket(1, 2), Bucket(2, 2), Bucket(3, 2))); |
| 206 EXPECT_THAT( | 207 EXPECT_THAT( |
| 207 histogram_tester.GetAllSamples("NewTabPage.MostVisited.server"), | 208 histogram_tester.GetAllSamples("NewTabPage.MostVisited.server"), |
| 208 ElementsAre(Bucket(0, 2), Bucket(1, 1), Bucket(2, 1))); | 209 ElementsAre(Bucket(0, 2), Bucket(1, 1), Bucket(2, 1))); |
| 209 EXPECT_THAT( | 210 EXPECT_THAT( |
| 210 histogram_tester.GetAllSamples("NewTabPage.MostVisited.client"), | 211 histogram_tester.GetAllSamples("NewTabPage.MostVisited.client"), |
| 211 ElementsAre(Bucket(1, 1), Bucket(2, 1), Bucket(3, 2))); | 212 ElementsAre(Bucket(1, 1), Bucket(2, 1), Bucket(3, 2))); |
| 212 } | 213 } |
| OLD | NEW |