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

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

Issue 1338603002: Implement a site engagement score based on time-on-site. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Remove flaky input simulation tests and combine callback and timer testing 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
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "base/command_line.h"
6 #include "base/timer/mock_timer.h"
7 #include "base/values.h"
8 #include "chrome/browser/engagement/site_engagement_helper.h"
9 #include "chrome/browser/engagement/site_engagement_service.h"
10 #include "chrome/browser/engagement/site_engagement_service_factory.h"
11 #include "chrome/browser/ui/browser.h"
12 #include "chrome/browser/ui/tabs/tab_strip_model.h"
13 #include "chrome/common/chrome_switches.h"
14 #include "chrome/test/base/in_process_browser_test.h"
15 #include "chrome/test/base/ui_test_utils.h"
16 #include "content/public/test/browser_test_utils.h"
17 #include "testing/gtest/include/gtest/gtest.h"
18 #include "ui/events/keycodes/keyboard_codes.h"
19
20 class SiteEngagementServiceBrowserTest : public InProcessBrowserTest {
21 public:
22 // Create a SiteEngagementHelper. Called here as friend class methods cannot
23 // be called in tests.
24 scoped_ptr<SiteEngagementHelper> CreateHelper(
25 content::WebContents* web_contents) {
26 scoped_ptr<SiteEngagementHelper> helper(
27 new SiteEngagementHelper(web_contents));
28 DCHECK(helper.get());
29
30 return helper.Pass();
31 }
32
33 // Simulate a key press event and handle it.
34 void HandleKeyPress(SiteEngagementHelper* helper, ui::KeyboardCode key) {
35 content::NativeWebKeyboardEvent event;
36 event.windowsKeyCode = key;
37 event.type = blink::WebKeyboardEvent::RawKeyDown;
38 helper->input_tracker_.HandleKeyPressEvent(event);
39 }
40
41 // Simulate a mouse event and handle it.
42 void HandleMouseEvent(SiteEngagementHelper* helper,
43 blink::WebMouseEvent::Button button,
44 blink::WebInputEvent::Type type) {
45 blink::WebMouseEvent event;
46 event.button = button;
47 event.type = type;
48 helper->input_tracker_.HandleMouseEvent(event);
49 }
50
51 // Set a timer object for test purposes.
52 void SetHelperTimer(SiteEngagementHelper* helper,
53 scoped_ptr<base::Timer> timer) {
54 helper->input_tracker_.SetTimerForTesting(timer.Pass());
55 }
56
57 bool CallbacksAdded(SiteEngagementHelper* helper) {
58 return helper->input_tracker_.callbacks_added();
59 }
60 };
61
62 IN_PROC_BROWSER_TEST_F(SiteEngagementServiceBrowserTest,
63 KeyPressEngagementAccumulation) {
64 GURL url1("https://www.google.com/");
65 GURL url2("http://www.google.com/");
66 content::WebContents* web_contents =
67 browser()->tab_strip_model()->GetActiveWebContents();
68
69 scoped_ptr<SiteEngagementHelper> helper(CreateHelper(web_contents));
70 SiteEngagementService* service =
71 SiteEngagementServiceFactory::GetForProfile(browser()->profile());
72 DCHECK(service);
73
74 // Check that navigation triggers engagement.
75 ui_test_utils::NavigateToURL(browser(), url1);
76 EXPECT_DOUBLE_EQ(0.5, service->GetScore(url1));
77 EXPECT_EQ(0, service->GetScore(url2));
78
79 // Simulate a key press trigger and ensure it is treated correctly.
80 HandleKeyPress(helper.get(), ui::VKEY_DOWN);
81
82 EXPECT_DOUBLE_EQ(0.55, service->GetScore(url1));
83 EXPECT_EQ(0, service->GetScore(url2));
84
85 // Simulate three key presses, and ensure they are treated correctly.
86 HandleKeyPress(helper.get(), ui::VKEY_UP);
87 HandleKeyPress(helper.get(), ui::VKEY_RETURN);
88 HandleKeyPress(helper.get(), ui::VKEY_J);
89
90 EXPECT_DOUBLE_EQ(0.7, service->GetScore(url1));
91 EXPECT_EQ(0, service->GetScore(url2));
92
93 // Simulate key presses for a different link.
94 ui_test_utils::NavigateToURL(browser(), url2);
95
96 EXPECT_DOUBLE_EQ(0.7, service->GetScore(url1));
97 EXPECT_DOUBLE_EQ(0.5, service->GetScore(url2));
98 EXPECT_DOUBLE_EQ(1.2, service->GetTotalEngagementPoints());
99
100 HandleKeyPress(helper.get(), ui::VKEY_K);
101 EXPECT_DOUBLE_EQ(0.7, service->GetScore(url1));
102 EXPECT_DOUBLE_EQ(0.55, service->GetScore(url2));
103 EXPECT_DOUBLE_EQ(1.25, service->GetTotalEngagementPoints());
104 }
105
106 IN_PROC_BROWSER_TEST_F(SiteEngagementServiceBrowserTest,
107 MouseEventEngagementAccumulation) {
108 GURL url1("https://www.google.com/");
109 GURL url2("http://www.google.com/");
110 content::WebContents* web_contents =
111 browser()->tab_strip_model()->GetActiveWebContents();
112
113 scoped_ptr<SiteEngagementHelper> helper(CreateHelper(web_contents));
114 SiteEngagementService* service =
115 SiteEngagementServiceFactory::GetForProfile(browser()->profile());
116 DCHECK(service);
117
118 ui_test_utils::NavigateToURL(browser(), url1);
119 EXPECT_DOUBLE_EQ(0.5, service->GetScore(url1));
120 EXPECT_EQ(0, service->GetScore(url2));
121
122 HandleMouseEvent(helper.get(), blink::WebMouseEvent::ButtonLeft,
123 blink::WebInputEvent::MouseDown);
124
125 EXPECT_DOUBLE_EQ(0.55, service->GetScore(url1));
126 EXPECT_EQ(0, service->GetScore(url2));
127
128 HandleMouseEvent(helper.get(), blink::WebMouseEvent::ButtonRight,
129 blink::WebInputEvent::MouseWheel);
130 HandleMouseEvent(helper.get(), blink::WebMouseEvent::ButtonMiddle,
131 blink::WebInputEvent::MouseDown);
132 HandleMouseEvent(helper.get(), blink::WebMouseEvent::ButtonLeft,
133 blink::WebInputEvent::MouseDown);
134
135 EXPECT_DOUBLE_EQ(0.7, service->GetScore(url1));
136 EXPECT_EQ(0, service->GetScore(url2));
137
138 ui_test_utils::NavigateToURL(browser(), url2);
139
140 EXPECT_DOUBLE_EQ(0.7, service->GetScore(url1));
141 EXPECT_DOUBLE_EQ(0.5, service->GetScore(url2));
142 EXPECT_DOUBLE_EQ(1.2, service->GetTotalEngagementPoints());
143
144 HandleMouseEvent(helper.get(), blink::WebMouseEvent::ButtonLeft,
145 blink::WebInputEvent::MouseDown);
146 EXPECT_DOUBLE_EQ(0.7, service->GetScore(url1));
147 EXPECT_DOUBLE_EQ(0.55, service->GetScore(url2));
148 EXPECT_DOUBLE_EQ(1.25, service->GetTotalEngagementPoints());
149 }
150
151 IN_PROC_BROWSER_TEST_F(SiteEngagementServiceBrowserTest,
152 MixedInputEngagementAccumulation) {
153 GURL url1("https://www.google.com/");
154 GURL url2("http://www.google.com/");
155 content::WebContents* web_contents =
156 browser()->tab_strip_model()->GetActiveWebContents();
157
158 scoped_ptr<SiteEngagementHelper> helper(CreateHelper(web_contents));
159 SiteEngagementService* service =
160 SiteEngagementServiceFactory::GetForProfile(browser()->profile());
161 DCHECK(service);
162
163 ui_test_utils::NavigateToURL(browser(), url1);
164 EXPECT_DOUBLE_EQ(0.5, service->GetScore(url1));
165 EXPECT_EQ(0, service->GetScore(url2));
166
167 HandleKeyPress(helper.get(), ui::VKEY_UP);
168 HandleKeyPress(helper.get(), ui::VKEY_RETURN);
169 HandleKeyPress(helper.get(), ui::VKEY_J);
170
171 HandleMouseEvent(helper.get(), blink::WebMouseEvent::ButtonLeft,
172 blink::WebInputEvent::MouseDown);
173
174 EXPECT_DOUBLE_EQ(0.7, service->GetScore(url1));
175 EXPECT_EQ(0, service->GetScore(url2));
176
177 HandleMouseEvent(helper.get(), blink::WebMouseEvent::ButtonRight,
178 blink::WebInputEvent::MouseDown);
179 HandleMouseEvent(helper.get(), blink::WebMouseEvent::ButtonMiddle,
180 blink::WebInputEvent::MouseDown);
181 HandleMouseEvent(helper.get(), blink::WebMouseEvent::ButtonNone,
182 blink::WebInputEvent::MouseWheel);
183
184 EXPECT_DOUBLE_EQ(0.85, service->GetScore(url1));
185 EXPECT_EQ(0, service->GetScore(url2));
186
187 ui_test_utils::NavigateToURL(browser(), url2);
188
189 EXPECT_DOUBLE_EQ(0.85, service->GetScore(url1));
190 EXPECT_DOUBLE_EQ(0.5, service->GetScore(url2));
191 EXPECT_DOUBLE_EQ(1.35, service->GetTotalEngagementPoints());
192
193 HandleMouseEvent(helper.get(), blink::WebMouseEvent::ButtonNone,
194 blink::WebInputEvent::MouseWheel);
195 HandleKeyPress(helper.get(), ui::VKEY_DOWN);
196
197 EXPECT_DOUBLE_EQ(0.85, service->GetScore(url1));
198 EXPECT_DOUBLE_EQ(0.6, service->GetScore(url2));
199 EXPECT_DOUBLE_EQ(1.45, service->GetTotalEngagementPoints());
200 }
201
202 IN_PROC_BROWSER_TEST_F(SiteEngagementServiceBrowserTest,
203 CheckTimerAndCallbacks) {
204 GURL url1("https://www.google.com/");
205 GURL url2("http://www.google.com/");
206 content::WebContents* web_contents =
207 browser()->tab_strip_model()->GetActiveWebContents();
208
209 scoped_ptr<base::MockTimer> mock_timer(new base::MockTimer(true, false));
210 base::MockTimer* timer = mock_timer.get();
211 scoped_ptr<SiteEngagementHelper> helper(CreateHelper(web_contents));
212 SetHelperTimer(helper.get(), mock_timer.Pass());
213
214 SiteEngagementService* service =
215 SiteEngagementServiceFactory::GetForProfile(browser()->profile());
216 DCHECK(service);
217
218 ui_test_utils::NavigateToURL(browser(), url1);
219 EXPECT_DOUBLE_EQ(0.5, service->GetScore(url1));
220 EXPECT_EQ(0, service->GetScore(url2));
221
222 // Timer should not be running after navigation. It should start after input.
223 EXPECT_FALSE(timer->IsRunning());
224 EXPECT_TRUE(CallbacksAdded(helper.get()));
225 HandleKeyPress(helper.get(), ui::VKEY_RETURN);
226 EXPECT_TRUE(timer->IsRunning());
227 EXPECT_FALSE(CallbacksAdded(helper.get()));
228
229 EXPECT_DOUBLE_EQ(0.55, service->GetScore(url1));
230 EXPECT_EQ(0, service->GetScore(url2));
231 timer->Fire();
232
233 EXPECT_FALSE(timer->IsRunning());
234 EXPECT_TRUE(CallbacksAdded(helper.get()));
235 HandleMouseEvent(helper.get(), blink::WebMouseEvent::ButtonNone,
236 blink::WebInputEvent::MouseWheel);
237 EXPECT_TRUE(timer->IsRunning());
238 EXPECT_FALSE(CallbacksAdded(helper.get()));
239
240 EXPECT_DOUBLE_EQ(0.6, service->GetScore(url1));
241 EXPECT_EQ(0, service->GetScore(url2));
242 timer->Fire();
243
244 EXPECT_FALSE(timer->IsRunning());
245 EXPECT_TRUE(CallbacksAdded(helper.get()));
246 ui_test_utils::NavigateToURL(browser(), url2);
247 EXPECT_FALSE(timer->IsRunning());
248 EXPECT_TRUE(CallbacksAdded(helper.get()));
249
250 EXPECT_DOUBLE_EQ(0.6, service->GetScore(url1));
251 EXPECT_DOUBLE_EQ(0.5, service->GetScore(url2));
252
253 HandleMouseEvent(helper.get(), blink::WebMouseEvent::ButtonRight,
254 blink::WebInputEvent::MouseDown);
255 EXPECT_TRUE(timer->IsRunning());
256 EXPECT_FALSE(CallbacksAdded(helper.get()));
257
258 EXPECT_DOUBLE_EQ(0.6, service->GetScore(url1));
259 EXPECT_DOUBLE_EQ(0.55, service->GetScore(url2));
260 EXPECT_DOUBLE_EQ(1.15, service->GetTotalEngagementPoints());
261 }
OLDNEW
« no previous file with comments | « chrome/browser/engagement/site_engagement_service.cc ('k') | chrome/browser/engagement/site_engagement_service_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698