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

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

Issue 11778049: Making DesktopEnvironment a factory class used by ClientSession to create audio/video capturers and… (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 11 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
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 "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"
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
53 false, 53 false,
54 }; 54 };
55 55
56 } // namespace 56 } // namespace
57 57
58 ChromotingHost::ChromotingHost( 58 ChromotingHost::ChromotingHost(
59 SignalStrategy* signal_strategy, 59 SignalStrategy* signal_strategy,
60 DesktopEnvironmentFactory* desktop_environment_factory, 60 DesktopEnvironmentFactory* desktop_environment_factory,
61 scoped_ptr<protocol::SessionManager> session_manager, 61 scoped_ptr<protocol::SessionManager> session_manager,
62 scoped_refptr<base::SingleThreadTaskRunner> audio_task_runner, 62 scoped_refptr<base::SingleThreadTaskRunner> audio_task_runner,
63 scoped_refptr<base::SingleThreadTaskRunner> input_task_runner,
63 scoped_refptr<base::SingleThreadTaskRunner> video_capture_task_runner, 64 scoped_refptr<base::SingleThreadTaskRunner> video_capture_task_runner,
64 scoped_refptr<base::SingleThreadTaskRunner> video_encode_task_runner, 65 scoped_refptr<base::SingleThreadTaskRunner> video_encode_task_runner,
65 scoped_refptr<base::SingleThreadTaskRunner> network_task_runner) 66 scoped_refptr<base::SingleThreadTaskRunner> network_task_runner,
67 scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner)
66 : desktop_environment_factory_(desktop_environment_factory), 68 : desktop_environment_factory_(desktop_environment_factory),
67 session_manager_(session_manager.Pass()), 69 session_manager_(session_manager.Pass()),
68 audio_task_runner_(audio_task_runner), 70 audio_task_runner_(audio_task_runner),
71 input_task_runner_(input_task_runner),
69 video_capture_task_runner_(video_capture_task_runner), 72 video_capture_task_runner_(video_capture_task_runner),
70 video_encode_task_runner_(video_encode_task_runner), 73 video_encode_task_runner_(video_encode_task_runner),
71 network_task_runner_(network_task_runner), 74 network_task_runner_(network_task_runner),
75 ui_task_runner_(ui_task_runner),
72 signal_strategy_(signal_strategy), 76 signal_strategy_(signal_strategy),
73 clients_count_(0), 77 clients_count_(0),
74 state_(kInitial), 78 state_(kInitial),
75 protocol_config_(protocol::CandidateSessionConfig::CreateDefault()), 79 protocol_config_(protocol::CandidateSessionConfig::CreateDefault()),
76 login_backoff_(&kDefaultBackoffPolicy), 80 login_backoff_(&kDefaultBackoffPolicy),
77 authenticating_client_(false), 81 authenticating_client_(false),
78 reject_authenticating_client_(false) { 82 reject_authenticating_client_(false) {
79 DCHECK(signal_strategy); 83 DCHECK(signal_strategy);
80 DCHECK(network_task_runner_->BelongsToCurrentThread()); 84 DCHECK(network_task_runner_->BelongsToCurrentThread());
81 85
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after
234 break; 238 break;
235 } 239 }
236 } 240 }
237 CHECK(it != clients_.end()); 241 CHECK(it != clients_.end());
238 242
239 if (client->is_authenticated()) { 243 if (client->is_authenticated()) {
240 FOR_EACH_OBSERVER(HostStatusObserver, status_observers_, 244 FOR_EACH_OBSERVER(HostStatusObserver, status_observers_,
241 OnClientDisconnected(client->client_jid())); 245 OnClientDisconnected(client->client_jid()));
242 } 246 }
243 247
244 client->Stop(base::Bind(&ChromotingHost::OnClientStopped, this)); 248 client->Stop();
245 clients_.erase(it); 249 clients_.erase(it);
250
251 --clients_count_;
252 if (state_ == kStopping && !clients_count_)
253 ShutdownFinish();
246 } 254 }
247 255
248 void ChromotingHost::OnSessionSequenceNumber(ClientSession* session, 256 void ChromotingHost::OnSessionSequenceNumber(ClientSession* session,
249 int64 sequence_number) { 257 int64 sequence_number) {
250 DCHECK(network_task_runner_->BelongsToCurrentThread()); 258 DCHECK(network_task_runner_->BelongsToCurrentThread());
251 } 259 }
252 260
253 void ChromotingHost::OnSessionRouteChange( 261 void ChromotingHost::OnSessionRouteChange(
254 ClientSession* session, 262 ClientSession* session,
255 const std::string& channel_name, 263 const std::string& channel_name,
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
307 *response = protocol::SessionManager::ACCEPT; 315 *response = protocol::SessionManager::ACCEPT;
308 316
309 LOG(INFO) << "Client connected: " << session->jid(); 317 LOG(INFO) << "Client connected: " << session->jid();
310 318
311 // Create a client object. 319 // Create a client object.
312 scoped_ptr<protocol::ConnectionToClient> connection( 320 scoped_ptr<protocol::ConnectionToClient> connection(
313 new protocol::ConnectionToClient(session)); 321 new protocol::ConnectionToClient(session));
314 scoped_refptr<ClientSession> client = new ClientSession( 322 scoped_refptr<ClientSession> client = new ClientSession(
315 this, 323 this,
316 audio_task_runner_, 324 audio_task_runner_,
325 input_task_runner_,
317 video_capture_task_runner_, 326 video_capture_task_runner_,
318 video_encode_task_runner_, 327 video_encode_task_runner_,
319 network_task_runner_, 328 network_task_runner_,
329 ui_task_runner_,
320 connection.Pass(), 330 connection.Pass(),
321 desktop_environment_factory_, 331 desktop_environment_factory_,
322 max_session_duration_); 332 max_session_duration_);
323 clients_.push_back(client); 333 clients_.push_back(client);
324 clients_count_++; 334 clients_count_++;
325 } 335 }
326 336
327 void ChromotingHost::set_protocol_config( 337 void ChromotingHost::set_protocol_config(
328 scoped_ptr<protocol::CandidateSessionConfig> config) { 338 scoped_ptr<protocol::CandidateSessionConfig> config) {
329 DCHECK(network_task_runner_->BelongsToCurrentThread()); 339 DCHECK(network_task_runner_->BelongsToCurrentThread());
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
373 } 383 }
374 } 384 }
375 385
376 void ChromotingHost::SetUiStrings(const UiStrings& ui_strings) { 386 void ChromotingHost::SetUiStrings(const UiStrings& ui_strings) {
377 DCHECK(network_task_runner_->BelongsToCurrentThread()); 387 DCHECK(network_task_runner_->BelongsToCurrentThread());
378 DCHECK_EQ(state_, kInitial); 388 DCHECK_EQ(state_, kInitial);
379 389
380 ui_strings_ = ui_strings; 390 ui_strings_ = ui_strings;
381 } 391 }
382 392
383 void ChromotingHost::OnClientStopped() {
384 DCHECK(network_task_runner_->BelongsToCurrentThread());
385
386 --clients_count_;
387 if (state_ == kStopping && !clients_count_)
388 ShutdownFinish();
389 }
390
391 void ChromotingHost::ShutdownFinish() { 393 void ChromotingHost::ShutdownFinish() {
392 DCHECK(network_task_runner_->BelongsToCurrentThread()); 394 DCHECK(network_task_runner_->BelongsToCurrentThread());
393 DCHECK_EQ(state_, kStopping); 395 DCHECK_EQ(state_, kStopping);
394 396
395 state_ = kStopped; 397 state_ = kStopped;
396 398
397 // Destroy session manager. 399 // Destroy session manager.
398 session_manager_.reset(); 400 session_manager_.reset();
399 401
400 // Clear |desktop_environment_factory_| and |signal_strategy_| to 402 // Clear |desktop_environment_factory_| and |signal_strategy_| to
(...skipping 10 matching lines...) Expand all
411 OnShutdown()); 413 OnShutdown());
412 414
413 for (std::vector<base::Closure>::iterator it = shutdown_tasks_.begin(); 415 for (std::vector<base::Closure>::iterator it = shutdown_tasks_.begin();
414 it != shutdown_tasks_.end(); ++it) { 416 it != shutdown_tasks_.end(); ++it) {
415 it->Run(); 417 it->Run();
416 } 418 }
417 shutdown_tasks_.clear(); 419 shutdown_tasks_.clear();
418 } 420 }
419 421
420 } // namespace remoting 422 } // namespace remoting
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698