| OLD | NEW |
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef CHROME_SERVICE_SERVICE_PROCESS_H_ | 5 #ifndef CHROME_SERVICE_SERVICE_PROCESS_H_ |
| 6 #define CHROME_SERVICE_SERVICE_PROCESS_H_ | 6 #define CHROME_SERVICE_SERVICE_PROCESS_H_ |
| 7 #pragma once | 7 #pragma once |
| 8 | 8 |
| 9 #include <string> | 9 #include <string> |
| 10 | 10 |
| 11 #include "base/gtest_prod_util.h" | 11 #include "base/gtest_prod_util.h" |
| 12 #include "base/ref_counted.h" | 12 #include "base/ref_counted.h" |
| 13 #include "base/scoped_ptr.h" | 13 #include "base/scoped_ptr.h" |
| 14 #include "base/thread.h" | 14 #include "base/thread.h" |
| 15 #include "base/waitable_event.h" | 15 #include "base/waitable_event.h" |
| 16 #include "chrome/service/cloud_print/cloud_print_proxy.h" | 16 #include "chrome/service/cloud_print/cloud_print_proxy.h" |
| 17 #include "chrome/service/remoting/remoting_directory_service.h" | 17 #include "chrome/service/remoting/chromoting_host_manager.h" |
| 18 | 18 |
| 19 class ServiceProcessPrefs; | 19 class ServiceProcessPrefs; |
| 20 class ServiceIPCServer; | 20 class ServiceIPCServer; |
| 21 | 21 |
| 22 namespace net { | 22 namespace net { |
| 23 class NetworkChangeNotifier; | 23 class NetworkChangeNotifier; |
| 24 } | 24 } |
| 25 | 25 |
| 26 namespace remoting { | |
| 27 class ChromotingHost; | |
| 28 class ChromotingHostContext; | |
| 29 class HostKeyPair; | |
| 30 class JsonHostConfig; | |
| 31 } | |
| 32 | |
| 33 class CommandLine; | 26 class CommandLine; |
| 34 | 27 |
| 35 // The ServiceProcess does not inherit from ChildProcess because this | 28 // The ServiceProcess does not inherit from ChildProcess because this |
| 36 // process can live independently of the browser process. | 29 // process can live independently of the browser process. |
| 37 class ServiceProcess : public RemotingDirectoryService::Client, | 30 class ServiceProcess : public CloudPrintProxy::Client, |
| 38 public CloudPrintProxy::Client { | 31 public remoting::ChromotingHostManager::Observer { |
| 39 public: | 32 public: |
| 40 ServiceProcess(); | 33 ServiceProcess(); |
| 41 ~ServiceProcess(); | 34 ~ServiceProcess(); |
| 42 | 35 |
| 43 // Initialize the ServiceProcess with the message loop that it should run on. | 36 // Initialize the ServiceProcess with the message loop that it should run on. |
| 44 bool Initialize(MessageLoop* message_loop, const CommandLine& command_line); | 37 bool Initialize(MessageLoop* message_loop, const CommandLine& command_line); |
| 45 bool Teardown(); | 38 bool Teardown(); |
| 46 // TODO(sanjeevr): Change various parts of the code such as | 39 // TODO(sanjeevr): Change various parts of the code such as |
| 47 // net::ProxyService::CreateSystemProxyConfigService to take in | 40 // net::ProxyService::CreateSystemProxyConfigService to take in |
| 48 // MessageLoopProxy* instead of MessageLoop*. When we have done that, we can | 41 // MessageLoopProxy* instead of MessageLoop*. When we have done that, we can |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 85 // true indicates that the IPC server should continue listening for new | 78 // true indicates that the IPC server should continue listening for new |
| 86 // connections. | 79 // connections. |
| 87 bool HandleClientDisconnect(); | 80 bool HandleClientDisconnect(); |
| 88 | 81 |
| 89 CloudPrintProxy* GetCloudPrintProxy(); | 82 CloudPrintProxy* GetCloudPrintProxy(); |
| 90 | 83 |
| 91 // CloudPrintProxy::Client implementation. | 84 // CloudPrintProxy::Client implementation. |
| 92 virtual void OnCloudPrintProxyEnabled(); | 85 virtual void OnCloudPrintProxyEnabled(); |
| 93 virtual void OnCloudPrintProxyDisabled(); | 86 virtual void OnCloudPrintProxyDisabled(); |
| 94 | 87 |
| 88 // ChromotingHostManager::Observer interface. |
| 89 virtual void OnChromotingHostEnabled(); |
| 90 virtual void OnChromotingHostDisabled(); |
| 91 |
| 95 #if defined(ENABLE_REMOTING) | 92 #if defined(ENABLE_REMOTING) |
| 96 // Return the reference to the chromoting host only if it has started. | 93 // Return the reference to the chromoting host only if it has started. |
| 97 remoting::ChromotingHost* GetChromotingHost() { return chromoting_host_; } | 94 remoting::ChromotingHostManager* chromoting_host_manager() { |
| 98 | 95 return chromoting_host_manager_; |
| 99 // Enable chromoting host with the tokens. | 96 } |
| 100 // Return true if successful. | |
| 101 bool EnableChromotingHostWithTokens(const std::string& login, | |
| 102 const std::string& remoting_token, | |
| 103 const std::string& talk_token); | |
| 104 | |
| 105 // Start running the chromoting host asynchronously. | |
| 106 // Return true if chromoting host has started. | |
| 107 bool StartChromotingHost(); | |
| 108 | |
| 109 // Shutdown chromoting host. Return true if chromoting host was shutdown. | |
| 110 // The shutdown process will happen asynchronously. | |
| 111 bool ShutdownChromotingHost(); | |
| 112 | |
| 113 // RemotingDirectoryService::Client implementation. | |
| 114 virtual void OnRemotingHostAdded(); | |
| 115 virtual void OnRemotingDirectoryError(); | |
| 116 #endif | 97 #endif |
| 117 | 98 |
| 118 private: | 99 private: |
| 119 // Schedule a call to ShutdownIfNeeded. | 100 // Schedule a call to ShutdownIfNeeded. |
| 120 void ScheduleShutdownCheck(); | 101 void ScheduleShutdownCheck(); |
| 121 // Shuts down the process if no services are enabled and no clients are | 102 // Shuts down the process if no services are enabled and no clients are |
| 122 // connected. | 103 // connected. |
| 123 void ShutdownIfNeeded(); | 104 void ShutdownIfNeeded(); |
| 124 // Called exactly ONCE per process instance for each service that gets | 105 // Called exactly ONCE per process instance for each service that gets |
| 125 // enabled in this process. | 106 // enabled in this process. |
| 126 void OnServiceEnabled(); | 107 void OnServiceEnabled(); |
| 127 // Called exactly ONCE per process instance for each service that gets | 108 // Called exactly ONCE per process instance for each service that gets |
| 128 // disabled in this process (note that shutdown != disabled). | 109 // disabled in this process (note that shutdown != disabled). |
| 129 void OnServiceDisabled(); | 110 void OnServiceDisabled(); |
| 130 | 111 |
| 131 #if defined(ENABLE_REMOTING) | |
| 132 FRIEND_TEST_ALL_PREFIXES(ServiceProcessTest, RunChromoting); | |
| 133 FRIEND_TEST_ALL_PREFIXES(ServiceProcessTest, RunChromotingUntilShutdown); | |
| 134 | |
| 135 // Save authenication token to the json config file. | |
| 136 void SaveChromotingConfig( | |
| 137 const std::string& login, | |
| 138 const std::string& token, | |
| 139 const std::string& host_id, | |
| 140 const std::string& host_name, | |
| 141 remoting::HostKeyPair* host_key_pair); | |
| 142 | |
| 143 // Load settings for chromoting from json file. | |
| 144 void LoadChromotingConfig(); | |
| 145 | |
| 146 // This method is called when chromoting is shutting down. This is virtual | |
| 147 // for used in the test. | |
| 148 virtual void OnChromotingHostShutdown(); | |
| 149 #endif | |
| 150 | |
| 151 scoped_ptr<net::NetworkChangeNotifier> network_change_notifier_; | 112 scoped_ptr<net::NetworkChangeNotifier> network_change_notifier_; |
| 152 scoped_ptr<base::Thread> io_thread_; | 113 scoped_ptr<base::Thread> io_thread_; |
| 153 scoped_ptr<base::Thread> file_thread_; | 114 scoped_ptr<base::Thread> file_thread_; |
| 154 scoped_ptr<CloudPrintProxy> cloud_print_proxy_; | 115 scoped_ptr<CloudPrintProxy> cloud_print_proxy_; |
| 155 scoped_ptr<ServiceProcessPrefs> service_prefs_; | 116 scoped_ptr<ServiceProcessPrefs> service_prefs_; |
| 156 scoped_ptr<ServiceIPCServer> ipc_server_; | 117 scoped_ptr<ServiceIPCServer> ipc_server_; |
| 157 | 118 |
| 158 #if defined(ENABLE_REMOTING) | |
| 159 scoped_refptr<remoting::JsonHostConfig> chromoting_config_; | |
| 160 scoped_ptr<remoting::ChromotingHostContext> chromoting_context_; | |
| 161 scoped_refptr<remoting::ChromotingHost> chromoting_host_; | |
| 162 scoped_ptr<RemotingDirectoryService> remoting_directory_; | |
| 163 | |
| 164 // Temporary storage for remoting credentials. The content is cleared | |
| 165 // after it is saved. | |
| 166 std::string remoting_login_; | |
| 167 std::string remoting_token_; | |
| 168 std::string talk_token_; | |
| 169 #endif | |
| 170 | |
| 171 // An event that will be signalled when we shutdown. | 119 // An event that will be signalled when we shutdown. |
| 172 base::WaitableEvent shutdown_event_; | 120 base::WaitableEvent shutdown_event_; |
| 173 | 121 |
| 174 // Pointer to the main message loop that host this object. | 122 // Pointer to the main message loop that host this object. |
| 175 MessageLoop* main_message_loop_; | 123 MessageLoop* main_message_loop_; |
| 176 | 124 |
| 177 // Count of currently enabled services in this process. | 125 // Count of currently enabled services in this process. |
| 178 int enabled_services_; | 126 int enabled_services_; |
| 179 | 127 |
| 180 // Speficies whether a product update is available. | 128 // Speficies whether a product update is available. |
| 181 bool update_available_; | 129 bool update_available_; |
| 182 | 130 |
| 131 #if defined(ENABLE_REMOTING) |
| 132 scoped_refptr<remoting::ChromotingHostManager> chromoting_host_manager_; |
| 133 #endif |
| 134 |
| 183 DISALLOW_COPY_AND_ASSIGN(ServiceProcess); | 135 DISALLOW_COPY_AND_ASSIGN(ServiceProcess); |
| 184 }; | 136 }; |
| 185 | 137 |
| 186 extern ServiceProcess* g_service_process; | 138 extern ServiceProcess* g_service_process; |
| 187 | 139 |
| 188 #endif // CHROME_SERVICE_SERVICE_PROCESS_H_ | 140 #endif // CHROME_SERVICE_SERVICE_PROCESS_H_ |
| OLD | NEW |