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

Unified Diff: remoting/protocol/connection_to_host.cc

Issue 7508044: Remove video_channel() from Session interface (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: - Created 9 years, 4 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 side-by-side diff with in-line comments
Download patch
Index: remoting/protocol/connection_to_host.cc
diff --git a/remoting/protocol/connection_to_host.cc b/remoting/protocol/connection_to_host.cc
index 26dca8b2a63e799a33156fd2d6c5beecf58d3ac6..83964e401090943a57e133823b0b44e0114df338 100644
--- a/remoting/protocol/connection_to_host.cc
+++ b/remoting/protocol/connection_to_host.cc
@@ -38,11 +38,13 @@ ConnectionToHost::ConnectionToHost(
host_resolver_factory_(host_resolver_factory),
port_allocator_session_factory_(session_factory),
allow_nat_traversal_(allow_nat_traversal),
- state_(STATE_EMPTY),
event_callback_(NULL),
- dispatcher_(new ClientMessageDispatcher()),
client_stub_(NULL),
- video_stub_(NULL) {
+ video_stub_(NULL),
+ state_(STATE_EMPTY),
+ control_connected_(false),
+ input_connected_(false),
+ video_connected_(false) {
}
ConnectionToHost::~ConnectionToHost() {
@@ -176,8 +178,7 @@ void ConnectionToHost::OnSessionStateChange(
switch (state) {
case Session::FAILED:
state_ = STATE_FAILED;
- CloseChannels();
- event_callback_->OnConnectionFailed(this);
+ CloseOnError();
break;
case Session::CLOSED:
@@ -187,14 +188,25 @@ void ConnectionToHost::OnSessionStateChange(
break;
case Session::CONNECTED:
- state_ = STATE_CONNECTED;
// Initialize reader and writer.
video_reader_.reset(VideoReader::Create(session_->config()));
- video_reader_->Init(session_.get(), video_stub_);
+ video_reader_->Init(
+ session_.get(), video_stub_,
+ base::Bind(&ConnectionToHost::OnVideoChannelInitialized,
+ base::Unretained(this)));
+ break;
+
+ case Session::CONNECTED_CHANNELS:
+ state_ = STATE_CONNECTED;
host_control_sender_.reset(
new HostControlSender(session_->control_channel()));
+ dispatcher_.reset(new ClientMessageDispatcher());
dispatcher_->Initialize(session_.get(), client_stub_);
- event_callback_->OnConnectionOpened(this);
+
+ control_connected_ = true;
+ input_connected_ = true;
+ if (video_connected_)
+ event_callback_->OnConnectionOpened(this);
break;
default:
@@ -203,12 +215,32 @@ void ConnectionToHost::OnSessionStateChange(
}
}
+void ConnectionToHost::OnVideoChannelInitialized(bool successful) {
+ if (!successful) {
+ LOG(ERROR) << "Failed to connect video channel";
+ CloseOnError();
+ return;
+ }
+
+ video_connected_ = true;
+ if (control_connected_ && input_connected_)
+ event_callback_->OnConnectionOpened(this);
Wez 2011/08/10 23:36:52 Move this into a separate NotifyIfChannelsReady()
Sergey Ulanov 2011/08/11 00:33:47 Done.
+}
+
+void ConnectionToHost::CloseOnError() {
+ state_ = STATE_FAILED;
+ CloseChannels();
+ event_callback_->OnConnectionFailed(this);
+}
+
void ConnectionToHost::CloseChannels() {
if (input_sender_.get())
input_sender_->Close();
if (host_control_sender_.get())
host_control_sender_->Close();
+
+ video_reader_.reset();
}
void ConnectionToHost::OnClientAuthenticated() {

Powered by Google App Engine
This is Rietveld 408576698