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 "base/command_line.h" | |
6 #include "base/test/histogram_tester.h" | |
7 #include "base/timer/mock_timer.h" | |
8 #include "base/values.h" | |
9 #include "chrome/browser/engagement/site_engagement_helper.h" | |
10 #include "chrome/browser/engagement/site_engagement_service.h" | |
11 #include "chrome/browser/engagement/site_engagement_service_factory.h" | |
12 #include "chrome/browser/ui/browser.h" | |
13 #include "chrome/browser/ui/tabs/tab_strip_model.h" | |
14 #include "chrome/common/chrome_switches.h" | |
15 #include "chrome/test/base/in_process_browser_test.h" | |
16 #include "chrome/test/base/ui_test_utils.h" | |
17 #include "content/public/test/browser_test_utils.h" | |
18 #include "testing/gtest/include/gtest/gtest.h" | |
19 #include "ui/events/keycodes/keyboard_codes.h" | |
20 | |
21 class SiteEngagementServiceBrowserTest : public InProcessBrowserTest { | |
22 public: | |
23 // Create a SiteEngagementHelper. Called here as friend class methods cannot | |
24 // be called in tests. | |
25 scoped_ptr<SiteEngagementHelper> CreateHelper( | |
26 content::WebContents* web_contents) { | |
27 scoped_ptr<SiteEngagementHelper> helper( | |
28 new SiteEngagementHelper(web_contents)); | |
29 DCHECK(helper.get()); | |
30 | |
31 return helper.Pass(); | |
32 } | |
33 | |
34 // Simulate a key press event and handle it. | |
35 void HandleKeyPress(SiteEngagementHelper* helper, ui::KeyboardCode key) { | |
36 content::NativeWebKeyboardEvent event; | |
37 event.windowsKeyCode = key; | |
38 event.type = blink::WebKeyboardEvent::RawKeyDown; | |
39 helper->input_tracker_.HandleKeyPressEvent(event); | |
40 } | |
41 | |
42 // Simulate a mouse event and handle it. | |
43 void HandleMouseEvent(SiteEngagementHelper* helper, | |
44 blink::WebMouseEvent::Button button, | |
45 blink::WebInputEvent::Type type) { | |
46 blink::WebMouseEvent event; | |
47 event.button = button; | |
48 event.type = type; | |
49 helper->input_tracker_.HandleMouseEvent(event); | |
50 } | |
51 | |
52 // Set a pause timer on the input tracker for test purposes. | |
53 void SetInputTrackerPauseTimer(SiteEngagementHelper* helper, | |
54 scoped_ptr<base::Timer> timer) { | |
55 helper->input_tracker_.SetPauseTimerForTesting(timer.Pass()); | |
56 } | |
57 | |
58 bool IsTracking(SiteEngagementHelper* helper) { | |
59 return helper->input_tracker_.is_tracking(); | |
60 } | |
61 | |
62 bool IsActive(SiteEngagementHelper* helper) { | |
63 return helper->input_tracker_.IsActive(); | |
64 } | |
65 | |
66 content::RenderViewHost* InputTrackerHost(SiteEngagementHelper* helper) { | |
67 return helper->input_tracker_.host(); | |
68 } | |
69 }; | |
70 | |
71 IN_PROC_BROWSER_TEST_F(SiteEngagementServiceBrowserTest, | |
72 KeyPressEngagementAccumulation) { | |
73 GURL url1("https://www.google.com/"); | |
74 GURL url2("http://www.google.com/"); | |
75 content::WebContents* web_contents = | |
76 browser()->tab_strip_model()->GetActiveWebContents(); | |
77 | |
78 scoped_ptr<SiteEngagementHelper> helper(CreateHelper(web_contents)); | |
79 SiteEngagementService* service = | |
80 SiteEngagementServiceFactory::GetForProfile(browser()->profile()); | |
81 DCHECK(service); | |
82 | |
83 // Check that navigation triggers engagement. | |
84 ui_test_utils::NavigateToURL(browser(), url1); | |
85 EXPECT_DOUBLE_EQ(0.5, service->GetScore(url1)); | |
86 EXPECT_EQ(0, service->GetScore(url2)); | |
87 | |
88 // Simulate a key press trigger and ensure it is treated correctly. | |
89 HandleKeyPress(helper.get(), ui::VKEY_DOWN); | |
90 | |
91 EXPECT_DOUBLE_EQ(0.55, service->GetScore(url1)); | |
92 EXPECT_EQ(0, service->GetScore(url2)); | |
93 | |
94 // Simulate three key presses, and ensure they are treated correctly. | |
95 HandleKeyPress(helper.get(), ui::VKEY_UP); | |
96 HandleKeyPress(helper.get(), ui::VKEY_RETURN); | |
97 HandleKeyPress(helper.get(), ui::VKEY_J); | |
98 | |
99 EXPECT_DOUBLE_EQ(0.7, service->GetScore(url1)); | |
100 EXPECT_EQ(0, service->GetScore(url2)); | |
101 | |
102 // Simulate key presses for a different link. | |
103 ui_test_utils::NavigateToURL(browser(), url2); | |
104 | |
105 EXPECT_DOUBLE_EQ(0.7, service->GetScore(url1)); | |
106 EXPECT_DOUBLE_EQ(0.5, service->GetScore(url2)); | |
107 EXPECT_DOUBLE_EQ(1.2, service->GetTotalEngagementPoints()); | |
108 | |
109 HandleKeyPress(helper.get(), ui::VKEY_K); | |
110 EXPECT_DOUBLE_EQ(0.7, service->GetScore(url1)); | |
111 EXPECT_DOUBLE_EQ(0.55, service->GetScore(url2)); | |
112 EXPECT_DOUBLE_EQ(1.25, service->GetTotalEngagementPoints()); | |
113 } | |
114 | |
115 IN_PROC_BROWSER_TEST_F(SiteEngagementServiceBrowserTest, | |
116 MouseEventEngagementAccumulation) { | |
117 GURL url1("https://www.google.com/"); | |
118 GURL url2("http://www.google.com/"); | |
119 content::WebContents* web_contents = | |
120 browser()->tab_strip_model()->GetActiveWebContents(); | |
121 | |
122 scoped_ptr<SiteEngagementHelper> helper(CreateHelper(web_contents)); | |
123 SiteEngagementService* service = | |
124 SiteEngagementServiceFactory::GetForProfile(browser()->profile()); | |
125 DCHECK(service); | |
126 | |
127 ui_test_utils::NavigateToURL(browser(), url1); | |
128 EXPECT_DOUBLE_EQ(0.5, service->GetScore(url1)); | |
129 EXPECT_EQ(0, service->GetScore(url2)); | |
130 | |
131 HandleMouseEvent(helper.get(), blink::WebMouseEvent::ButtonLeft, | |
132 blink::WebInputEvent::MouseDown); | |
133 | |
134 EXPECT_DOUBLE_EQ(0.55, service->GetScore(url1)); | |
135 EXPECT_EQ(0, service->GetScore(url2)); | |
136 | |
137 HandleMouseEvent(helper.get(), blink::WebMouseEvent::ButtonRight, | |
138 blink::WebInputEvent::MouseWheel); | |
139 HandleMouseEvent(helper.get(), blink::WebMouseEvent::ButtonMiddle, | |
140 blink::WebInputEvent::MouseDown); | |
141 HandleMouseEvent(helper.get(), blink::WebMouseEvent::ButtonLeft, | |
142 blink::WebInputEvent::MouseDown); | |
143 | |
144 EXPECT_DOUBLE_EQ(0.7, service->GetScore(url1)); | |
145 EXPECT_EQ(0, service->GetScore(url2)); | |
146 | |
147 ui_test_utils::NavigateToURL(browser(), url2); | |
148 | |
149 EXPECT_DOUBLE_EQ(0.7, service->GetScore(url1)); | |
150 EXPECT_DOUBLE_EQ(0.5, service->GetScore(url2)); | |
151 EXPECT_DOUBLE_EQ(1.2, service->GetTotalEngagementPoints()); | |
152 | |
153 HandleMouseEvent(helper.get(), blink::WebMouseEvent::ButtonLeft, | |
154 blink::WebInputEvent::MouseDown); | |
155 EXPECT_DOUBLE_EQ(0.7, service->GetScore(url1)); | |
156 EXPECT_DOUBLE_EQ(0.55, service->GetScore(url2)); | |
157 EXPECT_DOUBLE_EQ(1.25, service->GetTotalEngagementPoints()); | |
158 } | |
159 | |
160 IN_PROC_BROWSER_TEST_F(SiteEngagementServiceBrowserTest, | |
161 MixedInputEngagementAccumulation) { | |
162 GURL url1("https://www.google.com/"); | |
163 GURL url2("http://www.google.com/"); | |
164 content::WebContents* web_contents = | |
165 browser()->tab_strip_model()->GetActiveWebContents(); | |
166 | |
167 scoped_ptr<SiteEngagementHelper> helper(CreateHelper(web_contents)); | |
168 SiteEngagementService* service = | |
169 SiteEngagementServiceFactory::GetForProfile(browser()->profile()); | |
170 DCHECK(service); | |
171 | |
172 base::HistogramTester histograms; | |
173 | |
174 // Histograms should start off empty. | |
175 histograms.ExpectTotalCount(SiteEngagementMetrics::kEngagementTypeHistogram, | |
176 0); | |
177 | |
178 ui_test_utils::NavigateToURL(browser(), url1); | |
179 EXPECT_DOUBLE_EQ(0.5, service->GetScore(url1)); | |
180 EXPECT_EQ(0, service->GetScore(url2)); | |
181 histograms.ExpectTotalCount(SiteEngagementMetrics::kEngagementTypeHistogram, | |
182 1); | |
183 histograms.ExpectBucketCount(SiteEngagementMetrics::kEngagementTypeHistogram, | |
184 SiteEngagementMetrics::ENGAGEMENT_NAVIGATION, 1); | |
185 | |
186 HandleKeyPress(helper.get(), ui::VKEY_UP); | |
187 HandleKeyPress(helper.get(), ui::VKEY_RETURN); | |
188 HandleKeyPress(helper.get(), ui::VKEY_J); | |
189 | |
190 HandleMouseEvent(helper.get(), blink::WebMouseEvent::ButtonLeft, | |
191 blink::WebInputEvent::MouseDown); | |
192 | |
193 EXPECT_DOUBLE_EQ(0.7, service->GetScore(url1)); | |
194 EXPECT_EQ(0, service->GetScore(url2)); | |
195 histograms.ExpectTotalCount(SiteEngagementMetrics::kEngagementTypeHistogram, | |
196 5); | |
197 histograms.ExpectBucketCount(SiteEngagementMetrics::kEngagementTypeHistogram, | |
198 SiteEngagementMetrics::ENGAGEMENT_NAVIGATION, 1); | |
199 histograms.ExpectBucketCount(SiteEngagementMetrics::kEngagementTypeHistogram, | |
200 SiteEngagementMetrics::ENGAGEMENT_KEYPRESS, 3); | |
201 histograms.ExpectBucketCount(SiteEngagementMetrics::kEngagementTypeHistogram, | |
202 SiteEngagementMetrics::ENGAGEMENT_MOUSE, 1); | |
203 | |
204 HandleMouseEvent(helper.get(), blink::WebMouseEvent::ButtonRight, | |
205 blink::WebInputEvent::MouseDown); | |
206 HandleMouseEvent(helper.get(), blink::WebMouseEvent::ButtonMiddle, | |
207 blink::WebInputEvent::MouseDown); | |
208 HandleMouseEvent(helper.get(), blink::WebMouseEvent::ButtonNone, | |
209 blink::WebInputEvent::MouseWheel); | |
210 | |
211 EXPECT_DOUBLE_EQ(0.85, service->GetScore(url1)); | |
212 EXPECT_EQ(0, service->GetScore(url2)); | |
213 histograms.ExpectTotalCount(SiteEngagementMetrics::kEngagementTypeHistogram, | |
214 8); | |
215 histograms.ExpectBucketCount(SiteEngagementMetrics::kEngagementTypeHistogram, | |
216 SiteEngagementMetrics::ENGAGEMENT_MOUSE, 4); | |
217 | |
218 ui_test_utils::NavigateToURL(browser(), url2); | |
219 | |
220 EXPECT_DOUBLE_EQ(0.85, service->GetScore(url1)); | |
221 EXPECT_DOUBLE_EQ(0.5, service->GetScore(url2)); | |
222 EXPECT_DOUBLE_EQ(1.35, service->GetTotalEngagementPoints()); | |
223 | |
224 HandleMouseEvent(helper.get(), blink::WebMouseEvent::ButtonNone, | |
225 blink::WebInputEvent::MouseWheel); | |
226 HandleKeyPress(helper.get(), ui::VKEY_DOWN); | |
227 | |
228 EXPECT_DOUBLE_EQ(0.85, service->GetScore(url1)); | |
229 EXPECT_DOUBLE_EQ(0.6, service->GetScore(url2)); | |
230 EXPECT_DOUBLE_EQ(1.45, service->GetTotalEngagementPoints()); | |
231 histograms.ExpectTotalCount(SiteEngagementMetrics::kEngagementTypeHistogram, | |
232 11); | |
233 histograms.ExpectBucketCount(SiteEngagementMetrics::kEngagementTypeHistogram, | |
234 SiteEngagementMetrics::ENGAGEMENT_NAVIGATION, 2); | |
235 histograms.ExpectBucketCount(SiteEngagementMetrics::kEngagementTypeHistogram, | |
236 SiteEngagementMetrics::ENGAGEMENT_KEYPRESS, 4); | |
237 histograms.ExpectBucketCount(SiteEngagementMetrics::kEngagementTypeHistogram, | |
238 SiteEngagementMetrics::ENGAGEMENT_MOUSE, 5); | |
239 } | |
240 | |
241 IN_PROC_BROWSER_TEST_F(SiteEngagementServiceBrowserTest, | |
242 CheckTimerAndCallbacks) { | |
243 GURL url1("https://www.google.com/"); | |
244 GURL url2("http://www.google.com/"); | |
245 content::WebContents* web_contents = | |
246 browser()->tab_strip_model()->GetActiveWebContents(); | |
247 | |
248 base::MockTimer* input_tracker_timer = new base::MockTimer(true, false); | |
249 scoped_ptr<SiteEngagementHelper> helper(CreateHelper(web_contents)); | |
250 SetInputTrackerPauseTimer(helper.get(), make_scoped_ptr(input_tracker_timer)); | |
251 | |
252 SiteEngagementService* service = | |
253 SiteEngagementServiceFactory::GetForProfile(browser()->profile()); | |
254 DCHECK(service); | |
255 | |
256 ui_test_utils::NavigateToURL(browser(), url1); | |
257 EXPECT_DOUBLE_EQ(0.5, service->GetScore(url1)); | |
258 EXPECT_EQ(0, service->GetScore(url2)); | |
259 | |
260 // Timer should be running for navigation delay. | |
261 EXPECT_TRUE(input_tracker_timer->IsRunning()); | |
262 EXPECT_FALSE(IsTracking(helper.get())); | |
263 input_tracker_timer->Fire(); | |
264 | |
265 // Timer should start running again after input. | |
266 EXPECT_FALSE(input_tracker_timer->IsRunning()); | |
267 EXPECT_TRUE(IsTracking(helper.get())); | |
268 HandleKeyPress(helper.get(), ui::VKEY_RETURN); | |
269 EXPECT_TRUE(input_tracker_timer->IsRunning()); | |
270 EXPECT_FALSE(IsTracking(helper.get())); | |
271 | |
272 EXPECT_DOUBLE_EQ(0.55, service->GetScore(url1)); | |
273 EXPECT_EQ(0, service->GetScore(url2)); | |
274 | |
275 input_tracker_timer->Fire(); | |
276 EXPECT_FALSE(input_tracker_timer->IsRunning()); | |
277 EXPECT_TRUE(IsTracking(helper.get())); | |
278 | |
279 // Timer should start running again after input. | |
280 HandleMouseEvent(helper.get(), blink::WebMouseEvent::ButtonNone, | |
281 blink::WebInputEvent::MouseWheel); | |
282 EXPECT_TRUE(input_tracker_timer->IsRunning()); | |
283 EXPECT_FALSE(IsTracking(helper.get())); | |
284 | |
285 EXPECT_DOUBLE_EQ(0.6, service->GetScore(url1)); | |
286 EXPECT_EQ(0, service->GetScore(url2)); | |
287 | |
288 input_tracker_timer->Fire(); | |
289 EXPECT_FALSE(input_tracker_timer->IsRunning()); | |
290 EXPECT_TRUE(IsTracking(helper.get())); | |
291 | |
292 // Timer should be running for navigation delay. | |
293 ui_test_utils::NavigateToURL(browser(), url2); | |
294 EXPECT_TRUE(input_tracker_timer->IsRunning()); | |
295 EXPECT_FALSE(IsTracking(helper.get())); | |
296 | |
297 EXPECT_DOUBLE_EQ(0.6, service->GetScore(url1)); | |
298 EXPECT_DOUBLE_EQ(0.5, service->GetScore(url2)); | |
299 | |
300 input_tracker_timer->Fire(); | |
301 EXPECT_FALSE(input_tracker_timer->IsRunning()); | |
302 EXPECT_TRUE(IsTracking(helper.get())); | |
303 | |
304 HandleMouseEvent(helper.get(), blink::WebMouseEvent::ButtonRight, | |
305 blink::WebInputEvent::MouseDown); | |
306 EXPECT_TRUE(input_tracker_timer->IsRunning()); | |
307 EXPECT_FALSE(IsTracking(helper.get())); | |
308 | |
309 EXPECT_DOUBLE_EQ(0.6, service->GetScore(url1)); | |
310 EXPECT_DOUBLE_EQ(0.55, service->GetScore(url2)); | |
311 EXPECT_DOUBLE_EQ(1.15, service->GetTotalEngagementPoints()); | |
312 } | |
313 | |
314 // Ensure that navigation does not trigger input tracking until after a delay. | |
315 IN_PROC_BROWSER_TEST_F(SiteEngagementServiceBrowserTest, ShowAndHide) { | |
316 GURL url1("https://www.google.com/"); | |
317 GURL url2("http://www.google.com/"); | |
318 content::WebContents* web_contents = | |
319 browser()->tab_strip_model()->GetActiveWebContents(); | |
320 | |
321 base::MockTimer* input_tracker_timer = new base::MockTimer(true, false); | |
322 scoped_ptr<SiteEngagementHelper> helper(CreateHelper(web_contents)); | |
323 SetInputTrackerPauseTimer(helper.get(), make_scoped_ptr(input_tracker_timer)); | |
324 | |
325 ui_test_utils::NavigateToURL(browser(), url1); | |
326 input_tracker_timer->Fire(); | |
327 | |
328 EXPECT_FALSE(input_tracker_timer->IsRunning()); | |
329 EXPECT_TRUE(IsTracking(helper.get())); | |
330 | |
331 // Hiding the tab should stop input tracking. | |
332 ui_test_utils::NavigateToURLWithDisposition( | |
333 browser(), url2, NEW_FOREGROUND_TAB, | |
334 ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); | |
335 | |
336 EXPECT_FALSE(IsTracking(helper.get())); | |
337 | |
338 // Showing the tab should start tracking again after another delay. | |
339 browser()->tab_strip_model()->ActivateTabAt(0, true); | |
340 EXPECT_TRUE(input_tracker_timer->IsRunning()); | |
341 EXPECT_FALSE(IsTracking(helper.get())); | |
342 | |
343 input_tracker_timer->Fire(); | |
344 EXPECT_FALSE(input_tracker_timer->IsRunning()); | |
345 EXPECT_TRUE(IsTracking(helper.get())); | |
346 | |
347 // New background tabs should not affect the current tab's input tracking. | |
348 ui_test_utils::NavigateToURLWithDisposition( | |
349 browser(), url2, NEW_BACKGROUND_TAB, | |
350 ui_test_utils::BROWSER_TEST_WAIT_FOR_TAB); | |
351 EXPECT_FALSE(input_tracker_timer->IsRunning()); | |
352 EXPECT_TRUE(IsTracking(helper.get())); | |
353 | |
354 // Ensure behavior holds when tab is hidden before the initial delay timer | |
355 // fires. | |
356 ui_test_utils::NavigateToURL(browser(), url2); | |
357 EXPECT_TRUE(input_tracker_timer->IsRunning()); | |
358 EXPECT_FALSE(IsTracking(helper.get())); | |
359 | |
360 ui_test_utils::NavigateToURLWithDisposition( | |
361 browser(), url2, NEW_FOREGROUND_TAB, | |
362 ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); | |
363 EXPECT_FALSE(input_tracker_timer->IsRunning()); | |
364 EXPECT_FALSE(IsTracking(helper.get())); | |
365 | |
366 // Showing the tab should start tracking again after another delay. | |
367 browser()->tab_strip_model()->ActivateTabAt(0, true); | |
368 EXPECT_TRUE(input_tracker_timer->IsRunning()); | |
369 EXPECT_FALSE(IsTracking(helper.get())); | |
370 | |
371 input_tracker_timer->Fire(); | |
372 EXPECT_TRUE(IsTracking(helper.get())); | |
373 } | |
374 | |
375 // Ensure tracking behavior is correct for multiple navigations in a single tab. | |
376 IN_PROC_BROWSER_TEST_F(SiteEngagementServiceBrowserTest, SingleTabNavigation) { | |
377 GURL url1("https://www.google.com/"); | |
378 GURL url2("https://www.example.com/"); | |
379 content::WebContents* web_contents = | |
380 browser()->tab_strip_model()->GetActiveWebContents(); | |
381 | |
382 base::MockTimer* input_tracker_timer = new base::MockTimer(true, false); | |
383 scoped_ptr<SiteEngagementHelper> helper(CreateHelper(web_contents)); | |
384 SetInputTrackerPauseTimer(helper.get(), make_scoped_ptr(input_tracker_timer)); | |
385 | |
386 // Navigation should start the initial delay timer. | |
387 ui_test_utils::NavigateToURL(browser(), url1); | |
388 EXPECT_TRUE(input_tracker_timer->IsRunning()); | |
389 EXPECT_FALSE(IsTracking(helper.get())); | |
390 | |
391 // Navigating before the timer fires should simply reset the timer. | |
392 ui_test_utils::NavigateToURL(browser(), url2); | |
393 EXPECT_TRUE(input_tracker_timer->IsRunning()); | |
394 EXPECT_FALSE(IsTracking(helper.get())); | |
395 | |
396 // When the timer fires, callbacks are added. | |
397 input_tracker_timer->Fire(); | |
398 EXPECT_FALSE(input_tracker_timer->IsRunning()); | |
399 EXPECT_TRUE(IsTracking(helper.get())); | |
400 | |
401 // Navigation should start the initial delay timer again. | |
402 ui_test_utils::NavigateToURL(browser(), url1); | |
403 EXPECT_TRUE(input_tracker_timer->IsRunning()); | |
404 EXPECT_FALSE(IsTracking(helper.get())); | |
405 } | |
406 | |
407 // Ensure tracking behavior is correct for multiple navigations in a single tab. | |
408 IN_PROC_BROWSER_TEST_F(SiteEngagementServiceBrowserTest, SwitchRenderViewHost) { | |
409 GURL url1("https://www.google.com/"); | |
410 GURL url2("https://www.example.com/"); | |
411 content::WebContents* web_contents = | |
412 browser()->tab_strip_model()->GetActiveWebContents(); | |
413 | |
414 base::MockTimer* input_tracker_timer = new base::MockTimer(true, false); | |
415 scoped_ptr<SiteEngagementHelper> helper(CreateHelper(web_contents)); | |
416 SetInputTrackerPauseTimer(helper.get(), make_scoped_ptr(input_tracker_timer)); | |
417 | |
418 // Navigation starts the initial delay timer. | |
419 ui_test_utils::NavigateToURL(browser(), url1); | |
420 EXPECT_TRUE(input_tracker_timer->IsRunning()); | |
421 EXPECT_FALSE(IsTracking(helper.get())); | |
422 | |
423 content::RenderViewHost* rvh1 = web_contents->GetRenderViewHost(); | |
424 | |
425 ui_test_utils::NavigateToURLWithDisposition( | |
426 browser(), url2, NEW_BACKGROUND_TAB, | |
427 ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); | |
428 content::RenderViewHost* rvh2 = | |
429 browser()->tab_strip_model()->GetWebContentsAt(1)->GetRenderViewHost(); | |
430 | |
431 // The timer should still be running after the RenderViewHost is changed. | |
432 helper->RenderViewHostChanged(rvh1, rvh2); | |
433 EXPECT_TRUE(input_tracker_timer->IsRunning()); | |
434 EXPECT_FALSE(IsTracking(helper.get())); | |
435 EXPECT_EQ(rvh2, InputTrackerHost(helper.get())); | |
436 | |
437 // Firing the timer should add the callbacks. | |
438 input_tracker_timer->Fire(); | |
439 EXPECT_FALSE(input_tracker_timer->IsRunning()); | |
440 EXPECT_TRUE(IsTracking(helper.get())); | |
441 | |
442 // The callbacks should be on readded another RVH change since the timer has | |
443 // already fired. | |
444 helper->RenderViewHostChanged(rvh2, rvh1); | |
445 EXPECT_FALSE(input_tracker_timer->IsRunning()); | |
446 EXPECT_TRUE(IsTracking(helper.get())); | |
447 EXPECT_EQ(rvh1, InputTrackerHost(helper.get())); | |
448 | |
449 // Ensure nothing bad happens with a destroyed RVH. | |
450 helper->RenderViewHostChanged(nullptr, rvh2); | |
451 EXPECT_FALSE(input_tracker_timer->IsRunning()); | |
452 EXPECT_TRUE(IsTracking(helper.get())); | |
453 EXPECT_EQ(rvh2, InputTrackerHost(helper.get())); | |
454 | |
455 // Ensure nothing happens when RVH change happens for a hidden tab. | |
456 helper->WasHidden(); | |
457 EXPECT_FALSE(input_tracker_timer->IsRunning()); | |
458 EXPECT_FALSE(IsTracking(helper.get())); | |
459 | |
460 helper->RenderViewHostChanged(rvh2, rvh1); | |
461 EXPECT_FALSE(input_tracker_timer->IsRunning()); | |
462 EXPECT_FALSE(IsTracking(helper.get())); | |
463 EXPECT_EQ(nullptr, InputTrackerHost(helper.get())); | |
464 } | |
OLD | NEW |