#include "base/timer/timer.h"
#include "remoting/host/client_session_control.h"
#include "remoting/host/gnubby_auth_handler.h"
+#include "remoting/host/host_extension_session_manager.h"
#include "remoting/host/mouse_clamping_filter.h"
#include "remoting/host/remote_input_filter.h"
#include "remoting/protocol/clipboard_echo_filter.h"
// Called after connection has failed or after the client closed it.
virtual void OnSessionClosed(ClientSession* client) = 0;
- // Called to notify of each message's sequence number. The
- // callback must not tear down this object.
- virtual void OnSessionSequenceNumber(ClientSession* client,
- int64 sequence_number) = 0;
-
// Called on notification of a route change event, when a channel is
// connected.
virtual void OnSessionRouteChange(
};
// |event_handler| and |desktop_environment_factory| must outlive |this|.
+ // All |HostExtension|s in |extensions| must outlive |this|.
ClientSession(
EventHandler* event_handler,
scoped_refptr<base::SingleThreadTaskRunner> audio_task_runner,
scoped_ptr<protocol::ConnectionToClient> connection,
DesktopEnvironmentFactory* desktop_environment_factory,
const base::TimeDelta& max_duration,
- scoped_refptr<protocol::PairingRegistry> pairing_registry);
- virtual ~ClientSession();
+ scoped_refptr<protocol::PairingRegistry> pairing_registry,
+ const std::vector<HostExtension*>& extensions);
+ ~ClientSession() override;
+
+ // Returns the set of capabilities negotiated between client and host.
+ const std::string& capabilities() const { return capabilities_; }
// protocol::HostStub interface.
- virtual void NotifyClientResolution(
- const protocol::ClientResolution& resolution) OVERRIDE;
- virtual void ControlVideo(
- const protocol::VideoControl& video_control) OVERRIDE;
- virtual void ControlAudio(
- const protocol::AudioControl& audio_control) OVERRIDE;
- virtual void SetCapabilities(
- const protocol::Capabilities& capabilities) OVERRIDE;
- virtual void RequestPairing(
- const remoting::protocol::PairingRequest& pairing_request) OVERRIDE;
- virtual void DeliverClientMessage(
- const protocol::ExtensionMessage& message) OVERRIDE;
+ void NotifyClientResolution(
+ const protocol::ClientResolution& resolution) override;
+ void ControlVideo(const protocol::VideoControl& video_control) override;
+ void ControlAudio(const protocol::AudioControl& audio_control) override;
+ void SetCapabilities(const protocol::Capabilities& capabilities) override;
+ void RequestPairing(
+ const remoting::protocol::PairingRequest& pairing_request) override;
+ void DeliverClientMessage(const protocol::ExtensionMessage& message) override;
// protocol::ConnectionToClient::EventHandler interface.
- virtual void OnConnectionAuthenticating(
- protocol::ConnectionToClient* connection) OVERRIDE;
- virtual void OnConnectionAuthenticated(
- protocol::ConnectionToClient* connection) OVERRIDE;
- virtual void OnConnectionChannelsConnected(
- protocol::ConnectionToClient* connection) OVERRIDE;
- virtual void OnConnectionClosed(protocol::ConnectionToClient* connection,
- protocol::ErrorCode error) OVERRIDE;
- virtual void OnSequenceNumberUpdated(
- protocol::ConnectionToClient* connection, int64 sequence_number) OVERRIDE;
- virtual void OnRouteChange(
- protocol::ConnectionToClient* connection,
- const std::string& channel_name,
- const protocol::TransportRoute& route) OVERRIDE;
+ void OnConnectionAuthenticating(
+ protocol::ConnectionToClient* connection) override;
+ void OnConnectionAuthenticated(
+ protocol::ConnectionToClient* connection) override;
+ void OnConnectionChannelsConnected(
+ protocol::ConnectionToClient* connection) override;
+ void OnConnectionClosed(protocol::ConnectionToClient* connection,
+ protocol::ErrorCode error) override;
+ void OnSequenceNumberUpdated(protocol::ConnectionToClient* connection,
+ int64 sequence_number) override;
+ void OnRouteChange(protocol::ConnectionToClient* connection,
+ const std::string& channel_name,
+ const protocol::TransportRoute& route) override;
// ClientSessionControl interface.
- virtual const std::string& client_jid() const OVERRIDE;
- virtual void DisconnectSession() OVERRIDE;
- virtual void OnLocalMouseMoved(
- const webrtc::DesktopVector& position) OVERRIDE;
- virtual void SetDisableInputs(bool disable_inputs) OVERRIDE;
+ const std::string& client_jid() const override;
+ void DisconnectSession() override;
+ void OnLocalMouseMoved(const webrtc::DesktopVector& position) override;
+ void SetDisableInputs(bool disable_inputs) override;
+ void ResetVideoPipeline() override;
void SetGnubbyAuthHandlerForTesting(GnubbyAuthHandler* gnubby_auth_handler);
bool is_authenticated() { return auth_input_filter_.enabled(); }
+ const std::string* client_capabilities() const {
+ return client_capabilities_.get();
+ }
+
private:
// Creates a proxy for sending clipboard events to the client.
scoped_ptr<protocol::ClipboardStub> CreateClipboardProxy();
std::string client_jid_;
- // Used to disable callbacks to |this| once DisconnectSession() has been
- // called.
- base::WeakPtrFactory<ClientSessionControl> control_factory_;
-
// Used to create a DesktopEnvironment instance for this session.
DesktopEnvironmentFactory* desktop_environment_factory_;
scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner_;
// Schedulers for audio and video capture.
+ // |video_scheduler_| may be NULL if the video channel is not required - see
+ // ResetVideoPipeline().
scoped_refptr<AudioScheduler> audio_scheduler_;
scoped_refptr<VideoScheduler> video_scheduler_;
// The set of all capabilities supported by the host.
std::string host_capabilities_;
+ // The set of all capabilities negotiated between client and host.
+ std::string capabilities_;
+
// Used to inject mouse and keyboard input and handle clipboard events.
scoped_ptr<InputInjector> input_injector_;
// Used to proxy gnubby auth traffic.
scoped_ptr<GnubbyAuthHandler> gnubby_auth_handler_;
+ // Used to manage extension functionality.
+ scoped_ptr<HostExtensionSessionManager> extension_manager_;
+
+ // Used to store video channel pause & lossless parameters.
+ bool pause_video_;
+ bool lossless_video_encode_;
+ bool lossless_video_color_;
+
+ // Used to disable callbacks to |this| once DisconnectSession() has been
+ // called.
+ base::WeakPtrFactory<ClientSessionControl> weak_factory_;
+
DISALLOW_COPY_AND_ASSIGN(ClientSession);
};