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 "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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 } |
OLD | NEW |