| Index: remoting/client/jni/chromoting_jni_instance.h
 | 
| diff --git a/remoting/client/jni/chromoting_jni_instance.h b/remoting/client/jni/chromoting_jni_instance.h
 | 
| index 05ee17f1960484c3309cff36ad84a94f9f8cfe2f..c9e689a4116e09aac179d713530b6ea48350965b 100644
 | 
| --- a/remoting/client/jni/chromoting_jni_instance.h
 | 
| +++ b/remoting/client/jni/chromoting_jni_instance.h
 | 
| @@ -5,15 +5,11 @@
 | 
|  #ifndef REMOTING_CLIENT_CHROMOTING_JNI_INSTANCE_H_
 | 
|  #define REMOTING_CLIENT_CHROMOTING_JNI_INSTANCE_H_
 | 
|  
 | 
| -#include <jni.h>
 | 
|  #include <string>
 | 
|  
 | 
| -#include "base/at_exit.h"
 | 
|  #include "base/memory/ref_counted.h"
 | 
|  #include "base/memory/scoped_ptr.h"
 | 
|  #include "base/message_loop/message_loop.h"
 | 
| -#include "net/url_request/url_request_context_getter.h"
 | 
| -#include "remoting/base/auto_thread.h"
 | 
|  #include "remoting/client/chromoting_client.h"
 | 
|  #include "remoting/client/client_config.h"
 | 
|  #include "remoting/client/client_context.h"
 | 
| @@ -23,41 +19,25 @@
 | 
|  #include "remoting/jingle_glue/xmpp_signal_strategy.h"
 | 
|  #include "remoting/protocol/connection_to_host.h"
 | 
|  
 | 
| -template<typename T> struct DefaultSingletonTraits;
 | 
| -
 | 
|  namespace remoting {
 | 
| +class ChromotingJni;
 | 
|  
 | 
| -// Class and package name of the Java class supporting the methods we call.
 | 
| -const char* const JAVA_CLASS = "org/chromium/chromoting/jni/JNIInterface";
 | 
| -
 | 
| -// TODO(solb) Move into location shared with client plugin.
 | 
| -const char* const CHAT_SERVER = "talk.google.com";
 | 
| -const int CHAT_PORT = 5222;
 | 
| -const bool CHAT_USE_TLS = true;
 | 
| -const char* const CHAT_AUTH_METHOD = "oauth2";
 | 
| -
 | 
| -// ClientUserInterface that makes and (indirectly) receives JNI calls. It also
 | 
| -// contains global resources on which the Chromoting components run
 | 
| -// (e.g. message loops and task runners).
 | 
| -class ChromotingJNIInstance : public ClientUserInterface {
 | 
| +// ClientUserInterface that indirectly makes and receives JNI calls.
 | 
| +class ChromotingJniInstance
 | 
| +  : public ClientUserInterface,
 | 
| +    public base::RefCountedThreadSafe<ChromotingJniInstance> {
 | 
|   public:
 | 
| -  // This class is instantiated at process initialization and persists until
 | 
| -  // we close. It reuses many of its components between connections (i.e. when
 | 
| -  // a DisconnectFromHost() call is followed by a ConnectToHost() one.
 | 
| -  static ChromotingJNIInstance* GetInstance();
 | 
| -
 | 
| -  // Initiates a connection with the specified host. This may only be called
 | 
| -  // when |connected_| is false, and must be invoked on the UI thread.
 | 
| -  void ConnectToHost(
 | 
| +  // Initiates a connection with the specified host. Call from the UI thread.
 | 
| +  ChromotingJniInstance(
 | 
|        const char* username,
 | 
|        const char* auth_token,
 | 
|        const char* host_jid,
 | 
|        const char* host_id,
 | 
|        const char* host_pubkey);
 | 
|  
 | 
| -  // Terminates the current connection (if it hasn't already failed) and clean
 | 
| -  // up. This may only be called when |connected_|, and only from the UI thread.
 | 
| -  void DisconnectFromHost();
 | 
| +  // Terminates the current connection (if it hasn't already failed) and cleans
 | 
| +  // up. Must be called before destruction.
 | 
| +  void Cleanup();
 | 
|  
 | 
|    // Provides the user's PIN and resumes the host authentication attempt. Call
 | 
|    // on the UI thread once the user has finished entering this PIN into the UI,
 | 
| @@ -78,53 +58,19 @@ class ChromotingJNIInstance : public ClientUserInterface {
 | 
|        GetTokenFetcher(const std::string& host_public_key) OVERRIDE;
 | 
|  
 | 
|   private:
 | 
| -  ChromotingJNIInstance();
 | 
| -
 | 
| -  // Any existing or attempted connection must have been terminated using
 | 
| -  // DisconnectFromHost() before this singleton is destroyed. Because
 | 
| -  // destruction only occurs at application exit after all connections have
 | 
| -  // terminated, it is safe to make unretained cross-thread calls on the class.
 | 
| -  // As a singleton, this object must be destroyed on the main (UI) thread.
 | 
| -  virtual ~ChromotingJNIInstance();
 | 
| +  // This object is ref-counted, so it cleans itself up.
 | 
| +  virtual ~ChromotingJniInstance();
 | 
|  
 | 
|    void ConnectToHostOnDisplayThread();
 | 
|    void ConnectToHostOnNetworkThread();
 | 
|  
 | 
| -  void DisconnectFromHostOnNetworkThread();
 | 
| -
 | 
|    // Notifies the user interface that the user needs to enter a PIN. The
 | 
|    // current authentication attempt is put on hold until |callback| is invoked.
 | 
|    void FetchSecret(bool pairable,
 | 
|                     const protocol::SecretFetchedCallback& callback);
 | 
|  
 | 
| -  // The below variables are reused across consecutive sessions.
 | 
| -
 | 
| -  // Reference to the Java class into which we make JNI calls.
 | 
| -  jclass class_;
 | 
| -
 | 
| -  // Used by the Chromium libraries to clean up the base and net libraries' JNI
 | 
| -  // bindings. It must persist for the lifetime of the singleton.
 | 
| -  scoped_ptr<base::AtExitManager> collector_;
 | 
| -
 | 
| -  // Chromium code's connection to the Java message loop.
 | 
| -  scoped_ptr<base::MessageLoopForUI> ui_loop_;
 | 
| -
 | 
| -  // Runners that allow posting tasks to the various native threads.
 | 
| -  scoped_refptr<AutoThreadTaskRunner> ui_task_runner_;
 | 
| -  scoped_refptr<AutoThreadTaskRunner> network_task_runner_;
 | 
| -  scoped_refptr<AutoThreadTaskRunner> display_task_runner_;
 | 
| -
 | 
| -  scoped_refptr<net::URLRequestContextGetter> url_requester_;
 | 
|    scoped_refptr<FrameConsumerProxy> frame_consumer_;
 | 
|  
 | 
| -  // All below variables are specific to each connection.
 | 
| -
 | 
| -  // True iff ConnectToHost() has been called without a subsequent
 | 
| -  // call to DisconnectFromHost() (i.e. while connecting, once connected, and
 | 
| -  // between the time a connection fails and DisconnectFromHost() is called).
 | 
| -  // To be used on the UI thread.
 | 
| -  bool connected_;
 | 
| -
 | 
|    // This group of variables is to be used on the network thread.
 | 
|    scoped_ptr<ClientConfig> client_config_;
 | 
|    scoped_ptr<ClientContext> client_context_;
 | 
| @@ -148,9 +94,9 @@ class ChromotingJNIInstance : public ClientUserInterface {
 | 
|    std::string host_id_;
 | 
|    std::string host_pubkey_;
 | 
|  
 | 
| -  friend struct DefaultSingletonTraits<ChromotingJNIInstance>;
 | 
| +  friend class base::RefCountedThreadSafe<ChromotingJniInstance>;
 | 
|  
 | 
| -  DISALLOW_COPY_AND_ASSIGN(ChromotingJNIInstance);
 | 
| +  DISALLOW_COPY_AND_ASSIGN(ChromotingJniInstance);
 | 
|  };
 | 
|  
 | 
|  }  // namespace remoting
 | 
| 
 |