| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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/client_session.h" | 5 #include "remoting/host/client_session.h" |
| 6 #include "remoting/host/host_mock_objects.h" | 6 #include "remoting/host/host_mock_objects.h" |
| 7 #include "remoting/protocol/protocol_mock_objects.h" | 7 #include "remoting/protocol/protocol_mock_objects.h" |
| 8 #include "testing/gtest/include/gtest/gtest.h" | 8 #include "testing/gtest/include/gtest/gtest.h" |
| 9 | 9 |
| 10 namespace remoting { | 10 namespace remoting { |
| 11 | 11 |
| 12 using protocol::MockConnectionToClient; | 12 using protocol::MockConnectionToClient; |
| 13 using protocol::MockConnectionToClientEventHandler; | 13 using protocol::MockConnectionToClientEventHandler; |
| 14 using protocol::MockHostStub; | 14 using protocol::MockHostStub; |
| 15 using protocol::MockInputStub; | 15 using protocol::MockInputStub; |
| 16 using protocol::MockSession; | 16 using protocol::MockSession; |
| 17 | 17 |
| 18 using testing::_; | 18 using testing::_; |
| 19 using testing::DeleteArg; | 19 using testing::DeleteArg; |
| 20 using testing::InSequence; | 20 using testing::InSequence; |
| 21 using testing::Return; | 21 using testing::Return; |
| 22 using testing::ReturnRef; | 22 using testing::ReturnRef; |
| 23 | 23 |
| 24 class ClientSessionTest : public testing::Test { | 24 class ClientSessionTest : public testing::Test { |
| 25 public: | 25 public: |
| 26 ClientSessionTest() {} | 26 ClientSessionTest() {} |
| 27 | 27 |
| 28 virtual void SetUp() { | 28 virtual void SetUp() { |
| 29 client_jid_ = "user@domain/rest-of-jid"; | 29 client_jid_ = "user@domain/rest-of-jid"; |
| 30 EXPECT_CALL(session_, jid()).WillRepeatedly(ReturnRef(client_jid_)); | |
| 31 | |
| 32 connection_ = new MockConnectionToClient( | |
| 33 &connection_event_handler_, &host_stub_, &input_stub_); | |
| 34 | |
| 35 EXPECT_CALL(*connection_, session()).WillRepeatedly(Return(&session_)); | |
| 36 | 30 |
| 37 // Set up a large default screen size that won't affect most tests. | 31 // Set up a large default screen size that won't affect most tests. |
| 38 default_screen_size_.set(1000, 1000); | 32 default_screen_size_.set(1000, 1000); |
| 39 EXPECT_CALL(capturer_, size_most_recent()) | 33 EXPECT_CALL(capturer_, size_most_recent()) |
| 40 .WillRepeatedly(ReturnRef(default_screen_size_)); | 34 .WillRepeatedly(ReturnRef(default_screen_size_)); |
| 41 | 35 |
| 36 protocol::MockSession* session = new MockSession(); |
| 37 EXPECT_CALL(*session, jid()).WillRepeatedly(ReturnRef(client_jid_)); |
| 38 EXPECT_CALL(*session, SetStateChangeCallback(_)); |
| 39 |
| 42 user_authenticator_ = new MockUserAuthenticator(); | 40 user_authenticator_ = new MockUserAuthenticator(); |
| 43 client_session_ = new ClientSession( | 41 client_session_ = new ClientSession( |
| 44 &session_event_handler_, | 42 &session_event_handler_, |
| 45 connection_, | 43 new protocol::ConnectionToClient( |
| 46 &input_stub_, | 44 base::MessageLoopProxy::current(), session), |
| 47 &capturer_); | 45 &input_stub_, &capturer_); |
| 48 } | 46 } |
| 49 | 47 |
| 50 protected: | 48 protected: |
| 51 SkISize default_screen_size_; | 49 SkISize default_screen_size_; |
| 52 MessageLoop message_loop_; | 50 MessageLoop message_loop_; |
| 53 std::string client_jid_; | 51 std::string client_jid_; |
| 54 MockSession session_; | |
| 55 MockConnectionToClientEventHandler connection_event_handler_; | |
| 56 MockHostStub host_stub_; | 52 MockHostStub host_stub_; |
| 57 MockInputStub input_stub_; | 53 MockInputStub input_stub_; |
| 58 MockCapturer capturer_; | 54 MockCapturer capturer_; |
| 59 MockClientSessionEventHandler session_event_handler_; | 55 MockClientSessionEventHandler session_event_handler_; |
| 60 MockUserAuthenticator* user_authenticator_; | 56 MockUserAuthenticator* user_authenticator_; |
| 61 scoped_refptr<MockConnectionToClient> connection_; | |
| 62 scoped_refptr<ClientSession> client_session_; | 57 scoped_refptr<ClientSession> client_session_; |
| 63 }; | 58 }; |
| 64 | 59 |
| 65 MATCHER_P2(EqualsKeyEvent, keycode, pressed, "") { | 60 MATCHER_P2(EqualsKeyEvent, keycode, pressed, "") { |
| 66 return arg.keycode() == keycode && arg.pressed() == pressed; | 61 return arg.keycode() == keycode && arg.pressed() == pressed; |
| 67 } | 62 } |
| 68 | 63 |
| 69 MATCHER_P2(EqualsMouseEvent, x, y, "") { | 64 MATCHER_P2(EqualsMouseEvent, x, y, "") { |
| 70 return arg.x() == x && arg.y() == y; | 65 return arg.x() == x && arg.y() == y; |
| 71 } | 66 } |
| (...skipping 25 matching lines...) Expand all Loading... |
| 97 | 92 |
| 98 protocol::MouseEvent mouse_event2; | 93 protocol::MouseEvent mouse_event2; |
| 99 mouse_event2.set_x(200); | 94 mouse_event2.set_x(200); |
| 100 mouse_event2.set_y(201); | 95 mouse_event2.set_y(201); |
| 101 | 96 |
| 102 protocol::MouseEvent mouse_event3; | 97 protocol::MouseEvent mouse_event3; |
| 103 mouse_event3.set_x(300); | 98 mouse_event3.set_x(300); |
| 104 mouse_event3.set_y(301); | 99 mouse_event3.set_y(301); |
| 105 | 100 |
| 106 InSequence s; | 101 InSequence s; |
| 107 EXPECT_CALL(session_event_handler_, OnAuthenticationComplete(_)); | 102 EXPECT_CALL(session_event_handler_, OnSessionAuthenticated(_)); |
| 108 EXPECT_CALL(input_stub_, InjectKeyEvent(EqualsKeyEvent(2, true))); | 103 EXPECT_CALL(input_stub_, InjectKeyEvent(EqualsKeyEvent(2, true))); |
| 109 EXPECT_CALL(input_stub_, InjectKeyEvent(EqualsKeyEvent(2, false))); | 104 EXPECT_CALL(input_stub_, InjectKeyEvent(EqualsKeyEvent(2, false))); |
| 110 EXPECT_CALL(input_stub_, InjectMouseEvent(EqualsMouseEvent(200, 201))); | 105 EXPECT_CALL(input_stub_, InjectMouseEvent(EqualsMouseEvent(200, 201))); |
| 111 | 106 |
| 112 // These events should not get through to the input stub, | 107 // These events should not get through to the input stub, |
| 113 // because the client isn't authenticated yet. | 108 // because the client isn't authenticated yet. |
| 114 client_session_->InjectKeyEvent(key_event1); | 109 client_session_->InjectKeyEvent(key_event1); |
| 115 client_session_->InjectMouseEvent(mouse_event1); | 110 client_session_->InjectMouseEvent(mouse_event1); |
| 116 client_session_->OnAuthenticationComplete(); | 111 client_session_->OnConnectionOpened(client_session_->connection()); |
| 117 // These events should get through to the input stub. | 112 // These events should get through to the input stub. |
| 118 client_session_->InjectKeyEvent(key_event2_down); | 113 client_session_->InjectKeyEvent(key_event2_down); |
| 119 client_session_->InjectKeyEvent(key_event2_up); | 114 client_session_->InjectKeyEvent(key_event2_up); |
| 120 client_session_->InjectMouseEvent(mouse_event2); | 115 client_session_->InjectMouseEvent(mouse_event2); |
| 121 client_session_->OnDisconnected(); | 116 client_session_->Disconnect(); |
| 122 // These events should not get through to the input stub, | 117 // These events should not get through to the input stub, |
| 123 // because the client has disconnected. | 118 // because the client has disconnected. |
| 124 client_session_->InjectKeyEvent(key_event3); | 119 client_session_->InjectKeyEvent(key_event3); |
| 125 client_session_->InjectMouseEvent(mouse_event3); | 120 client_session_->InjectMouseEvent(mouse_event3); |
| 126 } | 121 } |
| 127 | 122 |
| 128 TEST_F(ClientSessionTest, LocalInputTest) { | 123 TEST_F(ClientSessionTest, LocalInputTest) { |
| 129 protocol::MouseEvent mouse_event1; | 124 protocol::MouseEvent mouse_event1; |
| 130 mouse_event1.set_x(100); | 125 mouse_event1.set_x(100); |
| 131 mouse_event1.set_y(101); | 126 mouse_event1.set_y(101); |
| 132 protocol::MouseEvent mouse_event2; | 127 protocol::MouseEvent mouse_event2; |
| 133 mouse_event2.set_x(200); | 128 mouse_event2.set_x(200); |
| 134 mouse_event2.set_y(201); | 129 mouse_event2.set_y(201); |
| 135 protocol::MouseEvent mouse_event3; | 130 protocol::MouseEvent mouse_event3; |
| 136 mouse_event3.set_x(300); | 131 mouse_event3.set_x(300); |
| 137 mouse_event3.set_y(301); | 132 mouse_event3.set_y(301); |
| 138 | 133 |
| 139 InSequence s; | 134 InSequence s; |
| 140 EXPECT_CALL(session_event_handler_, OnAuthenticationComplete(_)); | 135 EXPECT_CALL(session_event_handler_, |
| 136 OnSessionAuthenticated(client_session_.get())); |
| 141 EXPECT_CALL(input_stub_, InjectMouseEvent(EqualsMouseEvent(100, 101))); | 137 EXPECT_CALL(input_stub_, InjectMouseEvent(EqualsMouseEvent(100, 101))); |
| 142 EXPECT_CALL(input_stub_, InjectMouseEvent(EqualsMouseEvent(200, 201))); | 138 EXPECT_CALL(input_stub_, InjectMouseEvent(EqualsMouseEvent(200, 201))); |
| 143 | 139 |
| 144 client_session_->OnAuthenticationComplete(); | 140 client_session_->OnConnectionOpened(client_session_->connection()); |
| 145 // This event should get through to the input stub. | 141 // This event should get through to the input stub. |
| 146 client_session_->InjectMouseEvent(mouse_event1); | 142 client_session_->InjectMouseEvent(mouse_event1); |
| 147 // This one should too because the local event echoes the remote one. | 143 // This one should too because the local event echoes the remote one. |
| 148 client_session_->LocalMouseMoved(SkIPoint::Make(mouse_event1.x(), | 144 client_session_->LocalMouseMoved(SkIPoint::Make(mouse_event1.x(), |
| 149 mouse_event1.y())); | 145 mouse_event1.y())); |
| 150 client_session_->InjectMouseEvent(mouse_event2); | 146 client_session_->InjectMouseEvent(mouse_event2); |
| 151 // This one should not. | 147 // This one should not. |
| 152 client_session_->LocalMouseMoved(SkIPoint::Make(mouse_event1.x(), | 148 client_session_->LocalMouseMoved(SkIPoint::Make(mouse_event1.x(), |
| 153 mouse_event1.y())); | 149 mouse_event1.y())); |
| 154 client_session_->InjectMouseEvent(mouse_event3); | 150 client_session_->InjectMouseEvent(mouse_event3); |
| 155 // TODO(jamiewalch): Verify that remote inputs are re-enabled eventually | 151 // TODO(jamiewalch): Verify that remote inputs are re-enabled eventually |
| 156 // (via dependency injection, not sleep!) | 152 // (via dependency injection, not sleep!) |
| 157 client_session_->OnDisconnected(); | 153 client_session_->Disconnect(); |
| 158 } | 154 } |
| 159 | 155 |
| 160 TEST_F(ClientSessionTest, RestoreEventState) { | 156 TEST_F(ClientSessionTest, RestoreEventState) { |
| 161 protocol::KeyEvent key1; | 157 protocol::KeyEvent key1; |
| 162 key1.set_pressed(true); | 158 key1.set_pressed(true); |
| 163 key1.set_keycode(1); | 159 key1.set_keycode(1); |
| 164 | 160 |
| 165 protocol::KeyEvent key2; | 161 protocol::KeyEvent key2; |
| 166 key2.set_pressed(true); | 162 key2.set_pressed(true); |
| 167 key2.set_keycode(2); | 163 key2.set_keycode(2); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 180 protocol::MouseEvent::BUTTON_LEFT))); | 176 protocol::MouseEvent::BUTTON_LEFT))); |
| 181 | 177 |
| 182 client_session_->RestoreEventState(); | 178 client_session_->RestoreEventState(); |
| 183 } | 179 } |
| 184 | 180 |
| 185 TEST_F(ClientSessionTest, ClampMouseEvents) { | 181 TEST_F(ClientSessionTest, ClampMouseEvents) { |
| 186 SkISize screen(SkISize::Make(200, 100)); | 182 SkISize screen(SkISize::Make(200, 100)); |
| 187 EXPECT_CALL(capturer_, size_most_recent()) | 183 EXPECT_CALL(capturer_, size_most_recent()) |
| 188 .WillRepeatedly(ReturnRef(screen)); | 184 .WillRepeatedly(ReturnRef(screen)); |
| 189 | 185 |
| 190 EXPECT_CALL(session_event_handler_, OnAuthenticationComplete(_)); | 186 EXPECT_CALL(session_event_handler_, |
| 191 client_session_->OnAuthenticationComplete(); | 187 OnSessionAuthenticated(client_session_.get())); |
| 188 client_session_->OnConnectionOpened(client_session_->connection()); |
| 192 | 189 |
| 193 int input_x[3] = { -999, 100, 999 }; | 190 int input_x[3] = { -999, 100, 999 }; |
| 194 int expected_x[3] = { 0, 100, 199 }; | 191 int expected_x[3] = { 0, 100, 199 }; |
| 195 int input_y[3] = { -999, 50, 999 }; | 192 int input_y[3] = { -999, 50, 999 }; |
| 196 int expected_y[3] = { 0, 50, 99 }; | 193 int expected_y[3] = { 0, 50, 99 }; |
| 197 | 194 |
| 198 protocol::MouseEvent event; | 195 protocol::MouseEvent event; |
| 199 for (int j = 0; j < 3; j++) { | 196 for (int j = 0; j < 3; j++) { |
| 200 for (int i = 0; i < 3; i++) { | 197 for (int i = 0; i < 3; i++) { |
| 201 event.set_x(input_x[i]); | 198 event.set_x(input_x[i]); |
| 202 event.set_y(input_y[j]); | 199 event.set_y(input_y[j]); |
| 203 EXPECT_CALL(input_stub_, InjectMouseEvent(EqualsMouseEvent( | 200 EXPECT_CALL(input_stub_, InjectMouseEvent(EqualsMouseEvent( |
| 204 expected_x[i], expected_y[j]))); | 201 expected_x[i], expected_y[j]))); |
| 205 client_session_->InjectMouseEvent(event); | 202 client_session_->InjectMouseEvent(event); |
| 206 } | 203 } |
| 207 } | 204 } |
| 208 } | 205 } |
| 209 | 206 |
| 210 } // namespace remoting | 207 } // namespace remoting |
| OLD | NEW |