OLD | NEW |
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 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/bind.h" | 5 #include "base/bind.h" |
6 #include "base/bind_helpers.h" | 6 #include "base/bind_helpers.h" |
7 #include "base/callback.h" | 7 #include "base/callback.h" |
8 #include "base/memory/ref_counted.h" | 8 #include "base/memory/ref_counted.h" |
9 #include "base/memory/scoped_ptr.h" | 9 #include "base/memory/scoped_ptr.h" |
10 #include "base/message_loop.h" | 10 #include "base/message_loop.h" |
(...skipping 14 matching lines...) Expand all Loading... |
25 #include "remoting/host/desktop_process.h" | 25 #include "remoting/host/desktop_process.h" |
26 #include "remoting/host/desktop_session.h" | 26 #include "remoting/host/desktop_session.h" |
27 #include "remoting/host/desktop_session_connector.h" | 27 #include "remoting/host/desktop_session_connector.h" |
28 #include "remoting/host/desktop_session_proxy.h" | 28 #include "remoting/host/desktop_session_proxy.h" |
29 #include "remoting/host/host_mock_objects.h" | 29 #include "remoting/host/host_mock_objects.h" |
30 #include "remoting/host/ipc_desktop_environment.h" | 30 #include "remoting/host/ipc_desktop_environment.h" |
31 #include "remoting/protocol/protocol_mock_objects.h" | 31 #include "remoting/protocol/protocol_mock_objects.h" |
32 #include "testing/gmock/include/gmock/gmock.h" | 32 #include "testing/gmock/include/gmock/gmock.h" |
33 #include "testing/gtest/include/gtest/gtest.h" | 33 #include "testing/gtest/include/gtest/gtest.h" |
34 #include "third_party/skia/include/core/SkRegion.h" | 34 #include "third_party/skia/include/core/SkRegion.h" |
| 35 #include "third_party/webrtc/modules/desktop_capture/desktop_geometry.h" |
| 36 #include "third_party/webrtc/modules/desktop_capture/desktop_region.h" |
35 | 37 |
36 using testing::_; | 38 using testing::_; |
37 using testing::AnyNumber; | 39 using testing::AnyNumber; |
38 using testing::AtLeast; | 40 using testing::AtLeast; |
39 using testing::AtMost; | 41 using testing::AtMost; |
40 using testing::Return; | 42 using testing::Return; |
41 using testing::ReturnRef; | 43 using testing::ReturnRef; |
42 | 44 |
43 namespace remoting { | 45 namespace remoting { |
44 | 46 |
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
192 | 194 |
193 // Represents the desktop process running in a user session. | 195 // Represents the desktop process running in a user session. |
194 scoped_ptr<DesktopProcess> desktop_process_; | 196 scoped_ptr<DesktopProcess> desktop_process_; |
195 | 197 |
196 // Input injector owned by |desktop_process_|. | 198 // Input injector owned by |desktop_process_|. |
197 MockInputInjector* remote_input_injector_; | 199 MockInputInjector* remote_input_injector_; |
198 | 200 |
199 // The last |terminal_id| passed to ConnectTermina(); | 201 // The last |terminal_id| passed to ConnectTermina(); |
200 int terminal_id_; | 202 int terminal_id_; |
201 | 203 |
202 media::MockScreenCapturerDelegate screen_capturer_delegate_; | 204 media::MockScreenCapturerCallback screen_capturer_callback_; |
203 | 205 |
204 MockClientSessionControl client_session_control_; | 206 MockClientSessionControl client_session_control_; |
205 base::WeakPtrFactory<ClientSessionControl> client_session_control_factory_; | 207 base::WeakPtrFactory<ClientSessionControl> client_session_control_factory_; |
206 }; | 208 }; |
207 | 209 |
208 IpcDesktopEnvironmentTest::IpcDesktopEnvironmentTest() | 210 IpcDesktopEnvironmentTest::IpcDesktopEnvironmentTest() |
209 : message_loop_(base::MessageLoop::TYPE_UI), | 211 : message_loop_(base::MessageLoop::TYPE_UI), |
210 client_jid_("user@domain/rest-of-jid"), | 212 client_jid_("user@domain/rest-of-jid"), |
211 clipboard_stub_(NULL), | 213 clipboard_stub_(NULL), |
212 remote_input_injector_(NULL), | 214 remote_input_injector_(NULL), |
(...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
433 | 435 |
434 // Tests that the video capturer receives a frame over IPC. | 436 // Tests that the video capturer receives a frame over IPC. |
435 TEST_F(IpcDesktopEnvironmentTest, CaptureFrame) { | 437 TEST_F(IpcDesktopEnvironmentTest, CaptureFrame) { |
436 scoped_ptr<protocol::MockClipboardStub> clipboard_stub( | 438 scoped_ptr<protocol::MockClipboardStub> clipboard_stub( |
437 new protocol::MockClipboardStub()); | 439 new protocol::MockClipboardStub()); |
438 EXPECT_CALL(*clipboard_stub, InjectClipboardEvent(_)) | 440 EXPECT_CALL(*clipboard_stub, InjectClipboardEvent(_)) |
439 .Times(0); | 441 .Times(0); |
440 | 442 |
441 // Start the input injector and screen capturer. | 443 // Start the input injector and screen capturer. |
442 input_injector_->Start(clipboard_stub.PassAs<protocol::ClipboardStub>()); | 444 input_injector_->Start(clipboard_stub.PassAs<protocol::ClipboardStub>()); |
443 video_capturer_->Start(&screen_capturer_delegate_); | 445 video_capturer_->Start(&screen_capturer_callback_); |
444 | 446 |
445 // Run the message loop until the desktop is attached. | 447 // Run the message loop until the desktop is attached. |
446 setup_run_loop_->Run(); | 448 setup_run_loop_->Run(); |
447 | 449 |
448 // Input injector should receive no events. | 450 // Input injector should receive no events. |
449 EXPECT_CALL(*remote_input_injector_, InjectClipboardEvent(_)) | 451 EXPECT_CALL(*remote_input_injector_, InjectClipboardEvent(_)) |
450 .Times(0); | 452 .Times(0); |
451 EXPECT_CALL(*remote_input_injector_, InjectKeyEvent(_)) | 453 EXPECT_CALL(*remote_input_injector_, InjectKeyEvent(_)) |
452 .Times(0); | 454 .Times(0); |
453 EXPECT_CALL(*remote_input_injector_, InjectMouseEvent(_)) | 455 EXPECT_CALL(*remote_input_injector_, InjectMouseEvent(_)) |
454 .Times(0); | 456 .Times(0); |
455 | 457 |
456 // Stop the test when the first frame is captured. | 458 // Stop the test when the first frame is captured. |
457 EXPECT_CALL(screen_capturer_delegate_, OnCaptureCompleted(_)) | 459 EXPECT_CALL(screen_capturer_callback_, OnCaptureCompleted(_)) |
458 .WillOnce(InvokeWithoutArgs( | 460 .WillOnce(InvokeWithoutArgs( |
459 this, &IpcDesktopEnvironmentTest::DeleteDesktopEnvironment)); | 461 this, &IpcDesktopEnvironmentTest::DeleteDesktopEnvironment)); |
460 | 462 |
461 // Capture a single frame. | 463 // Capture a single frame. |
462 video_capturer_->CaptureFrame(); | 464 video_capturer_->Capture(webrtc::DesktopRegion()); |
463 | 465 |
464 task_runner_ = NULL; | 466 task_runner_ = NULL; |
465 io_task_runner_ = NULL; | 467 io_task_runner_ = NULL; |
466 main_run_loop_.Run(); | 468 main_run_loop_.Run(); |
467 } | 469 } |
468 | 470 |
469 // Tests that attaching to a new desktop works. | 471 // Tests that attaching to a new desktop works. |
470 TEST_F(IpcDesktopEnvironmentTest, Reattach) { | 472 TEST_F(IpcDesktopEnvironmentTest, Reattach) { |
471 scoped_ptr<protocol::MockClipboardStub> clipboard_stub( | 473 scoped_ptr<protocol::MockClipboardStub> clipboard_stub( |
472 new protocol::MockClipboardStub()); | 474 new protocol::MockClipboardStub()); |
473 EXPECT_CALL(*clipboard_stub, InjectClipboardEvent(_)) | 475 EXPECT_CALL(*clipboard_stub, InjectClipboardEvent(_)) |
474 .Times(0); | 476 .Times(0); |
475 | 477 |
476 // Start the input injector and screen capturer. | 478 // Start the input injector and screen capturer. |
477 input_injector_->Start(clipboard_stub.PassAs<protocol::ClipboardStub>()); | 479 input_injector_->Start(clipboard_stub.PassAs<protocol::ClipboardStub>()); |
478 video_capturer_->Start(&screen_capturer_delegate_); | 480 video_capturer_->Start(&screen_capturer_callback_); |
479 | 481 |
480 // Run the message loop until the desktop is attached. | 482 // Run the message loop until the desktop is attached. |
481 setup_run_loop_->Run(); | 483 setup_run_loop_->Run(); |
482 | 484 |
483 // Create and start a new desktop process object. | 485 // Create and start a new desktop process object. |
484 setup_run_loop_.reset(new base::RunLoop()); | 486 setup_run_loop_.reset(new base::RunLoop()); |
485 DestoyDesktopProcess(); | 487 DestoyDesktopProcess(); |
486 CreateDesktopProcess(); | 488 CreateDesktopProcess(); |
487 setup_run_loop_->Run(); | 489 setup_run_loop_->Run(); |
488 | 490 |
(...skipping 20 matching lines...) Expand all Loading... |
509 clipboard_stub_ = clipboard_stub.get(); | 511 clipboard_stub_ = clipboard_stub.get(); |
510 | 512 |
511 // Stop the test when a clipboard event is received from the desktop process. | 513 // Stop the test when a clipboard event is received from the desktop process. |
512 EXPECT_CALL(*clipboard_stub, InjectClipboardEvent(_)) | 514 EXPECT_CALL(*clipboard_stub, InjectClipboardEvent(_)) |
513 .Times(1) | 515 .Times(1) |
514 .WillOnce(InvokeWithoutArgs( | 516 .WillOnce(InvokeWithoutArgs( |
515 this, &IpcDesktopEnvironmentTest::DeleteDesktopEnvironment)); | 517 this, &IpcDesktopEnvironmentTest::DeleteDesktopEnvironment)); |
516 | 518 |
517 // Start the input injector and screen capturer. | 519 // Start the input injector and screen capturer. |
518 input_injector_->Start(clipboard_stub.PassAs<protocol::ClipboardStub>()); | 520 input_injector_->Start(clipboard_stub.PassAs<protocol::ClipboardStub>()); |
519 video_capturer_->Start(&screen_capturer_delegate_); | 521 video_capturer_->Start(&screen_capturer_callback_); |
520 | 522 |
521 // Run the message loop until the desktop is attached. | 523 // Run the message loop until the desktop is attached. |
522 setup_run_loop_->Run(); | 524 setup_run_loop_->Run(); |
523 | 525 |
524 // Expect a single clipboard event. | 526 // Expect a single clipboard event. |
525 EXPECT_CALL(*remote_input_injector_, InjectClipboardEvent(_)) | 527 EXPECT_CALL(*remote_input_injector_, InjectClipboardEvent(_)) |
526 .Times(1) | 528 .Times(1) |
527 .WillOnce(Invoke(this, | 529 .WillOnce(Invoke(this, |
528 &IpcDesktopEnvironmentTest::ReflectClipboardEvent)); | 530 &IpcDesktopEnvironmentTest::ReflectClipboardEvent)); |
529 EXPECT_CALL(*remote_input_injector_, InjectKeyEvent(_)) | 531 EXPECT_CALL(*remote_input_injector_, InjectKeyEvent(_)) |
(...skipping 14 matching lines...) Expand all Loading... |
544 | 546 |
545 // Tests injection of key events. | 547 // Tests injection of key events. |
546 TEST_F(IpcDesktopEnvironmentTest, InjectKeyEvent) { | 548 TEST_F(IpcDesktopEnvironmentTest, InjectKeyEvent) { |
547 scoped_ptr<protocol::MockClipboardStub> clipboard_stub( | 549 scoped_ptr<protocol::MockClipboardStub> clipboard_stub( |
548 new protocol::MockClipboardStub()); | 550 new protocol::MockClipboardStub()); |
549 EXPECT_CALL(*clipboard_stub, InjectClipboardEvent(_)) | 551 EXPECT_CALL(*clipboard_stub, InjectClipboardEvent(_)) |
550 .Times(0); | 552 .Times(0); |
551 | 553 |
552 // Start the input injector and screen capturer. | 554 // Start the input injector and screen capturer. |
553 input_injector_->Start(clipboard_stub.PassAs<protocol::ClipboardStub>()); | 555 input_injector_->Start(clipboard_stub.PassAs<protocol::ClipboardStub>()); |
554 video_capturer_->Start(&screen_capturer_delegate_); | 556 video_capturer_->Start(&screen_capturer_callback_); |
555 | 557 |
556 // Run the message loop until the desktop is attached. | 558 // Run the message loop until the desktop is attached. |
557 setup_run_loop_->Run(); | 559 setup_run_loop_->Run(); |
558 | 560 |
559 // Expect a single key event. | 561 // Expect a single key event. |
560 EXPECT_CALL(*remote_input_injector_, InjectClipboardEvent(_)) | 562 EXPECT_CALL(*remote_input_injector_, InjectClipboardEvent(_)) |
561 .Times(0); | 563 .Times(0); |
562 EXPECT_CALL(*remote_input_injector_, InjectKeyEvent(_)) | 564 EXPECT_CALL(*remote_input_injector_, InjectKeyEvent(_)) |
563 .Times(AtLeast(1)) | 565 .Times(AtLeast(1)) |
564 .WillRepeatedly(InvokeWithoutArgs( | 566 .WillRepeatedly(InvokeWithoutArgs( |
(...skipping 14 matching lines...) Expand all Loading... |
579 | 581 |
580 // Tests injection of mouse events. | 582 // Tests injection of mouse events. |
581 TEST_F(IpcDesktopEnvironmentTest, InjectMouseEvent) { | 583 TEST_F(IpcDesktopEnvironmentTest, InjectMouseEvent) { |
582 scoped_ptr<protocol::MockClipboardStub> clipboard_stub( | 584 scoped_ptr<protocol::MockClipboardStub> clipboard_stub( |
583 new protocol::MockClipboardStub()); | 585 new protocol::MockClipboardStub()); |
584 EXPECT_CALL(*clipboard_stub, InjectClipboardEvent(_)) | 586 EXPECT_CALL(*clipboard_stub, InjectClipboardEvent(_)) |
585 .Times(0); | 587 .Times(0); |
586 | 588 |
587 // Start the input injector and screen capturer. | 589 // Start the input injector and screen capturer. |
588 input_injector_->Start(clipboard_stub.PassAs<protocol::ClipboardStub>()); | 590 input_injector_->Start(clipboard_stub.PassAs<protocol::ClipboardStub>()); |
589 video_capturer_->Start(&screen_capturer_delegate_); | 591 video_capturer_->Start(&screen_capturer_callback_); |
590 | 592 |
591 // Run the message loop until the desktop is attached. | 593 // Run the message loop until the desktop is attached. |
592 setup_run_loop_->Run(); | 594 setup_run_loop_->Run(); |
593 | 595 |
594 // Expect a single mouse event. | 596 // Expect a single mouse event. |
595 EXPECT_CALL(*remote_input_injector_, InjectClipboardEvent(_)) | 597 EXPECT_CALL(*remote_input_injector_, InjectClipboardEvent(_)) |
596 .Times(0); | 598 .Times(0); |
597 EXPECT_CALL(*remote_input_injector_, InjectKeyEvent(_)) | 599 EXPECT_CALL(*remote_input_injector_, InjectKeyEvent(_)) |
598 .Times(0); | 600 .Times(0); |
599 EXPECT_CALL(*remote_input_injector_, InjectMouseEvent(_)) | 601 EXPECT_CALL(*remote_input_injector_, InjectMouseEvent(_)) |
600 .Times(1) | 602 .Times(1) |
601 .WillOnce(InvokeWithoutArgs( | 603 .WillOnce(InvokeWithoutArgs( |
602 this, &IpcDesktopEnvironmentTest::DeleteDesktopEnvironment)); | 604 this, &IpcDesktopEnvironmentTest::DeleteDesktopEnvironment)); |
603 | 605 |
604 // Send a mouse event. | 606 // Send a mouse event. |
605 protocol::MouseEvent event; | 607 protocol::MouseEvent event; |
606 event.set_x(0); | 608 event.set_x(0); |
607 event.set_y(0); | 609 event.set_y(0); |
608 input_injector_->InjectMouseEvent(event); | 610 input_injector_->InjectMouseEvent(event); |
609 | 611 |
610 task_runner_ = NULL; | 612 task_runner_ = NULL; |
611 io_task_runner_ = NULL; | 613 io_task_runner_ = NULL; |
612 main_run_loop_.Run(); | 614 main_run_loop_.Run(); |
613 } | 615 } |
614 | 616 |
615 } // namespace remoting | 617 } // namespace remoting |
OLD | NEW |