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

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

Issue 902613004: Fix ConnectionToClient to connect stubs only after authentication. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@audio_pump
Patch Set: Created 5 years, 10 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 292 matching lines...) Expand 10 before | Expand all | Expand 10 after
303 303
304 webrtc::DesktopCapturer* ClientSessionTest::CreateVideoCapturer() { 304 webrtc::DesktopCapturer* ClientSessionTest::CreateVideoCapturer() {
305 return new FakeDesktopCapturer(); 305 return new FakeDesktopCapturer();
306 } 306 }
307 307
308 webrtc::MouseCursorMonitor* ClientSessionTest::CreateMouseCursorMonitor() { 308 webrtc::MouseCursorMonitor* ClientSessionTest::CreateMouseCursorMonitor() {
309 return new FakeMouseCursorMonitor(); 309 return new FakeMouseCursorMonitor();
310 } 310 }
311 311
312 void ClientSessionTest::ConnectClientSession() { 312 void ClientSessionTest::ConnectClientSession() {
313 // Stubs should be set only after connection is authenticated.
314 EXPECT_FALSE(connection_->clipboard_stub());
315 EXPECT_FALSE(connection_->input_stub());
316
313 client_session_->OnConnectionAuthenticated(client_session_->connection()); 317 client_session_->OnConnectionAuthenticated(client_session_->connection());
318
319 EXPECT_TRUE(connection_->clipboard_stub());
320 EXPECT_TRUE(connection_->input_stub());
321
314 client_session_->OnConnectionChannelsConnected(client_session_->connection()); 322 client_session_->OnConnectionChannelsConnected(client_session_->connection());
315 } 323 }
316 324
317 void ClientSessionTest::SetMatchCapabilitiesExpectation() { 325 void ClientSessionTest::SetMatchCapabilitiesExpectation() {
318 // Set the client to report the same capabilities as the host. 326 // Set the client to report the same capabilities as the host.
319 EXPECT_CALL(client_stub_, SetCapabilities(_)) 327 EXPECT_CALL(client_stub_, SetCapabilities(_))
320 .Times(AtMost(1)) 328 .Times(AtMost(1))
321 .WillOnce(Invoke(client_session_.get(), &ClientSession::SetCapabilities)); 329 .WillOnce(Invoke(client_session_.get(), &ClientSession::SetCapabilities));
322 } 330 }
323 331
(...skipping 12 matching lines...) Expand all
336 DeliverClientMessage(client_session_.get(), message), 344 DeliverClientMessage(client_session_.get(), message),
337 InvokeWithoutArgs(this, &ClientSessionTest::DisconnectClientSession), 345 InvokeWithoutArgs(this, &ClientSessionTest::DisconnectClientSession),
338 InvokeWithoutArgs(this, &ClientSessionTest::StopClientSession))); 346 InvokeWithoutArgs(this, &ClientSessionTest::StopClientSession)));
339 } 347 }
340 348
341 MATCHER_P2(EqualsClipboardEvent, m, d, "") { 349 MATCHER_P2(EqualsClipboardEvent, m, d, "") {
342 return (strcmp(arg.mime_type().c_str(), m) == 0 && 350 return (strcmp(arg.mime_type().c_str(), m) == 0 &&
343 memcmp(arg.data().data(), d, arg.data().size()) == 0); 351 memcmp(arg.data().data(), d, arg.data().size()) == 0);
344 } 352 }
345 353
346 TEST_F(ClientSessionTest, ClipboardStubFilter) {
Wez 2015/02/07 00:40:43 We should have some disable-inputs tests - perhaps
Sergey Ulanov 2015/02/13 19:40:21 Done.
347 CreateClientSession();
348
349 protocol::ClipboardEvent clipboard_event1;
350 clipboard_event1.set_mime_type(kMimeTypeTextUtf8);
351 clipboard_event1.set_data("a");
352
353 protocol::ClipboardEvent clipboard_event2;
354 clipboard_event2.set_mime_type(kMimeTypeTextUtf8);
355 clipboard_event2.set_data("b");
356
357 protocol::ClipboardEvent clipboard_event3;
358 clipboard_event3.set_mime_type(kMimeTypeTextUtf8);
359 clipboard_event3.set_data("c");
360
361 Expectation authenticated =
362 EXPECT_CALL(session_event_handler_, OnSessionAuthenticated(_))
363 .WillOnce(Return(true));
364 EXPECT_CALL(*input_injector_, StartPtr(_))
365 .After(authenticated);
366 EXPECT_CALL(session_event_handler_, OnSessionChannelsConnected(_))
367 .After(authenticated);
368
369 // 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 // by the mouse clamping filter.
372 Sequence s;
373 EXPECT_CALL(video_stub_, ProcessVideoPacketPtr(_, _))
374 .InSequence(s)
375 .After(authenticated)
376 .WillOnce(DoAll(
377 // This event should get through to the clipboard stub.
378 InjectClipboardEvent(connection_, clipboard_event2),
379 InvokeWithoutArgs(this, &ClientSessionTest::DisconnectClientSession),
380 // This event should not get through to the clipboard stub,
381 // because the client has disconnected.
382 InjectClipboardEvent(connection_, clipboard_event3),
383 InvokeWithoutArgs(this, &ClientSessionTest::StopClientSession)));
384 EXPECT_CALL(*input_injector_, InjectClipboardEvent(EqualsClipboardEvent(
385 kMimeTypeTextUtf8, "b")))
386 .InSequence(s);
387 EXPECT_CALL(session_event_handler_, OnSessionClosed(_))
388 .InSequence(s);
389
390 // This event should not get through to the clipboard stub,
391 // because the client isn't authenticated yet.
392 connection_->clipboard_stub()->InjectClipboardEvent(clipboard_event1);
393
394 ConnectClientSession();
395 }
396
397 TEST_F(ClientSessionTest, InputStubFilter) {
398 CreateClientSession();
399
400 protocol::KeyEvent key_event1;
401 key_event1.set_pressed(true);
402 key_event1.set_usb_keycode(1);
403
404 protocol::KeyEvent key_event2_down;
405 key_event2_down.set_pressed(true);
406 key_event2_down.set_usb_keycode(2);
407
408 protocol::KeyEvent key_event2_up;
409 key_event2_up.set_pressed(false);
410 key_event2_up.set_usb_keycode(2);
411
412 protocol::KeyEvent key_event3;
413 key_event3.set_pressed(true);
414 key_event3.set_usb_keycode(3);
415
416 protocol::MouseEvent mouse_event1;
417 mouse_event1.set_x(100);
418 mouse_event1.set_y(101);
419
420 protocol::MouseEvent mouse_event2;
421 mouse_event2.set_x(200);
422 mouse_event2.set_y(201);
423
424 protocol::MouseEvent mouse_event3;
425 mouse_event3.set_x(300);
426 mouse_event3.set_y(301);
427
428 Expectation authenticated =
429 EXPECT_CALL(session_event_handler_, OnSessionAuthenticated(_))
430 .WillOnce(Return(true));
431 EXPECT_CALL(*input_injector_, StartPtr(_))
432 .After(authenticated);
433 EXPECT_CALL(session_event_handler_, OnSessionChannelsConnected(_))
434 .After(authenticated);
435
436 // 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 // by the mouse clamping filter.
439 Sequence s;
440 EXPECT_CALL(video_stub_, ProcessVideoPacketPtr(_, _))
441 .InSequence(s)
442 .After(authenticated)
443 .WillOnce(DoAll(
444 // These events should get through to the input stub.
445 InjectKeyEvent(connection_, key_event2_down),
446 InjectKeyEvent(connection_, key_event2_up),
447 InjectMouseEvent(connection_, mouse_event2),
448 InvokeWithoutArgs(this, &ClientSessionTest::DisconnectClientSession),
449 // These events should not get through to the input stub,
450 // because the client has disconnected.
451 InjectKeyEvent(connection_, key_event3),
452 InjectMouseEvent(connection_, mouse_event3),
453 InvokeWithoutArgs(this, &ClientSessionTest::StopClientSession)));
454 EXPECT_CALL(*input_injector_, InjectKeyEvent(EqualsUsbEvent(2, true)))
455 .InSequence(s);
456 EXPECT_CALL(*input_injector_, InjectKeyEvent(EqualsUsbEvent(2, false)))
457 .InSequence(s);
458 EXPECT_CALL(*input_injector_, InjectMouseEvent(EqualsMouseEvent(200, 201)))
459 .InSequence(s);
460 EXPECT_CALL(session_event_handler_, OnSessionClosed(_))
461 .InSequence(s);
462
463 // These events should not get through to the input stub,
464 // because the client isn't authenticated yet.
465 connection_->input_stub()->InjectKeyEvent(key_event1);
466 connection_->input_stub()->InjectMouseEvent(mouse_event1);
467
468 ConnectClientSession();
469 }
470
471 TEST_F(ClientSessionTest, LocalInputTest) { 354 TEST_F(ClientSessionTest, LocalInputTest) {
472 CreateClientSession(); 355 CreateClientSession();
473 356
474 protocol::MouseEvent mouse_event1; 357 protocol::MouseEvent mouse_event1;
475 mouse_event1.set_x(100); 358 mouse_event1.set_x(100);
476 mouse_event1.set_y(101); 359 mouse_event1.set_y(101);
477 protocol::MouseEvent mouse_event2; 360 protocol::MouseEvent mouse_event2;
478 mouse_event2.set_x(200); 361 mouse_event2.set_x(200);
479 mouse_event2.set_y(201); 362 mouse_event2.set_y(201);
480 protocol::MouseEvent mouse_event3; 363 protocol::MouseEvent mouse_event3;
(...skipping 327 matching lines...) Expand 10 before | Expand all | Expand 10 after
808 691
809 DisconnectClientSession(); 692 DisconnectClientSession();
810 StopClientSession(); 693 StopClientSession();
811 694
812 // ext1 was instantiated and wrapped the video capturer. 695 // ext1 was instantiated and wrapped the video capturer.
813 EXPECT_TRUE(extension.was_instantiated()); 696 EXPECT_TRUE(extension.was_instantiated());
814 EXPECT_TRUE(extension.has_wrapped_video_capturer()); 697 EXPECT_TRUE(extension.has_wrapped_video_capturer());
815 } 698 }
816 699
817 } // namespace remoting 700 } // namespace remoting
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698