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

Side by Side Diff: remoting/host/client_session_unittest.cc

Issue 850983002: Implement video frame acknowledgements in the chromoting protocol. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 11 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
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 <algorithm> 5 #include <algorithm>
6 #include <string> 6 #include <string>
7 #include <vector> 7 #include <vector>
8 8
9 #include "base/message_loop/message_loop.h" 9 #include "base/message_loop/message_loop.h"
10 #include "base/run_loop.h" 10 #include "base/run_loop.h"
(...skipping 18 matching lines...) Expand all
29 #include "third_party/webrtc/modules/desktop_capture/desktop_region.h" 29 #include "third_party/webrtc/modules/desktop_capture/desktop_region.h"
30 #include "third_party/webrtc/modules/desktop_capture/screen_capturer_mock_object s.h" 30 #include "third_party/webrtc/modules/desktop_capture/screen_capturer_mock_object s.h"
31 31
32 namespace remoting { 32 namespace remoting {
33 33
34 using protocol::MockConnectionToClient; 34 using protocol::MockConnectionToClient;
35 using protocol::MockClientStub; 35 using protocol::MockClientStub;
36 using protocol::MockHostStub; 36 using protocol::MockHostStub;
37 using protocol::MockInputStub; 37 using protocol::MockInputStub;
38 using protocol::MockSession; 38 using protocol::MockSession;
39 using protocol::MockVideoStub; 39 using protocol::MockVideoSender;
40 using protocol::SessionConfig; 40 using protocol::SessionConfig;
41 41
42 using testing::_; 42 using testing::_;
43 using testing::AnyNumber; 43 using testing::AnyNumber;
44 using testing::AtMost; 44 using testing::AtMost;
45 using testing::CreateFunctor; 45 using testing::CreateFunctor;
46 using testing::DeleteArg; 46 using testing::DeleteArg;
47 using testing::DoAll; 47 using testing::DoAll;
48 using testing::Expectation; 48 using testing::Expectation;
49 using testing::Invoke; 49 using testing::Invoke;
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after
183 183
184 // ClientSession::EventHandler mock for use in tests. 184 // ClientSession::EventHandler mock for use in tests.
185 MockClientSessionEventHandler session_event_handler_; 185 MockClientSessionEventHandler session_event_handler_;
186 186
187 // Storage for values to be returned by the protocol::Session mock. 187 // Storage for values to be returned by the protocol::Session mock.
188 SessionConfig session_config_; 188 SessionConfig session_config_;
189 const std::string client_jid_; 189 const std::string client_jid_;
190 190
191 // Stubs returned to |client_session_| components by |connection_|. 191 // Stubs returned to |client_session_| components by |connection_|.
192 MockClientStub client_stub_; 192 MockClientStub client_stub_;
193 MockVideoStub video_stub_; 193 MockVideoSender video_sender_;
194 194
195 // DesktopEnvironment owns |input_injector_|, but input injection tests need 195 // DesktopEnvironment owns |input_injector_|, but input injection tests need
196 // to express expectations on it. 196 // to express expectations on it.
197 scoped_ptr<MockInputInjector> input_injector_; 197 scoped_ptr<MockInputInjector> input_injector_;
198 198
199 // ClientSession owns |connection_| but tests need it to inject fake events. 199 // ClientSession owns |connection_| but tests need it to inject fake events.
200 MockConnectionToClient* connection_; 200 MockConnectionToClient* connection_;
201 201
202 scoped_ptr<MockDesktopEnvironmentFactory> desktop_environment_factory_; 202 scoped_ptr<MockDesktopEnvironmentFactory> desktop_environment_factory_;
203 }; 203 };
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
235 EXPECT_CALL(*session, jid()).WillRepeatedly(ReturnRef(client_jid_)); 235 EXPECT_CALL(*session, jid()).WillRepeatedly(ReturnRef(client_jid_));
236 EXPECT_CALL(*session, SetEventHandler(_)); 236 EXPECT_CALL(*session, SetEventHandler(_));
237 237
238 // Mock protocol::ConnectionToClient APIs called directly by ClientSession. 238 // Mock protocol::ConnectionToClient APIs called directly by ClientSession.
239 // HostStub is not touched by ClientSession, so we can safely pass nullptr. 239 // HostStub is not touched by ClientSession, so we can safely pass nullptr.
240 scoped_ptr<MockConnectionToClient> connection( 240 scoped_ptr<MockConnectionToClient> connection(
241 new MockConnectionToClient(session, nullptr)); 241 new MockConnectionToClient(session, nullptr));
242 EXPECT_CALL(*connection, session()).WillRepeatedly(Return(session)); 242 EXPECT_CALL(*connection, session()).WillRepeatedly(Return(session));
243 EXPECT_CALL(*connection, client_stub()) 243 EXPECT_CALL(*connection, client_stub())
244 .WillRepeatedly(Return(&client_stub_)); 244 .WillRepeatedly(Return(&client_stub_));
245 EXPECT_CALL(*connection, video_stub()).WillRepeatedly(Return(&video_stub_)); 245 EXPECT_CALL(*connection, video_sender())
246 .WillRepeatedly(Return(&video_sender_));
246 EXPECT_CALL(*connection, Disconnect()); 247 EXPECT_CALL(*connection, Disconnect());
247 connection_ = connection.get(); 248 connection_ = connection.get();
248 249
249 client_session_.reset(new ClientSession( 250 client_session_.reset(new ClientSession(
250 &session_event_handler_, 251 &session_event_handler_,
251 task_runner_, // Audio thread. 252 task_runner_, // Audio thread.
252 task_runner_, // Input thread. 253 task_runner_, // Input thread.
253 task_runner_, // Capture thread. 254 task_runner_, // Capture thread.
254 task_runner_, // Encode thread. 255 task_runner_, // Encode thread.
255 task_runner_, // Network thread. 256 task_runner_, // Network thread.
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
363 .WillOnce(Return(true)); 364 .WillOnce(Return(true));
364 EXPECT_CALL(*input_injector_, StartPtr(_)) 365 EXPECT_CALL(*input_injector_, StartPtr(_))
365 .After(authenticated); 366 .After(authenticated);
366 EXPECT_CALL(session_event_handler_, OnSessionChannelsConnected(_)) 367 EXPECT_CALL(session_event_handler_, OnSessionChannelsConnected(_))
367 .After(authenticated); 368 .After(authenticated);
368 369
369 // Wait for the first video packet to be captured to make sure that 370 // Wait for the first video packet to be captured to make sure that
370 // the injected input will go though. Otherwise mouse events will be blocked 371 // the injected input will go though. Otherwise mouse events will be blocked
371 // by the mouse clamping filter. 372 // by the mouse clamping filter.
372 Sequence s; 373 Sequence s;
373 EXPECT_CALL(video_stub_, ProcessVideoPacketPtr(_, _)) 374 EXPECT_CALL(video_sender_, ProcessVideoPacketPtr(_, _))
374 .InSequence(s) 375 .InSequence(s)
375 .After(authenticated) 376 .After(authenticated)
376 .WillOnce(DoAll( 377 .WillOnce(DoAll(
377 // This event should get through to the clipboard stub. 378 // This event should get through to the clipboard stub.
378 InjectClipboardEvent(connection_, clipboard_event2), 379 InjectClipboardEvent(connection_, clipboard_event2),
379 InvokeWithoutArgs(this, &ClientSessionTest::DisconnectClientSession), 380 InvokeWithoutArgs(this, &ClientSessionTest::DisconnectClientSession),
380 // This event should not get through to the clipboard stub, 381 // This event should not get through to the clipboard stub,
381 // because the client has disconnected. 382 // because the client has disconnected.
382 InjectClipboardEvent(connection_, clipboard_event3), 383 InjectClipboardEvent(connection_, clipboard_event3),
383 InvokeWithoutArgs(this, &ClientSessionTest::StopClientSession))); 384 InvokeWithoutArgs(this, &ClientSessionTest::StopClientSession)));
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
430 .WillOnce(Return(true)); 431 .WillOnce(Return(true));
431 EXPECT_CALL(*input_injector_, StartPtr(_)) 432 EXPECT_CALL(*input_injector_, StartPtr(_))
432 .After(authenticated); 433 .After(authenticated);
433 EXPECT_CALL(session_event_handler_, OnSessionChannelsConnected(_)) 434 EXPECT_CALL(session_event_handler_, OnSessionChannelsConnected(_))
434 .After(authenticated); 435 .After(authenticated);
435 436
436 // Wait for the first video packet to be captured to make sure that 437 // Wait for the first video packet to be captured to make sure that
437 // the injected input will go though. Otherwise mouse events will be blocked 438 // the injected input will go though. Otherwise mouse events will be blocked
438 // by the mouse clamping filter. 439 // by the mouse clamping filter.
439 Sequence s; 440 Sequence s;
440 EXPECT_CALL(video_stub_, ProcessVideoPacketPtr(_, _)) 441 EXPECT_CALL(video_sender_, ProcessVideoPacketPtr(_, _))
441 .InSequence(s) 442 .InSequence(s)
442 .After(authenticated) 443 .After(authenticated)
443 .WillOnce(DoAll( 444 .WillOnce(DoAll(
444 // These events should get through to the input stub. 445 // These events should get through to the input stub.
445 InjectKeyEvent(connection_, key_event2_down), 446 InjectKeyEvent(connection_, key_event2_down),
446 InjectKeyEvent(connection_, key_event2_up), 447 InjectKeyEvent(connection_, key_event2_up),
447 InjectMouseEvent(connection_, mouse_event2), 448 InjectMouseEvent(connection_, mouse_event2),
448 InvokeWithoutArgs(this, &ClientSessionTest::DisconnectClientSession), 449 InvokeWithoutArgs(this, &ClientSessionTest::DisconnectClientSession),
449 // These events should not get through to the input stub, 450 // These events should not get through to the input stub,
450 // because the client has disconnected. 451 // because the client has disconnected.
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
486 .WillOnce(Return(true)); 487 .WillOnce(Return(true));
487 EXPECT_CALL(*input_injector_, StartPtr(_)) 488 EXPECT_CALL(*input_injector_, StartPtr(_))
488 .After(authenticated); 489 .After(authenticated);
489 EXPECT_CALL(session_event_handler_, OnSessionChannelsConnected(_)) 490 EXPECT_CALL(session_event_handler_, OnSessionChannelsConnected(_))
490 .After(authenticated); 491 .After(authenticated);
491 492
492 // Wait for the first video packet to be captured to make sure that 493 // Wait for the first video packet to be captured to make sure that
493 // the injected input will go though. Otherwise mouse events will be blocked 494 // the injected input will go though. Otherwise mouse events will be blocked
494 // by the mouse clamping filter. 495 // by the mouse clamping filter.
495 Sequence s; 496 Sequence s;
496 EXPECT_CALL(video_stub_, ProcessVideoPacketPtr(_, _)) 497 EXPECT_CALL(video_sender_, ProcessVideoPacketPtr(_, _))
497 .InSequence(s) 498 .InSequence(s)
498 .After(authenticated) 499 .After(authenticated)
499 .WillOnce(DoAll( 500 .WillOnce(DoAll(
500 // This event should get through to the input stub. 501 // This event should get through to the input stub.
501 InjectMouseEvent(connection_, mouse_event1), 502 InjectMouseEvent(connection_, mouse_event1),
502 #if !defined(OS_WIN) 503 #if !defined(OS_WIN)
503 // The OS echoes the injected event back. 504 // The OS echoes the injected event back.
504 LocalMouseMoved(client_session_.get(), mouse_event1), 505 LocalMouseMoved(client_session_.get(), mouse_event1),
505 #endif // !defined(OS_WIN) 506 #endif // !defined(OS_WIN)
506 // This one should get throught as well. 507 // This one should get throught as well.
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
544 .WillOnce(Return(true)); 545 .WillOnce(Return(true));
545 EXPECT_CALL(*input_injector_, StartPtr(_)) 546 EXPECT_CALL(*input_injector_, StartPtr(_))
546 .After(authenticated); 547 .After(authenticated);
547 EXPECT_CALL(session_event_handler_, OnSessionChannelsConnected(_)) 548 EXPECT_CALL(session_event_handler_, OnSessionChannelsConnected(_))
548 .After(authenticated); 549 .After(authenticated);
549 550
550 // Wait for the first video packet to be captured to make sure that 551 // Wait for the first video packet to be captured to make sure that
551 // the injected input will go though. Otherwise mouse events will be blocked 552 // the injected input will go though. Otherwise mouse events will be blocked
552 // by the mouse clamping filter. 553 // by the mouse clamping filter.
553 Sequence s; 554 Sequence s;
554 EXPECT_CALL(video_stub_, ProcessVideoPacketPtr(_, _)) 555 EXPECT_CALL(video_sender_, ProcessVideoPacketPtr(_, _))
555 .InSequence(s) 556 .InSequence(s)
556 .After(authenticated) 557 .After(authenticated)
557 .WillOnce(DoAll( 558 .WillOnce(DoAll(
558 InjectKeyEvent(connection_, key1), 559 InjectKeyEvent(connection_, key1),
559 InjectKeyEvent(connection_, key2), 560 InjectKeyEvent(connection_, key2),
560 InjectMouseEvent(connection_, mousedown), 561 InjectMouseEvent(connection_, mousedown),
561 InvokeWithoutArgs(this, &ClientSessionTest::DisconnectClientSession), 562 InvokeWithoutArgs(this, &ClientSessionTest::DisconnectClientSession),
562 InvokeWithoutArgs(this, &ClientSessionTest::StopClientSession))); 563 InvokeWithoutArgs(this, &ClientSessionTest::StopClientSession)));
563 EXPECT_CALL(*input_injector_, InjectKeyEvent(EqualsUsbEvent(1, true))) 564 EXPECT_CALL(*input_injector_, InjectKeyEvent(EqualsUsbEvent(1, true)))
564 .InSequence(s); 565 .InSequence(s);
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
603 protocol::MouseEvent expected_event; 604 protocol::MouseEvent expected_event;
604 for (int j = 0; j < 3; j++) { 605 for (int j = 0; j < 3; j++) {
605 for (int i = 0; i < 3; i++) { 606 for (int i = 0; i < 3; i++) {
606 protocol::MouseEvent injected_event; 607 protocol::MouseEvent injected_event;
607 injected_event.set_x(input_x[i]); 608 injected_event.set_x(input_x[i]);
608 injected_event.set_y(input_y[j]); 609 injected_event.set_y(input_y[j]);
609 610
610 if (i == 0 && j == 0) { 611 if (i == 0 && j == 0) {
611 // Inject the 1st event once a video packet has been received. 612 // Inject the 1st event once a video packet has been received.
612 connected = 613 connected =
613 EXPECT_CALL(video_stub_, ProcessVideoPacketPtr(_, _)) 614 EXPECT_CALL(video_sender_, ProcessVideoPacketPtr(_, _))
614 .After(connected) 615 .After(connected)
615 .WillOnce(InjectMouseEvent(connection_, injected_event)); 616 .WillOnce(InjectMouseEvent(connection_, injected_event));
616 } else { 617 } else {
617 // Every next event is injected once the previous event has been 618 // Every next event is injected once the previous event has been
618 // received. 619 // received.
619 connected = 620 connected =
620 EXPECT_CALL(*input_injector_, 621 EXPECT_CALL(*input_injector_,
621 InjectMouseEvent(EqualsMouseEvent(expected_event.x(), 622 InjectMouseEvent(EqualsMouseEvent(expected_event.x(),
622 expected_event.y()))) 623 expected_event.y())))
623 .After(connected) 624 .After(connected)
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
691 ConnectClientSession(); 692 ConnectClientSession();
692 } 693 }
693 694
694 // Verifies that the client's video pipeline can be reset mid-session. 695 // Verifies that the client's video pipeline can be reset mid-session.
695 TEST_F(ClientSessionTest, ResetVideoPipeline) { 696 TEST_F(ClientSessionTest, ResetVideoPipeline) {
696 CreateClientSession(); 697 CreateClientSession();
697 698
698 EXPECT_CALL(session_event_handler_, OnSessionAuthenticated(_)) 699 EXPECT_CALL(session_event_handler_, OnSessionAuthenticated(_))
699 .WillOnce(Return(true)); 700 .WillOnce(Return(true));
700 701
701 EXPECT_CALL(video_stub_, ProcessVideoPacketPtr(_, _)) 702 EXPECT_CALL(video_sender_, ProcessVideoPacketPtr(_, _))
702 .WillOnce(DoAll( 703 .WillOnce(DoAll(
703 InvokeWithoutArgs(this, &ClientSessionTest::DisconnectClientSession), 704 InvokeWithoutArgs(this, &ClientSessionTest::DisconnectClientSession),
704 InvokeWithoutArgs(this, &ClientSessionTest::StopClientSession))); 705 InvokeWithoutArgs(this, &ClientSessionTest::StopClientSession)));
705 706
706 ConnectClientSession(); 707 ConnectClientSession();
707 708
708 client_session_->ResetVideoPipeline(); 709 client_session_->ResetVideoPipeline();
709 } 710 }
710 711
711 // Verifies that clients can have extensions registered, resulting in the 712 // Verifies that clients can have extensions registered, resulting in the
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
808 809
809 DisconnectClientSession(); 810 DisconnectClientSession();
810 StopClientSession(); 811 StopClientSession();
811 812
812 // ext1 was instantiated and wrapped the video capturer. 813 // ext1 was instantiated and wrapped the video capturer.
813 EXPECT_TRUE(extension.was_instantiated()); 814 EXPECT_TRUE(extension.was_instantiated());
814 EXPECT_TRUE(extension.has_wrapped_video_capturer()); 815 EXPECT_TRUE(extension.has_wrapped_video_capturer());
815 } 816 }
816 817
817 } // namespace remoting 818 } // namespace remoting
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698