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

Side by Side Diff: chrome/browser/metrics/chrome_browser_main_extra_parts_metrics_unittest.cc

Issue 1182303005: Fixed the Touchscreen.TouchEventsEnabled histogram to record the correct values on X11 and Ozone ba… (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixed compile time issues across the failing platform builds. Created 5 years, 5 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
(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 "chrome/browser/metrics/chrome_browser_main_extra_parts_metrics.h"
6
7 #include "base/macros.h"
8 #include "base/memory/scoped_ptr.h"
9 #include "base/message_loop/message_loop.h"
10 #include "base/test/histogram_tester.h"
11 #include "testing/gtest/include/gtest/gtest.h"
12 #include "ui/events/devices/device_data_manager.h"
13 #include "ui/events/test/device_data_manager_test_api.h"
14 #include "ui/gfx/geometry/size.h"
15 #include "ui/gfx/screen.h"
16
17 namespace {
18
19 const char kTouchEventsEnabledHistogramName[] =
20 "Touchscreen.TouchEventsEnabled";
21
22 // A simple test double that allows gfx::DisplayObserver to be added and
23 // removed.
24 class TestScreen : public gfx::Screen {
Alexei Svitkine (slow) 2015/07/07 22:00:58 Seems like we have a number of these TestScreen su
bruthig 2015/07/08 20:29:52 I've created a simple gfx::test::TestScreen and up
25 public:
26 TestScreen() {}
27 ~TestScreen() override {}
28
29 // Overridden from gfx::Screen:
30 gfx::Point GetCursorScreenPoint() override {
31 NOTREACHED()
32 << "Function not implemented!!! 'TestScreen::GetCursorScreenPoint()'";
Alexei Svitkine (slow) 2015/07/07 22:00:58 Nit: No need for these messages. I think when NOTR
bruthig 2015/07/08 20:29:52 Done.
33 return gfx::Point();
34 }
35
36 gfx::NativeWindow GetWindowUnderCursor() override {
37 NOTREACHED()
38 << "Function not implemented!!! 'TestScreen::GetWindowUnderCursor()'";
39 return NULL;
Ilya Sherman 2015/07/07 22:06:22 nit: nullptr (pretty much everywhere where you're
bruthig 2015/07/08 20:29:52 Done.
40 }
41
42 gfx::NativeWindow GetWindowAtScreenPoint(const gfx::Point& point) override {
43 NOTREACHED() << "Function not implemented!!! "
44 "'TestScreen::GetWindowAtScreenPoint(...)'";
45 return NULL;
46 }
47
48 int GetNumDisplays() const override { return 0; }
49
50 std::vector<gfx::Display> GetAllDisplays() const override {
51 NOTREACHED()
52 << "Function not implemented!!! 'TestScreen::GetAllDisplays()'";
53 return std::vector<gfx::Display>();
54 }
55
56 gfx::Display GetDisplayNearestWindow(gfx::NativeView view) const override {
57 NOTREACHED() << "Function not implemented!!! "
58 "'TestScreen::GetDisplayNearestWindow(...)'";
59 return gfx::Display();
60 }
61
62 gfx::Display GetDisplayNearestPoint(const gfx::Point& point) const override {
63 NOTREACHED() << "Function not implemented!!! "
64 "'TestScreen::GetDisplayNearestPoint(...)'";
65 return gfx::Display();
66 }
67
68 gfx::Display GetDisplayMatching(const gfx::Rect& match_rect) const override {
69 NOTREACHED()
70 << "Function not implemented!!! 'TestScreen::GetDisplayMatching(...)'";
71 return gfx::Display();
72 }
73
74 gfx::Display GetPrimaryDisplay() const override {
75 NOTREACHED()
76 << "Function not implemented!!! 'TestScreen::GetPrimaryDisplay()'";
77 return gfx::Display();
78 }
79
80 void AddObserver(gfx::DisplayObserver* observer) override {}
81
82 void RemoveObserver(gfx::DisplayObserver* observer) override {}
83
84 void AddDisplay(const gfx::Rect& bounds, const gfx::Rect& work_area) {
85 NOTREACHED() << "Function not implemented!!! 'TestScreen::AddDisplay(...)'";
86 }
87
88 private:
89 DISALLOW_COPY_AND_ASSIGN(TestScreen);
90 };
91
92 } // namespace
93
94 class ChromeBrowserMainExtraPartsMetricsTest : public testing::Test {
95 public:
96 ChromeBrowserMainExtraPartsMetricsTest();
97 ~ChromeBrowserMainExtraPartsMetricsTest() override;
98
99 protected:
100 #if defined(USE_OZONE) || defined(USE_X11)
101 // A newly constructed DeviceDataManger. Accessible via
102 // DeviceDataManager::GetInstance().
103 scoped_ptr<ui::DeviceDataManager> device_data_manager_;
104
105 // Test API wrapping |device_data_manager_|.
106 scoped_ptr<ui::test::DeviceDataManagerTestAPI> device_data_manager_test_api_;
107 #endif // defined(USE_OZONE) || defined(USE_X11)
Alexei Svitkine (slow) 2015/07/07 22:00:58 This is a lot of extra complexity being put into t
bruthig 2015/07/08 20:29:52 Done.
108
109 private:
110 // Required by a ChromeBrowserMainExtraPartsMetrics test target.
111 base::MessageLoop message_loop_;
112
113 // Dummy screen required by a ChromeBrowserMainExtraPartsMetrics test target.
114 scoped_ptr<::TestScreen> test_screen_;
115
116 DISALLOW_COPY_AND_ASSIGN(ChromeBrowserMainExtraPartsMetricsTest);
117 };
118
119 ChromeBrowserMainExtraPartsMetricsTest::ChromeBrowserMainExtraPartsMetricsTest()
120 :
121 #if defined(USE_OZONE) || defined(USE_X11)
122 device_data_manager_(
123 ui::test::DeviceDataManagerTestAPI::CreateDeviceDataManager()),
124 device_data_manager_test_api_(
125 new ui::test::DeviceDataManagerTestAPI(device_data_manager_.get())),
126 #endif // defined(USE_OZONE) || defined(USE_X11)
127 test_screen_(new ::TestScreen) {
128 gfx::Screen::SetScreenInstance(gfx::SCREEN_TYPE_NATIVE, test_screen_.get());
129
130 #if defined(USE_OZONE) || defined(USE_X11)
131 ui::test::DeviceDataManagerTestAPI::SetDeviceDataManagerInstance(nullptr);
Alexei Svitkine (slow) 2015/07/07 22:00:58 Can this be handled in the DeviceDataManagerTestAP
bruthig 2015/07/08 20:29:52 Done.
132 ui::test::DeviceDataManagerTestAPI::SetDeviceDataManagerInstance(
133 device_data_manager_.get());
134 #endif // defined(USE_OZONE) || defined(USE_X11)
135 }
136
137 ChromeBrowserMainExtraPartsMetricsTest::
138 ~ChromeBrowserMainExtraPartsMetricsTest() {
139 gfx::Screen::SetScreenInstance(gfx::SCREEN_TYPE_NATIVE, nullptr);
140
141 #if defined(USE_OZONE) || defined(USE_X11)
142 ui::test::DeviceDataManagerTestAPI::SetDeviceDataManagerInstance(nullptr);
143 #endif // defined(USE_OZONE) || defined(USE_X11)
144 }
145
146 // Verify a TouchEventsEnabled value isn't recorded during construction.
147 TEST_F(ChromeBrowserMainExtraPartsMetricsTest,
148 VerifyTouchEventsEnabledIsNotRecordedAfterConstruction) {
149 base::HistogramTester histogram_tester;
150 ChromeBrowserMainExtraPartsMetrics test_target;
151 histogram_tester.ExpectTotalCount(kTouchEventsEnabledHistogramName, 0);
152 }
153
154 #if defined(USE_OZONE) || defined(USE_X11)
155
156 // Verify a TouchEventsEnabled value isn't recorded during PostBrowserStart if
157 // the device scan hasn't completed yet.
158 TEST_F(ChromeBrowserMainExtraPartsMetricsTest,
159 VerifyTouchEventsEnabledIsNotRecordedAfterPostBrowserStart) {
160 base::HistogramTester histogram_tester;
161
162 ChromeBrowserMainExtraPartsMetrics test_target;
163
164 test_target.PostBrowserStart();
165 histogram_tester.ExpectTotalCount(kTouchEventsEnabledHistogramName, 0);
166 }
167
168 // Verify a TouchEventsEnabled value is recorded during PostBrowserStart if the
169 // device scan has already completed.
170 TEST_F(ChromeBrowserMainExtraPartsMetricsTest,
171 VerifyTouchEventsEnabledIsRecordedAfterPostBrowserStart) {
172 base::HistogramTester histogram_tester;
173
174 device_data_manager_test_api_->OnDeviceListsComplete();
175
176 ChromeBrowserMainExtraPartsMetrics test_target;
177
178 test_target.PostBrowserStart();
179 histogram_tester.ExpectTotalCount(kTouchEventsEnabledHistogramName, 1);
180 }
181
182 // Verify a TouchEventsEnabled value is recorded when an asynchronous device
183 // scan completes.
184 TEST_F(ChromeBrowserMainExtraPartsMetricsTest,
185 VerifyTouchEventsEnabledIsRecordedWhenDeviceListsComplete) {
186 base::HistogramTester histogram_tester;
187 ChromeBrowserMainExtraPartsMetrics test_target;
188
189 test_target.PostBrowserStart();
190 device_data_manager_test_api_->NotifyObserversDeviceListsComplete();
191 histogram_tester.ExpectTotalCount(kTouchEventsEnabledHistogramName, 1);
192 }
193
194 // Verify a TouchEventsEnabled value is only recorded once if multiple
195 // asynchronous device scans happen.
196 TEST_F(ChromeBrowserMainExtraPartsMetricsTest,
197 VerifyTouchEventsEnabledIsOnlyRecordedOnce) {
198 base::HistogramTester histogram_tester;
199 ChromeBrowserMainExtraPartsMetrics test_target;
200
201 test_target.PostBrowserStart();
202 device_data_manager_test_api_->NotifyObserversDeviceListsComplete();
203 device_data_manager_test_api_->NotifyObserversDeviceListsComplete();
204 histogram_tester.ExpectTotalCount(kTouchEventsEnabledHistogramName, 1);
205 }
206
207 #else
208
209 // Verify a TouchEventsEnabled value is recorded during PostBrowserStart.
210 TEST_F(ChromeBrowserMainExtraPartsMetricsTest,
211 VerifyTouchEventsEnabledIsRecordedAfterPostBrowserStart) {
212 base::HistogramTester histogram_tester;
213 ChromeBrowserMainExtraPartsMetrics test_target;
214
215 test_target.PostBrowserStart();
216 histogram_tester.ExpectTotalCount(kTouchEventsEnabledHistogramName, 1);
217 }
218
219 #endif // defined(USE_OZONE) || defined(USE_X11)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698