Index: remoting/host/chromoting_host.h |
diff --git a/remoting/host/chromoting_host.h b/remoting/host/chromoting_host.h |
index b1cd128ff929ab99f422acc66c4b9a4421f6b264..35ef3737668e73d3acb9ddedc900e5b42cf6c5fa 100644 |
--- a/remoting/host/chromoting_host.h |
+++ b/remoting/host/chromoting_host.h |
@@ -12,6 +12,7 @@ |
#include "base/memory/ref_counted.h" |
#include "base/memory/weak_ptr.h" |
#include "base/observer_list.h" |
+#include "base/threading/non_thread_safe.h" |
#include "base/threading/thread.h" |
#include "net/base/backoff_entry.h" |
#include "remoting/host/client_session.h" |
@@ -59,14 +60,13 @@ class DesktopEnvironmentFactory; |
// all pending tasks to complete. After all of that completed we |
// return to the idle state. We then go to step (2) if there a new |
// incoming connection. |
-class ChromotingHost : public base::RefCountedThreadSafe<ChromotingHost>, |
+class ChromotingHost : public base::NonThreadSafe, |
public ClientSession::EventHandler, |
public protocol::SessionManager::Listener, |
public HostStatusMonitor { |
public: |
- // The caller must ensure that |signal_strategy| and |
- // |desktop_environment_factory| remain valid at least until the |
- // |shutdown_task| supplied to Shutdown() has been notified. |
+ // Both |signal_strategy| and |desktop_environment_factory| should outlive |
+ // this object. |
ChromotingHost( |
SignalStrategy* signal_strategy, |
DesktopEnvironmentFactory* desktop_environment_factory, |
@@ -77,8 +77,9 @@ class ChromotingHost : public base::RefCountedThreadSafe<ChromotingHost>, |
scoped_refptr<base::SingleThreadTaskRunner> video_encode_task_runner, |
scoped_refptr<base::SingleThreadTaskRunner> network_task_runner, |
scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner); |
+ virtual ~ChromotingHost(); |
- // Asynchronously start the host process. |
+ // Asynchronously starts the host. |
// |
// After this is invoked, the host process will connect to the talk |
// network and start listening for incoming connections. |
@@ -86,10 +87,6 @@ class ChromotingHost : public base::RefCountedThreadSafe<ChromotingHost>, |
// This method can only be called once during the lifetime of this object. |
void Start(const std::string& xmpp_login); |
- // Asynchronously shutdown the host process. |shutdown_task| is |
- // called after shutdown is completed. |
- void Shutdown(const base::Closure& shutdown_task); |
- |
// HostStatusMonitor interface. |
virtual void AddStatusObserver(HostStatusObserver* observer) OVERRIDE; |
virtual void RemoveStatusObserver(HostStatusObserver* observer) OVERRIDE; |
@@ -134,10 +131,9 @@ class ChromotingHost : public base::RefCountedThreadSafe<ChromotingHost>, |
// Sets desired configuration for the protocol. Must be called before Start(). |
void set_protocol_config(scoped_ptr<protocol::CandidateSessionConfig> config); |
- // Disconnects all active clients. Clients are disconnected |
- // asynchronously when this method is called on a thread other than |
- // the network thread. Potentically this may cause disconnection of |
- // clients that were not connected when this method is called. |
+ // Immediately disconnects all active clients. Host-internal components may |
+ // shutdown asynchronously, but the caller is guaranteed not to receive |
+ // callbacks for disconnected clients after this call returns. |
void DisconnectAllClients(); |
base::WeakPtr<ChromotingHost> AsWeakPtr() { |
@@ -145,23 +141,10 @@ class ChromotingHost : public base::RefCountedThreadSafe<ChromotingHost>, |
} |
private: |
- friend class base::RefCountedThreadSafe<ChromotingHost>; |
friend class ChromotingHostTest; |
typedef std::list<ClientSession*> ClientList; |
- enum State { |
- kInitial, |
- kStarted, |
- kStopping, |
- kStopped, |
- }; |
- |
- virtual ~ChromotingHost(); |
- |
- // Called from Shutdown() to finish shutdown. |
- void ShutdownFinish(); |
- |
// Unless specified otherwise all members of this class must be |
// used on the network thread only. |
@@ -184,8 +167,8 @@ class ChromotingHost : public base::RefCountedThreadSafe<ChromotingHost>, |
// The connections to remote clients. |
ClientList clients_; |
- // Tracks the internal state of the host. |
- State state_; |
+ // True if the host has been started. |
+ bool started_; |
// Configuration of the protocol. |
scoped_ptr<protocol::CandidateSessionConfig> protocol_config_; |
@@ -197,10 +180,6 @@ class ChromotingHost : public base::RefCountedThreadSafe<ChromotingHost>, |
bool authenticating_client_; |
bool reject_authenticating_client_; |
- // Stores list of tasks that should be executed when we finish |
- // shutdown. Used only while |state_| is set to kStopping. |
- std::vector<base::Closure> shutdown_tasks_; |
- |
// The maximum duration of any session. |
base::TimeDelta max_session_duration_; |