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

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

Issue 13461029: The continue window is owned by the desktop environment now. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebased Created 7 years, 8 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 | Annotate | Revision Log
« no previous file with comments | « remoting/host/chromoting_host.cc ('k') | remoting/host/continue_window.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 "base/bind.h" 5 #include "base/bind.h"
6 #include "base/bind_helpers.h" 6 #include "base/bind_helpers.h"
7 #include "base/memory/scoped_ptr.h" 7 #include "base/memory/scoped_ptr.h"
8 #include "base/message_loop_proxy.h" 8 #include "base/message_loop_proxy.h"
9 #include "media/video/capture/screen/screen_capturer_fake.h" 9 #include "media/video/capture/screen/screen_capturer_fake.h"
10 #include "remoting/base/auto_thread_task_runner.h" 10 #include "remoting/base/auto_thread_task_runner.h"
11 #include "remoting/host/audio_capturer.h" 11 #include "remoting/host/audio_capturer.h"
12 #include "remoting/host/chromoting_host.h" 12 #include "remoting/host/chromoting_host.h"
13 #include "remoting/host/chromoting_host_context.h" 13 #include "remoting/host/chromoting_host_context.h"
14 #include "remoting/host/desktop_environment.h" 14 #include "remoting/host/desktop_environment.h"
15 #include "remoting/host/host_mock_objects.h" 15 #include "remoting/host/host_mock_objects.h"
16 #include "remoting/host/it2me_host_user_interface.h"
17 #include "remoting/jingle_glue/mock_objects.h" 16 #include "remoting/jingle_glue/mock_objects.h"
18 #include "remoting/proto/video.pb.h" 17 #include "remoting/proto/video.pb.h"
19 #include "remoting/protocol/errors.h" 18 #include "remoting/protocol/errors.h"
20 #include "remoting/protocol/protocol_mock_objects.h" 19 #include "remoting/protocol/protocol_mock_objects.h"
21 #include "remoting/protocol/session_config.h" 20 #include "remoting/protocol/session_config.h"
22 #include "testing/gmock/include/gmock/gmock.h" 21 #include "testing/gmock/include/gmock/gmock.h"
23 #include "testing/gmock_mutant.h" 22 #include "testing/gmock_mutant.h"
24 #include "testing/gtest/include/gtest/gtest.h" 23 #include "testing/gtest/include/gtest/gtest.h"
25 24
26 using ::remoting::protocol::MockClientStub; 25 using ::remoting::protocol::MockClientStub;
(...skipping 29 matching lines...) Expand all
56 } 55 }
57 56
58 // Run the task and delete it afterwards. This action is used to deal with 57 // Run the task and delete it afterwards. This action is used to deal with
59 // done callbacks. 58 // done callbacks.
60 ACTION(RunDoneTask) { 59 ACTION(RunDoneTask) {
61 arg1.Run(); 60 arg1.Run();
62 } 61 }
63 62
64 } // namespace 63 } // namespace
65 64
66 class MockIt2MeHostUserInterface : public It2MeHostUserInterface {
67 public:
68 MockIt2MeHostUserInterface(
69 scoped_refptr<base::SingleThreadTaskRunner> network_task_runner,
70 scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner);
71
72 void InitFrom(scoped_ptr<ContinueWindow> continue_window);
73
74 // A test-only version of Start that does not register a HostStatusObserver.
75 // TODO(rmsousa): Make the unit tests work with the regular Start().
76 virtual void Start(ChromotingHost* host,
77 const base::Closure& disconnect_callback) OVERRIDE;
78 };
79
80 MockIt2MeHostUserInterface::MockIt2MeHostUserInterface(
81 scoped_refptr<base::SingleThreadTaskRunner> network_task_runner,
82 scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner)
83 : It2MeHostUserInterface(network_task_runner, ui_task_runner, UiStrings()) {
84 }
85
86 void MockIt2MeHostUserInterface::InitFrom(
87 scoped_ptr<ContinueWindow> continue_window) {
88 DCHECK(ui_task_runner()->BelongsToCurrentThread());
89
90 continue_window_ = continue_window.Pass();
91 }
92
93 void MockIt2MeHostUserInterface::Start(
94 ChromotingHost* host, const base::Closure& disconnect_callback) {
95 DCHECK(network_task_runner()->BelongsToCurrentThread());
96 DCHECK(host_ == NULL);
97
98 host_ = host;
99 disconnect_callback_ = disconnect_callback;
100 }
101
102 class ChromotingHostTest : public testing::Test { 65 class ChromotingHostTest : public testing::Test {
103 public: 66 public:
104 ChromotingHostTest() { 67 ChromotingHostTest() {
105 } 68 }
106 69
107 virtual void SetUp() OVERRIDE { 70 virtual void SetUp() OVERRIDE {
108 ui_task_runner_ = new AutoThreadTaskRunner( 71 ui_task_runner_ = new AutoThreadTaskRunner(
109 message_loop_.message_loop_proxy(), 72 message_loop_.message_loop_proxy(),
110 base::Bind(&ChromotingHostTest::QuitMainMessageLoop, 73 base::Bind(&ChromotingHostTest::QuitMainMessageLoop,
111 base::Unretained(this))); 74 base::Unretained(this)));
(...skipping 14 matching lines...) Expand all
126 desktop_environment_factory_.get(), 89 desktop_environment_factory_.get(),
127 scoped_ptr<protocol::SessionManager>(session_manager_), 90 scoped_ptr<protocol::SessionManager>(session_manager_),
128 ui_task_runner_, // Audio 91 ui_task_runner_, // Audio
129 ui_task_runner_, // Input 92 ui_task_runner_, // Input
130 ui_task_runner_, // Video capture 93 ui_task_runner_, // Video capture
131 ui_task_runner_, // Video encode 94 ui_task_runner_, // Video encode
132 ui_task_runner_, // Network 95 ui_task_runner_, // Network
133 ui_task_runner_); // UI 96 ui_task_runner_); // UI
134 host_->AddStatusObserver(&host_status_observer_); 97 host_->AddStatusObserver(&host_status_observer_);
135 98
136 continue_window_ = new MockContinueWindow();
137 it2me_host_user_interface_.reset(
138 new MockIt2MeHostUserInterface(ui_task_runner_, ui_task_runner_));
139 it2me_host_user_interface_->InitFrom(
140 scoped_ptr<ContinueWindow>(continue_window_));
141
142 it2me_host_user_interface_->Start(
143 host_, base::Bind(&ChromotingHost::Shutdown, host_, base::Closure()));
144
145 xmpp_login_ = "host@domain"; 99 xmpp_login_ = "host@domain";
146 session1_ = new MockSession(); 100 session1_ = new MockSession();
147 session2_ = new MockSession(); 101 session2_ = new MockSession();
148 session_unowned1_.reset(new MockSession()); 102 session_unowned1_.reset(new MockSession());
149 session_unowned2_.reset(new MockSession()); 103 session_unowned2_.reset(new MockSession());
150 session_config1_ = SessionConfig::ForTest(); 104 session_config1_ = SessionConfig::ForTest();
151 session_jid1_ = "user@domain/rest-of-jid"; 105 session_jid1_ = "user@domain/rest-of-jid";
152 session_config2_ = SessionConfig::ForTest(); 106 session_config2_ = SessionConfig::ForTest();
153 session_jid2_ = "user2@domain/rest-of-jid"; 107 session_jid2_ = "user2@domain/rest-of-jid";
154 session_unowned_config1_ = SessionConfig::ForTest(); 108 session_unowned_config1_ = SessionConfig::ForTest();
(...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after
351 305
352 void ShutdownHost() { 306 void ShutdownHost() {
353 ui_task_runner_->PostTask( 307 ui_task_runner_->PostTask(
354 FROM_HERE, 308 FROM_HERE,
355 base::Bind(&ChromotingHost::Shutdown, host_, 309 base::Bind(&ChromotingHost::Shutdown, host_,
356 base::Bind(&ChromotingHostTest::ReleaseUiTaskRunner, 310 base::Bind(&ChromotingHostTest::ReleaseUiTaskRunner,
357 base::Unretained(this)))); 311 base::Unretained(this))));
358 } 312 }
359 313
360 void ReleaseUiTaskRunner() { 314 void ReleaseUiTaskRunner() {
361 it2me_host_user_interface_.reset();
362 ui_task_runner_ = NULL; 315 ui_task_runner_ = NULL;
363 host_ = NULL; 316 host_ = NULL;
364 desktop_environment_factory_.reset(); 317 desktop_environment_factory_.reset();
365 } 318 }
366 319
367 void QuitMainMessageLoop() { 320 void QuitMainMessageLoop() {
368 PostQuitTask(&message_loop_); 321 PostQuitTask(&message_loop_);
369 } 322 }
370 323
371 // Expect the host to start.
372 void ExpectHostStart() {
373 EXPECT_CALL(*continue_window_, Hide());
374 }
375
376 // Expect the host and session manager to start, and return the expectation 324 // Expect the host and session manager to start, and return the expectation
377 // that the session manager has started. 325 // that the session manager has started.
378 Expectation ExpectHostAndSessionManagerStart() { 326 Expectation ExpectHostAndSessionManagerStart() {
379 ExpectHostStart();
380 EXPECT_CALL(host_status_observer_, OnStart(xmpp_login_)); 327 EXPECT_CALL(host_status_observer_, OnStart(xmpp_login_));
381 return EXPECT_CALL(*session_manager_, Init(_, host_.get())); 328 return EXPECT_CALL(*session_manager_, Init(_, host_.get()));
382 } 329 }
383 330
384 // Expect a client to connect. 331 // Expect a client to connect.
385 // Return an expectation that a session has started, and that the first 332 // Return an expectation that a session has started, and that the first
386 // video packet has been sent to the client. 333 // video packet has been sent to the client.
387 // Do |action| when that happens. 334 // Do |action| when that happens.
388 template <class A> 335 template <class A>
389 Expectation ExpectClientConnected(int connection_index, A action) { 336 Expectation ExpectClientConnected(int connection_index, A action) {
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
449 .RetiresOnSaturation(); 396 .RetiresOnSaturation();
450 } 397 }
451 } 398 }
452 399
453 protected: 400 protected:
454 MessageLoop message_loop_; 401 MessageLoop message_loop_;
455 scoped_refptr<AutoThreadTaskRunner> ui_task_runner_; 402 scoped_refptr<AutoThreadTaskRunner> ui_task_runner_;
456 MockConnectionToClientEventHandler handler_; 403 MockConnectionToClientEventHandler handler_;
457 MockSignalStrategy signal_strategy_; 404 MockSignalStrategy signal_strategy_;
458 scoped_ptr<MockDesktopEnvironmentFactory> desktop_environment_factory_; 405 scoped_ptr<MockDesktopEnvironmentFactory> desktop_environment_factory_;
459 scoped_ptr<MockIt2MeHostUserInterface> it2me_host_user_interface_;
460 scoped_refptr<ChromotingHost> host_; 406 scoped_refptr<ChromotingHost> host_;
461 MockHostStatusObserver host_status_observer_; 407 MockHostStatusObserver host_status_observer_;
462 protocol::MockSessionManager* session_manager_; 408 protocol::MockSessionManager* session_manager_;
463 std::string xmpp_login_; 409 std::string xmpp_login_;
464 MockConnectionToClient* connection1_; 410 MockConnectionToClient* connection1_;
465 scoped_ptr<MockConnectionToClient> owned_connection1_; 411 scoped_ptr<MockConnectionToClient> owned_connection1_;
466 ClientSession* client1_; 412 ClientSession* client1_;
467 std::string session_jid1_; 413 std::string session_jid1_;
468 MockSession* session1_; // Owned by |connection_|. 414 MockSession* session1_; // Owned by |connection_|.
469 SessionConfig session_config1_; 415 SessionConfig session_config1_;
(...skipping 12 matching lines...) Expand all
482 scoped_ptr<MockSession> session_unowned1_; // Not owned by a connection. 428 scoped_ptr<MockSession> session_unowned1_; // Not owned by a connection.
483 SessionConfig session_unowned_config1_; 429 SessionConfig session_unowned_config1_;
484 std::string session_unowned_jid1_; 430 std::string session_unowned_jid1_;
485 scoped_ptr<MockSession> session_unowned2_; // Not owned by a connection. 431 scoped_ptr<MockSession> session_unowned2_; // Not owned by a connection.
486 SessionConfig session_unowned_config2_; 432 SessionConfig session_unowned_config2_;
487 std::string session_unowned_jid2_; 433 std::string session_unowned_jid2_;
488 protocol::Session::EventHandler* session_event_handler_; 434 protocol::Session::EventHandler* session_event_handler_;
489 scoped_ptr<protocol::CandidateSessionConfig> empty_candidate_config_; 435 scoped_ptr<protocol::CandidateSessionConfig> empty_candidate_config_;
490 scoped_ptr<protocol::CandidateSessionConfig> default_candidate_config_; 436 scoped_ptr<protocol::CandidateSessionConfig> default_candidate_config_;
491 437
492 // Owned by |host_|.
493 MockContinueWindow* continue_window_;
494
495 MockConnectionToClient*& get_connection(int connection_index) { 438 MockConnectionToClient*& get_connection(int connection_index) {
496 return (connection_index == 0) ? connection1_ : connection2_; 439 return (connection_index == 0) ? connection1_ : connection2_;
497 } 440 }
498 441
499 ClientSession*& get_client(int connection_index) { 442 ClientSession*& get_client(int connection_index) {
500 return (connection_index == 0) ? client1_ : client2_; 443 return (connection_index == 0) ? client1_ : client2_;
501 } 444 }
502 445
503 const std::string& get_session_jid(int connection_index) { 446 const std::string& get_session_jid(int connection_index) {
504 return (connection_index == 0) ? session_jid1_ : session_jid2_; 447 return (connection_index == 0) ? session_jid1_ : session_jid2_;
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
603 Expectation client_disconnected2 = ExpectClientDisconnected( 546 Expectation client_disconnected2 = ExpectClientDisconnected(
604 1, true, video_packet_sent2, InvokeWithoutArgs(base::DoNothing)); 547 1, true, video_packet_sent2, InvokeWithoutArgs(base::DoNothing));
605 EXPECT_CALL(host_status_observer_, OnShutdown()).After(client_disconnected2); 548 EXPECT_CALL(host_status_observer_, OnShutdown()).After(client_disconnected2);
606 549
607 host_->Start(xmpp_login_); 550 host_->Start(xmpp_login_);
608 SimulateClientConnection(0, true, false); 551 SimulateClientConnection(0, true, false);
609 message_loop_.Run(); 552 message_loop_.Run();
610 } 553 }
611 554
612 TEST_F(ChromotingHostTest, IncomingSessionDeclined) { 555 TEST_F(ChromotingHostTest, IncomingSessionDeclined) {
613 ExpectHostStart();
614 protocol::SessionManager::IncomingSessionResponse response = 556 protocol::SessionManager::IncomingSessionResponse response =
615 protocol::SessionManager::ACCEPT; 557 protocol::SessionManager::ACCEPT;
616 host_->OnIncomingSession(session1_, &response); 558 host_->OnIncomingSession(session1_, &response);
617 EXPECT_EQ(protocol::SessionManager::DECLINE, response); 559 EXPECT_EQ(protocol::SessionManager::DECLINE, response);
618 560
619 ShutdownHost(); 561 ShutdownHost();
620 message_loop_.Run(); 562 message_loop_.Run();
621 } 563 }
622 564
623 TEST_F(ChromotingHostTest, IncomingSessionIncompatible) { 565 TEST_F(ChromotingHostTest, IncomingSessionIncompatible) {
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
711 ExpectClientDisconnected(0, true, video_packet_sent, 653 ExpectClientDisconnected(0, true, video_packet_sent,
712 InvokeWithoutArgs(this, &ChromotingHostTest::ShutdownHost)); 654 InvokeWithoutArgs(this, &ChromotingHostTest::ShutdownHost));
713 EXPECT_CALL(host_status_observer_, OnShutdown()); 655 EXPECT_CALL(host_status_observer_, OnShutdown());
714 656
715 host_->Start(xmpp_login_); 657 host_->Start(xmpp_login_);
716 SimulateClientConnection(0, true, false); 658 SimulateClientConnection(0, true, false);
717 message_loop_.Run(); 659 message_loop_.Run();
718 } 660 }
719 661
720 } // namespace remoting 662 } // namespace remoting
OLDNEW
« no previous file with comments | « remoting/host/chromoting_host.cc ('k') | remoting/host/continue_window.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698