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

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

Issue 8725016: Refactor IT2Me-specific functions into a HostObserver subclass. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix indentation nits. Created 9 years 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.h ('k') | remoting/host/chromoting_host_unittest.cc » ('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) 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/chromoting_host.h" 5 #include "remoting/host/chromoting_host.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/callback.h" 8 #include "base/callback.h"
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/message_loop_proxy.h" 10 #include "base/message_loop_proxy.h"
11 #include "build/build_config.h" 11 #include "build/build_config.h"
12 #include "remoting/base/constants.h" 12 #include "remoting/base/constants.h"
13 #include "remoting/base/encoder.h" 13 #include "remoting/base/encoder.h"
14 #include "remoting/base/encoder_row_based.h" 14 #include "remoting/base/encoder_row_based.h"
15 #include "remoting/base/encoder_vp8.h" 15 #include "remoting/base/encoder_vp8.h"
16 #include "remoting/host/chromoting_host_context.h" 16 #include "remoting/host/chromoting_host_context.h"
17 #include "remoting/host/curtain.h"
18 #include "remoting/host/desktop_environment.h" 17 #include "remoting/host/desktop_environment.h"
19 #include "remoting/host/event_executor.h" 18 #include "remoting/host/event_executor.h"
20 #include "remoting/host/host_config.h" 19 #include "remoting/host/host_config.h"
21 #include "remoting/host/screen_recorder.h" 20 #include "remoting/host/screen_recorder.h"
22 #include "remoting/jingle_glue/xmpp_signal_strategy.h" 21 #include "remoting/jingle_glue/xmpp_signal_strategy.h"
23 #include "remoting/protocol/connection_to_client.h" 22 #include "remoting/protocol/connection_to_client.h"
24 #include "remoting/protocol/client_stub.h" 23 #include "remoting/protocol/client_stub.h"
25 #include "remoting/protocol/host_stub.h" 24 #include "remoting/protocol/host_stub.h"
26 #include "remoting/protocol/input_stub.h" 25 #include "remoting/protocol/input_stub.h"
27 #include "remoting/protocol/jingle_session_manager.h" 26 #include "remoting/protocol/jingle_session_manager.h"
(...skipping 17 matching lines...) Expand all
45 MutableHostConfig* config, 44 MutableHostConfig* config,
46 DesktopEnvironment* environment, 45 DesktopEnvironment* environment,
47 bool allow_nat_traversal) 46 bool allow_nat_traversal)
48 : context_(context), 47 : context_(context),
49 desktop_environment_(environment), 48 desktop_environment_(environment),
50 config_(config), 49 config_(config),
51 allow_nat_traversal_(allow_nat_traversal), 50 allow_nat_traversal_(allow_nat_traversal),
52 stopping_recorders_(0), 51 stopping_recorders_(0),
53 state_(kInitial), 52 state_(kInitial),
54 protocol_config_(protocol::CandidateSessionConfig::CreateDefault()), 53 protocol_config_(protocol::CandidateSessionConfig::CreateDefault()),
55 is_curtained_(false),
56 is_it2me_(false) { 54 is_it2me_(false) {
57 DCHECK(desktop_environment_); 55 DCHECK(desktop_environment_);
58 desktop_environment_->set_host(this); 56 desktop_environment_->set_host(this);
59 } 57 }
60 58
61 ChromotingHost::~ChromotingHost() { 59 ChromotingHost::~ChromotingHost() {
62 DCHECK(clients_.empty()); 60 DCHECK(clients_.empty());
63 } 61 }
64 62
65 void ChromotingHost::Start() { 63 void ChromotingHost::Start() {
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after
201 // Immediately add the connection and start the session. 199 // Immediately add the connection and start the session.
202 recorder_->AddConnection(client->connection()); 200 recorder_->AddConnection(client->connection());
203 recorder_->Start(); 201 recorder_->Start();
204 202
205 // Notify observers that there is at least one authenticated client. 203 // Notify observers that there is at least one authenticated client.
206 const std::string& jid = client->connection()->session()->jid(); 204 const std::string& jid = client->connection()->session()->jid();
207 for (StatusObserverList::iterator it = status_observers_.begin(); 205 for (StatusObserverList::iterator it = status_observers_.begin();
208 it != status_observers_.end(); ++it) { 206 it != status_observers_.end(); ++it) {
209 (*it)->OnClientAuthenticated(jid); 207 (*it)->OnClientAuthenticated(jid);
210 } 208 }
211 // TODO(jamiewalch): Tidy up actions to be taken on connect/disconnect,
212 // including closing the connection on failure of a critical operation.
213 EnableCurtainMode(true);
214
215 std::string username = jid.substr(0, jid.find('/'));
216 desktop_environment_->OnConnect(username);
217 } 209 }
218 210
219 void ChromotingHost::OnSessionAuthenticationFailed(ClientSession* client) { 211 void ChromotingHost::OnSessionAuthenticationFailed(ClientSession* client) {
220 // Notify observers. 212 // Notify observers.
221 for (StatusObserverList::iterator it = status_observers_.begin(); 213 for (StatusObserverList::iterator it = status_observers_.begin();
222 it != status_observers_.end(); ++it) { 214 it != status_observers_.end(); ++it) {
223 (*it)->OnAccessDenied(); 215 (*it)->OnAccessDenied();
224 } 216 }
225 } 217 }
226 218
(...skipping 13 matching lines...) Expand all
240 for (StatusObserverList::iterator it = status_observers_.begin(); 232 for (StatusObserverList::iterator it = status_observers_.begin();
241 it != status_observers_.end(); ++it) { 233 it != status_observers_.end(); ++it) {
242 (*it)->OnClientDisconnected(client->client_jid()); 234 (*it)->OnClientDisconnected(client->client_jid());
243 } 235 }
244 236
245 if (AuthenticatedClientsCount() == 0) { 237 if (AuthenticatedClientsCount() == 0) {
246 if (recorder_.get()) { 238 if (recorder_.get()) {
247 // Stop the recorder if there are no more clients. 239 // Stop the recorder if there are no more clients.
248 StopScreenRecorder(); 240 StopScreenRecorder();
249 } 241 }
250
251 // Disable the "curtain" if there are no more active clients.
252 EnableCurtainMode(false);
253 desktop_environment_->OnLastDisconnect();
254 } 242 }
255 } 243 }
256 244
257 void ChromotingHost::OnSessionSequenceNumber(ClientSession* session, 245 void ChromotingHost::OnSessionSequenceNumber(ClientSession* session,
258 int64 sequence_number) { 246 int64 sequence_number) {
259 DCHECK(context_->network_message_loop()->BelongsToCurrentThread()); 247 DCHECK(context_->network_message_loop()->BelongsToCurrentThread());
260 if (recorder_.get()) 248 if (recorder_.get())
261 recorder_->UpdateSequenceNumber(sequence_number); 249 recorder_->UpdateSequenceNumber(sequence_number);
262 } 250 }
263 251
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after
376 if (!context_->network_message_loop()->BelongsToCurrentThread()) { 364 if (!context_->network_message_loop()->BelongsToCurrentThread()) {
377 context_->network_message_loop()->PostTask( 365 context_->network_message_loop()->PostTask(
378 FROM_HERE, base::Bind(&ChromotingHost::PauseSession, this, pause)); 366 FROM_HERE, base::Bind(&ChromotingHost::PauseSession, this, pause));
379 return; 367 return;
380 } 368 }
381 369
382 ClientList::iterator client; 370 ClientList::iterator client;
383 for (client = clients_.begin(); client != clients_.end(); ++client) { 371 for (client = clients_.begin(); client != clients_.end(); ++client) {
384 (*client)->set_awaiting_continue_approval(pause); 372 (*client)->set_awaiting_continue_approval(pause);
385 } 373 }
386 desktop_environment_->OnPause(pause);
387 } 374 }
388 375
389 void ChromotingHost::SetUiStrings(const UiStrings& ui_strings) { 376 void ChromotingHost::SetUiStrings(const UiStrings& ui_strings) {
390 DCHECK_EQ(context_->main_message_loop(), MessageLoop::current()); 377 DCHECK_EQ(context_->main_message_loop(), MessageLoop::current());
391 DCHECK_EQ(state_, kInitial); 378 DCHECK_EQ(state_, kInitial);
392 379
393 ui_strings_ = ui_strings; 380 ui_strings_ = ui_strings;
394 } 381 }
395 382
396 // TODO(sergeyu): Move this to SessionManager? 383 // TODO(sergeyu): Move this to SessionManager?
(...skipping 16 matching lines...) Expand all
413 400
414 int authenticated_clients = 0; 401 int authenticated_clients = 0;
415 for (ClientList::const_iterator it = clients_.begin(); it != clients_.end(); 402 for (ClientList::const_iterator it = clients_.begin(); it != clients_.end();
416 ++it) { 403 ++it) {
417 if ((*it)->authenticated()) 404 if ((*it)->authenticated())
418 ++authenticated_clients; 405 ++authenticated_clients;
419 } 406 }
420 return authenticated_clients; 407 return authenticated_clients;
421 } 408 }
422 409
423 void ChromotingHost::EnableCurtainMode(bool enable) {
424 // TODO(jamiewalch): This will need to be more sophisticated when we think
425 // about proper crash recovery and daemon mode.
426 // TODO(wez): CurtainMode shouldn't be driven directly by ChromotingHost.
427 if (is_it2me_ || enable == is_curtained_)
428 return;
429 desktop_environment_->curtain()->EnableCurtainMode(enable);
430 is_curtained_ = enable;
431 }
432
433 void ChromotingHost::StopScreenRecorder() { 410 void ChromotingHost::StopScreenRecorder() {
434 DCHECK(context_->network_message_loop()->BelongsToCurrentThread()); 411 DCHECK(context_->network_message_loop()->BelongsToCurrentThread());
435 DCHECK(recorder_.get()); 412 DCHECK(recorder_.get());
436 413
437 ++stopping_recorders_; 414 ++stopping_recorders_;
438 scoped_refptr<ScreenRecorder> recorder = recorder_; 415 scoped_refptr<ScreenRecorder> recorder = recorder_;
439 recorder_ = NULL; 416 recorder_ = NULL;
440 recorder->Stop(base::Bind(&ChromotingHost::OnScreenRecorderStopped, this)); 417 recorder->Stop(base::Bind(&ChromotingHost::OnScreenRecorderStopped, this));
441 } 418 }
442 419
(...skipping 27 matching lines...) Expand all
470 } 447 }
471 448
472 for (std::vector<base::Closure>::iterator it = shutdown_tasks_.begin(); 449 for (std::vector<base::Closure>::iterator it = shutdown_tasks_.begin();
473 it != shutdown_tasks_.end(); ++it) { 450 it != shutdown_tasks_.end(); ++it) {
474 it->Run(); 451 it->Run();
475 } 452 }
476 shutdown_tasks_.clear(); 453 shutdown_tasks_.clear();
477 } 454 }
478 455
479 } // namespace remoting 456 } // namespace remoting
OLDNEW
« no previous file with comments | « remoting/host/chromoting_host.h ('k') | remoting/host/chromoting_host_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698