Index: chrome/browser/engagement/site_engagement_service_browsertest.cc |
diff --git a/chrome/browser/engagement/site_engagement_service_browsertest.cc b/chrome/browser/engagement/site_engagement_service_browsertest.cc |
index 5d4e4da2ae08c30f942432bb92268f3734317a52..35120c0daa326c4385ca414999b77e5e7c7cc6ce 100644 |
--- a/chrome/browser/engagement/site_engagement_service_browsertest.cc |
+++ b/chrome/browser/engagement/site_engagement_service_browsertest.cc |
@@ -48,14 +48,20 @@ class SiteEngagementServiceBrowserTest : public InProcessBrowserTest { |
helper->input_tracker_.HandleMouseEvent(event); |
} |
- // Set a timer object for test purposes. |
- void SetHelperTimer(SiteEngagementHelper* helper, |
- scoped_ptr<base::Timer> timer) { |
- helper->input_tracker_.SetTimerForTesting(timer.Pass()); |
+ // Set a pause timer on the input tracker for test purposes. |
+ void SetInputTrackerPauseTimer(SiteEngagementHelper* helper, |
+ scoped_ptr<base::Timer> timer) { |
+ helper->input_tracker_.SetPauseTimerForTesting(timer.Pass()); |
} |
- bool CallbacksAdded(SiteEngagementHelper* helper) { |
- return helper->input_tracker_.callbacks_added(); |
+ // Set a navigation timer on the helper for test purposes. |
+ void SetNavigationPauseTimer(SiteEngagementHelper* helper, |
+ scoped_ptr<base::Timer> timer) { |
+ helper->SetNavigationTimerForTesting(timer.Pass()); |
+ } |
+ |
+ bool IsTracking(SiteEngagementHelper* helper) { |
+ return helper->input_tracker_.IsTracking(); |
} |
}; |
@@ -206,56 +212,121 @@ IN_PROC_BROWSER_TEST_F(SiteEngagementServiceBrowserTest, |
content::WebContents* web_contents = |
browser()->tab_strip_model()->GetActiveWebContents(); |
- scoped_ptr<base::MockTimer> mock_timer(new base::MockTimer(true, false)); |
- base::MockTimer* timer = mock_timer.get(); |
+ base::MockTimer* input_tracker_timer = new base::MockTimer(true, false); |
+ base::MockTimer* navigation_timer = new base::MockTimer(true, false); |
scoped_ptr<SiteEngagementHelper> helper(CreateHelper(web_contents)); |
- SetHelperTimer(helper.get(), mock_timer.Pass()); |
+ SetInputTrackerPauseTimer(helper.get(), make_scoped_ptr(input_tracker_timer)); |
+ SetNavigationPauseTimer(helper.get(), make_scoped_ptr(navigation_timer)); |
SiteEngagementService* service = |
SiteEngagementServiceFactory::GetForProfile(browser()->profile()); |
DCHECK(service); |
ui_test_utils::NavigateToURL(browser(), url1); |
+ navigation_timer->Fire(); |
EXPECT_DOUBLE_EQ(0.5, service->GetScore(url1)); |
EXPECT_EQ(0, service->GetScore(url2)); |
// Timer should not be running after navigation. It should start after input. |
- EXPECT_FALSE(timer->IsRunning()); |
- EXPECT_TRUE(CallbacksAdded(helper.get())); |
+ EXPECT_FALSE(input_tracker_timer->IsRunning()); |
+ EXPECT_TRUE(IsTracking(helper.get())); |
HandleKeyPress(helper.get(), ui::VKEY_RETURN); |
- EXPECT_TRUE(timer->IsRunning()); |
- EXPECT_FALSE(CallbacksAdded(helper.get())); |
+ EXPECT_TRUE(input_tracker_timer->IsRunning()); |
+ EXPECT_FALSE(IsTracking(helper.get())); |
EXPECT_DOUBLE_EQ(0.55, service->GetScore(url1)); |
EXPECT_EQ(0, service->GetScore(url2)); |
- timer->Fire(); |
+ input_tracker_timer->Fire(); |
- EXPECT_FALSE(timer->IsRunning()); |
- EXPECT_TRUE(CallbacksAdded(helper.get())); |
+ EXPECT_FALSE(input_tracker_timer->IsRunning()); |
+ EXPECT_TRUE(IsTracking(helper.get())); |
HandleMouseEvent(helper.get(), blink::WebMouseEvent::ButtonNone, |
blink::WebInputEvent::MouseWheel); |
- EXPECT_TRUE(timer->IsRunning()); |
- EXPECT_FALSE(CallbacksAdded(helper.get())); |
+ EXPECT_TRUE(input_tracker_timer->IsRunning()); |
+ EXPECT_FALSE(IsTracking(helper.get())); |
EXPECT_DOUBLE_EQ(0.6, service->GetScore(url1)); |
EXPECT_EQ(0, service->GetScore(url2)); |
- timer->Fire(); |
+ input_tracker_timer->Fire(); |
- EXPECT_FALSE(timer->IsRunning()); |
- EXPECT_TRUE(CallbacksAdded(helper.get())); |
+ EXPECT_FALSE(input_tracker_timer->IsRunning()); |
+ EXPECT_TRUE(IsTracking(helper.get())); |
ui_test_utils::NavigateToURL(browser(), url2); |
- EXPECT_FALSE(timer->IsRunning()); |
- EXPECT_TRUE(CallbacksAdded(helper.get())); |
+ navigation_timer->Fire(); |
+ |
+ EXPECT_FALSE(input_tracker_timer->IsRunning()); |
+ EXPECT_TRUE(IsTracking(helper.get())); |
EXPECT_DOUBLE_EQ(0.6, service->GetScore(url1)); |
EXPECT_DOUBLE_EQ(0.5, service->GetScore(url2)); |
HandleMouseEvent(helper.get(), blink::WebMouseEvent::ButtonRight, |
blink::WebInputEvent::MouseDown); |
- EXPECT_TRUE(timer->IsRunning()); |
- EXPECT_FALSE(CallbacksAdded(helper.get())); |
+ EXPECT_TRUE(input_tracker_timer->IsRunning()); |
+ EXPECT_FALSE(IsTracking(helper.get())); |
EXPECT_DOUBLE_EQ(0.6, service->GetScore(url1)); |
EXPECT_DOUBLE_EQ(0.55, service->GetScore(url2)); |
EXPECT_DOUBLE_EQ(1.15, service->GetTotalEngagementPoints()); |
} |
+ |
+// Ensure that navigation does not trigger input tracking until after a delay. |
+IN_PROC_BROWSER_TEST_F(SiteEngagementServiceBrowserTest, |
+ NavigationTimer) { |
+ GURL url1("https://www.google.com/"); |
+ GURL url2("http://www.google.com/"); |
+ content::WebContents* web_contents = |
+ browser()->tab_strip_model()->GetActiveWebContents(); |
+ |
+ base::MockTimer* navigation_timer = new base::MockTimer(true, false); |
+ scoped_ptr<SiteEngagementHelper> helper(CreateHelper(web_contents)); |
+ SetNavigationPauseTimer(helper.get(), make_scoped_ptr(navigation_timer)); |
+ |
+ // Input tracking should not begin until the navigation timer fires. |
+ ui_test_utils::NavigateToURL(browser(), url1); |
+ EXPECT_TRUE(navigation_timer->IsRunning()); |
+ EXPECT_FALSE(IsTracking(helper.get())); |
+ |
+ navigation_timer->Fire(); |
+ EXPECT_TRUE(IsTracking(helper.get())); |
+ EXPECT_FALSE(navigation_timer->IsRunning()); |
+ |
+ // A new tab should cause input tracking to not be hooked up, even after the |
+ // timer fires. |
+ ui_test_utils::NavigateToURL(browser(), url1); |
+ EXPECT_TRUE(navigation_timer->IsRunning()); |
+ EXPECT_FALSE(IsTracking(helper.get())); |
+ |
+ ui_test_utils::NavigateToURLWithDisposition( |
+ browser(), url2, NEW_FOREGROUND_TAB, |
+ ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); |
+ EXPECT_NE(web_contents, browser()->tab_strip_model()->GetActiveWebContents()); |
+ |
+ navigation_timer->Fire(); |
+ EXPECT_FALSE(IsTracking(helper.get())); |
+ EXPECT_FALSE(navigation_timer->IsRunning()); |
+ |
+ // Once the original tab is refocused, the tracking should begin. |
+ browser()->tab_strip_model()->ActivateTabAt(0, true); |
+ EXPECT_TRUE(IsTracking(helper.get())); |
+ |
+ // Ensure showing the web contents before the timer has fired doesn't start |
+ // tracking. |
+ ui_test_utils::NavigateToURL(browser(), url1); |
+ EXPECT_TRUE(navigation_timer->IsRunning()); |
+ EXPECT_FALSE(IsTracking(helper.get())); |
+ |
+ ui_test_utils::NavigateToURLWithDisposition( |
+ browser(), url2, NEW_FOREGROUND_TAB, |
+ ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); |
+ EXPECT_NE(web_contents, browser()->tab_strip_model()->GetActiveWebContents()); |
+ |
+ browser()->tab_strip_model()->ActivateTabAt(0, true); |
+ EXPECT_TRUE(navigation_timer->IsRunning()); |
+ EXPECT_FALSE(IsTracking(helper.get())); |
+ |
+ // Once the timer fires, input tracking should begin as usual. |
+ navigation_timer->Fire(); |
+ EXPECT_TRUE(IsTracking(helper.get())); |
+ EXPECT_FALSE(navigation_timer->IsRunning()); |
dominickn
2015/10/06 00:04:42
I think we need a test for tracking after a naviga
calamity
2015/10/06 03:39:56
Done.
|
+} |