| 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 |