Chromium Code Reviews| 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.
|
| +} |