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