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

Unified Diff: remoting/protocol/webrtc_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/webrtc_connection_to_client.h ('k') | remoting/protocol/webrtc_connection_to_host.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: remoting/protocol/webrtc_connection_to_client.cc
diff --git a/remoting/protocol/webrtc_connection_to_client.cc b/remoting/protocol/webrtc_connection_to_client.cc
index 95360a0a788e96cf0e6d7e6d9ec209c6f252c9eb..9d732e081def8a80faa650fd8dbe9a10bd85b2a5 100644
--- a/remoting/protocol/webrtc_connection_to_client.cc
+++ b/remoting/protocol/webrtc_connection_to_client.cc
@@ -8,6 +8,7 @@
#include "base/bind.h"
#include "base/location.h"
+#include "jingle/glue/thread_wrapper.h"
#include "net/base/io_buffer.h"
#include "remoting/codec/video_encoder.h"
#include "remoting/codec/video_encoder_verbatim.h"
@@ -18,6 +19,7 @@
#include "remoting/protocol/host_event_dispatcher.h"
#include "remoting/protocol/host_stub.h"
#include "remoting/protocol/input_stub.h"
+#include "remoting/protocol/transport_context.h"
#include "remoting/protocol/webrtc_transport.h"
#include "remoting/protocol/webrtc_video_capturer_adapter.h"
#include "remoting/protocol/webrtc_video_stream.h"
@@ -32,12 +34,21 @@ namespace protocol {
const char kStreamLabel[] = "screen_stream";
const char kVideoLabel[] = "screen_video";
+// Currently the network thread is also used as worker thread for webrtc.
+//
+// TODO(sergeyu): Figure out if we would benefit from using a separate
+// thread as a worker thread.
WebrtcConnectionToClient::WebrtcConnectionToClient(
- scoped_ptr<protocol::Session> session)
- : session_(std::move(session)),
+ scoped_ptr<protocol::Session> session,
+ scoped_refptr<protocol::TransportContext> transport_context)
+ : transport_(jingle_glue::JingleThreadWrapper::current(),
+ transport_context,
+ this),
+ session_(std::move(session)),
control_dispatcher_(new HostControlDispatcher()),
event_dispatcher_(new HostEventDispatcher()) {
session_->SetEventHandler(this);
+ session_->SetTransport(&transport_);
}
WebrtcConnectionToClient::~WebrtcConnectionToClient() {}
@@ -56,9 +67,6 @@ protocol::Session* WebrtcConnectionToClient::session() {
void WebrtcConnectionToClient::Disconnect(ErrorCode error) {
DCHECK(thread_checker_.CalledOnValidThread());
- control_dispatcher_.reset();
- event_dispatcher_.reset();
-
// This should trigger OnConnectionClosed() event and this object
// may be destroyed as the result.
session_->Close(error);
@@ -71,10 +79,6 @@ void WebrtcConnectionToClient::OnInputEventReceived(int64_t timestamp) {
scoped_ptr<VideoStream> WebrtcConnectionToClient::StartVideoStream(
scoped_ptr<webrtc::DesktopCapturer> desktop_capturer) {
- // TODO(sergeyu): Reconsider Transport interface and how it's used here.
- WebrtcTransport* transport = session_->GetTransport()->AsWebrtcTransport();
- CHECK(transport);
-
scoped_ptr<WebrtcVideoCapturerAdapter> video_capturer_adapter(
new WebrtcVideoCapturerAdapter(std::move(desktop_capturer)));
@@ -84,22 +88,22 @@ scoped_ptr<VideoStream> WebrtcConnectionToClient::StartVideoStream(
webrtc::MediaConstraintsInterface::kMinFrameRate, 5);
rtc::scoped_refptr<webrtc::VideoTrackInterface> video_track =
- transport->peer_connection_factory()->CreateVideoTrack(
+ transport_.peer_connection_factory()->CreateVideoTrack(
kVideoLabel,
- transport->peer_connection_factory()->CreateVideoSource(
+ transport_.peer_connection_factory()->CreateVideoSource(
video_capturer_adapter.release(), &video_constraints));
rtc::scoped_refptr<webrtc::MediaStreamInterface> video_stream =
- transport->peer_connection_factory()->CreateLocalMediaStream(
+ transport_.peer_connection_factory()->CreateLocalMediaStream(
kStreamLabel);
if (!video_stream->AddTrack(video_track) ||
- !transport->peer_connection()->AddStream(video_stream)) {
+ !transport_.peer_connection()->AddStream(video_stream)) {
return nullptr;
}
return make_scoped_ptr(
- new WebrtcVideoStream(transport->peer_connection(), video_stream));
+ new WebrtcVideoStream(transport_.peer_connection(), video_stream));
}
AudioStub* WebrtcConnectionToClient::audio_stub() {
@@ -145,12 +149,9 @@ void WebrtcConnectionToClient::OnSessionStateChange(Session::State state) {
break;
case Session::AUTHENTICATED: {
// Initialize channels.
- control_dispatcher_->Init(
- session_->GetTransport()->GetStreamChannelFactory(),
- this);
+ control_dispatcher_->Init(transport_.GetStreamChannelFactory(), this);
- event_dispatcher_->Init(
- session_->GetTransport()->GetStreamChannelFactory(), this);
+ event_dispatcher_->Init(transport_.GetStreamChannelFactory(), this);
event_dispatcher_->set_on_input_event_callback(base::Bind(
&ConnectionToClient::OnInputEventReceived, base::Unretained(this)));
@@ -160,10 +161,6 @@ void WebrtcConnectionToClient::OnSessionStateChange(Session::State state) {
break;
}
- case Session::CONNECTED:
- event_handler_->OnConnectionChannelsConnected(this);
- break;
-
case Session::CLOSED:
case Session::FAILED:
control_dispatcher_.reset();
@@ -174,10 +171,13 @@ void WebrtcConnectionToClient::OnSessionStateChange(Session::State state) {
}
}
-void WebrtcConnectionToClient::OnSessionRouteChange(
- const std::string& channel_name,
- const TransportRoute& route) {
- event_handler_->OnRouteChange(this, channel_name, route);
+void WebrtcConnectionToClient::OnWebrtcTransportConnected() {
+ event_handler_->OnConnectionChannelsConnected(this);
+}
+
+void WebrtcConnectionToClient::OnWebrtcTransportError(ErrorCode error) {
+ DCHECK(thread_checker_.CalledOnValidThread());
+ Disconnect(error);
}
void WebrtcConnectionToClient::OnChannelInitialized(
@@ -192,7 +192,7 @@ void WebrtcConnectionToClient::OnChannelError(
LOG(ERROR) << "Failed to connect channel "
<< channel_dispatcher->channel_name();
- session_->Close(CHANNEL_CONNECTION_ERROR);
+ Disconnect(error);
}
} // namespace protocol
« no previous file with comments | « remoting/protocol/webrtc_connection_to_client.h ('k') | remoting/protocol/webrtc_connection_to_host.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698