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

Unified Diff: remoting/protocol/ice_connection_to_client.cc

Issue 1545743002: Move ownership of Transport out of Session. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@move_not_pass_client
Patch Set: Created 5 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « remoting/protocol/ice_connection_to_client.h ('k') | remoting/protocol/ice_connection_to_host.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: remoting/protocol/ice_connection_to_client.cc
diff --git a/remoting/protocol/ice_connection_to_client.cc b/remoting/protocol/ice_connection_to_client.cc
index 41130a66a15b1a0c926ad1615a6fdb6fe9812211..a5bae2d3c2c010c54e99d8dba449b69cf1f0ee66 100644
--- a/remoting/protocol/ice_connection_to_client.cc
+++ b/remoting/protocol/ice_connection_to_client.cc
@@ -19,6 +19,7 @@
#include "remoting/protocol/host_stub.h"
#include "remoting/protocol/host_video_dispatcher.h"
#include "remoting/protocol/input_stub.h"
+#include "remoting/protocol/transport_context.h"
#include "remoting/protocol/video_frame_pump.h"
namespace remoting {
@@ -46,14 +47,17 @@ scoped_ptr<VideoEncoder> CreateVideoEncoder(
IceConnectionToClient::IceConnectionToClient(
scoped_ptr<protocol::Session> session,
+ scoped_refptr<TransportContext> transport_context,
scoped_refptr<base::SingleThreadTaskRunner> video_encode_task_runner)
: event_handler_(nullptr),
session_(std::move(session)),
video_encode_task_runner_(video_encode_task_runner),
+ transport_(transport_context, this),
control_dispatcher_(new HostControlDispatcher()),
event_dispatcher_(new HostEventDispatcher()),
video_dispatcher_(new HostVideoDispatcher()) {
session_->SetEventHandler(this);
+ session_->SetTransport(&transport_);
}
IceConnectionToClient::~IceConnectionToClient() {}
@@ -72,8 +76,6 @@ protocol::Session* IceConnectionToClient::session() {
void IceConnectionToClient::Disconnect(ErrorCode error) {
DCHECK(thread_checker_.CalledOnValidThread());
- CloseChannels();
-
// This should trigger OnConnectionClosed() event and this object
// may be destroyed as the result.
session_->Close(error);
@@ -136,7 +138,6 @@ void IceConnectionToClient::OnSessionStateChange(Session::State state) {
case Session::CONNECTING:
case Session::ACCEPTING:
case Session::ACCEPTED:
- case Session::CONNECTED:
// Don't care about these events.
break;
case Session::AUTHENTICATING:
@@ -144,23 +145,19 @@ void IceConnectionToClient::OnSessionStateChange(Session::State state) {
break;
case Session::AUTHENTICATED:
// Initialize channels.
- control_dispatcher_->Init(
- session_->GetTransport()->GetMultiplexedChannelFactory(), this);
+ control_dispatcher_->Init(transport_.GetMultiplexedChannelFactory(),
+ this);
- event_dispatcher_->Init(
- session_->GetTransport()->GetMultiplexedChannelFactory(), this);
+ event_dispatcher_->Init(transport_.GetMultiplexedChannelFactory(), this);
event_dispatcher_->set_on_input_event_callback(
base::Bind(&IceConnectionToClient::OnInputEventReceived,
base::Unretained(this)));
- video_dispatcher_->Init(
- session_->GetTransport()->GetStreamChannelFactory(), this);
+ video_dispatcher_->Init(transport_.GetStreamChannelFactory(), this);
audio_writer_ = AudioWriter::Create(session_->config());
- if (audio_writer_.get()) {
- audio_writer_->Init(
- session_->GetTransport()->GetMultiplexedChannelFactory(), this);
- }
+ if (audio_writer_)
+ audio_writer_->Init(transport_.GetMultiplexedChannelFactory(), this);
// Notify the handler after initializing the channels, so that
// ClientSession can get a client clipboard stub.
@@ -168,21 +165,27 @@ void IceConnectionToClient::OnSessionStateChange(Session::State state) {
break;
case Session::CLOSED:
- Close(OK);
- break;
-
case Session::FAILED:
- Close(session_->error());
+ CloseChannels();
+ event_handler_->OnConnectionClosed(
+ this, state == Session::FAILED ? session_->error() : OK);
break;
}
}
-void IceConnectionToClient::OnSessionRouteChange(
+
+void IceConnectionToClient::OnIceTransportRouteChange(
const std::string& channel_name,
const TransportRoute& route) {
event_handler_->OnRouteChange(this, channel_name, route);
}
+void IceConnectionToClient::OnIceTransportError(ErrorCode error) {
+ DCHECK(thread_checker_.CalledOnValidThread());
+
+ Disconnect(error);
+}
+
void IceConnectionToClient::OnChannelInitialized(
ChannelDispatcherBase* channel_dispatcher) {
DCHECK(thread_checker_.CalledOnValidThread());
@@ -197,7 +200,7 @@ void IceConnectionToClient::OnChannelError(
LOG(ERROR) << "Failed to connect channel "
<< channel_dispatcher->channel_name();
- Close(CHANNEL_CONNECTION_ERROR);
+ Disconnect(error);
}
void IceConnectionToClient::NotifyIfChannelsReady() {
@@ -216,11 +219,6 @@ void IceConnectionToClient::NotifyIfChannelsReady() {
event_handler_->OnConnectionChannelsConnected(this);
}
-void IceConnectionToClient::Close(ErrorCode error) {
- CloseChannels();
- event_handler_->OnConnectionClosed(this, error);
-}
-
void IceConnectionToClient::CloseChannels() {
control_dispatcher_.reset();
event_dispatcher_.reset();
« no previous file with comments | « remoting/protocol/ice_connection_to_client.h ('k') | remoting/protocol/ice_connection_to_host.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698