diff --git a/base/files/file_enumerator_posix.cc b/base/files/file_enumerator_posix.cc
index a0c5d45..a1a93d2 100644
--- a/base/files/file_enumerator_posix.cc
+++ b/base/files/file_enumerator_posix.cc
@@ -111,21 +111,6 @@
 
     directory_entries_.clear();
 
-#if defined(OS_FUCHSIA)
-    // Fuchsia does not support .. on the file system server side, see
-    // https://fuchsia.googlesource.com/docs/+/master/dotdot.md and
-    // https://crbug.com/735540. However, for UI purposes, having the parent
-    // directory show up in directory listings makes sense, so we add it here to
-    // match the expectation on other operating systems. In cases where this
-    // is useful it should be resolvable locally.
-    FileInfo dotdot;
-    dotdot.stat_.st_mode = S_IFDIR;
-    dotdot.filename_ = FilePath("..");
-    if (!ShouldSkip(dotdot.filename_)) {
-      directory_entries_.push_back(std::move(dotdot));
-    }
-#endif  // OS_FUCHSIA
-
     current_directory_entry_ = 0;
     struct dirent* dent;
     while ((dent = readdir(dir))) {
diff --git a/base/files/file_path.cc b/base/files/file_path.cc
index 146796b..969a977 100644
--- a/base/files/file_path.cc
+++ b/base/files/file_path.cc
@@ -1305,10 +1305,4 @@
 #endif
 }
 
-#if defined(OS_ANDROID)
-bool FilePath::IsContentUri() const {
-  return StartsWith(path_, "content://", base::CompareCase::INSENSITIVE_ASCII);
-}
-#endif
-
 }  // namespace base
diff --git a/base/files/file_path.h b/base/files/file_path.h
index 340375d..be70317 100644
--- a/base/files/file_path.h
+++ b/base/files/file_path.h
@@ -427,15 +427,6 @@
                                    StringPieceType string2);
 #endif
 
-#if defined(OS_ANDROID)
-  // On android, file selection dialog can return a file with content uri
-  // scheme(starting with content://). Content uri needs to be opened with
-  // ContentResolver to guarantee that the app has appropriate permissions
-  // to access it.
-  // Returns true if the path is a content uri, or false otherwise.
-  bool IsContentUri() const;
-#endif
-
  private:
   // Remove trailing separators from this object.  If the path is absolute, it
   // will never be stripped any more than to refer to the absolute root
diff --git a/base/files/file_posix.cc b/base/files/file_posix.cc
index 630f1ff..344621f 100644
--- a/base/files/file_posix.cc
+++ b/base/files/file_posix.cc
@@ -115,14 +115,7 @@
   int64_t last_accessed_nsec = stat_info.st_atim.tv_nsec;
   time_t creation_time_sec = stat_info.st_ctim.tv_sec;
   int64_t creation_time_nsec = stat_info.st_ctim.tv_nsec;
-#elif defined(OS_ANDROID)
-  time_t last_modified_sec = stat_info.st_mtime;
-  int64_t last_modified_nsec = stat_info.st_mtime_nsec;
-  time_t last_accessed_sec = stat_info.st_atime;
-  int64_t last_accessed_nsec = stat_info.st_atime_nsec;
-  time_t creation_time_sec = stat_info.st_ctime;
-  int64_t creation_time_nsec = stat_info.st_ctime_nsec;
-#elif defined(OS_MACOSX) || defined(OS_IOS) || defined(OS_BSD)
+#elif defined(OS_MACOSX)
   time_t last_modified_sec = stat_info.st_mtimespec.tv_sec;
   int64_t last_modified_nsec = stat_info.st_mtimespec.tv_nsec;
   time_t last_accessed_sec = stat_info.st_atimespec.tv_sec;
@@ -130,12 +123,7 @@
   time_t creation_time_sec = stat_info.st_ctimespec.tv_sec;
   int64_t creation_time_nsec = stat_info.st_ctimespec.tv_nsec;
 #else
-  time_t last_modified_sec = stat_info.st_mtime;
-  int64_t last_modified_nsec = 0;
-  time_t last_accessed_sec = stat_info.st_atime;
-  int64_t last_accessed_nsec = 0;
-  time_t creation_time_sec = stat_info.st_ctime;
-  int64_t creation_time_nsec = 0;
+#error
 #endif
 
   last_modified =
@@ -176,15 +164,9 @@
 int64_t File::Seek(Whence whence, int64_t offset) {
   DCHECK(IsValid());
 
-#if defined(OS_ANDROID)
-  static_assert(sizeof(int64_t) == sizeof(off64_t), "off64_t must be 64 bits");
-  return lseek64(file_.get(), static_cast<off64_t>(offset),
-                 static_cast<int>(whence));
-#else
   static_assert(sizeof(int64_t) == sizeof(off_t), "off_t must be 64 bits");
   return lseek(file_.get(), static_cast<off_t>(offset),
                static_cast<int>(whence));
-#endif
 }
 
 int File::Read(int64_t offset, char* data, int size) {
@@ -435,10 +417,6 @@
   static_assert(O_RDONLY == 0, "O_RDONLY must equal zero");
 
   int mode = S_IRUSR | S_IWUSR;
-#if defined(OS_CHROMEOS)
-  mode |= S_IRGRP | S_IROTH;
-#endif
-
   int descriptor = HANDLE_EINTR(open(path.value().c_str(), open_flags, mode));
 
   if (flags & FLAG_OPEN_ALWAYS) {
@@ -473,10 +451,7 @@
 bool File::Flush() {
   DCHECK(IsValid());
 
-#if defined(OS_NACL)
-  NOTIMPLEMENTED();  // NaCl doesn't implement fsync.
-  return true;
-#elif defined(OS_LINUX) || defined(OS_ANDROID)
+#if defined(OS_LINUX)
   return !HANDLE_EINTR(fdatasync(file_.get()));
 #else
   return !HANDLE_EINTR(fsync(file_.get()));
diff --git a/base/files/file_util_posix.cc b/base/files/file_util_posix.cc
index 774735c..6fb43bd 100644
--- a/base/files/file_util_posix.cc
+++ b/base/files/file_util_posix.cc
@@ -48,12 +48,6 @@
 #include <grp.h>
 #endif
 
-// We need to do this on AIX due to some inconsistencies in how AIX
-// handles XOPEN_SOURCE and ALL_SOURCE.
-#if defined(OS_AIX)
-extern "C" char* mkdtemp(char* path);
-#endif
-
 namespace base {
 
 namespace {
@@ -310,8 +304,6 @@
     // set of permissions than it does on other POSIX platforms.
 #if defined(OS_MACOSX)
     int mode = 0600 | (stat_at_use.st_mode & 0177);
-#elif defined(OS_CHROMEOS)
-    int mode = 0644;
 #else
     int mode = 0600;
 #endif
@@ -466,11 +458,6 @@
 }
 
 bool PathExists(const FilePath& path) {
-#if defined(OS_ANDROID)
-  if (path.IsContentUri()) {
-    return ContentUriExists(path);
-  }
-#endif
   return access(path.value().c_str(), F_OK) == 0;
 }
 
@@ -608,10 +595,6 @@
   if (home_dir && home_dir[0])
     return FilePath(home_dir);
 
-#if defined(OS_ANDROID)
-  DLOG(WARNING) << "OS_ANDROID: Home directory lookup not yet implemented.";
-#endif
-
   FilePath rv;
   if (GetTempDir(&rv))
     return rv;
@@ -746,19 +729,8 @@
 
 bool GetFileInfo(const FilePath& file_path, File::Info* results) {
   stat_wrapper_t file_info;
-#if defined(OS_ANDROID)
-  if (file_path.IsContentUri()) {
-    File file = OpenContentUriForRead(file_path);
-    if (!file.IsValid())
-      return false;
-    return file.GetInfo(results);
-  } else {
-#endif  // defined(OS_ANDROID)
-    if (CallStat(file_path.value().c_str(), &file_info) != 0)
-      return false;
-#if defined(OS_ANDROID)
-  }
-#endif  // defined(OS_ANDROID)
+  if (CallStat(file_path.value().c_str(), &file_info) != 0)
+    return false;
 
   results->FromStat(file_info);
   return true;
@@ -941,17 +913,9 @@
 #endif  // defined(OS_MACOSX) && !defined(OS_IOS)
 
 int GetMaximumPathComponentLength(const FilePath& path) {
-#if defined(OS_FUCHSIA)
-  // Return a value we do not expect anyone ever to reach, but which is small
-  // enough to guard against e.g. bugs causing multi-megabyte paths.
-  return 1024;
-#else
   return pathconf(path.value().c_str(), _PC_NAME_MAX);
-#endif
 }
 
-#if !defined(OS_ANDROID)
-// This is implemented in file_util_android.cc for that platform.
 bool GetShmemTempDir(bool executable, FilePath* path) {
 #if defined(OS_LINUX) || defined(OS_AIX)
   bool use_dev_shm = true;
@@ -966,21 +930,12 @@
 #endif  // defined(OS_LINUX) || defined(OS_AIX)
   return GetTempDir(path);
 }
-#endif  // !defined(OS_ANDROID)
 
 #if !defined(OS_MACOSX)
 // Mac has its own implementation, this is for all other Posix systems.
 bool CopyFile(const FilePath& from_path, const FilePath& to_path) {
   File infile;
-#if defined(OS_ANDROID)
-  if (from_path.IsContentUri()) {
-    infile = OpenContentUriForRead(from_path);
-  } else {
-    infile = File(from_path, File::FLAG_OPEN | File::FLAG_READ);
-  }
-#else
   infile = File(from_path, File::FLAG_OPEN | File::FLAG_READ);
-#endif
   if (!infile.IsValid())
     return false;
 
diff --git a/base/linux_util.cc b/base/linux_util.cc
index 5c57d78..f2d29ec 100644
--- a/base/linux_util.cc
+++ b/base/linux_util.cc
@@ -106,19 +106,9 @@
 
 // We use this static string to hold the Linux distro info. If we
 // crash, the crash handler code will send this in the crash dump.
-char g_linux_distro[kDistroSize] =
-#if defined(OS_CHROMEOS)
-    "CrOS";
-#elif defined(OS_ANDROID)
-    "Android";
-#else  // if defined(OS_LINUX)
-    "Unknown";
-#endif
+char g_linux_distro[kDistroSize] = "Unknown";
 
 std::string GetLinuxDistro() {
-#if defined(OS_CHROMEOS) || defined(OS_ANDROID)
-  return g_linux_distro;
-#elif defined(OS_LINUX)
   LinuxDistroHelper* distro_state_singleton = LinuxDistroHelper::GetInstance();
   LinuxDistroState state = distro_state_singleton->State();
   if (STATE_CHECK_FINISHED == state)
@@ -143,10 +133,6 @@
   }
   distro_state_singleton->CheckFinished();
   return g_linux_distro;
-#else
-  NOTIMPLEMENTED();
-  return "Unknown";
-#endif
 }
 
 void SetLinuxDistro(const std::string& distro) {
diff --git a/base/logging.cc b/base/logging.cc
index 83ad556..aacc90c 100644
--- a/base/logging.cc
+++ b/base/logging.cc
@@ -47,21 +47,9 @@
 #include <mach-o/dyld.h>
 
 #elif defined(OS_POSIX) || defined(OS_FUCHSIA)
-#if defined(OS_NACL)
-#include <sys/time.h>  // timespec doesn't seem to be in <time.h>
-#endif
 #include <time.h>
 #endif
 
-#if defined(OS_FUCHSIA)
-#include <zircon/process.h>
-#include <zircon/syscalls.h>
-#endif
-
-#if defined(OS_ANDROID)
-#include <android/log.h>
-#endif
-
 #if defined(OS_POSIX) || defined(OS_FUCHSIA)
 #include <errno.h>
 #include <paths.h>
@@ -150,11 +138,6 @@
 int32_t CurrentProcessId() {
 #if defined(OS_WIN)
   return GetCurrentProcessId();
-#elif defined(OS_FUCHSIA)
-  zx_info_handle_basic_t basic = {};
-  zx_object_get_info(zx_process_self(), ZX_INFO_HANDLE_BASIC, &basic,
-                     sizeof(basic), nullptr, nullptr);
-  return basic.koid;
 #elif defined(OS_POSIX)
   return getpid();
 #endif
@@ -163,15 +146,8 @@
 uint64_t TickCount() {
 #if defined(OS_WIN)
   return GetTickCount();
-#elif defined(OS_FUCHSIA)
-  return zx_clock_get(ZX_CLOCK_MONOTONIC) /
-         static_cast<zx_time_t>(base::Time::kNanosecondsPerMicrosecond);
 #elif defined(OS_MACOSX)
   return mach_absolute_time();
-#elif defined(OS_NACL)
-  // NaCl sadly does not have _POSIX_TIMERS enabled in sys/features.h
-  // So we have to use clock() for now.
-  return clock();
 #elif defined(OS_POSIX)
   struct timespec ts;
   clock_gettime(CLOCK_MONOTONIC, &ts);
@@ -186,9 +162,7 @@
 void DeleteFilePath(const PathString& log_name) {
 #if defined(OS_WIN)
   DeleteFile(log_name.c_str());
-#elif defined(OS_NACL)
-  // Do nothing; unlink() isn't supported on NaCl.
-#elif defined(OS_POSIX) || defined(OS_FUCHSIA)
+#elif defined(OS_POSIX)
   unlink(log_name.c_str());
 #else
 #error Unsupported platform
@@ -386,10 +360,6 @@
       delete_old(APPEND_TO_OLD_LOG_FILE) {}
 
 bool BaseInitLoggingImpl(const LoggingSettings& settings) {
-#if defined(OS_NACL)
-  // Can log only to the system debug log.
-  CHECK_EQ(settings.logging_dest & ~LOG_TO_SYSTEM_DEBUG_LOG, 0);
-#endif
   g_logging_destination = settings.logging_dest;
 
   // ignore file options unless logging to file is set.
@@ -694,24 +664,6 @@
                        str_newline.c_str());
 #endif  // defined(USE_ASL)
     }
-#elif defined(OS_ANDROID)
-    android_LogPriority priority =
-        (severity_ < 0) ? ANDROID_LOG_VERBOSE : ANDROID_LOG_UNKNOWN;
-    switch (severity_) {
-      case LOG_INFO:
-        priority = ANDROID_LOG_INFO;
-        break;
-      case LOG_WARNING:
-        priority = ANDROID_LOG_WARN;
-        break;
-      case LOG_ERROR:
-        priority = ANDROID_LOG_ERROR;
-        break;
-      case LOG_FATAL:
-        priority = ANDROID_LOG_FATAL;
-        break;
-    }
-    __android_log_write(priority, "chromium", str_newline.c_str());
 #endif
     ignore_result(fwrite(str_newline.data(), str_newline.size(), 1, stderr));
     fflush(stderr);
diff --git a/base/process/internal_linux.cc b/base/process/internal_linux.cc
index c551502..69a1a5b 100644
--- a/base/process/internal_linux.cc
+++ b/base/process/internal_linux.cc
@@ -18,11 +18,6 @@
 #include "base/strings/string_util.h"
 #include "base/time/time.h"
 
-// Not defined on AIX by default.
-#if defined(OS_AIX)
-#define NAME_MAX 255
-#endif
-
 namespace base {
 namespace internal {
 
diff --git a/base/process/kill.h b/base/process/kill.h
index 03c057c..384087c 100644
--- a/base/process/kill.h
+++ b/base/process/kill.h
@@ -51,17 +51,6 @@
   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
-#if defined(OS_CHROMEOS)
-  // Used for the case when oom-killer kills a process on ChromeOS.
-  TERMINATION_STATUS_PROCESS_WAS_KILLED_BY_OOM,
-#endif
-#if defined(OS_ANDROID)
-  // On Android processes are spawned from the system Zygote and we do not get
-  // the termination status.  We can't know if the termination was a crash or an
-  // oom kill for sure, but we can use status of the strong process bindings as
-  // a hint.
-  TERMINATION_STATUS_OOM_PROTECTED,        // child was protected from oom kill
-#endif
   TERMINATION_STATUS_LAUNCH_FAILED,        // child process never launched
   TERMINATION_STATUS_OOM,                  // Process died due to oom
   TERMINATION_STATUS_MAX_ENUM
diff --git a/base/process/kill_posix.cc b/base/process/kill_posix.cc
index 4027c6f..e6d658c 100644
--- a/base/process/kill_posix.cc
+++ b/base/process/kill_posix.cc
@@ -53,11 +53,6 @@
       case SIGSYS:
         return TERMINATION_STATUS_PROCESS_CRASHED;
       case SIGKILL:
-#if defined(OS_CHROMEOS)
-        // On ChromeOS, only way a process gets kill by SIGKILL
-        // is by oom-killer.
-        return TERMINATION_STATUS_PROCESS_WAS_KILLED_BY_OOM;
-#endif
       case SIGINT:
       case SIGTERM:
         return TERMINATION_STATUS_PROCESS_WAS_KILLED;
diff --git a/base/process/launch.h b/base/process/launch.h
index 0a08750..eb53c0f 100644
--- a/base/process/launch.h
+++ b/base/process/launch.h
@@ -23,12 +23,9 @@
 
 #if defined(OS_WIN)
 #include <windows.h>
-#elif defined(OS_FUCHSIA)
-#include <launchpad/launchpad.h>
-#include <zircon/types.h>
 #endif
 
-#if defined(OS_POSIX) || defined(OS_FUCHSIA)
+#if defined(OS_POSIX)
 #include "base/posix/file_descriptor_shuffle.h"
 #endif
 
@@ -38,13 +35,6 @@
 
 #if defined(OS_WIN)
 typedef std::vector<HANDLE> HandlesToInheritVector;
-#elif defined(OS_FUCHSIA)
-struct HandleToTransfer {
-  uint32_t id;
-  zx_handle_t handle;
-};
-typedef std::vector<HandleToTransfer> HandlesToTransferVector;
-typedef std::vector<std::pair<int, int>> FileHandleMappingVector;
 #elif defined(OS_POSIX)
 typedef std::vector<std::pair<int, int>> FileHandleMappingVector;
 #endif  // defined(OS_WIN)
@@ -52,7 +42,7 @@
 // Options for launching a subprocess that are passed to LaunchProcess().
 // The default constructor constructs the object with default options.
 struct BASE_EXPORT LaunchOptions {
-#if defined(OS_POSIX) || defined(OS_FUCHSIA)
+#if defined(OS_POSIX)
   // Delegate to be run in between fork and exec in the subprocess (see
   // pre_exec_delegate below)
   class BASE_EXPORT PreExecDelegate {
@@ -152,7 +142,7 @@
   // If set to true, permission to bring windows to the foreground is passed to
   // the launched process if the current process has such permission.
   bool grant_foreground_privilege = false;
-#elif defined(OS_POSIX) || defined(OS_FUCHSIA)
+#elif defined(OS_POSIX)
   // Set/unset environment variables. These are applied on top of the parent
   // process environment.  Empty (the default) means to inherit the same
   // environment. See AlterEnvironment().
@@ -182,36 +172,6 @@
   bool kill_on_parent_death = false;
 #endif  // defined(OS_LINUX)
 
-#if defined(OS_FUCHSIA)
-  // If valid, launches the application in that job object.
-  zx_handle_t job_handle = ZX_HANDLE_INVALID;
-
-  // Specifies additional handles to transfer (not duplicate) to the child
-  // process. The handles remain valid in this process if launch fails.
-  // Each entry is an <id,handle> pair, with an |id| created using the PA_HND()
-  // macro. The child retrieves the handle |zx_get_startup_handle(id)|.
-  HandlesToTransferVector handles_to_transfer;
-
-  // If set, specifies which capabilities should be granted (cloned) to the
-  // child process.
-  // A zero value indicates that the child process will receive
-  // no capabilities.
-  // By default the child will inherit the same capabilities, job, and CWD
-  // from the parent process.
-  uint32_t clone_flags =
-      LP_CLONE_FDIO_NAMESPACE | LP_CLONE_DEFAULT_JOB | LP_CLONE_FDIO_STDIO;
-
-  // Specifies the namespace paths which are to be cloned in the child process'
-  // namespace. If left unset, the child process will be launched with an empty
-  // namespace.
-  // This flag allows the parent to pass only the bare minimum OS capabilities
-  // to the child process, so that the potential attack surface is reduced in
-  // case child process is compromised.
-  // Cannot be combined with the clone flag LP_CLONE_FDIO_NAMESPACE, which is
-  // equivalent to cloning every path.
-  std::vector<FilePath> paths_to_map;
-#endif  // defined(OS_FUCHSIA)
-
 #if defined(OS_POSIX)
   // If not empty, launch the specified executable instead of
   // cmdline.GetProgram(). This is useful when it is necessary to pass a custom
@@ -236,12 +196,6 @@
   // will be the same as its pid.
   bool new_process_group = false;
 #endif  // defined(OS_POSIX)
-
-#if defined(OS_CHROMEOS)
-  // If non-negative, the specified file descriptor will be set as the launched
-  // process' controlling terminal.
-  int ctrl_terminal_fd = -1;
-#endif  // defined(OS_CHROMEOS)
 };
 
 // Launch a process via the command line |cmdline|.
@@ -282,7 +236,7 @@
 BASE_EXPORT Process LaunchElevatedProcess(const CommandLine& cmdline,
                                           const LaunchOptions& options);
 
-#elif defined(OS_POSIX) || defined(OS_FUCHSIA)
+#elif defined(OS_POSIX)
 // A POSIX-specific version of LaunchProcess that takes an argv array
 // instead of a CommandLine.  Useful for situations where you need to
 // control the command line arguments directly, but prefer the
@@ -328,7 +282,7 @@
 // instead of a CommandLine object. Useful for situations where you need to
 // control the command line arguments directly.
 BASE_EXPORT bool GetAppOutput(const StringPiece16& cl, std::string* output);
-#elif defined(OS_POSIX) || defined(OS_FUCHSIA)
+#elif defined(OS_POSIX)
 // A POSIX-specific version of GetAppOutput that takes an argv array
 // instead of a CommandLine.  Useful for situations where you need to
 // control the command line arguments directly.
diff --git a/base/process/launch_posix.cc b/base/process/launch_posix.cc
index 454b2cb..2369802 100644
--- a/base/process/launch_posix.cc
+++ b/base/process/launch_posix.cc
@@ -45,15 +45,6 @@
 #include <sys/prctl.h>
 #endif
 
-#if defined(OS_CHROMEOS)
-#include <sys/ioctl.h>
-#endif
-
-#if defined(OS_FREEBSD)
-#include <sys/event.h>
-#include <sys/ucontext.h>
-#endif
-
 #if defined(OS_MACOSX)
 #include <crt_externs.h>
 #include <sys/event.h>
@@ -105,15 +96,7 @@
 // the previous signal mask.
 sigset_t SetSignalMask(const sigset_t& new_sigmask) {
   sigset_t old_sigmask;
-#if defined(OS_ANDROID)
-  // POSIX says pthread_sigmask() must be used in multi-threaded processes,
-  // but Android's pthread_sigmask() was broken until 4.1:
-  // https://code.google.com/p/android/issues/detail?id=15337
-  // http://stackoverflow.com/questions/13777109/pthread-sigmask-on-android-not-working
-  RAW_CHECK(sigprocmask(SIG_SETMASK, &new_sigmask, &old_sigmask) == 0);
-#else
   RAW_CHECK(pthread_sigmask(SIG_SETMASK, &new_sigmask, &old_sigmask) == 0);
-#endif
   return old_sigmask;
 }
 
@@ -219,14 +202,6 @@
 static const char kFDDir[] = "/proc/self/fd";
 #elif defined(OS_MACOSX)
 static const char kFDDir[] = "/dev/fd";
-#elif defined(OS_SOLARIS)
-static const char kFDDir[] = "/dev/fd";
-#elif defined(OS_FREEBSD)
-static const char kFDDir[] = "/dev/fd";
-#elif defined(OS_OPENBSD)
-static const char kFDDir[] = "/dev/fd";
-#elif defined(OS_ANDROID)
-static const char kFDDir[] = "/proc/self/fd";
 #endif
 
 void CloseSuperfluousFds(const base::InjectiveMultimap& saved_mapping) {
@@ -440,20 +415,6 @@
     memset(reinterpret_cast<void*>(malloc), 0xff, 8);
 #endif  // 0
 
-#if defined(OS_CHROMEOS)
-    if (options.ctrl_terminal_fd >= 0) {
-      // Set process' controlling terminal.
-      if (HANDLE_EINTR(setsid()) != -1) {
-        if (HANDLE_EINTR(
-                ioctl(options.ctrl_terminal_fd, TIOCSCTTY, nullptr)) == -1) {
-          RAW_LOG(WARNING, "ioctl(TIOCSCTTY), ctrl terminal not set");
-        }
-      } else {
-        RAW_LOG(WARNING, "setsid failed, ctrl terminal not set");
-      }
-    }
-#endif  // defined(OS_CHROMEOS)
-
     // Cannot use STL iterators here, since debug iterators use locks.
     for (size_t i = 0; i < options.fds_to_remap.size(); ++i) {
       const FileHandleMappingVector::value_type& value =
diff --git a/base/process/process.h b/base/process/process.h
index 2826be3..2633355 100644
--- a/base/process/process.h
+++ b/base/process/process.h
@@ -15,10 +15,6 @@
 #include "base/win/scoped_handle.h"
 #endif
 
-#if defined(OS_FUCHSIA)
-#include "base/fuchsia/scoped_zx_handle.h"
-#endif
-
 #if defined(OS_MACOSX)
 #include "base/process/port_provider_mac.h"
 #endif
@@ -172,37 +168,20 @@
   // of this value is OS dependent.
   int GetPriority() const;
 
-#if defined(OS_CHROMEOS)
-  // Get the PID in its PID namespace.
-  // If the process is not in a PID namespace or /proc/<pid>/status does not
-  // report NSpid, kNullProcessId is returned.
-  ProcessId GetPidInNamespace() const;
-#endif
-
  private:
 #if defined(OS_WIN)
   win::ScopedHandle process_;
-#elif defined(OS_FUCHSIA)
-  ScopedZxHandle process_;
 #else
   ProcessHandle process_;
 #endif
 
-#if defined(OS_WIN) || defined(OS_FUCHSIA)
+#if defined(OS_WIN)
   bool is_current_process_;
 #endif
 
   DISALLOW_COPY_AND_ASSIGN(Process);
 };
 
-#if defined(OS_CHROMEOS)
-// Exposed for testing.
-// Given the contents of the /proc/<pid>/cgroup file, determine whether the
-// process is backgrounded or not.
-BASE_EXPORT bool IsProcessBackgroundedCGroup(
-    const StringPiece& cgroup_contents);
-#endif  // defined(OS_CHROMEOS)
-
 }  // namespace base
 
 #endif  // BASE_PROCESS_PROCESS_H_
diff --git a/base/process/process_handle.h b/base/process/process_handle.h
index bf9a720..8079e56 100644
--- a/base/process/process_handle.h
+++ b/base/process/process_handle.h
@@ -16,10 +16,6 @@
 #include "base/win/windows_types.h"
 #endif
 
-#if defined(OS_FUCHSIA)
-#include <zircon/types.h>
-#endif
-
 namespace base {
 
 // ProcessHandle is a platform specific type which represents the underlying OS
@@ -31,11 +27,6 @@
 typedef HANDLE UserTokenHandle;
 const ProcessHandle kNullProcessHandle = NULL;
 const ProcessId kNullProcessId = 0;
-#elif defined(OS_FUCHSIA)
-typedef zx_handle_t ProcessHandle;
-typedef zx_koid_t ProcessId;
-const ProcessHandle kNullProcessHandle = ZX_HANDLE_INVALID;
-const ProcessId kNullProcessId = ZX_KOID_INVALID;
 #elif defined(OS_POSIX)
 // On POSIX, our ProcessHandle will just be the PID.
 typedef pid_t ProcessHandle;
@@ -47,7 +38,7 @@
 // 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) || defined(OS_FUCHSIA)
+#if defined(OS_WIN)
 #define CrPRIdPid "ld"
 #else
 #define CrPRIdPid "d"
diff --git a/base/process/process_handle_linux.cc b/base/process/process_handle_linux.cc
index f921b42..43e9ce2 100644
--- a/base/process/process_handle_linux.cc
+++ b/base/process/process_handle_linux.cc
@@ -6,20 +6,12 @@
 
 #include "base/files/file_util.h"
 #include "base/process/internal_linux.h"
-#if defined(OS_AIX)
-#include "base/process/internal_aix.h"
-#endif
 
 namespace base {
 
 ProcessId GetParentProcessId(ProcessHandle process) {
   ProcessId pid =
-#if defined(OS_AIX)
-      internalAIX::ReadProcStatsAndGetFieldAsInt64(process,
-                                                   internalAIX::VM_PPID);
-#else
       internal::ReadProcStatsAndGetFieldAsInt64(process, internal::VM_PPID);
-#endif
   // TODO(zijiehe): Returns 0 if |process| does not have a parent process.
   if (pid)
     return pid;
diff --git a/base/process/process_iterator.cc b/base/process/process_iterator.cc
index bc8c0a8..792237b 100644
--- a/base/process/process_iterator.cc
+++ b/base/process/process_iterator.cc
@@ -39,17 +39,6 @@
     const FilePath::StringType& executable_name,
     const ProcessFilter* filter) : ProcessIterator(filter),
                                    executable_name_(executable_name) {
-#if defined(OS_ANDROID)
-  // On Android, the process name contains only the last 15 characters, which
-  // is in file /proc/<pid>/stat, the string between open parenthesis and close
-  // parenthesis. Please See ProcessIterator::CheckForNextProcess for details.
-  // Now if the length of input process name is greater than 15, only save the
-  // last 15 characters.
-  if (executable_name_.size() > 15) {
-    executable_name_ = FilePath::StringType(executable_name_,
-                                            executable_name_.size() - 15, 15);
-  }
-#endif
 }
 
 NamedProcessIterator::~NamedProcessIterator() = default;
diff --git a/base/process/process_iterator.h b/base/process/process_iterator.h
index 672d58b..e563567 100644
--- a/base/process/process_iterator.h
+++ b/base/process/process_iterator.h
@@ -24,8 +24,6 @@
 #include <tlhelp32.h>
 #elif defined(OS_MACOSX) || defined(OS_OPENBSD)
 #include <sys/sysctl.h>
-#elif defined(OS_FREEBSD)
-#include <sys/user.h>
 #elif defined(OS_POSIX) || defined(OS_FUCHSIA)
 #include <dirent.h>
 #endif
diff --git a/base/process/process_linux.cc b/base/process/process_linux.cc
index 173daf9..066c647 100644
--- a/base/process/process_linux.cc
+++ b/base/process/process_linux.cc
@@ -15,63 +15,13 @@
 #include "base/synchronization/lock.h"
 #include "build_config.h"
 
-// Not defined on AIX by default.
-#if defined(OS_AIX)
-#define RLIMIT_NICE 20
-#endif
-
 namespace base {
 
 namespace {
 
 const int kForegroundPriority = 0;
 
-#if defined(OS_CHROMEOS)
-// We are more aggressive in our lowering of background process priority
-// for chromeos as we have much more control over other processes running
-// on the machine.
-//
-// TODO(davemoore) Refactor this by adding support for higher levels to set
-// the foregrounding / backgrounding process so we don't have to keep
-// chrome / chromeos specific logic here.
-const int kBackgroundPriority = 19;
-const char kControlPath[] = "/sys/fs/cgroup/cpu%s/cgroup.procs";
-const char kForeground[] = "/chrome_renderers/foreground";
-const char kBackground[] = "/chrome_renderers/background";
-const char kProcPath[] = "/proc/%d/cgroup";
-
-struct CGroups {
-  // Check for cgroups files. ChromeOS supports these by default. It creates
-  // a cgroup mount in /sys/fs/cgroup and then configures two cpu task groups,
-  // one contains at most a single foreground renderer and the other contains
-  // all background renderers. This allows us to limit the impact of background
-  // renderers on foreground ones to a greater level than simple renicing.
-  bool enabled;
-  base::FilePath foreground_file;
-  base::FilePath background_file;
-
-  CGroups() {
-    foreground_file =
-        base::FilePath(base::StringPrintf(kControlPath, kForeground));
-    background_file =
-        base::FilePath(base::StringPrintf(kControlPath, kBackground));
-    base::FileSystemType foreground_type;
-    base::FileSystemType background_type;
-    enabled =
-        base::GetFileSystemType(foreground_file, &foreground_type) &&
-        base::GetFileSystemType(background_file, &background_type) &&
-        foreground_type == FILE_SYSTEM_CGROUP &&
-        background_type == FILE_SYSTEM_CGROUP;
-  }
-
-  static CGroups& Get() {
-    static auto& groups = *new CGroups;
-    return groups;
-  }
-};
-#else
 const int kBackgroundPriority = 5;
-#endif  // defined(OS_CHROMEOS)
 
 bool CanReraisePriority() {
   // We won't be able to raise the priority if we don't have the right rlimit.
@@ -85,11 +35,6 @@
 
 // static
 bool Process::CanBackgroundProcesses() {
-#if defined(OS_CHROMEOS)
-  if (CGroups::Get().enabled)
-    return true;
-#endif  // defined(OS_CHROMEOS)
-
   static const bool can_reraise_priority = CanReraisePriority();
   return can_reraise_priority;
 }
@@ -97,32 +42,12 @@
 bool Process::IsProcessBackgrounded() const {
   DCHECK(IsValid());
 
-#if defined(OS_CHROMEOS)
-  if (CGroups::Get().enabled) {
-    std::string proc;
-    if (base::ReadFileToString(
-            base::FilePath(StringPrintf(kProcPath, process_)), &proc)) {
-      return IsProcessBackgroundedCGroup(proc);
-    }
-    return false;
-  }
-#endif  // defined(OS_CHROMEOS)
-
   return GetPriority() == kBackgroundPriority;
 }
 
 bool Process::SetProcessBackgrounded(bool background) {
   DCHECK(IsValid());
 
-#if defined(OS_CHROMEOS)
-  if (CGroups::Get().enabled) {
-    std::string pid = IntToString(process_);
-    const base::FilePath file = background ? CGroups::Get().background_file
-                                           : CGroups::Get().foreground_file;
-    return base::WriteFile(file, pid.c_str(), pid.size()) > 0;
-  }
-#endif  // defined(OS_CHROMEOS)
-
   if (!CanBackgroundProcesses())
     return false;
 
@@ -132,65 +57,4 @@
   return result == 0;
 }
 
-#if defined(OS_CHROMEOS)
-bool IsProcessBackgroundedCGroup(const StringPiece& cgroup_contents) {
-  // The process can be part of multiple control groups, and for each cgroup
-  // hierarchy there's an entry in the file. We look for a control group
-  // named "/chrome_renderers/background" to determine if the process is
-  // backgrounded. crbug.com/548818.
-  std::vector<StringPiece> lines = SplitStringPiece(
-      cgroup_contents, "\n", TRIM_WHITESPACE, SPLIT_WANT_NONEMPTY);
-  for (const auto& line : lines) {
-    std::vector<StringPiece> fields =
-        SplitStringPiece(line, ":", TRIM_WHITESPACE, SPLIT_WANT_ALL);
-    if (fields.size() != 3U) {
-      NOTREACHED();
-      continue;
-    }
-    if (fields[2] == kBackground)
-      return true;
-  }
-
-  return false;
-}
-#endif  // defined(OS_CHROMEOS)
-
-#if defined(OS_CHROMEOS)
-// Reads /proc/<pid>/status and returns the PID in its PID namespace.
-// If the process is not in a PID namespace or /proc/<pid>/status does not
-// report NSpid, kNullProcessId is returned.
-ProcessId Process::GetPidInNamespace() const {
-  std::string status;
-  {
-    FilePath status_file =
-        FilePath("/proc").Append(IntToString(process_)).Append("status");
-    if (!ReadFileToString(status_file, &status)) {
-      return kNullProcessId;
-    }
-  }
-
-  StringPairs pairs;
-  SplitStringIntoKeyValuePairs(status, ':', '\n', &pairs);
-  for (const auto& pair : pairs) {
-    const std::string& key = pair.first;
-    const std::string& value_str = pair.second;
-    if (key == "NSpid") {
-      std::vector<StringPiece> split_value_str = SplitStringPiece(
-          value_str, "\t", TRIM_WHITESPACE, SPLIT_WANT_NONEMPTY);
-      if (split_value_str.size() <= 1) {
-        return kNullProcessId;
-      }
-      int value;
-      // The last value in the list is the PID in the namespace.
-      if (!StringToInt(split_value_str.back(), &value)) {
-        NOTREACHED();
-        return kNullProcessId;
-      }
-      return value;
-    }
-  }
-  return kNullProcessId;
-}
-#endif  // defined(OS_CHROMEOS)
-
 }  // namespace base
diff --git a/base/rand_util_posix.cc b/base/rand_util_posix.cc
index 4dbb35d..13ecaf5 100644
--- a/base/rand_util_posix.cc
+++ b/base/rand_util_posix.cc
@@ -22,17 +22,9 @@
 // we can use LazyInstance to handle opening it on the first access.
 class URandomFd {
  public:
-#if defined(OS_AIX)
-  // AIX has no 64-bit support for open falgs such as -
-  //  O_CLOEXEC, O_NOFOLLOW and O_TTY_INIT
-  URandomFd() : fd_(HANDLE_EINTR(open("/dev/urandom", O_RDONLY))) {
-    DCHECK_GE(fd_, 0) << "Cannot open /dev/urandom: " << errno;
-  }
-#else
   URandomFd() : fd_(HANDLE_EINTR(open("/dev/urandom", O_RDONLY | O_CLOEXEC))) {
     DCHECK_GE(fd_, 0) << "Cannot open /dev/urandom: " << errno;
   }
-#endif
 
   ~URandomFd() { close(fd_); }
 
diff --git a/base/synchronization/condition_variable_posix.cc b/base/synchronization/condition_variable_posix.cc
index 7d6824d..229b529 100644
--- a/base/synchronization/condition_variable_posix.cc
+++ b/base/synchronization/condition_variable_posix.cc
@@ -75,18 +75,10 @@
 #else
   // The timeout argument to pthread_cond_timedwait is in absolute time.
   struct timespec absolute_time;
-#if defined(OS_NACL)
-  // See comment in constructor for why this is different in NaCl.
-  struct timeval now;
-  gettimeofday(&now, NULL);
-  absolute_time.tv_sec = now.tv_sec;
-  absolute_time.tv_nsec = now.tv_usec * Time::kNanosecondsPerMicrosecond;
-#else
   struct timespec now;
   clock_gettime(CLOCK_MONOTONIC, &now);
   absolute_time.tv_sec = now.tv_sec;
   absolute_time.tv_nsec = now.tv_nsec;
-#endif
 
   absolute_time.tv_sec += relative_time.tv_sec;
   absolute_time.tv_nsec += relative_time.tv_nsec;
diff --git a/base/threading/platform_thread.h b/base/threading/platform_thread.h
index 7668c1c..c249bc2 100644
--- a/base/threading/platform_thread.h
+++ b/base/threading/platform_thread.h
@@ -18,8 +18,6 @@
 
 #if defined(OS_WIN)
 #include "base/win/windows_types.h"
-#elif defined(OS_FUCHSIA)
-#include <zircon/types.h>
 #elif defined(OS_MACOSX)
 #include <mach/mach_types.h>
 #elif defined(OS_POSIX)
@@ -32,8 +30,6 @@
 // Used for logging. Always an integer value.
 #if defined(OS_WIN)
 typedef DWORD PlatformThreadId;
-#elif defined(OS_FUCHSIA)
-typedef zx_handle_t PlatformThreadId;
 #elif defined(OS_MACOSX)
 typedef mach_port_t PlatformThreadId;
 #elif defined(OS_POSIX)
diff --git a/base/threading/platform_thread_posix.cc b/base/threading/platform_thread_posix.cc
index ce47a30..32a052a 100644
--- a/base/threading/platform_thread_posix.cc
+++ b/base/threading/platform_thread_posix.cc
@@ -22,11 +22,7 @@
 #include <sys/syscall.h>
 #endif
 
-#if defined(OS_FUCHSIA)
-#include <zircon/process.h>
-#else
 #include <sys/resource.h>
-#endif
 
 namespace base {
 
@@ -114,21 +110,8 @@
   return pthread_mach_thread_np(pthread_self());
 #elif defined(OS_LINUX)
   return syscall(__NR_gettid);
-#elif defined(OS_ANDROID)
-  return gettid();
-#elif defined(OS_FUCHSIA)
-  return zx_thread_self();
-#elif defined(OS_SOLARIS) || defined(OS_QNX)
-  return pthread_self();
-#elif defined(OS_NACL) && defined(__GLIBC__)
-  return pthread_self();
-#elif defined(OS_NACL) && !defined(__GLIBC__)
-  // Pointers are 32-bits in NaCl.
-  return reinterpret_cast<int32_t>(pthread_self());
-#elif defined(OS_POSIX) && defined(OS_AIX)
-  return pthread_self();
-#elif defined(OS_POSIX) && !defined(OS_AIX)
-  return reinterpret_cast<int64_t>(pthread_self());
+#else
+#error
 #endif
 }
 
diff --git a/base/time/time.h b/base/time/time.h
index a760c55..936c746 100644
--- a/base/time/time.h
+++ b/base/time/time.h
@@ -63,21 +63,13 @@
 #include "base/numerics/safe_math.h"
 #include "build_config.h"
 
-#if defined(OS_FUCHSIA)
-#include <zircon/types.h>
-#endif
-
 #if defined(OS_MACOSX)
 #include <CoreFoundation/CoreFoundation.h>
 // Avoid Mac system header macro leak.
 #undef TYPE_BOOL
 #endif
 
-#if defined(OS_ANDROID)
-#include <jni.h>
-#endif
-
-#if defined(OS_POSIX) || defined(OS_FUCHSIA)
+#if defined(OS_POSIX)
 #include <unistd.h>
 #include <sys/time.h>
 #endif
@@ -473,18 +465,9 @@
 #if defined(OS_WIN)
   static constexpr int kExplodedMinYear = 1601;
   static constexpr int kExplodedMaxYear = 30827;
-#elif defined(OS_IOS)
-  static constexpr int kExplodedMinYear = std::numeric_limits<int>::min();
-  static constexpr int kExplodedMaxYear = std::numeric_limits<int>::max();
 #elif defined(OS_MACOSX)
   static constexpr int kExplodedMinYear = 1902;
   static constexpr int kExplodedMaxYear = std::numeric_limits<int>::max();
-#elif defined(OS_ANDROID)
-  // Though we use 64-bit time APIs on both 32 and 64 bit Android, some OS
-  // versions like KitKat (ARM but not x86 emulator) can't handle some early
-  // dates (e.g. before 1170). So we set min conservatively here.
-  static constexpr int kExplodedMinYear = 1902;
-  static constexpr int kExplodedMaxYear = std::numeric_limits<int>::max();
 #else
   static constexpr int kExplodedMinYear =
       (sizeof(time_t) == 4 ? 1902 : std::numeric_limits<int>::min());
@@ -840,12 +823,6 @@
   // considered to have an ambiguous ordering.)
   static bool IsConsistentAcrossProcesses() WARN_UNUSED_RESULT;
 
-#if defined(OS_FUCHSIA)
-  // Converts between TimeTicks and an ZX_CLOCK_MONOTONIC zx_time_t value.
-  static TimeTicks FromZxTime(zx_time_t nanos_since_boot);
-  zx_time_t ToZxTime() const;
-#endif
-
 #if defined(OS_WIN)
   // Translates an absolute QPC timestamp into a TimeTicks value. The returned
   // value has the same origin as Now(). Do NOT attempt to use this if
@@ -857,14 +834,6 @@
   static TimeTicks FromMachAbsoluteTime(uint64_t mach_absolute_time);
 #endif  // defined(OS_MACOSX) && !defined(OS_IOS)
 
-#if defined(OS_ANDROID)
-  // Converts to TimeTicks the value obtained from SystemClock.uptimeMillis().
-  // Note: this convertion may be non-monotonic in relation to previously
-  // obtained TimeTicks::Now() values because of the truncation (to
-  // milliseconds) performed by uptimeMillis().
-  static TimeTicks FromUptimeMillis(jlong uptime_millis_value);
-#endif
-
   // Get an estimate of the TimeTick value at the time of the UnixEpoch. Because
   // Time and TimeTicks respond differently to user-set time and NTP
   // adjustments, this number is only an estimate. Nevertheless, this can be
diff --git a/base/time/time_exploded_posix.cc b/base/time/time_exploded_posix.cc
index 26eaed9..ae1b4df 100644
--- a/base/time/time_exploded_posix.cc
+++ b/base/time/time_exploded_posix.cc
@@ -34,68 +34,6 @@
 // Define a system-specific SysTime that wraps either to a time_t or
 // a time64_t depending on the host system, and associated convertion.
 // See crbug.com/162007
-#if defined(OS_ANDROID) && !defined(__LP64__)
-typedef time64_t SysTime;
-
-SysTime SysTimeFromTimeStruct(struct tm* timestruct, bool is_local) {
-  base::AutoLock locked(*GetSysTimeToTimeStructLock());
-  if (is_local)
-    return mktime64(timestruct);
-  else
-    return timegm64(timestruct);
-}
-
-void SysTimeToTimeStruct(SysTime t, struct tm* timestruct, bool is_local) {
-  base::AutoLock locked(*GetSysTimeToTimeStructLock());
-  if (is_local)
-    localtime64_r(&t, timestruct);
-  else
-    gmtime64_r(&t, timestruct);
-}
-
-#elif defined(OS_AIX)
-
-// The function timegm is not available on AIX.
-time_t aix_timegm(struct tm* tm) {
-  time_t ret;
-  char* tz;
-
-  tz = getenv("TZ");
-  if (tz) {
-    tz = strdup(tz);
-  }
-  setenv("TZ", "GMT0", 1);
-  tzset();
-  ret = mktime(tm);
-  if (tz) {
-    setenv("TZ", tz, 1);
-    free(tz);
-  } else {
-    unsetenv("TZ");
-  }
-  tzset();
-  return ret;
-}
-
-typedef time_t SysTime;
-
-SysTime SysTimeFromTimeStruct(struct tm* timestruct, bool is_local) {
-  base::AutoLock locked(*GetSysTimeToTimeStructLock());
-  if (is_local)
-    return mktime(timestruct);
-  else
-    return aix_timegm(timestruct);
-}
-
-void SysTimeToTimeStruct(SysTime t, struct tm* timestruct, bool is_local) {
-  base::AutoLock locked(*GetSysTimeToTimeStructLock());
-  if (is_local)
-    localtime_r(&t, timestruct);
-  else
-    gmtime_r(&t, timestruct);
-}
-
-#else   // OS_ANDROID && !__LP64__
 typedef time_t SysTime;
 
 SysTime SysTimeFromTimeStruct(struct tm* timestruct, bool is_local) {
@@ -113,7 +51,6 @@
   else
     gmtime_r(&t, timestruct);
 }
-#endif  // OS_ANDROID
 
 }  // namespace
 
diff --git a/src/build_config.h b/src/build_config.h
index 89d0ff7..addd7cf 100644
--- a/src/build_config.h
+++ b/src/build_config.h
@@ -179,8 +179,6 @@
 // Type detection for wchar_t.
 #if defined(OS_WIN)
 #define WCHAR_T_IS_UTF16
-#elif defined(OS_FUCHSIA)
-#define WCHAR_T_IS_UTF32
 #elif defined(OS_POSIX) && defined(COMPILER_GCC) && defined(__WCHAR_MAX__) && \
     (__WCHAR_MAX__ == 0x7fffffff || __WCHAR_MAX__ == 0xffffffff)
 #define WCHAR_T_IS_UTF32
@@ -195,13 +193,4 @@
 #error Please add support for your compiler in build_config.h
 #endif
 
-#if defined(OS_ANDROID)
-// The compiler thinks std::string::const_iterator and "const char*" are
-// equivalent types.
-#define STD_STRING_ITERATOR_IS_CHAR_POINTER
-// The compiler thinks base::string16::const_iterator and "char16*" are
-// equivalent types.
-#define BASE_STRING16_ITERATOR_IS_CHAR16_POINTER
-#endif
-
 #endif  // BUILD_BUILD_CONFIG_H_
diff --git a/tools/gn/args.cc b/tools/gn/args.cc
index c7cd60f..f861dd1 100644
--- a/tools/gn/args.cc
+++ b/tools/gn/args.cc
@@ -302,14 +302,6 @@
   os = "mac";
 #elif defined(OS_LINUX)
   os = "linux";
-#elif defined(OS_ANDROID)
-  os = "android";
-#elif defined(OS_NETBSD)
-  os = "netbsd";
-#elif defined(OS_AIX)
-  os = "aix";
-#elif defined(OS_FUCHSIA)
-  os = "fuchsia";
 #else
   #error Unknown OS type.
 #endif
