| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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_BROWSER_SERVICE_SERVICE_PROCESS_CONTROL_H_ | 5 #ifndef CHROME_BROWSER_SERVICE_SERVICE_PROCESS_CONTROL_H_ |
| 6 #define CHROME_BROWSER_SERVICE_SERVICE_PROCESS_CONTROL_H_ | 6 #define CHROME_BROWSER_SERVICE_SERVICE_PROCESS_CONTROL_H_ |
| 7 | 7 |
| 8 #include <queue> | 8 #include <queue> |
| 9 #include <set> | 9 #include <set> |
| 10 #include <string> | 10 #include <string> |
| 11 #include <vector> | 11 #include <vector> |
| 12 | 12 |
| 13 #include "base/basictypes.h" | 13 #include "base/basictypes.h" |
| 14 #include "base/callback.h" | 14 #include "base/callback.h" |
| 15 #include "base/callback_old.h" | |
| 16 #include "base/id_map.h" | 15 #include "base/id_map.h" |
| 17 #include "base/memory/scoped_ptr.h" | 16 #include "base/memory/scoped_ptr.h" |
| 18 #include "base/memory/singleton.h" | 17 #include "base/memory/singleton.h" |
| 19 #include "base/process.h" | 18 #include "base/process.h" |
| 20 #include "base/task.h" | 19 #include "base/task.h" |
| 21 #include "content/public/browser/notification_observer.h" | 20 #include "content/public/browser/notification_observer.h" |
| 22 #include "content/public/browser/notification_registrar.h" | 21 #include "content/public/browser/notification_registrar.h" |
| 23 #include "ipc/ipc_channel_proxy.h" | 22 #include "ipc/ipc_channel_proxy.h" |
| 24 | 23 |
| 25 class CommandLine; | 24 class CommandLine; |
| (...skipping 11 matching lines...) Expand all Loading... |
| 37 // THREADING | 36 // THREADING |
| 38 // | 37 // |
| 39 // This class is accessed on the UI thread through some UI actions. It then | 38 // This class is accessed on the UI thread through some UI actions. It then |
| 40 // talks to the IPC channel on the IO thread. | 39 // talks to the IPC channel on the IO thread. |
| 41 class ServiceProcessControl : public IPC::Channel::Sender, | 40 class ServiceProcessControl : public IPC::Channel::Sender, |
| 42 public IPC::Channel::Listener, | 41 public IPC::Channel::Listener, |
| 43 public content::NotificationObserver { | 42 public content::NotificationObserver { |
| 44 public: | 43 public: |
| 45 typedef IDMap<ServiceProcessControl>::iterator iterator; | 44 typedef IDMap<ServiceProcessControl>::iterator iterator; |
| 46 typedef std::queue<IPC::Message> MessageQueue; | 45 typedef std::queue<IPC::Message> MessageQueue; |
| 47 typedef Callback1<const cloud_print::CloudPrintProxyInfo&>::Type | 46 typedef base::Callback<void(const cloud_print::CloudPrintProxyInfo&)> |
| 48 CloudPrintProxyInfoHandler; | 47 CloudPrintProxyInfoHandler; |
| 49 | 48 |
| 50 // Returns the singleton instance of this class. | 49 // Returns the singleton instance of this class. |
| 51 static ServiceProcessControl* GetInstance(); | 50 static ServiceProcessControl* GetInstance(); |
| 52 // Return true if this object is connected to the service. | 51 // Return true if this object is connected to the service. |
| 53 bool is_connected() const { return channel_.get() != NULL; } | 52 bool is_connected() const { return channel_.get() != NULL; } |
| 54 | 53 |
| 55 // If no service process is currently running, creates a new service process | 54 // If no service process is currently running, creates a new service process |
| 56 // and connects to it. If a service process is already running this method | 55 // and connects to it. If a service process is already running this method |
| 57 // will try to connect to it. | 56 // will try to connect to it. |
| (...skipping 28 matching lines...) Expand all Loading... |
| 86 const cloud_print::CloudPrintProxyInfo& proxy_info); | 85 const cloud_print::CloudPrintProxyInfo& proxy_info); |
| 87 | 86 |
| 88 // Send a shutdown message to the service process. IPC channel will be | 87 // Send a shutdown message to the service process. IPC channel will be |
| 89 // destroyed after calling this method. | 88 // destroyed after calling this method. |
| 90 // Return true if the message was sent. | 89 // Return true if the message was sent. |
| 91 bool Shutdown(); | 90 bool Shutdown(); |
| 92 | 91 |
| 93 // Send request for cloud print proxy info (enabled state, email, proxy id). | 92 // Send request for cloud print proxy info (enabled state, email, proxy id). |
| 94 // The callback gets the information when received. | 93 // The callback gets the information when received. |
| 95 bool GetCloudPrintProxyInfo( | 94 bool GetCloudPrintProxyInfo( |
| 96 CloudPrintProxyInfoHandler* cloud_print_status_callback); | 95 const CloudPrintProxyInfoHandler& cloud_print_status_callback); |
| 97 | 96 |
| 98 private: | 97 private: |
| 99 // This class is responsible for launching the service process on the | 98 // This class is responsible for launching the service process on the |
| 100 // PROCESS_LAUNCHER thread. | 99 // PROCESS_LAUNCHER thread. |
| 101 class Launcher | 100 class Launcher |
| 102 : public base::RefCountedThreadSafe<ServiceProcessControl::Launcher> { | 101 : public base::RefCountedThreadSafe<ServiceProcessControl::Launcher> { |
| 103 public: | 102 public: |
| 104 Launcher(ServiceProcessControl* process, CommandLine* cmd_line); | 103 Launcher(ServiceProcessControl* process, CommandLine* cmd_line); |
| 105 // Execute the command line to start the process asynchronously. | 104 // Execute the command line to start the process asynchronously. |
| 106 // After the comamnd is executed |task| is called with the process handle on | 105 // After the comamnd is executed |task| is called with the process handle on |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 150 // Service process launcher. | 149 // Service process launcher. |
| 151 scoped_refptr<Launcher> launcher_; | 150 scoped_refptr<Launcher> launcher_; |
| 152 | 151 |
| 153 // Callbacks that get invoked when the channel is successfully connected. | 152 // Callbacks that get invoked when the channel is successfully connected. |
| 154 TaskList connect_success_tasks_; | 153 TaskList connect_success_tasks_; |
| 155 // Callbacks that get invoked when there was a connection failure. | 154 // Callbacks that get invoked when there was a connection failure. |
| 156 TaskList connect_failure_tasks_; | 155 TaskList connect_failure_tasks_; |
| 157 | 156 |
| 158 // Callback that gets invoked when a status message is received from | 157 // Callback that gets invoked when a status message is received from |
| 159 // the cloud print proxy. | 158 // the cloud print proxy. |
| 160 scoped_ptr<CloudPrintProxyInfoHandler> cloud_print_info_callback_; | 159 CloudPrintProxyInfoHandler cloud_print_info_callback_; |
| 161 | 160 |
| 162 content::NotificationRegistrar registrar_; | 161 content::NotificationRegistrar registrar_; |
| 163 }; | 162 }; |
| 164 | 163 |
| 165 #endif // CHROME_BROWSER_SERVICE_SERVICE_PROCESS_CONTROL_H_ | 164 #endif // CHROME_BROWSER_SERVICE_SERVICE_PROCESS_CONTROL_H_ |
| OLD | NEW |