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

Unified Diff: remoting/client/chromoting_client.cc

Issue 1520323007: Simplify ConnectionToHost interface. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@sm_cleanup
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/client/chromoting_client.h ('k') | remoting/client/client_user_interface.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: remoting/client/chromoting_client.cc
diff --git a/remoting/client/chromoting_client.cc b/remoting/client/chromoting_client.cc
index 303150f2d865936a4109ab801a07e17ddad5efd6..075bf30a797337c59a15e390c8ee811525c931f8 100644
--- a/remoting/client/chromoting_client.cc
+++ b/remoting/client/chromoting_client.cc
@@ -4,35 +4,30 @@
#include "remoting/client/chromoting_client.h"
-#include "base/bind.h"
#include "remoting/base/capabilities.h"
#include "remoting/client/audio_decode_scheduler.h"
#include "remoting/client/audio_player.h"
#include "remoting/client/client_context.h"
#include "remoting/client/client_user_interface.h"
#include "remoting/client/video_renderer.h"
-#include "remoting/proto/audio.pb.h"
-#include "remoting/proto/video.pb.h"
-#include "remoting/protocol/authentication_method.h"
+#include "remoting/protocol/authenticator.h"
#include "remoting/protocol/connection_to_host.h"
#include "remoting/protocol/host_stub.h"
-#include "remoting/protocol/negotiating_client_authenticator.h"
+#include "remoting/protocol/ice_transport.h"
+#include "remoting/protocol/jingle_session_manager.h"
#include "remoting/protocol/session_config.h"
#include "remoting/protocol/transport_context.h"
namespace remoting {
-using protocol::AuthenticationMethod;
-
ChromotingClient::ChromotingClient(ClientContext* client_context,
ClientUserInterface* user_interface,
VideoRenderer* video_renderer,
scoped_ptr<AudioPlayer> audio_player)
- : task_runner_(client_context->main_task_runner()),
- user_interface_(user_interface),
+ : user_interface_(user_interface),
video_renderer_(video_renderer),
- connection_(new protocol::ConnectionToHostImpl()),
- host_capabilities_received_(false) {
+ connection_(new protocol::ConnectionToHostImpl()) {
+ DCHECK(client_context->main_task_runner()->BelongsToCurrentThread());
if (audio_player) {
audio_decode_scheduler_.reset(new AudioDecodeScheduler(
client_context->main_task_runner(),
@@ -41,11 +36,8 @@ ChromotingClient::ChromotingClient(ClientContext* client_context,
}
ChromotingClient::~ChromotingClient() {
-}
-
-void ChromotingClient::set_protocol_config(
- scoped_ptr<protocol::CandidateSessionConfig> config) {
- connection_->set_candidate_config(config.Pass());
+ if (signal_strategy_)
+ signal_strategy_->RemoveListener(this);
}
void ChromotingClient::SetConnectionToHostForTests(
@@ -59,8 +51,10 @@ void ChromotingClient::Start(
scoped_refptr<protocol::TransportContext> transport_context,
const std::string& host_jid,
const std::string& capabilities) {
- DCHECK(task_runner_->BelongsToCurrentThread());
+ DCHECK(thread_checker_.CalledOnValidThread());
+ DCHECK(!session_manager_); // Start must be called more than once.
+ host_jid_ = host_jid;
local_capabilities_ = capabilities;
connection_->set_client_stub(this);
@@ -68,13 +62,38 @@ void ChromotingClient::Start(
connection_->set_video_stub(video_renderer_->GetVideoStub());
connection_->set_audio_stub(audio_decode_scheduler_.get());
- connection_->Connect(signal_strategy, transport_context, authenticator.Pass(),
- host_jid, this);
+ session_manager_.reset(new protocol::JingleSessionManager(
+ make_scoped_ptr(new protocol::IceTransportFactory(transport_context)),
+ signal_strategy));
+
+ if (!protocol_config_)
+ protocol_config_ = protocol::CandidateSessionConfig::CreateDefault();
+ if (!audio_decode_scheduler_)
+ protocol_config_->DisableAudioChannel();
+ session_manager_->set_protocol_config(protocol_config_.Pass());
+
+ authenticator_ = authenticator.Pass();
+
+ signal_strategy_ = signal_strategy;
+ signal_strategy_->AddListener(this);
+
+ switch (signal_strategy_->GetState()) {
+ case SignalStrategy::CONNECTING:
+ // Nothing to do here. Just need to wait until |signal_strategy_| becomes
+ // connected.
+ break;
+ case SignalStrategy::CONNECTED:
+ StartConnection();
+ break;
+ case SignalStrategy::DISCONNECTED:
+ signal_strategy_->Connect();
+ break;
+ }
}
void ChromotingClient::SetCapabilities(
const protocol::Capabilities& capabilities) {
- DCHECK(task_runner_->BelongsToCurrentThread());
+ DCHECK(thread_checker_.CalledOnValidThread());
// Only accept the first |protocol::Capabilities| message.
if (host_capabilities_received_) {
@@ -96,28 +115,28 @@ void ChromotingClient::SetCapabilities(
void ChromotingClient::SetPairingResponse(
const protocol::PairingResponse& pairing_response) {
- DCHECK(task_runner_->BelongsToCurrentThread());
+ DCHECK(thread_checker_.CalledOnValidThread());
user_interface_->SetPairingResponse(pairing_response);
}
void ChromotingClient::DeliverHostMessage(
const protocol::ExtensionMessage& message) {
- DCHECK(task_runner_->BelongsToCurrentThread());
+ DCHECK(thread_checker_.CalledOnValidThread());
user_interface_->DeliverHostMessage(message);
}
void ChromotingClient::InjectClipboardEvent(
const protocol::ClipboardEvent& event) {
- DCHECK(task_runner_->BelongsToCurrentThread());
+ DCHECK(thread_checker_.CalledOnValidThread());
user_interface_->GetClipboardStub()->InjectClipboardEvent(event);
}
void ChromotingClient::SetCursorShape(
const protocol::CursorShapeInfo& cursor_shape) {
- DCHECK(task_runner_->BelongsToCurrentThread());
+ DCHECK(thread_checker_.CalledOnValidThread());
user_interface_->GetCursorShapeStub()->SetCursorShape(cursor_shape);
}
@@ -125,7 +144,7 @@ void ChromotingClient::SetCursorShape(
void ChromotingClient::OnConnectionState(
protocol::ConnectionToHost::State state,
protocol::ErrorCode error) {
- DCHECK(task_runner_->BelongsToCurrentThread());
+ DCHECK(thread_checker_.CalledOnValidThread());
VLOG(1) << "ChromotingClient::OnConnectionState(" << state << ")";
if (state == protocol::ConnectionToHost::AUTHENTICATED) {
@@ -148,8 +167,38 @@ void ChromotingClient::OnRouteChanged(const std::string& channel_name,
user_interface_->OnRouteChanged(channel_name, route);
}
+void ChromotingClient::OnSignalStrategyStateChange(
+ SignalStrategy::State state) {
+ DCHECK(thread_checker_.CalledOnValidThread());
+
+ if (state == SignalStrategy::CONNECTED) {
+ VLOG(1) << "Connected as: " << signal_strategy_->GetLocalJid();
+ // After signaling has been connected we can try connecting to the host.
+ if (connection_ &&
+ connection_->state() == protocol::ConnectionToHost::INITIALIZING) {
+ StartConnection();
+ }
+ } else if (state == SignalStrategy::DISCONNECTED) {
+ VLOG(1) << "Signaling connection closed.";
+ connection_.reset();
+ user_interface_->OnConnectionState(protocol::ConnectionToHost::CLOSED,
+ protocol::SIGNALING_ERROR);
+ }
+}
+
+bool ChromotingClient::OnSignalStrategyIncomingStanza(
+ const buzz::XmlElement* stanza) {
+ return false;
+}
+
+void ChromotingClient::StartConnection() {
+ DCHECK(thread_checker_.CalledOnValidThread());
+ connection_->Connect(
+ session_manager_->Connect(host_jid_, authenticator_.Pass()), this);
+}
+
void ChromotingClient::OnAuthenticated() {
- DCHECK(task_runner_->BelongsToCurrentThread());
+ DCHECK(thread_checker_.CalledOnValidThread());
// Initialize the decoder.
video_renderer_->OnSessionConfig(connection_->config());
@@ -158,7 +207,7 @@ void ChromotingClient::OnAuthenticated() {
}
void ChromotingClient::OnChannelsConnected() {
- DCHECK(task_runner_->BelongsToCurrentThread());
+ DCHECK(thread_checker_.CalledOnValidThread());
// Negotiate capabilities with the host.
VLOG(1) << "Client capabilities: " << local_capabilities_;
« no previous file with comments | « remoting/client/chromoting_client.h ('k') | remoting/client/client_user_interface.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698