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 "base/bind.h" | 5 #include "base/bind.h" |
6 #include "base/memory/scoped_ptr.h" | 6 #include "base/memory/scoped_ptr.h" |
7 #include "base/message_loop_proxy.h" | 7 #include "base/message_loop_proxy.h" |
8 #include "base/task.h" | 8 #include "base/task.h" |
9 #include "remoting/host/capturer_fake.h" | 9 #include "remoting/host/capturer_fake.h" |
10 #include "remoting/host/chromoting_host.h" | 10 #include "remoting/host/chromoting_host.h" |
11 #include "remoting/host/chromoting_host_context.h" | 11 #include "remoting/host/chromoting_host_context.h" |
12 #include "remoting/host/host_mock_objects.h" | 12 #include "remoting/host/host_mock_objects.h" |
13 #include "remoting/host/in_memory_host_config.h" | 13 #include "remoting/host/in_memory_host_config.h" |
14 #include "remoting/proto/video.pb.h" | 14 #include "remoting/proto/video.pb.h" |
15 #include "remoting/protocol/protocol_mock_objects.h" | 15 #include "remoting/protocol/protocol_mock_objects.h" |
16 #include "remoting/protocol/session_config.h" | 16 #include "remoting/protocol/session_config.h" |
17 #include "testing/gmock_mutant.h" | 17 #include "testing/gmock_mutant.h" |
18 #include "testing/gmock/include/gmock/gmock.h" | 18 #include "testing/gmock/include/gmock/gmock.h" |
19 #include "testing/gtest/include/gtest/gtest.h" | 19 #include "testing/gtest/include/gtest/gtest.h" |
20 | 20 |
21 using ::remoting::protocol::LocalLoginCredentials; | |
22 using ::remoting::protocol::MockClientStub; | 21 using ::remoting::protocol::MockClientStub; |
23 using ::remoting::protocol::MockConnectionToClient; | 22 using ::remoting::protocol::MockConnectionToClient; |
24 using ::remoting::protocol::MockConnectionToClientEventHandler; | 23 using ::remoting::protocol::MockConnectionToClientEventHandler; |
25 using ::remoting::protocol::MockHostStub; | 24 using ::remoting::protocol::MockHostStub; |
26 using ::remoting::protocol::MockSession; | 25 using ::remoting::protocol::MockSession; |
27 using ::remoting::protocol::MockVideoStub; | 26 using ::remoting::protocol::MockVideoStub; |
28 using ::remoting::protocol::SessionConfig; | 27 using ::remoting::protocol::SessionConfig; |
29 | 28 |
30 using testing::_; | 29 using testing::_; |
31 using testing::AnyNumber; | 30 using testing::AnyNumber; |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
95 local_input_monitor_ = new MockLocalInputMonitor(); | 94 local_input_monitor_ = new MockLocalInputMonitor(); |
96 desktop_environment_.reset( | 95 desktop_environment_.reset( |
97 new DesktopEnvironment(&context_, capturer, event_executor_, curtain_, | 96 new DesktopEnvironment(&context_, capturer, event_executor_, curtain_, |
98 disconnect_window_, continue_window_, | 97 disconnect_window_, continue_window_, |
99 local_input_monitor_)); | 98 local_input_monitor_)); |
100 MockAccessVerifier* access_verifier = new MockAccessVerifier(); | 99 MockAccessVerifier* access_verifier = new MockAccessVerifier(); |
101 | 100 |
102 host_ = ChromotingHost::Create(&context_, config_, | 101 host_ = ChromotingHost::Create(&context_, config_, |
103 desktop_environment_.get(), | 102 desktop_environment_.get(), |
104 access_verifier, false); | 103 access_verifier, false); |
105 credentials_.set_type(protocol::PASSWORD); | |
106 credentials_.set_username("user"); | |
107 credentials_.set_credential("password"); | |
108 connection_ = new MockConnectionToClient( | 104 connection_ = new MockConnectionToClient( |
109 &handler_, &host_stub_, event_executor_); | 105 &handler_, &host_stub_, event_executor_); |
110 connection2_ = new MockConnectionToClient( | 106 connection2_ = new MockConnectionToClient( |
111 &handler_, &host_stub2_, &event_executor2_); | 107 &handler_, &host_stub2_, &event_executor2_); |
112 session_.reset(new MockSession()); | 108 session_.reset(new MockSession()); |
113 session2_.reset(new MockSession()); | 109 session2_.reset(new MockSession()); |
114 session_config_ = SessionConfig::GetDefault(); | 110 session_config_ = SessionConfig::GetDefault(); |
115 session_jid_ = "user@domain/rest-of-jid"; | 111 session_jid_ = "user@domain/rest-of-jid"; |
116 session2_jid_ = "user2@domain/rest-of-jid"; | 112 session2_jid_ = "user2@domain/rest-of-jid"; |
117 session_config2_ = SessionConfig::GetDefault(); | 113 session_config2_ = SessionConfig::GetDefault(); |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
160 | 156 |
161 virtual void TearDown() OVERRIDE { | 157 virtual void TearDown() OVERRIDE { |
162 message_loop_.RunAllPending(); | 158 message_loop_.RunAllPending(); |
163 } | 159 } |
164 | 160 |
165 // Helper method to pretend a client is connected to ChromotingHost. | 161 // Helper method to pretend a client is connected to ChromotingHost. |
166 void SimulateClientConnection(int connection_index, bool authenticate) { | 162 void SimulateClientConnection(int connection_index, bool authenticate) { |
167 scoped_refptr<MockConnectionToClient> connection = | 163 scoped_refptr<MockConnectionToClient> connection = |
168 (connection_index == 0) ? connection_ : connection2_; | 164 (connection_index == 0) ? connection_ : connection2_; |
169 | 165 |
170 MockUserAuthenticator *user_authenticator = new MockUserAuthenticator; | |
171 EXPECT_CALL(*user_authenticator, Authenticate(_, _)) | |
172 .WillOnce(Return(authenticate)); | |
173 | |
174 scoped_refptr<ClientSession> client = new ClientSession( | 166 scoped_refptr<ClientSession> client = new ClientSession( |
175 host_.get(), | 167 host_.get(), |
176 user_authenticator, | |
177 connection, | 168 connection, |
178 event_executor_, | 169 event_executor_, |
179 desktop_environment_->capturer()); | 170 desktop_environment_->capturer()); |
180 connection->set_host_stub(client.get()); | 171 connection->set_host_stub(client.get()); |
181 | 172 |
182 context_.network_message_loop()->PostTask( | 173 context_.network_message_loop()->PostTask( |
183 FROM_HERE, | 174 FROM_HERE, |
184 NewRunnableFunction(&ChromotingHostTest::AddClientToHost, | 175 NewRunnableFunction(&ChromotingHostTest::AddClientToHost, |
185 host_, client)); | 176 host_, client)); |
186 context_.network_message_loop()->PostTask( | 177 if (authenticate) { |
187 FROM_HERE, | 178 context_.network_message_loop()->PostTask( |
188 NewRunnableMethod(client.get(), | 179 FROM_HERE, |
189 &ClientSession::BeginSessionRequest, | 180 NewRunnableMethod(client.get(), |
190 &credentials_, | 181 &ClientSession::OnAuthenticationComplete)); |
191 base::Bind(&DummyDoneTask))); | 182 } |
192 } | 183 } |
193 | 184 |
194 // Helper method to remove a client connection from ChromotingHost. | 185 // Helper method to remove a client connection from ChromotingHost. |
195 void RemoveClientConnection() { | 186 void RemoveClientConnection() { |
196 context_.network_message_loop()->PostTask( | 187 context_.network_message_loop()->PostTask( |
197 FROM_HERE, | 188 FROM_HERE, |
198 NewRunnableMethod(host_.get(), | 189 NewRunnableMethod(host_.get(), |
199 &ChromotingHost::OnClientDisconnected, | 190 &ChromotingHost::OnClientDisconnected, |
200 connection_)); | 191 connection_)); |
201 } | 192 } |
202 | 193 |
203 static void AddClientToHost(scoped_refptr<ChromotingHost> host, | 194 static void AddClientToHost(scoped_refptr<ChromotingHost> host, |
204 scoped_refptr<ClientSession> session) { | 195 scoped_refptr<ClientSession> session) { |
205 host->clients_.push_back(session); | 196 host->clients_.push_back(session); |
206 } | 197 } |
207 | 198 |
208 void ShutdownHost() { | 199 void ShutdownHost() { |
209 host_->Shutdown( | 200 host_->Shutdown( |
210 NewRunnableFunction(&PostQuitTask, &message_loop_)); | 201 NewRunnableFunction(&PostQuitTask, &message_loop_)); |
211 } | 202 } |
212 | 203 |
213 protected: | 204 protected: |
214 MessageLoop message_loop_; | 205 MessageLoop message_loop_; |
215 scoped_refptr<base::MessageLoopProxy> message_loop_proxy_; | 206 scoped_refptr<base::MessageLoopProxy> message_loop_proxy_; |
216 MockConnectionToClientEventHandler handler_; | 207 MockConnectionToClientEventHandler handler_; |
217 scoped_ptr<DesktopEnvironment> desktop_environment_; | 208 scoped_ptr<DesktopEnvironment> desktop_environment_; |
218 scoped_refptr<ChromotingHost> host_; | 209 scoped_refptr<ChromotingHost> host_; |
219 scoped_refptr<InMemoryHostConfig> config_; | 210 scoped_refptr<InMemoryHostConfig> config_; |
220 MockChromotingHostContext context_; | 211 MockChromotingHostContext context_; |
221 protocol::LocalLoginCredentials credentials_; | |
222 scoped_refptr<MockConnectionToClient> connection_; | 212 scoped_refptr<MockConnectionToClient> connection_; |
223 std::string session_jid_; | 213 std::string session_jid_; |
224 scoped_ptr<MockSession> session_; | 214 scoped_ptr<MockSession> session_; |
225 SessionConfig session_config_; | 215 SessionConfig session_config_; |
226 MockVideoStub video_stub_; | 216 MockVideoStub video_stub_; |
227 MockClientStub client_stub_; | 217 MockClientStub client_stub_; |
228 MockHostStub host_stub_; | 218 MockHostStub host_stub_; |
229 scoped_refptr<MockConnectionToClient> connection2_; | 219 scoped_refptr<MockConnectionToClient> connection2_; |
230 std::string session2_jid_; | 220 std::string session2_jid_; |
231 scoped_ptr<MockSession> session2_; | 221 scoped_ptr<MockSession> session2_; |
(...skipping 17 matching lines...) Expand all Loading... |
249 message_loop_.PostTask( | 239 message_loop_.PostTask( |
250 FROM_HERE,NewRunnableMethod( | 240 FROM_HERE,NewRunnableMethod( |
251 host_.get(), &ChromotingHost::Shutdown, | 241 host_.get(), &ChromotingHost::Shutdown, |
252 NewRunnableFunction(&PostQuitTask, &message_loop_))); | 242 NewRunnableFunction(&PostQuitTask, &message_loop_))); |
253 message_loop_.Run(); | 243 message_loop_.Run(); |
254 } | 244 } |
255 | 245 |
256 TEST_F(ChromotingHostTest, DISABLED_Connect) { | 246 TEST_F(ChromotingHostTest, DISABLED_Connect) { |
257 host_->Start(); | 247 host_->Start(); |
258 | 248 |
259 EXPECT_CALL(client_stub_, BeginSessionResponse(_, _)) | |
260 .WillOnce(RunDoneTask()); | |
261 | |
262 // When the video packet is received we first shutdown ChromotingHost | 249 // When the video packet is received we first shutdown ChromotingHost |
263 // then execute the done task. | 250 // then execute the done task. |
264 { | 251 { |
265 InSequence s; | 252 InSequence s; |
266 EXPECT_CALL(*curtain_, EnableCurtainMode(true)) | 253 EXPECT_CALL(*curtain_, EnableCurtainMode(true)) |
267 .Times(1); | 254 .Times(1); |
268 EXPECT_CALL(*disconnect_window_, Show(_, _)) | 255 EXPECT_CALL(*disconnect_window_, Show(_, _)) |
269 .Times(0); | 256 .Times(0); |
270 EXPECT_CALL(video_stub_, ProcessVideoPacket(_, _)) | 257 EXPECT_CALL(video_stub_, ProcessVideoPacket(_, _)) |
271 .WillOnce(DoAll( | 258 .WillOnce(DoAll( |
272 InvokeWithoutArgs(this, &ChromotingHostTest::ShutdownHost), | 259 InvokeWithoutArgs(this, &ChromotingHostTest::ShutdownHost), |
273 RunDoneTask())) | 260 RunDoneTask())) |
274 .RetiresOnSaturation(); | 261 .RetiresOnSaturation(); |
275 EXPECT_CALL(video_stub_, ProcessVideoPacket(_, _)) | 262 EXPECT_CALL(video_stub_, ProcessVideoPacket(_, _)) |
276 .Times(AnyNumber()); | 263 .Times(AnyNumber()); |
277 EXPECT_CALL(*connection_.get(), Disconnect()) | 264 EXPECT_CALL(*connection_.get(), Disconnect()) |
278 .RetiresOnSaturation(); | 265 .RetiresOnSaturation(); |
279 } | 266 } |
280 SimulateClientConnection(0, true); | 267 SimulateClientConnection(0, true); |
281 message_loop_.Run(); | 268 message_loop_.Run(); |
282 } | 269 } |
283 | 270 |
284 TEST_F(ChromotingHostTest, DISABLED_Reconnect) { | 271 TEST_F(ChromotingHostTest, DISABLED_Reconnect) { |
285 host_->Start(); | 272 host_->Start(); |
286 | 273 |
287 EXPECT_CALL(client_stub_, BeginSessionResponse(_, _)) | |
288 .Times(2) | |
289 .WillRepeatedly(RunDoneTask()); | |
290 | |
291 // When the video packet is received we first disconnect the mock | 274 // When the video packet is received we first disconnect the mock |
292 // connection. | 275 // connection. |
293 { | 276 { |
294 InSequence s; | 277 InSequence s; |
295 // Ensure that curtain mode is activated before the first video packet. | 278 // Ensure that curtain mode is activated before the first video packet. |
296 EXPECT_CALL(*curtain_, EnableCurtainMode(true)) | 279 EXPECT_CALL(*curtain_, EnableCurtainMode(true)) |
297 .Times(1); | 280 .Times(1); |
298 EXPECT_CALL(*disconnect_window_, Show(_, _)) | 281 EXPECT_CALL(*disconnect_window_, Show(_, _)) |
299 .Times(0); | 282 .Times(0); |
300 EXPECT_CALL(video_stub_, ProcessVideoPacket(_, _)) | 283 EXPECT_CALL(video_stub_, ProcessVideoPacket(_, _)) |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
338 EXPECT_CALL(*connection_.get(), Disconnect()) | 321 EXPECT_CALL(*connection_.get(), Disconnect()) |
339 .RetiresOnSaturation(); | 322 .RetiresOnSaturation(); |
340 | 323 |
341 SimulateClientConnection(0, true); | 324 SimulateClientConnection(0, true); |
342 message_loop_.Run(); | 325 message_loop_.Run(); |
343 } | 326 } |
344 | 327 |
345 TEST_F(ChromotingHostTest, DISABLED_ConnectTwice) { | 328 TEST_F(ChromotingHostTest, DISABLED_ConnectTwice) { |
346 host_->Start(); | 329 host_->Start(); |
347 | 330 |
348 EXPECT_CALL(client_stub_, BeginSessionResponse(_, _)) | |
349 .Times(1) | |
350 .WillRepeatedly(RunDoneTask()); | |
351 | |
352 EXPECT_CALL(client_stub2_, BeginSessionResponse(_, _)) | |
353 .Times(1) | |
354 .WillRepeatedly(RunDoneTask()); | |
355 | |
356 // When a video packet is received we connect the second mock | 331 // When a video packet is received we connect the second mock |
357 // connection. | 332 // connection. |
358 { | 333 { |
359 InSequence s; | 334 InSequence s; |
360 EXPECT_CALL(*curtain_, EnableCurtainMode(true)) | 335 EXPECT_CALL(*curtain_, EnableCurtainMode(true)) |
361 .Times(1) | 336 .Times(1) |
362 .WillOnce(QuitMainMessageLoop(&message_loop_)); | 337 .WillOnce(QuitMainMessageLoop(&message_loop_)); |
363 EXPECT_CALL(*disconnect_window_, Show(_, _)) | 338 EXPECT_CALL(*disconnect_window_, Show(_, _)) |
364 .Times(0); | 339 .Times(0); |
365 EXPECT_CALL(video_stub_, ProcessVideoPacket(_, _)) | 340 EXPECT_CALL(video_stub_, ProcessVideoPacket(_, _)) |
(...skipping 25 matching lines...) Expand all Loading... |
391 EXPECT_CALL(*connection2_.get(), Disconnect()) | 366 EXPECT_CALL(*connection2_.get(), Disconnect()) |
392 .RetiresOnSaturation(); | 367 .RetiresOnSaturation(); |
393 | 368 |
394 SimulateClientConnection(0, true); | 369 SimulateClientConnection(0, true); |
395 message_loop_.Run(); | 370 message_loop_.Run(); |
396 } | 371 } |
397 | 372 |
398 TEST_F(ChromotingHostTest, CurtainModeFail) { | 373 TEST_F(ChromotingHostTest, CurtainModeFail) { |
399 host_->Start(); | 374 host_->Start(); |
400 | 375 |
401 EXPECT_CALL(client_stub_, BeginSessionResponse(_, _)) | |
402 .WillOnce(RunDoneTask()); | |
403 | |
404 // Ensure that curtain mode is not activated if a connection does not | 376 // Ensure that curtain mode is not activated if a connection does not |
405 // authenticate. | 377 // authenticate. |
406 EXPECT_CALL(*curtain_, EnableCurtainMode(_)) | 378 EXPECT_CALL(*curtain_, EnableCurtainMode(_)) |
407 .Times(0); | 379 .Times(0); |
408 EXPECT_CALL(*disconnect_window_, Show(_, _)) | 380 EXPECT_CALL(*disconnect_window_, Show(_, _)) |
409 .Times(0); | 381 .Times(0); |
410 EXPECT_CALL(*connection_.get(), Disconnect()) | 382 EXPECT_CALL(*connection_.get(), Disconnect()) |
411 .WillOnce(QuitMainMessageLoop(&message_loop_)); | 383 .WillOnce(QuitMainMessageLoop(&message_loop_)); |
412 SimulateClientConnection(0, false); | 384 SimulateClientConnection(0, false); |
413 RemoveClientConnection(); | 385 RemoveClientConnection(); |
414 message_loop_.Run(); | 386 message_loop_.Run(); |
415 } | 387 } |
416 | 388 |
417 TEST_F(ChromotingHostTest, CurtainModeFailSecond) { | 389 TEST_F(ChromotingHostTest, CurtainModeFailSecond) { |
418 host_->Start(); | 390 host_->Start(); |
419 | 391 |
420 EXPECT_CALL(client_stub_, BeginSessionResponse(_, _)) | |
421 .WillOnce(RunDoneTask()); | |
422 | |
423 EXPECT_CALL(client_stub2_, BeginSessionResponse(_, _)) | |
424 .WillOnce(RunDoneTask()); | |
425 | |
426 | |
427 // When a video packet is received we connect the second mock | 392 // When a video packet is received we connect the second mock |
428 // connection. | 393 // connection. |
429 { | 394 { |
430 InSequence s; | 395 InSequence s; |
431 EXPECT_CALL(*curtain_, EnableCurtainMode(true)) | 396 EXPECT_CALL(*curtain_, EnableCurtainMode(true)) |
432 .WillOnce(QuitMainMessageLoop(&message_loop_)); | 397 .WillOnce(QuitMainMessageLoop(&message_loop_)); |
433 EXPECT_CALL(*disconnect_window_, Show(_, _)) | 398 EXPECT_CALL(*disconnect_window_, Show(_, _)) |
434 .Times(0); | 399 .Times(0); |
435 EXPECT_CALL(video_stub_, ProcessVideoPacket(_, _)) | 400 EXPECT_CALL(video_stub_, ProcessVideoPacket(_, _)) |
436 .WillOnce(DoAll( | 401 .WillOnce(DoAll( |
(...skipping 17 matching lines...) Expand all Loading... |
454 SimulateClientConnection(0, true); | 419 SimulateClientConnection(0, true); |
455 message_loop_.Run(); | 420 message_loop_.Run(); |
456 } | 421 } |
457 | 422 |
458 ACTION_P(SetBool, var) { *var = true; } | 423 ACTION_P(SetBool, var) { *var = true; } |
459 | 424 |
460 TEST_F(ChromotingHostTest, CurtainModeIT2Me) { | 425 TEST_F(ChromotingHostTest, CurtainModeIT2Me) { |
461 host_->Start(); | 426 host_->Start(); |
462 host_->set_it2me(true); | 427 host_->set_it2me(true); |
463 | 428 |
464 EXPECT_CALL(client_stub_, BeginSessionResponse(_, _)) | |
465 .WillOnce(RunDoneTask()); | |
466 | |
467 // When the video packet is received we first shutdown ChromotingHost | 429 // When the video packet is received we first shutdown ChromotingHost |
468 // then execute the done task. | 430 // then execute the done task. |
469 bool curtain_activated = false; | 431 bool curtain_activated = false; |
470 { | 432 { |
471 Sequence s1, s2; | 433 Sequence s1, s2; |
472 // Can't just expect Times(0) because if it fails then the host will | 434 // Can't just expect Times(0) because if it fails then the host will |
473 // not be shut down and the message loop will never exit. | 435 // not be shut down and the message loop will never exit. |
474 EXPECT_CALL(*curtain_, EnableCurtainMode(_)) | 436 EXPECT_CALL(*curtain_, EnableCurtainMode(_)) |
475 .Times(AnyNumber()) | 437 .Times(AnyNumber()) |
476 .WillRepeatedly(SetBool(&curtain_activated)); | 438 .WillRepeatedly(SetBool(&curtain_activated)); |
477 EXPECT_CALL(*disconnect_window_, Show(_, "user@domain")) | 439 EXPECT_CALL(*disconnect_window_, Show(_, "user@domain")) |
478 .Times(1) | 440 .Times(1) |
479 .InSequence(s1); | 441 .InSequence(s1); |
480 EXPECT_CALL(*local_input_monitor_, Start(_)) | 442 EXPECT_CALL(*local_input_monitor_, Start(_)) |
481 .Times(1) | 443 .Times(1) |
482 .InSequence(s2); | 444 .InSequence(s2); |
483 EXPECT_CALL(video_stub_, ProcessVideoPacket(_, _)) | 445 EXPECT_CALL(video_stub_, ProcessVideoPacket(_, _)) |
484 .InSequence(s1, s2) | 446 .InSequence(s1, s2) |
485 .WillOnce(DoAll( | 447 .WillOnce(DoAll( |
486 InvokeWithoutArgs(this, &ChromotingHostTest::ShutdownHost), | 448 InvokeWithoutArgs(this, &ChromotingHostTest::ShutdownHost), |
487 RunDoneTask())) | 449 RunDoneTask())) |
488 .RetiresOnSaturation(); | 450 .RetiresOnSaturation(); |
489 EXPECT_CALL(video_stub_, ProcessVideoPacket(_, _)) | 451 EXPECT_CALL(video_stub_, ProcessVideoPacket(_, _)) |
490 .Times(AnyNumber()) | 452 .Times(AnyNumber()) |
491 .InSequence(s1, s2); | 453 .InSequence(s1, s2); |
492 EXPECT_CALL(*connection_.get(), Disconnect()) | 454 EXPECT_CALL(*connection_.get(), Disconnect()) |
493 .InSequence(s1, s2) | 455 .InSequence(s1, s2) |
494 .RetiresOnSaturation(); | 456 .RetiresOnSaturation(); |
| 457 EXPECT_CALL(*local_input_monitor_, Stop()) |
| 458 .Times(1) |
| 459 .InSequence(s1, s2); |
| 460 EXPECT_CALL(*continue_window_, Hide()) |
| 461 .Times(1) |
| 462 .InSequence(s1); |
| 463 EXPECT_CALL(*disconnect_window_, Hide()) |
| 464 .Times(1) |
| 465 .InSequence(s2); |
495 } | 466 } |
496 SimulateClientConnection(0, true); | 467 SimulateClientConnection(0, true); |
497 message_loop_.Run(); | 468 message_loop_.Run(); |
498 host_->set_it2me(false); | 469 host_->set_it2me(false); |
499 EXPECT_THAT(curtain_activated, false); | 470 EXPECT_THAT(curtain_activated, false); |
500 } | 471 } |
501 | 472 |
502 } // namespace remoting | 473 } // namespace remoting |
OLD | NEW |