| 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
|
|
|