Remove base/process/launch*

And some unused unittest files.

Change-Id: I9900f676c79644cb0fe1a35a4da6857bc5a5b5bf
Reviewed-on: https://gn-review.googlesource.com/1620
Commit-Queue: Scott Graham <scottmg@chromium.org>
Reviewed-by: Brett Wilson <brettw@chromium.org>
diff --git a/base/linux_util.cc b/base/linux_util.cc
index f2d29ec..1f3ae49 100644
--- a/base/linux_util.cc
+++ b/base/linux_util.cc
@@ -19,7 +19,6 @@
 #include "base/command_line.h"
 #include "base/files/file_util.h"
 #include "base/memory/singleton.h"
-#include "base/process/launch.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_split.h"
 #include "base/strings/string_tokenizer.h"
diff --git a/base/mac/bind_objc_block_unittest.mm b/base/mac/bind_objc_block_unittest.mm
deleted file mode 100644
index 38da5aa..0000000
--- a/base/mac/bind_objc_block_unittest.mm
+++ /dev/null
@@ -1,124 +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.
-
-#import "base/mac/bind_objc_block.h"
-
-#include <string>
-
-#include "base/bind.h"
-#include "base/callback.h"
-#include "base/callback_helpers.h"
-#include "build_config.h"
-#include "testing/gtest/include/gtest/gtest.h"
-#include "testing/gtest_mac.h"
-
-#if defined(OS_IOS)
-#include "base/ios/weak_nsobject.h"
-#include "base/mac/scoped_nsautorelease_pool.h"
-#endif
-
-namespace {
-
-TEST(BindObjcBlockTest, TestScopedClosureRunnerExitScope) {
-  int run_count = 0;
-  int* ptr = &run_count;
-  {
-    base::ScopedClosureRunner runner(base::BindBlock(^{
-        (*ptr)++;
-    }));
-    EXPECT_EQ(0, run_count);
-  }
-  EXPECT_EQ(1, run_count);
-}
-
-TEST(BindObjcBlockTest, TestScopedClosureRunnerRelease) {
-  int run_count = 0;
-  int* ptr = &run_count;
-  base::OnceClosure c;
-  {
-    base::ScopedClosureRunner runner(base::BindBlock(^{
-        (*ptr)++;
-    }));
-    c = runner.Release();
-    EXPECT_EQ(0, run_count);
-  }
-  EXPECT_EQ(0, run_count);
-  std::move(c).Run();
-  EXPECT_EQ(1, run_count);
-}
-
-TEST(BindObjcBlockTest, TestReturnValue) {
-  const int kReturnValue = 42;
-  base::Callback<int(void)> c = base::BindBlock(^{return kReturnValue;});
-  EXPECT_EQ(kReturnValue, c.Run());
-}
-
-TEST(BindObjcBlockTest, TestArgument) {
-  const int kArgument = 42;
-  base::Callback<int(int)> c = base::BindBlock(^(int a){return a + 1;});
-  EXPECT_EQ(kArgument + 1, c.Run(kArgument));
-}
-
-TEST(BindObjcBlockTest, TestTwoArguments) {
-  std::string result;
-  std::string* ptr = &result;
-  base::Callback<void(const std::string&, const std::string&)> c =
-      base::BindBlock(^(const std::string& a, const std::string& b) {
-          *ptr = a + b;
-      });
-  c.Run("forty", "two");
-  EXPECT_EQ(result, "fortytwo");
-}
-
-TEST(BindObjcBlockTest, TestThreeArguments) {
-  std::string result;
-  std::string* ptr = &result;
-  base::Callback<void(const std::string&,
-                      const std::string&,
-                      const std::string&)> c =
-      base::BindBlock(^(const std::string& a,
-                        const std::string& b,
-                        const std::string& c) {
-          *ptr = a + b + c;
-      });
-  c.Run("six", "times", "nine");
-  EXPECT_EQ(result, "sixtimesnine");
-}
-
-TEST(BindObjcBlockTest, TestSixArguments) {
-  std::string result1;
-  std::string* ptr = &result1;
-  int result2;
-  int* ptr2 = &result2;
-  base::Callback<void(int, int, const std::string&, const std::string&,
-                      int, const std::string&)> c =
-      base::BindBlock(^(int a, int b, const std::string& c,
-                        const std::string& d, int e, const std::string& f) {
-          *ptr = c + d + f;
-          *ptr2 = a + b + e;
-      });
-  c.Run(1, 2, "infinite", "improbability", 3, "drive");
-  EXPECT_EQ(result1, "infiniteimprobabilitydrive");
-  EXPECT_EQ(result2, 6);
-}
-
-#if defined(OS_IOS)
-
-TEST(BindObjcBlockTest, TestBlockReleased) {
-  base::WeakNSObject<NSObject> weak_nsobject;
-  {
-    base::mac::ScopedNSAutoreleasePool autorelease_pool;
-    NSObject* nsobject = [[[NSObject alloc] init] autorelease];
-    weak_nsobject.reset(nsobject);
-
-    auto callback = base::BindBlock(^{
-      [nsobject description];
-    });
-  }
-  EXPECT_NSEQ(nil, weak_nsobject);
-}
-
-#endif
-
-}  // namespace
diff --git a/base/mac/bind_objc_block_unittest_arc.mm b/base/mac/bind_objc_block_unittest_arc.mm
deleted file mode 100644
index f5f953d..0000000
--- a/base/mac/bind_objc_block_unittest_arc.mm
+++ /dev/null
@@ -1,125 +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.
-
-#import "base/mac/bind_objc_block.h"
-
-#include <string>
-
-#include "base/bind.h"
-#include "base/callback.h"
-#include "base/callback_helpers.h"
-#include "build_config.h"
-#include "testing/gtest/include/gtest/gtest.h"
-#include "testing/gtest_mac.h"
-
-#if !defined(__has_feature) || !__has_feature(objc_arc)
-#error "This file requires ARC support."
-#endif
-
-namespace {
-
-TEST(BindObjcBlockTestARC, TestScopedClosureRunnerExitScope) {
-  int run_count = 0;
-  int* ptr = &run_count;
-  {
-    base::ScopedClosureRunner runner(base::BindBlockArc(^{
-      (*ptr)++;
-    }));
-    EXPECT_EQ(0, run_count);
-  }
-  EXPECT_EQ(1, run_count);
-}
-
-TEST(BindObjcBlockTestARC, TestScopedClosureRunnerRelease) {
-  int run_count = 0;
-  int* ptr = &run_count;
-  base::OnceClosure c;
-  {
-    base::ScopedClosureRunner runner(base::BindBlockArc(^{
-      (*ptr)++;
-    }));
-    c = runner.Release();
-    EXPECT_EQ(0, run_count);
-  }
-  EXPECT_EQ(0, run_count);
-  std::move(c).Run();
-  EXPECT_EQ(1, run_count);
-}
-
-TEST(BindObjcBlockTestARC, TestReturnValue) {
-  const int kReturnValue = 42;
-  base::Callback<int(void)> c = base::BindBlockArc(^{
-    return kReturnValue;
-  });
-  EXPECT_EQ(kReturnValue, c.Run());
-}
-
-TEST(BindObjcBlockTestARC, TestArgument) {
-  const int kArgument = 42;
-  base::Callback<int(int)> c = base::BindBlockArc(^(int a) {
-    return a + 1;
-  });
-  EXPECT_EQ(kArgument + 1, c.Run(kArgument));
-}
-
-TEST(BindObjcBlockTestARC, TestTwoArguments) {
-  std::string result;
-  std::string* ptr = &result;
-  base::Callback<void(const std::string&, const std::string&)> c =
-      base::BindBlockArc(^(const std::string& a, const std::string& b) {
-        *ptr = a + b;
-      });
-  c.Run("forty", "two");
-  EXPECT_EQ(result, "fortytwo");
-}
-
-TEST(BindObjcBlockTestARC, TestThreeArguments) {
-  std::string result;
-  std::string* ptr = &result;
-  base::Callback<void(const std::string&, const std::string&,
-                      const std::string&)>
-      c = base::BindBlockArc(
-          ^(const std::string& a, const std::string& b, const std::string& c) {
-            *ptr = a + b + c;
-          });
-  c.Run("six", "times", "nine");
-  EXPECT_EQ(result, "sixtimesnine");
-}
-
-TEST(BindObjcBlockTestARC, TestSixArguments) {
-  std::string result1;
-  std::string* ptr = &result1;
-  int result2;
-  int* ptr2 = &result2;
-  base::Callback<void(int, int, const std::string&, const std::string&, int,
-                      const std::string&)>
-      c = base::BindBlockArc(^(int a, int b, const std::string& c,
-                               const std::string& d, int e,
-                               const std::string& f) {
-        *ptr = c + d + f;
-        *ptr2 = a + b + e;
-      });
-  c.Run(1, 2, "infinite", "improbability", 3, "drive");
-  EXPECT_EQ(result1, "infiniteimprobabilitydrive");
-  EXPECT_EQ(result2, 6);
-}
-
-#if defined(OS_IOS)
-
-TEST(BindObjcBlockTestARC, TestBlockReleased) {
-  __weak NSObject* weak_nsobject;
-  @autoreleasepool {
-    NSObject* nsobject = [[NSObject alloc] init];
-    weak_nsobject = nsobject;
-
-    auto callback = base::BindBlockArc(^{
-      [nsobject description];
-    });
-  }
-  EXPECT_NSEQ(nil, weak_nsobject);
-}
-
-#endif
-
-}  // namespace
diff --git a/base/mac/call_with_eh_frame_unittest.mm b/base/mac/call_with_eh_frame_unittest.mm
deleted file mode 100644
index 4dad822..0000000
--- a/base/mac/call_with_eh_frame_unittest.mm
+++ /dev/null
@@ -1,55 +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 "base/mac/call_with_eh_frame.h"
-
-#import <Foundation/Foundation.h>
-
-#include "testing/gtest/include/gtest/gtest.h"
-
-namespace base {
-namespace mac {
-namespace {
-
-class CallWithEHFrameTest : public testing::Test {
- protected:
-  void ThrowException() {
-    @throw [NSException exceptionWithName:@"TestException"
-                                   reason:@"Testing exceptions"
-                                 userInfo:nil];
-  }
-};
-
-// Catching from within the EHFrame is allowed.
-TEST_F(CallWithEHFrameTest, CatchExceptionHigher) {
-  bool __block saw_exception = false;
-  base::mac::CallWithEHFrame(^{
-    @try {
-      ThrowException();
-    } @catch (NSException* exception) {
-      saw_exception = true;
-    }
-  });
-  EXPECT_TRUE(saw_exception);
-}
-
-// Trying to catch an exception outside the EHFrame is blocked.
-TEST_F(CallWithEHFrameTest, CatchExceptionLower) {
-  auto catch_exception_lower = ^{
-    bool saw_exception = false;
-    @try {
-      base::mac::CallWithEHFrame(^{
-        ThrowException();
-      });
-    } @catch (NSException* exception) {
-      saw_exception = true;
-    }
-    ASSERT_FALSE(saw_exception);
-  };
-  EXPECT_DEATH(catch_exception_lower(), "");
-}
-
-}  // namespace
-}  // namespace mac
-}  // namespace base
diff --git a/base/mac/foundation_util_unittest.mm b/base/mac/foundation_util_unittest.mm
deleted file mode 100644
index ce02163..0000000
--- a/base/mac/foundation_util_unittest.mm
+++ /dev/null
@@ -1,405 +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/mac/foundation_util.h"
-
-#include <limits.h>
-#include <stddef.h>
-
-#include "base/compiler_specific.h"
-#include "base/files/file_path.h"
-#include "base/format_macros.h"
-#include "base/mac/scoped_cftyperef.h"
-#include "base/mac/scoped_nsautorelease_pool.h"
-#include "base/macros.h"
-#include "base/strings/stringprintf.h"
-#include "build_config.h"
-#include "testing/gtest/include/gtest/gtest.h"
-#import "testing/gtest_mac.h"
-
-namespace base {
-namespace mac {
-
-TEST(FoundationUtilTest, CFCast) {
-  // Build out the CF types to be tested as empty containers.
-  ScopedCFTypeRef<CFTypeRef> test_array(
-      CFArrayCreate(NULL, NULL, 0, &kCFTypeArrayCallBacks));
-  ScopedCFTypeRef<CFTypeRef> test_array_mutable(
-      CFArrayCreateMutable(NULL, 0, &kCFTypeArrayCallBacks));
-  ScopedCFTypeRef<CFTypeRef> test_bag(
-      CFBagCreate(NULL, NULL, 0, &kCFTypeBagCallBacks));
-  ScopedCFTypeRef<CFTypeRef> test_bag_mutable(
-      CFBagCreateMutable(NULL, 0, &kCFTypeBagCallBacks));
-  CFTypeRef test_bool = kCFBooleanTrue;
-  ScopedCFTypeRef<CFTypeRef> test_data(
-      CFDataCreate(NULL, NULL, 0));
-  ScopedCFTypeRef<CFTypeRef> test_data_mutable(
-      CFDataCreateMutable(NULL, 0));
-  ScopedCFTypeRef<CFTypeRef> test_date(
-      CFDateCreate(NULL, 0));
-  ScopedCFTypeRef<CFTypeRef> test_dict(
-      CFDictionaryCreate(NULL, NULL, NULL, 0,
-                         &kCFCopyStringDictionaryKeyCallBacks,
-                         &kCFTypeDictionaryValueCallBacks));
-  ScopedCFTypeRef<CFTypeRef> test_dict_mutable(
-      CFDictionaryCreateMutable(NULL, 0,
-                                &kCFCopyStringDictionaryKeyCallBacks,
-                                &kCFTypeDictionaryValueCallBacks));
-  int int_val = 256;
-  ScopedCFTypeRef<CFTypeRef> test_number(
-      CFNumberCreate(NULL, kCFNumberIntType, &int_val));
-  CFTypeRef test_null = kCFNull;
-  ScopedCFTypeRef<CFTypeRef> test_set(
-      CFSetCreate(NULL, NULL, 0, &kCFTypeSetCallBacks));
-  ScopedCFTypeRef<CFTypeRef> test_set_mutable(
-      CFSetCreateMutable(NULL, 0, &kCFTypeSetCallBacks));
-  ScopedCFTypeRef<CFTypeRef> test_str(
-      CFStringCreateWithBytes(NULL, NULL, 0, kCFStringEncodingASCII, false));
-  CFTypeRef test_str_const = CFSTR("hello");
-  ScopedCFTypeRef<CFTypeRef> test_str_mutable(CFStringCreateMutable(NULL, 0));
-
-  // Make sure the allocations of CF types are good.
-  EXPECT_TRUE(test_array);
-  EXPECT_TRUE(test_array_mutable);
-  EXPECT_TRUE(test_bag);
-  EXPECT_TRUE(test_bag_mutable);
-  EXPECT_TRUE(test_bool);
-  EXPECT_TRUE(test_data);
-  EXPECT_TRUE(test_data_mutable);
-  EXPECT_TRUE(test_date);
-  EXPECT_TRUE(test_dict);
-  EXPECT_TRUE(test_dict_mutable);
-  EXPECT_TRUE(test_number);
-  EXPECT_TRUE(test_null);
-  EXPECT_TRUE(test_set);
-  EXPECT_TRUE(test_set_mutable);
-  EXPECT_TRUE(test_str);
-  EXPECT_TRUE(test_str_const);
-  EXPECT_TRUE(test_str_mutable);
-
-  // Casting the CFTypeRef objects correctly provides the same pointer.
-  EXPECT_EQ(test_array, CFCast<CFArrayRef>(test_array));
-  EXPECT_EQ(test_array_mutable, CFCast<CFArrayRef>(test_array_mutable));
-  EXPECT_EQ(test_bag, CFCast<CFBagRef>(test_bag));
-  EXPECT_EQ(test_bag_mutable, CFCast<CFBagRef>(test_bag_mutable));
-  EXPECT_EQ(test_bool, CFCast<CFBooleanRef>(test_bool));
-  EXPECT_EQ(test_data, CFCast<CFDataRef>(test_data));
-  EXPECT_EQ(test_data_mutable, CFCast<CFDataRef>(test_data_mutable));
-  EXPECT_EQ(test_date, CFCast<CFDateRef>(test_date));
-  EXPECT_EQ(test_dict, CFCast<CFDictionaryRef>(test_dict));
-  EXPECT_EQ(test_dict_mutable, CFCast<CFDictionaryRef>(test_dict_mutable));
-  EXPECT_EQ(test_number, CFCast<CFNumberRef>(test_number));
-  EXPECT_EQ(test_null, CFCast<CFNullRef>(test_null));
-  EXPECT_EQ(test_set, CFCast<CFSetRef>(test_set));
-  EXPECT_EQ(test_set_mutable, CFCast<CFSetRef>(test_set_mutable));
-  EXPECT_EQ(test_str, CFCast<CFStringRef>(test_str));
-  EXPECT_EQ(test_str_const, CFCast<CFStringRef>(test_str_const));
-  EXPECT_EQ(test_str_mutable, CFCast<CFStringRef>(test_str_mutable));
-
-  // When given an incorrect CF cast, provide NULL.
-  EXPECT_FALSE(CFCast<CFStringRef>(test_array));
-  EXPECT_FALSE(CFCast<CFStringRef>(test_array_mutable));
-  EXPECT_FALSE(CFCast<CFStringRef>(test_bag));
-  EXPECT_FALSE(CFCast<CFSetRef>(test_bag_mutable));
-  EXPECT_FALSE(CFCast<CFSetRef>(test_bool));
-  EXPECT_FALSE(CFCast<CFNullRef>(test_data));
-  EXPECT_FALSE(CFCast<CFDictionaryRef>(test_data_mutable));
-  EXPECT_FALSE(CFCast<CFDictionaryRef>(test_date));
-  EXPECT_FALSE(CFCast<CFNumberRef>(test_dict));
-  EXPECT_FALSE(CFCast<CFDateRef>(test_dict_mutable));
-  EXPECT_FALSE(CFCast<CFDataRef>(test_number));
-  EXPECT_FALSE(CFCast<CFDataRef>(test_null));
-  EXPECT_FALSE(CFCast<CFBooleanRef>(test_set));
-  EXPECT_FALSE(CFCast<CFBagRef>(test_set_mutable));
-  EXPECT_FALSE(CFCast<CFBagRef>(test_str));
-  EXPECT_FALSE(CFCast<CFArrayRef>(test_str_const));
-  EXPECT_FALSE(CFCast<CFArrayRef>(test_str_mutable));
-
-  // Giving a NULL provides a NULL.
-  EXPECT_FALSE(CFCast<CFArrayRef>(NULL));
-  EXPECT_FALSE(CFCast<CFBagRef>(NULL));
-  EXPECT_FALSE(CFCast<CFBooleanRef>(NULL));
-  EXPECT_FALSE(CFCast<CFDataRef>(NULL));
-  EXPECT_FALSE(CFCast<CFDateRef>(NULL));
-  EXPECT_FALSE(CFCast<CFDictionaryRef>(NULL));
-  EXPECT_FALSE(CFCast<CFNullRef>(NULL));
-  EXPECT_FALSE(CFCast<CFNumberRef>(NULL));
-  EXPECT_FALSE(CFCast<CFSetRef>(NULL));
-  EXPECT_FALSE(CFCast<CFStringRef>(NULL));
-
-  // CFCastStrict: correct cast results in correct pointer being returned.
-  EXPECT_EQ(test_array, CFCastStrict<CFArrayRef>(test_array));
-  EXPECT_EQ(test_array_mutable, CFCastStrict<CFArrayRef>(test_array_mutable));
-  EXPECT_EQ(test_bag, CFCastStrict<CFBagRef>(test_bag));
-  EXPECT_EQ(test_bag_mutable, CFCastStrict<CFBagRef>(test_bag_mutable));
-  EXPECT_EQ(test_bool, CFCastStrict<CFBooleanRef>(test_bool));
-  EXPECT_EQ(test_data, CFCastStrict<CFDataRef>(test_data));
-  EXPECT_EQ(test_data_mutable, CFCastStrict<CFDataRef>(test_data_mutable));
-  EXPECT_EQ(test_date, CFCastStrict<CFDateRef>(test_date));
-  EXPECT_EQ(test_dict, CFCastStrict<CFDictionaryRef>(test_dict));
-  EXPECT_EQ(test_dict_mutable,
-            CFCastStrict<CFDictionaryRef>(test_dict_mutable));
-  EXPECT_EQ(test_number, CFCastStrict<CFNumberRef>(test_number));
-  EXPECT_EQ(test_null, CFCastStrict<CFNullRef>(test_null));
-  EXPECT_EQ(test_set, CFCastStrict<CFSetRef>(test_set));
-  EXPECT_EQ(test_set_mutable, CFCastStrict<CFSetRef>(test_set_mutable));
-  EXPECT_EQ(test_str, CFCastStrict<CFStringRef>(test_str));
-  EXPECT_EQ(test_str_const, CFCastStrict<CFStringRef>(test_str_const));
-  EXPECT_EQ(test_str_mutable, CFCastStrict<CFStringRef>(test_str_mutable));
-
-  // CFCastStrict: Giving a NULL provides a NULL.
-  EXPECT_FALSE(CFCastStrict<CFArrayRef>(NULL));
-  EXPECT_FALSE(CFCastStrict<CFBagRef>(NULL));
-  EXPECT_FALSE(CFCastStrict<CFBooleanRef>(NULL));
-  EXPECT_FALSE(CFCastStrict<CFDataRef>(NULL));
-  EXPECT_FALSE(CFCastStrict<CFDateRef>(NULL));
-  EXPECT_FALSE(CFCastStrict<CFDictionaryRef>(NULL));
-  EXPECT_FALSE(CFCastStrict<CFNullRef>(NULL));
-  EXPECT_FALSE(CFCastStrict<CFNumberRef>(NULL));
-  EXPECT_FALSE(CFCastStrict<CFSetRef>(NULL));
-  EXPECT_FALSE(CFCastStrict<CFStringRef>(NULL));
-}
-
-TEST(FoundationUtilTest, ObjCCast) {
-  ScopedNSAutoreleasePool pool;
-
-  id test_array = @[];
-  id test_array_mutable = [NSMutableArray array];
-  id test_data = [NSData data];
-  id test_data_mutable = [NSMutableData dataWithCapacity:10];
-  id test_date = [NSDate date];
-  id test_dict = @{ @"meaning" : @42 };
-  id test_dict_mutable = [NSMutableDictionary dictionaryWithCapacity:10];
-  id test_number = @42;
-  id test_null = [NSNull null];
-  id test_set = [NSSet setWithObject:@"string object"];
-  id test_set_mutable = [NSMutableSet setWithCapacity:10];
-  id test_str = [NSString string];
-  id test_str_const = @"bonjour";
-  id test_str_mutable = [NSMutableString stringWithCapacity:10];
-
-  // Make sure the allocations of NS types are good.
-  EXPECT_TRUE(test_array);
-  EXPECT_TRUE(test_array_mutable);
-  EXPECT_TRUE(test_data);
-  EXPECT_TRUE(test_data_mutable);
-  EXPECT_TRUE(test_date);
-  EXPECT_TRUE(test_dict);
-  EXPECT_TRUE(test_dict_mutable);
-  EXPECT_TRUE(test_number);
-  EXPECT_TRUE(test_null);
-  EXPECT_TRUE(test_set);
-  EXPECT_TRUE(test_set_mutable);
-  EXPECT_TRUE(test_str);
-  EXPECT_TRUE(test_str_const);
-  EXPECT_TRUE(test_str_mutable);
-
-  // Casting the id correctly provides the same pointer.
-  EXPECT_EQ(test_array, ObjCCast<NSArray>(test_array));
-  EXPECT_EQ(test_array_mutable, ObjCCast<NSArray>(test_array_mutable));
-  EXPECT_EQ(test_data, ObjCCast<NSData>(test_data));
-  EXPECT_EQ(test_data_mutable, ObjCCast<NSData>(test_data_mutable));
-  EXPECT_EQ(test_date, ObjCCast<NSDate>(test_date));
-  EXPECT_EQ(test_dict, ObjCCast<NSDictionary>(test_dict));
-  EXPECT_EQ(test_dict_mutable, ObjCCast<NSDictionary>(test_dict_mutable));
-  EXPECT_EQ(test_number, ObjCCast<NSNumber>(test_number));
-  EXPECT_EQ(test_null, ObjCCast<NSNull>(test_null));
-  EXPECT_EQ(test_set, ObjCCast<NSSet>(test_set));
-  EXPECT_EQ(test_set_mutable, ObjCCast<NSSet>(test_set_mutable));
-  EXPECT_EQ(test_str, ObjCCast<NSString>(test_str));
-  EXPECT_EQ(test_str_const, ObjCCast<NSString>(test_str_const));
-  EXPECT_EQ(test_str_mutable, ObjCCast<NSString>(test_str_mutable));
-
-  // When given an incorrect ObjC cast, provide nil.
-  EXPECT_FALSE(ObjCCast<NSString>(test_array));
-  EXPECT_FALSE(ObjCCast<NSString>(test_array_mutable));
-  EXPECT_FALSE(ObjCCast<NSString>(test_data));
-  EXPECT_FALSE(ObjCCast<NSString>(test_data_mutable));
-  EXPECT_FALSE(ObjCCast<NSSet>(test_date));
-  EXPECT_FALSE(ObjCCast<NSSet>(test_dict));
-  EXPECT_FALSE(ObjCCast<NSNumber>(test_dict_mutable));
-  EXPECT_FALSE(ObjCCast<NSNull>(test_number));
-  EXPECT_FALSE(ObjCCast<NSDictionary>(test_null));
-  EXPECT_FALSE(ObjCCast<NSDictionary>(test_set));
-  EXPECT_FALSE(ObjCCast<NSDate>(test_set_mutable));
-  EXPECT_FALSE(ObjCCast<NSData>(test_str));
-  EXPECT_FALSE(ObjCCast<NSData>(test_str_const));
-  EXPECT_FALSE(ObjCCast<NSArray>(test_str_mutable));
-
-  // Giving a nil provides a nil.
-  EXPECT_FALSE(ObjCCast<NSArray>(nil));
-  EXPECT_FALSE(ObjCCast<NSData>(nil));
-  EXPECT_FALSE(ObjCCast<NSDate>(nil));
-  EXPECT_FALSE(ObjCCast<NSDictionary>(nil));
-  EXPECT_FALSE(ObjCCast<NSNull>(nil));
-  EXPECT_FALSE(ObjCCast<NSNumber>(nil));
-  EXPECT_FALSE(ObjCCast<NSSet>(nil));
-  EXPECT_FALSE(ObjCCast<NSString>(nil));
-
-  // ObjCCastStrict: correct cast results in correct pointer being returned.
-  EXPECT_EQ(test_array, ObjCCastStrict<NSArray>(test_array));
-  EXPECT_EQ(test_array_mutable,
-            ObjCCastStrict<NSArray>(test_array_mutable));
-  EXPECT_EQ(test_data, ObjCCastStrict<NSData>(test_data));
-  EXPECT_EQ(test_data_mutable,
-            ObjCCastStrict<NSData>(test_data_mutable));
-  EXPECT_EQ(test_date, ObjCCastStrict<NSDate>(test_date));
-  EXPECT_EQ(test_dict, ObjCCastStrict<NSDictionary>(test_dict));
-  EXPECT_EQ(test_dict_mutable,
-            ObjCCastStrict<NSDictionary>(test_dict_mutable));
-  EXPECT_EQ(test_number, ObjCCastStrict<NSNumber>(test_number));
-  EXPECT_EQ(test_null, ObjCCastStrict<NSNull>(test_null));
-  EXPECT_EQ(test_set, ObjCCastStrict<NSSet>(test_set));
-  EXPECT_EQ(test_set_mutable,
-            ObjCCastStrict<NSSet>(test_set_mutable));
-  EXPECT_EQ(test_str, ObjCCastStrict<NSString>(test_str));
-  EXPECT_EQ(test_str_const,
-            ObjCCastStrict<NSString>(test_str_const));
-  EXPECT_EQ(test_str_mutable,
-            ObjCCastStrict<NSString>(test_str_mutable));
-
-  // ObjCCastStrict: Giving a nil provides a nil.
-  EXPECT_FALSE(ObjCCastStrict<NSArray>(nil));
-  EXPECT_FALSE(ObjCCastStrict<NSData>(nil));
-  EXPECT_FALSE(ObjCCastStrict<NSDate>(nil));
-  EXPECT_FALSE(ObjCCastStrict<NSDictionary>(nil));
-  EXPECT_FALSE(ObjCCastStrict<NSNull>(nil));
-  EXPECT_FALSE(ObjCCastStrict<NSNumber>(nil));
-  EXPECT_FALSE(ObjCCastStrict<NSSet>(nil));
-  EXPECT_FALSE(ObjCCastStrict<NSString>(nil));
-}
-
-TEST(FoundationUtilTest, GetValueFromDictionary) {
-  int one = 1, two = 2, three = 3;
-
-  ScopedCFTypeRef<CFNumberRef> cf_one(
-      CFNumberCreate(kCFAllocatorDefault, kCFNumberIntType, &one));
-  ScopedCFTypeRef<CFNumberRef> cf_two(
-      CFNumberCreate(kCFAllocatorDefault, kCFNumberIntType, &two));
-  ScopedCFTypeRef<CFNumberRef> cf_three(
-      CFNumberCreate(kCFAllocatorDefault, kCFNumberIntType, &three));
-
-  CFStringRef keys[] = { CFSTR("one"), CFSTR("two"), CFSTR("three") };
-  CFNumberRef values[] = { cf_one, cf_two, cf_three };
-
-  static_assert(arraysize(keys) == arraysize(values),
-                "keys and values arrays must have the same size");
-
-  ScopedCFTypeRef<CFDictionaryRef> test_dict(
-      CFDictionaryCreate(kCFAllocatorDefault,
-                         reinterpret_cast<const void**>(keys),
-                         reinterpret_cast<const void**>(values),
-                         arraysize(values),
-                         &kCFCopyStringDictionaryKeyCallBacks,
-                         &kCFTypeDictionaryValueCallBacks));
-
-  // GetValueFromDictionary<>(_, _) should produce the correct
-  // expected output.
-  EXPECT_EQ(values[0],
-            GetValueFromDictionary<CFNumberRef>(test_dict, CFSTR("one")));
-  EXPECT_EQ(values[1],
-            GetValueFromDictionary<CFNumberRef>(test_dict, CFSTR("two")));
-  EXPECT_EQ(values[2],
-            GetValueFromDictionary<CFNumberRef>(test_dict, CFSTR("three")));
-
-  // Bad input should produce bad output.
-  EXPECT_FALSE(GetValueFromDictionary<CFNumberRef>(test_dict, CFSTR("four")));
-  EXPECT_FALSE(GetValueFromDictionary<CFStringRef>(test_dict, CFSTR("one")));
-}
-
-TEST(FoundationUtilTest, FilePathToNSString) {
-  EXPECT_NSEQ(nil, FilePathToNSString(FilePath()));
-  EXPECT_NSEQ(@"/a/b", FilePathToNSString(FilePath("/a/b")));
-}
-
-TEST(FoundationUtilTest, NSStringToFilePath) {
-  EXPECT_EQ(FilePath(), NSStringToFilePath(nil));
-  EXPECT_EQ(FilePath(), NSStringToFilePath(@""));
-  EXPECT_EQ(FilePath("/a/b"), NSStringToFilePath(@"/a/b"));
-}
-
-TEST(FoundationUtilTest, CFRangeToNSRange) {
-  NSRange range_out;
-  EXPECT_TRUE(CFRangeToNSRange(CFRangeMake(10, 5), &range_out));
-  EXPECT_EQ(10UL, range_out.location);
-  EXPECT_EQ(5UL, range_out.length);
-  EXPECT_FALSE(CFRangeToNSRange(CFRangeMake(-1, 5), &range_out));
-  EXPECT_FALSE(CFRangeToNSRange(CFRangeMake(5, -1), &range_out));
-  EXPECT_FALSE(CFRangeToNSRange(CFRangeMake(-1, -1), &range_out));
-  EXPECT_FALSE(CFRangeToNSRange(CFRangeMake(LONG_MAX, LONG_MAX), &range_out));
-  EXPECT_FALSE(CFRangeToNSRange(CFRangeMake(LONG_MIN, LONG_MAX), &range_out));
-}
-
-TEST(StringNumberConversionsTest, FormatNSInteger) {
-  // The PRI[dxu]NS macro assumes that NSInteger is a typedef to "int" on
-  // 32-bit architecture and a typedef to "long" on 64-bit architecture
-  // (respectively "unsigned int" and "unsigned long" for NSUInteger). Use
-  // pointer incompatibility to validate this at compilation.
-#if defined(ARCH_CPU_64_BITS)
-  typedef long FormatNSIntegerAsType;
-  typedef unsigned long FormatNSUIntegerAsType;
-#else
-  typedef int FormatNSIntegerAsType;
-  typedef unsigned int FormatNSUIntegerAsType;
-#endif  // defined(ARCH_CPU_64_BITS)
-
-  NSInteger some_nsinteger;
-  FormatNSIntegerAsType* pointer_to_some_nsinteger = &some_nsinteger;
-  ALLOW_UNUSED_LOCAL(pointer_to_some_nsinteger);
-
-  NSUInteger some_nsuinteger;
-  FormatNSUIntegerAsType* pointer_to_some_nsuinteger = &some_nsuinteger;
-  ALLOW_UNUSED_LOCAL(pointer_to_some_nsuinteger);
-
-  // Check that format specifier works correctly for NSInteger.
-  const struct {
-    NSInteger value;
-    const char* expected;
-    const char* expected_hex;
-  } nsinteger_cases[] = {
-#if !defined(ARCH_CPU_64_BITS)
-    {12345678, "12345678", "bc614e"},
-    {-12345678, "-12345678", "ff439eb2"},
-#else
-    {12345678, "12345678", "bc614e"},
-    {-12345678, "-12345678", "ffffffffff439eb2"},
-    {137451299150l, "137451299150", "2000bc614e"},
-    {-137451299150l, "-137451299150", "ffffffdfff439eb2"},
-#endif  // !defined(ARCH_CPU_64_BITS)
-  };
-
-  for (size_t i = 0; i < arraysize(nsinteger_cases); ++i) {
-    EXPECT_EQ(nsinteger_cases[i].expected,
-              StringPrintf("%" PRIdNS, nsinteger_cases[i].value));
-    EXPECT_EQ(nsinteger_cases[i].expected_hex,
-              StringPrintf("%" PRIxNS, nsinteger_cases[i].value));
-  }
-
-  // Check that format specifier works correctly for NSUInteger.
-  const struct {
-    NSUInteger value;
-    const char* expected;
-    const char* expected_hex;
-  } nsuinteger_cases[] = {
-#if !defined(ARCH_CPU_64_BITS)
-    {12345678u, "12345678", "bc614e"},
-    {4282621618u, "4282621618", "ff439eb2"},
-#else
-    {12345678u, "12345678", "bc614e"},
-    {4282621618u, "4282621618", "ff439eb2"},
-    {137451299150ul, "137451299150", "2000bc614e"},
-    {18446743936258252466ul, "18446743936258252466", "ffffffdfff439eb2"},
-#endif  // !defined(ARCH_CPU_64_BITS)
-  };
-
-  for (size_t i = 0; i < arraysize(nsuinteger_cases); ++i) {
-    EXPECT_EQ(nsuinteger_cases[i].expected,
-              StringPrintf("%" PRIuNS, nsuinteger_cases[i].value));
-    EXPECT_EQ(nsuinteger_cases[i].expected_hex,
-              StringPrintf("%" PRIxNS, nsuinteger_cases[i].value));
-  }
-}
-
-}  // namespace mac
-}  // namespace base
diff --git a/base/mac/mac_util_unittest.mm b/base/mac/mac_util_unittest.mm
deleted file mode 100644
index 266d1c4..0000000
--- a/base/mac/mac_util_unittest.mm
+++ /dev/null
@@ -1,299 +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.
-
-#import <Cocoa/Cocoa.h>
-#include <stddef.h>
-#include <stdint.h>
-
-#include "base/mac/mac_util.h"
-
-#include "base/files/file_path.h"
-#include "base/files/file_util.h"
-#include "base/files/scoped_temp_dir.h"
-#include "base/mac/foundation_util.h"
-#include "base/mac/scoped_cftyperef.h"
-#include "base/mac/scoped_nsobject.h"
-#include "base/macros.h"
-#include "base/sys_info.h"
-#include "testing/gtest/include/gtest/gtest.h"
-#include "testing/platform_test.h"
-
-#include <errno.h>
-#include <sys/xattr.h>
-
-namespace base {
-namespace mac {
-
-namespace {
-
-typedef PlatformTest MacUtilTest;
-
-TEST_F(MacUtilTest, GetUserDirectoryTest) {
-  // Try a few keys, make sure they come back with non-empty paths.
-  FilePath caches_dir;
-  EXPECT_TRUE(GetUserDirectory(NSCachesDirectory, &caches_dir));
-  EXPECT_FALSE(caches_dir.empty());
-
-  FilePath application_support_dir;
-  EXPECT_TRUE(GetUserDirectory(NSApplicationSupportDirectory,
-                               &application_support_dir));
-  EXPECT_FALSE(application_support_dir.empty());
-
-  FilePath library_dir;
-  EXPECT_TRUE(GetUserDirectory(NSLibraryDirectory, &library_dir));
-  EXPECT_FALSE(library_dir.empty());
-}
-
-TEST_F(MacUtilTest, TestLibraryPath) {
-  FilePath library_dir = GetUserLibraryPath();
-  // Make sure the string isn't empty.
-  EXPECT_FALSE(library_dir.value().empty());
-}
-
-TEST_F(MacUtilTest, TestGetAppBundlePath) {
-  FilePath out;
-
-  // Make sure it doesn't crash.
-  out = GetAppBundlePath(FilePath());
-  EXPECT_TRUE(out.empty());
-
-  // Some more invalid inputs.
-  const char* const invalid_inputs[] = {
-    "/", "/foo", "foo", "/foo/bar.", "foo/bar.", "/foo/bar./bazquux",
-    "foo/bar./bazquux", "foo/.app", "//foo",
-  };
-  for (size_t i = 0; i < arraysize(invalid_inputs); i++) {
-    out = GetAppBundlePath(FilePath(invalid_inputs[i]));
-    EXPECT_TRUE(out.empty()) << "loop: " << i;
-  }
-
-  // Some valid inputs; this and |expected_outputs| should be in sync.
-  struct {
-    const char *in;
-    const char *expected_out;
-  } valid_inputs[] = {
-    { "FooBar.app/", "FooBar.app" },
-    { "/FooBar.app", "/FooBar.app" },
-    { "/FooBar.app/", "/FooBar.app" },
-    { "//FooBar.app", "//FooBar.app" },
-    { "/Foo/Bar.app", "/Foo/Bar.app" },
-    { "/Foo/Bar.app/", "/Foo/Bar.app" },
-    { "/F/B.app", "/F/B.app" },
-    { "/F/B.app/", "/F/B.app" },
-    { "/Foo/Bar.app/baz", "/Foo/Bar.app" },
-    { "/Foo/Bar.app/baz/", "/Foo/Bar.app" },
-    { "/Foo/Bar.app/baz/quux.app/quuux", "/Foo/Bar.app" },
-    { "/Applications/Google Foo.app/bar/Foo Helper.app/quux/Foo Helper",
-        "/Applications/Google Foo.app" },
-  };
-  for (size_t i = 0; i < arraysize(valid_inputs); i++) {
-    out = GetAppBundlePath(FilePath(valid_inputs[i].in));
-    EXPECT_FALSE(out.empty()) << "loop: " << i;
-    EXPECT_STREQ(valid_inputs[i].expected_out,
-        out.value().c_str()) << "loop: " << i;
-  }
-}
-
-// http://crbug.com/425745
-TEST_F(MacUtilTest, DISABLED_TestExcludeFileFromBackups) {
-  // The file must already exist in order to set its exclusion property.
-  ScopedTempDir temp_dir_;
-  ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
-  FilePath dummy_file_path = temp_dir_.GetPath().Append("DummyFile");
-  const char dummy_data[] = "All your base are belong to us!";
-  // Dump something real into the file.
-  ASSERT_EQ(static_cast<int>(arraysize(dummy_data)),
-            WriteFile(dummy_file_path, dummy_data, arraysize(dummy_data)));
-  NSString* fileURLString =
-      [NSString stringWithUTF8String:dummy_file_path.value().c_str()];
-  NSURL* fileURL = [NSURL URLWithString:fileURLString];
-  // Initial state should be non-excluded.
-  EXPECT_FALSE(CSBackupIsItemExcluded(base::mac::NSToCFCast(fileURL), NULL));
-  // Exclude the file.
-  EXPECT_TRUE(SetFileBackupExclusion(dummy_file_path));
-  // SetFileBackupExclusion never excludes by path.
-  Boolean excluded_by_path = FALSE;
-  Boolean excluded =
-      CSBackupIsItemExcluded(base::mac::NSToCFCast(fileURL), &excluded_by_path);
-  EXPECT_TRUE(excluded);
-  EXPECT_FALSE(excluded_by_path);
-}
-
-TEST_F(MacUtilTest, NSObjectRetainRelease) {
-  base::scoped_nsobject<NSArray> array(
-      [[NSArray alloc] initWithObjects:@"foo", nil]);
-  EXPECT_EQ(1U, [array retainCount]);
-
-  NSObjectRetain(array);
-  EXPECT_EQ(2U, [array retainCount]);
-
-  NSObjectRelease(array);
-  EXPECT_EQ(1U, [array retainCount]);
-}
-
-TEST_F(MacUtilTest, IsOSEllipsis) {
-  int32_t major, minor, bugfix;
-  base::SysInfo::OperatingSystemVersionNumbers(&major, &minor, &bugfix);
-
-  if (major == 10) {
-    if (minor == 9) {
-      EXPECT_TRUE(IsOS10_9());
-      EXPECT_TRUE(IsAtMostOS10_9());
-      EXPECT_TRUE(IsAtLeastOS10_9());
-      EXPECT_FALSE(IsOS10_10());
-      EXPECT_TRUE(IsAtMostOS10_10());
-      EXPECT_FALSE(IsAtLeastOS10_10());
-      EXPECT_FALSE(IsOS10_11());
-      EXPECT_TRUE(IsAtMostOS10_11());
-      EXPECT_FALSE(IsAtLeastOS10_11());
-      EXPECT_FALSE(IsOS10_12());
-      EXPECT_FALSE(IsAtLeastOS10_12());
-      EXPECT_TRUE(IsAtMostOS10_12());
-      EXPECT_FALSE(IsOS10_13());
-      EXPECT_FALSE(IsAtLeastOS10_13());
-      EXPECT_TRUE(IsAtMostOS10_13());
-      EXPECT_FALSE(IsOSLaterThan10_13_DontCallThis());
-    } else if (minor == 10) {
-      EXPECT_FALSE(IsOS10_9());
-      EXPECT_FALSE(IsAtMostOS10_9());
-      EXPECT_TRUE(IsAtLeastOS10_9());
-      EXPECT_TRUE(IsOS10_10());
-      EXPECT_TRUE(IsAtMostOS10_10());
-      EXPECT_TRUE(IsAtLeastOS10_10());
-      EXPECT_FALSE(IsOS10_11());
-      EXPECT_TRUE(IsAtMostOS10_11());
-      EXPECT_FALSE(IsAtLeastOS10_11());
-      EXPECT_FALSE(IsOS10_12());
-      EXPECT_FALSE(IsAtLeastOS10_12());
-      EXPECT_TRUE(IsAtMostOS10_12());
-      EXPECT_FALSE(IsOS10_13());
-      EXPECT_FALSE(IsAtLeastOS10_13());
-      EXPECT_TRUE(IsAtMostOS10_13());
-      EXPECT_FALSE(IsOSLaterThan10_13_DontCallThis());
-    } else if (minor == 11) {
-      EXPECT_FALSE(IsOS10_9());
-      EXPECT_FALSE(IsAtMostOS10_9());
-      EXPECT_TRUE(IsAtLeastOS10_9());
-      EXPECT_FALSE(IsOS10_10());
-      EXPECT_FALSE(IsAtMostOS10_10());
-      EXPECT_TRUE(IsAtLeastOS10_10());
-      EXPECT_TRUE(IsOS10_11());
-      EXPECT_TRUE(IsAtMostOS10_11());
-      EXPECT_TRUE(IsAtLeastOS10_11());
-      EXPECT_FALSE(IsOS10_12());
-      EXPECT_FALSE(IsAtLeastOS10_12());
-      EXPECT_TRUE(IsAtMostOS10_12());
-      EXPECT_FALSE(IsOS10_13());
-      EXPECT_FALSE(IsAtLeastOS10_13());
-      EXPECT_TRUE(IsAtMostOS10_13());
-      EXPECT_FALSE(IsOSLaterThan10_13_DontCallThis());
-    } else if (minor == 12) {
-      EXPECT_FALSE(IsOS10_9());
-      EXPECT_FALSE(IsAtMostOS10_9());
-      EXPECT_TRUE(IsAtLeastOS10_9());
-      EXPECT_FALSE(IsOS10_10());
-      EXPECT_FALSE(IsAtMostOS10_10());
-      EXPECT_TRUE(IsAtLeastOS10_10());
-      EXPECT_FALSE(IsOS10_11());
-      EXPECT_FALSE(IsAtMostOS10_11());
-      EXPECT_TRUE(IsAtLeastOS10_11());
-      EXPECT_TRUE(IsOS10_12());
-      EXPECT_TRUE(IsAtMostOS10_12());
-      EXPECT_TRUE(IsAtLeastOS10_12());
-      EXPECT_FALSE(IsOS10_13());
-      EXPECT_FALSE(IsAtLeastOS10_13());
-      EXPECT_TRUE(IsAtMostOS10_13());
-      EXPECT_FALSE(IsOSLaterThan10_13_DontCallThis());
-    } else if (minor == 13) {
-      EXPECT_FALSE(IsOS10_9());
-      EXPECT_FALSE(IsAtMostOS10_9());
-      EXPECT_TRUE(IsAtLeastOS10_9());
-      EXPECT_FALSE(IsOS10_10());
-      EXPECT_FALSE(IsAtMostOS10_10());
-      EXPECT_TRUE(IsAtLeastOS10_10());
-      EXPECT_FALSE(IsOS10_11());
-      EXPECT_FALSE(IsAtMostOS10_11());
-      EXPECT_TRUE(IsAtLeastOS10_11());
-      EXPECT_FALSE(IsOS10_12());
-      EXPECT_FALSE(IsAtMostOS10_12());
-      EXPECT_TRUE(IsAtLeastOS10_12());
-      EXPECT_TRUE(IsOS10_13());
-      EXPECT_TRUE(IsAtLeastOS10_13());
-      EXPECT_TRUE(IsAtMostOS10_13());
-      EXPECT_FALSE(IsOSLaterThan10_13_DontCallThis());
-    } else {
-      // Not nine, ten, eleven, twelve, or thirteen. Ah, ah, ah.
-      EXPECT_TRUE(false);
-    }
-  } else {
-    // Not ten. What you gonna do?
-    EXPECT_FALSE(true);
-  }
-}
-
-TEST_F(MacUtilTest, ParseModelIdentifier) {
-  std::string model;
-  int32_t major = 1, minor = 2;
-
-  EXPECT_FALSE(ParseModelIdentifier("", &model, &major, &minor));
-  EXPECT_EQ(0U, model.length());
-  EXPECT_EQ(1, major);
-  EXPECT_EQ(2, minor);
-  EXPECT_FALSE(ParseModelIdentifier("FooBar", &model, &major, &minor));
-
-  EXPECT_TRUE(ParseModelIdentifier("MacPro4,1", &model, &major, &minor));
-  EXPECT_EQ(model, "MacPro");
-  EXPECT_EQ(4, major);
-  EXPECT_EQ(1, minor);
-
-  EXPECT_TRUE(ParseModelIdentifier("MacBookPro6,2", &model, &major, &minor));
-  EXPECT_EQ(model, "MacBookPro");
-  EXPECT_EQ(6, major);
-  EXPECT_EQ(2, minor);
-}
-
-TEST_F(MacUtilTest, TestRemoveQuarantineAttribute) {
-  ScopedTempDir temp_dir_;
-  ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
-  FilePath dummy_folder_path = temp_dir_.GetPath().Append("DummyFolder");
-  ASSERT_TRUE(base::CreateDirectory(dummy_folder_path));
-  const char* quarantine_str = "0000;4b392bb2;Chromium;|org.chromium.Chromium";
-  const char* file_path_str = dummy_folder_path.value().c_str();
-  EXPECT_EQ(0, setxattr(file_path_str, "com.apple.quarantine",
-      quarantine_str, strlen(quarantine_str), 0, 0));
-  EXPECT_EQ(static_cast<long>(strlen(quarantine_str)),
-      getxattr(file_path_str, "com.apple.quarantine",
-          NULL, 0, 0, 0));
-  EXPECT_TRUE(RemoveQuarantineAttribute(dummy_folder_path));
-  EXPECT_EQ(-1, getxattr(file_path_str, "com.apple.quarantine", NULL, 0, 0, 0));
-  EXPECT_EQ(ENOATTR, errno);
-}
-
-TEST_F(MacUtilTest, TestRemoveQuarantineAttributeTwice) {
-  ScopedTempDir temp_dir_;
-  ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
-  FilePath dummy_folder_path = temp_dir_.GetPath().Append("DummyFolder");
-  const char* file_path_str = dummy_folder_path.value().c_str();
-  ASSERT_TRUE(base::CreateDirectory(dummy_folder_path));
-  EXPECT_EQ(-1, getxattr(file_path_str, "com.apple.quarantine", NULL, 0, 0, 0));
-  // No quarantine attribute to begin with, but RemoveQuarantineAttribute still
-  // succeeds because in the end the folder still doesn't have the quarantine
-  // attribute set.
-  EXPECT_TRUE(RemoveQuarantineAttribute(dummy_folder_path));
-  EXPECT_TRUE(RemoveQuarantineAttribute(dummy_folder_path));
-  EXPECT_EQ(ENOATTR, errno);
-}
-
-TEST_F(MacUtilTest, TestRemoveQuarantineAttributeNonExistentPath) {
-  ScopedTempDir temp_dir_;
-  ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
-  FilePath non_existent_path = temp_dir_.GetPath().Append("DummyPath");
-  ASSERT_FALSE(PathExists(non_existent_path));
-  EXPECT_FALSE(RemoveQuarantineAttribute(non_existent_path));
-}
-
-}  // namespace
-
-}  // namespace mac
-}  // namespace base
diff --git a/base/mac/objc_release_properties_unittest.mm b/base/mac/objc_release_properties_unittest.mm
deleted file mode 100644
index 2d90127..0000000
--- a/base/mac/objc_release_properties_unittest.mm
+++ /dev/null
@@ -1,375 +0,0 @@
-// Copyright 2016 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/mac/objc_release_properties.h"
-#include "base/stl_util.h"
-
-#import "base/mac/scoped_nsautorelease_pool.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-#import <objc/runtime.h>
-
-// "When I'm alone, I count myself."
-//   --Count von Count, http://www.youtube.com/watch?v=FKzszqa9WA4
-
-namespace {
-
-// The number of CountVonCounts outstanding.
-int ah_ah_ah;
-
-// NumberHolder exists to exercise the property attribute string parser by
-// providing a named struct and an anonymous union.
-struct NumberHolder {
-  union {
-    long long sixty_four;
-    int thirty_two;
-    short sixteen;
-    char eight;
-  } what;
-  enum { SIXTY_FOUR, THIRTY_TWO, SIXTEEN, EIGHT } how;
-};
-
-}  // namespace
-
-@interface CountVonCount : NSObject<NSCopying>
-
-+ (CountVonCount*)countVonCount;
-
-@end  // @interface CountVonCount
-
-@implementation CountVonCount
-
-+ (CountVonCount*)countVonCount {
-  return [[[CountVonCount alloc] init] autorelease];
-}
-
-- (id)init {
-  ++ah_ah_ah;
-  return [super init];
-}
-
-- (void)dealloc {
-  --ah_ah_ah;
-  [super dealloc];
-}
-
-- (id)copyWithZone:(NSZone*)zone {
-  return [[CountVonCount allocWithZone:zone] init];
-}
-
-@end  // @implementation CountVonCount
-
-@interface ObjCPropertyTestBase : NSObject {
- @private
-  CountVonCount* baseCvcRetain_;
-  CountVonCount* baseCvcCopy_;
-  CountVonCount* baseCvcAssign_;
-  CountVonCount* baseCvcNotProperty_;
-  CountVonCount* baseCvcNil_;
-  CountVonCount* baseCvcCustom_;
-  int baseInt_;
-  double baseDouble_;
-  void* basePointer_;
-  NumberHolder baseStruct_;
-}
-
-@property(retain, nonatomic) CountVonCount* baseCvcRetain;
-@property(copy, nonatomic) CountVonCount* baseCvcCopy;
-@property(assign, nonatomic) CountVonCount* baseCvcAssign;
-@property(retain, nonatomic) CountVonCount* baseCvcNil;
-@property(retain, nonatomic, getter=baseCustom, setter=setBaseCustom:)
-    CountVonCount* baseCvcCustom;
-@property(readonly, retain, nonatomic) CountVonCount* baseCvcReadOnly;
-@property(retain, nonatomic) CountVonCount* baseCvcDynamic;
-@property(assign, nonatomic) int baseInt;
-@property(assign, nonatomic) double baseDouble;
-@property(assign, nonatomic) void* basePointer;
-@property(assign, nonatomic) NumberHolder baseStruct;
-
-- (void)setBaseCvcNotProperty:(CountVonCount*)cvc;
-
-@end  // @interface ObjCPropertyTestBase
-
-@implementation ObjCPropertyTestBase
-
-@synthesize baseCvcRetain = baseCvcRetain_;
-@synthesize baseCvcCopy = baseCvcCopy_;
-@synthesize baseCvcAssign = baseCvcAssign_;
-@synthesize baseCvcNil = baseCvcNil_;
-@synthesize baseCvcCustom = baseCvcCustom_;
-@synthesize baseCvcReadOnly = baseCvcReadOnly_;
-@dynamic baseCvcDynamic;
-@synthesize baseInt = baseInt_;
-@synthesize baseDouble = baseDouble_;
-@synthesize basePointer = basePointer_;
-@synthesize baseStruct = baseStruct_;
-
-- (void)dealloc {
-  [baseCvcNotProperty_ release];
-  base::mac::ReleaseProperties(self);
-  [super dealloc];
-}
-
-- (void)setBaseCvcNotProperty:(CountVonCount*)cvc {
-  if (cvc != baseCvcNotProperty_) {
-    [baseCvcNotProperty_ release];
-    baseCvcNotProperty_ = [cvc retain];
-  }
-}
-
-- (void)setBaseCvcReadOnlyProperty:(CountVonCount*)cvc {
-  if (cvc != baseCvcReadOnly_) {
-    [baseCvcReadOnly_ release];
-    baseCvcReadOnly_ = [cvc retain];
-  }
-}
-
-@end  // @implementation ObjCPropertyTestBase
-
-@protocol ObjCPropertyTestProtocol
-
-@property(retain, nonatomic) CountVonCount* protoCvcRetain;
-@property(copy, nonatomic) CountVonCount* protoCvcCopy;
-@property(assign, nonatomic) CountVonCount* protoCvcAssign;
-@property(retain, nonatomic) CountVonCount* protoCvcNil;
-@property(retain, nonatomic, getter=protoCustom, setter=setProtoCustom:)
-    CountVonCount* protoCvcCustom;
-@property(retain, nonatomic) CountVonCount* protoCvcDynamic;
-@property(assign, nonatomic) int protoInt;
-@property(assign, nonatomic) double protoDouble;
-@property(assign, nonatomic) void* protoPointer;
-@property(assign, nonatomic) NumberHolder protoStruct;
-
-@end  // @protocol ObjCPropertyTestProtocol
-
-// @protocol(NSObject) declares some (copy, readonly) properties (superclass,
-// description, debugDescription, and hash), but we're not expected to release
-// them. The current implementation only releases properties backed by instance
-// variables, and this makes sure that doesn't change in a breaking way.
-@interface ObjCPropertyTestDerived
-    : ObjCPropertyTestBase<ObjCPropertyTestProtocol, NSObject> {
- @private
-  CountVonCount* derivedCvcRetain_;
-  CountVonCount* derivedCvcCopy_;
-  CountVonCount* derivedCvcAssign_;
-  CountVonCount* derivedCvcNotProperty_;
-  CountVonCount* derivedCvcNil_;
-  CountVonCount* derivedCvcCustom_;
-  int derivedInt_;
-  double derivedDouble_;
-  void* derivedPointer_;
-  NumberHolder derivedStruct_;
-
-  CountVonCount* protoCvcRetain_;
-  CountVonCount* protoCvcCopy_;
-  CountVonCount* protoCvcAssign_;
-  CountVonCount* protoCvcNil_;
-  CountVonCount* protoCvcCustom_;
-  int protoInt_;
-  double protoDouble_;
-  void* protoPointer_;
-  NumberHolder protoStruct_;
-}
-
-@property(retain, nonatomic) CountVonCount* derivedCvcRetain;
-@property(copy, nonatomic) CountVonCount* derivedCvcCopy;
-@property(assign, nonatomic) CountVonCount* derivedCvcAssign;
-@property(retain, nonatomic) CountVonCount* derivedCvcNil;
-@property(retain, nonatomic, getter=derivedCustom, setter=setDerivedCustom:)
-    CountVonCount* derivedCvcCustom;
-@property(retain, nonatomic) CountVonCount* derivedCvcDynamic;
-@property(assign, nonatomic) int derivedInt;
-@property(assign, nonatomic) double derivedDouble;
-@property(assign, nonatomic) void* derivedPointer;
-@property(assign, nonatomic) NumberHolder derivedStruct;
-
-- (void)setDerivedCvcNotProperty:(CountVonCount*)cvc;
-
-@end  // @interface ObjCPropertyTestDerived
-
-@implementation ObjCPropertyTestDerived
-
-@synthesize derivedCvcRetain = derivedCvcRetain_;
-@synthesize derivedCvcCopy = derivedCvcCopy_;
-@synthesize derivedCvcAssign = derivedCvcAssign_;
-@synthesize derivedCvcNil = derivedCvcNil_;
-@synthesize derivedCvcCustom = derivedCvcCustom_;
-@dynamic derivedCvcDynamic;
-@synthesize derivedInt = derivedInt_;
-@synthesize derivedDouble = derivedDouble_;
-@synthesize derivedPointer = derivedPointer_;
-@synthesize derivedStruct = derivedStruct_;
-
-@synthesize protoCvcRetain = protoCvcRetain_;
-@synthesize protoCvcCopy = protoCvcCopy_;
-@synthesize protoCvcAssign = protoCvcAssign_;
-@synthesize protoCvcNil = protoCvcNil_;
-@synthesize protoCvcCustom = protoCvcCustom_;
-@dynamic protoCvcDynamic;
-@synthesize protoInt = protoInt_;
-@synthesize protoDouble = protoDouble_;
-@synthesize protoPointer = protoPointer_;
-@synthesize protoStruct = protoStruct_;
-
-+ (BOOL)resolveInstanceMethod:(SEL)sel {
-  static const std::vector<SEL> dynamicMethods {
-    @selector(baseCvcDynamic), @selector(derivedCvcDynamic),
-        @selector(protoCvcDynamic),
-  };
-  if (!base::ContainsValue(dynamicMethods, sel)) {
-    return NO;
-  }
-  id (*imp)() = []() -> id { return nil; };
-  class_addMethod([self class], sel, reinterpret_cast<IMP>(imp), "@@:");
-  return YES;
-}
-
-- (void)dealloc {
-  base::mac::ReleaseProperties(self);
-  [derivedCvcNotProperty_ release];
-  [super dealloc];
-}
-
-- (void)setDerivedCvcNotProperty:(CountVonCount*)cvc {
-  if (cvc != derivedCvcNotProperty_) {
-    [derivedCvcNotProperty_ release];
-    derivedCvcNotProperty_ = [cvc retain];
-  }
-}
-
-@end  // @implementation ObjCPropertyTestDerived
-
-@interface ObjcPropertyTestEmpty : NSObject
-@end
-
-@implementation ObjcPropertyTestEmpty
-
-- (void)dealloc {
-  base::mac::ReleaseProperties(self);
-  [super dealloc];
-}
-
-@end  // @implementation ObjcPropertyTestEmpty
-
-namespace {
-
-TEST(ObjCReleasePropertiesTest, SesameStreet) {
-  ObjCPropertyTestDerived* test_object = [[ObjCPropertyTestDerived alloc] init];
-
-  // Assure a clean slate.
-  EXPECT_EQ(0, ah_ah_ah);
-  EXPECT_EQ(1U, [test_object retainCount]);
-
-  CountVonCount* baseAssign = [[CountVonCount alloc] init];
-  CountVonCount* derivedAssign = [[CountVonCount alloc] init];
-  CountVonCount* protoAssign = [[CountVonCount alloc] init];
-
-  // Make sure that worked before things get more involved.
-  EXPECT_EQ(3, ah_ah_ah);
-
-  {
-    base::mac::ScopedNSAutoreleasePool pool;
-
-    test_object.baseCvcRetain = [CountVonCount countVonCount];
-    test_object.baseCvcCopy = [CountVonCount countVonCount];
-    test_object.baseCvcAssign = baseAssign;
-    test_object.baseCvcCustom = [CountVonCount countVonCount];
-    [test_object setBaseCvcReadOnlyProperty:[CountVonCount countVonCount]];
-    [test_object setBaseCvcNotProperty:[CountVonCount countVonCount]];
-
-    // That added 5 objects, plus 1 more that was copied.
-    EXPECT_EQ(9, ah_ah_ah);
-
-    test_object.derivedCvcRetain = [CountVonCount countVonCount];
-    test_object.derivedCvcCopy = [CountVonCount countVonCount];
-    test_object.derivedCvcAssign = derivedAssign;
-    test_object.derivedCvcCustom = [CountVonCount countVonCount];
-    [test_object setDerivedCvcNotProperty:[CountVonCount countVonCount]];
-
-    // That added 4 objects, plus 1 more that was copied.
-    EXPECT_EQ(14, ah_ah_ah);
-
-    test_object.protoCvcRetain = [CountVonCount countVonCount];
-    test_object.protoCvcCopy = [CountVonCount countVonCount];
-    test_object.protoCvcAssign = protoAssign;
-    test_object.protoCvcCustom = [CountVonCount countVonCount];
-
-    // That added 3 objects, plus 1 more that was copied.
-    EXPECT_EQ(18, ah_ah_ah);
-  }
-
-  // Now that the autorelease pool has been popped, the 3 objects that were
-  // copied when placed into the test object will have been deallocated.
-  EXPECT_EQ(15, ah_ah_ah);
-
-  // Make sure that the setters wo/rk and have the expected semantics.
-  test_object.baseCvcRetain = nil;
-  test_object.baseCvcCopy = nil;
-  test_object.baseCvcAssign = nil;
-  test_object.baseCvcCustom = nil;
-  test_object.derivedCvcRetain = nil;
-  test_object.derivedCvcCopy = nil;
-  test_object.derivedCvcAssign = nil;
-  test_object.derivedCvcCustom = nil;
-  test_object.protoCvcRetain = nil;
-  test_object.protoCvcCopy = nil;
-  test_object.protoCvcAssign = nil;
-  test_object.protoCvcCustom = nil;
-
-  // The CountVonCounts marked "retain" and "copy" should have been
-  // deallocated. Those marked assign should not have been. The only ones that
-  // should exist now are the ones marked "assign", the ones held in
-  // non-property instance variables, and the ones held in properties marked
-  // readonly.
-  EXPECT_EQ(6, ah_ah_ah);
-
-  {
-    base::mac::ScopedNSAutoreleasePool pool;
-
-    // Put things back to how they were.
-    test_object.baseCvcRetain = [CountVonCount countVonCount];
-    test_object.baseCvcCopy = [CountVonCount countVonCount];
-    test_object.baseCvcAssign = baseAssign;
-    test_object.baseCvcCustom = [CountVonCount countVonCount];
-    test_object.derivedCvcRetain = [CountVonCount countVonCount];
-    test_object.derivedCvcCopy = [CountVonCount countVonCount];
-    test_object.derivedCvcAssign = derivedAssign;
-    test_object.derivedCvcCustom = [CountVonCount countVonCount];
-    test_object.protoCvcRetain = [CountVonCount countVonCount];
-    test_object.protoCvcCopy = [CountVonCount countVonCount];
-    test_object.protoCvcAssign = protoAssign;
-    test_object.protoCvcCustom = [CountVonCount countVonCount];
-
-    // 9 more CountVonCounts, 3 of which were copied.
-    EXPECT_EQ(18, ah_ah_ah);
-  }
-
-  // Now that the autorelease pool has been popped, the 3 copies are gone.
-  EXPECT_EQ(15, ah_ah_ah);
-
-  // Releasing the test object should get rid of everything that it owns.
-  [test_object release];
-
-  // base::mac::ReleaseProperties(self) should have released all of the
-  // CountVonCounts associated with properties marked "retain" or "copy". The
-  // -dealloc methods in each should have released the single non-property
-  // objects in each. Only the CountVonCounts assigned to the properties marked
-  // "assign" should remain.
-  EXPECT_EQ(3, ah_ah_ah);
-
-  [baseAssign release];
-  [derivedAssign release];
-  [protoAssign release];
-
-  // Zero! Zero counts! Ah, ah, ah.
-  EXPECT_EQ(0, ah_ah_ah);
-}
-
-TEST(ObjCReleasePropertiesTest, EmptyObject) {
-  // Test that ReleaseProperties doesn't do anything unexpected to a class
-  // with no properties.
-  [[[ObjcPropertyTestEmpty alloc] init] release];
-}
-
-}  // namespace
diff --git a/base/mac/scoped_nsobject_unittest.mm b/base/mac/scoped_nsobject_unittest.mm
deleted file mode 100644
index 72d5242..0000000
--- a/base/mac/scoped_nsobject_unittest.mm
+++ /dev/null
@@ -1,102 +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 <vector>
-
-#include "base/mac/scoped_nsautorelease_pool.h"
-#include "base/mac/scoped_nsobject.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-namespace {
-
-TEST(ScopedNSObjectTest, ScopedNSObject) {
-  base::scoped_nsobject<NSObject> p1([[NSObject alloc] init]);
-  ASSERT_TRUE(p1.get());
-  ASSERT_EQ(1u, [p1 retainCount]);
-  base::scoped_nsobject<NSObject> p2(p1);
-  ASSERT_EQ(p1.get(), p2.get());
-  ASSERT_EQ(2u, [p1 retainCount]);
-  p2.reset();
-  ASSERT_EQ(nil, p2.get());
-  ASSERT_EQ(1u, [p1 retainCount]);
-  {
-    base::scoped_nsobject<NSObject> p3 = p1;
-    ASSERT_EQ(p1.get(), p3.get());
-    ASSERT_EQ(2u, [p1 retainCount]);
-    {
-      base::mac::ScopedNSAutoreleasePool pool;
-      p3 = p1;
-    }
-    ASSERT_EQ(p1.get(), p3.get());
-    ASSERT_EQ(2u, [p1 retainCount]);
-  }
-  ASSERT_EQ(1u, [p1 retainCount]);
-  base::scoped_nsobject<NSObject> p4([p1.get() retain]);
-  ASSERT_EQ(2u, [p1 retainCount]);
-  ASSERT_TRUE(p1 == p1.get());
-  ASSERT_TRUE(p1 == p1);
-  ASSERT_FALSE(p1 != p1);
-  ASSERT_FALSE(p1 != p1.get());
-  base::scoped_nsobject<NSObject> p5([[NSObject alloc] init]);
-  ASSERT_TRUE(p1 != p5);
-  ASSERT_TRUE(p1 != p5.get());
-  ASSERT_FALSE(p1 == p5);
-  ASSERT_FALSE(p1 == p5.get());
-
-  base::scoped_nsobject<NSObject> p6 = p1;
-  ASSERT_EQ(3u, [p6 retainCount]);
-  {
-    base::mac::ScopedNSAutoreleasePool pool;
-    p6.autorelease();
-    ASSERT_EQ(nil, p6.get());
-    ASSERT_EQ(3u, [p1 retainCount]);
-  }
-  ASSERT_EQ(2u, [p1 retainCount]);
-
-  base::scoped_nsobject<NSObject> p7([NSObject new]);
-  base::scoped_nsobject<NSObject> p8(std::move(p7));
-  ASSERT_TRUE(p8);
-  ASSERT_EQ(1u, [p8 retainCount]);
-  ASSERT_FALSE(p7.get());
-}
-
-// Instantiating scoped_nsobject<> with T=NSAutoreleasePool should trip a
-// static_assert.
-#if 0
-TEST(ScopedNSObjectTest, FailToCreateScopedNSObjectAutoreleasePool) {
-  base::scoped_nsobject<NSAutoreleasePool> pool;
-}
-#endif
-
-TEST(ScopedNSObjectTest, ScopedNSObjectInContainer) {
-  base::scoped_nsobject<id> p([[NSObject alloc] init]);
-  ASSERT_TRUE(p.get());
-  ASSERT_EQ(1u, [p retainCount]);
-  {
-    std::vector<base::scoped_nsobject<id>> objects;
-    objects.push_back(p);
-    ASSERT_EQ(2u, [p retainCount]);
-    ASSERT_EQ(p.get(), objects[0].get());
-    objects.push_back(base::scoped_nsobject<id>([[NSObject alloc] init]));
-    ASSERT_TRUE(objects[1].get());
-    ASSERT_EQ(1u, [objects[1] retainCount]);
-  }
-  ASSERT_EQ(1u, [p retainCount]);
-}
-
-TEST(ScopedNSObjectTest, ScopedNSObjectFreeFunctions) {
-  base::scoped_nsobject<id> p1([[NSObject alloc] init]);
-  id o1 = p1.get();
-  ASSERT_TRUE(o1 == p1);
-  ASSERT_FALSE(o1 != p1);
-  base::scoped_nsobject<id> p2([[NSObject alloc] init]);
-  ASSERT_TRUE(o1 != p2);
-  ASSERT_FALSE(o1 == p2);
-  id o2 = p2.get();
-  swap(p1, p2);
-  ASSERT_EQ(o2, p1.get());
-  ASSERT_EQ(o1, p2.get());
-}
-
-}  // namespace
diff --git a/base/mac/scoped_nsobject_unittest_arc.mm b/base/mac/scoped_nsobject_unittest_arc.mm
deleted file mode 100644
index 5cbf3f8..0000000
--- a/base/mac/scoped_nsobject_unittest_arc.mm
+++ /dev/null
@@ -1,131 +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 <vector>
-
-#import <CoreFoundation/CoreFoundation.h>
-
-#include "base/logging.h"
-#import "base/mac/scoped_nsobject.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-#if !defined(__has_feature) || !__has_feature(objc_arc)
-#error "This file requires ARC support."
-#endif
-
-namespace {
-
-template <typename NST>
-CFIndex GetRetainCount(const base::scoped_nsobject<NST>& nst) {
-  @autoreleasepool {
-    return CFGetRetainCount((__bridge CFTypeRef)nst.get()) - 1;
-  }
-}
-
-#if __has_feature(objc_arc_weak)
-TEST(ScopedNSObjectTestARC, DefaultPolicyIsRetain) {
-  __weak id o;
-  @autoreleasepool {
-    base::scoped_nsprotocol<id> p([[NSObject alloc] init]);
-    o = p.get();
-    DCHECK_EQ(o, p.get());
-  }
-  DCHECK_EQ(o, nil);
-}
-#endif
-
-TEST(ScopedNSObjectTestARC, ScopedNSObject) {
-  base::scoped_nsobject<NSObject> p1([[NSObject alloc] init]);
-  @autoreleasepool {
-    EXPECT_TRUE(p1.get());
-    EXPECT_TRUE(p1.get());
-  }
-  EXPECT_EQ(1, GetRetainCount(p1));
-  EXPECT_EQ(1, GetRetainCount(p1));
-  base::scoped_nsobject<NSObject> p2(p1);
-  @autoreleasepool {
-    EXPECT_EQ(p1.get(), p2.get());
-  }
-  EXPECT_EQ(2, GetRetainCount(p1));
-  p2.reset();
-  EXPECT_EQ(nil, p2.get());
-  EXPECT_EQ(1, GetRetainCount(p1));
-  {
-    base::scoped_nsobject<NSObject> p3 = p1;
-    @autoreleasepool {
-      EXPECT_EQ(p1.get(), p3.get());
-    }
-    EXPECT_EQ(2, GetRetainCount(p1));
-    @autoreleasepool {
-      p3 = p1;
-      EXPECT_EQ(p1.get(), p3.get());
-    }
-    EXPECT_EQ(2, GetRetainCount(p1));
-  }
-  EXPECT_EQ(1, GetRetainCount(p1));
-  base::scoped_nsobject<NSObject> p4;
-  @autoreleasepool {
-    p4 = base::scoped_nsobject<NSObject>(p1.get());
-  }
-  EXPECT_EQ(2, GetRetainCount(p1));
-  @autoreleasepool {
-    EXPECT_TRUE(p1 == p1.get());
-    EXPECT_TRUE(p1 == p1);
-    EXPECT_FALSE(p1 != p1);
-    EXPECT_FALSE(p1 != p1.get());
-  }
-  base::scoped_nsobject<NSObject> p5([[NSObject alloc] init]);
-  @autoreleasepool {
-    EXPECT_TRUE(p1 != p5);
-    EXPECT_TRUE(p1 != p5.get());
-    EXPECT_FALSE(p1 == p5);
-    EXPECT_FALSE(p1 == p5.get());
-  }
-
-  base::scoped_nsobject<NSObject> p6 = p1;
-  EXPECT_EQ(3, GetRetainCount(p6));
-  @autoreleasepool {
-    p6.autorelease();
-    EXPECT_EQ(nil, p6.get());
-  }
-  EXPECT_EQ(2, GetRetainCount(p1));
-}
-
-TEST(ScopedNSObjectTestARC, ScopedNSObjectInContainer) {
-  base::scoped_nsobject<id> p([[NSObject alloc] init]);
-  @autoreleasepool {
-    EXPECT_TRUE(p.get());
-  }
-  EXPECT_EQ(1, GetRetainCount(p));
-  @autoreleasepool {
-    std::vector<base::scoped_nsobject<id>> objects;
-    objects.push_back(p);
-    EXPECT_EQ(2, GetRetainCount(p));
-    @autoreleasepool {
-      EXPECT_EQ(p.get(), objects[0].get());
-    }
-    objects.push_back(base::scoped_nsobject<id>([[NSObject alloc] init]));
-    @autoreleasepool {
-      EXPECT_TRUE(objects[1].get());
-    }
-    EXPECT_EQ(1, GetRetainCount(objects[1]));
-  }
-  EXPECT_EQ(1, GetRetainCount(p));
-}
-
-TEST(ScopedNSObjectTestARC, ScopedNSObjectFreeFunctions) {
-  base::scoped_nsobject<id> p1([[NSObject alloc] init]);
-  id o1 = p1.get();
-  EXPECT_TRUE(o1 == p1);
-  EXPECT_FALSE(o1 != p1);
-  base::scoped_nsobject<id> p2([[NSObject alloc] init]);
-  EXPECT_TRUE(o1 != p2);
-  EXPECT_FALSE(o1 == p2);
-  id o2 = p2.get();
-  swap(p1, p2);
-  EXPECT_EQ(o2, p1.get());
-  EXPECT_EQ(o1, p2.get());
-}
-
-}  // namespace
diff --git a/base/mac/scoped_objc_class_swizzler_unittest.mm b/base/mac/scoped_objc_class_swizzler_unittest.mm
deleted file mode 100644
index 79820a3..0000000
--- a/base/mac/scoped_objc_class_swizzler_unittest.mm
+++ /dev/null
@@ -1,167 +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.
-
-#import "base/mac/scoped_objc_class_swizzler.h"
-
-#import "base/mac/scoped_nsobject.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-@interface ObjCClassSwizzlerTestOne : NSObject
-+ (NSInteger)function;
-- (NSInteger)method;
-- (NSInteger)modifier;
-@end
-
-@interface ObjCClassSwizzlerTestTwo : NSObject
-+ (NSInteger)function;
-- (NSInteger)method;
-- (NSInteger)modifier;
-@end
-
-@implementation ObjCClassSwizzlerTestOne : NSObject
-
-+ (NSInteger)function {
-  return 10;
-}
-
-- (NSInteger)method {
-  // Multiply by a modifier to ensure |self| in a swizzled implementation
-  // refers to the original object.
-  return 1 * [self modifier];
-}
-
-- (NSInteger)modifier {
-  return 3;
-}
-
-@end
-
-@implementation ObjCClassSwizzlerTestTwo : NSObject
-
-+ (NSInteger)function {
-  return 20;
-}
-
-- (NSInteger)method {
-  return 2 * [self modifier];
-}
-
-- (NSInteger)modifier {
-  return 7;
-}
-
-@end
-
-@interface ObjCClassSwizzlerTestOne (AlternateCategory)
-- (NSInteger)alternate;
-@end
-
-@implementation ObjCClassSwizzlerTestOne (AlternateCategory)
-- (NSInteger)alternate {
-  return 3 * [self modifier];
-}
-@end
-
-@interface ObjCClassSwizzlerTestOneChild : ObjCClassSwizzlerTestOne
-- (NSInteger)childAlternate;
-@end
-
-@implementation ObjCClassSwizzlerTestOneChild
-- (NSInteger)childAlternate {
-  return 5 * [self modifier];
-}
-@end
-
-namespace base {
-namespace mac {
-
-TEST(ObjCClassSwizzlerTest, SwizzleInstanceMethods) {
-  base::scoped_nsobject<ObjCClassSwizzlerTestOne> object_one(
-      [[ObjCClassSwizzlerTestOne alloc] init]);
-  base::scoped_nsobject<ObjCClassSwizzlerTestTwo> object_two(
-      [[ObjCClassSwizzlerTestTwo alloc] init]);
-  EXPECT_EQ(3, [object_one method]);
-  EXPECT_EQ(14, [object_two method]);
-
-  {
-    base::mac::ScopedObjCClassSwizzler swizzler(
-        [ObjCClassSwizzlerTestOne class],
-        [ObjCClassSwizzlerTestTwo class],
-        @selector(method));
-    EXPECT_EQ(6, [object_one method]);
-    EXPECT_EQ(7, [object_two method]);
-
-    IMP original = swizzler.GetOriginalImplementation();
-    id expected_result = reinterpret_cast<id>(3);
-    EXPECT_EQ(expected_result, original(object_one, @selector(method)));
-  }
-
-  EXPECT_EQ(3, [object_one method]);
-  EXPECT_EQ(14, [object_two method]);
-}
-
-TEST(ObjCClassSwizzlerTest, SwizzleClassMethods) {
-  EXPECT_EQ(10, [ObjCClassSwizzlerTestOne function]);
-  EXPECT_EQ(20, [ObjCClassSwizzlerTestTwo function]);
-
-  {
-    base::mac::ScopedObjCClassSwizzler swizzler(
-        [ObjCClassSwizzlerTestOne class],
-        [ObjCClassSwizzlerTestTwo class],
-        @selector(function));
-    EXPECT_EQ(20, [ObjCClassSwizzlerTestOne function]);
-    EXPECT_EQ(10, [ObjCClassSwizzlerTestTwo function]);
-
-    IMP original = swizzler.GetOriginalImplementation();
-    id expected_result = reinterpret_cast<id>(10);
-    EXPECT_EQ(expected_result,
-              original([ObjCClassSwizzlerTestOne class], @selector(function)));
-  }
-
-  EXPECT_EQ(10, [ObjCClassSwizzlerTestOne function]);
-  EXPECT_EQ(20, [ObjCClassSwizzlerTestTwo function]);
-}
-
-TEST(ObjCClassSwizzlerTest, SwizzleViaCategory) {
-  base::scoped_nsobject<ObjCClassSwizzlerTestOne> object_one(
-      [[ObjCClassSwizzlerTestOne alloc] init]);
-  EXPECT_EQ(3, [object_one method]);
-
-  {
-    base::mac::ScopedObjCClassSwizzler swizzler(
-        [ObjCClassSwizzlerTestOne class],
-        @selector(method),
-        @selector(alternate));
-    EXPECT_EQ(9, [object_one method]);
-
-    IMP original = swizzler.GetOriginalImplementation();
-    id expected_result = reinterpret_cast<id>(3);
-    EXPECT_EQ(expected_result, original(object_one, @selector(method)));
-  }
-
-  EXPECT_EQ(3, [object_one method]);
-}
-
-TEST(ObjCClassSwizzlerTest, SwizzleViaInheritance) {
-  base::scoped_nsobject<ObjCClassSwizzlerTestOneChild> child(
-      [[ObjCClassSwizzlerTestOneChild alloc] init]);
-  EXPECT_EQ(3, [child method]);
-
-  {
-    base::mac::ScopedObjCClassSwizzler swizzler(
-        [ObjCClassSwizzlerTestOneChild class],
-        @selector(method),
-        @selector(childAlternate));
-    EXPECT_EQ(15, [child method]);
-
-    IMP original = swizzler.GetOriginalImplementation();
-    id expected_result = reinterpret_cast<id>(3);
-    EXPECT_EQ(expected_result, original(child, @selector(method)));
-  }
-
-  EXPECT_EQ(3, [child method]);
-}
-
-}  // namespace mac
-}  // namespace base
diff --git a/base/mac/scoped_sending_event_unittest.mm b/base/mac/scoped_sending_event_unittest.mm
deleted file mode 100644
index 52f18c6..0000000
--- a/base/mac/scoped_sending_event_unittest.mm
+++ /dev/null
@@ -1,63 +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.
-
-#import "base/mac/scoped_sending_event.h"
-
-#import <Foundation/Foundation.h>
-
-#include "base/mac/scoped_nsobject.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-@interface ScopedSendingEventTestCrApp : NSApplication <CrAppControlProtocol> {
- @private
-  BOOL handlingSendEvent_;
-}
-@property(nonatomic, assign, getter=isHandlingSendEvent) BOOL handlingSendEvent;
-@end
-
-@implementation ScopedSendingEventTestCrApp
-@synthesize handlingSendEvent = handlingSendEvent_;
-@end
-
-namespace {
-
-class ScopedSendingEventTest : public testing::Test {
- public:
-  ScopedSendingEventTest() : app_([[ScopedSendingEventTestCrApp alloc] init]) {
-    NSApp = app_.get();
-  }
-  ~ScopedSendingEventTest() override { NSApp = nil; }
-
- private:
-  base::scoped_nsobject<ScopedSendingEventTestCrApp> app_;
-};
-
-// Sets the flag within scope, resets when leaving scope.
-TEST_F(ScopedSendingEventTest, SetHandlingSendEvent) {
-  id<CrAppProtocol> app = NSApp;
-  EXPECT_FALSE([app isHandlingSendEvent]);
-  {
-    base::mac::ScopedSendingEvent is_handling_send_event;
-    EXPECT_TRUE([app isHandlingSendEvent]);
-  }
-  EXPECT_FALSE([app isHandlingSendEvent]);
-}
-
-// Nested call restores previous value rather than resetting flag.
-TEST_F(ScopedSendingEventTest, NestedSetHandlingSendEvent) {
-  id<CrAppProtocol> app = NSApp;
-  EXPECT_FALSE([app isHandlingSendEvent]);
-  {
-    base::mac::ScopedSendingEvent is_handling_send_event;
-    EXPECT_TRUE([app isHandlingSendEvent]);
-    {
-      base::mac::ScopedSendingEvent nested_is_handling_send_event;
-      EXPECT_TRUE([app isHandlingSendEvent]);
-    }
-    EXPECT_TRUE([app isHandlingSendEvent]);
-  }
-  EXPECT_FALSE([app isHandlingSendEvent]);
-}
-
-}  // namespace
diff --git a/base/process/launch.cc b/base/process/launch.cc
deleted file mode 100644
index dbb8447..0000000
--- a/base/process/launch.cc
+++ /dev/null
@@ -1,27 +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/launch.h"
-#include "build_config.h"
-
-namespace base {
-
-LaunchOptions::LaunchOptions() = default;
-
-LaunchOptions::LaunchOptions(const LaunchOptions& other) = default;
-
-LaunchOptions::~LaunchOptions() = default;
-
-LaunchOptions LaunchOptionsForTest() {
-  LaunchOptions options;
-#if defined(OS_LINUX)
-  // To prevent accidental privilege sharing to an untrusted child, processes
-  // are started with PR_SET_NO_NEW_PRIVS. Do not set that here, since this
-  // new child will be used for testing only.
-  options.allow_new_privs = true;
-#endif
-  return options;
-}
-
-}  // namespace base
diff --git a/base/process/launch.h b/base/process/launch.h
deleted file mode 100644
index eb53c0f..0000000
--- a/base/process/launch.h
+++ /dev/null
@@ -1,345 +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.
-
-// This file contains functions for launching subprocesses.
-
-#ifndef BASE_PROCESS_LAUNCH_H_
-#define BASE_PROCESS_LAUNCH_H_
-
-#include <stddef.h>
-
-#include <string>
-#include <utility>
-#include <vector>
-
-#include "base/base_export.h"
-#include "base/environment.h"
-#include "base/macros.h"
-#include "base/process/process.h"
-#include "base/process/process_handle.h"
-#include "base/strings/string_piece.h"
-#include "build_config.h"
-
-#if defined(OS_WIN)
-#include <windows.h>
-#endif
-
-#if defined(OS_POSIX)
-#include "base/posix/file_descriptor_shuffle.h"
-#endif
-
-namespace base {
-
-class CommandLine;
-
-#if defined(OS_WIN)
-typedef std::vector<HANDLE> HandlesToInheritVector;
-#elif defined(OS_POSIX)
-typedef std::vector<std::pair<int, int>> FileHandleMappingVector;
-#endif  // defined(OS_WIN)
-
-// Options for launching a subprocess that are passed to LaunchProcess().
-// The default constructor constructs the object with default options.
-struct BASE_EXPORT LaunchOptions {
-#if defined(OS_POSIX)
-  // Delegate to be run in between fork and exec in the subprocess (see
-  // pre_exec_delegate below)
-  class BASE_EXPORT PreExecDelegate {
-   public:
-    PreExecDelegate() = default;
-    virtual ~PreExecDelegate() = default;
-
-    // Since this is to be run between fork and exec, and fork may have happened
-    // while multiple threads were running, this function needs to be async
-    // safe.
-    virtual void RunAsyncSafe() = 0;
-
-   private:
-    DISALLOW_COPY_AND_ASSIGN(PreExecDelegate);
-  };
-#endif  // defined(OS_POSIX)
-
-  LaunchOptions();
-  LaunchOptions(const LaunchOptions&);
-  ~LaunchOptions();
-
-  // If true, wait for the process to complete.
-  bool wait = false;
-
-  // If not empty, change to this directory before executing the new process.
-  base::FilePath current_directory;
-
-#if defined(OS_WIN)
-  bool start_hidden = false;
-
-  // Windows can inherit handles when it launches child processes.
-  // See https://blogs.msdn.microsoft.com/oldnewthing/20111216-00/?p=8873
-  // for a good overview of Windows handle inheritance.
-  //
-  // Implementation note: it might be nice to implement in terms of
-  // base::Optional<>, but then the natural default state (vector not present)
-  // would be "all inheritable handles" while we want "no inheritance."
-  enum class Inherit {
-    // Only those handles in |handles_to_inherit| vector are inherited. If the
-    // vector is empty, no handles are inherited. The handles in the vector must
-    // all be inheritable.
-    kSpecific,
-
-    // All handles in the current process which are inheritable are inherited.
-    // In production code this flag should be used only when running
-    // short-lived, trusted binaries, because open handles from other libraries
-    // and subsystems will leak to the child process, causing errors such as
-    // open socket hangs. There are also race conditions that can cause handle
-    // over-sharing.
-    //
-    // |handles_to_inherit| must be null.
-    //
-    // DEPRECATED. THIS SHOULD NOT BE USED. Explicitly map all handles that
-    // need to be shared in new code.
-    // TODO(brettw) bug 748258: remove this.
-    kAll
-  };
-  Inherit inherit_mode = Inherit::kSpecific;
-  HandlesToInheritVector handles_to_inherit;
-
-  // If non-null, runs as if the user represented by the token had launched it.
-  // Whether the application is visible on the interactive desktop depends on
-  // the token belonging to an interactive logon session.
-  //
-  // To avoid hard to diagnose problems, when specified this loads the
-  // environment variables associated with the user and if this operation fails
-  // the entire call fails as well.
-  UserTokenHandle as_user = nullptr;
-
-  // If true, use an empty string for the desktop name.
-  bool empty_desktop_name = false;
-
-  // If non-null, launches the application in that job object. The process will
-  // be terminated immediately and LaunchProcess() will fail if assignment to
-  // the job object fails.
-  HANDLE job_handle = nullptr;
-
-  // Handles for the redirection of stdin, stdout and stderr. The caller should
-  // either set all three of them or none (i.e. there is no way to redirect
-  // stderr without redirecting stdin).
-  //
-  // The handles must be inheritable. Pseudo handles are used when stdout and
-  // stderr redirect to the console. In that case, GetFileType() will return
-  // FILE_TYPE_CHAR and they're automatically inherited by child processes. See
-  // https://msdn.microsoft.com/en-us/library/windows/desktop/ms682075.aspx
-  // Otherwise, the caller must ensure that the |inherit_mode| and/or
-  // |handles_to_inherit| set so that the handles are inherited.
-  HANDLE stdin_handle = nullptr;
-  HANDLE stdout_handle = nullptr;
-  HANDLE stderr_handle = nullptr;
-
-  // If set to true, ensures that the child process is launched with the
-  // CREATE_BREAKAWAY_FROM_JOB flag which allows it to breakout of the parent
-  // job if any.
-  bool force_breakaway_from_job_ = false;
-
-  // 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)
-  // 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().
-  EnvironmentMap environ;
-
-  // Clear the environment for the new process before processing changes from
-  // |environ|.
-  bool clear_environ = false;
-
-  // Remap file descriptors according to the mapping of src_fd->dest_fd to
-  // propagate FDs into the child process.
-  FileHandleMappingVector fds_to_remap;
-#endif  // defined(OS_WIN)
-
-#if defined(OS_LINUX)
-  // If non-zero, start the process using clone(), using flags as provided.
-  // Unlike in clone, clone_flags may not contain a custom termination signal
-  // that is sent to the parent when the child dies. The termination signal will
-  // always be set to SIGCHLD.
-  int clone_flags = 0;
-
-  // By default, child processes will have the PR_SET_NO_NEW_PRIVS bit set. If
-  // true, then this bit will not be set in the new child process.
-  bool allow_new_privs = false;
-
-  // Sets parent process death signal to SIGKILL.
-  bool kill_on_parent_death = false;
-#endif  // defined(OS_LINUX)
-
-#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
-  // argv[0].
-  base::FilePath real_path;
-
-  // If non-null, a delegate to be run immediately prior to executing the new
-  // program in the child process.
-  //
-  // WARNING: If LaunchProcess is called in the presence of multiple threads,
-  // code running in this delegate essentially needs to be async-signal safe
-  // (see man 7 signal for a list of allowed functions).
-  PreExecDelegate* pre_exec_delegate = nullptr;
-
-  // Each element is an RLIMIT_* constant that should be raised to its
-  // rlim_max.  This pointer is owned by the caller and must live through
-  // the call to LaunchProcess().
-  const std::vector<int>* maximize_rlimits = nullptr;
-
-  // If true, start the process in a new process group, instead of
-  // inheriting the parent's process group.  The pgid of the child process
-  // will be the same as its pid.
-  bool new_process_group = false;
-#endif  // defined(OS_POSIX)
-};
-
-// Launch a process via the command line |cmdline|.
-// See the documentation of LaunchOptions for details on |options|.
-//
-// Returns a valid Process upon success.
-//
-// Unix-specific notes:
-// - All file descriptors open in the parent process will be closed in the
-//   child process except for any preserved by options::fds_to_remap, and
-//   stdin, stdout, and stderr. If not remapped by options::fds_to_remap,
-//   stdin is reopened as /dev/null, and the child is allowed to inherit its
-//   parent's stdout and stderr.
-// - If the first argument on the command line does not contain a slash,
-//   PATH will be searched.  (See man execvp.)
-BASE_EXPORT Process LaunchProcess(const CommandLine& cmdline,
-                                  const LaunchOptions& options);
-
-#if defined(OS_WIN)
-// Windows-specific LaunchProcess that takes the command line as a
-// string.  Useful for situations where you need to control the
-// command line arguments directly, but prefer the CommandLine version
-// if launching Chrome itself.
-//
-// The first command line argument should be the path to the process,
-// and don't forget to quote it.
-//
-// Example (including literal quotes)
-//  cmdline = "c:\windows\explorer.exe" -foo "c:\bar\"
-BASE_EXPORT Process LaunchProcess(const string16& cmdline,
-                                  const LaunchOptions& options);
-
-// Launches a process with elevated privileges.  This does not behave exactly
-// like LaunchProcess as it uses ShellExecuteEx instead of CreateProcess to
-// create the process.  This means the process will have elevated privileges
-// and thus some common operations like OpenProcess will fail. Currently the
-// only supported LaunchOptions are |start_hidden| and |wait|.
-BASE_EXPORT Process LaunchElevatedProcess(const CommandLine& cmdline,
-                                          const LaunchOptions& options);
-
-#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
-// CommandLine version if launching Chrome itself.
-BASE_EXPORT Process LaunchProcess(const std::vector<std::string>& argv,
-                                  const LaunchOptions& options);
-
-// Close all file descriptors, except those which are a destination in the
-// given multimap. Only call this function in a child process where you know
-// that there aren't any other threads.
-BASE_EXPORT void CloseSuperfluousFds(const InjectiveMultimap& saved_map);
-#endif  // defined(OS_WIN)
-
-#if defined(OS_WIN)
-// Set |job_object|'s JOBOBJECT_EXTENDED_LIMIT_INFORMATION
-// BasicLimitInformation.LimitFlags to |limit_flags|.
-BASE_EXPORT bool SetJobObjectLimitFlags(HANDLE job_object, DWORD limit_flags);
-
-// Output multi-process printf, cout, cerr, etc to the cmd.exe console that ran
-// chrome. This is not thread-safe: only call from main thread.
-BASE_EXPORT void RouteStdioToConsole(bool create_console_if_not_found);
-#endif  // defined(OS_WIN)
-
-// Executes the application specified by |cl| and wait for it to exit. Stores
-// the output (stdout) in |output|. Redirects stderr to /dev/null. Returns true
-// on success (application launched and exited cleanly, with exit code
-// indicating success).
-BASE_EXPORT bool GetAppOutput(const CommandLine& cl, std::string* output);
-
-// Like GetAppOutput, but also includes stderr.
-BASE_EXPORT bool GetAppOutputAndError(const CommandLine& cl,
-                                      std::string* output);
-
-// A version of |GetAppOutput()| which also returns the exit code of the
-// executed command. Returns true if the application runs and exits cleanly. If
-// this is the case the exit code of the application is available in
-// |*exit_code|.
-BASE_EXPORT bool GetAppOutputWithExitCode(const CommandLine& cl,
-                                          std::string* output, int* exit_code);
-
-#if defined(OS_WIN)
-// A Windows-specific version of GetAppOutput that takes a command line string
-// 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)
-// 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.
-BASE_EXPORT bool GetAppOutput(const std::vector<std::string>& argv,
-                              std::string* output);
-
-// Like the above POSIX-specific version of GetAppOutput, but also includes
-// stderr.
-BASE_EXPORT bool GetAppOutputAndError(const std::vector<std::string>& argv,
-                                      std::string* output);
-#endif  // defined(OS_WIN)
-
-// If supported on the platform, and the user has sufficent rights, increase
-// the current process's scheduling priority to a high priority.
-BASE_EXPORT void RaiseProcessToHighPriority();
-
-#if defined(OS_MACOSX)
-// An implementation of LaunchProcess() that uses posix_spawn() instead of
-// fork()+exec(). This does not support the |pre_exec_delegate| and
-// |current_directory| options.
-Process LaunchProcessPosixSpawn(const std::vector<std::string>& argv,
-                                const LaunchOptions& options);
-
-// Restore the default exception handler, setting it to Apple Crash Reporter
-// (ReportCrash).  When forking and execing a new process, the child will
-// inherit the parent's exception ports, which may be set to the Breakpad
-// instance running inside the parent.  The parent's Breakpad instance should
-// not handle the child's exceptions.  Calling RestoreDefaultExceptionHandler
-// in the child after forking will restore the standard exception handler.
-// See http://crbug.com/20371/ for more details.
-void RestoreDefaultExceptionHandler();
-#endif  // defined(OS_MACOSX)
-
-// Creates a LaunchOptions object suitable for launching processes in a test
-// binary. This should not be called in production/released code.
-BASE_EXPORT LaunchOptions LaunchOptionsForTest();
-
-#if defined(OS_LINUX) || defined(OS_NACL_NONSFI)
-// A wrapper for clone with fork-like behavior, meaning that it returns the
-// child's pid in the parent and 0 in the child. |flags|, |ptid|, and |ctid| are
-// as in the clone system call (the CLONE_VM flag is not supported).
-//
-// This function uses the libc clone wrapper (which updates libc's pid cache)
-// internally, so callers may expect things like getpid() to work correctly
-// after in both the child and parent.
-//
-// As with fork(), callers should be extremely careful when calling this while
-// multiple threads are running, since at the time the fork happened, the
-// threads could have been in any state (potentially holding locks, etc.).
-// Callers should most likely call execve() in the child soon after calling
-// this.
-//
-// It is unsafe to use any pthread APIs after ForkWithFlags().
-// However, performing an exec() will lift this restriction.
-BASE_EXPORT pid_t ForkWithFlags(unsigned long flags, pid_t* ptid, pid_t* ctid);
-#endif
-
-}  // namespace base
-
-#endif  // BASE_PROCESS_LAUNCH_H_
diff --git a/base/process/launch_mac.cc b/base/process/launch_mac.cc
deleted file mode 100644
index d9a24cc..0000000
--- a/base/process/launch_mac.cc
+++ /dev/null
@@ -1,176 +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/launch.h"
-
-#include <crt_externs.h>
-#include <mach/mach.h>
-#include <spawn.h>
-#include <string.h>
-#include <sys/wait.h>
-
-#include "base/logging.h"
-#include "base/posix/eintr_wrapper.h"
-
-namespace base {
-
-namespace {
-
-// DPSXCHECK is a Debug Posix Spawn Check macro. The posix_spawn* family of
-// functions return an errno value, as opposed to setting errno directly. This
-// macro emulates a DPCHECK().
-#define DPSXCHECK(expr)                                              \
-  do {                                                               \
-    int rv = (expr);                                                 \
-    DCHECK_EQ(rv, 0) << #expr << ": -" << rv << " " << strerror(rv); \
-  } while (0)
-
-class PosixSpawnAttr {
- public:
-  PosixSpawnAttr() { DPSXCHECK(posix_spawnattr_init(&attr_)); }
-
-  ~PosixSpawnAttr() { DPSXCHECK(posix_spawnattr_destroy(&attr_)); }
-
-  posix_spawnattr_t* get() { return &attr_; }
-
- private:
-  posix_spawnattr_t attr_;
-};
-
-class PosixSpawnFileActions {
- public:
-  PosixSpawnFileActions() {
-    DPSXCHECK(posix_spawn_file_actions_init(&file_actions_));
-  }
-
-  ~PosixSpawnFileActions() {
-    DPSXCHECK(posix_spawn_file_actions_destroy(&file_actions_));
-  }
-
-  void Open(int filedes, const char* path, int mode) {
-    DPSXCHECK(posix_spawn_file_actions_addopen(&file_actions_, filedes, path,
-                                               mode, 0));
-  }
-
-  void Dup2(int filedes, int newfiledes) {
-    DPSXCHECK(
-        posix_spawn_file_actions_adddup2(&file_actions_, filedes, newfiledes));
-  }
-
-  void Inherit(int filedes) {
-    DPSXCHECK(posix_spawn_file_actions_addinherit_np(&file_actions_, filedes));
-  }
-
-  const posix_spawn_file_actions_t* get() const { return &file_actions_; }
-
- private:
-  posix_spawn_file_actions_t file_actions_;
-
-  DISALLOW_COPY_AND_ASSIGN(PosixSpawnFileActions);
-};
-
-}  // namespace
-
-void RestoreDefaultExceptionHandler() {
-  // This function is tailored to remove the Breakpad exception handler.
-  // exception_mask matches s_exception_mask in
-  // third_party/breakpad/breakpad/src/client/mac/handler/exception_handler.cc
-  const exception_mask_t exception_mask = EXC_MASK_BAD_ACCESS |
-                                          EXC_MASK_BAD_INSTRUCTION |
-                                          EXC_MASK_ARITHMETIC |
-                                          EXC_MASK_BREAKPOINT;
-
-  // Setting the exception port to MACH_PORT_NULL may not be entirely
-  // kosher to restore the default exception handler, but in practice,
-  // it results in the exception port being set to Apple Crash Reporter,
-  // the desired behavior.
-  task_set_exception_ports(mach_task_self(), exception_mask, MACH_PORT_NULL,
-                           EXCEPTION_DEFAULT, THREAD_STATE_NONE);
-}
-
-Process LaunchProcessPosixSpawn(const std::vector<std::string>& argv,
-                                const LaunchOptions& options) {
-  DCHECK(!options.pre_exec_delegate)
-      << "LaunchProcessPosixSpawn does not support PreExecDelegate";
-  DCHECK(options.current_directory.empty())
-      << "LaunchProcessPosixSpawn does not support current_directory";
-
-  PosixSpawnAttr attr;
-
-  short flags = POSIX_SPAWN_CLOEXEC_DEFAULT;
-  if (options.new_process_group) {
-    flags |= POSIX_SPAWN_SETPGROUP;
-    DPSXCHECK(posix_spawnattr_setpgroup(attr.get(), 0));
-  }
-  DPSXCHECK(posix_spawnattr_setflags(attr.get(), flags));
-
-  PosixSpawnFileActions file_actions;
-
-  // Process file descriptors for the child. By default, LaunchProcess will
-  // open stdin to /dev/null and inherit stdout and stderr.
-  bool inherit_stdout = true, inherit_stderr = true;
-  bool null_stdin = true;
-  for (const auto& dup2_pair : options.fds_to_remap) {
-    if (dup2_pair.second == STDIN_FILENO) {
-      null_stdin = false;
-    } else if (dup2_pair.second == STDOUT_FILENO) {
-      inherit_stdout = false;
-    } else if (dup2_pair.second == STDERR_FILENO) {
-      inherit_stderr = false;
-    }
-
-    if (dup2_pair.first == dup2_pair.second) {
-      file_actions.Inherit(dup2_pair.second);
-    } else {
-      file_actions.Dup2(dup2_pair.first, dup2_pair.second);
-    }
-  }
-
-  if (null_stdin) {
-    file_actions.Open(STDIN_FILENO, "/dev/null", O_RDONLY);
-  }
-  if (inherit_stdout) {
-    file_actions.Inherit(STDOUT_FILENO);
-  }
-  if (inherit_stderr) {
-    file_actions.Inherit(STDERR_FILENO);
-  }
-
-  std::vector<char*> argv_cstr;
-  argv_cstr.reserve(argv.size() + 1);
-  for (const auto& arg : argv)
-    argv_cstr.push_back(const_cast<char*>(arg.c_str()));
-  argv_cstr.push_back(nullptr);
-
-  std::unique_ptr<char* []> owned_environ;
-  char** new_environ = options.clear_environ ? nullptr : *_NSGetEnviron();
-  if (!options.environ.empty()) {
-    owned_environ = AlterEnvironment(new_environ, options.environ);
-    new_environ = owned_environ.get();
-  }
-
-  const char* executable_path = !options.real_path.empty()
-                                    ? options.real_path.value().c_str()
-                                    : argv_cstr[0];
-
-  // Use posix_spawnp as some callers expect to have PATH consulted.
-  pid_t pid;
-  int rv = posix_spawnp(&pid, executable_path, file_actions.get(), attr.get(),
-                        &argv_cstr[0], new_environ);
-
-  if (rv != 0) {
-    DLOG(ERROR) << "posix_spawnp(" << executable_path << "): -" << rv << " "
-                << strerror(rv);
-    return Process();
-  }
-
-  if (options.wait) {
-    pid_t ret = HANDLE_EINTR(waitpid(pid, nullptr, 0));
-    DPCHECK(ret > 0);
-  }
-
-  return Process(pid);
-}
-
-}  // namespace base
diff --git a/base/process/launch_posix.cc b/base/process/launch_posix.cc
deleted file mode 100644
index 2369802..0000000
--- a/base/process/launch_posix.cc
+++ /dev/null
@@ -1,717 +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/launch.h"
-
-#include <dirent.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <sched.h>
-#include <setjmp.h>
-#include <signal.h>
-#include <stddef.h>
-#include <stdint.h>
-#include <stdlib.h>
-#include <sys/resource.h>
-#include <sys/syscall.h>
-#include <sys/time.h>
-#include <sys/types.h>
-#include <sys/wait.h>
-#include <unistd.h>
-
-#include <iterator>
-#include <limits>
-#include <memory>
-#include <set>
-
-#include "base/command_line.h"
-#include "base/compiler_specific.h"
-#include "base/files/dir_reader_posix.h"
-#include "base/files/file_util.h"
-#include "base/files/scoped_file.h"
-#include "base/logging.h"
-#include "base/metrics/histogram_macros.h"
-#include "base/posix/eintr_wrapper.h"
-#include "base/process/process.h"
-#include "base/process/process_metrics.h"
-#include "base/strings/stringprintf.h"
-#include "base/synchronization/waitable_event.h"
-#include "base/threading/platform_thread.h"
-#include "base/time/time.h"
-#include "build_config.h"
-
-#if defined(OS_LINUX) || defined(OS_AIX)
-#include <sys/prctl.h>
-#endif
-
-#if defined(OS_MACOSX)
-#include <crt_externs.h>
-#include <sys/event.h>
-
-#include "base/feature_list.h"
-#else
-extern char** environ;
-#endif
-
-namespace base {
-
-// Friend and derived class of ScopedAllowBaseSyncPrimitives which allows
-// GetAppOutputInternal() to join a process. GetAppOutputInternal() can't itself
-// be a friend of ScopedAllowBaseSyncPrimitives because it is in the anonymous
-// namespace.
-class GetAppOutputScopedAllowBaseSyncPrimitives
-    : public base::ScopedAllowBaseSyncPrimitives {};
-
-#if !defined(OS_NACL_NONSFI)
-
-namespace {
-
-#if defined(OS_MACOSX)
-const Feature kMacLaunchProcessPosixSpawn{"MacLaunchProcessPosixSpawn",
-                                          FEATURE_ENABLED_BY_DEFAULT};
-#endif
-
-// Get the process's "environment" (i.e. the thing that setenv/getenv
-// work with).
-char** GetEnvironment() {
-#if defined(OS_MACOSX)
-  return *_NSGetEnviron();
-#else
-  return environ;
-#endif
-}
-
-// Set the process's "environment" (i.e. the thing that setenv/getenv
-// work with).
-void SetEnvironment(char** env) {
-#if defined(OS_MACOSX)
-  *_NSGetEnviron() = env;
-#else
-  environ = env;
-#endif
-}
-
-// Set the calling thread's signal mask to new_sigmask and return
-// the previous signal mask.
-sigset_t SetSignalMask(const sigset_t& new_sigmask) {
-  sigset_t old_sigmask;
-  RAW_CHECK(pthread_sigmask(SIG_SETMASK, &new_sigmask, &old_sigmask) == 0);
-  return old_sigmask;
-}
-
-#if (!defined(OS_LINUX) && !defined(OS_AIX)) || \
-    (!defined(__i386__) && !defined(__x86_64__) && !defined(__arm__))
-void ResetChildSignalHandlersToDefaults() {
-  // The previous signal handlers are likely to be meaningless in the child's
-  // context so we reset them to the defaults for now. http://crbug.com/44953
-  // These signal handlers are set up at least in browser_main_posix.cc:
-  // BrowserMainPartsPosix::PreEarlyInitialization and stack_trace_posix.cc:
-  // EnableInProcessStackDumping.
-  signal(SIGHUP, SIG_DFL);
-  signal(SIGINT, SIG_DFL);
-  signal(SIGILL, SIG_DFL);
-  signal(SIGABRT, SIG_DFL);
-  signal(SIGFPE, SIG_DFL);
-  signal(SIGBUS, SIG_DFL);
-  signal(SIGSEGV, SIG_DFL);
-  signal(SIGSYS, SIG_DFL);
-  signal(SIGTERM, SIG_DFL);
-}
-
-#else
-
-// TODO(jln): remove the Linux special case once kernels are fixed.
-
-// Internally the kernel makes sigset_t an array of long large enough to have
-// one bit per signal.
-typedef uint64_t kernel_sigset_t;
-
-// This is what struct sigaction looks like to the kernel at least on X86 and
-// ARM. MIPS, for instance, is very different.
-struct kernel_sigaction {
-  void* k_sa_handler;  // For this usage it only needs to be a generic pointer.
-  unsigned long k_sa_flags;
-  void* k_sa_restorer;  // For this usage it only needs to be a generic pointer.
-  kernel_sigset_t k_sa_mask;
-};
-
-// glibc's sigaction() will prevent access to sa_restorer, so we need to roll
-// our own.
-int sys_rt_sigaction(int sig, const struct kernel_sigaction* act,
-                     struct kernel_sigaction* oact) {
-  return syscall(SYS_rt_sigaction, sig, act, oact, sizeof(kernel_sigset_t));
-}
-
-// This function is intended to be used in between fork() and execve() and will
-// reset all signal handlers to the default.
-// The motivation for going through all of them is that sa_restorer can leak
-// from parents and help defeat ASLR on buggy kernels.  We reset it to null.
-// See crbug.com/177956.
-void ResetChildSignalHandlersToDefaults(void) {
-  for (int signum = 1; ; ++signum) {
-    struct kernel_sigaction act = {nullptr};
-    int sigaction_get_ret = sys_rt_sigaction(signum, nullptr, &act);
-    if (sigaction_get_ret && errno == EINVAL) {
-#if !defined(NDEBUG)
-      // Linux supports 32 real-time signals from 33 to 64.
-      // If the number of signals in the Linux kernel changes, someone should
-      // look at this code.
-      const int kNumberOfSignals = 64;
-      RAW_CHECK(signum == kNumberOfSignals + 1);
-#endif  // !defined(NDEBUG)
-      break;
-    }
-    // All other failures are fatal.
-    if (sigaction_get_ret) {
-      RAW_LOG(FATAL, "sigaction (get) failed.");
-    }
-
-    // The kernel won't allow to re-set SIGKILL or SIGSTOP.
-    if (signum != SIGSTOP && signum != SIGKILL) {
-      act.k_sa_handler = reinterpret_cast<void*>(SIG_DFL);
-      act.k_sa_restorer = nullptr;
-      if (sys_rt_sigaction(signum, &act, nullptr)) {
-        RAW_LOG(FATAL, "sigaction (set) failed.");
-      }
-    }
-#if !defined(NDEBUG)
-    // Now ask the kernel again and check that no restorer will leak.
-    if (sys_rt_sigaction(signum, nullptr, &act) || act.k_sa_restorer) {
-      RAW_LOG(FATAL, "Cound not fix sa_restorer.");
-    }
-#endif  // !defined(NDEBUG)
-  }
-}
-#endif  // !defined(OS_LINUX) ||
-        // (!defined(__i386__) && !defined(__x86_64__) && !defined(__arm__))
-}  // anonymous namespace
-
-// Functor for |ScopedDIR| (below).
-struct ScopedDIRClose {
-  inline void operator()(DIR* x) const {
-    if (x)
-      closedir(x);
-  }
-};
-
-// Automatically closes |DIR*|s.
-typedef std::unique_ptr<DIR, ScopedDIRClose> ScopedDIR;
-
-#if defined(OS_LINUX) || defined(OS_AIX)
-static const char kFDDir[] = "/proc/self/fd";
-#elif defined(OS_MACOSX)
-static const char kFDDir[] = "/dev/fd";
-#endif
-
-void CloseSuperfluousFds(const base::InjectiveMultimap& saved_mapping) {
-  // DANGER: no calls to malloc or locks are allowed from now on:
-  // http://crbug.com/36678
-
-  // Get the maximum number of FDs possible.
-  size_t max_fds = GetMaxFds();
-
-  DirReaderPosix fd_dir(kFDDir);
-  if (!fd_dir.IsValid()) {
-    // Fallback case: Try every possible fd.
-    for (size_t i = 0; i < max_fds; ++i) {
-      const int fd = static_cast<int>(i);
-      if (fd == STDIN_FILENO || fd == STDOUT_FILENO || fd == STDERR_FILENO)
-        continue;
-      // Cannot use STL iterators here, since debug iterators use locks.
-      size_t j;
-      for (j = 0; j < saved_mapping.size(); j++) {
-        if (fd == saved_mapping[j].dest)
-          break;
-      }
-      if (j < saved_mapping.size())
-        continue;
-
-      // Since we're just trying to close anything we can find,
-      // ignore any error return values of close().
-      close(fd);
-    }
-    return;
-  }
-
-  const int dir_fd = fd_dir.fd();
-
-  for ( ; fd_dir.Next(); ) {
-    // Skip . and .. entries.
-    if (fd_dir.name()[0] == '.')
-      continue;
-
-    char *endptr;
-    errno = 0;
-    const long int fd = strtol(fd_dir.name(), &endptr, 10);
-    if (fd_dir.name()[0] == 0 || *endptr || fd < 0 || errno)
-      continue;
-    if (fd == STDIN_FILENO || fd == STDOUT_FILENO || fd == STDERR_FILENO)
-      continue;
-    // Cannot use STL iterators here, since debug iterators use locks.
-    size_t i;
-    for (i = 0; i < saved_mapping.size(); i++) {
-      if (fd == saved_mapping[i].dest)
-        break;
-    }
-    if (i < saved_mapping.size())
-      continue;
-    if (fd == dir_fd)
-      continue;
-
-    int ret = IGNORE_EINTR(close(fd));
-    DPCHECK(ret == 0);
-  }
-}
-
-Process LaunchProcess(const CommandLine& cmdline,
-                      const LaunchOptions& options) {
-  return LaunchProcess(cmdline.argv(), options);
-}
-
-Process LaunchProcess(const std::vector<std::string>& argv,
-                      const LaunchOptions& options) {
-  TRACE_EVENT0("base", "LaunchProcess");
-#if defined(OS_MACOSX)
-  if (FeatureList::IsEnabled(kMacLaunchProcessPosixSpawn)) {
-    // TODO(rsesek): Do this unconditionally. There is one user for each of
-    // these two options. https://crbug.com/179923.
-    if (!options.pre_exec_delegate && options.current_directory.empty())
-      return LaunchProcessPosixSpawn(argv, options);
-  }
-#endif
-
-  InjectiveMultimap fd_shuffle1;
-  InjectiveMultimap fd_shuffle2;
-  fd_shuffle1.reserve(options.fds_to_remap.size());
-  fd_shuffle2.reserve(options.fds_to_remap.size());
-
-  std::vector<char*> argv_cstr;
-  argv_cstr.reserve(argv.size() + 1);
-  for (const auto& arg : argv)
-    argv_cstr.push_back(const_cast<char*>(arg.c_str()));
-  argv_cstr.push_back(nullptr);
-
-  std::unique_ptr<char* []> new_environ;
-  char* const empty_environ = nullptr;
-  char* const* old_environ = GetEnvironment();
-  if (options.clear_environ)
-    old_environ = &empty_environ;
-  if (!options.environ.empty())
-    new_environ = AlterEnvironment(old_environ, options.environ);
-
-  sigset_t full_sigset;
-  sigfillset(&full_sigset);
-  const sigset_t orig_sigmask = SetSignalMask(full_sigset);
-
-  const char* current_directory = nullptr;
-  if (!options.current_directory.empty()) {
-    current_directory = options.current_directory.value().c_str();
-  }
-
-  pid_t pid;
-  base::TimeTicks before_fork = TimeTicks::Now();
-#if defined(OS_LINUX) || defined(OS_AIX)
-  if (options.clone_flags) {
-    // Signal handling in this function assumes the creation of a new
-    // process, so we check that a thread is not being created by mistake
-    // and that signal handling follows the process-creation rules.
-    RAW_CHECK(
-        !(options.clone_flags & (CLONE_SIGHAND | CLONE_THREAD | CLONE_VM)));
-
-    // We specify a null ptid and ctid.
-    RAW_CHECK(
-        !(options.clone_flags &
-          (CLONE_CHILD_CLEARTID | CLONE_CHILD_SETTID | CLONE_PARENT_SETTID)));
-
-    // Since we use waitpid, we do not support custom termination signals in the
-    // clone flags.
-    RAW_CHECK((options.clone_flags & 0xff) == 0);
-
-    pid = ForkWithFlags(options.clone_flags | SIGCHLD, nullptr, nullptr);
-  } else
-#endif
-  {
-    pid = fork();
-  }
-
-  // Always restore the original signal mask in the parent.
-  if (pid != 0) {
-    base::TimeTicks after_fork = TimeTicks::Now();
-    SetSignalMask(orig_sigmask);
-
-    base::TimeDelta fork_time = after_fork - before_fork;
-    UMA_HISTOGRAM_TIMES("MPArch.ForkTime", fork_time);
-  }
-
-  if (pid < 0) {
-    DPLOG(ERROR) << "fork";
-    return Process();
-  } else if (pid == 0) {
-    // Child process
-
-    // DANGER: no calls to malloc or locks are allowed from now on:
-    // http://crbug.com/36678
-
-    // DANGER: fork() rule: in the child, if you don't end up doing exec*(),
-    // you call _exit() instead of exit(). This is because _exit() does not
-    // call any previously-registered (in the parent) exit handlers, which
-    // might do things like block waiting for threads that don't even exist
-    // in the child.
-
-    // If a child process uses the readline library, the process block forever.
-    // In BSD like OSes including OS X it is safe to assign /dev/null as stdin.
-    // See http://crbug.com/56596.
-    base::ScopedFD null_fd(HANDLE_EINTR(open("/dev/null", O_RDONLY)));
-    if (!null_fd.is_valid()) {
-      RAW_LOG(ERROR, "Failed to open /dev/null");
-      _exit(127);
-    }
-
-    int new_fd = HANDLE_EINTR(dup2(null_fd.get(), STDIN_FILENO));
-    if (new_fd != STDIN_FILENO) {
-      RAW_LOG(ERROR, "Failed to dup /dev/null for stdin");
-      _exit(127);
-    }
-
-    if (options.new_process_group) {
-      // Instead of inheriting the process group ID of the parent, the child
-      // starts off a new process group with pgid equal to its process ID.
-      if (setpgid(0, 0) < 0) {
-        RAW_LOG(ERROR, "setpgid failed");
-        _exit(127);
-      }
-    }
-
-    if (options.maximize_rlimits) {
-      // Some resource limits need to be maximal in this child.
-      for (size_t i = 0; i < options.maximize_rlimits->size(); ++i) {
-        const int resource = (*options.maximize_rlimits)[i];
-        struct rlimit limit;
-        if (getrlimit(resource, &limit) < 0) {
-          RAW_LOG(WARNING, "getrlimit failed");
-        } else if (limit.rlim_cur < limit.rlim_max) {
-          limit.rlim_cur = limit.rlim_max;
-          if (setrlimit(resource, &limit) < 0) {
-            RAW_LOG(WARNING, "setrlimit failed");
-          }
-        }
-      }
-    }
-
-#if defined(OS_MACOSX)
-    RestoreDefaultExceptionHandler();
-#endif  // defined(OS_MACOSX)
-
-    ResetChildSignalHandlersToDefaults();
-    SetSignalMask(orig_sigmask);
-
-#if 0
-    // When debugging it can be helpful to check that we really aren't making
-    // any hidden calls to malloc.
-    void *malloc_thunk =
-        reinterpret_cast<void*>(reinterpret_cast<intptr_t>(malloc) & ~4095);
-    mprotect(malloc_thunk, 4096, PROT_READ | PROT_WRITE | PROT_EXEC);
-    memset(reinterpret_cast<void*>(malloc), 0xff, 8);
-#endif  // 0
-
-    // 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 =
-          options.fds_to_remap[i];
-      fd_shuffle1.push_back(InjectionArc(value.first, value.second, false));
-      fd_shuffle2.push_back(InjectionArc(value.first, value.second, false));
-    }
-
-    if (!options.environ.empty() || options.clear_environ)
-      SetEnvironment(new_environ.get());
-
-    // fd_shuffle1 is mutated by this call because it cannot malloc.
-    if (!ShuffleFileDescriptors(&fd_shuffle1))
-      _exit(127);
-
-    CloseSuperfluousFds(fd_shuffle2);
-
-    // Set NO_NEW_PRIVS by default. Since NO_NEW_PRIVS only exists in kernel
-    // 3.5+, do not check the return value of prctl here.
-#if defined(OS_LINUX) || defined(OS_AIX)
-#ifndef PR_SET_NO_NEW_PRIVS
-#define PR_SET_NO_NEW_PRIVS 38
-#endif
-    if (!options.allow_new_privs) {
-      if (prctl(PR_SET_NO_NEW_PRIVS, 1, 0, 0, 0) && errno != EINVAL) {
-        // Only log if the error is not EINVAL (i.e. not supported).
-        RAW_LOG(FATAL, "prctl(PR_SET_NO_NEW_PRIVS) failed");
-      }
-    }
-
-    if (options.kill_on_parent_death) {
-      if (prctl(PR_SET_PDEATHSIG, SIGKILL) != 0) {
-        RAW_LOG(ERROR, "prctl(PR_SET_PDEATHSIG) failed");
-        _exit(127);
-      }
-    }
-#endif
-
-    if (current_directory != nullptr) {
-      RAW_CHECK(chdir(current_directory) == 0);
-    }
-
-    if (options.pre_exec_delegate != nullptr) {
-      options.pre_exec_delegate->RunAsyncSafe();
-    }
-
-    const char* executable_path = !options.real_path.empty() ?
-        options.real_path.value().c_str() : argv_cstr[0];
-
-    execvp(executable_path, argv_cstr.data());
-
-    RAW_LOG(ERROR, "LaunchProcess: failed to execvp:");
-    RAW_LOG(ERROR, argv_cstr[0]);
-    _exit(127);
-  } else {
-    // Parent process
-    if (options.wait) {
-      pid_t ret = HANDLE_EINTR(waitpid(pid, nullptr, 0));
-      DPCHECK(ret > 0);
-    }
-  }
-
-  return Process(pid);
-}
-
-void RaiseProcessToHighPriority() {
-  // On POSIX, we don't actually do anything here.  We could try to nice() or
-  // setpriority() or sched_getscheduler, but these all require extra rights.
-}
-
-// Executes the application specified by |argv| and wait for it to exit. Stores
-// the output (stdout) in |output|. If |do_search_path| is set, it searches the
-// path for the application; in that case, |envp| must be null, and it will use
-// the current environment. If |do_search_path| is false, |argv[0]| should fully
-// specify the path of the application, and |envp| will be used as the
-// environment. If |include_stderr| is true, includes stderr otherwise redirects
-// it to /dev/null.
-// The return value of the function indicates success or failure. In the case of
-// success, the application exit code will be returned in |*exit_code|, which
-// should be checked to determine if the application ran successfully.
-static bool GetAppOutputInternal(
-    const std::vector<std::string>& argv,
-    char* const envp[],
-    bool include_stderr,
-    std::string* output,
-    bool do_search_path,
-    int* exit_code) {
-  // exit_code must be supplied so calling function can determine success.
-  DCHECK(exit_code);
-  *exit_code = EXIT_FAILURE;
-
-  // Declare and call reserve() here before calling fork() because the child
-  // process cannot allocate memory.
-  std::vector<char*> argv_cstr;
-  argv_cstr.reserve(argv.size() + 1);
-  InjectiveMultimap fd_shuffle1;
-  InjectiveMultimap fd_shuffle2;
-  fd_shuffle1.reserve(3);
-  fd_shuffle2.reserve(3);
-
-  // Either |do_search_path| should be false or |envp| should be null, but not
-  // both.
-  DCHECK(!do_search_path ^ !envp);
-
-  int pipe_fd[2];
-  if (pipe(pipe_fd) < 0)
-    return false;
-
-  pid_t pid = fork();
-  switch (pid) {
-    case -1: {
-      // error
-      close(pipe_fd[0]);
-      close(pipe_fd[1]);
-      return false;
-    }
-    case 0: {
-      // child
-      //
-      // DANGER: no calls to malloc or locks are allowed from now on:
-      // http://crbug.com/36678
-
-#if defined(OS_MACOSX)
-      RestoreDefaultExceptionHandler();
-#endif
-
-      // Obscure fork() rule: in the child, if you don't end up doing exec*(),
-      // you call _exit() instead of exit(). This is because _exit() does not
-      // call any previously-registered (in the parent) exit handlers, which
-      // might do things like block waiting for threads that don't even exist
-      // in the child.
-      int dev_null = open("/dev/null", O_WRONLY);
-      if (dev_null < 0)
-        _exit(127);
-
-      fd_shuffle1.push_back(InjectionArc(pipe_fd[1], STDOUT_FILENO, true));
-      fd_shuffle1.push_back(InjectionArc(include_stderr ? pipe_fd[1] : dev_null,
-                                         STDERR_FILENO, true));
-      fd_shuffle1.push_back(InjectionArc(dev_null, STDIN_FILENO, true));
-      // Adding another element here? Remeber to increase the argument to
-      // reserve(), above.
-
-      for (size_t i = 0; i < fd_shuffle1.size(); ++i)
-        fd_shuffle2.push_back(fd_shuffle1[i]);
-
-      if (!ShuffleFileDescriptors(&fd_shuffle1))
-        _exit(127);
-
-      CloseSuperfluousFds(fd_shuffle2);
-
-      for (const auto& arg : argv)
-        argv_cstr.push_back(const_cast<char*>(arg.c_str()));
-      argv_cstr.push_back(nullptr);
-
-      if (do_search_path)
-        execvp(argv_cstr[0], argv_cstr.data());
-      else
-        execve(argv_cstr[0], argv_cstr.data(), envp);
-      _exit(127);
-    }
-    default: {
-      // parent
-      //
-      // Close our writing end of pipe now. Otherwise later read would not
-      // be able to detect end of child's output (in theory we could still
-      // write to the pipe).
-      close(pipe_fd[1]);
-
-      output->clear();
-
-      while (true) {
-        char buffer[256];
-        ssize_t bytes_read =
-            HANDLE_EINTR(read(pipe_fd[0], buffer, sizeof(buffer)));
-        if (bytes_read <= 0)
-          break;
-        output->append(buffer, bytes_read);
-      }
-      close(pipe_fd[0]);
-
-      // Always wait for exit code (even if we know we'll declare
-      // GOT_MAX_OUTPUT).
-      Process process(pid);
-      // A process launched with GetAppOutput*() usually doesn't wait on the
-      // process that launched it and thus chances of deadlock are low.
-      GetAppOutputScopedAllowBaseSyncPrimitives allow_base_sync_primitives;
-      return process.WaitForExit(exit_code);
-    }
-  }
-}
-
-bool GetAppOutput(const CommandLine& cl, std::string* output) {
-  return GetAppOutput(cl.argv(), output);
-}
-
-bool GetAppOutput(const std::vector<std::string>& argv, std::string* output) {
-  // Run |execve()| with the current environment.
-  int exit_code;
-  bool result =
-      GetAppOutputInternal(argv, nullptr, false, output, true, &exit_code);
-  return result && exit_code == EXIT_SUCCESS;
-}
-
-bool GetAppOutputAndError(const CommandLine& cl, std::string* output) {
-  // Run |execve()| with the current environment.
-  int exit_code;
-  bool result =
-      GetAppOutputInternal(cl.argv(), nullptr, true, output, true, &exit_code);
-  return result && exit_code == EXIT_SUCCESS;
-}
-
-bool GetAppOutputAndError(const std::vector<std::string>& argv,
-                          std::string* output) {
-  int exit_code;
-  bool result =
-      GetAppOutputInternal(argv, nullptr, true, output, true, &exit_code);
-  return result && exit_code == EXIT_SUCCESS;
-}
-
-bool GetAppOutputWithExitCode(const CommandLine& cl,
-                              std::string* output,
-                              int* exit_code) {
-  // Run |execve()| with the current environment.
-  return GetAppOutputInternal(cl.argv(), nullptr, false, output, true,
-                              exit_code);
-}
-
-#endif  // !defined(OS_NACL_NONSFI)
-
-#if defined(OS_LINUX) || defined(OS_NACL_NONSFI) || defined(OS_AIX)
-namespace {
-
-// This function runs on the stack specified on the clone call. It uses longjmp
-// to switch back to the original stack so the child can return from sys_clone.
-int CloneHelper(void* arg) {
-  jmp_buf* env_ptr = reinterpret_cast<jmp_buf*>(arg);
-  longjmp(*env_ptr, 1);
-
-  // Should not be reached.
-  RAW_CHECK(false);
-  return 1;
-}
-
-// This function is noinline to ensure that stack_buf is below the stack pointer
-// that is saved when setjmp is called below. This is needed because when
-// compiled with FORTIFY_SOURCE, glibc's longjmp checks that the stack is moved
-// upwards. See crbug.com/442912 for more details.
-#if defined(ADDRESS_SANITIZER)
-// Disable AddressSanitizer instrumentation for this function to make sure
-// |stack_buf| is allocated on thread stack instead of ASan's fake stack.
-// Under ASan longjmp() will attempt to clean up the area between the old and
-// new stack pointers and print a warning that may confuse the user.
-__attribute__((no_sanitize_address))
-#endif
-NOINLINE pid_t CloneAndLongjmpInChild(unsigned long flags,
-                                      pid_t* ptid,
-                                      pid_t* ctid,
-                                      jmp_buf* env) {
-  // We use the libc clone wrapper instead of making the syscall
-  // directly because making the syscall may fail to update the libc's
-  // internal pid cache. The libc interface unfortunately requires
-  // specifying a new stack, so we use setjmp/longjmp to emulate
-  // fork-like behavior.
-  alignas(16) char stack_buf[PTHREAD_STACK_MIN];
-#if defined(ARCH_CPU_X86_FAMILY) || defined(ARCH_CPU_ARM_FAMILY) ||   \
-    defined(ARCH_CPU_MIPS_FAMILY) || defined(ARCH_CPU_S390_FAMILY) || \
-    defined(ARCH_CPU_PPC64_FAMILY)
-  // The stack grows downward.
-  void* stack = stack_buf + sizeof(stack_buf);
-#else
-#error "Unsupported architecture"
-#endif
-  return clone(&CloneHelper, stack, flags, env, ptid, nullptr, ctid);
-}
-
-}  // anonymous namespace
-
-pid_t ForkWithFlags(unsigned long flags, pid_t* ptid, pid_t* ctid) {
-  const bool clone_tls_used = flags & CLONE_SETTLS;
-  const bool invalid_ctid =
-      (flags & (CLONE_CHILD_SETTID | CLONE_CHILD_CLEARTID)) && !ctid;
-  const bool invalid_ptid = (flags & CLONE_PARENT_SETTID) && !ptid;
-
-  // We do not support CLONE_VM.
-  const bool clone_vm_used = flags & CLONE_VM;
-
-  if (clone_tls_used || invalid_ctid || invalid_ptid || clone_vm_used) {
-    RAW_LOG(FATAL, "Invalid usage of ForkWithFlags");
-  }
-
-  jmp_buf env;
-  if (setjmp(env) == 0) {
-    return CloneAndLongjmpInChild(flags, ptid, ctid, &env);
-  }
-
-  return 0;
-}
-#endif  // defined(OS_LINUX) || defined(OS_NACL_NONSFI)
-
-}  // namespace base
diff --git a/base/process/launch_unittest_win.cc b/base/process/launch_unittest_win.cc
deleted file mode 100644
index 1b060c5..0000000
--- a/base/process/launch_unittest_win.cc
+++ /dev/null
@@ -1,24 +0,0 @@
-// Copyright 2017 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "base/process/launch.h"
-
-#include "base/command_line.h"
-#include "base/files/file_path.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-namespace base {
-
-TEST(LaunchWinTest, GetAppOutputWithExitCodeShouldReturnExitCode) {
-  CommandLine cl(FilePath(FILE_PATH_LITERAL("cmd")));
-  cl.AppendArg("/c");
-  cl.AppendArg("this-is-not-an-application");
-  std::string output;
-  int exit_code;
-  ASSERT_TRUE(GetAppOutputWithExitCode(cl, &output, &exit_code));
-  ASSERT_TRUE(output.empty());
-  ASSERT_EQ(1, exit_code);
-}
-
-}  // namespace
diff --git a/base/process/launch_win.cc b/base/process/launch_win.cc
deleted file mode 100644
index f24b6dd..0000000
--- a/base/process/launch_win.cc
+++ /dev/null
@@ -1,389 +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/launch.h"
-
-#include <fcntl.h>
-#include <io.h>
-#include <shellapi.h>
-#include <windows.h>
-#include <userenv.h>
-#include <psapi.h>
-
-#include <ios>
-#include <limits>
-
-#include "base/bind.h"
-#include "base/bind_helpers.h"
-#include "base/command_line.h"
-#include "base/logging.h"
-#include "base/process/kill.h"
-#include "base/strings/utf_string_conversions.h"
-#include "base/win/scoped_handle.h"
-#include "base/win/scoped_process_information.h"
-#include "base/win/startup_information.h"
-#include "base/win/windows_version.h"
-
-namespace base {
-
-namespace {
-
-bool GetAppOutputInternal(const StringPiece16& cl,
-                          bool include_stderr,
-                          std::string* output,
-                          int* exit_code) {
-  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.
-  win::ScopedHandle scoped_out_read(out_read);
-  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;
-  }
-
-  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.
-  start_info.hStdInput = GetStdHandle(STD_INPUT_HANDLE);
-  if (include_stderr) {
-    start_info.hStdError = out_write;
-  } else {
-    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);
-
-  base::TerminationStatus status = GetTerminationStatus(
-      proc_info.process_handle(), exit_code);
-  return status != base::TERMINATION_STATUS_PROCESS_CRASHED &&
-         status != base::TERMINATION_STATUS_ABNORMAL_TERMINATION;
-}
-
-}  // namespace
-
-void RouteStdioToConsole(bool create_console_if_not_found) {
-  // Don't change anything if stdout or stderr already point to a
-  // valid stream.
-  //
-  // If we are running under Buildbot or under Cygwin's default
-  // terminal (mintty), stderr and stderr will be pipe handles.  In
-  // that case, we don't want to open CONOUT$, because its output
-  // likely does not go anywhere.
-  //
-  // We don't use GetStdHandle() to check stdout/stderr here because
-  // it can return dangling IDs of handles that were never inherited
-  // by this process.  These IDs could have been reused by the time
-  // this function is called.  The CRT checks the validity of
-  // stdout/stderr on startup (before the handle IDs can be reused).
-  // _fileno(stdout) will return -2 (_NO_CONSOLE_FILENO) if stdout was
-  // invalid.
-  if (_fileno(stdout) >= 0 || _fileno(stderr) >= 0) {
-    // _fileno was broken for SUBSYSTEM:WINDOWS from VS2010 to VS2012/2013.
-    // http://crbug.com/358267. Confirm that the underlying HANDLE is valid
-    // before aborting.
-
-    intptr_t stdout_handle = _get_osfhandle(_fileno(stdout));
-    intptr_t stderr_handle = _get_osfhandle(_fileno(stderr));
-    if (stdout_handle >= 0 || stderr_handle >= 0)
-      return;
-  }
-
-  if (!AttachConsole(ATTACH_PARENT_PROCESS)) {
-    unsigned int result = GetLastError();
-    // Was probably already attached.
-    if (result == ERROR_ACCESS_DENIED)
-      return;
-    // Don't bother creating a new console for each child process if the
-    // parent process is invalid (eg: crashed).
-    if (result == ERROR_GEN_FAILURE)
-      return;
-    if (create_console_if_not_found) {
-      // Make a new console if attaching to parent fails with any other error.
-      // It should be ERROR_INVALID_HANDLE at this point, which means the
-      // browser was likely not started from a console.
-      AllocConsole();
-    } else {
-      return;
-    }
-  }
-
-  // Arbitrary byte count to use when buffering output lines.  More
-  // means potential waste, less means more risk of interleaved
-  // log-lines in output.
-  enum { kOutputBufferSize = 64 * 1024 };
-
-  if (freopen("CONOUT$", "w", stdout)) {
-    setvbuf(stdout, nullptr, _IOLBF, kOutputBufferSize);
-    // Overwrite FD 1 for the benefit of any code that uses this FD
-    // directly.  This is safe because the CRT allocates FDs 0, 1 and
-    // 2 at startup even if they don't have valid underlying Windows
-    // handles.  This means we won't be overwriting an FD created by
-    // _open() after startup.
-    _dup2(_fileno(stdout), 1);
-  }
-  if (freopen("CONOUT$", "w", stderr)) {
-    setvbuf(stderr, nullptr, _IOLBF, kOutputBufferSize);
-    _dup2(_fileno(stderr), 2);
-  }
-
-  // Fix all cout, wcout, cin, wcin, cerr, wcerr, clog and wclog.
-  std::ios::sync_with_stdio();
-}
-
-Process LaunchProcess(const CommandLine& cmdline,
-                      const LaunchOptions& options) {
-  return LaunchProcess(cmdline.GetCommandLineString(), options);
-}
-
-Process LaunchProcess(const string16& cmdline,
-                      const LaunchOptions& options) {
-  win::StartupInformation startup_info_wrapper;
-  STARTUPINFO* startup_info = startup_info_wrapper.startup_info();
-
-  bool inherit_handles = options.inherit_mode == LaunchOptions::Inherit::kAll;
-  DWORD flags = 0;
-  if (!options.handles_to_inherit.empty()) {
-    DCHECK_EQ(options.inherit_mode, LaunchOptions::Inherit::kSpecific);
-
-    if (options.handles_to_inherit.size() >
-        std::numeric_limits<DWORD>::max() / sizeof(HANDLE)) {
-      DLOG(ERROR) << "Too many handles to inherit.";
-      return Process();
-    }
-
-    // Ensure the handles can be inherited.
-    for (HANDLE handle : options.handles_to_inherit) {
-      BOOL result = SetHandleInformation(handle, HANDLE_FLAG_INHERIT,
-                                         HANDLE_FLAG_INHERIT);
-      PCHECK(result);
-    }
-
-    if (!startup_info_wrapper.InitializeProcThreadAttributeList(1)) {
-      DPLOG(ERROR);
-      return Process();
-    }
-
-    if (!startup_info_wrapper.UpdateProcThreadAttribute(
-            PROC_THREAD_ATTRIBUTE_HANDLE_LIST,
-            const_cast<HANDLE*>(&options.handles_to_inherit[0]),
-            static_cast<DWORD>(options.handles_to_inherit.size() *
-                               sizeof(HANDLE)))) {
-      DPLOG(ERROR);
-      return Process();
-    }
-
-    inherit_handles = true;
-    flags |= EXTENDED_STARTUPINFO_PRESENT;
-  }
-
-  if (options.empty_desktop_name)
-    startup_info->lpDesktop = const_cast<wchar_t*>(L"");
-  startup_info->dwFlags = STARTF_USESHOWWINDOW;
-  startup_info->wShowWindow = options.start_hidden ? SW_HIDE : SW_SHOWNORMAL;
-
-  if (options.stdin_handle || options.stdout_handle || options.stderr_handle) {
-    DCHECK(inherit_handles);
-    DCHECK(options.stdin_handle);
-    DCHECK(options.stdout_handle);
-    DCHECK(options.stderr_handle);
-    startup_info->dwFlags |= STARTF_USESTDHANDLES;
-    startup_info->hStdInput = options.stdin_handle;
-    startup_info->hStdOutput = options.stdout_handle;
-    startup_info->hStdError = options.stderr_handle;
-  }
-
-  const bool launch_suspended =
-      options.job_handle || options.grant_foreground_privilege;
-
-  if (launch_suspended)
-    flags |= CREATE_SUSPENDED;
-
-  if (options.job_handle) {
-    // If this code is run under a debugger, the launched process is
-    // automatically associated with a job object created by the debugger.
-    // The CREATE_BREAKAWAY_FROM_JOB flag is used to prevent this on Windows
-    // releases that do not support nested jobs.
-    if (win::GetVersion() < win::VERSION_WIN8)
-      flags |= CREATE_BREAKAWAY_FROM_JOB;
-  }
-
-  if (options.force_breakaway_from_job_)
-    flags |= CREATE_BREAKAWAY_FROM_JOB;
-
-  PROCESS_INFORMATION temp_process_info = {};
-
-  LPCTSTR current_directory = options.current_directory.empty()
-                                  ? nullptr
-                                  : options.current_directory.value().c_str();
-
-  string16 writable_cmdline(cmdline);
-  if (options.as_user) {
-    flags |= CREATE_UNICODE_ENVIRONMENT;
-    void* enviroment_block = nullptr;
-
-    if (!CreateEnvironmentBlock(&enviroment_block, options.as_user, FALSE)) {
-      DPLOG(ERROR);
-      return Process();
-    }
-
-    BOOL launched = CreateProcessAsUser(
-        options.as_user, nullptr, &writable_cmdline[0], nullptr, nullptr,
-        inherit_handles, flags, enviroment_block, current_directory,
-        startup_info, &temp_process_info);
-    DestroyEnvironmentBlock(enviroment_block);
-    if (!launched) {
-      DPLOG(ERROR) << "Command line:" << std::endl << UTF16ToUTF8(cmdline)
-                   << std::endl;
-      return Process();
-    }
-  } else {
-    if (!CreateProcess(nullptr, &writable_cmdline[0], nullptr, nullptr,
-                       inherit_handles, flags, nullptr, current_directory,
-                       startup_info, &temp_process_info)) {
-      DPLOG(ERROR) << "Command line:" << std::endl << UTF16ToUTF8(cmdline)
-                   << std::endl;
-      return Process();
-    }
-  }
-  base::win::ScopedProcessInformation process_info(temp_process_info);
-
-  if (options.job_handle &&
-      !AssignProcessToJobObject(options.job_handle,
-                                process_info.process_handle())) {
-    DPLOG(ERROR) << "Could not AssignProcessToObject";
-    Process scoped_process(process_info.TakeProcessHandle());
-    scoped_process.Terminate(win::kProcessKilledExitCode, true);
-    return Process();
-  }
-
-  if (options.grant_foreground_privilege &&
-      !AllowSetForegroundWindow(GetProcId(process_info.process_handle()))) {
-    DPLOG(ERROR) << "Failed to grant foreground privilege to launched process";
-  }
-
-  if (launch_suspended)
-    ResumeThread(process_info.thread_handle());
-
-  if (options.wait)
-    WaitForSingleObject(process_info.process_handle(), INFINITE);
-
-  return Process(process_info.TakeProcessHandle());
-}
-
-Process LaunchElevatedProcess(const CommandLine& cmdline,
-                              const LaunchOptions& options) {
-  const string16 file = cmdline.GetProgram().value();
-  const string16 arguments = cmdline.GetArgumentsString();
-
-  SHELLEXECUTEINFO shex_info = {};
-  shex_info.cbSize = sizeof(shex_info);
-  shex_info.fMask = SEE_MASK_NOCLOSEPROCESS;
-  shex_info.hwnd = GetActiveWindow();
-  shex_info.lpVerb = L"runas";
-  shex_info.lpFile = file.c_str();
-  shex_info.lpParameters = arguments.c_str();
-  shex_info.lpDirectory = nullptr;
-  shex_info.nShow = options.start_hidden ? SW_HIDE : SW_SHOWNORMAL;
-  shex_info.hInstApp = nullptr;
-
-  if (!ShellExecuteEx(&shex_info)) {
-    DPLOG(ERROR);
-    return Process();
-  }
-
-  if (options.wait)
-    WaitForSingleObject(shex_info.hProcess, INFINITE);
-
-  return Process(shex_info.hProcess);
-}
-
-bool SetJobObjectLimitFlags(HANDLE job_object, DWORD limit_flags) {
-  JOBOBJECT_EXTENDED_LIMIT_INFORMATION limit_info = {};
-  limit_info.BasicLimitInformation.LimitFlags = limit_flags;
-  return 0 != SetInformationJobObject(
-      job_object,
-      JobObjectExtendedLimitInformation,
-      &limit_info,
-      sizeof(limit_info));
-}
-
-bool GetAppOutput(const CommandLine& cl, std::string* output) {
-  return GetAppOutput(cl.GetCommandLineString(), output);
-}
-
-bool GetAppOutputAndError(const CommandLine& cl, std::string* output) {
-  int exit_code;
-  return GetAppOutputInternal(
-      cl.GetCommandLineString(), true, output, &exit_code);
-}
-
-bool GetAppOutputWithExitCode(const CommandLine& cl,
-                              std::string* output,
-                              int* exit_code) {
-  return GetAppOutputInternal(
-      cl.GetCommandLineString(), false, output, exit_code);
-}
-
-bool GetAppOutput(const StringPiece16& cl, std::string* output) {
-  int exit_code;
-  return GetAppOutputInternal(cl, false, output, &exit_code);
-}
-
-void RaiseProcessToHighPriority() {
-  SetPriorityClass(GetCurrentProcess(), HIGH_PRIORITY_CLASS);
-}
-
-}  // namespace base
diff --git a/base/process/memory_unittest_mac.h b/base/process/memory_unittest_mac.h
deleted file mode 100644
index 4d82a73..0000000
--- a/base/process/memory_unittest_mac.h
+++ /dev/null
@@ -1,35 +0,0 @@
-// Copyright (c) 2010 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 helpers for the process_util_unittest to allow it to fully
-// test the Mac code.
-
-#ifndef BASE_PROCESS_MEMORY_UNITTEST_MAC_H_
-#define BASE_PROCESS_MEMORY_UNITTEST_MAC_H_
-
-#include <stddef.h>
-#include <sys/types.h>
-
-#include "build_config.h"
-
-namespace base {
-
-// Allocates memory via system allocators. Alas, they take a _signed_ size for
-// allocation.
-void* AllocateViaCFAllocatorSystemDefault(ssize_t size);
-void* AllocateViaCFAllocatorMalloc(ssize_t size);
-void* AllocateViaCFAllocatorMallocZone(ssize_t size);
-
-#if !defined(ARCH_CPU_64_BITS)
-// See process_util_unittest_mac.mm for an explanation of why this function
-// isn't implemented for the 64-bit environment.
-
-// Allocates a huge Objective C object.
-void* AllocatePsychoticallyBigObjCObject();
-
-#endif  // !ARCH_CPU_64_BITS
-
-}  // namespace base
-
-#endif  // BASE_PROCESS_MEMORY_UNITTEST_MAC_H_
diff --git a/base/process/memory_unittest_mac.mm b/base/process/memory_unittest_mac.mm
deleted file mode 100644
index 7ec7afd..0000000
--- a/base/process/memory_unittest_mac.mm
+++ /dev/null
@@ -1,60 +0,0 @@
-// Copyright (c) 2010 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_unittest_mac.h"
-#include "build_config.h"
-
-#import <Foundation/Foundation.h>
-#include <CoreFoundation/CoreFoundation.h>
-
-#if !defined(ARCH_CPU_64_BITS)
-
-// In the 64-bit environment, the Objective-C 2.0 Runtime Reference states
-// that sizeof(anInstance) is constrained to 32 bits. That's not necessarily
-// "psychotically big" and in fact a 64-bit program is expected to be able to
-// successfully allocate an object that large, likely reserving a good deal of
-// swap space. The only way to test the behavior of memory exhaustion for
-// Objective-C allocation in this environment would be to loop over allocation
-// of these large objects, but that would slowly consume all available memory
-// and cause swap file proliferation. That's bad, so this behavior isn't
-// tested in the 64-bit environment.
-
-@interface PsychoticallyBigObjCObject : NSObject
-{
-  // In the 32-bit environment, the compiler limits Objective-C objects to
-  // < 2GB in size.
-  int justUnder2Gigs_[(2U * 1024 * 1024 * 1024 - 1) / sizeof(int)];
-}
-
-@end
-
-@implementation PsychoticallyBigObjCObject
-
-@end
-
-namespace base {
-
-void* AllocatePsychoticallyBigObjCObject() {
-  return [[PsychoticallyBigObjCObject alloc] init];
-}
-
-}  // namespace base
-
-#endif  // ARCH_CPU_64_BITS
-
-namespace base {
-
-void* AllocateViaCFAllocatorSystemDefault(ssize_t size) {
-  return CFAllocatorAllocate(kCFAllocatorSystemDefault, size, 0);
-}
-
-void* AllocateViaCFAllocatorMalloc(ssize_t size) {
-  return CFAllocatorAllocate(kCFAllocatorMalloc, size, 0);
-}
-
-void* AllocateViaCFAllocatorMallocZone(ssize_t size) {
-  return CFAllocatorAllocate(kCFAllocatorMallocZone, size, 0);
-}
-
-}  // namespace base
diff --git a/base/strings/sys_string_conversions_mac_unittest.mm b/base/strings/sys_string_conversions_mac_unittest.mm
deleted file mode 100644
index 4750a9a..0000000
--- a/base/strings/sys_string_conversions_mac_unittest.mm
+++ /dev/null
@@ -1,21 +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.
-
-#import <Foundation/Foundation.h>
-
-#include "base/strings/string16.h"
-#include "base/strings/sys_string_conversions.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-namespace base {
-
-TEST(SysStrings, ConversionsFromNSString) {
-  EXPECT_STREQ("Hello, world!", SysNSStringToUTF8(@"Hello, world!").c_str());
-
-  // Conversions should be able to handle a NULL value without crashing.
-  EXPECT_STREQ("", SysNSStringToUTF8(nil).c_str());
-  EXPECT_EQ(string16(), SysNSStringToUTF16(nil));
-}
-
-}  // namespace base
diff --git a/build/gen.py b/build/gen.py
index 45c3e33..d72f39b 100755
--- a/build/gen.py
+++ b/build/gen.py
@@ -551,7 +551,6 @@
         'base/files/file_util_win.cc',
         'base/files/file_win.cc',
         'base/process/kill_win.cc',
-        'base/process/launch_win.cc',
         'base/process/memory_win.cc',
         'base/process/process_handle_win.cc',
         'base/process/process_info_win.cc',
diff --git a/tools/gn/command_args.cc b/tools/gn/command_args.cc
index b3c6862..e7721ad 100644
--- a/tools/gn/command_args.cc
+++ b/tools/gn/command_args.cc
@@ -13,7 +13,6 @@
 #include "base/environment.h"
 #include "base/files/file_util.h"
 #include "base/json/json_writer.h"
-#include "base/process/launch.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_util.h"
 #include "build_config.h"
diff --git a/tools/gn/exec_process.cc b/tools/gn/exec_process.cc
index 1009cec..092178d 100644
--- a/tools/gn/exec_process.cc
+++ b/tools/gn/exec_process.cc
@@ -12,7 +12,6 @@
 #include "base/files/file_util.h"
 #include "base/logging.h"
 #include "base/process/kill.h"
-#include "base/process/launch.h"
 #include "base/process/process.h"
 #include "build_config.h"
 
diff --git a/tools/gn/setup.cc b/tools/gn/setup.cc
index 8a66259..20b3a6f 100644
--- a/tools/gn/setup.cc
+++ b/tools/gn/setup.cc
@@ -16,7 +16,7 @@
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
 #include "base/memory/ref_counted.h"
-#include "base/process/launch.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"
@@ -39,6 +39,7 @@
 
 #if defined(OS_WIN)
 #include <windows.h>
+#include "base/win/scoped_process_information.h"
 #endif
 
 const char kDotfile_Help[] =
@@ -189,6 +190,83 @@
 
 #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
@@ -205,7 +283,7 @@
   command.append(L"\" -c \"import sys; print sys.executable\"\"");
 
   std::string python_path;
-  if (base::GetAppOutput(command, &python_path)) {
+  if (GetAppOutput(command, &python_path)) {
     base::TrimWhitespaceASCII(python_path, base::TRIM_ALL, &python_path);
 
     // Python uses the system multibyte code page for sys.executable.