| 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 |