#ifndef REMOTING_HOST_HOST_USER_INTERFACE_H_
#define REMOTING_HOST_HOST_USER_INTERFACE_H_
#include <string>
#include "base/basictypes.h"
#include "base/callback.h"
#include "base/compiler_specific.h"
#include "base/memory/scoped_ptr.h"
#include "base/memory/weak_ptr.h"
#include "remoting/host/host_status_observer.h"
namespace base {
class SingleThreadTaskRunner;
}
namespace remoting {
class ChromotingHost;
class ChromotingHostContext;
class DisconnectWindow;
class LocalInputMonitor;
class SignalStrategy;
class HostUserInterface : public HostStatusObserver {
public:
HostUserInterface(ChromotingHostContext* context);
virtual ~HostUserInterface();
virtual void Start(ChromotingHost* host,
const base::Closure& disconnect_callback);
virtual void OnClientAuthenticated(const std::string& jid) OVERRIDE;
virtual void OnClientDisconnected(const std::string& jid) OVERRIDE;
virtual void OnAccessDenied(const std::string& jid) OVERRIDE;
virtual void OnShutdown() OVERRIDE;
protected:
const std::string& get_authenticated_jid() const {
return authenticated_jid_;
}
ChromotingHost* get_host() const { return host_; }
base::SingleThreadTaskRunner* network_task_runner() const;
base::SingleThreadTaskRunner* ui_task_runner() const;
void DisconnectSession() const;
virtual void ProcessOnClientAuthenticated(const std::string& username);
virtual void ProcessOnClientDisconnected();
void StartForTest(
ChromotingHost* host,
const base::Closure& disconnect_callback,
scoped_ptr<DisconnectWindow> disconnect_window,
scoped_ptr<LocalInputMonitor> local_input_monitor);
private:
void OnDisconnectCallback();
void MonitorLocalInputs(bool enable);
void ShowDisconnectWindow(bool show, const std::string& username);
std::string authenticated_jid_;
ChromotingHost* host_;
ChromotingHostContext* context_;
base::Closure disconnect_callback_;
scoped_ptr<DisconnectWindow> disconnect_window_;
scoped_ptr<LocalInputMonitor> local_input_monitor_;
bool is_monitoring_local_inputs_;
base::WeakPtrFactory<HostUserInterface> weak_factory_;
base::WeakPtr<HostUserInterface> weak_ptr_;
DISALLOW_COPY_AND_ASSIGN(HostUserInterface);
};
}
#endif