OLD | NEW |
---|---|
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 "base/command_line.h" | 5 #include "base/command_line.h" |
6 #include "base/timer/mock_timer.h" | 6 #include "base/timer/mock_timer.h" |
7 #include "base/values.h" | 7 #include "base/values.h" |
8 #include "chrome/browser/engagement/site_engagement_helper.h" | 8 #include "chrome/browser/engagement/site_engagement_helper.h" |
9 #include "chrome/browser/engagement/site_engagement_service.h" | 9 #include "chrome/browser/engagement/site_engagement_service.h" |
10 #include "chrome/browser/engagement/site_engagement_service_factory.h" | 10 #include "chrome/browser/engagement/site_engagement_service_factory.h" |
(...skipping 30 matching lines...) Expand all Loading... | |
41 // Simulate a mouse event and handle it. | 41 // Simulate a mouse event and handle it. |
42 void HandleMouseEvent(SiteEngagementHelper* helper, | 42 void HandleMouseEvent(SiteEngagementHelper* helper, |
43 blink::WebMouseEvent::Button button, | 43 blink::WebMouseEvent::Button button, |
44 blink::WebInputEvent::Type type) { | 44 blink::WebInputEvent::Type type) { |
45 blink::WebMouseEvent event; | 45 blink::WebMouseEvent event; |
46 event.button = button; | 46 event.button = button; |
47 event.type = type; | 47 event.type = type; |
48 helper->input_tracker_.HandleMouseEvent(event); | 48 helper->input_tracker_.HandleMouseEvent(event); |
49 } | 49 } |
50 | 50 |
51 // Set a timer object for test purposes. | 51 // Set a pause timer on the input tracker for test purposes. |
52 void SetHelperTimer(SiteEngagementHelper* helper, | 52 void SetInputTrackerPauseTimer(SiteEngagementHelper* helper, |
53 scoped_ptr<base::Timer> timer) { | 53 scoped_ptr<base::Timer> timer) { |
54 helper->input_tracker_.SetTimerForTesting(timer.Pass()); | 54 helper->input_tracker_.SetPauseTimerForTesting(timer.Pass()); |
55 } | 55 } |
56 | 56 |
57 bool CallbacksAdded(SiteEngagementHelper* helper) { | 57 // Set a navigation timer on the helper for test purposes. |
58 return helper->input_tracker_.callbacks_added(); | 58 void SetNavigationPauseTimer(SiteEngagementHelper* helper, |
59 scoped_ptr<base::Timer> timer) { | |
60 helper->SetNavigationTimerForTesting(timer.Pass()); | |
61 } | |
62 | |
63 bool IsTracking(SiteEngagementHelper* helper) { | |
64 return helper->input_tracker_.IsTracking(); | |
59 } | 65 } |
60 }; | 66 }; |
61 | 67 |
62 IN_PROC_BROWSER_TEST_F(SiteEngagementServiceBrowserTest, | 68 IN_PROC_BROWSER_TEST_F(SiteEngagementServiceBrowserTest, |
63 KeyPressEngagementAccumulation) { | 69 KeyPressEngagementAccumulation) { |
64 GURL url1("https://www.google.com/"); | 70 GURL url1("https://www.google.com/"); |
65 GURL url2("http://www.google.com/"); | 71 GURL url2("http://www.google.com/"); |
66 content::WebContents* web_contents = | 72 content::WebContents* web_contents = |
67 browser()->tab_strip_model()->GetActiveWebContents(); | 73 browser()->tab_strip_model()->GetActiveWebContents(); |
68 | 74 |
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
199 EXPECT_DOUBLE_EQ(1.45, service->GetTotalEngagementPoints()); | 205 EXPECT_DOUBLE_EQ(1.45, service->GetTotalEngagementPoints()); |
200 } | 206 } |
201 | 207 |
202 IN_PROC_BROWSER_TEST_F(SiteEngagementServiceBrowserTest, | 208 IN_PROC_BROWSER_TEST_F(SiteEngagementServiceBrowserTest, |
203 CheckTimerAndCallbacks) { | 209 CheckTimerAndCallbacks) { |
204 GURL url1("https://www.google.com/"); | 210 GURL url1("https://www.google.com/"); |
205 GURL url2("http://www.google.com/"); | 211 GURL url2("http://www.google.com/"); |
206 content::WebContents* web_contents = | 212 content::WebContents* web_contents = |
207 browser()->tab_strip_model()->GetActiveWebContents(); | 213 browser()->tab_strip_model()->GetActiveWebContents(); |
208 | 214 |
209 scoped_ptr<base::MockTimer> mock_timer(new base::MockTimer(true, false)); | 215 base::MockTimer* input_tracker_timer = new base::MockTimer(true, false); |
210 base::MockTimer* timer = mock_timer.get(); | 216 base::MockTimer* navigation_timer = new base::MockTimer(true, false); |
211 scoped_ptr<SiteEngagementHelper> helper(CreateHelper(web_contents)); | 217 scoped_ptr<SiteEngagementHelper> helper(CreateHelper(web_contents)); |
212 SetHelperTimer(helper.get(), mock_timer.Pass()); | 218 SetInputTrackerPauseTimer(helper.get(), make_scoped_ptr(input_tracker_timer)); |
219 SetNavigationPauseTimer(helper.get(), make_scoped_ptr(navigation_timer)); | |
213 | 220 |
214 SiteEngagementService* service = | 221 SiteEngagementService* service = |
215 SiteEngagementServiceFactory::GetForProfile(browser()->profile()); | 222 SiteEngagementServiceFactory::GetForProfile(browser()->profile()); |
216 DCHECK(service); | 223 DCHECK(service); |
217 | 224 |
218 ui_test_utils::NavigateToURL(browser(), url1); | 225 ui_test_utils::NavigateToURL(browser(), url1); |
226 navigation_timer->Fire(); | |
219 EXPECT_DOUBLE_EQ(0.5, service->GetScore(url1)); | 227 EXPECT_DOUBLE_EQ(0.5, service->GetScore(url1)); |
220 EXPECT_EQ(0, service->GetScore(url2)); | 228 EXPECT_EQ(0, service->GetScore(url2)); |
221 | 229 |
222 // Timer should not be running after navigation. It should start after input. | 230 // Timer should not be running after navigation. It should start after input. |
223 EXPECT_FALSE(timer->IsRunning()); | 231 EXPECT_FALSE(input_tracker_timer->IsRunning()); |
224 EXPECT_TRUE(CallbacksAdded(helper.get())); | 232 EXPECT_TRUE(IsTracking(helper.get())); |
225 HandleKeyPress(helper.get(), ui::VKEY_RETURN); | 233 HandleKeyPress(helper.get(), ui::VKEY_RETURN); |
226 EXPECT_TRUE(timer->IsRunning()); | 234 EXPECT_TRUE(input_tracker_timer->IsRunning()); |
227 EXPECT_FALSE(CallbacksAdded(helper.get())); | 235 EXPECT_FALSE(IsTracking(helper.get())); |
228 | 236 |
229 EXPECT_DOUBLE_EQ(0.55, service->GetScore(url1)); | 237 EXPECT_DOUBLE_EQ(0.55, service->GetScore(url1)); |
230 EXPECT_EQ(0, service->GetScore(url2)); | 238 EXPECT_EQ(0, service->GetScore(url2)); |
231 timer->Fire(); | 239 input_tracker_timer->Fire(); |
232 | 240 |
233 EXPECT_FALSE(timer->IsRunning()); | 241 EXPECT_FALSE(input_tracker_timer->IsRunning()); |
234 EXPECT_TRUE(CallbacksAdded(helper.get())); | 242 EXPECT_TRUE(IsTracking(helper.get())); |
235 HandleMouseEvent(helper.get(), blink::WebMouseEvent::ButtonNone, | 243 HandleMouseEvent(helper.get(), blink::WebMouseEvent::ButtonNone, |
236 blink::WebInputEvent::MouseWheel); | 244 blink::WebInputEvent::MouseWheel); |
237 EXPECT_TRUE(timer->IsRunning()); | 245 EXPECT_TRUE(input_tracker_timer->IsRunning()); |
238 EXPECT_FALSE(CallbacksAdded(helper.get())); | 246 EXPECT_FALSE(IsTracking(helper.get())); |
239 | 247 |
240 EXPECT_DOUBLE_EQ(0.6, service->GetScore(url1)); | 248 EXPECT_DOUBLE_EQ(0.6, service->GetScore(url1)); |
241 EXPECT_EQ(0, service->GetScore(url2)); | 249 EXPECT_EQ(0, service->GetScore(url2)); |
242 timer->Fire(); | 250 input_tracker_timer->Fire(); |
243 | 251 |
244 EXPECT_FALSE(timer->IsRunning()); | 252 EXPECT_FALSE(input_tracker_timer->IsRunning()); |
245 EXPECT_TRUE(CallbacksAdded(helper.get())); | 253 EXPECT_TRUE(IsTracking(helper.get())); |
246 ui_test_utils::NavigateToURL(browser(), url2); | 254 ui_test_utils::NavigateToURL(browser(), url2); |
247 EXPECT_FALSE(timer->IsRunning()); | 255 navigation_timer->Fire(); |
248 EXPECT_TRUE(CallbacksAdded(helper.get())); | 256 |
257 EXPECT_FALSE(input_tracker_timer->IsRunning()); | |
258 EXPECT_TRUE(IsTracking(helper.get())); | |
249 | 259 |
250 EXPECT_DOUBLE_EQ(0.6, service->GetScore(url1)); | 260 EXPECT_DOUBLE_EQ(0.6, service->GetScore(url1)); |
251 EXPECT_DOUBLE_EQ(0.5, service->GetScore(url2)); | 261 EXPECT_DOUBLE_EQ(0.5, service->GetScore(url2)); |
252 | 262 |
253 HandleMouseEvent(helper.get(), blink::WebMouseEvent::ButtonRight, | 263 HandleMouseEvent(helper.get(), blink::WebMouseEvent::ButtonRight, |
254 blink::WebInputEvent::MouseDown); | 264 blink::WebInputEvent::MouseDown); |
255 EXPECT_TRUE(timer->IsRunning()); | 265 EXPECT_TRUE(input_tracker_timer->IsRunning()); |
256 EXPECT_FALSE(CallbacksAdded(helper.get())); | 266 EXPECT_FALSE(IsTracking(helper.get())); |
257 | 267 |
258 EXPECT_DOUBLE_EQ(0.6, service->GetScore(url1)); | 268 EXPECT_DOUBLE_EQ(0.6, service->GetScore(url1)); |
259 EXPECT_DOUBLE_EQ(0.55, service->GetScore(url2)); | 269 EXPECT_DOUBLE_EQ(0.55, service->GetScore(url2)); |
260 EXPECT_DOUBLE_EQ(1.15, service->GetTotalEngagementPoints()); | 270 EXPECT_DOUBLE_EQ(1.15, service->GetTotalEngagementPoints()); |
261 } | 271 } |
272 | |
273 // Ensure that navigation does not trigger input tracking until after a delay. | |
274 IN_PROC_BROWSER_TEST_F(SiteEngagementServiceBrowserTest, | |
275 NavigationTimer) { | |
276 GURL url1("https://www.google.com/"); | |
277 GURL url2("http://www.google.com/"); | |
278 content::WebContents* web_contents = | |
279 browser()->tab_strip_model()->GetActiveWebContents(); | |
280 | |
281 base::MockTimer* navigation_timer = new base::MockTimer(true, false); | |
282 scoped_ptr<SiteEngagementHelper> helper(CreateHelper(web_contents)); | |
283 SetNavigationPauseTimer(helper.get(), make_scoped_ptr(navigation_timer)); | |
284 | |
285 // Input tracking should not begin until the navigation timer fires. | |
286 ui_test_utils::NavigateToURL(browser(), url1); | |
287 EXPECT_TRUE(navigation_timer->IsRunning()); | |
288 EXPECT_FALSE(IsTracking(helper.get())); | |
289 | |
290 navigation_timer->Fire(); | |
291 EXPECT_TRUE(IsTracking(helper.get())); | |
292 EXPECT_FALSE(navigation_timer->IsRunning()); | |
293 | |
294 // A new tab should cause input tracking to not be hooked up, even after the | |
295 // timer fires. | |
296 ui_test_utils::NavigateToURL(browser(), url1); | |
297 EXPECT_TRUE(navigation_timer->IsRunning()); | |
298 EXPECT_FALSE(IsTracking(helper.get())); | |
299 | |
300 ui_test_utils::NavigateToURLWithDisposition( | |
301 browser(), url2, NEW_FOREGROUND_TAB, | |
302 ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); | |
303 EXPECT_NE(web_contents, browser()->tab_strip_model()->GetActiveWebContents()); | |
304 | |
305 navigation_timer->Fire(); | |
306 EXPECT_FALSE(IsTracking(helper.get())); | |
307 EXPECT_FALSE(navigation_timer->IsRunning()); | |
308 | |
309 // Once the original tab is refocused, the tracking should begin. | |
310 browser()->tab_strip_model()->ActivateTabAt(0, true); | |
311 EXPECT_TRUE(IsTracking(helper.get())); | |
312 | |
313 // Ensure showing the web contents before the timer has fired doesn't start | |
314 // tracking. | |
315 ui_test_utils::NavigateToURL(browser(), url1); | |
316 EXPECT_TRUE(navigation_timer->IsRunning()); | |
317 EXPECT_FALSE(IsTracking(helper.get())); | |
318 | |
319 ui_test_utils::NavigateToURLWithDisposition( | |
320 browser(), url2, NEW_FOREGROUND_TAB, | |
321 ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); | |
322 EXPECT_NE(web_contents, browser()->tab_strip_model()->GetActiveWebContents()); | |
323 | |
324 browser()->tab_strip_model()->ActivateTabAt(0, true); | |
325 EXPECT_TRUE(navigation_timer->IsRunning()); | |
326 EXPECT_FALSE(IsTracking(helper.get())); | |
327 | |
328 // Once the timer fires, input tracking should begin as usual. | |
329 navigation_timer->Fire(); | |
330 EXPECT_TRUE(IsTracking(helper.get())); | |
331 EXPECT_FALSE(navigation_timer->IsRunning()); | |
dominickn
2015/10/06 00:04:42
I think we need a test for tracking after a naviga
calamity
2015/10/06 03:39:56
Done.
| |
332 } | |
OLD | NEW |