// Copyright (c) 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "base/process/launch.h"
#include "build/build_config.h"

namespace base {

LaunchOptions::LaunchOptions()
    : wait(false),
#if defined(OS_WIN)
      start_hidden(false),
      handles_to_inherit(NULL),
      inherit_handles(false),
      as_user(NULL),
      empty_desktop_name(false),
      job_handle(NULL),
      stdin_handle(NULL),
      stdout_handle(NULL),
      stderr_handle(NULL),
      force_breakaway_from_job_(false)
#else
      clear_environ(false),
      fds_to_remap(NULL),
      maximize_rlimits(NULL),
      new_process_group(false)
#if defined(OS_LINUX)
      , clone_flags(0)
      , allow_new_privs(false)
      , kill_on_parent_death(false)
#endif  // OS_LINUX
#if defined(OS_POSIX)
      , pre_exec_delegate(NULL)
#endif  // OS_POSIX
#if defined(OS_CHROMEOS)
      , ctrl_terminal_fd(-1)
#endif  // OS_CHROMEOS
#endif  // !defined(OS_WIN)
    {
}

LaunchOptions::LaunchOptions(const LaunchOptions& other) = default;

LaunchOptions::~LaunchOptions() {
}

LaunchOptions LaunchOptionsForTest() {
  LaunchOptions options;
#if defined(OS_LINUX)
  // To prevent accidental privilege sharing to an untrusted child, processes
  // are started with PR_SET_NO_NEW_PRIVS. Do not set that here, since this
  // new child will be used for testing only.
  options.allow_new_privs = true;
#endif
  return options;
}

}  // namespace base
