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

Side by Side Diff: chrome/browser/engagement/site_engagement_helper_unittest.cc

Issue 1578133002: Make all site engagement tests run on Android. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addressing nit Created 4 years, 11 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
1 // Copyright 2015 The Chromium Authors. All rights reserved. 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 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/engagement/site_engagement_helper.h" 5 #include "chrome/browser/engagement/site_engagement_helper.h"
6 6
7 #include <utility>
8
9 #include "base/command_line.h"
10 #include "base/test/histogram_tester.h" 7 #include "base/test/histogram_tester.h"
11 #include "base/timer/mock_timer.h" 8 #include "base/timer/mock_timer.h"
12 #include "base/values.h" 9 #include "base/values.h"
13 #include "chrome/browser/engagement/site_engagement_service.h" 10 #include "chrome/browser/engagement/site_engagement_service.h"
14 #include "chrome/browser/engagement/site_engagement_service_factory.h" 11 #include "chrome/browser/engagement/site_engagement_service_factory.h"
15 #include "chrome/browser/ui/browser.h"
16 #include "chrome/browser/ui/tabs/tab_strip_model.h"
17 #include "chrome/common/chrome_switches.h" 12 #include "chrome/common/chrome_switches.h"
18 #include "chrome/test/base/browser_with_test_window_test.h" 13 #include "chrome/test/base/chrome_render_view_host_test_harness.h"
14 #include "chrome/test/base/testing_profile.h"
15 #include "content/public/browser/navigation_entry.h"
19 #include "content/public/browser/page_navigator.h" 16 #include "content/public/browser/page_navigator.h"
17 #include "content/public/browser/web_contents.h"
18 #include "content/public/test/web_contents_tester.h"
20 #include "testing/gtest/include/gtest/gtest.h" 19 #include "testing/gtest/include/gtest/gtest.h"
21 20
22 class SiteEngagementHelperTest : public BrowserWithTestWindowTest { 21 class SiteEngagementHelperTest : public ChromeRenderViewHostTestHarness {
23 public: 22 public:
24 void SetUp() override {
25 BrowserWithTestWindowTest::SetUp();
26 base::CommandLine::ForCurrentProcess()->AppendSwitch(
27 switches::kEnableSiteEngagementService);
28 }
29
30 SiteEngagementHelper* GetHelper(content::WebContents* web_contents) { 23 SiteEngagementHelper* GetHelper(content::WebContents* web_contents) {
24 SiteEngagementHelper::CreateForWebContents(web_contents);
31 SiteEngagementHelper* helper = 25 SiteEngagementHelper* helper =
32 SiteEngagementHelper::FromWebContents(web_contents); 26 SiteEngagementHelper::FromWebContents(web_contents);
27
33 DCHECK(helper); 28 DCHECK(helper);
34 return helper; 29 return helper;
35 } 30 }
36 31
37 void TrackingStarted(SiteEngagementHelper* helper) { 32 void TrackingStarted(SiteEngagementHelper* helper) {
38 helper->input_tracker_.TrackingStarted(); 33 helper->input_tracker_.TrackingStarted();
39 helper->media_tracker_.TrackingStarted(); 34 helper->media_tracker_.TrackingStarted();
40 } 35 }
41 36
42 // Simulate a user interaction event and handle it. 37 // Simulate a user interaction event and handle it.
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
76 // Set a pause timer on the input tracker for test purposes. 71 // Set a pause timer on the input tracker for test purposes.
77 void SetMediaTrackerPauseTimer(SiteEngagementHelper* helper, 72 void SetMediaTrackerPauseTimer(SiteEngagementHelper* helper,
78 scoped_ptr<base::Timer> timer) { 73 scoped_ptr<base::Timer> timer) {
79 helper->media_tracker_.SetPauseTimerForTesting(std::move(timer)); 74 helper->media_tracker_.SetPauseTimerForTesting(std::move(timer));
80 } 75 }
81 76
82 bool IsTrackingInput(SiteEngagementHelper* helper) { 77 bool IsTrackingInput(SiteEngagementHelper* helper) {
83 return helper->input_tracker_.is_tracking(); 78 return helper->input_tracker_.is_tracking();
84 } 79 }
85 80
86 void NavigateWithDisposition(GURL& url, WindowOpenDisposition disposition) { 81 void Navigate(const GURL& url) {
87 content::NavigationController* controller = 82 controller().LoadURL(url, content::Referrer(), ui::PAGE_TRANSITION_TYPED,
88 &browser()->tab_strip_model()->GetActiveWebContents()->GetController(); 83 std::string());
89 browser()->OpenURL( 84 int pending_id = controller().GetPendingEntry()->GetUniqueID();
90 content::OpenURLParams(url, content::Referrer(), disposition, 85 content::WebContentsTester::For(web_contents())
91 ui::PAGE_TRANSITION_TYPED, false)); 86 ->TestDidNavigate(web_contents()->GetMainFrame(), 1, pending_id, true,
92 CommitPendingLoad(controller); 87 url, ui::PAGE_TRANSITION_TYPED);
93 } 88 }
94 89
95 void UserInputAccumulation(const blink::WebInputEvent::Type type) { 90 void UserInputAccumulation(const blink::WebInputEvent::Type type) {
96 AddTab(browser(), GURL("about:blank"));
97 GURL url1("https://www.google.com/"); 91 GURL url1("https://www.google.com/");
98 GURL url2("http://www.google.com/"); 92 GURL url2("http://www.google.com/");
99 content::WebContents* web_contents = 93 content::WebContents* contents = web_contents();
100 browser()->tab_strip_model()->GetActiveWebContents();
101 94
102 SiteEngagementHelper* helper = GetHelper(web_contents); 95 SiteEngagementHelper* helper = GetHelper(contents);
103 SiteEngagementService* service = 96 SiteEngagementService* service =
104 SiteEngagementServiceFactory::GetForProfile(browser()->profile()); 97 SiteEngagementServiceFactory::GetForProfile(profile());
105 DCHECK(service); 98 DCHECK(service);
106 99
107 // Check that navigation triggers engagement. 100 // Check that navigation triggers engagement.
108 NavigateWithDisposition(url1, CURRENT_TAB); 101 Navigate(url1);
109 TrackingStarted(helper); 102 TrackingStarted(helper);
110 103
111 EXPECT_DOUBLE_EQ(0.5, service->GetScore(url1)); 104 EXPECT_DOUBLE_EQ(0.5, service->GetScore(url1));
112 EXPECT_EQ(0, service->GetScore(url2)); 105 EXPECT_EQ(0, service->GetScore(url2));
113 106
114 // Simulate a user input trigger and ensure it is treated correctly. 107 // Simulate a user input trigger and ensure it is treated correctly.
115 HandleUserInputAndRestartTracking(helper, type); 108 HandleUserInputAndRestartTracking(helper, type);
116 109
117 EXPECT_DOUBLE_EQ(0.55, service->GetScore(url1)); 110 EXPECT_DOUBLE_EQ(0.55, service->GetScore(url1));
118 EXPECT_EQ(0, service->GetScore(url2)); 111 EXPECT_EQ(0, service->GetScore(url2));
119 112
120 // Simulate three inputs , and ensure they are treated correctly. 113 // Simulate three inputs , and ensure they are treated correctly.
121 HandleUserInputAndRestartTracking(helper, type); 114 HandleUserInputAndRestartTracking(helper, type);
122 HandleUserInputAndRestartTracking(helper, type); 115 HandleUserInputAndRestartTracking(helper, type);
123 HandleUserInputAndRestartTracking(helper, type); 116 HandleUserInputAndRestartTracking(helper, type);
124 117
125 EXPECT_DOUBLE_EQ(0.7, service->GetScore(url1)); 118 EXPECT_DOUBLE_EQ(0.7, service->GetScore(url1));
126 EXPECT_EQ(0, service->GetScore(url2)); 119 EXPECT_EQ(0, service->GetScore(url2));
127 120
128 // Simulate inputs for a different link. 121 // Simulate inputs for a different link.
129 NavigateWithDisposition(url2, CURRENT_TAB); 122 Navigate(url2);
130 TrackingStarted(helper); 123 TrackingStarted(helper);
131 124
132 EXPECT_DOUBLE_EQ(0.7, service->GetScore(url1)); 125 EXPECT_DOUBLE_EQ(0.7, service->GetScore(url1));
133 EXPECT_DOUBLE_EQ(0.5, service->GetScore(url2)); 126 EXPECT_DOUBLE_EQ(0.5, service->GetScore(url2));
134 EXPECT_DOUBLE_EQ(1.2, service->GetTotalEngagementPoints()); 127 EXPECT_DOUBLE_EQ(1.2, service->GetTotalEngagementPoints());
135 128
136 HandleUserInputAndRestartTracking(helper, type); 129 HandleUserInputAndRestartTracking(helper, type);
137 EXPECT_DOUBLE_EQ(0.7, service->GetScore(url1)); 130 EXPECT_DOUBLE_EQ(0.7, service->GetScore(url1));
138 EXPECT_DOUBLE_EQ(0.55, service->GetScore(url2)); 131 EXPECT_DOUBLE_EQ(0.55, service->GetScore(url2));
139 EXPECT_DOUBLE_EQ(1.25, service->GetTotalEngagementPoints()); 132 EXPECT_DOUBLE_EQ(1.25, service->GetTotalEngagementPoints());
(...skipping 10 matching lines...) Expand all
150 143
151 TEST_F(SiteEngagementHelperTest, MouseWheelEventEngagementAccumulation) { 144 TEST_F(SiteEngagementHelperTest, MouseWheelEventEngagementAccumulation) {
152 UserInputAccumulation(blink::WebInputEvent::MouseWheel); 145 UserInputAccumulation(blink::WebInputEvent::MouseWheel);
153 } 146 }
154 147
155 TEST_F(SiteEngagementHelperTest, GestureEngagementAccumulation) { 148 TEST_F(SiteEngagementHelperTest, GestureEngagementAccumulation) {
156 UserInputAccumulation(blink::WebInputEvent::GestureTapDown); 149 UserInputAccumulation(blink::WebInputEvent::GestureTapDown);
157 } 150 }
158 151
159 TEST_F(SiteEngagementHelperTest, MediaEngagementAccumulation) { 152 TEST_F(SiteEngagementHelperTest, MediaEngagementAccumulation) {
160 AddTab(browser(), GURL("about:blank"));
161 GURL url1("https://www.google.com/"); 153 GURL url1("https://www.google.com/");
162 GURL url2("http://www.google.com/"); 154 GURL url2("http://www.google.com/");
163 content::WebContents* web_contents = 155 content::WebContents* contents = web_contents();
164 browser()->tab_strip_model()->GetActiveWebContents();
165 156
166 SiteEngagementHelper* helper = GetHelper(web_contents); 157 SiteEngagementHelper* helper = GetHelper(contents);
167 SiteEngagementService* service = 158 SiteEngagementService* service =
168 SiteEngagementServiceFactory::GetForProfile(browser()->profile()); 159 SiteEngagementServiceFactory::GetForProfile(profile());
169 DCHECK(service); 160 DCHECK(service);
170 161
171 NavigateWithDisposition(url1, CURRENT_TAB); 162 Navigate(url1);
172 TrackingStarted(helper); 163 TrackingStarted(helper);
173 164
174 EXPECT_DOUBLE_EQ(0.5, service->GetScore(url1)); 165 EXPECT_DOUBLE_EQ(0.5, service->GetScore(url1));
175 EXPECT_EQ(0, service->GetScore(url2)); 166 EXPECT_EQ(0, service->GetScore(url2));
176 167
177 // Simulate a foreground media input and ensure it is treated correctly. 168 // Simulate a foreground media input and ensure it is treated correctly.
178 HandleMediaPlaying(helper, false); 169 HandleMediaPlaying(helper, false);
179 170
180 EXPECT_DOUBLE_EQ(0.52, service->GetScore(url1)); 171 EXPECT_DOUBLE_EQ(0.52, service->GetScore(url1));
181 EXPECT_EQ(0, service->GetScore(url2)); 172 EXPECT_EQ(0, service->GetScore(url2));
182 173
183 // Simulate continual media playing, and ensure it is treated correctly. 174 // Simulate continual media playing, and ensure it is treated correctly.
184 HandleMediaPlaying(helper, false); 175 HandleMediaPlaying(helper, false);
185 HandleMediaPlaying(helper, false); 176 HandleMediaPlaying(helper, false);
186 HandleMediaPlaying(helper, false); 177 HandleMediaPlaying(helper, false);
187 178
188 EXPECT_DOUBLE_EQ(0.58, service->GetScore(url1)); 179 EXPECT_DOUBLE_EQ(0.58, service->GetScore(url1));
189 EXPECT_EQ(0, service->GetScore(url2)); 180 EXPECT_EQ(0, service->GetScore(url2));
190 181
191 // Simulate backgrounding the media. 182 // Simulate backgrounding the media.
192 HandleMediaPlaying(helper, true); 183 HandleMediaPlaying(helper, true);
193 HandleMediaPlaying(helper, true); 184 HandleMediaPlaying(helper, true);
194 185
195 EXPECT_DOUBLE_EQ(0.60, service->GetScore(url1)); 186 EXPECT_DOUBLE_EQ(0.60, service->GetScore(url1));
196 EXPECT_EQ(0, service->GetScore(url2)); 187 EXPECT_EQ(0, service->GetScore(url2));
197 188
198 // Simulate inputs for a different link. 189 // Simulate inputs for a different link.
199 NavigateWithDisposition(url2, CURRENT_TAB); 190 Navigate(url2);
200 TrackingStarted(helper); 191 TrackingStarted(helper);
201 192
202 EXPECT_DOUBLE_EQ(0.6, service->GetScore(url1)); 193 EXPECT_DOUBLE_EQ(0.6, service->GetScore(url1));
203 EXPECT_DOUBLE_EQ(0.5, service->GetScore(url2)); 194 EXPECT_DOUBLE_EQ(0.5, service->GetScore(url2));
204 EXPECT_DOUBLE_EQ(1.1, service->GetTotalEngagementPoints()); 195 EXPECT_DOUBLE_EQ(1.1, service->GetTotalEngagementPoints());
205 196
206 HandleMediaPlaying(helper, false); 197 HandleMediaPlaying(helper, false);
207 HandleMediaPlaying(helper, false); 198 HandleMediaPlaying(helper, false);
208 EXPECT_DOUBLE_EQ(0.6, service->GetScore(url1)); 199 EXPECT_DOUBLE_EQ(0.6, service->GetScore(url1));
209 EXPECT_DOUBLE_EQ(0.54, service->GetScore(url2)); 200 EXPECT_DOUBLE_EQ(0.54, service->GetScore(url2));
210 EXPECT_DOUBLE_EQ(1.14, service->GetTotalEngagementPoints()); 201 EXPECT_DOUBLE_EQ(1.14, service->GetTotalEngagementPoints());
211 } 202 }
212 203
213 TEST_F(SiteEngagementHelperTest, MediaEngagement) { 204 TEST_F(SiteEngagementHelperTest, MediaEngagement) {
214 AddTab(browser(), GURL("about:blank"));
215 GURL url1("https://www.google.com/"); 205 GURL url1("https://www.google.com/");
216 GURL url2("http://www.google.com/"); 206 GURL url2("http://www.google.com/");
217 content::WebContents* web_contents = 207 content::WebContents* contents = web_contents();
218 browser()->tab_strip_model()->GetActiveWebContents();
219 208
220 base::MockTimer* media_tracker_timer = new base::MockTimer(true, false); 209 base::MockTimer* media_tracker_timer = new base::MockTimer(true, false);
221 SiteEngagementHelper* helper = GetHelper(web_contents); 210 SiteEngagementHelper* helper = GetHelper(contents);
222 SetMediaTrackerPauseTimer(helper, make_scoped_ptr(media_tracker_timer)); 211 SetMediaTrackerPauseTimer(helper, make_scoped_ptr(media_tracker_timer));
223 SiteEngagementService* service = 212 SiteEngagementService* service =
224 SiteEngagementServiceFactory::GetForProfile(browser()->profile()); 213 SiteEngagementServiceFactory::GetForProfile(profile());
225 DCHECK(service); 214 DCHECK(service);
226 215
227 NavigateWithDisposition(url1, CURRENT_TAB); 216 Navigate(url1);
228 MediaStartedPlaying(helper); 217 MediaStartedPlaying(helper);
229 218
230 EXPECT_DOUBLE_EQ(0.50, service->GetScore(url1)); 219 EXPECT_DOUBLE_EQ(0.50, service->GetScore(url1));
231 EXPECT_EQ(0, service->GetScore(url2)); 220 EXPECT_EQ(0, service->GetScore(url2));
232 EXPECT_TRUE(media_tracker_timer->IsRunning()); 221 EXPECT_TRUE(media_tracker_timer->IsRunning());
233 222
234 media_tracker_timer->Fire(); 223 media_tracker_timer->Fire();
235 EXPECT_DOUBLE_EQ(0.52, service->GetScore(url1)); 224 EXPECT_DOUBLE_EQ(0.52, service->GetScore(url1));
236 EXPECT_EQ(0, service->GetScore(url2)); 225 EXPECT_EQ(0, service->GetScore(url2));
237 EXPECT_TRUE(media_tracker_timer->IsRunning()); 226 EXPECT_TRUE(media_tracker_timer->IsRunning());
238 227
239 web_contents->WasHidden(); 228 contents->WasHidden();
240 media_tracker_timer->Fire(); 229 media_tracker_timer->Fire();
241 EXPECT_DOUBLE_EQ(0.53, service->GetScore(url1)); 230 EXPECT_DOUBLE_EQ(0.53, service->GetScore(url1));
242 EXPECT_EQ(0, service->GetScore(url2)); 231 EXPECT_EQ(0, service->GetScore(url2));
243 EXPECT_TRUE(media_tracker_timer->IsRunning()); 232 EXPECT_TRUE(media_tracker_timer->IsRunning());
244 233
245 MediaStoppedPlaying(helper); 234 MediaStoppedPlaying(helper);
246 media_tracker_timer->Fire(); 235 media_tracker_timer->Fire();
247 EXPECT_DOUBLE_EQ(0.53, service->GetScore(url1)); 236 EXPECT_DOUBLE_EQ(0.53, service->GetScore(url1));
248 EXPECT_EQ(0, service->GetScore(url2)); 237 EXPECT_EQ(0, service->GetScore(url2));
249 EXPECT_TRUE(media_tracker_timer->IsRunning()); 238 EXPECT_TRUE(media_tracker_timer->IsRunning());
250 239
251 web_contents->WasShown(); 240 contents->WasShown();
252 media_tracker_timer->Fire(); 241 media_tracker_timer->Fire();
253 EXPECT_DOUBLE_EQ(0.53, service->GetScore(url1)); 242 EXPECT_DOUBLE_EQ(0.53, service->GetScore(url1));
254 EXPECT_EQ(0, service->GetScore(url2)); 243 EXPECT_EQ(0, service->GetScore(url2));
255 EXPECT_TRUE(media_tracker_timer->IsRunning()); 244 EXPECT_TRUE(media_tracker_timer->IsRunning());
256 245
257 MediaStartedPlaying(helper); 246 MediaStartedPlaying(helper);
258 media_tracker_timer->Fire(); 247 media_tracker_timer->Fire();
259 EXPECT_DOUBLE_EQ(0.55, service->GetScore(url1)); 248 EXPECT_DOUBLE_EQ(0.55, service->GetScore(url1));
260 EXPECT_EQ(0, service->GetScore(url2)); 249 EXPECT_EQ(0, service->GetScore(url2));
261 EXPECT_TRUE(media_tracker_timer->IsRunning()); 250 EXPECT_TRUE(media_tracker_timer->IsRunning());
262 251
263 NavigateWithDisposition(url2, CURRENT_TAB); 252 Navigate(url2);
264 EXPECT_DOUBLE_EQ(0.55, service->GetScore(url1)); 253 EXPECT_DOUBLE_EQ(0.55, service->GetScore(url1));
265 EXPECT_EQ(0.5, service->GetScore(url2)); 254 EXPECT_EQ(0.5, service->GetScore(url2));
266 EXPECT_FALSE(media_tracker_timer->IsRunning()); 255 EXPECT_FALSE(media_tracker_timer->IsRunning());
267 256
268 MediaStartedPlaying(helper); 257 MediaStartedPlaying(helper);
269 media_tracker_timer->Fire(); 258 media_tracker_timer->Fire();
270 EXPECT_DOUBLE_EQ(0.55, service->GetScore(url1)); 259 EXPECT_DOUBLE_EQ(0.55, service->GetScore(url1));
271 EXPECT_EQ(0.52, service->GetScore(url2)); 260 EXPECT_EQ(0.52, service->GetScore(url2));
272 EXPECT_TRUE(media_tracker_timer->IsRunning()); 261 EXPECT_TRUE(media_tracker_timer->IsRunning());
273 262
274 web_contents->WasHidden(); 263 contents->WasHidden();
275 media_tracker_timer->Fire(); 264 media_tracker_timer->Fire();
276 EXPECT_DOUBLE_EQ(0.55, service->GetScore(url1)); 265 EXPECT_DOUBLE_EQ(0.55, service->GetScore(url1));
277 EXPECT_EQ(0.53, service->GetScore(url2)); 266 EXPECT_EQ(0.53, service->GetScore(url2));
278 EXPECT_TRUE(media_tracker_timer->IsRunning()); 267 EXPECT_TRUE(media_tracker_timer->IsRunning());
279 268
280 MediaStoppedPlaying(helper); 269 MediaStoppedPlaying(helper);
281 web_contents->WasShown(); 270 contents->WasShown();
282 media_tracker_timer->Fire(); 271 media_tracker_timer->Fire();
283 EXPECT_DOUBLE_EQ(0.55, service->GetScore(url1)); 272 EXPECT_DOUBLE_EQ(0.55, service->GetScore(url1));
284 EXPECT_EQ(0.53, service->GetScore(url2)); 273 EXPECT_EQ(0.53, service->GetScore(url2));
285 EXPECT_TRUE(media_tracker_timer->IsRunning()); 274 EXPECT_TRUE(media_tracker_timer->IsRunning());
286 } 275 }
287 276
288 TEST_F(SiteEngagementHelperTest, MixedInputEngagementAccumulation) { 277 TEST_F(SiteEngagementHelperTest, MixedInputEngagementAccumulation) {
289 AddTab(browser(), GURL("about:blank"));
290 GURL url1("https://www.google.com/"); 278 GURL url1("https://www.google.com/");
291 GURL url2("http://www.google.com/"); 279 GURL url2("http://www.google.com/");
292 content::WebContents* web_contents = 280 content::WebContents* contents = web_contents();
293 browser()->tab_strip_model()->GetActiveWebContents();
294 281
295 SiteEngagementHelper* helper = GetHelper(web_contents); 282 SiteEngagementHelper* helper = GetHelper(contents);
296 SiteEngagementService* service = 283 SiteEngagementService* service =
297 SiteEngagementServiceFactory::GetForProfile(browser()->profile()); 284 SiteEngagementServiceFactory::GetForProfile(profile());
298 DCHECK(service); 285 DCHECK(service);
299 286
300 base::HistogramTester histograms; 287 base::HistogramTester histograms;
301 288
302 // Histograms should start off empty. 289 // Histograms should start off empty.
303 histograms.ExpectTotalCount(SiteEngagementMetrics::kEngagementTypeHistogram, 290 histograms.ExpectTotalCount(SiteEngagementMetrics::kEngagementTypeHistogram,
304 0); 291 0);
305 292
306 NavigateWithDisposition(url1, CURRENT_TAB); 293 Navigate(url1);
307 TrackingStarted(helper); 294 TrackingStarted(helper);
308 295
309 EXPECT_DOUBLE_EQ(0.5, service->GetScore(url1)); 296 EXPECT_DOUBLE_EQ(0.5, service->GetScore(url1));
310 EXPECT_EQ(0, service->GetScore(url2)); 297 EXPECT_EQ(0, service->GetScore(url2));
311 histograms.ExpectTotalCount(SiteEngagementMetrics::kEngagementTypeHistogram, 298 histograms.ExpectTotalCount(SiteEngagementMetrics::kEngagementTypeHistogram,
312 1); 299 1);
313 histograms.ExpectBucketCount(SiteEngagementMetrics::kEngagementTypeHistogram, 300 histograms.ExpectBucketCount(SiteEngagementMetrics::kEngagementTypeHistogram,
314 SiteEngagementMetrics::ENGAGEMENT_NAVIGATION, 1); 301 SiteEngagementMetrics::ENGAGEMENT_NAVIGATION, 1);
315 302
316 HandleUserInputAndRestartTracking(helper, blink::WebInputEvent::RawKeyDown); 303 HandleUserInputAndRestartTracking(helper, blink::WebInputEvent::RawKeyDown);
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
353 histograms.ExpectBucketCount(SiteEngagementMetrics::kEngagementTypeHistogram, 340 histograms.ExpectBucketCount(SiteEngagementMetrics::kEngagementTypeHistogram,
354 SiteEngagementMetrics::ENGAGEMENT_TOUCH_GESTURE, 341 SiteEngagementMetrics::ENGAGEMENT_TOUCH_GESTURE,
355 3); 342 3);
356 histograms.ExpectBucketCount(SiteEngagementMetrics::kEngagementTypeHistogram, 343 histograms.ExpectBucketCount(SiteEngagementMetrics::kEngagementTypeHistogram,
357 SiteEngagementMetrics::ENGAGEMENT_MEDIA_VISIBLE, 344 SiteEngagementMetrics::ENGAGEMENT_MEDIA_VISIBLE,
358 1); 345 1);
359 histograms.ExpectBucketCount(SiteEngagementMetrics::kEngagementTypeHistogram, 346 histograms.ExpectBucketCount(SiteEngagementMetrics::kEngagementTypeHistogram,
360 SiteEngagementMetrics::ENGAGEMENT_MEDIA_HIDDEN, 347 SiteEngagementMetrics::ENGAGEMENT_MEDIA_HIDDEN,
361 1); 348 1);
362 349
363 NavigateWithDisposition(url2, CURRENT_TAB); 350 Navigate(url2);
364 TrackingStarted(helper); 351 TrackingStarted(helper);
365 352
366 EXPECT_DOUBLE_EQ(0.93, service->GetScore(url1)); 353 EXPECT_DOUBLE_EQ(0.93, service->GetScore(url1));
367 EXPECT_DOUBLE_EQ(0.5, service->GetScore(url2)); 354 EXPECT_DOUBLE_EQ(0.5, service->GetScore(url2));
368 EXPECT_DOUBLE_EQ(1.43, service->GetTotalEngagementPoints()); 355 EXPECT_DOUBLE_EQ(1.43, service->GetTotalEngagementPoints());
369 356
370 HandleUserInputAndRestartTracking(helper, 357 HandleUserInputAndRestartTracking(helper,
371 blink::WebInputEvent::GestureTapDown); 358 blink::WebInputEvent::GestureTapDown);
372 HandleUserInputAndRestartTracking(helper, blink::WebInputEvent::RawKeyDown); 359 HandleUserInputAndRestartTracking(helper, blink::WebInputEvent::RawKeyDown);
373 360
374 EXPECT_DOUBLE_EQ(0.93, service->GetScore(url1)); 361 EXPECT_DOUBLE_EQ(0.93, service->GetScore(url1));
375 EXPECT_DOUBLE_EQ(0.6, service->GetScore(url2)); 362 EXPECT_DOUBLE_EQ(0.6, service->GetScore(url2));
376 EXPECT_DOUBLE_EQ(1.53, service->GetTotalEngagementPoints()); 363 EXPECT_DOUBLE_EQ(1.53, service->GetTotalEngagementPoints());
377 histograms.ExpectTotalCount(SiteEngagementMetrics::kEngagementTypeHistogram, 364 histograms.ExpectTotalCount(SiteEngagementMetrics::kEngagementTypeHistogram,
378 14); 365 14);
379 histograms.ExpectBucketCount(SiteEngagementMetrics::kEngagementTypeHistogram, 366 histograms.ExpectBucketCount(SiteEngagementMetrics::kEngagementTypeHistogram,
380 SiteEngagementMetrics::ENGAGEMENT_NAVIGATION, 2); 367 SiteEngagementMetrics::ENGAGEMENT_NAVIGATION, 2);
381 histograms.ExpectBucketCount(SiteEngagementMetrics::kEngagementTypeHistogram, 368 histograms.ExpectBucketCount(SiteEngagementMetrics::kEngagementTypeHistogram,
382 SiteEngagementMetrics::ENGAGEMENT_KEYPRESS, 3); 369 SiteEngagementMetrics::ENGAGEMENT_KEYPRESS, 3);
383 histograms.ExpectBucketCount(SiteEngagementMetrics::kEngagementTypeHistogram, 370 histograms.ExpectBucketCount(SiteEngagementMetrics::kEngagementTypeHistogram,
384 SiteEngagementMetrics::ENGAGEMENT_TOUCH_GESTURE, 371 SiteEngagementMetrics::ENGAGEMENT_TOUCH_GESTURE,
385 4); 372 4);
386 } 373 }
387 374
388 TEST_F(SiteEngagementHelperTest, CheckTimerAndCallbacks) { 375 TEST_F(SiteEngagementHelperTest, CheckTimerAndCallbacks) {
389 AddTab(browser(), GURL("about:blank"));
390 GURL url1("https://www.google.com/"); 376 GURL url1("https://www.google.com/");
391 GURL url2("http://www.google.com/"); 377 GURL url2("http://www.google.com/");
392 content::WebContents* web_contents = 378 content::WebContents* contents = web_contents();
393 browser()->tab_strip_model()->GetActiveWebContents();
394 379
395 base::MockTimer* input_tracker_timer = new base::MockTimer(true, false); 380 base::MockTimer* input_tracker_timer = new base::MockTimer(true, false);
396 base::MockTimer* media_tracker_timer = new base::MockTimer(true, false); 381 base::MockTimer* media_tracker_timer = new base::MockTimer(true, false);
397 SiteEngagementHelper* helper = GetHelper(web_contents); 382 SiteEngagementHelper* helper = GetHelper(contents);
398 SetInputTrackerPauseTimer(helper, make_scoped_ptr(input_tracker_timer)); 383 SetInputTrackerPauseTimer(helper, make_scoped_ptr(input_tracker_timer));
399 SetMediaTrackerPauseTimer(helper, make_scoped_ptr(media_tracker_timer)); 384 SetMediaTrackerPauseTimer(helper, make_scoped_ptr(media_tracker_timer));
400 385
401 SiteEngagementService* service = 386 SiteEngagementService* service =
402 SiteEngagementServiceFactory::GetForProfile(browser()->profile()); 387 SiteEngagementServiceFactory::GetForProfile(profile());
403 DCHECK(service); 388 DCHECK(service);
404 389
405 NavigateWithDisposition(url1, CURRENT_TAB); 390 Navigate(url1);
406 EXPECT_DOUBLE_EQ(0.5, service->GetScore(url1)); 391 EXPECT_DOUBLE_EQ(0.5, service->GetScore(url1));
407 EXPECT_EQ(0, service->GetScore(url2)); 392 EXPECT_EQ(0, service->GetScore(url2));
408 393
409 // Input timer should be running for navigation delay, but media timer is 394 // Input timer should be running for navigation delay, but media timer is
410 // inactive. 395 // inactive.
411 EXPECT_TRUE(input_tracker_timer->IsRunning()); 396 EXPECT_TRUE(input_tracker_timer->IsRunning());
412 EXPECT_FALSE(IsTrackingInput(helper)); 397 EXPECT_FALSE(IsTrackingInput(helper));
413 EXPECT_FALSE(media_tracker_timer->IsRunning()); 398 EXPECT_FALSE(media_tracker_timer->IsRunning());
414 399
415 // Media timer starts once media is detected as playing. 400 // Media timer starts once media is detected as playing.
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
452 input_tracker_timer->Fire(); 437 input_tracker_timer->Fire();
453 EXPECT_FALSE(input_tracker_timer->IsRunning()); 438 EXPECT_FALSE(input_tracker_timer->IsRunning());
454 EXPECT_TRUE(IsTrackingInput(helper)); 439 EXPECT_TRUE(IsTrackingInput(helper));
455 440
456 media_tracker_timer->Fire(); 441 media_tracker_timer->Fire();
457 EXPECT_TRUE(media_tracker_timer->IsRunning()); 442 EXPECT_TRUE(media_tracker_timer->IsRunning());
458 EXPECT_DOUBLE_EQ(0.64, service->GetScore(url1)); 443 EXPECT_DOUBLE_EQ(0.64, service->GetScore(url1));
459 EXPECT_EQ(0, service->GetScore(url2)); 444 EXPECT_EQ(0, service->GetScore(url2));
460 445
461 // Timer should be running for navigation delay. Media is disabled again. 446 // Timer should be running for navigation delay. Media is disabled again.
462 NavigateWithDisposition(url2, CURRENT_TAB); 447 Navigate(url2);
463 EXPECT_TRUE(input_tracker_timer->IsRunning()); 448 EXPECT_TRUE(input_tracker_timer->IsRunning());
464 EXPECT_FALSE(IsTrackingInput(helper)); 449 EXPECT_FALSE(IsTrackingInput(helper));
465 EXPECT_FALSE(media_tracker_timer->IsRunning()); 450 EXPECT_FALSE(media_tracker_timer->IsRunning());
466 451
467 EXPECT_DOUBLE_EQ(0.64, service->GetScore(url1)); 452 EXPECT_DOUBLE_EQ(0.64, service->GetScore(url1));
468 EXPECT_DOUBLE_EQ(0.5, service->GetScore(url2)); 453 EXPECT_DOUBLE_EQ(0.5, service->GetScore(url2));
469 EXPECT_DOUBLE_EQ(1.14, service->GetTotalEngagementPoints()); 454 EXPECT_DOUBLE_EQ(1.14, service->GetTotalEngagementPoints());
470 455
471 input_tracker_timer->Fire(); 456 input_tracker_timer->Fire();
472 EXPECT_FALSE(input_tracker_timer->IsRunning()); 457 EXPECT_FALSE(input_tracker_timer->IsRunning());
(...skipping 16 matching lines...) Expand all
489 media_tracker_timer->Fire(); 474 media_tracker_timer->Fire();
490 EXPECT_DOUBLE_EQ(0.64, service->GetScore(url1)); 475 EXPECT_DOUBLE_EQ(0.64, service->GetScore(url1));
491 EXPECT_DOUBLE_EQ(0.57, service->GetScore(url2)); 476 EXPECT_DOUBLE_EQ(0.57, service->GetScore(url2));
492 EXPECT_DOUBLE_EQ(1.21, service->GetTotalEngagementPoints()); 477 EXPECT_DOUBLE_EQ(1.21, service->GetTotalEngagementPoints());
493 } 478 }
494 479
495 // Ensure that navigation and tab activation/hiding does not trigger input 480 // Ensure that navigation and tab activation/hiding does not trigger input
496 // tracking until after a delay. We must manually call WasShown/WasHidden as 481 // tracking until after a delay. We must manually call WasShown/WasHidden as
497 // they are not triggered automatically in this test environment. 482 // they are not triggered automatically in this test environment.
498 TEST_F(SiteEngagementHelperTest, ShowAndHide) { 483 TEST_F(SiteEngagementHelperTest, ShowAndHide) {
499 AddTab(browser(), GURL("about:blank"));
500 GURL url1("https://www.google.com/"); 484 GURL url1("https://www.google.com/");
501 GURL url2("http://www.google.com/"); 485 GURL url2("http://www.google.com/");
502 content::WebContents* web_contents = 486 content::WebContents* contents = web_contents();
503 browser()->tab_strip_model()->GetActiveWebContents();
504 487
505 base::MockTimer* input_tracker_timer = new base::MockTimer(true, false); 488 base::MockTimer* input_tracker_timer = new base::MockTimer(true, false);
506 base::MockTimer* media_tracker_timer = new base::MockTimer(true, false); 489 base::MockTimer* media_tracker_timer = new base::MockTimer(true, false);
507 SiteEngagementHelper* helper = GetHelper(web_contents); 490 SiteEngagementHelper* helper = GetHelper(contents);
508 SetInputTrackerPauseTimer(helper, make_scoped_ptr(input_tracker_timer)); 491 SetInputTrackerPauseTimer(helper, make_scoped_ptr(input_tracker_timer));
509 SetMediaTrackerPauseTimer(helper, make_scoped_ptr(media_tracker_timer)); 492 SetMediaTrackerPauseTimer(helper, make_scoped_ptr(media_tracker_timer));
510 493
511 NavigateWithDisposition(url1, CURRENT_TAB); 494 Navigate(url1);
512 input_tracker_timer->Fire(); 495 input_tracker_timer->Fire();
513 496
514 // Hiding the tab should stop input tracking. Media tracking remains inactive. 497 // Hiding the tab should stop input tracking. Media tracking remains inactive.
515 web_contents->WasHidden(); 498 contents->WasHidden();
516 EXPECT_FALSE(input_tracker_timer->IsRunning()); 499 EXPECT_FALSE(input_tracker_timer->IsRunning());
517 EXPECT_FALSE(media_tracker_timer->IsRunning()); 500 EXPECT_FALSE(media_tracker_timer->IsRunning());
518 EXPECT_FALSE(IsTrackingInput(helper)); 501 EXPECT_FALSE(IsTrackingInput(helper));
519 502
520 // Showing the tab should start tracking again after another delay. Media 503 // Showing the tab should start tracking again after another delay. Media
521 // tracking remains inactive. 504 // tracking remains inactive.
522 web_contents->WasShown(); 505 contents->WasShown();
523 EXPECT_TRUE(input_tracker_timer->IsRunning()); 506 EXPECT_TRUE(input_tracker_timer->IsRunning());
524 EXPECT_FALSE(media_tracker_timer->IsRunning()); 507 EXPECT_FALSE(media_tracker_timer->IsRunning());
525 EXPECT_FALSE(IsTrackingInput(helper)); 508 EXPECT_FALSE(IsTrackingInput(helper));
526 509
527 // Start media tracking. 510 // Start media tracking.
528 MediaStartedPlaying(helper); 511 MediaStartedPlaying(helper);
529 EXPECT_TRUE(media_tracker_timer->IsRunning()); 512 EXPECT_TRUE(media_tracker_timer->IsRunning());
530 513
531 // Hiding the tab should stop input tracking, but not media tracking. 514 // Hiding the tab should stop input tracking, but not media tracking.
532 web_contents->WasHidden(); 515 contents->WasHidden();
533 EXPECT_FALSE(input_tracker_timer->IsRunning()); 516 EXPECT_FALSE(input_tracker_timer->IsRunning());
534 EXPECT_TRUE(media_tracker_timer->IsRunning()); 517 EXPECT_TRUE(media_tracker_timer->IsRunning());
535 EXPECT_FALSE(IsTrackingInput(helper)); 518 EXPECT_FALSE(IsTrackingInput(helper));
536 519
537 // Showing the tab should start tracking again after another delay. Media 520 // Showing the tab should start tracking again after another delay. Media
538 // tracking continues. 521 // tracking continues.
539 web_contents->WasShown(); 522 contents->WasShown();
540 EXPECT_TRUE(input_tracker_timer->IsRunning()); 523 EXPECT_TRUE(input_tracker_timer->IsRunning());
541 EXPECT_TRUE(media_tracker_timer->IsRunning()); 524 EXPECT_TRUE(media_tracker_timer->IsRunning());
542 EXPECT_FALSE(IsTrackingInput(helper)); 525 EXPECT_FALSE(IsTrackingInput(helper));
543 526
544 input_tracker_timer->Fire(); 527 input_tracker_timer->Fire();
545 media_tracker_timer->Fire(); 528 media_tracker_timer->Fire();
546 EXPECT_FALSE(input_tracker_timer->IsRunning()); 529 EXPECT_FALSE(input_tracker_timer->IsRunning());
547 EXPECT_TRUE(media_tracker_timer->IsRunning()); 530 EXPECT_TRUE(media_tracker_timer->IsRunning());
548 EXPECT_TRUE(IsTrackingInput(helper)); 531 EXPECT_TRUE(IsTrackingInput(helper));
549 } 532 }
550 533
551 // Ensure tracking behavior is correct for multiple navigations in a single tab. 534 // Ensure tracking behavior is correct for multiple navigations in a single tab.
552 TEST_F(SiteEngagementHelperTest, SingleTabNavigation) { 535 TEST_F(SiteEngagementHelperTest, SingleTabNavigation) {
553 AddTab(browser(), GURL("about:blank"));
554 GURL url1("https://www.google.com/"); 536 GURL url1("https://www.google.com/");
555 GURL url2("https://www.example.com/"); 537 GURL url2("https://www.example.com/");
556 content::WebContents* web_contents = 538 content::WebContents* contents = web_contents();
557 browser()->tab_strip_model()->GetActiveWebContents();
558 539
559 base::MockTimer* input_tracker_timer = new base::MockTimer(true, false); 540 base::MockTimer* input_tracker_timer = new base::MockTimer(true, false);
560 SiteEngagementHelper* helper = GetHelper(web_contents); 541 SiteEngagementHelper* helper = GetHelper(contents);
561 SetInputTrackerPauseTimer(helper, make_scoped_ptr(input_tracker_timer)); 542 SetInputTrackerPauseTimer(helper, make_scoped_ptr(input_tracker_timer));
562 543
563 // Navigation should start the initial delay timer. 544 // Navigation should start the initial delay timer.
564 NavigateWithDisposition(url1, CURRENT_TAB); 545 Navigate(url1);
565 EXPECT_TRUE(input_tracker_timer->IsRunning()); 546 EXPECT_TRUE(input_tracker_timer->IsRunning());
566 EXPECT_FALSE(IsTrackingInput(helper)); 547 EXPECT_FALSE(IsTrackingInput(helper));
567 548
568 // Navigating before the timer fires should simply reset the timer. 549 // Navigating before the timer fires should simply reset the timer.
569 NavigateWithDisposition(url2, CURRENT_TAB); 550 Navigate(url2);
570 EXPECT_TRUE(input_tracker_timer->IsRunning()); 551 EXPECT_TRUE(input_tracker_timer->IsRunning());
571 EXPECT_FALSE(IsTrackingInput(helper)); 552 EXPECT_FALSE(IsTrackingInput(helper));
572 553
573 // When the timer fires, callbacks are added. 554 // When the timer fires, callbacks are added.
574 input_tracker_timer->Fire(); 555 input_tracker_timer->Fire();
575 EXPECT_FALSE(input_tracker_timer->IsRunning()); 556 EXPECT_FALSE(input_tracker_timer->IsRunning());
576 EXPECT_TRUE(IsTrackingInput(helper)); 557 EXPECT_TRUE(IsTrackingInput(helper));
577 558
578 // Navigation should start the initial delay timer again. 559 // Navigation should start the initial delay timer again.
579 NavigateWithDisposition(url1, CURRENT_TAB); 560 Navigate(url1);
580 EXPECT_TRUE(input_tracker_timer->IsRunning()); 561 EXPECT_TRUE(input_tracker_timer->IsRunning());
581 EXPECT_FALSE(IsTrackingInput(helper)); 562 EXPECT_FALSE(IsTrackingInput(helper));
582 } 563 }
OLDNEW
« no previous file with comments | « chrome/browser/engagement/site_engagement_helper.cc ('k') | chrome/browser/engagement/site_engagement_service_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698