Chromium Code Reviews| Index: chrome/browser/process_singleton.h |
| diff --git a/chrome/browser/process_singleton.h b/chrome/browser/process_singleton.h |
| index 2a7e9b04a5a1e03dd7e46d5c72b606dad3a21783..2a24dda30674e485ef02c6f1072cecd909407962 100644 |
| --- a/chrome/browser/process_singleton.h |
| +++ b/chrome/browser/process_singleton.h |
| @@ -16,6 +16,7 @@ |
| #include <vector> |
| #include "base/basictypes.h" |
| +#include "base/callback.h" |
| #include "base/command_line.h" |
| #include "base/file_path.h" |
| #include "base/logging.h" |
| @@ -54,6 +55,15 @@ class ProcessSingleton : public base::NonThreadSafe { |
| LOCK_ERROR, |
| }; |
| + // Implement this callback to handle notifications from other processes. The |
| + // callback will receive the command line and directory with which the other |
| + // Chrome process was launched. Return true if the command line will be |
| + // handled within the current browser instance or false if the remote process |
| + // should handle it (i.e., because the current process is shutting down). |
| + typedef base::Callback< |
| + bool(const CommandLine& command_line, const FilePath& current_directory)> |
| + NotificationCallback; |
| + |
| explicit ProcessSingleton(const FilePath& user_data_dir); |
| ~ProcessSingleton(); |
| @@ -67,10 +77,12 @@ class ProcessSingleton : public base::NonThreadSafe { |
| // first one, so this function won't find it. |
| NotifyResult NotifyOtherProcess(); |
| - // Notify another process, if available. Otherwise sets ourselves as the |
| - // singleton instance. Returns PROCESS_NONE if we became the singleton |
| + // Notify another process, if available. Otherwise sets ourselves as the |
| + // singleton instance and stores the provided callback for notification from |
| + // future processes. Returns PROCESS_NONE if we became the singleton |
| // instance. |
| - NotifyResult NotifyOtherProcessOrCreate(); |
| + NotifyResult NotifyOtherProcessOrCreate( |
| + const NotificationCallback& notification_callback); |
| #if defined(OS_LINUX) || defined(OS_OPENBSD) |
| // Exposed for testing. We use a timeout on Linux, and in tests we want |
| @@ -80,6 +92,7 @@ class ProcessSingleton : public base::NonThreadSafe { |
| bool kill_unresponsive); |
| NotifyResult NotifyOtherProcessWithTimeoutOrCreate( |
| const CommandLine& command_line, |
| + const NotificationCallback& notification_callback, |
| int timeout_seconds); |
| #endif // defined(OS_LINUX) || defined(OS_OPENBSD) |
| @@ -96,8 +109,10 @@ class ProcessSingleton : public base::NonThreadSafe { |
| // Sets ourself up as the singleton instance. Returns true on success. If |
| // false is returned, we are not the singleton instance and the caller must |
| - // exit. |
| - bool Create(); |
| + // exit. Otherwise, stores the provided callback for notification from |
| + // future processes. |
| + bool Create( |
| + const NotificationCallback& notification_callback); |
| // Clear any lock state during shutdown. |
| void Cleanup(); |
| @@ -132,8 +147,6 @@ class ProcessSingleton : public base::NonThreadSafe { |
| private: |
| typedef std::pair<CommandLine::StringVector, FilePath> DelayedStartupMessage; |
| - void ProcessCommandLine(const CommandLine& command_line, |
| - const FilePath& current_directory); |
| #if !defined(OS_MACOSX) |
| // Timeout for the current browser process to respond. 20 seconds should be |
| @@ -143,6 +156,7 @@ class ProcessSingleton : public base::NonThreadSafe { |
| bool locked_; |
| gfx::NativeWindow foreground_window_; |
| + NotificationCallback notification_callback_; // Handler for notifications |
|
robertshield
2012/04/04 01:07:15
micro nit: '.' at the end
erikwright (departed)
2012/04/04 14:51:28
Done.
|
| #if defined(OS_WIN) |
| // This ugly behemoth handles startup commands sent from another process. |