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 "remoting/host/touch_injector_win.h" | 5 #include "remoting/host/touch_injector_win.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 #include <stdint.h> | 8 #include <stdint.h> |
9 | 9 |
10 #include <map> | 10 #include <map> |
| 11 #include <utility> |
11 | 12 |
12 #include "base/stl_util.h" | 13 #include "base/stl_util.h" |
13 #include "remoting/proto/event.pb.h" | 14 #include "remoting/proto/event.pb.h" |
14 #include "testing/gmock/include/gmock/gmock.h" | 15 #include "testing/gmock/include/gmock/gmock.h" |
15 #include "testing/gtest/include/gtest/gtest.h" | 16 #include "testing/gtest/include/gtest/gtest.h" |
16 | 17 |
17 using ::testing::_; | 18 using ::testing::_; |
18 using ::testing::AtLeast; | 19 using ::testing::AtLeast; |
19 using ::testing::InSequence; | 20 using ::testing::InSequence; |
20 using ::testing::ExpectationSet; | 21 using ::testing::ExpectationSet; |
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
132 InjectTouchInput(1, EqualsSinglePointerTouchInfo(expected_touch_info))) | 133 InjectTouchInput(1, EqualsSinglePointerTouchInfo(expected_touch_info))) |
133 .WillOnce(Return(1)); | 134 .WillOnce(Return(1)); |
134 | 135 |
135 expected_touch_info.pressure = 0; // Min | 136 expected_touch_info.pressure = 0; // Min |
136 EXPECT_CALL( | 137 EXPECT_CALL( |
137 *delegate_mock, | 138 *delegate_mock, |
138 InjectTouchInput(1, EqualsSinglePointerTouchInfo(expected_touch_info))) | 139 InjectTouchInput(1, EqualsSinglePointerTouchInfo(expected_touch_info))) |
139 .WillOnce(Return(1)); | 140 .WillOnce(Return(1)); |
140 | 141 |
141 TouchInjectorWin injector; | 142 TouchInjectorWin injector; |
142 injector.SetInjectorDelegateForTest(delegate_mock.Pass()); | 143 injector.SetInjectorDelegateForTest(std::move(delegate_mock)); |
143 EXPECT_TRUE(injector.Init()); | 144 EXPECT_TRUE(injector.Init()); |
144 injector.InjectTouchEvent(event); | 145 injector.InjectTouchEvent(event); |
145 | 146 |
146 // Change to MOVE so that there still only one point. | 147 // Change to MOVE so that there still only one point. |
147 event.set_event_type(TouchEvent::TOUCH_POINT_MOVE); | 148 event.set_event_type(TouchEvent::TOUCH_POINT_MOVE); |
148 point->set_pressure(2.0f); | 149 point->set_pressure(2.0f); |
149 injector.InjectTouchEvent(event); | 150 injector.InjectTouchEvent(event); |
150 | 151 |
151 point->set_pressure(-3.0f); | 152 point->set_pressure(-3.0f); |
152 injector.InjectTouchEvent(event); | 153 injector.InjectTouchEvent(event); |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
186 | 187 |
187 InSequence s; | 188 InSequence s; |
188 EXPECT_CALL(*delegate_mock, InitializeTouchInjection(_, _)) | 189 EXPECT_CALL(*delegate_mock, InitializeTouchInjection(_, _)) |
189 .WillOnce(Return(1)); | 190 .WillOnce(Return(1)); |
190 EXPECT_CALL( | 191 EXPECT_CALL( |
191 *delegate_mock, | 192 *delegate_mock, |
192 InjectTouchInput(1, EqualsSinglePointerTouchInfo(expected_touch_info))) | 193 InjectTouchInput(1, EqualsSinglePointerTouchInfo(expected_touch_info))) |
193 .WillOnce(Return(1)); | 194 .WillOnce(Return(1)); |
194 | 195 |
195 TouchInjectorWin injector; | 196 TouchInjectorWin injector; |
196 injector.SetInjectorDelegateForTest(delegate_mock.Pass()); | 197 injector.SetInjectorDelegateForTest(std::move(delegate_mock)); |
197 EXPECT_TRUE(injector.Init()); | 198 EXPECT_TRUE(injector.Init()); |
198 injector.InjectTouchEvent(event); | 199 injector.InjectTouchEvent(event); |
199 } | 200 } |
200 | 201 |
201 // If initialization fails, it should not call any touch injection functions. | 202 // If initialization fails, it should not call any touch injection functions. |
202 TEST(TouchInjectorWinTest, InitFailed) { | 203 TEST(TouchInjectorWinTest, InitFailed) { |
203 scoped_ptr<TouchInjectorWinDelegateMock> delegate_mock( | 204 scoped_ptr<TouchInjectorWinDelegateMock> delegate_mock( |
204 new ::testing::StrictMock<TouchInjectorWinDelegateMock>()); | 205 new ::testing::StrictMock<TouchInjectorWinDelegateMock>()); |
205 | 206 |
206 TouchEvent event; | 207 TouchEvent event; |
207 event.set_event_type(TouchEvent::TOUCH_POINT_START); | 208 event.set_event_type(TouchEvent::TOUCH_POINT_START); |
208 | 209 |
209 InSequence s; | 210 InSequence s; |
210 EXPECT_CALL(*delegate_mock, InitializeTouchInjection(_, _)) | 211 EXPECT_CALL(*delegate_mock, InitializeTouchInjection(_, _)) |
211 .WillOnce(Return(0)); | 212 .WillOnce(Return(0)); |
212 EXPECT_CALL(*delegate_mock, InjectTouchInput(_, _)).Times(0); | 213 EXPECT_CALL(*delegate_mock, InjectTouchInput(_, _)).Times(0); |
213 | 214 |
214 TouchInjectorWin injector; | 215 TouchInjectorWin injector; |
215 injector.SetInjectorDelegateForTest(delegate_mock.Pass()); | 216 injector.SetInjectorDelegateForTest(std::move(delegate_mock)); |
216 EXPECT_FALSE(injector.Init()); | 217 EXPECT_FALSE(injector.Init()); |
217 injector.InjectTouchEvent(event); | 218 injector.InjectTouchEvent(event); |
218 } | 219 } |
219 | 220 |
220 // Deinitialize and initialize should clean the state. | 221 // Deinitialize and initialize should clean the state. |
221 TEST(TouchInjectorWinTest, Reinitialize) { | 222 TEST(TouchInjectorWinTest, Reinitialize) { |
222 scoped_ptr<TouchInjectorWinDelegateMock> delegate_mock_before_deinitialize( | 223 scoped_ptr<TouchInjectorWinDelegateMock> delegate_mock_before_deinitialize( |
223 new ::testing::StrictMock<TouchInjectorWinDelegateMock>()); | 224 new ::testing::StrictMock<TouchInjectorWinDelegateMock>()); |
224 scoped_ptr<TouchInjectorWinDelegateMock> delegate_mock_after_deinitialize( | 225 scoped_ptr<TouchInjectorWinDelegateMock> delegate_mock_after_deinitialize( |
225 new ::testing::StrictMock<TouchInjectorWinDelegateMock>()); | 226 new ::testing::StrictMock<TouchInjectorWinDelegateMock>()); |
(...skipping 25 matching lines...) Expand all Loading... |
251 // After deinitializing and then initializing, previous touch points should be | 252 // After deinitializing and then initializing, previous touch points should be |
252 // gone. | 253 // gone. |
253 id_to_flags.clear(); | 254 id_to_flags.clear(); |
254 id_to_flags[1u] = kStartFlag; | 255 id_to_flags[1u] = kStartFlag; |
255 EXPECT_CALL( | 256 EXPECT_CALL( |
256 *delegate_mock_after_deinitialize, | 257 *delegate_mock_after_deinitialize, |
257 InjectTouchInput(1, EqualsPointerTouchInfoFlag(id_to_flags))) | 258 InjectTouchInput(1, EqualsPointerTouchInfoFlag(id_to_flags))) |
258 .WillOnce(Return(1)); | 259 .WillOnce(Return(1)); |
259 | 260 |
260 TouchInjectorWin injector; | 261 TouchInjectorWin injector; |
261 injector.SetInjectorDelegateForTest(delegate_mock_before_deinitialize.Pass()); | 262 injector.SetInjectorDelegateForTest( |
| 263 std::move(delegate_mock_before_deinitialize)); |
262 | 264 |
263 EXPECT_TRUE(injector.Init()); | 265 EXPECT_TRUE(injector.Init()); |
264 injector.InjectTouchEvent(first_event); | 266 injector.InjectTouchEvent(first_event); |
265 injector.Deinitialize(); | 267 injector.Deinitialize(); |
266 | 268 |
267 injector.SetInjectorDelegateForTest(delegate_mock_after_deinitialize.Pass()); | 269 injector.SetInjectorDelegateForTest( |
| 270 std::move(delegate_mock_after_deinitialize)); |
268 EXPECT_TRUE(injector.Init()); | 271 EXPECT_TRUE(injector.Init()); |
269 injector.InjectTouchEvent(second_event); | 272 injector.InjectTouchEvent(second_event); |
270 } | 273 } |
271 | 274 |
272 // Make sure that the flag is set to kStartFlag. | 275 // Make sure that the flag is set to kStartFlag. |
273 TEST(TouchInjectorWinTest, StartTouchPoint) { | 276 TEST(TouchInjectorWinTest, StartTouchPoint) { |
274 scoped_ptr<TouchInjectorWinDelegateMock> delegate_mock( | 277 scoped_ptr<TouchInjectorWinDelegateMock> delegate_mock( |
275 new ::testing::StrictMock<TouchInjectorWinDelegateMock>()); | 278 new ::testing::StrictMock<TouchInjectorWinDelegateMock>()); |
276 | 279 |
277 TouchEvent event; | 280 TouchEvent event; |
278 event.set_event_type(TouchEvent::TOUCH_POINT_START); | 281 event.set_event_type(TouchEvent::TOUCH_POINT_START); |
279 TouchEventPoint* point = event.add_touch_points(); | 282 TouchEventPoint* point = event.add_touch_points(); |
280 point->set_id(0u); | 283 point->set_id(0u); |
281 | 284 |
282 InSequence s; | 285 InSequence s; |
283 EXPECT_CALL(*delegate_mock, InitializeTouchInjection(_, _)) | 286 EXPECT_CALL(*delegate_mock, InitializeTouchInjection(_, _)) |
284 .WillOnce(Return(1)); | 287 .WillOnce(Return(1)); |
285 | 288 |
286 IdFlagMap id_to_flags; | 289 IdFlagMap id_to_flags; |
287 id_to_flags[0u] = kStartFlag; | 290 id_to_flags[0u] = kStartFlag; |
288 EXPECT_CALL( | 291 EXPECT_CALL( |
289 *delegate_mock, | 292 *delegate_mock, |
290 InjectTouchInput(1, EqualsPointerTouchInfoFlag(id_to_flags))) | 293 InjectTouchInput(1, EqualsPointerTouchInfoFlag(id_to_flags))) |
291 .WillOnce(Return(1)); | 294 .WillOnce(Return(1)); |
292 | 295 |
293 TouchInjectorWin injector; | 296 TouchInjectorWin injector; |
294 injector.SetInjectorDelegateForTest(delegate_mock.Pass()); | 297 injector.SetInjectorDelegateForTest(std::move(delegate_mock)); |
295 EXPECT_TRUE(injector.Init()); | 298 EXPECT_TRUE(injector.Init()); |
296 injector.InjectTouchEvent(event); | 299 injector.InjectTouchEvent(event); |
297 } | 300 } |
298 | 301 |
299 // Start a point and then move, make sure the flag is set to kMoveFlag. | 302 // Start a point and then move, make sure the flag is set to kMoveFlag. |
300 TEST(TouchInjectorWinTest, MoveTouchPoint) { | 303 TEST(TouchInjectorWinTest, MoveTouchPoint) { |
301 scoped_ptr<TouchInjectorWinDelegateMock> delegate_mock( | 304 scoped_ptr<TouchInjectorWinDelegateMock> delegate_mock( |
302 new ::testing::StrictMock<TouchInjectorWinDelegateMock>()); | 305 new ::testing::StrictMock<TouchInjectorWinDelegateMock>()); |
303 | 306 |
304 TouchEvent event; | 307 TouchEvent event; |
(...skipping 13 matching lines...) Expand all Loading... |
318 InjectTouchInput(1, EqualsPointerTouchInfoFlag(id_to_flags))) | 321 InjectTouchInput(1, EqualsPointerTouchInfoFlag(id_to_flags))) |
319 .WillOnce(Return(1)); | 322 .WillOnce(Return(1)); |
320 | 323 |
321 id_to_flags[0u] = kMoveFlag; | 324 id_to_flags[0u] = kMoveFlag; |
322 EXPECT_CALL( | 325 EXPECT_CALL( |
323 *delegate_mock, | 326 *delegate_mock, |
324 InjectTouchInput(1, EqualsPointerTouchInfoFlag(id_to_flags))) | 327 InjectTouchInput(1, EqualsPointerTouchInfoFlag(id_to_flags))) |
325 .WillOnce(Return(1)); | 328 .WillOnce(Return(1)); |
326 | 329 |
327 TouchInjectorWin injector; | 330 TouchInjectorWin injector; |
328 injector.SetInjectorDelegateForTest(delegate_mock.Pass()); | 331 injector.SetInjectorDelegateForTest(std::move(delegate_mock)); |
329 EXPECT_TRUE(injector.Init()); | 332 EXPECT_TRUE(injector.Init()); |
330 injector.InjectTouchEvent(event); | 333 injector.InjectTouchEvent(event); |
331 event.set_event_type(TouchEvent::TOUCH_POINT_MOVE); | 334 event.set_event_type(TouchEvent::TOUCH_POINT_MOVE); |
332 injector.InjectTouchEvent(event); | 335 injector.InjectTouchEvent(event); |
333 } | 336 } |
334 | 337 |
335 // Start a point and then move, make sure the flag is set to kEndFlag. | 338 // Start a point and then move, make sure the flag is set to kEndFlag. |
336 TEST(TouchInjectorWinTest, EndTouchPoint) { | 339 TEST(TouchInjectorWinTest, EndTouchPoint) { |
337 scoped_ptr<TouchInjectorWinDelegateMock> delegate_mock( | 340 scoped_ptr<TouchInjectorWinDelegateMock> delegate_mock( |
338 new ::testing::StrictMock<TouchInjectorWinDelegateMock>()); | 341 new ::testing::StrictMock<TouchInjectorWinDelegateMock>()); |
(...skipping 14 matching lines...) Expand all Loading... |
353 InjectTouchInput(1, EqualsPointerTouchInfoFlag(id_to_flags))) | 356 InjectTouchInput(1, EqualsPointerTouchInfoFlag(id_to_flags))) |
354 .WillOnce(Return(1)); | 357 .WillOnce(Return(1)); |
355 | 358 |
356 id_to_flags[0u] = kEndFlag; | 359 id_to_flags[0u] = kEndFlag; |
357 EXPECT_CALL( | 360 EXPECT_CALL( |
358 *delegate_mock, | 361 *delegate_mock, |
359 InjectTouchInput(1, EqualsPointerTouchInfoFlag(id_to_flags))) | 362 InjectTouchInput(1, EqualsPointerTouchInfoFlag(id_to_flags))) |
360 .WillOnce(Return(1)); | 363 .WillOnce(Return(1)); |
361 | 364 |
362 TouchInjectorWin injector; | 365 TouchInjectorWin injector; |
363 injector.SetInjectorDelegateForTest(delegate_mock.Pass()); | 366 injector.SetInjectorDelegateForTest(std::move(delegate_mock)); |
364 EXPECT_TRUE(injector.Init()); | 367 EXPECT_TRUE(injector.Init()); |
365 injector.InjectTouchEvent(event); | 368 injector.InjectTouchEvent(event); |
366 event.set_event_type(TouchEvent::TOUCH_POINT_END); | 369 event.set_event_type(TouchEvent::TOUCH_POINT_END); |
367 injector.InjectTouchEvent(event); | 370 injector.InjectTouchEvent(event); |
368 } | 371 } |
369 | 372 |
370 // Start a point and then move, make sure the flag is set to kCancelFlag. | 373 // Start a point and then move, make sure the flag is set to kCancelFlag. |
371 TEST(TouchInjectorWinTest, CancelTouchPoint) { | 374 TEST(TouchInjectorWinTest, CancelTouchPoint) { |
372 scoped_ptr<TouchInjectorWinDelegateMock> delegate_mock( | 375 scoped_ptr<TouchInjectorWinDelegateMock> delegate_mock( |
373 new ::testing::StrictMock<TouchInjectorWinDelegateMock>()); | 376 new ::testing::StrictMock<TouchInjectorWinDelegateMock>()); |
(...skipping 14 matching lines...) Expand all Loading... |
388 InjectTouchInput(1, EqualsPointerTouchInfoFlag(id_to_flags))) | 391 InjectTouchInput(1, EqualsPointerTouchInfoFlag(id_to_flags))) |
389 .WillOnce(Return(1)); | 392 .WillOnce(Return(1)); |
390 | 393 |
391 id_to_flags[0u] = kCancelFlag; | 394 id_to_flags[0u] = kCancelFlag; |
392 EXPECT_CALL( | 395 EXPECT_CALL( |
393 *delegate_mock, | 396 *delegate_mock, |
394 InjectTouchInput(1, EqualsPointerTouchInfoFlag(id_to_flags))) | 397 InjectTouchInput(1, EqualsPointerTouchInfoFlag(id_to_flags))) |
395 .WillOnce(Return(1)); | 398 .WillOnce(Return(1)); |
396 | 399 |
397 TouchInjectorWin injector; | 400 TouchInjectorWin injector; |
398 injector.SetInjectorDelegateForTest(delegate_mock.Pass()); | 401 injector.SetInjectorDelegateForTest(std::move(delegate_mock)); |
399 EXPECT_TRUE(injector.Init()); | 402 EXPECT_TRUE(injector.Init()); |
400 injector.InjectTouchEvent(event); | 403 injector.InjectTouchEvent(event); |
401 event.set_event_type(TouchEvent::TOUCH_POINT_CANCEL); | 404 event.set_event_type(TouchEvent::TOUCH_POINT_CANCEL); |
402 injector.InjectTouchEvent(event); | 405 injector.InjectTouchEvent(event); |
403 } | 406 } |
404 | 407 |
405 // Note that points that haven't changed should be injected as MOVE. | 408 // Note that points that haven't changed should be injected as MOVE. |
406 // This tests: | 409 // This tests: |
407 // 1. Start first touch point. | 410 // 1. Start first touch point. |
408 // 2. Start second touch point. | 411 // 2. Start second touch point. |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
457 | 460 |
458 id_to_flags.erase(1u); | 461 id_to_flags.erase(1u); |
459 id_to_flags[0u] = kCancelFlag; | 462 id_to_flags[0u] = kCancelFlag; |
460 id_to_flags[2u] = kCancelFlag; | 463 id_to_flags[2u] = kCancelFlag; |
461 EXPECT_CALL( | 464 EXPECT_CALL( |
462 *delegate_mock, | 465 *delegate_mock, |
463 InjectTouchInput(2, EqualsPointerTouchInfoFlag(id_to_flags))) | 466 InjectTouchInput(2, EqualsPointerTouchInfoFlag(id_to_flags))) |
464 .WillOnce(Return(1)); | 467 .WillOnce(Return(1)); |
465 | 468 |
466 TouchInjectorWin injector; | 469 TouchInjectorWin injector; |
467 injector.SetInjectorDelegateForTest(delegate_mock.Pass()); | 470 injector.SetInjectorDelegateForTest(std::move(delegate_mock)); |
468 EXPECT_TRUE(injector.Init()); | 471 EXPECT_TRUE(injector.Init()); |
469 | 472 |
470 // Start first touch point. | 473 // Start first touch point. |
471 TouchEvent first_touch_start; | 474 TouchEvent first_touch_start; |
472 first_touch_start.set_event_type(TouchEvent::TOUCH_POINT_START); | 475 first_touch_start.set_event_type(TouchEvent::TOUCH_POINT_START); |
473 TouchEventPoint* point0 = first_touch_start.add_touch_points(); | 476 TouchEventPoint* point0 = first_touch_start.add_touch_points(); |
474 point0->set_id(0u); | 477 point0->set_id(0u); |
475 injector.InjectTouchEvent(first_touch_start); | 478 injector.InjectTouchEvent(first_touch_start); |
476 | 479 |
477 // Add second touch point. | 480 // Add second touch point. |
(...skipping 30 matching lines...) Expand all Loading... |
508 TouchEvent cancel_rest; | 511 TouchEvent cancel_rest; |
509 cancel_rest.set_event_type(TouchEvent::TOUCH_POINT_CANCEL); | 512 cancel_rest.set_event_type(TouchEvent::TOUCH_POINT_CANCEL); |
510 point0 = cancel_rest.add_touch_points(); | 513 point0 = cancel_rest.add_touch_points(); |
511 point0->set_id(0u); | 514 point0->set_id(0u); |
512 point2 = cancel_rest.add_touch_points(); | 515 point2 = cancel_rest.add_touch_points(); |
513 point2->set_id(2u); | 516 point2->set_id(2u); |
514 injector.InjectTouchEvent(cancel_rest); | 517 injector.InjectTouchEvent(cancel_rest); |
515 } | 518 } |
516 | 519 |
517 } // namespace remoting | 520 } // namespace remoting |
OLD | NEW |