| Index: base/process/launch.h
|
| diff --git a/base/process/launch.h b/base/process/launch.h
|
| index 6cd02d63cabf3dfe556411c6a8d2202a8a7ffff7..eca4f8f7a44eeb1af2b0625dff6bc3f0b32b60d3 100644
|
| --- a/base/process/launch.h
|
| +++ b/base/process/launch.h
|
| @@ -37,6 +37,24 @@ typedef std::vector<std::pair<int, int> > FileHandleMappingVector;
|
| // Options for launching a subprocess that are passed to LaunchProcess().
|
| // The default constructor constructs the object with default options.
|
| struct BASE_EXPORT LaunchOptions {
|
| +#if defined(OS_POSIX)
|
| + // Delegate to be run in between fork and exec in the subprocess (see
|
| + // pre_exec_delegate below)
|
| + class BASE_EXPORT PreExecDelegate {
|
| + public:
|
| + PreExecDelegate() {}
|
| + virtual ~PreExecDelegate() {}
|
| +
|
| + // Since this is to be run between fork and exec, and fork may have happened
|
| + // while multiple threads were running, this function needs to be async
|
| + // safe.
|
| + virtual void RunAsyncSafe() = 0;
|
| +
|
| + private:
|
| + DISALLOW_COPY_AND_ASSIGN(PreExecDelegate);
|
| + };
|
| +#endif // defined(OS_POSIX)
|
| +
|
| LaunchOptions();
|
| ~LaunchOptions();
|
|
|
| @@ -115,6 +133,9 @@ struct BASE_EXPORT LaunchOptions {
|
|
|
| #if defined(OS_LINUX)
|
| // If non-zero, start the process using clone(), using flags as provided.
|
| + // Unlike in clone, clone_flags may not contain a custom termination signal
|
| + // that is sent to the parent when the child dies. The termination signal will
|
| + // always be set to SIGCHLD.
|
| int clone_flags;
|
|
|
| // By default, child processes will have the PR_SET_NO_NEW_PRIVS bit set. If
|
| @@ -122,6 +143,16 @@ struct BASE_EXPORT LaunchOptions {
|
| bool allow_new_privs;
|
| #endif // defined(OS_LINUX)
|
|
|
| +#if defined(OS_POSIX)
|
| + // If non-null, a delegate to be run immediately prior to executing the new
|
| + // program in the child process.
|
| + //
|
| + // WARNING: If LaunchProcess is called in the presence of multiple threads,
|
| + // code running in this delegate essentially needs to be async-signal safe
|
| + // (see man 7 signal for a list of allowed functions).
|
| + PreExecDelegate* pre_exec_delegate;
|
| +#endif // defined(OS_POSIX)
|
| +
|
| #if defined(OS_CHROMEOS)
|
| // If non-negative, the specified file descriptor will be set as the launched
|
| // process' controlling terminal.
|
| @@ -156,12 +187,6 @@ struct BASE_EXPORT LaunchOptions {
|
| BASE_EXPORT Process LaunchProcess(const CommandLine& cmdline,
|
| const LaunchOptions& options);
|
|
|
| -// Deprecated version.
|
| -// TODO(rvargas) crbug.com/417532: Remove this after migrating all consumers.
|
| -BASE_EXPORT bool LaunchProcess(const CommandLine& cmdline,
|
| - const LaunchOptions& options,
|
| - ProcessHandle* process_handle);
|
| -
|
| #if defined(OS_WIN)
|
| // Windows-specific LaunchProcess that takes the command line as a
|
| // string. Useful for situations where you need to control the
|
| @@ -192,12 +217,6 @@ BASE_EXPORT Process LaunchElevatedProcess(const CommandLine& cmdline,
|
| BASE_EXPORT Process LaunchProcess(const std::vector<std::string>& argv,
|
| const LaunchOptions& options);
|
|
|
| -// Deprecated version.
|
| -// TODO(rvargas) crbug.com/417532: Remove this after migrating all consumers.
|
| -BASE_EXPORT bool LaunchProcess(const std::vector<std::string>& argv,
|
| - const LaunchOptions& options,
|
| - ProcessHandle* process_handle);
|
| -
|
| // Close all file descriptors, except those which are a destination in the
|
| // given multimap. Only call this function in a child process where you know
|
| // that there aren't any other threads.
|
|
|