Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / remoting / host / client_session.h
index f892329..38f9753 100644 (file)
@@ -15,6 +15,7 @@
 #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"
@@ -72,11 +73,6 @@ class ClientSession
     // 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(
@@ -89,6 +85,7 @@ class ClientSession
   };
 
   // |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,
@@ -100,45 +97,44 @@ class ClientSession
       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);
 
@@ -148,6 +144,10 @@ class ClientSession
 
   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();
@@ -167,10 +167,6 @@ class ClientSession
 
   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_;
 
@@ -223,6 +219,8 @@ class ClientSession
   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_;
 
@@ -232,6 +230,9 @@ class ClientSession
   // 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_;
 
@@ -244,6 +245,18 @@ class ClientSession
   // 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);
 };