Remove base/process

Change-Id: I3fa5f6d059278cf8b0a17d475ac2e6ff881d09c0
Reviewed-on: https://gn-review.googlesource.com/1660
Reviewed-by: Brett Wilson <brettw@chromium.org>
Commit-Queue: Scott Graham <scottmg@chromium.org>
diff --git a/base/files/file.cc b/base/files/file.cc
index 8f779d5..8bc4fdb 100644
--- a/base/files/file.cc
+++ b/base/files/file.cc
@@ -4,7 +4,6 @@
 
 #include "base/files/file.h"
 #include "base/files/file_path.h"
-#include "base/timer/elapsed_timer.h"
 #include "build_config.h"
 
 #if defined(OS_POSIX) || defined(OS_FUCHSIA)
diff --git a/base/files/file_util_win.cc b/base/files/file_util_win.cc
index 48190ad..545dbc0 100644
--- a/base/files/file_util_win.cc
+++ b/base/files/file_util_win.cc
@@ -23,7 +23,6 @@
 #include "base/files/file_path.h"
 #include "base/logging.h"
 #include "base/macros.h"
-#include "base/process/process_handle.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_piece.h"
 #include "base/strings/string_util.h"
@@ -506,7 +505,7 @@
     // the one exists, keep trying another path name until we reach some limit.
     string16 new_dir_name;
     new_dir_name.assign(prefix);
-    new_dir_name.append(IntToString16(GetCurrentProcId()));
+    new_dir_name.append(IntToString16(::GetCurrentProcessId()));
     new_dir_name.push_back('_');
     new_dir_name.append(UTF8ToUTF16(GenerateGUID()));
 
diff --git a/base/process/internal_linux.cc b/base/process/internal_linux.cc
deleted file mode 100644
index 6c2cafa..0000000
--- a/base/process/internal_linux.cc
+++ /dev/null
@@ -1,220 +0,0 @@
-// Copyright (c) 2012 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/internal_linux.h"
-
-#include <limits.h>
-#include <unistd.h>
-
-#include <map>
-#include <string>
-#include <vector>
-
-#include "base/files/file_util.h"
-#include "base/logging.h"
-#include "base/strings/string_number_conversions.h"
-#include "base/strings/string_split.h"
-#include "base/strings/string_util.h"
-#include "base/time/time.h"
-
-namespace base {
-namespace internal {
-
-const char kProcDir[] = "/proc";
-
-const char kStatFile[] = "stat";
-
-FilePath GetProcPidDir(pid_t pid) {
-  return FilePath(kProcDir).Append(IntToString(pid));
-}
-
-pid_t ProcDirSlotToPid(const char* d_name) {
-  int i;
-  for (i = 0; i < NAME_MAX && d_name[i]; ++i) {
-    if (!IsAsciiDigit(d_name[i])) {
-      return 0;
-    }
-  }
-  if (i == NAME_MAX)
-    return 0;
-
-  // Read the process's command line.
-  pid_t pid;
-  std::string pid_string(d_name);
-  if (!StringToInt(pid_string, &pid)) {
-    NOTREACHED();
-    return 0;
-  }
-  return pid;
-}
-
-bool ReadProcFile(const FilePath& file, std::string* buffer) {
-  buffer->clear();
-  if (!ReadFileToString(file, buffer)) {
-    DLOG(WARNING) << "Failed to read " << file.MaybeAsASCII();
-    return false;
-  }
-  return !buffer->empty();
-}
-
-bool ReadProcStats(pid_t pid, std::string* buffer) {
-  FilePath stat_file = internal::GetProcPidDir(pid).Append(kStatFile);
-  return ReadProcFile(stat_file, buffer);
-}
-
-bool ParseProcStats(const std::string& stats_data,
-                    std::vector<std::string>* proc_stats) {
-  // |stats_data| may be empty if the process disappeared somehow.
-  // e.g. http://crbug.com/145811
-  if (stats_data.empty())
-    return false;
-
-  // The stat file is formatted as:
-  // pid (process name) data1 data2 .... dataN
-  // Look for the closing paren by scanning backwards, to avoid being fooled by
-  // processes with ')' in the name.
-  size_t open_parens_idx = stats_data.find(" (");
-  size_t close_parens_idx = stats_data.rfind(") ");
-  if (open_parens_idx == std::string::npos ||
-      close_parens_idx == std::string::npos ||
-      open_parens_idx > close_parens_idx) {
-    DLOG(WARNING) << "Failed to find matched parens in '" << stats_data << "'";
-    NOTREACHED();
-    return false;
-  }
-  open_parens_idx++;
-
-  proc_stats->clear();
-  // PID.
-  proc_stats->push_back(stats_data.substr(0, open_parens_idx));
-  // Process name without parentheses.
-  proc_stats->push_back(stats_data.substr(
-      open_parens_idx + 1, close_parens_idx - (open_parens_idx + 1)));
-
-  // Split the rest.
-  std::vector<std::string> other_stats =
-      SplitString(stats_data.substr(close_parens_idx + 2), " ",
-                  base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL);
-  for (size_t i = 0; i < other_stats.size(); ++i)
-    proc_stats->push_back(other_stats[i]);
-  return true;
-}
-
-typedef std::map<std::string, std::string> ProcStatMap;
-void ParseProcStat(const std::string& contents, ProcStatMap* output) {
-  StringPairs key_value_pairs;
-  SplitStringIntoKeyValuePairs(contents, ' ', '\n', &key_value_pairs);
-  for (size_t i = 0; i < key_value_pairs.size(); ++i) {
-    output->insert(key_value_pairs[i]);
-  }
-}
-
-int64_t GetProcStatsFieldAsInt64(const std::vector<std::string>& proc_stats,
-                                 ProcStatsFields field_num) {
-  DCHECK_GE(field_num, VM_PPID);
-  CHECK_LT(static_cast<size_t>(field_num), proc_stats.size());
-
-  int64_t value;
-  return StringToInt64(proc_stats[field_num], &value) ? value : 0;
-}
-
-size_t GetProcStatsFieldAsSizeT(const std::vector<std::string>& proc_stats,
-                                ProcStatsFields field_num) {
-  DCHECK_GE(field_num, VM_PPID);
-  CHECK_LT(static_cast<size_t>(field_num), proc_stats.size());
-
-  size_t value;
-  return StringToSizeT(proc_stats[field_num], &value) ? value : 0;
-}
-
-int64_t ReadStatFileAndGetFieldAsInt64(const FilePath& stat_file,
-                                       ProcStatsFields field_num) {
-  std::string stats_data;
-  if (!ReadProcFile(stat_file, &stats_data))
-    return 0;
-  std::vector<std::string> proc_stats;
-  if (!ParseProcStats(stats_data, &proc_stats))
-    return 0;
-  return GetProcStatsFieldAsInt64(proc_stats, field_num);
-}
-
-int64_t ReadProcStatsAndGetFieldAsInt64(pid_t pid, ProcStatsFields field_num) {
-  FilePath stat_file = internal::GetProcPidDir(pid).Append(kStatFile);
-  return ReadStatFileAndGetFieldAsInt64(stat_file, field_num);
-}
-
-int64_t ReadProcSelfStatsAndGetFieldAsInt64(ProcStatsFields field_num) {
-  FilePath stat_file = FilePath(kProcDir).Append("self").Append(kStatFile);
-  return ReadStatFileAndGetFieldAsInt64(stat_file, field_num);
-}
-
-size_t ReadProcStatsAndGetFieldAsSizeT(pid_t pid, ProcStatsFields field_num) {
-  std::string stats_data;
-  if (!ReadProcStats(pid, &stats_data))
-    return 0;
-  std::vector<std::string> proc_stats;
-  if (!ParseProcStats(stats_data, &proc_stats))
-    return 0;
-  return GetProcStatsFieldAsSizeT(proc_stats, field_num);
-}
-
-Time GetBootTime() {
-  FilePath path("/proc/stat");
-  std::string contents;
-  if (!ReadProcFile(path, &contents))
-    return Time();
-  ProcStatMap proc_stat;
-  ParseProcStat(contents, &proc_stat);
-  ProcStatMap::const_iterator btime_it = proc_stat.find("btime");
-  if (btime_it == proc_stat.end())
-    return Time();
-  int btime;
-  if (!StringToInt(btime_it->second, &btime))
-    return Time();
-  return Time::FromTimeT(btime);
-}
-
-TimeDelta GetUserCpuTimeSinceBoot() {
-  FilePath path("/proc/stat");
-  std::string contents;
-  if (!ReadProcFile(path, &contents))
-    return TimeDelta();
-
-  ProcStatMap proc_stat;
-  ParseProcStat(contents, &proc_stat);
-  ProcStatMap::const_iterator cpu_it = proc_stat.find("cpu");
-  if (cpu_it == proc_stat.end())
-    return TimeDelta();
-
-  std::vector<std::string> cpu = SplitString(
-      cpu_it->second, kWhitespaceASCII, TRIM_WHITESPACE, SPLIT_WANT_NONEMPTY);
-
-  if (cpu.size() < 2 || cpu[0] != "cpu")
-    return TimeDelta();
-
-  uint64_t user;
-  uint64_t nice;
-  if (!StringToUint64(cpu[0], &user) || !StringToUint64(cpu[1], &nice))
-    return TimeDelta();
-
-  return ClockTicksToTimeDelta(user + nice);
-}
-
-TimeDelta ClockTicksToTimeDelta(int clock_ticks) {
-  // This queries the /proc-specific scaling factor which is
-  // conceptually the system hertz.  To dump this value on another
-  // system, try
-  //   od -t dL /proc/self/auxv
-  // and look for the number after 17 in the output; mine is
-  //   0000040          17         100           3   134512692
-  // which means the answer is 100.
-  // It may be the case that this value is always 100.
-  static const int kHertz = sysconf(_SC_CLK_TCK);
-
-  return TimeDelta::FromMicroseconds(Time::kMicrosecondsPerSecond *
-                                     clock_ticks / kHertz);
-}
-
-}  // namespace internal
-}  // namespace base
diff --git a/base/process/internal_linux.h b/base/process/internal_linux.h
deleted file mode 100644
index 56c08e6..0000000
--- a/base/process/internal_linux.h
+++ /dev/null
@@ -1,99 +0,0 @@
-// 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.
-
-// This file contains internal routines that are called by other files in
-// base/process/.
-
-#ifndef BASE_PROCESS_INTERNAL_LINUX_H_
-#define BASE_PROCESS_INTERNAL_LINUX_H_
-
-#include <stddef.h>
-#include <stdint.h>
-#include <unistd.h>
-
-#include "base/files/file_path.h"
-
-namespace base {
-
-class Time;
-class TimeDelta;
-
-namespace internal {
-
-// "/proc"
-extern const char kProcDir[];
-
-// "stat"
-extern const char kStatFile[];
-
-// Returns a FilePath to "/proc/pid".
-base::FilePath GetProcPidDir(pid_t pid);
-
-// Take a /proc directory entry named |d_name|, and if it is the directory for
-// a process, convert it to a pid_t.
-// Returns 0 on failure.
-// e.g. /proc/self/ will return 0, whereas /proc/1234 will return 1234.
-pid_t ProcDirSlotToPid(const char* d_name);
-
-// Reads /proc/<pid>/stat into |buffer|. Returns true if the file can be read
-// and is non-empty.
-bool ReadProcStats(pid_t pid, std::string* buffer);
-
-// Takes |stats_data| and populates |proc_stats| with the values split by
-// spaces. Taking into account the 2nd field may, in itself, contain spaces.
-// Returns true if successful.
-bool ParseProcStats(const std::string& stats_data,
-                    std::vector<std::string>* proc_stats);
-
-// Fields from /proc/<pid>/stat, 0-based. See man 5 proc.
-// If the ordering ever changes, carefully review functions that use these
-// values.
-enum ProcStatsFields {
-  VM_COMM = 1,         // Filename of executable, without parentheses.
-  VM_STATE = 2,        // Letter indicating the state of the process.
-  VM_PPID = 3,         // PID of the parent.
-  VM_PGRP = 4,         // Process group id.
-  VM_MINFLT = 9,       // Minor page fault count excluding children.
-  VM_MAJFLT = 11,      // Major page fault count excluding children.
-  VM_UTIME = 13,       // Time scheduled in user mode in clock ticks.
-  VM_STIME = 14,       // Time scheduled in kernel mode in clock ticks.
-  VM_NUMTHREADS = 19,  // Number of threads.
-  VM_STARTTIME = 21,   // The time the process started in clock ticks.
-  VM_VSIZE = 22,       // Virtual memory size in bytes.
-  VM_RSS = 23,         // Resident Set Size in pages.
-};
-
-// Reads the |field_num|th field from |proc_stats|. Returns 0 on failure.
-// This version does not handle the first 3 values, since the first value is
-// simply |pid|, and the next two values are strings.
-int64_t GetProcStatsFieldAsInt64(const std::vector<std::string>& proc_stats,
-                                 ProcStatsFields field_num);
-
-// Same as GetProcStatsFieldAsInt64(), but for size_t values.
-size_t GetProcStatsFieldAsSizeT(const std::vector<std::string>& proc_stats,
-                                ProcStatsFields field_num);
-
-// Convenience wrappers around GetProcStatsFieldAsInt64(), ParseProcStats() and
-// ReadProcStats(). See GetProcStatsFieldAsInt64() for details.
-int64_t ReadStatsFilendGetFieldAsInt64(const FilePath& stat_file,
-                                       ProcStatsFields field_num);
-int64_t ReadProcStatsAndGetFieldAsInt64(pid_t pid, ProcStatsFields field_num);
-int64_t ReadProcSelfStatsAndGetFieldAsInt64(ProcStatsFields field_num);
-
-// Same as ReadProcStatsAndGetFieldAsInt64() but for size_t values.
-size_t ReadProcStatsAndGetFieldAsSizeT(pid_t pid, ProcStatsFields field_num);
-
-// Returns the time that the OS started. Clock ticks are relative to this.
-Time GetBootTime();
-
-// Returns the amount of time spent in user space since boot across all CPUs.
-TimeDelta GetUserCpuTimeSinceBoot();
-
-// Converts Linux clock ticks to a wall time delta.
-TimeDelta ClockTicksToTimeDelta(int clock_ticks);
-
-}  // namespace internal
-}  // namespace base
-
-#endif  // BASE_PROCESS_INTERNAL_LINUX_H_
diff --git a/base/process/kill.cc b/base/process/kill.cc
deleted file mode 100644
index f73266d..0000000
--- a/base/process/kill.cc
+++ /dev/null
@@ -1,33 +0,0 @@
-// 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/kill.h"
-
-#include "base/bind.h"
-#include "base/process/process_iterator.h"
-#include "base/time/time.h"
-
-namespace base {
-
-bool KillProcesses(const FilePath::StringType& executable_name,
-                   int exit_code,
-                   const ProcessFilter* filter) {
-  bool result = true;
-  NamedProcessIterator iter(executable_name, filter);
-  while (const ProcessEntry* entry = iter.NextProcessEntry()) {
-    Process process = Process::Open(entry->pid());
-    // Sometimes process open fails. This would cause a DCHECK in
-    // process.Terminate(). Maybe the process has killed itself between the
-    // time the process list was enumerated and the time we try to open the
-    // process?
-    if (!process.IsValid()) {
-      result = false;
-      continue;
-    }
-    result &= process.Terminate(exit_code, true);
-  }
-  return result;
-}
-
-}  // namespace base
diff --git a/base/process/kill.h b/base/process/kill.h
deleted file mode 100644
index 89ab97b..0000000
--- a/base/process/kill.h
+++ /dev/null
@@ -1,134 +0,0 @@
-// 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.
-
-// This file contains routines to kill processes and get the exit code and
-// termination status.
-
-#ifndef BASE_PROCESS_KILL_H_
-#define BASE_PROCESS_KILL_H_
-
-#include "base/files/file_path.h"
-#include "base/process/process.h"
-#include "base/process/process_handle.h"
-#include "base/time/time.h"
-#include "build_config.h"
-
-namespace base {
-
-class ProcessFilter;
-
-#if defined(OS_WIN)
-namespace win {
-
-// See definition in sandbox/win/src/sandbox_types.h
-const DWORD kSandboxFatalMemoryExceeded = 7012;
-
-// Exit codes with special meanings on Windows.
-const DWORD kNormalTerminationExitCode = 0;
-const DWORD kDebuggerInactiveExitCode = 0xC0000354;
-const DWORD kKeyboardInterruptExitCode = 0xC000013A;
-const DWORD kDebuggerTerminatedExitCode = 0x40010004;
-
-// This exit code is used by the Windows task manager when it kills a
-// process.  It's value is obviously not that unique, and it's
-// surprising to me that the task manager uses this value, but it
-// seems to be common practice on Windows to test for it as an
-// indication that the task manager has killed something if the
-// process goes away.
-const DWORD kProcessKilledExitCode = 1;
-
-}  // namespace win
-
-#endif  // OS_WIN
-
-// Return status values from GetTerminationStatus.  Don't use these as
-// exit code arguments to KillProcess*(), use platform/application
-// specific values instead.
-enum TerminationStatus {
-  TERMINATION_STATUS_NORMAL_TERMINATION,    // zero exit status
-  TERMINATION_STATUS_ABNORMAL_TERMINATION,  // non-zero exit status
-  TERMINATION_STATUS_PROCESS_WAS_KILLED,    // e.g. SIGKILL or task manager kill
-  TERMINATION_STATUS_PROCESS_CRASHED,       // e.g. Segmentation fault
-  TERMINATION_STATUS_STILL_RUNNING,         // child hasn't exited yet
-  TERMINATION_STATUS_LAUNCH_FAILED,         // child process never launched
-  TERMINATION_STATUS_OOM,                   // Process died due to oom
-  TERMINATION_STATUS_MAX_ENUM
-};
-
-// Attempts to kill all the processes on the current machine that were launched
-// from the given executable name, ending them with the given exit code.  If
-// filter is non-null, then only processes selected by the filter are killed.
-// Returns true if all processes were able to be killed off, false if at least
-// one couldn't be killed.
-bool KillProcesses(const FilePath::StringType& executable_name,
-                   int exit_code,
-                   const ProcessFilter* filter);
-
-#if defined(OS_POSIX)
-// Attempts to kill the process group identified by |process_group_id|. Returns
-// true on success.
-bool KillProcessGroup(ProcessHandle process_group_id);
-#endif  // defined(OS_POSIX)
-
-// Get the termination status of the process by interpreting the
-// circumstances of the child process' death. |exit_code| is set to
-// the status returned by waitpid() on POSIX, and from GetExitCodeProcess() on
-// Windows, and may not be null.  Note that on Linux, this function
-// will only return a useful result the first time it is called after
-// the child exits (because it will reap the child and the information
-// will no longer be available).
-TerminationStatus GetTerminationStatus(ProcessHandle handle, int* exit_code);
-
-#if defined(OS_POSIX) && !defined(OS_FUCHSIA)
-// Send a kill signal to the process and then wait for the process to exit
-// and get the termination status.
-//
-// This is used in situations where it is believed that the process is dead
-// or dying (because communication with the child process has been cut).
-// In order to avoid erroneously returning that the process is still running
-// because the kernel is still cleaning it up, this will wait for the process
-// to terminate. In order to avoid the risk of hanging while waiting for the
-// process to terminate, send a SIGKILL to the process before waiting for the
-// termination status.
-//
-// Note that it is not an option to call WaitForExitCode and then
-// GetTerminationStatus as the child will be reaped when WaitForExitCode
-// returns, and this information will be lost.
-//
-TerminationStatus GetKnownDeadTerminationStatus(ProcessHandle handle,
-                                                int* exit_code);
-
-#if defined(OS_LINUX)
-// Spawns a thread to wait asynchronously for the child |process| to exit
-// and then reaps it.
-void EnsureProcessGetsReaped(Process process);
-#endif  // defined(OS_LINUX)
-#endif  // defined(OS_POSIX) && !defined(OS_FUCHSIA)
-
-// These are only sparingly used, and not needed on Fuchsia. They could be
-// implemented if necessary.
-#if !defined(OS_FUCHSIA)
-// Wait for all the processes based on the named executable to exit.  If filter
-// is non-null, then only processes selected by the filter are waited on.
-// Returns after all processes have exited or wait_milliseconds have expired.
-// Returns true if all the processes exited, false otherwise.
-bool WaitForProcessesToExit(const FilePath::StringType& executable_name,
-                            base::TimeDelta wait,
-                            const ProcessFilter* filter);
-
-// Waits a certain amount of time (can be 0) for all the processes with a given
-// executable name to exit, then kills off any of them that are still around.
-// If filter is non-null, then only processes selected by the filter are waited
-// on.  Killed processes are ended with the given exit code.  Returns false if
-// any processes needed to be killed, true if they all exited cleanly within
-// the wait_milliseconds delay.
-bool CleanupProcesses(const FilePath::StringType& executable_name,
-                      base::TimeDelta wait,
-                      int exit_code,
-                      const ProcessFilter* filter);
-#endif  // !defined(OS_FUCHSIA)
-
-}  // namespace base
-
-#endif  // BASE_PROCESS_KILL_H_
diff --git a/base/process/kill_posix.cc b/base/process/kill_posix.cc
deleted file mode 100644
index 0e4e84d..0000000
--- a/base/process/kill_posix.cc
+++ /dev/null
@@ -1,179 +0,0 @@
-// 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/kill.h"
-
-#include <errno.h>
-#include <signal.h>
-#include <sys/types.h>
-#include <sys/wait.h>
-#include <unistd.h>
-
-#include "base/files/file_util.h"
-#include "base/logging.h"
-#include "base/macros.h"
-#include "base/posix/eintr_wrapper.h"
-#include "base/process/process_iterator.h"
-#include "base/threading/platform_thread.h"
-#include "build_config.h"
-
-namespace base {
-
-namespace {
-
-TerminationStatus GetTerminationStatusImpl(ProcessHandle handle,
-                                           bool can_block,
-                                           int* exit_code) {
-  DCHECK(exit_code);
-
-  int status = 0;
-  const pid_t result =
-      HANDLE_EINTR(waitpid(handle, &status, can_block ? 0 : WNOHANG));
-  if (result == -1) {
-    DPLOG(ERROR) << "waitpid(" << handle << ")";
-    *exit_code = 0;
-    return TERMINATION_STATUS_NORMAL_TERMINATION;
-  } else if (result == 0) {
-    // the child hasn't exited yet.
-    *exit_code = 0;
-    return TERMINATION_STATUS_STILL_RUNNING;
-  }
-
-  *exit_code = status;
-
-  if (WIFSIGNALED(status)) {
-    switch (WTERMSIG(status)) {
-      case SIGABRT:
-      case SIGBUS:
-      case SIGFPE:
-      case SIGILL:
-      case SIGSEGV:
-      case SIGTRAP:
-      case SIGSYS:
-        return TERMINATION_STATUS_PROCESS_CRASHED;
-      case SIGKILL:
-      case SIGINT:
-      case SIGTERM:
-        return TERMINATION_STATUS_PROCESS_WAS_KILLED;
-      default:
-        break;
-    }
-  }
-
-  if (WIFEXITED(status) && WEXITSTATUS(status) != 0)
-    return TERMINATION_STATUS_ABNORMAL_TERMINATION;
-
-  return TERMINATION_STATUS_NORMAL_TERMINATION;
-}
-
-}  // namespace
-
-#if !defined(OS_NACL_NONSFI)
-bool KillProcessGroup(ProcessHandle process_group_id) {
-  bool result = kill(-1 * process_group_id, SIGKILL) == 0;
-  if (!result)
-    DPLOG(ERROR) << "Unable to terminate process group " << process_group_id;
-  return result;
-}
-#endif  // !defined(OS_NACL_NONSFI)
-
-TerminationStatus GetTerminationStatus(ProcessHandle handle, int* exit_code) {
-  return GetTerminationStatusImpl(handle, false /* can_block */, exit_code);
-}
-
-TerminationStatus GetKnownDeadTerminationStatus(ProcessHandle handle,
-                                                int* exit_code) {
-  bool result = kill(handle, SIGKILL) == 0;
-
-  if (!result)
-    DPLOG(ERROR) << "Unable to terminate process " << handle;
-
-  return GetTerminationStatusImpl(handle, true /* can_block */, exit_code);
-}
-
-#if !defined(OS_NACL_NONSFI)
-bool WaitForProcessesToExit(const FilePath::StringType& executable_name,
-                            TimeDelta wait,
-                            const ProcessFilter* filter) {
-  bool result = false;
-
-  // TODO(port): This is inefficient, but works if there are multiple procs.
-  // TODO(port): use waitpid to avoid leaving zombies around
-
-  TimeTicks end_time = TimeTicks::Now() + wait;
-  do {
-    NamedProcessIterator iter(executable_name, filter);
-    if (!iter.NextProcessEntry()) {
-      result = true;
-      break;
-    }
-    PlatformThread::Sleep(TimeDelta::FromMilliseconds(100));
-  } while ((end_time - TimeTicks::Now()) > TimeDelta());
-
-  return result;
-}
-
-bool CleanupProcesses(const FilePath::StringType& executable_name,
-                      TimeDelta wait,
-                      int exit_code,
-                      const ProcessFilter* filter) {
-  bool exited_cleanly = WaitForProcessesToExit(executable_name, wait, filter);
-  if (!exited_cleanly)
-    KillProcesses(executable_name, exit_code, filter);
-  return exited_cleanly;
-}
-
-#if !defined(OS_MACOSX)
-
-namespace {
-
-class BackgroundReaper : public PlatformThread::Delegate {
- public:
-  BackgroundReaper(base::Process child_process, const TimeDelta& wait_time)
-      : child_process_(std::move(child_process)), wait_time_(wait_time) {}
-
-  void ThreadMain() override {
-    if (!wait_time_.is_zero()) {
-      child_process_.WaitForExitWithTimeout(wait_time_, nullptr);
-      kill(child_process_.Handle(), SIGKILL);
-    }
-    child_process_.WaitForExit(nullptr);
-    delete this;
-  }
-
- private:
-  Process child_process_;
-  const TimeDelta wait_time_;
-  DISALLOW_COPY_AND_ASSIGN(BackgroundReaper);
-};
-
-}  // namespace
-
-void EnsureProcessTerminated(Process process) {
-  DCHECK(!process.is_current());
-
-  if (process.WaitForExitWithTimeout(TimeDelta(), nullptr))
-    return;
-
-  PlatformThread::CreateNonJoinable(
-      0, new BackgroundReaper(std::move(process), TimeDelta::FromSeconds(2)));
-}
-
-#if defined(OS_LINUX)
-void EnsureProcessGetsReaped(Process process) {
-  DCHECK(!process.is_current());
-
-  // If the child is already dead, then there's nothing to do.
-  if (process.WaitForExitWithTimeout(TimeDelta(), nullptr))
-    return;
-
-  PlatformThread::CreateNonJoinable(
-      0, new BackgroundReaper(std::move(process), TimeDelta()));
-}
-#endif  // defined(OS_LINUX)
-
-#endif  // !defined(OS_MACOSX)
-#endif  // !defined(OS_NACL_NONSFI)
-
-}  // namespace base
diff --git a/base/process/kill_win.cc b/base/process/kill_win.cc
deleted file mode 100644
index f598c13..0000000
--- a/base/process/kill_win.cc
+++ /dev/null
@@ -1,114 +0,0 @@
-// 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/kill.h"
-
-#include <algorithm>
-
-#include <io.h>
-#include <stdint.h>
-#include <windows.h>
-
-#include "base/logging.h"
-#include "base/macros.h"
-#include "base/process/memory.h"
-#include "base/process/process_iterator.h"
-
-namespace base {
-
-TerminationStatus GetTerminationStatus(ProcessHandle handle, int* exit_code) {
-  DCHECK(exit_code);
-
-  DWORD tmp_exit_code = 0;
-
-  if (!::GetExitCodeProcess(handle, &tmp_exit_code)) {
-    DPLOG(FATAL) << "GetExitCodeProcess() failed";
-
-    // This really is a random number.  We haven't received any
-    // information about the exit code, presumably because this
-    // process doesn't have permission to get the exit code, or
-    // because of some other cause for GetExitCodeProcess to fail
-    // (MSDN docs don't give the possible failure error codes for
-    // this function, so it could be anything).  But we don't want
-    // to leave exit_code uninitialized, since that could cause
-    // random interpretations of the exit code.  So we assume it
-    // terminated "normally" in this case.
-    *exit_code = win::kNormalTerminationExitCode;
-
-    // Assume the child has exited normally if we can't get the exit
-    // code.
-    return TERMINATION_STATUS_NORMAL_TERMINATION;
-  }
-  if (tmp_exit_code == STILL_ACTIVE) {
-    DWORD wait_result = WaitForSingleObject(handle, 0);
-    if (wait_result == WAIT_TIMEOUT) {
-      *exit_code = wait_result;
-      return TERMINATION_STATUS_STILL_RUNNING;
-    }
-
-    if (wait_result == WAIT_FAILED) {
-      DPLOG(ERROR) << "WaitForSingleObject() failed";
-    } else {
-      DCHECK_EQ(WAIT_OBJECT_0, wait_result);
-
-      // Strange, the process used 0x103 (STILL_ACTIVE) as exit code.
-      NOTREACHED();
-    }
-
-    return TERMINATION_STATUS_ABNORMAL_TERMINATION;
-  }
-
-  *exit_code = tmp_exit_code;
-
-  switch (tmp_exit_code) {
-    case win::kNormalTerminationExitCode:
-      return TERMINATION_STATUS_NORMAL_TERMINATION;
-    case win::kDebuggerInactiveExitCode:    // STATUS_DEBUGGER_INACTIVE.
-    case win::kKeyboardInterruptExitCode:   // Control-C/end session.
-    case win::kDebuggerTerminatedExitCode:  // Debugger terminated process.
-    case win::kProcessKilledExitCode:       // Task manager kill.
-      return TERMINATION_STATUS_PROCESS_WAS_KILLED;
-    case win::kSandboxFatalMemoryExceeded:  // Terminated process due to
-                                            // exceeding the sandbox job
-                                            // object memory limits.
-    case win::kOomExceptionCode:            // Ran out of memory.
-      return TERMINATION_STATUS_OOM;
-    default:
-      // All other exit codes indicate crashes.
-      return TERMINATION_STATUS_PROCESS_CRASHED;
-  }
-}
-
-bool WaitForProcessesToExit(const FilePath::StringType& executable_name,
-                            TimeDelta wait,
-                            const ProcessFilter* filter) {
-  bool result = true;
-  DWORD start_time = GetTickCount();
-
-  NamedProcessIterator iter(executable_name, filter);
-  for (const ProcessEntry* entry = iter.NextProcessEntry(); entry;
-       entry = iter.NextProcessEntry()) {
-    DWORD remaining_wait = static_cast<DWORD>(
-        std::max(static_cast<int64_t>(0),
-                 wait.InMilliseconds() - (GetTickCount() - start_time)));
-    HANDLE process = OpenProcess(SYNCHRONIZE, FALSE, entry->th32ProcessID);
-    DWORD wait_result = WaitForSingleObject(process, remaining_wait);
-    CloseHandle(process);
-    result &= (wait_result == WAIT_OBJECT_0);
-  }
-
-  return result;
-}
-
-bool CleanupProcesses(const FilePath::StringType& executable_name,
-                      TimeDelta wait,
-                      int exit_code,
-                      const ProcessFilter* filter) {
-  if (WaitForProcessesToExit(executable_name, wait, filter))
-    return true;
-  KillProcesses(executable_name, exit_code, filter);
-  return false;
-}
-
-}  // namespace base
diff --git a/base/process/memory.cc b/base/process/memory.cc
deleted file mode 100644
index 2e87fea..0000000
--- a/base/process/memory.cc
+++ /dev/null
@@ -1,51 +0,0 @@
-// Copyright 2014 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/memory.h"
-#include "base/logging.h"
-#include "build_config.h"
-
-namespace base {
-
-// Defined in memory_win.cc for Windows.
-#if !defined(OS_WIN)
-
-namespace {
-
-// Breakpad server classifies base::`anonymous namespace'::OnNoMemory as
-// out-of-memory crash.
-NOINLINE void OnNoMemory(size_t size) {
-  LOG(FATAL) << "Out of memory. size=" << size;
-}
-
-}  // namespace
-
-void TerminateBecauseOutOfMemory(size_t size) {
-  OnNoMemory(size);
-}
-
-#endif
-
-// Defined in memory_mac.mm for Mac.
-#if !defined(OS_MACOSX)
-
-bool UncheckedCalloc(size_t num_items, size_t size, void** result) {
-  const size_t alloc_size = num_items * size;
-
-  // Overflow check
-  if (size && ((alloc_size / size) != num_items)) {
-    *result = nullptr;
-    return false;
-  }
-
-  if (!UncheckedMalloc(alloc_size, result))
-    return false;
-
-  memset(*result, 0, alloc_size);
-  return true;
-}
-
-#endif
-
-}  // namespace base
diff --git a/base/process/memory.h b/base/process/memory.h
deleted file mode 100644
index bbcff68..0000000
--- a/base/process/memory.h
+++ /dev/null
@@ -1,81 +0,0 @@
-// 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.
-
-#ifndef BASE_PROCESS_MEMORY_H_
-#define BASE_PROCESS_MEMORY_H_
-
-#include <stddef.h>
-
-#include "base/process/process_handle.h"
-#include "build_config.h"
-
-#ifdef PVALLOC_AVAILABLE
-// Build config explicitly tells us whether or not pvalloc is available.
-#elif defined(LIBC_GLIBC) && !defined(USE_TCMALLOC)
-#define PVALLOC_AVAILABLE 1
-#else
-#define PVALLOC_AVAILABLE 0
-#endif
-
-namespace base {
-
-// Enables 'terminate on heap corruption' flag. Helps protect against heap
-// overflow. Has no effect if the OS doesn't provide the necessary facility.
-void EnableTerminationOnHeapCorruption();
-
-// Turns on process termination if memory runs out.
-void EnableTerminationOnOutOfMemory();
-
-// Terminates process. Should be called only for out of memory errors.
-// Crash reporting classifies such crashes as OOM.
-void TerminateBecauseOutOfMemory(size_t size);
-
-#if defined(OS_LINUX) || defined(OS_ANDROID) || defined(OS_AIX)
-extern size_t g_oom_size;
-
-// The maximum allowed value for the OOM score.
-const int kMaxOomScore = 1000;
-
-// This adjusts /proc/<pid>/oom_score_adj so the Linux OOM killer will
-// prefer to kill certain process types over others. The range for the
-// adjustment is [-1000, 1000], with [0, 1000] being user accessible.
-// If the Linux system doesn't support the newer oom_score_adj range
-// of [0, 1000], then we revert to using the older oom_adj, and
-// translate the given value into [0, 15].  Some aliasing of values
-// may occur in that case, of course.
-bool AdjustOOMScore(ProcessId process, int score);
-#endif
-
-#if defined(OS_WIN)
-namespace win {
-
-// Custom Windows exception code chosen to indicate an out of memory error.
-// See https://msdn.microsoft.com/en-us/library/het71c37.aspx.
-// "To make sure that you do not define a code that conflicts with an existing
-// exception code" ... "The resulting error code should therefore have the
-// highest four bits set to hexadecimal E."
-// 0xe0000008 was chosen arbitrarily, as 0x00000008 is ERROR_NOT_ENOUGH_MEMORY.
-const DWORD kOomExceptionCode = 0xe0000008;
-
-}  // namespace win
-#endif
-
-// Special allocator functions for callers that want to check for OOM.
-// These will not abort if the allocation fails even if
-// EnableTerminationOnOutOfMemory has been called.
-// This can be useful for huge and/or unpredictable size memory allocations.
-// Please only use this if you really handle the case when the allocation
-// fails. Doing otherwise would risk security.
-// These functions may still crash on OOM when running under memory tools,
-// specifically ASan and other sanitizers.
-// Return value tells whether the allocation succeeded. If it fails |result| is
-// set to NULL, otherwise it holds the memory address.
-WARN_UNUSED_RESULT bool UncheckedMalloc(size_t size, void** result);
-WARN_UNUSED_RESULT bool UncheckedCalloc(size_t num_items,
-                                        size_t size,
-                                        void** result);
-
-}  // namespace base
-
-#endif  // BASE_PROCESS_MEMORY_H_
diff --git a/base/process/memory_linux.cc b/base/process/memory_linux.cc
deleted file mode 100644
index 9c75b78..0000000
--- a/base/process/memory_linux.cc
+++ /dev/null
@@ -1,88 +0,0 @@
-// 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/memory.h"
-
-#include <stddef.h>
-
-#include <new>
-
-#include "base/files/file_path.h"
-#include "base/files/file_util.h"
-#include "base/logging.h"
-#include "base/process/internal_linux.h"
-#include "base/strings/string_number_conversions.h"
-#include "build_config.h"
-
-namespace base {
-
-size_t g_oom_size = 0U;
-
-namespace {
-
-void OnNoMemorySize(size_t size) {
-  g_oom_size = size;
-
-  if (size != 0)
-    LOG(FATAL) << "Out of memory, size = " << size;
-  LOG(FATAL) << "Out of memory.";
-}
-
-void OnNoMemory() {
-  OnNoMemorySize(0);
-}
-
-}  // namespace
-
-void EnableTerminationOnHeapCorruption() {
-  // On Linux, there nothing to do AFAIK.
-}
-
-void EnableTerminationOnOutOfMemory() {
-  // Set the new-out of memory handler.
-  std::set_new_handler(&OnNoMemory);
-  // If we're using glibc's allocator, the above functions will override
-  // malloc and friends and make them die on out of memory.
-}
-
-// NOTE: This is not the only version of this function in the source:
-// the setuid sandbox (in process_util_linux.c, in the sandbox source)
-// also has its own C version.
-bool AdjustOOMScore(ProcessId process, int score) {
-  if (score < 0 || score > kMaxOomScore)
-    return false;
-
-  FilePath oom_path(internal::GetProcPidDir(process));
-
-  // Attempt to write the newer oom_score_adj file first.
-  FilePath oom_file = oom_path.AppendASCII("oom_score_adj");
-  if (PathExists(oom_file)) {
-    std::string score_str = IntToString(score);
-    int score_len = static_cast<int>(score_str.length());
-    return (score_len == WriteFile(oom_file, score_str.c_str(), score_len));
-  }
-
-  // If the oom_score_adj file doesn't exist, then we write the old
-  // style file and translate the oom_adj score to the range 0-15.
-  oom_file = oom_path.AppendASCII("oom_adj");
-  if (PathExists(oom_file)) {
-    // Max score for the old oom_adj range.  Used for conversion of new
-    // values to old values.
-    const int kMaxOldOomScore = 15;
-
-    int converted_score = score * kMaxOldOomScore / kMaxOomScore;
-    std::string score_str = IntToString(converted_score);
-    int score_len = static_cast<int>(score_str.length());
-    return (score_len == WriteFile(oom_file, score_str.c_str(), score_len));
-  }
-
-  return false;
-}
-
-bool UncheckedMalloc(size_t size, void** result) {
-  *result = malloc(size);
-  return *result != nullptr;
-}
-
-}  // namespace base
diff --git a/base/process/memory_mac.mm b/base/process/memory_mac.mm
deleted file mode 100644
index 4fa31a1..0000000
--- a/base/process/memory_mac.mm
+++ /dev/null
@@ -1,42 +0,0 @@
-// 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/memory.h"
-
-#include "build_config.h"
-
-namespace base {
-
-namespace {
-void oom_killer_new() {
-  TerminateBecauseOutOfMemory(0);
-}
-}  // namespace
-
-void EnableTerminationOnHeapCorruption() {
-#if !ARCH_CPU_64_BITS
-  DLOG(WARNING) << "EnableTerminationOnHeapCorruption only works on 64-bit";
-#endif
-}
-
-bool UncheckedMalloc(size_t size, void** result) {
-  *result = malloc(size);
-  return *result != nullptr;
-}
-
-bool UncheckedCalloc(size_t num_items, size_t size, void** result) {
-  *result = calloc(num_items, size);
-  return *result != nullptr;
-}
-
-void EnableTerminationOnOutOfMemory() {
-  // Step 1: Enable OOM killer on C++ failures.
-  std::set_new_handler(oom_killer_new);
-
-  // Step 2: Enable OOM killer on all other malloc zones (or just "all" without
-  // "other" if shim is disabled).
-  allocator::InterceptAllocationsMac();
-}
-
-}  // namespace base
diff --git a/base/process/memory_stubs.cc b/base/process/memory_stubs.cc
deleted file mode 100644
index df4657f..0000000
--- a/base/process/memory_stubs.cc
+++ /dev/null
@@ -1,42 +0,0 @@
-// 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/memory.h"
-
-#include <stddef.h>
-#include <stdlib.h>
-
-namespace base {
-
-void EnableTerminationOnOutOfMemory() {}
-
-void EnableTerminationOnHeapCorruption() {}
-
-bool AdjustOOMScore(ProcessId process, int score) {
-  return false;
-}
-
-void TerminateBecauseOutOfMemory(size_t size) {
-  abort();
-}
-
-// UncheckedMalloc and Calloc exist so that platforms making use of
-// EnableTerminationOnOutOfMemory have a way to allocate memory without
-// crashing. This _stubs.cc file is for platforms that do not support
-// EnableTerminationOnOutOfMemory (note the empty implementation above). As
-// such, these two Unchecked.alloc functions need only trivially pass-through to
-// their respective stdlib function since those functions will return null on a
-// failure to allocate.
-
-bool UncheckedMalloc(size_t size, void** result) {
-  *result = malloc(size);
-  return *result != nullptr;
-}
-
-bool UncheckedCalloc(size_t num_items, size_t size, void** result) {
-  *result = calloc(num_items, size);
-  return *result != nullptr;
-}
-
-}  // namespace base
diff --git a/base/process/memory_win.cc b/base/process/memory_win.cc
deleted file mode 100644
index 77a2398..0000000
--- a/base/process/memory_win.cc
+++ /dev/null
@@ -1,83 +0,0 @@
-// 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/memory.h"
-
-#include <windows.h>  // Must be in front of other Windows header files.
-
-#include <new.h>
-#include <psapi.h>
-#include <stddef.h>
-
-#if defined(__clang__)
-// This global constructor is trivial and non-racy (per being const).
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wglobal-constructors"
-#endif
-
-// malloc_unchecked is required to implement UncheckedMalloc properly.
-// It's provided by allocator_shim_win.cc but since that's not always present,
-// we provide a default that falls back to regular malloc.
-typedef void* (*MallocFn)(size_t);
-extern "C" void* (*const malloc_unchecked)(size_t);
-extern "C" void* (*const malloc_default)(size_t) = &malloc;
-
-#if defined(__clang__)
-#pragma clang diagnostic pop  // -Wglobal-constructors
-#endif
-
-#if defined(_M_IX86)
-#pragma comment(linker, "/alternatename:_malloc_unchecked=_malloc_default")
-#elif defined(_M_X64) || defined(_M_ARM)
-#pragma comment(linker, "/alternatename:malloc_unchecked=malloc_default")
-#else
-#error Unsupported platform
-#endif
-
-namespace base {
-
-namespace {
-
-#pragma warning(push)
-#pragma warning(disable : 4702)  // Unreachable code after the _exit.
-
-NOINLINE int OnNoMemory(size_t size) {
-  // Kill the process. This is important for security since most of code
-  // does not check the result of memory allocation.
-  // https://msdn.microsoft.com/en-us/library/het71c37.aspx
-  // Pass the size of the failed request in an exception argument.
-  ULONG_PTR exception_args[] = {size};
-  ::RaiseException(win::kOomExceptionCode, EXCEPTION_NONCONTINUABLE,
-                   arraysize(exception_args), exception_args);
-
-  // Safety check, make sure process exits here.
-  _exit(win::kOomExceptionCode);
-  return 0;
-}
-
-#pragma warning(pop)
-
-}  // namespace
-
-void TerminateBecauseOutOfMemory(size_t size) {
-  OnNoMemory(size);
-}
-
-void EnableTerminationOnHeapCorruption() {
-  // Ignore the result code. Supported on XP SP3 and Vista.
-  HeapSetInformation(NULL, HeapEnableTerminationOnCorruption, NULL, 0);
-}
-
-void EnableTerminationOnOutOfMemory() {
-  _set_new_handler(&OnNoMemory);
-  _set_new_mode(1);
-}
-
-// Implemented using a weak symbol.
-bool UncheckedMalloc(size_t size, void** result) {
-  *result = malloc_unchecked(size);
-  return *result != NULL;
-}
-
-}  // namespace base
diff --git a/base/process/process.h b/base/process/process.h
deleted file mode 100644
index 857bd6d..0000000
--- a/base/process/process.h
+++ /dev/null
@@ -1,141 +0,0 @@
-// Copyright 2011 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.
-
-#ifndef BASE_PROCESS_PROCESS_H_
-#define BASE_PROCESS_PROCESS_H_
-
-#include "base/macros.h"
-#include "base/process/process_handle.h"
-#include "base/time/time.h"
-#include "build_config.h"
-
-#if defined(OS_WIN)
-#include "base/win/scoped_handle.h"
-#endif
-
-namespace base {
-
-// Provides a move-only encapsulation of a process.
-//
-// This object is not tied to the lifetime of the underlying process: the
-// process may be killed and this object may still around, and it will still
-// claim to be valid. The actual behavior in that case is OS dependent like so:
-//
-// Windows: The underlying ProcessHandle will be valid after the process dies
-// and can be used to gather some information about that process, but most
-// methods will obviously fail.
-//
-// POSIX: The underlying ProcessHandle is not guaranteed to remain valid after
-// the process dies, and it may be reused by the system, which means that it may
-// end up pointing to the wrong process.
-class Process {
- public:
-  // On Windows, this takes ownership of |handle|. On POSIX, this does not take
-  // ownership of |handle|.
-  explicit Process(ProcessHandle handle = kNullProcessHandle);
-
-  Process(Process&& other);
-
-  // The destructor does not terminate the process.
-  ~Process();
-
-  Process& operator=(Process&& other);
-
-  // Returns an object for the current process.
-  static Process Current();
-
-  // Returns a Process for the given |pid|.
-  static Process Open(ProcessId pid);
-
-  // Returns a Process for the given |pid|. On Windows the handle is opened
-  // with more access rights and must only be used by trusted code (can read the
-  // address space and duplicate handles).
-  static Process OpenWithExtraPrivileges(ProcessId pid);
-
-#if defined(OS_WIN)
-  // Returns a Process for the given |pid|, using some |desired_access|.
-  // See ::OpenProcess documentation for valid |desired_access|.
-  static Process OpenWithAccess(ProcessId pid, DWORD desired_access);
-#endif
-
-  // Terminates the current process immediately with |exit_code|.
-  [[noreturn]] static void TerminateCurrentProcessImmediately(int exit_code);
-
-  // Returns true if this objects represents a valid process.
-  bool IsValid() const;
-
-  // Returns a handle for this process. There is no guarantee about when that
-  // handle becomes invalid because this object retains ownership.
-  ProcessHandle Handle() const;
-
-  // Returns a second object that represents this process.
-  Process Duplicate() const;
-
-  // Get the PID for this process.
-  ProcessId Pid() const;
-
-  // Returns true if this process is the current process.
-  bool is_current() const;
-
-  // Close the process handle. This will not terminate the process.
-  void Close();
-
-// Returns true if this process is still running. This is only safe on Windows
-// (and maybe Fuchsia?), because the ProcessHandle will keep the zombie
-// process information available until itself has been released. But on Posix,
-// the OS may reuse the ProcessId.
-#if defined(OS_WIN)
-  bool IsRunning() const {
-    return !WaitForExitWithTimeout(base::TimeDelta(), nullptr);
-  }
-#endif
-
-  // Terminates the process with extreme prejudice. The given |exit_code| will
-  // be the exit code of the process. If |wait| is true, this method will wait
-  // for up to one minute for the process to actually terminate.
-  // Returns true if the process terminates within the allowed time.
-  // NOTE: On POSIX |exit_code| is ignored.
-  bool Terminate(int exit_code, bool wait) const;
-
-  // Waits for the process to exit. Returns true on success.
-  // On POSIX, if the process has been signaled then |exit_code| is set to -1.
-  // On Linux this must be a child process, however on Mac and Windows it can be
-  // any process.
-  // NOTE: |exit_code| is optional, nullptr can be passed if the exit code is
-  // not required.
-  bool WaitForExit(int* exit_code) const;
-
-  // Same as WaitForExit() but only waits for up to |timeout|.
-  // NOTE: |exit_code| is optional, nullptr can be passed if the exit code
-  // is not required.
-  bool WaitForExitWithTimeout(TimeDelta timeout, int* exit_code) const;
-
-  // Indicates that the process has exited with the specified |exit_code|.
-  // This should be called if process exit is observed outside of this class.
-  // (i.e. Not because Terminate or WaitForExit, above, was called.)
-  // Note that nothing prevents this being called multiple times for a dead
-  // process though that should be avoided.
-  void Exited(int exit_code) const;
-
-  // Returns an integer representing the priority of a process. The meaning
-  // of this value is OS dependent.
-  int GetPriority() const;
-
- private:
-#if defined(OS_WIN)
-  win::ScopedHandle process_;
-#else
-  ProcessHandle process_;
-#endif
-
-#if defined(OS_WIN)
-  bool is_current_process_;
-#endif
-
-  DISALLOW_COPY_AND_ASSIGN(Process);
-};
-
-}  // namespace base
-
-#endif  // BASE_PROCESS_PROCESS_H_
diff --git a/base/process/process_handle.cc b/base/process/process_handle.cc
deleted file mode 100644
index fde631e..0000000
--- a/base/process/process_handle.cc
+++ /dev/null
@@ -1,52 +0,0 @@
-// Copyright 2015 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 <stdint.h>
-
-#include "base/logging.h"
-#include "base/process/process_handle.h"
-#include "build_config.h"
-
-namespace base {
-
-namespace {
-bool g_have_unique_id = false;
-uint32_t g_unique_id;
-
-// The process which set |g_unique_id|.
-ProcessId g_procid;
-
-// Mangle IDs so that they are not accidentally used as PIDs, e.g. as an
-// argument to kill or waitpid.
-uint32_t MangleProcessId(ProcessId process_id) {
-  // Add a large power of 10 so that the pid is still the pid is still readable
-  // inside the mangled id.
-  return static_cast<uint32_t>(process_id) + 1000000000U;
-}
-
-}  // namespace
-
-uint32_t GetUniqueIdForProcess() {
-  if (!g_have_unique_id) {
-    return MangleProcessId(GetCurrentProcId());
-  }
-
-  // Make sure we are the same process that set |g_procid|. This check may have
-  // false negatives (if a process ID was reused) but should have no false
-  // positives.
-  DCHECK_EQ(GetCurrentProcId(), g_procid);
-  return g_unique_id;
-}
-
-#if defined(OS_LINUX) || defined(OS_AIX)
-
-void InitUniqueIdForProcessInPidNamespace(ProcessId pid_outside_of_namespace) {
-  g_unique_id = MangleProcessId(pid_outside_of_namespace);
-  g_procid = GetCurrentProcId();
-  g_have_unique_id = true;
-}
-
-#endif
-
-}  // namespace base
diff --git a/base/process/process_handle.h b/base/process/process_handle.h
deleted file mode 100644
index 0ec6bf4..0000000
--- a/base/process/process_handle.h
+++ /dev/null
@@ -1,92 +0,0 @@
-// 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.
-
-#ifndef BASE_PROCESS_PROCESS_HANDLE_H_
-#define BASE_PROCESS_PROCESS_HANDLE_H_
-
-#include <stdint.h>
-#include <sys/types.h>
-
-#include "base/files/file_path.h"
-#include "build_config.h"
-
-#if defined(OS_WIN)
-#include "base/win/windows_types.h"
-#endif
-
-namespace base {
-
-// ProcessHandle is a platform specific type which represents the underlying OS
-// handle to a process.
-// ProcessId is a number which identifies the process in the OS.
-#if defined(OS_WIN)
-typedef HANDLE ProcessHandle;
-typedef DWORD ProcessId;
-typedef HANDLE UserTokenHandle;
-const ProcessHandle kNullProcessHandle = NULL;
-const ProcessId kNullProcessId = 0;
-#elif defined(OS_POSIX)
-// On POSIX, our ProcessHandle will just be the PID.
-typedef pid_t ProcessHandle;
-typedef pid_t ProcessId;
-const ProcessHandle kNullProcessHandle = 0;
-const ProcessId kNullProcessId = 0;
-#endif  // defined(OS_WIN)
-
-// To print ProcessIds portably use CrPRIdPid (based on PRIuS and friends from
-// C99 and format_macros.h) like this:
-// base::StringPrintf("PID is %" CrPRIdPid ".\n", pid);
-#if defined(OS_WIN)
-#define CrPRIdPid "ld"
-#else
-#define CrPRIdPid "d"
-#endif
-
-// Returns the id of the current process.
-// Note that on some platforms, this is not guaranteed to be unique across
-// processes (use GetUniqueIdForProcess if uniqueness is required).
-ProcessId GetCurrentProcId();
-
-// Returns a unique ID for the current process. The ID will be unique across all
-// currently running processes within the chrome session, but IDs of terminated
-// processes may be reused. This returns an opaque value that is different from
-// a process's PID.
-uint32_t GetUniqueIdForProcess();
-
-#if defined(OS_LINUX)
-// When a process is started in a different PID namespace from the browser
-// process, this function must be called with the process's PID in the browser's
-// PID namespace in order to initialize its unique ID. Not thread safe.
-// WARNING: To avoid inconsistent results from GetUniqueIdForProcess, this
-// should only be called very early after process startup - ideally as soon
-// after process creation as possible.
-void InitUniqueIdForProcessInPidNamespace(ProcessId pid_outside_of_namespace);
-#endif
-
-// Returns the ProcessHandle of the current process.
-ProcessHandle GetCurrentProcessHandle();
-
-// Returns the process ID for the specified process. This is functionally the
-// same as Windows' GetProcessId(), but works on versions of Windows before Win
-// XP SP1 as well.
-// DEPRECATED. New code should be using Process::Pid() instead.
-// Note that on some platforms, this is not guaranteed to be unique across
-// processes.
-ProcessId GetProcId(ProcessHandle process);
-
-#if !defined(OS_FUCHSIA)
-// Returns the ID for the parent of the given process. Not available on Fuchsia.
-// Returning a negative value indicates an error, such as if the |process| does
-// not exist. Returns 0 when |process| has no parent process.
-ProcessId GetParentProcessId(ProcessHandle process);
-#endif  // !defined(OS_FUCHSIA)
-
-#if defined(OS_POSIX)
-// Returns the path to the executable of the given process.
-FilePath GetProcessExecutablePath(ProcessHandle process);
-#endif
-
-}  // namespace base
-
-#endif  // BASE_PROCESS_PROCESS_HANDLE_H_
diff --git a/base/process/process_handle_freebsd.cc b/base/process/process_handle_freebsd.cc
deleted file mode 100644
index bbbf660..0000000
--- a/base/process/process_handle_freebsd.cc
+++ /dev/null
@@ -1,43 +0,0 @@
-// Copyright (c) 2011 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/macros.h"
-#include "base/process/process_handle.h"
-
-#include <limits.h>
-#include <stddef.h>
-#include <sys/sysctl.h>
-#include <sys/types.h>
-#include <sys/user.h>
-#include <unistd.h>
-
-namespace base {
-
-ProcessId GetParentProcessId(ProcessHandle process) {
-  struct kinfo_proc info;
-  size_t length;
-  int mib[] = {CTL_KERN, KERN_PROC, KERN_PROC_PID, process};
-
-  if (sysctl(mib, arraysize(mib), &info, &length, NULL, 0) < 0)
-    return -1;
-
-  return info.ki_ppid;
-}
-
-FilePath GetProcessExecutablePath(ProcessHandle process) {
-  char pathname[PATH_MAX];
-  size_t length;
-  int mib[] = {CTL_KERN, KERN_PROC, KERN_PROC_PATHNAME, process};
-
-  length = sizeof(pathname);
-
-  if (sysctl(mib, arraysize(mib), pathname, &length, NULL, 0) < 0 ||
-      length == 0) {
-    return FilePath();
-  }
-
-  return FilePath(std::string(pathname));
-}
-
-}  // namespace base
diff --git a/base/process/process_handle_linux.cc b/base/process/process_handle_linux.cc
deleted file mode 100644
index 43e9ce2..0000000
--- a/base/process/process_handle_linux.cc
+++ /dev/null
@@ -1,31 +0,0 @@
-// 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/process_handle.h"
-
-#include "base/files/file_util.h"
-#include "base/process/internal_linux.h"
-
-namespace base {
-
-ProcessId GetParentProcessId(ProcessHandle process) {
-  ProcessId pid =
-      internal::ReadProcStatsAndGetFieldAsInt64(process, internal::VM_PPID);
-  // TODO(zijiehe): Returns 0 if |process| does not have a parent process.
-  if (pid)
-    return pid;
-  return -1;
-}
-
-FilePath GetProcessExecutablePath(ProcessHandle process) {
-  FilePath stat_file = internal::GetProcPidDir(process).Append("exe");
-  FilePath exe_name;
-  if (!ReadSymbolicLink(stat_file, &exe_name)) {
-    // No such process.  Happens frequently in e.g. TerminateAllChromeProcesses
-    return FilePath();
-  }
-  return exe_name;
-}
-
-}  // namespace base
diff --git a/base/process/process_handle_mac.cc b/base/process/process_handle_mac.cc
deleted file mode 100644
index 6b62406..0000000
--- a/base/process/process_handle_mac.cc
+++ /dev/null
@@ -1,37 +0,0 @@
-// 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/process_handle.h"
-
-#include <libproc.h>
-#include <stddef.h>
-#include <sys/sysctl.h>
-#include <sys/types.h>
-
-#include "base/logging.h"
-
-namespace base {
-
-ProcessId GetParentProcessId(ProcessHandle process) {
-  struct kinfo_proc info;
-  size_t length = sizeof(struct kinfo_proc);
-  int mib[4] = {CTL_KERN, KERN_PROC, KERN_PROC_PID, process};
-  if (sysctl(mib, 4, &info, &length, NULL, 0) < 0) {
-    DPLOG(ERROR) << "sysctl";
-    return -1;
-  }
-  if (length == 0)
-    return -1;
-  return info.kp_eproc.e_ppid;
-}
-
-FilePath GetProcessExecutablePath(ProcessHandle process) {
-  char pathbuf[PROC_PIDPATHINFO_MAXSIZE];
-  if (!proc_pidpath(process, pathbuf, sizeof(pathbuf)))
-    return FilePath();
-
-  return FilePath(pathbuf);
-}
-
-}  // namespace base
diff --git a/base/process/process_handle_openbsd.cc b/base/process/process_handle_openbsd.cc
deleted file mode 100644
index 0e85770..0000000
--- a/base/process/process_handle_openbsd.cc
+++ /dev/null
@@ -1,53 +0,0 @@
-// Copyright (c) 2011 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/macros.h"
-#include "base/process/process_handle.h"
-
-#include <stddef.h>
-#include <sys/sysctl.h>
-#include <sys/types.h>
-#include <unistd.h>
-
-namespace base {
-
-ProcessId GetParentProcessId(ProcessHandle process) {
-  struct kinfo_proc info;
-  size_t length;
-  int mib[] = {
-      CTL_KERN, KERN_PROC, KERN_PROC_PID, process, sizeof(struct kinfo_proc),
-      0};
-
-  if (sysctl(mib, arraysize(mib), NULL, &length, NULL, 0) < 0)
-    return -1;
-
-  mib[5] = (length / sizeof(struct kinfo_proc));
-
-  if (sysctl(mib, arraysize(mib), &info, &length, NULL, 0) < 0)
-    return -1;
-
-  return info.p_ppid;
-}
-
-FilePath GetProcessExecutablePath(ProcessHandle process) {
-  struct kinfo_proc kp;
-  size_t len;
-  int mib[] = {
-      CTL_KERN, KERN_PROC, KERN_PROC_PID, process, sizeof(struct kinfo_proc),
-      0};
-
-  if (sysctl(mib, arraysize(mib), NULL, &len, NULL, 0) == -1)
-    return FilePath();
-  mib[5] = (len / sizeof(struct kinfo_proc));
-  if (sysctl(mib, arraysize(mib), &kp, &len, NULL, 0) < 0)
-    return FilePath();
-  if ((kp.p_flag & P_SYSTEM) != 0)
-    return FilePath();
-  if (strcmp(kp.p_comm, "chrome") == 0)
-    return FilePath(kp.p_comm);
-
-  return FilePath();
-}
-
-}  // namespace base
diff --git a/base/process/process_handle_posix.cc b/base/process/process_handle_posix.cc
deleted file mode 100644
index 4e332df..0000000
--- a/base/process/process_handle_posix.cc
+++ /dev/null
@@ -1,23 +0,0 @@
-// 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/process_handle.h"
-
-#include <unistd.h>
-
-namespace base {
-
-ProcessId GetCurrentProcId() {
-  return getpid();
-}
-
-ProcessHandle GetCurrentProcessHandle() {
-  return GetCurrentProcId();
-}
-
-ProcessId GetProcId(ProcessHandle process) {
-  return process;
-}
-
-}  // namespace base
diff --git a/base/process/process_handle_win.cc b/base/process/process_handle_win.cc
deleted file mode 100644
index cf7ab2c..0000000
--- a/base/process/process_handle_win.cc
+++ /dev/null
@@ -1,47 +0,0 @@
-// 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/process_handle.h"
-
-#include <windows.h>
-
-#include <tlhelp32.h>
-
-#include "base/win/scoped_handle.h"
-#include "base/win/windows_version.h"
-
-namespace base {
-
-ProcessId GetCurrentProcId() {
-  return ::GetCurrentProcessId();
-}
-
-ProcessHandle GetCurrentProcessHandle() {
-  return ::GetCurrentProcess();
-}
-
-ProcessId GetProcId(ProcessHandle process) {
-  // This returns 0 if we have insufficient rights to query the process handle.
-  return GetProcessId(process);
-}
-
-ProcessId GetParentProcessId(ProcessHandle process) {
-  ProcessId child_pid = GetProcId(process);
-  PROCESSENTRY32 process_entry;
-  process_entry.dwSize = sizeof(PROCESSENTRY32);
-
-  win::ScopedHandle snapshot(CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0));
-  if (snapshot.IsValid() && Process32First(snapshot.Get(), &process_entry)) {
-    do {
-      if (process_entry.th32ProcessID == child_pid)
-        return process_entry.th32ParentProcessID;
-    } while (Process32Next(snapshot.Get(), &process_entry));
-  }
-
-  // TODO(zijiehe): To match other platforms, -1 (UINT32_MAX) should be returned
-  // if |child_id| cannot be found in the |snapshot|.
-  return 0u;
-}
-
-}  // namespace base
diff --git a/base/process/process_info.h b/base/process/process_info.h
deleted file mode 100644
index 291ad9d..0000000
--- a/base/process/process_info.h
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright (c) 2012 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.
-
-#ifndef BASE_PROCESS_PROCESS_INFO_H_
-#define BASE_PROCESS_PROCESS_INFO_H_
-
-#include "build_config.h"
-
-namespace base {
-
-class Time;
-
-// Vends information about the current process.
-class CurrentProcessInfo {
- public:
-  // Returns the time at which the process was launched. May be empty if an
-  // error occurred retrieving the information.
-  static const Time CreationTime();
-};
-
-#if defined(OS_WIN)
-enum IntegrityLevel {
-  INTEGRITY_UNKNOWN,
-  LOW_INTEGRITY,
-  MEDIUM_INTEGRITY,
-  HIGH_INTEGRITY,
-};
-
-// Returns the integrity level of the process. Returns INTEGRITY_UNKNOWN in the
-// case of an underlying system failure.
-IntegrityLevel GetCurrentProcessIntegrityLevel();
-
-// Determines whether the current process is elevated.
-bool IsCurrentProcessElevated();
-
-#endif  // defined(OS_WIN)
-
-}  // namespace base
-
-#endif  // BASE_PROCESS_PROCESS_INFO_H_
diff --git a/base/process/process_info_linux.cc b/base/process/process_info_linux.cc
deleted file mode 100644
index 2f22748..0000000
--- a/base/process/process_info_linux.cc
+++ /dev/null
@@ -1,29 +0,0 @@
-// Copyright 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/process_info.h"
-
-#include <stdint.h>
-
-#include "base/logging.h"
-#include "base/process/internal_linux.h"
-#include "base/process/process_handle.h"
-#include "base/time/time.h"
-
-namespace base {
-
-// static
-const Time CurrentProcessInfo::CreationTime() {
-  int64_t start_ticks =
-      internal::ReadProcSelfStatsAndGetFieldAsInt64(internal::VM_STARTTIME);
-  if (!start_ticks)
-    return Time();
-  TimeDelta start_offset = internal::ClockTicksToTimeDelta(start_ticks);
-  Time boot_time = internal::GetBootTime();
-  if (boot_time.is_null())
-    return Time();
-  return Time(boot_time + start_offset);
-}
-
-}  // namespace base
diff --git a/base/process/process_info_mac.cc b/base/process/process_info_mac.cc
deleted file mode 100644
index 3083e53..0000000
--- a/base/process/process_info_mac.cc
+++ /dev/null
@@ -1,34 +0,0 @@
-// Copyright (c) 2012 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/process_info.h"
-
-#include <stddef.h>
-#include <sys/sysctl.h>
-#include <sys/time.h>
-#include <unistd.h>
-
-#include <memory>
-
-#include "base/macros.h"
-#include "base/memory/free_deleter.h"
-#include "base/time/time.h"
-
-namespace base {
-
-// static
-const Time CurrentProcessInfo::CreationTime() {
-  int mib[] = {CTL_KERN, KERN_PROC, KERN_PROC_PID, getpid()};
-  size_t len = 0;
-  if (sysctl(mib, arraysize(mib), NULL, &len, NULL, 0) < 0)
-    return Time();
-
-  std::unique_ptr<struct kinfo_proc, base::FreeDeleter> proc(
-      static_cast<struct kinfo_proc*>(malloc(len)));
-  if (sysctl(mib, arraysize(mib), proc.get(), &len, NULL, 0) < 0)
-    return Time();
-  return Time::FromTimeVal(proc->kp_proc.p_un.__p_starttime);
-}
-
-}  // namespace base
diff --git a/base/process/process_info_win.cc b/base/process/process_info_win.cc
deleted file mode 100644
index 23e93e3..0000000
--- a/base/process/process_info_win.cc
+++ /dev/null
@@ -1,94 +0,0 @@
-// Copyright (c) 2012 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/process_info.h"
-
-#include <windows.h>
-#include <memory>
-
-#include "base/logging.h"
-#include "base/memory/ptr_util.h"
-#include "base/time/time.h"
-#include "base/win/scoped_handle.h"
-
-namespace base {
-
-namespace {
-
-HANDLE GetCurrentProcessToken() {
-  HANDLE process_token;
-  OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &process_token);
-  DCHECK(process_token != NULL && process_token != INVALID_HANDLE_VALUE);
-  return process_token;
-}
-
-}  // namespace
-
-// static
-const Time CurrentProcessInfo::CreationTime() {
-  FILETIME creation_time = {};
-  FILETIME ignore1 = {};
-  FILETIME ignore2 = {};
-  FILETIME ignore3 = {};
-  if (!::GetProcessTimes(::GetCurrentProcess(), &creation_time, &ignore1,
-                         &ignore2, &ignore3)) {
-    return Time();
-  }
-  return Time::FromFileTime(creation_time);
-}
-
-IntegrityLevel GetCurrentProcessIntegrityLevel() {
-  HANDLE process_token(GetCurrentProcessToken());
-
-  DWORD token_info_length = 0;
-  if (::GetTokenInformation(process_token, TokenIntegrityLevel, nullptr, 0,
-                            &token_info_length) ||
-      ::GetLastError() != ERROR_INSUFFICIENT_BUFFER) {
-    return INTEGRITY_UNKNOWN;
-  }
-
-  auto token_label_bytes = std::make_unique<char[]>(token_info_length);
-  TOKEN_MANDATORY_LABEL* token_label =
-      reinterpret_cast<TOKEN_MANDATORY_LABEL*>(token_label_bytes.get());
-  if (!::GetTokenInformation(process_token, TokenIntegrityLevel, token_label,
-                             token_info_length, &token_info_length)) {
-    return INTEGRITY_UNKNOWN;
-  }
-
-  DWORD integrity_level = *::GetSidSubAuthority(
-      token_label->Label.Sid,
-      static_cast<DWORD>(*::GetSidSubAuthorityCount(token_label->Label.Sid) -
-                         1));
-
-  if (integrity_level < SECURITY_MANDATORY_MEDIUM_RID)
-    return LOW_INTEGRITY;
-
-  if (integrity_level >= SECURITY_MANDATORY_MEDIUM_RID &&
-      integrity_level < SECURITY_MANDATORY_HIGH_RID) {
-    return MEDIUM_INTEGRITY;
-  }
-
-  if (integrity_level >= SECURITY_MANDATORY_HIGH_RID)
-    return HIGH_INTEGRITY;
-
-  NOTREACHED();
-  return INTEGRITY_UNKNOWN;
-}
-
-bool IsCurrentProcessElevated() {
-  HANDLE process_token(GetCurrentProcessToken());
-
-  // Unlike TOKEN_ELEVATION_TYPE which returns TokenElevationTypeDefault when
-  // UAC is turned off, TOKEN_ELEVATION returns whether the process is elevated.
-  DWORD size;
-  TOKEN_ELEVATION elevation;
-  if (!GetTokenInformation(process_token, TokenElevation, &elevation,
-                           sizeof(elevation), &size)) {
-    PLOG(ERROR) << "GetTokenInformation() failed";
-    return false;
-  }
-  return !!elevation.TokenIsElevated;
-}
-
-}  // namespace base
diff --git a/base/process/process_iterator.cc b/base/process/process_iterator.cc
deleted file mode 100644
index e56b349..0000000
--- a/base/process/process_iterator.cc
+++ /dev/null
@@ -1,54 +0,0 @@
-// 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/process_iterator.h"
-#include "build_config.h"
-
-namespace base {
-
-#if defined(OS_POSIX) || defined(OS_FUCHSIA)
-ProcessEntry::ProcessEntry() : pid_(0), ppid_(0), gid_(0) {}
-ProcessEntry::ProcessEntry(const ProcessEntry& other) = default;
-ProcessEntry::~ProcessEntry() = default;
-#endif
-
-const ProcessEntry* ProcessIterator::NextProcessEntry() {
-  bool result = false;
-  do {
-    result = CheckForNextProcess();
-  } while (result && !IncludeEntry());
-  if (result)
-    return &entry_;
-  return nullptr;
-}
-
-ProcessIterator::ProcessEntries ProcessIterator::Snapshot() {
-  ProcessEntries found;
-  while (const ProcessEntry* process_entry = NextProcessEntry()) {
-    found.push_back(*process_entry);
-  }
-  return found;
-}
-
-bool ProcessIterator::IncludeEntry() {
-  return !filter_ || filter_->Includes(entry_);
-}
-
-NamedProcessIterator::NamedProcessIterator(
-    const FilePath::StringType& executable_name,
-    const ProcessFilter* filter)
-    : ProcessIterator(filter), executable_name_(executable_name) {}
-
-NamedProcessIterator::~NamedProcessIterator() = default;
-
-int GetProcessCount(const FilePath::StringType& executable_name,
-                    const ProcessFilter* filter) {
-  int count = 0;
-  NamedProcessIterator iter(executable_name, filter);
-  while (iter.NextProcessEntry())
-    ++count;
-  return count;
-}
-
-}  // namespace base
diff --git a/base/process/process_iterator.h b/base/process/process_iterator.h
deleted file mode 100644
index b0d96e4..0000000
--- a/base/process/process_iterator.h
+++ /dev/null
@@ -1,149 +0,0 @@
-// 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.
-
-// This file contains methods to iterate over processes on the system.
-
-#ifndef BASE_PROCESS_PROCESS_ITERATOR_H_
-#define BASE_PROCESS_PROCESS_ITERATOR_H_
-
-#include <stddef.h>
-
-#include <list>
-#include <string>
-#include <vector>
-
-#include "base/files/file_path.h"
-#include "base/macros.h"
-#include "base/process/process.h"
-#include "build_config.h"
-
-#if defined(OS_WIN)
-#include <windows.h>
-
-#include <tlhelp32.h>
-#elif defined(OS_MACOSX) || defined(OS_OPENBSD)
-#include <sys/sysctl.h>
-#elif defined(OS_POSIX) || defined(OS_FUCHSIA)
-#include <dirent.h>
-#endif
-
-namespace base {
-
-#if defined(OS_WIN)
-struct ProcessEntry : public PROCESSENTRY32 {
-  ProcessId pid() const { return th32ProcessID; }
-  ProcessId parent_pid() const { return th32ParentProcessID; }
-  const wchar_t* exe_file() const { return szExeFile; }
-};
-#elif defined(OS_POSIX) || defined(OS_FUCHSIA)
-struct ProcessEntry {
-  ProcessEntry();
-  ProcessEntry(const ProcessEntry& other);
-  ~ProcessEntry();
-
-  ProcessId pid() const { return pid_; }
-  ProcessId parent_pid() const { return ppid_; }
-  ProcessId gid() const { return gid_; }
-  const char* exe_file() const { return exe_file_.c_str(); }
-  const std::vector<std::string>& cmd_line_args() const {
-    return cmd_line_args_;
-  }
-
-  ProcessId pid_;
-  ProcessId ppid_;
-  ProcessId gid_;
-  std::string exe_file_;
-  std::vector<std::string> cmd_line_args_;
-};
-#endif  // defined(OS_WIN)
-
-// Used to filter processes by process ID.
-class ProcessFilter {
- public:
-  // Returns true to indicate set-inclusion and false otherwise.  This method
-  // should not have side-effects and should be idempotent.
-  virtual bool Includes(const ProcessEntry& entry) const = 0;
-
- protected:
-  virtual ~ProcessFilter() = default;
-};
-
-// This class provides a way to iterate through a list of processes on the
-// current machine with a specified filter.
-// To use, create an instance and then call NextProcessEntry() until it returns
-// false.
-class ProcessIterator {
- public:
-  typedef std::list<ProcessEntry> ProcessEntries;
-
-  explicit ProcessIterator(const ProcessFilter* filter);
-  virtual ~ProcessIterator();
-
-  // If there's another process that matches the given executable name,
-  // returns a const pointer to the corresponding PROCESSENTRY32.
-  // If there are no more matching processes, returns NULL.
-  // The returned pointer will remain valid until NextProcessEntry()
-  // is called again or this NamedProcessIterator goes out of scope.
-  const ProcessEntry* NextProcessEntry();
-
-  // Takes a snapshot of all the ProcessEntry found.
-  ProcessEntries Snapshot();
-
- protected:
-  virtual bool IncludeEntry();
-  const ProcessEntry& entry() { return entry_; }
-
- private:
-  // Determines whether there's another process (regardless of executable)
-  // left in the list of all processes.  Returns true and sets entry_ to
-  // that process's info if there is one, false otherwise.
-  bool CheckForNextProcess();
-
-  // Initializes a PROCESSENTRY32 data structure so that it's ready for
-  // use with Process32First/Process32Next.
-  void InitProcessEntry(ProcessEntry* entry);
-
-#if defined(OS_WIN)
-  HANDLE snapshot_;
-  bool started_iteration_;
-#elif defined(OS_MACOSX) || defined(OS_BSD)
-  std::vector<kinfo_proc> kinfo_procs_;
-  size_t index_of_kinfo_proc_;
-#elif defined(OS_POSIX) || defined(OS_FUCHSIA)
-  DIR* procfs_dir_;
-#endif
-  ProcessEntry entry_;
-  const ProcessFilter* filter_;
-
-  DISALLOW_COPY_AND_ASSIGN(ProcessIterator);
-};
-
-// This class provides a way to iterate through the list of processes
-// on the current machine that were started from the given executable
-// name.  To use, create an instance and then call NextProcessEntry()
-// until it returns false.
-class NamedProcessIterator : public ProcessIterator {
- public:
-  NamedProcessIterator(const FilePath::StringType& executable_name,
-                       const ProcessFilter* filter);
-  ~NamedProcessIterator() override;
-
- protected:
-  bool IncludeEntry() override;
-
- private:
-  FilePath::StringType executable_name_;
-
-  DISALLOW_COPY_AND_ASSIGN(NamedProcessIterator);
-};
-
-// Returns the number of processes on the machine that are running from the
-// given executable name.  If filter is non-null, then only processes selected
-// by the filter will be counted.
-int GetProcessCount(const FilePath::StringType& executable_name,
-                    const ProcessFilter* filter);
-
-}  // namespace base
-
-#endif  // BASE_PROCESS_PROCESS_ITERATOR_H_
diff --git a/base/process/process_iterator_freebsd.cc b/base/process/process_iterator_freebsd.cc
deleted file mode 100644
index a69b2f0..0000000
--- a/base/process/process_iterator_freebsd.cc
+++ /dev/null
@@ -1,128 +0,0 @@
-// 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/process_iterator.h"
-
-#include <errno.h>
-#include <stddef.h>
-#include <sys/sysctl.h>
-#include <sys/types.h>
-#include <unistd.h>
-
-#include "base/logging.h"
-#include "base/macros.h"
-#include "base/strings/string_split.h"
-#include "base/strings/string_util.h"
-
-namespace base {
-
-ProcessIterator::ProcessIterator(const ProcessFilter* filter)
-    : index_of_kinfo_proc_(), filter_(filter) {
-  int mib[] = {CTL_KERN, KERN_PROC, KERN_PROC_UID, getuid()};
-
-  bool done = false;
-  int try_num = 1;
-  const int max_tries = 10;
-
-  do {
-    size_t len = 0;
-    if (sysctl(mib, arraysize(mib), NULL, &len, NULL, 0) < 0) {
-      LOG(ERROR) << "failed to get the size needed for the process list";
-      kinfo_procs_.resize(0);
-      done = true;
-    } else {
-      size_t num_of_kinfo_proc = len / sizeof(struct kinfo_proc);
-      // Leave some spare room for process table growth (more could show up
-      // between when we check and now)
-      num_of_kinfo_proc += 16;
-      kinfo_procs_.resize(num_of_kinfo_proc);
-      len = num_of_kinfo_proc * sizeof(struct kinfo_proc);
-      if (sysctl(mib, arraysize(mib), &kinfo_procs_[0], &len, NULL, 0) < 0) {
-        // If we get a mem error, it just means we need a bigger buffer, so
-        // loop around again.  Anything else is a real error and give up.
-        if (errno != ENOMEM) {
-          LOG(ERROR) << "failed to get the process list";
-          kinfo_procs_.resize(0);
-          done = true;
-        }
-      } else {
-        // Got the list, just make sure we're sized exactly right
-        size_t num_of_kinfo_proc = len / sizeof(struct kinfo_proc);
-        kinfo_procs_.resize(num_of_kinfo_proc);
-        done = true;
-      }
-    }
-  } while (!done && (try_num++ < max_tries));
-
-  if (!done) {
-    LOG(ERROR) << "failed to collect the process list in a few tries";
-    kinfo_procs_.resize(0);
-  }
-}
-
-ProcessIterator::~ProcessIterator() {}
-
-bool ProcessIterator::CheckForNextProcess() {
-  std::string data;
-
-  for (; index_of_kinfo_proc_ < kinfo_procs_.size(); ++index_of_kinfo_proc_) {
-    size_t length;
-    struct kinfo_proc kinfo = kinfo_procs_[index_of_kinfo_proc_];
-    int mib[] = {CTL_KERN, KERN_PROC_ARGS, kinfo.ki_pid};
-
-    if ((kinfo.ki_pid > 0) && (kinfo.ki_stat == SZOMB))
-      continue;
-
-    length = 0;
-    if (sysctl(mib, arraysize(mib), NULL, &length, NULL, 0) < 0) {
-      LOG(ERROR) << "failed to figure out the buffer size for a command line";
-      continue;
-    }
-
-    data.resize(length);
-
-    if (sysctl(mib, arraysize(mib), &data[0], &length, NULL, 0) < 0) {
-      LOG(ERROR) << "failed to fetch a commandline";
-      continue;
-    }
-
-    std::string delimiters;
-    delimiters.push_back('\0');
-    entry_.cmd_line_args_ =
-        SplitString(data, delimiters, KEEP_WHITESPACE, SPLIT_WANT_NONEMPTY);
-
-    size_t exec_name_end = data.find('\0');
-    if (exec_name_end == std::string::npos) {
-      LOG(ERROR) << "command line data didn't match expected format";
-      continue;
-    }
-
-    entry_.pid_ = kinfo.ki_pid;
-    entry_.ppid_ = kinfo.ki_ppid;
-    entry_.gid_ = kinfo.ki_pgid;
-
-    size_t last_slash = data.rfind('/', exec_name_end);
-    if (last_slash == std::string::npos) {
-      entry_.exe_file_.assign(data, 0, exec_name_end);
-    } else {
-      entry_.exe_file_.assign(data, last_slash + 1,
-                              exec_name_end - last_slash - 1);
-    }
-
-    // Start w/ the next entry next time through
-    ++index_of_kinfo_proc_;
-
-    return true;
-  }
-  return false;
-}
-
-bool NamedProcessIterator::IncludeEntry() {
-  if (executable_name_ != entry().exe_file())
-    return false;
-
-  return ProcessIterator::IncludeEntry();
-}
-
-}  // namespace base
diff --git a/base/process/process_iterator_linux.cc b/base/process/process_iterator_linux.cc
deleted file mode 100644
index 9894052..0000000
--- a/base/process/process_iterator_linux.cc
+++ /dev/null
@@ -1,147 +0,0 @@
-// 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/process_iterator.h"
-
-#include <stddef.h>
-
-#include "base/files/file_util.h"
-#include "base/logging.h"
-#include "base/process/internal_linux.h"
-#include "base/strings/string_split.h"
-#include "base/strings/string_util.h"
-
-namespace base {
-
-namespace {
-
-// Reads the |field_num|th field from |proc_stats|.
-// Returns an empty string on failure.
-// This version only handles VM_COMM and VM_STATE, which are the only fields
-// that are strings.
-std::string GetProcStatsFieldAsString(
-    const std::vector<std::string>& proc_stats,
-    internal::ProcStatsFields field_num) {
-  if (field_num < internal::VM_COMM || field_num > internal::VM_STATE) {
-    NOTREACHED();
-    return std::string();
-  }
-
-  if (proc_stats.size() > static_cast<size_t>(field_num))
-    return proc_stats[field_num];
-
-  NOTREACHED();
-  return nullptr;
-}
-
-// Reads /proc/<pid>/cmdline and populates |proc_cmd_line_args| with the command
-// line arguments. Returns true if successful.
-// Note: /proc/<pid>/cmdline contains command line arguments separated by single
-// null characters. We tokenize it into a vector of strings using '\0' as a
-// delimiter.
-bool GetProcCmdline(pid_t pid, std::vector<std::string>* proc_cmd_line_args) {
-  FilePath cmd_line_file = internal::GetProcPidDir(pid).Append("cmdline");
-  std::string cmd_line;
-  if (!ReadFileToString(cmd_line_file, &cmd_line))
-    return false;
-  std::string delimiters;
-  delimiters.push_back('\0');
-  *proc_cmd_line_args =
-      SplitString(cmd_line, delimiters, KEEP_WHITESPACE, SPLIT_WANT_NONEMPTY);
-  return true;
-}
-
-}  // namespace
-
-ProcessIterator::ProcessIterator(const ProcessFilter* filter)
-    : filter_(filter) {
-  procfs_dir_ = opendir(internal::kProcDir);
-  if (!procfs_dir_) {
-    // On Android, SELinux may prevent reading /proc. See
-    // https://crbug.com/581517 for details.
-    PLOG(ERROR) << "opendir " << internal::kProcDir;
-  }
-}
-
-ProcessIterator::~ProcessIterator() {
-  if (procfs_dir_) {
-    closedir(procfs_dir_);
-    procfs_dir_ = nullptr;
-  }
-}
-
-bool ProcessIterator::CheckForNextProcess() {
-  // TODO(port): skip processes owned by different UID
-
-  if (!procfs_dir_) {
-    DLOG(ERROR) << "Skipping CheckForNextProcess(), no procfs_dir_";
-    return false;
-  }
-
-  pid_t pid = kNullProcessId;
-  std::vector<std::string> cmd_line_args;
-  std::string stats_data;
-  std::vector<std::string> proc_stats;
-
-  // Arbitrarily guess that there will never be more than 200 non-process
-  // files in /proc.  Hardy has 53 and Lucid has 61.
-  int skipped = 0;
-  const int kSkipLimit = 200;
-  while (skipped < kSkipLimit) {
-    dirent* slot = readdir(procfs_dir_);
-    // all done looking through /proc?
-    if (!slot)
-      return false;
-
-    // If not a process, keep looking for one.
-    pid = internal::ProcDirSlotToPid(slot->d_name);
-    if (!pid) {
-      skipped++;
-      continue;
-    }
-
-    if (!GetProcCmdline(pid, &cmd_line_args))
-      continue;
-
-    if (!internal::ReadProcStats(pid, &stats_data))
-      continue;
-    if (!internal::ParseProcStats(stats_data, &proc_stats))
-      continue;
-
-    std::string runstate =
-        GetProcStatsFieldAsString(proc_stats, internal::VM_STATE);
-    if (runstate.size() != 1) {
-      NOTREACHED();
-      continue;
-    }
-
-    // Is the process in 'Zombie' state, i.e. dead but waiting to be reaped?
-    // Allowed values: D R S T Z
-    if (runstate[0] != 'Z')
-      break;
-
-    // Nope, it's a zombie; somebody isn't cleaning up after their children.
-    // (e.g. WaitForProcessesToExit doesn't clean up after dead children yet.)
-    // There could be a lot of zombies, can't really decrement i here.
-  }
-  if (skipped >= kSkipLimit) {
-    NOTREACHED();
-    return false;
-  }
-
-  entry_.pid_ = pid;
-  entry_.ppid_ = GetProcStatsFieldAsInt64(proc_stats, internal::VM_PPID);
-  entry_.gid_ = GetProcStatsFieldAsInt64(proc_stats, internal::VM_PGRP);
-  entry_.cmd_line_args_.assign(cmd_line_args.begin(), cmd_line_args.end());
-  entry_.exe_file_ = GetProcessExecutablePath(pid).BaseName().value();
-  return true;
-}
-
-bool NamedProcessIterator::IncludeEntry() {
-  if (executable_name_ != entry().exe_file())
-    return false;
-  return ProcessIterator::IncludeEntry();
-}
-
-}  // namespace base
diff --git a/base/process/process_iterator_mac.cc b/base/process/process_iterator_mac.cc
deleted file mode 100644
index 10d712b..0000000
--- a/base/process/process_iterator_mac.cc
+++ /dev/null
@@ -1,134 +0,0 @@
-// 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/process_iterator.h"
-
-#include <errno.h>
-#include <stddef.h>
-#include <sys/sysctl.h>
-#include <sys/types.h>
-#include <unistd.h>
-
-#include "base/logging.h"
-#include "base/macros.h"
-#include "base/strings/string_split.h"
-#include "base/strings/string_util.h"
-
-namespace base {
-
-ProcessIterator::ProcessIterator(const ProcessFilter* filter)
-    : index_of_kinfo_proc_(0), filter_(filter) {
-  // Get a snapshot of all of my processes (yes, as we loop it can go stale, but
-  // but trying to find where we were in a constantly changing list is basically
-  // impossible.
-
-  int mib[] = {CTL_KERN, KERN_PROC, KERN_PROC_UID, static_cast<int>(geteuid())};
-
-  // Since more processes could start between when we get the size and when
-  // we get the list, we do a loop to keep trying until we get it.
-  bool done = false;
-  int try_num = 1;
-  const int max_tries = 10;
-  do {
-    // Get the size of the buffer
-    size_t len = 0;
-    if (sysctl(mib, arraysize(mib), NULL, &len, NULL, 0) < 0) {
-      DLOG(ERROR) << "failed to get the size needed for the process list";
-      kinfo_procs_.resize(0);
-      done = true;
-    } else {
-      size_t num_of_kinfo_proc = len / sizeof(struct kinfo_proc);
-      // Leave some spare room for process table growth (more could show up
-      // between when we check and now)
-      num_of_kinfo_proc += 16;
-      kinfo_procs_.resize(num_of_kinfo_proc);
-      len = num_of_kinfo_proc * sizeof(struct kinfo_proc);
-      // Load the list of processes
-      if (sysctl(mib, arraysize(mib), &kinfo_procs_[0], &len, NULL, 0) < 0) {
-        // If we get a mem error, it just means we need a bigger buffer, so
-        // loop around again.  Anything else is a real error and give up.
-        if (errno != ENOMEM) {
-          DLOG(ERROR) << "failed to get the process list";
-          kinfo_procs_.resize(0);
-          done = true;
-        }
-      } else {
-        // Got the list, just make sure we're sized exactly right
-        kinfo_procs_.resize(len / sizeof(struct kinfo_proc));
-        done = true;
-      }
-    }
-  } while (!done && (try_num++ < max_tries));
-
-  if (!done) {
-    DLOG(ERROR) << "failed to collect the process list in a few tries";
-    kinfo_procs_.resize(0);
-  }
-}
-
-ProcessIterator::~ProcessIterator() {}
-
-bool ProcessIterator::CheckForNextProcess() {
-  std::string data;
-  for (; index_of_kinfo_proc_ < kinfo_procs_.size(); ++index_of_kinfo_proc_) {
-    kinfo_proc& kinfo = kinfo_procs_[index_of_kinfo_proc_];
-
-    // Skip processes just awaiting collection
-    if ((kinfo.kp_proc.p_pid > 0) && (kinfo.kp_proc.p_stat == SZOMB))
-      continue;
-
-    int mib[] = {CTL_KERN, KERN_PROCARGS, kinfo.kp_proc.p_pid};
-
-    // Find out what size buffer we need.
-    size_t data_len = 0;
-    if (sysctl(mib, arraysize(mib), NULL, &data_len, NULL, 0) < 0) {
-      continue;
-    }
-
-    data.resize(data_len);
-    if (sysctl(mib, arraysize(mib), &data[0], &data_len, NULL, 0) < 0) {
-      continue;
-    }
-
-    // |data| contains all the command line parameters of the process, separated
-    // by blocks of one or more null characters. We tokenize |data| into a
-    // vector of strings using '\0' as a delimiter and populate
-    // |entry_.cmd_line_args_|.
-    std::string delimiters;
-    delimiters.push_back('\0');
-    entry_.cmd_line_args_ =
-        SplitString(data, delimiters, KEEP_WHITESPACE, SPLIT_WANT_NONEMPTY);
-
-    // |data| starts with the full executable path followed by a null character.
-    // We search for the first instance of '\0' and extract everything before it
-    // to populate |entry_.exe_file_|.
-    size_t exec_name_end = data.find('\0');
-    if (exec_name_end == std::string::npos) {
-      DLOG(ERROR) << "command line data didn't match expected format";
-      continue;
-    }
-
-    entry_.pid_ = kinfo.kp_proc.p_pid;
-    entry_.ppid_ = kinfo.kp_eproc.e_ppid;
-    entry_.gid_ = kinfo.kp_eproc.e_pgid;
-    size_t last_slash = data.rfind('/', exec_name_end);
-    if (last_slash == std::string::npos)
-      entry_.exe_file_.assign(data, 0, exec_name_end);
-    else
-      entry_.exe_file_.assign(data, last_slash + 1,
-                              exec_name_end - last_slash - 1);
-    // Start w/ the next entry next time through
-    ++index_of_kinfo_proc_;
-    // Done
-    return true;
-  }
-  return false;
-}
-
-bool NamedProcessIterator::IncludeEntry() {
-  return (executable_name_ == entry().exe_file() &&
-          ProcessIterator::IncludeEntry());
-}
-
-}  // namespace base
diff --git a/base/process/process_iterator_openbsd.cc b/base/process/process_iterator_openbsd.cc
deleted file mode 100644
index 4362c9a..0000000
--- a/base/process/process_iterator_openbsd.cc
+++ /dev/null
@@ -1,128 +0,0 @@
-// 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/process_iterator.h"
-
-#include <errno.h>
-#include <stddef.h>
-#include <sys/sysctl.h>
-
-#include "base/logging.h"
-#include "base/macros.h"
-#include "base/strings/string_split.h"
-#include "base/strings/string_util.h"
-
-namespace base {
-
-ProcessIterator::ProcessIterator(const ProcessFilter* filter)
-    : index_of_kinfo_proc_(), filter_(filter) {
-  int mib[] = {
-      CTL_KERN, KERN_PROC, KERN_PROC_UID, getuid(), sizeof(struct kinfo_proc),
-      0};
-
-  bool done = false;
-  int try_num = 1;
-  const int max_tries = 10;
-
-  do {
-    size_t len = 0;
-    if (sysctl(mib, arraysize(mib), NULL, &len, NULL, 0) < 0) {
-      DLOG(ERROR) << "failed to get the size needed for the process list";
-      kinfo_procs_.resize(0);
-      done = true;
-    } else {
-      size_t num_of_kinfo_proc = len / sizeof(struct kinfo_proc);
-      // Leave some spare room for process table growth (more could show up
-      // between when we check and now)
-      num_of_kinfo_proc += 16;
-      kinfo_procs_.resize(num_of_kinfo_proc);
-      len = num_of_kinfo_proc * sizeof(struct kinfo_proc);
-      if (sysctl(mib, arraysize(mib), &kinfo_procs_[0], &len, NULL, 0) < 0) {
-        // If we get a mem error, it just means we need a bigger buffer, so
-        // loop around again.  Anything else is a real error and give up.
-        if (errno != ENOMEM) {
-          DLOG(ERROR) << "failed to get the process list";
-          kinfo_procs_.resize(0);
-          done = true;
-        }
-      } else {
-        // Got the list, just make sure we're sized exactly right
-        size_t num_of_kinfo_proc = len / sizeof(struct kinfo_proc);
-        kinfo_procs_.resize(num_of_kinfo_proc);
-        done = true;
-      }
-    }
-  } while (!done && (try_num++ < max_tries));
-
-  if (!done) {
-    DLOG(ERROR) << "failed to collect the process list in a few tries";
-    kinfo_procs_.resize(0);
-  }
-}
-
-ProcessIterator::~ProcessIterator() {}
-
-bool ProcessIterator::CheckForNextProcess() {
-  std::string data;
-  for (; index_of_kinfo_proc_ < kinfo_procs_.size(); ++index_of_kinfo_proc_) {
-    kinfo_proc& kinfo = kinfo_procs_[index_of_kinfo_proc_];
-
-    // Skip processes just awaiting collection
-    if ((kinfo.p_pid > 0) && (kinfo.p_stat == SZOMB))
-      continue;
-
-    int mib[] = {CTL_KERN, KERN_PROC_ARGS, kinfo.p_pid};
-
-    // Find out what size buffer we need.
-    size_t data_len = 0;
-    if (sysctl(mib, arraysize(mib), NULL, &data_len, NULL, 0) < 0) {
-      continue;
-    }
-
-    data.resize(data_len);
-    if (sysctl(mib, arraysize(mib), &data[0], &data_len, NULL, 0) < 0) {
-      continue;
-    }
-
-    // |data| contains all the command line parameters of the process, separated
-    // by blocks of one or more null characters. We tokenize |data| into a
-    // vector of strings using '\0' as a delimiter and populate
-    // |entry_.cmd_line_args_|.
-    std::string delimiters;
-    delimiters.push_back('\0');
-    entry_.cmd_line_args_ =
-        SplitString(data, delimiters, KEEP_WHITESPACE, SPLIT_WANT_NONEMPTY);
-
-    // |data| starts with the full executable path followed by a null character.
-    // We search for the first instance of '\0' and extract everything before it
-    // to populate |entry_.exe_file_|.
-    size_t exec_name_end = data.find('\0');
-    if (exec_name_end == std::string::npos) {
-      DLOG(ERROR) << "command line data didn't match expected format";
-      continue;
-    }
-
-    entry_.pid_ = kinfo.p_pid;
-    entry_.ppid_ = kinfo.p_ppid;
-    entry_.gid_ = kinfo.p__pgid;
-    size_t last_slash = data.rfind('/', exec_name_end);
-    if (last_slash == std::string::npos)
-      entry_.exe_file_.assign(data, 0, exec_name_end);
-    else
-      entry_.exe_file_.assign(data, last_slash + 1,
-                              exec_name_end - last_slash - 1);
-    // Start w/ the next entry next time through
-    ++index_of_kinfo_proc_;
-    // Done
-    return true;
-  }
-  return false;
-}
-
-bool NamedProcessIterator::IncludeEntry() {
-  return (executable_name_ == entry().exe_file() &&
-          ProcessIterator::IncludeEntry());
-}
-
-}  // namespace base
diff --git a/base/process/process_iterator_win.cc b/base/process/process_iterator_win.cc
deleted file mode 100644
index e1bf808..0000000
--- a/base/process/process_iterator_win.cc
+++ /dev/null
@@ -1,40 +0,0 @@
-// 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/process_iterator.h"
-
-namespace base {
-
-ProcessIterator::ProcessIterator(const ProcessFilter* filter)
-    : started_iteration_(false), filter_(filter) {
-  snapshot_ = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
-}
-
-ProcessIterator::~ProcessIterator() {
-  CloseHandle(snapshot_);
-}
-
-bool ProcessIterator::CheckForNextProcess() {
-  InitProcessEntry(&entry_);
-
-  if (!started_iteration_) {
-    started_iteration_ = true;
-    return !!Process32First(snapshot_, &entry_);
-  }
-
-  return !!Process32Next(snapshot_, &entry_);
-}
-
-void ProcessIterator::InitProcessEntry(ProcessEntry* entry) {
-  memset(entry, 0, sizeof(*entry));
-  entry->dwSize = sizeof(*entry);
-}
-
-bool NamedProcessIterator::IncludeEntry() {
-  // Case insensitive.
-  return _wcsicmp(executable_name_.c_str(), entry().exe_file()) == 0 &&
-         ProcessIterator::IncludeEntry();
-}
-
-}  // namespace base
diff --git a/base/process/process_posix.cc b/base/process/process_posix.cc
deleted file mode 100644
index 5c9ce05..0000000
--- a/base/process/process_posix.cc
+++ /dev/null
@@ -1,338 +0,0 @@
-// Copyright 2011 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/process.h"
-
-#include <errno.h>
-#include <signal.h>
-#include <stdint.h>
-#include <sys/resource.h>
-#include <sys/wait.h>
-
-#include "base/files/scoped_file.h"
-#include "base/logging.h"
-#include "base/posix/eintr_wrapper.h"
-#include "base/process/kill.h"
-#include "build_config.h"
-
-#if defined(OS_MACOSX)
-#include <sys/event.h>
-#endif
-
-namespace {
-
-#if !defined(OS_NACL_NONSFI)
-
-bool WaitpidWithTimeout(base::ProcessHandle handle,
-                        int* status,
-                        base::TimeDelta wait) {
-  // This POSIX version of this function only guarantees that we wait no less
-  // than |wait| for the process to exit.  The child process may
-  // exit sometime before the timeout has ended but we may still block for up
-  // to 256 milliseconds after the fact.
-  //
-  // waitpid() has no direct support on POSIX for specifying a timeout, you can
-  // either ask it to block indefinitely or return immediately (WNOHANG).
-  // When a child process terminates a SIGCHLD signal is sent to the parent.
-  // Catching this signal would involve installing a signal handler which may
-  // affect other parts of the application and would be difficult to debug.
-  //
-  // Our strategy is to call waitpid() once up front to check if the process
-  // has already exited, otherwise to loop for |wait|, sleeping for
-  // at most 256 milliseconds each time using usleep() and then calling
-  // waitpid().  The amount of time we sleep starts out at 1 milliseconds, and
-  // we double it every 4 sleep cycles.
-  //
-  // usleep() is speced to exit if a signal is received for which a handler
-  // has been installed.  This means that when a SIGCHLD is sent, it will exit
-  // depending on behavior external to this function.
-  //
-  // This function is used primarily for unit tests, if we want to use it in
-  // the application itself it would probably be best to examine other routes.
-
-  if (wait == base::TimeDelta::Max()) {
-    return HANDLE_EINTR(waitpid(handle, status, 0)) > 0;
-  }
-
-  pid_t ret_pid = HANDLE_EINTR(waitpid(handle, status, WNOHANG));
-  static const int64_t kMaxSleepInMicroseconds = 1 << 18;  // ~256 milliseconds.
-  int64_t max_sleep_time_usecs = 1 << 10;                  // ~1 milliseconds.
-  int64_t double_sleep_time = 0;
-
-  // If the process hasn't exited yet, then sleep and try again.
-  base::TimeTicks wakeup_time = base::TimeTicks::Now() + wait;
-  while (ret_pid == 0) {
-    base::TimeTicks now = base::TimeTicks::Now();
-    if (now > wakeup_time)
-      break;
-    // Guaranteed to be non-negative!
-    int64_t sleep_time_usecs = (wakeup_time - now).InMicroseconds();
-    // Sleep for a bit while we wait for the process to finish.
-    if (sleep_time_usecs > max_sleep_time_usecs)
-      sleep_time_usecs = max_sleep_time_usecs;
-
-    // usleep() will return 0 and set errno to EINTR on receipt of a signal
-    // such as SIGCHLD.
-    usleep(sleep_time_usecs);
-    ret_pid = HANDLE_EINTR(waitpid(handle, status, WNOHANG));
-
-    if ((max_sleep_time_usecs < kMaxSleepInMicroseconds) &&
-        (double_sleep_time++ % 4 == 0)) {
-      max_sleep_time_usecs *= 2;
-    }
-  }
-
-  return ret_pid > 0;
-}
-
-#if defined(OS_MACOSX)
-// Using kqueue on Mac so that we can wait on non-child processes.
-// We can't use kqueues on child processes because we need to reap
-// our own children using wait.
-bool WaitForSingleNonChildProcess(base::ProcessHandle handle,
-                                  base::TimeDelta wait) {
-  DCHECK_GT(handle, 0);
-
-  base::ScopedFD kq(kqueue());
-  if (!kq.is_valid()) {
-    DPLOG(ERROR) << "kqueue";
-    return false;
-  }
-
-  struct kevent change = {0};
-  EV_SET(&change, handle, EVFILT_PROC, EV_ADD, NOTE_EXIT, 0, NULL);
-  int result = HANDLE_EINTR(kevent(kq.get(), &change, 1, NULL, 0, NULL));
-  if (result == -1) {
-    if (errno == ESRCH) {
-      // If the process wasn't found, it must be dead.
-      return true;
-    }
-
-    DPLOG(ERROR) << "kevent (setup " << handle << ")";
-    return false;
-  }
-
-  // Keep track of the elapsed time to be able to restart kevent if it's
-  // interrupted.
-  bool wait_forever = (wait == base::TimeDelta::Max());
-  base::TimeDelta remaining_delta;
-  base::TimeTicks deadline;
-  if (!wait_forever) {
-    remaining_delta = wait;
-    deadline = base::TimeTicks::Now() + remaining_delta;
-  }
-
-  result = -1;
-  struct kevent event = {0};
-
-  do {
-    struct timespec remaining_timespec;
-    struct timespec* remaining_timespec_ptr;
-    if (wait_forever) {
-      remaining_timespec_ptr = NULL;
-    } else {
-      remaining_timespec = remaining_delta.ToTimeSpec();
-      remaining_timespec_ptr = &remaining_timespec;
-    }
-
-    result = kevent(kq.get(), NULL, 0, &event, 1, remaining_timespec_ptr);
-
-    if (result == -1 && errno == EINTR) {
-      if (!wait_forever) {
-        remaining_delta = deadline - base::TimeTicks::Now();
-      }
-      result = 0;
-    } else {
-      break;
-    }
-  } while (wait_forever || remaining_delta > base::TimeDelta());
-
-  if (result < 0) {
-    DPLOG(ERROR) << "kevent (wait " << handle << ")";
-    return false;
-  } else if (result > 1) {
-    DLOG(ERROR) << "kevent (wait " << handle << "): unexpected result "
-                << result;
-    return false;
-  } else if (result == 0) {
-    // Timed out.
-    return false;
-  }
-
-  DCHECK_EQ(result, 1);
-
-  if (event.filter != EVFILT_PROC || (event.fflags & NOTE_EXIT) == 0 ||
-      event.ident != static_cast<uintptr_t>(handle)) {
-    DLOG(ERROR) << "kevent (wait " << handle
-                << "): unexpected event: filter=" << event.filter
-                << ", fflags=" << event.fflags << ", ident=" << event.ident;
-    return false;
-  }
-
-  return true;
-}
-#endif  // OS_MACOSX
-
-bool WaitForExitWithTimeoutImpl(base::ProcessHandle handle,
-                                int* exit_code,
-                                base::TimeDelta timeout) {
-  const base::ProcessHandle our_pid = base::GetCurrentProcessHandle();
-  if (handle == our_pid) {
-    // We won't be able to wait for ourselves to exit.
-    return false;
-  }
-
-  const base::ProcessHandle parent_pid = base::GetParentProcessId(handle);
-  const bool exited = (parent_pid < 0);
-
-  if (!exited && parent_pid != our_pid) {
-#if defined(OS_MACOSX)
-    // On Mac we can wait on non child processes.
-    return WaitForSingleNonChildProcess(handle, timeout);
-#else
-    // Currently on Linux we can't handle non child processes.
-    NOTIMPLEMENTED();
-#endif  // OS_MACOSX
-  }
-
-  int status;
-  if (!WaitpidWithTimeout(handle, &status, timeout)) {
-    // If multiple threads wait on the same |handle| then one wait will succeed
-    // and the other will fail with errno set to ECHILD.
-    return exited || (errno == ECHILD);
-  }
-  if (WIFSIGNALED(status)) {
-    if (exit_code)
-      *exit_code = -1;
-    return true;
-  }
-  if (WIFEXITED(status)) {
-    if (exit_code)
-      *exit_code = WEXITSTATUS(status);
-    return true;
-  }
-  return exited;
-}
-#endif  // !defined(OS_NACL_NONSFI)
-
-}  // namespace
-
-namespace base {
-
-Process::Process(ProcessHandle handle) : process_(handle) {}
-
-Process::~Process() = default;
-
-Process::Process(Process&& other) : process_(other.process_) {
-  other.Close();
-}
-
-Process& Process::operator=(Process&& other) {
-  process_ = other.process_;
-  other.Close();
-  return *this;
-}
-
-// static
-Process Process::Current() {
-  return Process(GetCurrentProcessHandle());
-}
-
-// static
-Process Process::Open(ProcessId pid) {
-  if (pid == GetCurrentProcId())
-    return Current();
-
-  // On POSIX process handles are the same as PIDs.
-  return Process(pid);
-}
-
-// static
-Process Process::OpenWithExtraPrivileges(ProcessId pid) {
-  // On POSIX there are no privileges to set.
-  return Open(pid);
-}
-
-// static
-void Process::TerminateCurrentProcessImmediately(int exit_code) {
-  _exit(exit_code);
-}
-
-bool Process::IsValid() const {
-  return process_ != kNullProcessHandle;
-}
-
-ProcessHandle Process::Handle() const {
-  return process_;
-}
-
-Process Process::Duplicate() const {
-  if (is_current())
-    return Current();
-
-  return Process(process_);
-}
-
-ProcessId Process::Pid() const {
-  DCHECK(IsValid());
-  return GetProcId(process_);
-}
-
-bool Process::is_current() const {
-  return process_ == GetCurrentProcessHandle();
-}
-
-void Process::Close() {
-  process_ = kNullProcessHandle;
-  // if the process wasn't terminated (so we waited) or the state
-  // wasn't already collected w/ a wait from process_utils, we're gonna
-  // end up w/ a zombie when it does finally exit.
-}
-
-#if !defined(OS_NACL_NONSFI)
-bool Process::Terminate(int exit_code, bool wait) const {
-  // exit_code isn't supportable.
-  DCHECK(IsValid());
-  CHECK_GT(process_, 0);
-
-  bool did_terminate = kill(process_, SIGTERM) == 0;
-
-  if (wait && did_terminate) {
-    if (WaitForExitWithTimeout(TimeDelta::FromSeconds(60), nullptr))
-      return true;
-    did_terminate = kill(process_, SIGKILL) == 0;
-    if (did_terminate)
-      return WaitForExit(nullptr);
-  }
-
-  if (!did_terminate)
-    DPLOG(ERROR) << "Unable to terminate process " << process_;
-
-  return did_terminate;
-}
-#endif  // !defined(OS_NACL_NONSFI)
-
-bool Process::WaitForExit(int* exit_code) const {
-  return WaitForExitWithTimeout(TimeDelta::Max(), exit_code);
-}
-
-bool Process::WaitForExitWithTimeout(TimeDelta timeout, int* exit_code) const {
-  int local_exit_code;
-  bool exited = WaitForExitWithTimeoutImpl(Handle(), &local_exit_code, timeout);
-  if (exited) {
-    Exited(local_exit_code);
-    if (exit_code)
-      *exit_code = local_exit_code;
-  }
-  return exited;
-}
-
-void Process::Exited(int exit_code) const {}
-
-int Process::GetPriority() const {
-  DCHECK(IsValid());
-  return getpriority(PRIO_PROCESS, process_);
-}
-
-}  // namespace base
diff --git a/base/process/process_win.cc b/base/process/process_win.cc
deleted file mode 100644
index ce2b394..0000000
--- a/base/process/process_win.cc
+++ /dev/null
@@ -1,167 +0,0 @@
-// Copyright (c) 2011 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/process.h"
-
-#include "base/logging.h"
-#include "base/numerics/safe_conversions.h"
-#include "base/process/kill.h"
-
-#include <windows.h>
-
-namespace {
-
-DWORD kBasicProcessAccess =
-    PROCESS_TERMINATE | PROCESS_QUERY_INFORMATION | SYNCHRONIZE;
-
-}  // namespace
-
-namespace base {
-
-Process::Process(ProcessHandle handle)
-    : process_(handle), is_current_process_(false) {
-  CHECK_NE(handle, ::GetCurrentProcess());
-}
-
-Process::Process(Process&& other)
-    : process_(other.process_.Take()),
-      is_current_process_(other.is_current_process_) {
-  other.Close();
-}
-
-Process::~Process() {}
-
-Process& Process::operator=(Process&& other) {
-  DCHECK_NE(this, &other);
-  process_.Set(other.process_.Take());
-  is_current_process_ = other.is_current_process_;
-  other.Close();
-  return *this;
-}
-
-// static
-Process Process::Current() {
-  Process process;
-  process.is_current_process_ = true;
-  return process;
-}
-
-// static
-Process Process::Open(ProcessId pid) {
-  return Process(::OpenProcess(kBasicProcessAccess, FALSE, pid));
-}
-
-// static
-Process Process::OpenWithExtraPrivileges(ProcessId pid) {
-  DWORD access = kBasicProcessAccess | PROCESS_DUP_HANDLE | PROCESS_VM_READ;
-  return Process(::OpenProcess(access, FALSE, pid));
-}
-
-// static
-Process Process::OpenWithAccess(ProcessId pid, DWORD desired_access) {
-  return Process(::OpenProcess(desired_access, FALSE, pid));
-}
-
-// static
-void Process::TerminateCurrentProcessImmediately(int exit_code) {
-  ::TerminateProcess(GetCurrentProcess(), exit_code);
-  // There is some ambiguity over whether the call above can return. Rather than
-  // hitting confusing crashes later on we should crash right here.
-  IMMEDIATE_CRASH();
-}
-
-bool Process::IsValid() const {
-  return process_.IsValid() || is_current();
-}
-
-ProcessHandle Process::Handle() const {
-  return is_current_process_ ? GetCurrentProcess() : process_.Get();
-}
-
-Process Process::Duplicate() const {
-  if (is_current())
-    return Current();
-
-  ProcessHandle out_handle;
-  if (!IsValid() ||
-      !::DuplicateHandle(GetCurrentProcess(), Handle(), GetCurrentProcess(),
-                         &out_handle, 0, FALSE, DUPLICATE_SAME_ACCESS)) {
-    return Process();
-  }
-  return Process(out_handle);
-}
-
-ProcessId Process::Pid() const {
-  DCHECK(IsValid());
-  return GetProcId(Handle());
-}
-
-bool Process::is_current() const {
-  return is_current_process_;
-}
-
-void Process::Close() {
-  is_current_process_ = false;
-  if (!process_.IsValid())
-    return;
-
-  process_.Close();
-}
-
-bool Process::Terminate(int exit_code, bool wait) const {
-  constexpr DWORD kWaitMs = 60 * 1000;
-
-  // exit_code cannot be implemented.
-  DCHECK(IsValid());
-  bool result = (::TerminateProcess(Handle(), exit_code) != FALSE);
-  if (result) {
-    // The process may not end immediately due to pending I/O
-    if (wait && ::WaitForSingleObject(Handle(), kWaitMs) != WAIT_OBJECT_0)
-      DPLOG(ERROR) << "Error waiting for process exit";
-    Exited(exit_code);
-  } else {
-    // The process can't be terminated, perhaps because it has already
-    // exited or is in the process of exiting. A non-zero timeout is necessary
-    // here for the same reasons as above.
-    DPLOG(ERROR) << "Unable to terminate process";
-    if (::WaitForSingleObject(Handle(), kWaitMs) == WAIT_OBJECT_0) {
-      DWORD actual_exit;
-      Exited(::GetExitCodeProcess(Handle(), &actual_exit) ? actual_exit
-                                                          : exit_code);
-      result = true;
-    }
-  }
-  return result;
-}
-
-bool Process::WaitForExit(int* exit_code) const {
-  return WaitForExitWithTimeout(TimeDelta::FromMilliseconds(INFINITE),
-                                exit_code);
-}
-
-bool Process::WaitForExitWithTimeout(TimeDelta timeout, int* exit_code) const {
-  // Limit timeout to INFINITE.
-  DWORD timeout_ms = saturated_cast<DWORD>(timeout.InMilliseconds());
-  if (::WaitForSingleObject(Handle(), timeout_ms) != WAIT_OBJECT_0)
-    return false;
-
-  DWORD temp_code;  // Don't clobber out-parameters in case of failure.
-  if (!::GetExitCodeProcess(Handle(), &temp_code))
-    return false;
-
-  if (exit_code)
-    *exit_code = temp_code;
-
-  Exited(temp_code);
-  return true;
-}
-
-void Process::Exited(int exit_code) const {}
-
-int Process::GetPriority() const {
-  DCHECK(IsValid());
-  return ::GetPriorityClass(Handle());
-}
-
-}  // namespace base
diff --git a/build/gen.py b/build/gen.py
index ffd2bbe..ff6084e 100755
--- a/build/gen.py
+++ b/build/gen.py
@@ -244,10 +244,6 @@
         'base/md5.cc',
         'base/memory/ref_counted.cc',
         'base/memory/weak_ptr.cc',
-        'base/process/kill.cc',
-        'base/process/memory.cc',
-        'base/process/process_handle.cc',
-        'base/process/process_iterator.cc',
         'base/sha1.cc',
         'base/strings/string_number_conversions.cc',
         'base/strings/string_piece.cc',
@@ -471,9 +467,6 @@
         'base/files/file_util_posix.cc',
         'base/posix/file_descriptor_shuffle.cc',
         'base/posix/safe_strerror.cc',
-        'base/process/kill_posix.cc',
-        'base/process/process_handle_posix.cc',
-        'base/process/process_posix.cc',
         'base/strings/string16.cc',
         'base/synchronization/condition_variable_posix.cc',
         'base/synchronization/lock_impl_posix.cc',
@@ -483,11 +476,6 @@
 
   if is_linux:
     static_libraries['base']['sources'].extend([
-        'base/process/internal_linux.cc',
-        'base/process/memory_linux.cc',
-        'base/process/process_handle_linux.cc',
-        'base/process/process_info_linux.cc',
-        'base/process/process_iterator_linux.cc',
         'base/strings/sys_string_conversions_posix.cc',
         'base/synchronization/waitable_event_posix.cc',
         'base/time/time_exploded_posix.cc',
@@ -512,9 +500,6 @@
         'base/mac/mach_logging.cc',
         'base/mac/scoped_mach_port.cc',
         'base/mac/scoped_nsautorelease_pool.mm',
-        'base/process/process_handle_mac.cc',
-        'base/process/process_info_mac.cc',
-        'base/process/process_iterator_mac.cc',
         'base/strings/sys_string_conversions_mac.mm',
         'base/synchronization/waitable_event_mac.cc',
         'base/time/time_exploded_posix.cc',
@@ -534,12 +519,6 @@
         'base/files/file_enumerator_win.cc',
         'base/files/file_util_win.cc',
         'base/files/file_win.cc',
-        'base/process/kill_win.cc',
-        'base/process/memory_win.cc',
-        'base/process/process_handle_win.cc',
-        'base/process/process_info_win.cc',
-        'base/process/process_iterator_win.cc',
-        'base/process/process_win.cc',
         'base/strings/sys_string_conversions_win.cc',
         'base/synchronization/condition_variable_win.cc',
         'base/synchronization/lock_impl_win.cc',
diff --git a/tools/gn/exec_process.cc b/tools/gn/exec_process.cc
index 6afc8a1..662fd68 100644
--- a/tools/gn/exec_process.cc
+++ b/tools/gn/exec_process.cc
@@ -11,8 +11,6 @@
 #include "base/command_line.h"
 #include "base/files/file_util.h"
 #include "base/logging.h"
-#include "base/process/kill.h"
-#include "base/process/process.h"
 #include "build_config.h"
 
 #if defined(OS_WIN)
@@ -23,6 +21,7 @@
 #else
 #include <errno.h>
 #include <fcntl.h>
+#include <sys/wait.h>
 #include <unistd.h>
 
 #include "base/posix/eintr_wrapper.h"
@@ -37,6 +36,15 @@
                  std::string* std_out,
                  std::string* std_err,
                  int* exit_code) {
+  return ExecProcess(cmdline.GetCommandLineString(), startup_dir, std_out,
+                     std_err, exit_code);
+}
+
+bool ExecProcess(const base::string16& cmdline_str,
+                 const base::FilePath& startup_dir,
+                 std::string* std_out,
+                 std::string* std_err,
+                 int* exit_code) {
   SECURITY_ATTRIBUTES sa_attr;
   // Set the bInheritHandle flag so pipe handles are inherited.
   sa_attr.nLength = sizeof(SECURITY_ATTRIBUTES);
@@ -65,16 +73,14 @@
 
   // Ensure the read handle to the pipe for STDOUT/STDERR is not inherited.
   if (!SetHandleInformation(out_read, HANDLE_FLAG_INHERIT, 0)) {
-    NOTREACHED() << "Failed to disabled pipe inheritance";
+    NOTREACHED() << "Failed to disable pipe inheritance";
     return false;
   }
   if (!SetHandleInformation(err_read, HANDLE_FLAG_INHERIT, 0)) {
-    NOTREACHED() << "Failed to disabled pipe inheritance";
+    NOTREACHED() << "Failed to disable pipe inheritance";
     return false;
   }
 
-  base::FilePath::StringType cmdline_str(cmdline.GetCommandLineString());
-
   STARTUPINFO start_info = {};
 
   start_info.cb = sizeof(STARTUPINFO);
@@ -86,9 +92,11 @@
   start_info.hStdError = GetStdHandle(STD_ERROR_HANDLE);
   start_info.dwFlags |= STARTF_USESTDHANDLES;
 
+  base::string16 cmdline_writable = cmdline_str;
+
   // Create the child process.
   PROCESS_INFORMATION temp_process_info = {};
-  if (!CreateProcess(nullptr, &cmdline_str[0], nullptr, nullptr,
+  if (!CreateProcess(nullptr, &cmdline_writable[0], nullptr, nullptr,
                      TRUE,  // Handles are inherited.
                      NORMAL_PRIORITY_CLASS, nullptr,
                      startup_dir.value().c_str(), &start_info,
@@ -97,8 +105,8 @@
   }
   base::win::ScopedProcessInformation proc_info(temp_process_info);
 
-  // Close our writing end of pipes now. Otherwise later read would not be able
-  // to detect end of child's output.
+  // Close our writing end of pipes now. Otherwise later read would not be
+  // able to detect end of child's output.
   scoped_out_write.Close();
   scoped_err_write.Close();
 
@@ -143,6 +151,24 @@
   return true;
 }
 
+bool WaitForExit(int pid, int *exit_code) {
+  int status;
+  if (waitpid(pid, &status, 0) < 0) {
+    PLOG(ERROR) << "waitpid";
+    return false;
+  }
+
+  if (WIFEXITED(status)) {
+    *exit_code = WEXITSTATUS(status);
+    return true;
+  } else if (WIFSIGNALED(status)) {
+    if (WTERMSIG(status) == SIGINT || WTERMSIG(status) == SIGTERM
+        || WTERMSIG(status) == SIGHUP)
+      return false;
+  }
+  return false;
+}
+
 bool ExecProcess(const base::CommandLine& cmdline,
                  const base::FilePath& startup_dir,
                  std::string* std_out,
@@ -243,8 +269,7 @@
           err_open = ReadFromPipe(err_read.get(), std_err);
       }
 
-      base::Process process(pid);
-      return process.WaitForExit(exit_code);
+      return WaitForExit(pid, exit_code);
     }
   }
 
diff --git a/tools/gn/exec_process.h b/tools/gn/exec_process.h
index 43c2a1d..f361ba8 100644
--- a/tools/gn/exec_process.h
+++ b/tools/gn/exec_process.h
@@ -7,6 +7,9 @@
 
 #include <string>
 
+#include "base/strings/string16.h"
+#include "build_config.h"
+
 namespace base {
 class CommandLine;
 class FilePath;
@@ -20,6 +23,14 @@
                  std::string* std_err,
                  int* exit_code);
 
+#if defined(OS_WIN)
+bool ExecProcess(const base::string16& cmdline_str,
+                 const base::FilePath& startup_dir,
+                 std::string* std_out,
+                 std::string* std_err,
+                 int* exit_code);
+#endif  // OS_WIN
+
 }  // namespace internal
 
 #endif  // TOOLS_GN_EXEC_PROCESS_H_
diff --git a/tools/gn/ninja_build_writer.cc b/tools/gn/ninja_build_writer.cc
index 7953939..f1933f6 100644
--- a/tools/gn/ninja_build_writer.cc
+++ b/tools/gn/ninja_build_writer.cc
@@ -13,7 +13,6 @@
 
 #include "base/command_line.h"
 #include "base/files/file_util.h"
-#include "base/process/process_handle.h"
 #include "base/strings/string_util.h"
 #include "base/strings/utf_string_conversions.h"
 #include "build_config.h"
diff --git a/tools/gn/setup.cc b/tools/gn/setup.cc
index 726b037..0b27244 100644
--- a/tools/gn/setup.cc
+++ b/tools/gn/setup.cc
@@ -16,7 +16,6 @@
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
 #include "base/memory/ref_counted.h"
-#include "base/process/kill.h"
 #include "base/strings/string_split.h"
 #include "base/strings/string_util.h"
 #include "base/strings/sys_string_conversions.h"
@@ -24,6 +23,7 @@
 #include "build_config.h"
 #include "tools/gn/command_format.h"
 #include "tools/gn/commands.h"
+#include "tools/gn/exec_process.h"
 #include "tools/gn/filesystem_utils.h"
 #include "tools/gn/input_file.h"
 #include "tools/gn/parse_tree.h"
@@ -190,83 +190,6 @@
 
 #if defined(OS_WIN)
 
-bool GetAppOutput(const base::StringPiece16& cl, std::string* output) {
-  HANDLE out_read = nullptr;
-  HANDLE out_write = nullptr;
-
-  SECURITY_ATTRIBUTES sa_attr;
-  // Set the bInheritHandle flag so pipe handles are inherited.
-  sa_attr.nLength = sizeof(SECURITY_ATTRIBUTES);
-  sa_attr.bInheritHandle = TRUE;
-  sa_attr.lpSecurityDescriptor = nullptr;
-
-  // Create the pipe for the child process's STDOUT.
-  if (!CreatePipe(&out_read, &out_write, &sa_attr, 0)) {
-    NOTREACHED() << "Failed to create pipe";
-    return false;
-  }
-
-  // Ensure we don't leak the handles.
-  base::win::ScopedHandle scoped_out_read(out_read);
-  base::win::ScopedHandle scoped_out_write(out_write);
-
-  // Ensure the read handles to the pipes are not inherited.
-  if (!SetHandleInformation(out_read, HANDLE_FLAG_INHERIT, 0)) {
-    NOTREACHED() << "Failed to disabled pipe inheritance";
-    return false;
-  }
-
-  base::FilePath::StringType writable_command_line_string;
-  writable_command_line_string.assign(cl.data(), cl.size());
-
-  STARTUPINFO start_info = {};
-
-  start_info.cb = sizeof(STARTUPINFO);
-  start_info.hStdOutput = out_write;
-  // Keep the normal stdin/stderr.
-  start_info.hStdInput = GetStdHandle(STD_INPUT_HANDLE);
-  start_info.hStdError = GetStdHandle(STD_ERROR_HANDLE);
-  start_info.dwFlags |= STARTF_USESTDHANDLES;
-
-  // Create the child process.
-  PROCESS_INFORMATION temp_process_info = {};
-  if (!CreateProcess(nullptr, &writable_command_line_string[0], nullptr,
-                     nullptr,
-                     TRUE,  // Handles are inherited.
-                     0, nullptr, nullptr, &start_info, &temp_process_info)) {
-    NOTREACHED() << "Failed to start process";
-    return false;
-  }
-
-  base::win::ScopedProcessInformation proc_info(temp_process_info);
-
-  // Close our writing end of pipe now. Otherwise later read would not be able
-  // to detect end of child's output.
-  scoped_out_write.Close();
-
-  // Read output from the child process's pipe for STDOUT
-  const int kBufferSize = 1024;
-  char buffer[kBufferSize];
-
-  for (;;) {
-    DWORD bytes_read = 0;
-    BOOL success =
-        ::ReadFile(out_read, buffer, kBufferSize, &bytes_read, nullptr);
-    if (!success || bytes_read == 0)
-      break;
-    output->append(buffer, bytes_read);
-  }
-
-  // Let's wait for the process to finish.
-  WaitForSingleObject(proc_info.process_handle(), INFINITE);
-
-  int exit_code;
-  base::TerminationStatus status =
-      base::GetTerminationStatus(proc_info.process_handle(), &exit_code);
-  return status != base::TERMINATION_STATUS_PROCESS_CRASHED &&
-         status != base::TERMINATION_STATUS_ABNORMAL_TERMINATION;
-}
-
 // Given the path to a batch file that runs Python, extracts the name of the
 // executable actually implementing Python. Generally people write a batch file
 // to put something named "python" on the path, which then just redirects to
@@ -283,7 +206,12 @@
   command.append(L"\" -c \"import sys; print sys.executable\"\"");
 
   std::string python_path;
-  if (GetAppOutput(command, &python_path)) {
+  std::string std_err;
+  int exit_code;
+  base::FilePath cwd;
+  GetCurrentDirectory(&cwd);
+  if (internal::ExecProcess(command, cwd, &python_path, &std_err, &exit_code) &&
+      exit_code == 0 && std_err.empty()) {
     base::TrimWhitespaceASCII(python_path, base::TRIM_ALL, &python_path);
 
     // Python uses the system multibyte code page for sys.executable.