Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 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 | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #include "ash/metrics/user_metrics_recorder.h" | |
| 6 | |
| 7 #include "ash/shelf/shelf_layout_manager.h" | |
| 8 #include "ash/shell.h" | |
| 9 #include "ash/system/user/login_status.h" | |
| 10 #include "ash/test/ash_test_base.h" | |
| 11 #include "ash/test/test_system_tray_delegate.h" | |
| 12 #include "ash/test/user_metrics_recorder_test_api.h" | |
| 13 #include "base/memory/scoped_ptr.h" | |
| 14 #include "base/test/histogram_tester.h" | |
| 15 #include "ui/aura/window.h" | |
| 16 | |
| 17 namespace ash { | |
| 18 namespace { | |
| 19 | |
| 20 const char kAsh_ShelfAlignmentOverTime[] = "Ash.ShelfAlignmentOverTime"; | |
| 21 | |
| 22 const char kAsh_NumberOfVisibleWindowsInPrimaryDisplay[] = | |
| 23 "Ash.NumberOfVisibleWindowsInPrimaryDisplay"; | |
| 24 | |
| 25 const char kAsh_ActiveWindowShowTypeOverTime[] = | |
| 26 "Ash.ActiveWindowShowTypeOverTime"; | |
| 27 | |
| 28 } // namespace | |
| 29 | |
| 30 // Test fixture for the UserMetricsRecorder class. | |
| 31 class UserMetricsRecorderTest : public test::AshTestBase { | |
| 32 public: | |
| 33 UserMetricsRecorderTest(); | |
| 34 ~UserMetricsRecorderTest() override; | |
| 35 | |
| 36 void SetUp() override; | |
| 37 void TearDown() override; | |
| 38 | |
| 39 // Sets the user login status. | |
| 40 void SetLoginStatus(user::LoginStatus login_status); | |
| 41 | |
| 42 // Sets the current user session to be active in a multi window environment. | |
| 43 void SetUserActiveInMultiWindowEnvironment(); | |
| 44 | |
| 45 // Sets the current user session to be inactive in a multi window environment. | |
| 46 void SetUserNotActiveInMultiWindowEnvironment(); | |
| 47 | |
| 48 UserMetricsRecorder* user_metrics_recorder() { | |
| 49 return user_metrics_recorder_.get(); | |
| 50 } | |
| 51 | |
| 52 test::UserMetricsRecorderTestAPI* user_metrics_recorder_test_api() { | |
| 53 return user_metrics_recorder_test_api_.get(); | |
| 54 } | |
| 55 | |
| 56 base::HistogramTester& histograms() { return histograms_; } | |
| 57 | |
| 58 private: | |
| 59 // The test target. | |
| 60 scoped_ptr<UserMetricsRecorder> user_metrics_recorder_; | |
| 61 | |
| 62 // Test API to access private members of the test target. | |
| 63 scoped_ptr<test::UserMetricsRecorderTestAPI> user_metrics_recorder_test_api_; | |
| 64 | |
| 65 // Histogram value verifier. | |
| 66 base::HistogramTester histograms_; | |
| 67 | |
| 68 // The active SystemTrayDelegate. Not owned. | |
| 69 test::TestSystemTrayDelegate* test_system_tray_delegate_; | |
| 70 | |
| 71 DISALLOW_COPY_AND_ASSIGN(UserMetricsRecorderTest); | |
| 72 }; | |
| 73 | |
| 74 UserMetricsRecorderTest::UserMetricsRecorderTest() { | |
| 75 } | |
| 76 | |
| 77 UserMetricsRecorderTest::~UserMetricsRecorderTest() { | |
| 78 } | |
| 79 | |
| 80 void UserMetricsRecorderTest::SetUp() { | |
| 81 test::AshTestBase::SetUp(); | |
| 82 | |
| 83 user_metrics_recorder_.reset( | |
| 84 test::UserMetricsRecorderTestAPI::CreateUserMetricsRecorder(false) | |
| 85 .release()); | |
| 86 | |
| 87 user_metrics_recorder_test_api_.reset( | |
| 88 new test::UserMetricsRecorderTestAPI(user_metrics_recorder_.get())); | |
| 89 | |
| 90 test_system_tray_delegate_ = GetSystemTrayDelegate(); | |
| 91 } | |
| 92 | |
| 93 void UserMetricsRecorderTest::TearDown() { | |
| 94 test_system_tray_delegate_ = nullptr; | |
| 95 | |
| 96 // Make sure |user_metrics_recorder_test_api_| doesn't access | |
| 97 // |user_metrics_recorder_| after it's destructed. | |
| 98 user_metrics_recorder_test_api_.reset(); | |
| 99 user_metrics_recorder_.reset(); | |
| 100 | |
| 101 test::AshTestBase::TearDown(); | |
| 102 } | |
| 103 | |
| 104 void UserMetricsRecorderTest::SetLoginStatus(user::LoginStatus login_status) { | |
| 105 test_system_tray_delegate_->SetLoginStatus(login_status); | |
| 106 } | |
| 107 | |
| 108 void UserMetricsRecorderTest::SetUserActiveInMultiWindowEnvironment() { | |
|
pkotwicz
2015/04/21 16:15:17
Nit: I would make the method take a boolean.
bruthig
2015/04/24 20:00:11
Done.
| |
| 109 SetLoginStatus(user::LOGGED_IN_USER); | |
| 110 ASSERT_TRUE( | |
| 111 user_metrics_recorder_test_api()->IsUserActiveInMultiWindowEnvironment()); | |
| 112 } | |
| 113 | |
| 114 void UserMetricsRecorderTest::SetUserNotActiveInMultiWindowEnvironment() { | |
| 115 SetLoginStatus(user::LOGGED_IN_LOCKED); | |
| 116 ASSERT_FALSE( | |
| 117 user_metrics_recorder_test_api()->IsUserActiveInMultiWindowEnvironment()); | |
| 118 } | |
| 119 | |
| 120 TEST_F(UserMetricsRecorderTest, | |
| 121 VerifyIsUserActiveInMultiWindowEnvironmentValues) { | |
| 122 SetLoginStatus(user::LOGGED_IN_NONE); | |
| 123 EXPECT_FALSE( | |
| 124 user_metrics_recorder_test_api()->IsUserActiveInMultiWindowEnvironment()); | |
| 125 | |
| 126 SetLoginStatus(user::LOGGED_IN_LOCKED); | |
| 127 EXPECT_FALSE( | |
| 128 user_metrics_recorder_test_api()->IsUserActiveInMultiWindowEnvironment()); | |
| 129 | |
| 130 SetLoginStatus(user::LOGGED_IN_USER); | |
| 131 EXPECT_TRUE( | |
| 132 user_metrics_recorder_test_api()->IsUserActiveInMultiWindowEnvironment()); | |
| 133 | |
| 134 SetLoginStatus(user::LOGGED_IN_OWNER); | |
| 135 EXPECT_TRUE( | |
| 136 user_metrics_recorder_test_api()->IsUserActiveInMultiWindowEnvironment()); | |
| 137 | |
| 138 SetLoginStatus(user::LOGGED_IN_GUEST); | |
| 139 EXPECT_TRUE( | |
| 140 user_metrics_recorder_test_api()->IsUserActiveInMultiWindowEnvironment()); | |
| 141 | |
| 142 SetLoginStatus(user::LOGGED_IN_PUBLIC); | |
| 143 EXPECT_TRUE( | |
| 144 user_metrics_recorder_test_api()->IsUserActiveInMultiWindowEnvironment()); | |
| 145 | |
| 146 SetLoginStatus(user::LOGGED_IN_SUPERVISED); | |
| 147 EXPECT_TRUE( | |
| 148 user_metrics_recorder_test_api()->IsUserActiveInMultiWindowEnvironment()); | |
| 149 | |
| 150 SetLoginStatus(user::LOGGED_IN_KIOSK_APP); | |
| 151 EXPECT_FALSE( | |
| 152 user_metrics_recorder_test_api()->IsUserActiveInMultiWindowEnvironment()); | |
| 153 } | |
| 154 | |
| 155 // Verifies that the stats dependent on the presence of a ShelfLayoutManager | |
| 156 // are recorded when a ShelfLayoutManager exists. | |
| 157 // TODO(bruthig): Add a test to verify the stats are not recorded when a | |
| 158 // ShelfLayoutManager does not exist. Consider investigating whether the | |
| 159 // conditional is necessary. | |
|
pkotwicz
2015/04/21 16:15:17
Remove the test given that we are unsure whether t
bruthig
2015/04/24 20:00:11
Done.
| |
| 160 TEST_F(UserMetricsRecorderTest, | |
| 161 VerifyStatsRecordedWhenAShelfLayoutManagerExists) { | |
| 162 SetUserActiveInMultiWindowEnvironment(); | |
| 163 ASSERT_TRUE(ShelfLayoutManager::ForShelf(Shell::GetPrimaryRootWindow())); | |
| 164 user_metrics_recorder_test_api()->RecordPeriodicMetrics(); | |
| 165 | |
| 166 histograms().ExpectTotalCount(kAsh_ShelfAlignmentOverTime, 1); | |
| 167 } | |
| 168 | |
| 169 // Verifies that the IsUserActive() dependent stats are not recorded when a | |
| 170 // user is not active. | |
|
pkotwicz
2015/04/21 16:15:17
Nit: Please update the test comment
bruthig
2015/04/24 20:00:11
Done.
| |
| 171 TEST_F(UserMetricsRecorderTest, VerifyStatsRecordedWhenUserIsNotActive) { | |
| 172 SetUserNotActiveInMultiWindowEnvironment(); | |
| 173 user_metrics_recorder_test_api()->RecordPeriodicMetrics(); | |
| 174 | |
| 175 histograms().ExpectTotalCount(kAsh_NumberOfVisibleWindowsInPrimaryDisplay, 0); | |
| 176 } | |
| 177 | |
| 178 // Verifies that the IsUserActive() dependent stats are recorded when a user | |
| 179 // is active. | |
|
pkotwicz
2015/04/21 16:15:17
Nit: Please update the test comment
bruthig
2015/04/24 20:00:12
Done.
| |
| 180 TEST_F(UserMetricsRecorderTest, VerifyStatsRecordedWhenIsUserActive) { | |
| 181 SetUserActiveInMultiWindowEnvironment(); | |
| 182 user_metrics_recorder_test_api()->RecordPeriodicMetrics(); | |
| 183 | |
| 184 histograms().ExpectTotalCount(kAsh_NumberOfVisibleWindowsInPrimaryDisplay, 1); | |
| 185 } | |
| 186 | |
| 187 // Verifies which stats are always recorded and are not dependent on conditional | |
| 188 // logic for when they are recorded. | |
|
pkotwicz
2015/04/21 16:15:17
How about: "Verifies recording of stats which are
bruthig
2015/04/24 20:00:11
Done.
| |
| 189 TEST_F(UserMetricsRecorderTest, VerifyStatsRecordedByRecordPeriodicMetrics) { | |
| 190 SetUserActiveInMultiWindowEnvironment(); | |
| 191 user_metrics_recorder_test_api()->RecordPeriodicMetrics(); | |
| 192 | |
| 193 histograms().ExpectTotalCount(kAsh_ActiveWindowShowTypeOverTime, 1); | |
| 194 } | |
| 195 | |
| 196 } // namespace ash | |
| OLD | NEW |