| Index: remoting/client/chromoting_client_runtime.h | 
| diff --git a/remoting/client/chromoting_client_runtime.h b/remoting/client/chromoting_client_runtime.h | 
| index 69efb0dfc2843472a20b879d686420c6a69274aa..dafaa7105e0a885a80922c30b33d565efad0b961 100644 | 
| --- a/remoting/client/chromoting_client_runtime.h | 
| +++ b/remoting/client/chromoting_client_runtime.h | 
| @@ -8,11 +8,17 @@ | 
| #include <memory> | 
|  | 
| #include "base/macros.h" | 
| +#include "base/memory/ref_counted.h" | 
| +#include "base/memory/singleton.h" | 
| #include "net/url_request/url_request_context_getter.h" | 
| #include "remoting/base/auto_thread.h" | 
| +#include "remoting/base/telemetry_log_writer.h" | 
|  | 
| namespace base { | 
| class MessageLoopForUI; | 
| + | 
| +template <typename T> | 
| +struct DefaultSingletonTraits; | 
| }  // namespace base | 
|  | 
| // Houses the global resources on which the Chromoting components run | 
| @@ -21,28 +27,17 @@ namespace remoting { | 
|  | 
| class ChromotingClientRuntime { | 
| public: | 
| -  // Caller to create is responsible for creating and attaching a new ui thread | 
| -  // for use. Example: | 
| -  // | 
| -  // On Android, the UI thread is managed by Java, so we need to attach and | 
| -  // start a special type of message loop to allow Chromium code to run tasks. | 
| -  // | 
| -  //  base::MessageLoopForUI *ui_loop = new base::MessageLoopForUI(); | 
| -  //  ui_loop_->Start(); | 
| -  //  std::unique_ptr<ChromotingClientRuntime> runtime = | 
| -  //    ChromotingClientRuntime::Create(ui_loop); | 
| -  // | 
| -  // On iOS we created a new message loop and now attach it. | 
| -  // | 
| -  //  base::MessageLoopForUI *ui_loop = new base::MessageLoopForUI(); | 
| -  //  ui_loop_->Attach(); | 
| -  //  std::unique_ptr<ChromotingClientRuntime> runtime = | 
| -  //    ChromotingClientRuntime::Create(ui_loop); | 
| -  // | 
| -  static std::unique_ptr<ChromotingClientRuntime> Create( | 
| -      base::MessageLoopForUI* ui_loop); | 
| - | 
| -  ~ChromotingClientRuntime(); | 
| +  class Delegate { | 
| +   public: | 
| +    virtual ~Delegate() {} | 
| + | 
| +    virtual void RuntimeWillShutdown() = 0; | 
| +    virtual void RequestAuthTokenForLogger() = 0; | 
| +  }; | 
| + | 
| +  static ChromotingClientRuntime* GetInstance(); | 
| + | 
| +  void SetDelegate(ChromotingClientRuntime::Delegate* delegate); | 
|  | 
| scoped_refptr<AutoThreadTaskRunner> network_task_runner() { | 
| return network_task_runner_; | 
| @@ -64,14 +59,23 @@ class ChromotingClientRuntime { | 
| return url_requester_; | 
| } | 
|  | 
| +  // TODO(nicholss): This should return a base::weak_ptr<TelemetryLogWriter> | 
| +  // At some point the application should set the auth closure when auth is | 
| +  // possible. | 
| +  // TODO(nicholss): GetLogWriter is not like the above methods, change to | 
| +  // log_writer? | 
| +  TelemetryLogWriter* GetLogWriter(); | 
| + | 
| private: | 
| ChromotingClientRuntime(); | 
| -  ChromotingClientRuntime( | 
| -      scoped_refptr<AutoThreadTaskRunner> ui_task_runner, | 
| -      scoped_refptr<AutoThreadTaskRunner> display_task_runner, | 
| -      scoped_refptr<AutoThreadTaskRunner> network_task_runner, | 
| -      scoped_refptr<AutoThreadTaskRunner> file_task_runner, | 
| -      scoped_refptr<net::URLRequestContextGetter> url_requester); | 
| +  virtual ~ChromotingClientRuntime(); | 
| + | 
| +  void CreateLogWriter(); | 
| +  void RequestAuthTokenForLogger(); | 
| + | 
| +  // Chromium code's connection to the app message loop. Once created the | 
| +  // MessageLoop will live for the life of the program. | 
| +  std::unique_ptr<base::MessageLoopForUI> ui_loop_; | 
|  | 
| // References to native threads. | 
| scoped_refptr<AutoThreadTaskRunner> ui_task_runner_; | 
| @@ -82,6 +86,13 @@ class ChromotingClientRuntime { | 
|  | 
| scoped_refptr<net::URLRequestContextGetter> url_requester_; | 
|  | 
| +  // For logging session stage changes and stats. | 
| +  std::unique_ptr<TelemetryLogWriter> log_writer_; | 
| + | 
| +  ChromotingClientRuntime::Delegate* delegate_; | 
| + | 
| +  friend struct base::DefaultSingletonTraits<ChromotingClientRuntime>; | 
| + | 
| DISALLOW_COPY_AND_ASSIGN(ChromotingClientRuntime); | 
| }; | 
|  | 
|  |