Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(141)

Side by Side Diff: chrome/browser/engagement/site_engagement_service_browsertest.cc

Issue 1368533004: Add UMA metrics to the site engagement service. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@time-on-site
Patch Set: Adding tests, addressing reviewer feedback Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 "base/command_line.h" 5 #include "base/command_line.h"
6 #include "base/run_loop.h" 6 #include "base/run_loop.h"
7 #include "base/single_thread_task_runner.h" 7 #include "base/single_thread_task_runner.h"
8 #include "base/task_runner.h" 8 #include "base/task_runner.h"
9 #include "base/test/histogram_tester.h"
9 #include "base/test/simple_test_clock.h" 10 #include "base/test/simple_test_clock.h"
10 #include "base/thread_task_runner_handle.h" 11 #include "base/thread_task_runner_handle.h"
11 #include "base/timer/mock_timer.h" 12 #include "base/timer/mock_timer.h"
12 #include "base/values.h" 13 #include "base/values.h"
13 #include "chrome/browser/engagement/site_engagement_helper.h" 14 #include "chrome/browser/engagement/site_engagement_helper.h"
14 #include "chrome/browser/engagement/site_engagement_service.h" 15 #include "chrome/browser/engagement/site_engagement_service.h"
15 #include "chrome/browser/engagement/site_engagement_service_factory.h" 16 #include "chrome/browser/engagement/site_engagement_service_factory.h"
16 #include "chrome/browser/ui/browser.h" 17 #include "chrome/browser/ui/browser.h"
17 #include "chrome/browser/ui/tabs/tab_strip_model.h" 18 #include "chrome/browser/ui/tabs/tab_strip_model.h"
18 #include "chrome/common/chrome_switches.h" 19 #include "chrome/common/chrome_switches.h"
19 #include "chrome/test/base/browser_with_test_window_test.h" 20 #include "chrome/test/base/browser_with_test_window_test.h"
20 #include "chrome/test/base/in_process_browser_test.h" 21 #include "chrome/test/base/in_process_browser_test.h"
21 #include "chrome/test/base/ui_test_utils.h" 22 #include "chrome/test/base/ui_test_utils.h"
22 #include "content/public/test/browser_test_utils.h" 23 #include "content/public/test/browser_test_utils.h"
23 #include "testing/gtest/include/gtest/gtest.h" 24 #include "testing/gtest/include/gtest/gtest.h"
24 #include "ui/events/keycodes/keyboard_codes.h" 25 #include "ui/events/keycodes/keyboard_codes.h"
25 26
26 class TestSiteEngagementHelper : public SiteEngagementHelper { 27 class TestSiteEngagementHelper : public SiteEngagementHelper {
27 public: 28 public:
28 explicit TestSiteEngagementHelper(content::WebContents* web_contents, 29 explicit TestSiteEngagementHelper(content::WebContents* web_contents,
29 bool enable_callbacks) 30 bool enable_callbacks)
30 : SiteEngagementHelper(web_contents), 31 : SiteEngagementHelper(web_contents),
31 enable_callbacks_(enable_callbacks) { } 32 enable_callbacks_(enable_callbacks) { }
32 33
33 ~TestSiteEngagementHelper() override { } 34 ~TestSiteEngagementHelper() override { }
34 35
35 void RecordUserInput() override { 36 void RecordUserInput(SiteEngagementMetrics::EngagementType type) override {
36 SiteEngagementHelper::RecordUserInput(); 37 SiteEngagementHelper::RecordUserInput(type);
37 base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, quit_closure_); 38 base::ThreadTaskRunnerHandle::Get()->PostTask(FROM_HERE, quit_closure_);
38 } 39 }
39 40
40 // Must be called before initiating user input. 41 // Must be called before initiating user input.
41 void SetQuitClosure(base::Closure quit_closure) { 42 void SetQuitClosure(base::Closure quit_closure) {
42 quit_closure_ = quit_closure; 43 quit_closure_ = quit_closure;
43 } 44 }
44 45
45 // Override to allow callback registration to be manually controlled in tests. 46 // Override to allow callback registration to be manually controlled in tests.
46 bool ShouldRecordEngagement() override { 47 bool ShouldRecordEngagement() override {
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after
202 GURL url1("https://www.google.com/"); 203 GURL url1("https://www.google.com/");
203 GURL url2("http://www.google.com/"); 204 GURL url2("http://www.google.com/");
204 content::WebContents* web_contents = 205 content::WebContents* web_contents =
205 browser()->tab_strip_model()->GetActiveWebContents(); 206 browser()->tab_strip_model()->GetActiveWebContents();
206 207
207 scoped_ptr<SiteEngagementHelper> helper(CreateHelper(web_contents)); 208 scoped_ptr<SiteEngagementHelper> helper(CreateHelper(web_contents));
208 SiteEngagementService* service = 209 SiteEngagementService* service =
209 SiteEngagementServiceFactory::GetForProfile(browser()->profile()); 210 SiteEngagementServiceFactory::GetForProfile(browser()->profile());
210 DCHECK(service); 211 DCHECK(service);
211 212
213 base::HistogramTester histograms;
214
215 // Histograms should start off empty.
216 histograms.ExpectTotalCount(SiteEngagementMetrics::kEngagementTypeHistogram,
217 0);
218
212 ui_test_utils::NavigateToURL(browser(), url1); 219 ui_test_utils::NavigateToURL(browser(), url1);
213 EXPECT_DOUBLE_EQ(0.5, service->GetScore(url1)); 220 EXPECT_DOUBLE_EQ(0.5, service->GetScore(url1));
214 EXPECT_EQ(0, service->GetScore(url2)); 221 EXPECT_EQ(0, service->GetScore(url2));
222 histograms.ExpectTotalCount(SiteEngagementMetrics::kEngagementTypeHistogram,
223 1);
224 histograms.ExpectBucketCount(SiteEngagementMetrics::kEngagementTypeHistogram,
225 SiteEngagementMetrics::ENGAGEMENT_NAVIGATION, 1);
215 226
216 HandleKeyPress(helper.get(), ui::VKEY_UP); 227 HandleKeyPress(helper.get(), ui::VKEY_UP);
217 HandleKeyPress(helper.get(), ui::VKEY_RETURN); 228 HandleKeyPress(helper.get(), ui::VKEY_RETURN);
218 HandleKeyPress(helper.get(), ui::VKEY_J); 229 HandleKeyPress(helper.get(), ui::VKEY_J);
219 230
220 HandleMouseEvent(helper.get(), blink::WebMouseEvent::ButtonLeft, 231 HandleMouseEvent(helper.get(), blink::WebMouseEvent::ButtonLeft,
221 blink::WebInputEvent::MouseDown); 232 blink::WebInputEvent::MouseDown);
222 233
223 EXPECT_DOUBLE_EQ(0.7, service->GetScore(url1)); 234 EXPECT_DOUBLE_EQ(0.7, service->GetScore(url1));
224 EXPECT_EQ(0, service->GetScore(url2)); 235 EXPECT_EQ(0, service->GetScore(url2));
236 histograms.ExpectTotalCount(SiteEngagementMetrics::kEngagementTypeHistogram,
237 5);
238 histograms.ExpectBucketCount(SiteEngagementMetrics::kEngagementTypeHistogram,
239 SiteEngagementMetrics::ENGAGEMENT_NAVIGATION, 1);
240 histograms.ExpectBucketCount(SiteEngagementMetrics::kEngagementTypeHistogram,
241 SiteEngagementMetrics::ENGAGEMENT_KEYPRESS, 3);
242 histograms.ExpectBucketCount(SiteEngagementMetrics::kEngagementTypeHistogram,
243 SiteEngagementMetrics::ENGAGEMENT_MOUSE, 1);
225 244
226 HandleMouseEvent(helper.get(), blink::WebMouseEvent::ButtonRight, 245 HandleMouseEvent(helper.get(), blink::WebMouseEvent::ButtonRight,
227 blink::WebInputEvent::MouseDown); 246 blink::WebInputEvent::MouseDown);
228 HandleMouseEvent(helper.get(), blink::WebMouseEvent::ButtonMiddle, 247 HandleMouseEvent(helper.get(), blink::WebMouseEvent::ButtonMiddle,
229 blink::WebInputEvent::MouseDown); 248 blink::WebInputEvent::MouseDown);
230 HandleMouseEvent(helper.get(), blink::WebMouseEvent::ButtonNone, 249 HandleMouseEvent(helper.get(), blink::WebMouseEvent::ButtonNone,
231 blink::WebInputEvent::MouseWheel); 250 blink::WebInputEvent::MouseWheel);
232 251
233 EXPECT_DOUBLE_EQ(0.85, service->GetScore(url1)); 252 EXPECT_DOUBLE_EQ(0.85, service->GetScore(url1));
234 EXPECT_EQ(0, service->GetScore(url2)); 253 EXPECT_EQ(0, service->GetScore(url2));
254 histograms.ExpectTotalCount(SiteEngagementMetrics::kEngagementTypeHistogram,
255 8);
256 histograms.ExpectBucketCount(SiteEngagementMetrics::kEngagementTypeHistogram,
257 SiteEngagementMetrics::ENGAGEMENT_MOUSE, 4);
235 258
236 ui_test_utils::NavigateToURL(browser(), url2); 259 ui_test_utils::NavigateToURL(browser(), url2);
237 260
238 EXPECT_DOUBLE_EQ(0.85, service->GetScore(url1)); 261 EXPECT_DOUBLE_EQ(0.85, service->GetScore(url1));
239 EXPECT_DOUBLE_EQ(0.5, service->GetScore(url2)); 262 EXPECT_DOUBLE_EQ(0.5, service->GetScore(url2));
240 EXPECT_DOUBLE_EQ(1.35, service->GetTotalEngagementPoints()); 263 EXPECT_DOUBLE_EQ(1.35, service->GetTotalEngagementPoints());
241 264
242 HandleMouseEvent(helper.get(), blink::WebMouseEvent::ButtonNone, 265 HandleMouseEvent(helper.get(), blink::WebMouseEvent::ButtonNone,
243 blink::WebInputEvent::MouseWheel); 266 blink::WebInputEvent::MouseWheel);
244 HandleKeyPress(helper.get(), ui::VKEY_DOWN); 267 HandleKeyPress(helper.get(), ui::VKEY_DOWN);
245 268
246 EXPECT_DOUBLE_EQ(0.85, service->GetScore(url1)); 269 EXPECT_DOUBLE_EQ(0.85, service->GetScore(url1));
247 EXPECT_DOUBLE_EQ(0.6, service->GetScore(url2)); 270 EXPECT_DOUBLE_EQ(0.6, service->GetScore(url2));
248 EXPECT_DOUBLE_EQ(1.45, service->GetTotalEngagementPoints()); 271 EXPECT_DOUBLE_EQ(1.45, service->GetTotalEngagementPoints());
272 histograms.ExpectTotalCount(SiteEngagementMetrics::kEngagementTypeHistogram,
273 11);
274 histograms.ExpectBucketCount(SiteEngagementMetrics::kEngagementTypeHistogram,
275 SiteEngagementMetrics::ENGAGEMENT_NAVIGATION, 2);
276 histograms.ExpectBucketCount(SiteEngagementMetrics::kEngagementTypeHistogram,
277 SiteEngagementMetrics::ENGAGEMENT_KEYPRESS, 4);
278 histograms.ExpectBucketCount(SiteEngagementMetrics::kEngagementTypeHistogram,
279 SiteEngagementMetrics::ENGAGEMENT_MOUSE, 5);
249 } 280 }
250 281
251 IN_PROC_BROWSER_TEST_F(SiteEngagementServiceBrowserTest, 282 IN_PROC_BROWSER_TEST_F(SiteEngagementServiceBrowserTest,
252 CheckTimer) { 283 CheckTimer) {
253 GURL url1("https://www.google.com/"); 284 GURL url1("https://www.google.com/");
254 GURL url2("http://www.google.com/"); 285 GURL url2("http://www.google.com/");
255 content::WebContents* web_contents = 286 content::WebContents* web_contents =
256 browser()->tab_strip_model()->GetActiveWebContents(); 287 browser()->tab_strip_model()->GetActiveWebContents();
257 288
258 scoped_ptr<base::MockTimer> mock_timer(new base::MockTimer(true, false)); 289 scoped_ptr<base::MockTimer> mock_timer(new base::MockTimer(true, false));
(...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after
477 508
478 // Timer runs after input is recorded, and after it fires the callbacks are 509 // Timer runs after input is recorded, and after it fires the callbacks are
479 // added. 510 // added.
480 EXPECT_FALSE(CallbacksAdded(helper.get())); 511 EXPECT_FALSE(CallbacksAdded(helper.get()));
481 EXPECT_TRUE(timer->IsRunning()); 512 EXPECT_TRUE(timer->IsRunning());
482 timer->Fire(); 513 timer->Fire();
483 EXPECT_FALSE(timer->IsRunning()); 514 EXPECT_FALSE(timer->IsRunning());
484 EXPECT_TRUE(CallbacksAdded(helper.get())); 515 EXPECT_TRUE(CallbacksAdded(helper.get()));
485 } 516 }
486 } 517 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698