Remove another pile of unused stuff

Change-Id: I926511deb046064b1c857e15a331bc73b53c97dc
Reviewed-on: https://gn-review.googlesource.com/1622
Commit-Queue: Scott Graham <scottmg@chromium.org>
Reviewed-by: Brett Wilson <brettw@chromium.org>
diff --git a/base/OWNERS b/base/OWNERS
deleted file mode 100644
index 21d1970..0000000
--- a/base/OWNERS
+++ /dev/null
@@ -1,52 +0,0 @@
-# About src/base:
-#
-# Chromium is a very mature project, most things that are generally useful are
-# already here, and that things not here aren't generally useful.
-#
-# Base is pulled into many projects. For example, various ChromeOS daemons. So
-# the bar for adding stuff is that it must have demonstrated wide
-# applicability. Prefer to add things closer to where they're used (i.e. "not
-# base"), and pull into base only when needed.  In a project our size,
-# sometimes even duplication is OK and inevitable.
-#
-# Adding a new logging macro DPVELOG_NE is not more clear than just
-# writing the stuff you want to log in a regular logging statement, even
-# if it makes your calling code longer. Just add it to your own code.
-#
-# If the code in question does not need to be used inside base, but will have
-# multiple consumers across the codebase, consider placing it in a new directory
-# under components/ instead.
-
-danakj@chromium.org
-dcheng@chromium.org
-gab@chromium.org
-mark@chromium.org
-thakis@chromium.org
-thestig@chromium.org
-
-# For Bind/Callback:
-per-file bind*=tzik@chromium.org
-per-file callback*=tzik@chromium.org
-
-# For Android-specific changes:
-per-file *android*=file://base/android/OWNERS
-per-file BUILD.gn=file://base/android/OWNERS
-
-# For Fuchsia-specific changes:
-per-file *_fuchsia*=file://build/fuchsia/OWNERS
-
-# For FeatureList API:
-per-file feature_list*=asvitkine@chromium.org
-per-file feature_list*=isherman@chromium.org
-
-# Restricted since rand_util.h also backs the cryptographically secure RNG.
-per-file rand_util*=set noparent
-per-file rand_util*=file://ipc/SECURITY_OWNERS
-
-# For TCMalloc tests:
-per-file security_unittest.cc=jln@chromium.org
-
-# For Value:
-per-file values*=jdoerrie@chromium.org
-
-# COMPONENT: Internals>Core
diff --git a/base/auto_reset.h b/base/auto_reset.h
deleted file mode 100644
index 8515fe9..0000000
--- a/base/auto_reset.h
+++ /dev/null
@@ -1,43 +0,0 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef BASE_AUTO_RESET_H_
-#define BASE_AUTO_RESET_H_
-
-#include <utility>
-
-#include "base/macros.h"
-
-// base::AutoReset<> is useful for setting a variable to a new value only within
-// a particular scope. An base::AutoReset<> object resets a variable to its
-// original value upon destruction, making it an alternative to writing
-// "var = false;" or "var = old_val;" at all of a block's exit points.
-//
-// This should be obvious, but note that an base::AutoReset<> instance should
-// have a shorter lifetime than its scoped_variable, to prevent invalid memory
-// writes when the base::AutoReset<> object is destroyed.
-
-namespace base {
-
-template<typename T>
-class AutoReset {
- public:
-  AutoReset(T* scoped_variable, T new_value)
-      : scoped_variable_(scoped_variable),
-        original_value_(std::move(*scoped_variable)) {
-    *scoped_variable_ = std::move(new_value);
-  }
-
-  ~AutoReset() { *scoped_variable_ = std::move(original_value_); }
-
- private:
-  T* scoped_variable_;
-  T original_value_;
-
-  DISALLOW_COPY_AND_ASSIGN(AutoReset);
-};
-
-}  // namespace base
-
-#endif  // BASE_AUTO_RESET_H_
diff --git a/base/containers/OWNERS b/base/containers/OWNERS
deleted file mode 100644
index cc39b28..0000000
--- a/base/containers/OWNERS
+++ /dev/null
@@ -1,3 +0,0 @@
-danakj@chromium.org
-dcheng@chromium.org
-vmpstr@chromium.org
diff --git a/base/containers/README.md b/base/containers/README.md
deleted file mode 100644
index 092a264..0000000
--- a/base/containers/README.md
+++ /dev/null
@@ -1,295 +0,0 @@
-# base/containers library
-
-## What goes here
-
-This directory contains some STL-like containers.
-
-Things should be moved here that are generally applicable across the code base.
-Don't add things here just because you need them in one place and think others
-may someday want something similar. You can put specialized containers in
-your component's directory and we can promote them here later if we feel there
-is broad applicability.
-
-### Design and naming
-
-Containers should adhere as closely to STL as possible. Functions and behaviors
-not present in STL should only be added when they are related to the specific
-data structure implemented by the container.
-
-For STL-like containers our policy is that they should use STL-like naming even
-when it may conflict with the style guide. So functions and class names should
-be lower case with underscores. Non-STL-like classes and functions should use
-Google naming. Be sure to use the base namespace.
-
-## Map and set selection
-
-### Usage advice
-
-  * Generally avoid **std::unordered\_set** and **std::unordered\_map**. In the
-    common case, query performance is unlikely to be sufficiently higher than
-    std::map to make a difference, insert performance is slightly worse, and
-    the memory overhead is high. This makes sense mostly for large tables where
-    you expect a lot of lookups.
-
-  * Most maps and sets in Chrome are small and contain objects that can be
-    moved efficiently. In this case, consider **base::flat\_map** and
-    **base::flat\_set**. You need to be aware of the maximum expected size of
-    the container since individual inserts and deletes are O(n), giving O(n^2)
-    construction time for the entire map. But because it avoids mallocs in most
-    cases, inserts are better or comparable to other containers even for
-    several dozen items, and efficiently-moved types are unlikely to have
-    performance problems for most cases until you have hundreds of items. If
-    your container can be constructed in one shot, the constructor from vector
-    gives O(n log n) construction times and it should be strictly better than
-    a std::map.
-
-  * **base::small\_map** has better runtime memory usage without the poor
-    mutation performance of large containers that base::flat\_map has. But this
-    advantage is partially offset by additional code size. Prefer in cases
-    where you make many objects so that the code/heap tradeoff is good.
-
-  * Use **std::map** and **std::set** if you can't decide. Even if they're not
-    great, they're unlikely to be bad or surprising.
-
-### Map and set details
-
-Sizes are on 64-bit platforms. Stable iterators aren't invalidated when the
-container is mutated.
-
-| Container                                | Empty size            | Per-item overhead | Stable iterators? |
-|:---------------------------------------- |:--------------------- |:----------------- |:----------------- |
-| std::map, std::set                       | 16 bytes              | 32 bytes          | Yes               |
-| std::unordered\_map, std::unordered\_set | 128 bytes             | 16-24 bytes       | No                |
-| base::flat\_map and base::flat\_set      | 24 bytes              | 0 (see notes)     | No                |
-| base::small\_map                         | 24 bytes (see notes)  | 32 bytes          | No                |
-
-**Takeaways:** std::unordered\_map and std::unordered\_map have high
-overhead for small container sizes, prefer these only for larger workloads.
-
-Code size comparisons for a block of code (see appendix) on Windows using
-strings as keys.
-
-| Container           | Code size  |
-|:------------------- |:---------- |
-| std::unordered\_map | 1646 bytes |
-| std::map            | 1759 bytes |
-| base::flat\_map     | 1872 bytes |
-| base::small\_map    | 2410 bytes |
-
-**Takeaways:** base::small\_map generates more code because of the inlining of
-both brute-force and red-black tree searching. This makes it less attractive
-for random one-off uses. But if your code is called frequently, the runtime
-memory benefits will be more important. The code sizes of the other maps are
-close enough it's not worth worrying about.
-
-### std::map and std::set
-
-A red-black tree. Each inserted item requires the memory allocation of a node
-on the heap. Each node contains a left pointer, a right pointer, a parent
-pointer, and a "color" for the red-black tree (32-bytes per item on 64-bits).
-
-### std::unordered\_map and std::unordered\_set
-
-A hash table. Implemented on Windows as a std::vector + std::list and in libc++
-as the equivalent of a std::vector + a std::forward\_list. Both implementations
-allocate an 8-entry hash table (containing iterators into the list) on
-initialization, and grow to 64 entries once 8 items are inserted. Above 64
-items, the size doubles every time the load factor exceeds 1.
-
-The empty size is sizeof(std::unordered\_map) = 64 +
-the initial hash table size which is 8 pointers. The per-item overhead in the
-table above counts the list node (2 pointers on Windows, 1 pointer in libc++),
-plus amortizes the hash table assuming a 0.5 load factor on average.
-
-In a microbenchmark on Windows, inserts of 1M integers into a
-std::unordered\_set took 1.07x the time of std::set, and queries took 0.67x the
-time of std::set. For a typical 4-entry set (the statistical mode of map sizes
-in the browser), query performance is identical to std::set and base::flat\_set.
-On ARM, unordered\_set performance can be worse because integer division to
-compute the bucket is slow, and a few "less than" operations can be faster than
-computing a hash depending on the key type. The takeaway is that you should not
-default to using unordered maps because "they're faster."
-
-### base::flat\_map and base::flat\_set
-
-A sorted std::vector. Seached via binary search, inserts in the middle require
-moving elements to make room. Good cache locality. For large objects and large
-set sizes, std::vector's doubling-when-full strategy can waste memory.
-
-Supports efficient construction from a vector of items which avoids the O(n^2)
-insertion time of each element separately.
-
-The per-item overhead will depend on the underlying std::vector's reallocation
-strategy and the memory access pattern. Assuming items are being linearly added,
-one would expect it to be 3/4 full, so per-item overhead will be 0.25 *
-sizeof(T).
-
-
-flat\_set/flat\_map support a notion of transparent comparisons. Therefore you
-can, for example, lookup base::StringPiece in a set of std::strings without
-constructing a temporary std::string. This functionality is based on C++14
-extensions to std::set/std::map interface.
-
-You can find more information about transparent comparisons here:
-http://en.cppreference.com/w/cpp/utility/functional/less_void
-
-Example, smart pointer set:
-
-```cpp
-// Declare a type alias using base::UniquePtrComparator.
-template <typename T>
-using UniquePtrSet = base::flat_set<std::unique_ptr<T>,
-                                    base::UniquePtrComparator>;
-
-// ...
-// Collect data.
-std::vector<std::unique_ptr<int>> ptr_vec;
-ptr_vec.reserve(5);
-std::generate_n(std::back_inserter(ptr_vec), 5, []{
-  return std::make_unique<int>(0);
-});
-
-// Construct a set.
-UniquePtrSet<int> ptr_set(std::move(ptr_vec), base::KEEP_FIRST_OF_DUPES);
-
-// Use raw pointers to lookup keys.
-int* ptr = ptr_set.begin()->get();
-EXPECT_TRUE(ptr_set.find(ptr) == ptr_set.begin());
-```
-
-Example flat_map<std\::string, int>:
-
-```cpp
-base::flat_map<std::string, int> str_to_int({{"a", 1}, {"c", 2},{"b", 2}},
-                                            base::KEEP_FIRST_OF_DUPES);
-
-// Does not construct temporary strings.
-str_to_int.find("c")->second = 3;
-str_to_int.erase("c");
-EXPECT_EQ(str_to_int.end(), str_to_int.find("c")->second);
-
-// NOTE: This does construct a temporary string. This happens since if the
-// item is not in the container, then it needs to be constructed, which is
-// something that transparent comparators don't have to guarantee.
-str_to_int["c"] = 3;
-```
-
-### base::small\_map
-
-A small inline buffer that is brute-force searched that overflows into a full
-std::map or std::unordered\_map. This gives the memory benefit of
-base::flat\_map for small data sizes without the degenerate insertion
-performance for large container sizes.
-
-Since instantiations require both code for a std::map and a brute-force search
-of the inline container, plus a fancy iterator to cover both cases, code size
-is larger.
-
-The initial size in the above table is assuming a very small inline table. The
-actual size will be sizeof(int) + min(sizeof(std::map), sizeof(T) *
-inline\_size).
-
-# Deque
-
-### Usage advice
-
-Chromium code should always use `base::circular_deque` or `base::queue` in
-preference to `std::deque` or `std::queue` due to memory usage and platform
-variation.
-
-The `base::circular_deque` implementation (and the `base::queue` which uses it)
-provide performance consistent across platforms that better matches most
-programmer's expectations on performance (it doesn't waste as much space as
-libc++ and doesn't do as many heap allocations as MSVC). It also generates less
-code tham `std::queue`: using it across the code base saves several hundred
-kilobytes.
-
-Since `base::deque` does not have stable iterators and it will move the objects
-it contains, it may not be appropriate for all uses. If you need these,
-consider using a `std::list` which will provide constant time insert and erase.
-
-### std::deque and std::queue
-
-The implementation of `std::deque` varies considerably which makes it hard to
-reason about. All implementations use a sequence of data blocks referenced by
-an array of pointers. The standard guarantees random access, amortized
-constant operations at the ends, and linear mutations in the middle.
-
-In Microsoft's implementation, each block is the smaller of 16 bytes or the
-size of the contained element. This means in practice that every expansion of
-the deque of non-trivial classes requires a heap allocation. libc++ (on Android
-and Mac) uses 4K blocks which elimiates the problem of many heap allocations,
-but generally wastes a large amount of space (an Android analysis revealed more
-than 2.5MB wasted space from deque alone, resulting in some optimizations).
-libstdc++ uses an intermediate-size 512 byte buffer.
-
-Microsoft's implementation never shrinks the deque capacity, so the capacity
-will always be the maximum number of elements ever contained. libstdc++
-deallocates blocks as they are freed. libc++ keeps up to two empty blocks.
-
-### base::circular_deque and base::queue
-
-A deque implemented as a circular buffer in an array. The underlying array will
-grow like a `std::vector` while the beginning and end of the deque will move
-around. The items will wrap around the underlying buffer so the storage will
-not be contiguous, but fast random access iterators are still possible.
-
-When the underlying buffer is filled, it will be reallocated and the constents
-moved (like a `std::vector`). The underlying buffer will be shrunk if there is
-too much wasted space (_unlike_ a `std::vector`). As a result, iterators are
-not stable across mutations.
-
-# Stack
-
-`std::stack` is like `std::queue` in that it is a wrapper around an underlying
-container. The default container is `std::deque` so everything from the deque
-section applies.
-
-Chromium provides `base/containers/stack.h` which defines `base::stack` that
-should be used in preference to std::stack. This changes the underlying
-container to `base::circular_deque`. The result will be very similar to
-manually specifying a `std::vector` for the underlying implementation except
-that the storage will shrink when it gets too empty (vector will never
-reallocate to a smaller size).
-
-Watch out: with some stack usage patterns it's easy to depend on unstable
-behavior:
-
-```cpp
-base::stack<Foo> stack;
-for (...) {
-  Foo& current = stack.top();
-  DoStuff();  // May call stack.push(), say if writing a parser.
-  current.done = true;  // Current may reference deleted item!
-}
-```
-
-## Appendix
-
-### Code for map code size comparison
-
-This just calls insert and query a number of times, with printfs that prevent
-things from being dead-code eliminated.
-
-```cpp
-TEST(Foo, Bar) {
-  base::small_map<std::map<std::string, Flubber>> foo;
-  foo.insert(std::make_pair("foo", Flubber(8, "bar")));
-  foo.insert(std::make_pair("bar", Flubber(8, "bar")));
-  foo.insert(std::make_pair("foo1", Flubber(8, "bar")));
-  foo.insert(std::make_pair("bar1", Flubber(8, "bar")));
-  foo.insert(std::make_pair("foo", Flubber(8, "bar")));
-  foo.insert(std::make_pair("bar", Flubber(8, "bar")));
-  auto found = foo.find("asdf");
-  printf("Found is %d\n", (int)(found == foo.end()));
-  found = foo.find("foo");
-  printf("Found is %d\n", (int)(found == foo.end()));
-  found = foo.find("bar");
-  printf("Found is %d\n", (int)(found == foo.end()));
-  found = foo.find("asdfhf");
-  printf("Found is %d\n", (int)(found == foo.end()));
-  found = foo.find("bar1");
-  printf("Found is %d\n", (int)(found == foo.end()));
-}
-```
-
diff --git a/base/containers/adapters.h b/base/containers/adapters.h
deleted file mode 100644
index fa671b4..0000000
--- a/base/containers/adapters.h
+++ /dev/null
@@ -1,73 +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.
-
-#ifndef BASE_CONTAINERS_ADAPTERS_H_
-#define BASE_CONTAINERS_ADAPTERS_H_
-
-#include <stddef.h>
-
-#include <iterator>
-
-#include "base/macros.h"
-
-namespace base {
-
-namespace internal {
-
-// Internal adapter class for implementing base::Reversed.
-template <typename T>
-class ReversedAdapter {
- public:
-  using Iterator = decltype(static_cast<T*>(nullptr)->rbegin());
-
-  explicit ReversedAdapter(T& t) : t_(t) {}
-  ReversedAdapter(const ReversedAdapter& ra) : t_(ra.t_) {}
-
-  // TODO(mdempsky): Once we can use C++14 library features, use std::rbegin
-  // and std::rend instead, so we can remove the specialization below.
-  Iterator begin() const { return t_.rbegin(); }
-  Iterator end() const { return t_.rend(); }
-
- private:
-  T& t_;
-
-  DISALLOW_ASSIGN(ReversedAdapter);
-};
-
-template <typename T, size_t N>
-class ReversedAdapter<T[N]> {
- public:
-  using Iterator = std::reverse_iterator<T*>;
-
-  explicit ReversedAdapter(T (&t)[N]) : t_(t) {}
-  ReversedAdapter(const ReversedAdapter& ra) : t_(ra.t_) {}
-
-  Iterator begin() const { return Iterator(&t_[N]); }
-  Iterator end() const { return Iterator(&t_[0]); }
-
- private:
-  T (&t_)[N];
-
-  DISALLOW_ASSIGN(ReversedAdapter);
-};
-
-}  // namespace internal
-
-// Reversed returns a container adapter usable in a range-based "for" statement
-// for iterating a reversible container in reverse order.
-//
-// Example:
-//
-//   std::vector<int> v = ...;
-//   for (int i : base::Reversed(v)) {
-//     // iterates through v from back to front
-//   }
-template <typename T>
-internal::ReversedAdapter<T> Reversed(T& t) {
-  return internal::ReversedAdapter<T>(t);
-}
-
-}  // namespace base
-
-#endif  // BASE_CONTAINERS_ADAPTERS_H_
diff --git a/base/containers/flat_set.h b/base/containers/flat_set.h
deleted file mode 100644
index bf14c36..0000000
--- a/base/containers/flat_set.h
+++ /dev/null
@@ -1,140 +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.
-
-#ifndef BASE_CONTAINERS_FLAT_SET_H_
-#define BASE_CONTAINERS_FLAT_SET_H_
-
-#include <functional>
-
-#include "base/containers/flat_tree.h"
-#include "base/template_util.h"
-
-namespace base {
-
-// flat_set is a container with a std::set-like interface that stores its
-// contents in a sorted vector.
-//
-// Please see //base/containers/README.md for an overview of which container
-// to select.
-//
-// PROS
-//
-//  - Good memory locality.
-//  - Low overhead, especially for smaller sets.
-//  - Performance is good for more workloads than you might expect (see
-//    overview link above).
-//  - Supports C++14 set interface.
-//
-// CONS
-//
-//  - Inserts and removals are O(n).
-//
-// IMPORTANT NOTES
-//
-//  - Iterators are invalidated across mutations.
-//  - If possible, construct a flat_set in one operation by inserting into
-//    a std::vector and moving that vector into the flat_set constructor.
-//  - For multiple removals use base::EraseIf() which is O(n) rather than
-//    O(n * removed_items).
-//
-// QUICK REFERENCE
-//
-// Most of the core functionality is inherited from flat_tree. Please see
-// flat_tree.h for more details for most of these functions. As a quick
-// reference, the functions available are:
-//
-// Constructors (inputs need not be sorted):
-//   flat_set(InputIterator first, InputIterator last,
-//            FlatContainerDupes = KEEP_FIRST_OF_DUPES,
-//            const Compare& compare = Compare());
-//   flat_set(const flat_set&);
-//   flat_set(flat_set&&);
-//   flat_set(std::vector<Key>,
-//            FlatContainerDupes = KEEP_FIRST_OF_DUPES,
-//            const Compare& compare = Compare());  // Re-use storage.
-//   flat_set(std::initializer_list<value_type> ilist,
-//            FlatContainerDupes = KEEP_FIRST_OF_DUPES,
-//            const Compare& comp = Compare());
-//
-// Assignment functions:
-//   flat_set& operator=(const flat_set&);
-//   flat_set& operator=(flat_set&&);
-//   flat_set& operator=(initializer_list<Key>);
-//
-// Memory management functions:
-//   void   reserve(size_t);
-//   size_t capacity() const;
-//   void   shrink_to_fit();
-//
-// Size management functions:
-//   void   clear();
-//   size_t size() const;
-//   size_t max_size() const;
-//   bool   empty() const;
-//
-// Iterator functions:
-//   iterator               begin();
-//   const_iterator         begin() const;
-//   const_iterator         cbegin() const;
-//   iterator               end();
-//   const_iterator         end() const;
-//   const_iterator         cend() const;
-//   reverse_iterator       rbegin();
-//   const reverse_iterator rbegin() const;
-//   const_reverse_iterator crbegin() const;
-//   reverse_iterator       rend();
-//   const_reverse_iterator rend() const;
-//   const_reverse_iterator crend() const;
-//
-// Insert and accessor functions:
-//   pair<iterator, bool> insert(const key_type&);
-//   pair<iterator, bool> insert(key_type&&);
-//   void                 insert(InputIterator first, InputIterator last,
-//                               FlatContainerDupes = KEEP_FIRST_OF_DUPES);
-//   iterator             insert(const_iterator hint, const key_type&);
-//   iterator             insert(const_iterator hint, key_type&&);
-//   pair<iterator, bool> emplace(Args&&...);
-//   iterator             emplace_hint(const_iterator, Args&&...);
-//
-// Erase functions:
-//   iterator erase(iterator);
-//   iterator erase(const_iterator);
-//   iterator erase(const_iterator first, const_iterator& last);
-//   template <typename K> size_t erase(const K& key);
-//
-// Comparators (see std::set documentation).
-//   key_compare   key_comp() const;
-//   value_compare value_comp() const;
-//
-// Search functions:
-//   template <typename K> size_t                   count(const K&) const;
-//   template <typename K> iterator                 find(const K&);
-//   template <typename K> const_iterator           find(const K&) const;
-//   template <typename K> pair<iterator, iterator> equal_range(K&);
-//   template <typename K> iterator                 lower_bound(const K&);
-//   template <typename K> const_iterator           lower_bound(const K&) const;
-//   template <typename K> iterator                 upper_bound(const K&);
-//   template <typename K> const_iterator           upper_bound(const K&) const;
-//
-// General functions:
-//   void swap(flat_set&&);
-//
-// Non-member operators:
-//   bool operator==(const flat_set&, const flat_set);
-//   bool operator!=(const flat_set&, const flat_set);
-//   bool operator<(const flat_set&, const flat_set);
-//   bool operator>(const flat_set&, const flat_set);
-//   bool operator>=(const flat_set&, const flat_set);
-//   bool operator<=(const flat_set&, const flat_set);
-//
-template <class Key, class Compare = std::less<>>
-using flat_set = typename ::base::internal::flat_tree<
-    Key,
-    Key,
-    ::base::internal::GetKeyFromValueIdentity<Key>,
-    Compare>;
-
-}  // namespace base
-
-#endif  // BASE_CONTAINERS_FLAT_SET_H_
diff --git a/base/containers/id_map.h b/base/containers/id_map.h
deleted file mode 100644
index 4c816da..0000000
--- a/base/containers/id_map.h
+++ /dev/null
@@ -1,290 +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.
-
-#ifndef BASE_CONTAINERS_ID_MAP_H_
-#define BASE_CONTAINERS_ID_MAP_H_
-
-#include <stddef.h>
-#include <stdint.h>
-
-#include <memory>
-#include <set>
-#include <type_traits>
-#include <unordered_map>
-#include <utility>
-
-#include "base/containers/flat_set.h"
-#include "base/logging.h"
-#include "base/macros.h"
-#include "base/sequence_checker.h"
-
-namespace base {
-
-// This object maintains a list of IDs that can be quickly converted to
-// pointers to objects. It is implemented as a hash table, optimized for
-// relatively small data sets (in the common case, there will be exactly one
-// item in the list).
-//
-// Items can be inserted into the container with arbitrary ID, but the caller
-// must ensure they are unique. Inserting IDs and relying on automatically
-// generated ones is not allowed because they can collide.
-
-// The map's value type (the V param) can be any dereferenceable type, such as a
-// raw pointer or smart pointer
-template <typename V, typename K = int32_t>
-class IDMap final {
- public:
-  using KeyType = K;
-
- private:
-  using T = typename std::remove_reference<decltype(*V())>::type;
-
-  using HashTable = std::unordered_map<KeyType, V>;
-
- public:
-  IDMap() : iteration_depth_(0), next_id_(1), check_on_null_data_(false) {
-    // A number of consumers of IDMap create it on one thread but always
-    // access it from a different, but consistent, thread (or sequence)
-    // post-construction. The first call to CalledOnValidSequence() will re-bind
-    // it.
-    DETACH_FROM_SEQUENCE(sequence_checker_);
-  }
-
-  ~IDMap() {
-    // Many IDMap's are static, and hence will be destroyed on the main
-    // thread. However, all the accesses may take place on another thread (or
-    // sequence), such as the IO thread. Detaching again to clean this up.
-    DETACH_FROM_SEQUENCE(sequence_checker_);
-  }
-
-  // Sets whether Add and Replace should DCHECK if passed in NULL data.
-  // Default is false.
-  void set_check_on_null_data(bool value) { check_on_null_data_ = value; }
-
-  // Adds a view with an automatically generated unique ID. See AddWithID.
-  KeyType Add(V data) { return AddInternal(std::move(data)); }
-
-  // Adds a new data member with the specified ID. The ID must not be in
-  // the list. The caller either must generate all unique IDs itself and use
-  // this function, or allow this object to generate IDs and call Add. These
-  // two methods may not be mixed, or duplicate IDs may be generated.
-  void AddWithID(V data, KeyType id) { AddWithIDInternal(std::move(data), id); }
-
-  void Remove(KeyType id) {
-    DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
-    typename HashTable::iterator i = data_.find(id);
-    if (i == data_.end() || IsRemoved(id)) {
-      NOTREACHED() << "Attempting to remove an item not in the list";
-      return;
-    }
-
-    if (iteration_depth_ == 0) {
-      data_.erase(i);
-    } else {
-      removed_ids_.insert(id);
-    }
-  }
-
-  // Replaces the value for |id| with |new_data| and returns the existing value.
-  // Should only be called with an already added id.
-  V Replace(KeyType id, V new_data) {
-    DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
-    DCHECK(!check_on_null_data_ || new_data);
-    typename HashTable::iterator i = data_.find(id);
-    DCHECK(i != data_.end());
-    DCHECK(!IsRemoved(id));
-
-    using std::swap;
-    swap(i->second, new_data);
-    return new_data;
-  }
-
-  void Clear() {
-    DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
-    if (iteration_depth_ == 0) {
-      data_.clear();
-    } else {
-      removed_ids_.reserve(data_.size());
-      removed_ids_.insert(KeyIterator(data_.begin()), KeyIterator(data_.end()));
-    }
-  }
-
-  bool IsEmpty() const {
-    DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
-    return size() == 0u;
-  }
-
-  T* Lookup(KeyType id) const {
-    DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
-    typename HashTable::const_iterator i = data_.find(id);
-    if (i == data_.end() || !i->second || IsRemoved(id))
-      return nullptr;
-    return &*i->second;
-  }
-
-  size_t size() const {
-    DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
-    return data_.size() - removed_ids_.size();
-  }
-
-#if defined(UNIT_TEST)
-  int iteration_depth() const {
-    return iteration_depth_;
-  }
-#endif  // defined(UNIT_TEST)
-
-  // It is safe to remove elements from the map during iteration. All iterators
-  // will remain valid.
-  template<class ReturnType>
-  class Iterator {
-   public:
-    Iterator(IDMap<V, K>* map) : map_(map), iter_(map_->data_.begin()) {
-      Init();
-    }
-
-    Iterator(const Iterator& iter)
-        : map_(iter.map_),
-          iter_(iter.iter_) {
-      Init();
-    }
-
-    const Iterator& operator=(const Iterator& iter) {
-      map_ = iter.map;
-      iter_ = iter.iter;
-      Init();
-      return *this;
-    }
-
-    ~Iterator() {
-      DCHECK_CALLED_ON_VALID_SEQUENCE(map_->sequence_checker_);
-
-      // We're going to decrement iteration depth. Make sure it's greater than
-      // zero so that it doesn't become negative.
-      DCHECK_LT(0, map_->iteration_depth_);
-
-      if (--map_->iteration_depth_ == 0)
-        map_->Compact();
-    }
-
-    bool IsAtEnd() const {
-      DCHECK_CALLED_ON_VALID_SEQUENCE(map_->sequence_checker_);
-      return iter_ == map_->data_.end();
-    }
-
-    KeyType GetCurrentKey() const {
-      DCHECK_CALLED_ON_VALID_SEQUENCE(map_->sequence_checker_);
-      return iter_->first;
-    }
-
-    ReturnType* GetCurrentValue() const {
-      DCHECK_CALLED_ON_VALID_SEQUENCE(map_->sequence_checker_);
-      if (!iter_->second || map_->IsRemoved(iter_->first))
-        return nullptr;
-      return &*iter_->second;
-    }
-
-    void Advance() {
-      DCHECK_CALLED_ON_VALID_SEQUENCE(map_->sequence_checker_);
-      ++iter_;
-      SkipRemovedEntries();
-    }
-
-   private:
-    void Init() {
-      DCHECK_CALLED_ON_VALID_SEQUENCE(map_->sequence_checker_);
-      ++map_->iteration_depth_;
-      SkipRemovedEntries();
-    }
-
-    void SkipRemovedEntries() {
-      while (iter_ != map_->data_.end() && map_->IsRemoved(iter_->first))
-        ++iter_;
-    }
-
-    IDMap<V, K>* map_;
-    typename HashTable::const_iterator iter_;
-  };
-
-  typedef Iterator<T> iterator;
-  typedef Iterator<const T> const_iterator;
-
- private:
-  // Transforms a map iterator to an iterator on the keys of the map.
-  // Used by Clear() to populate |removed_ids_| in bulk.
-  struct KeyIterator : std::iterator<std::forward_iterator_tag, KeyType> {
-    using inner_iterator = typename HashTable::iterator;
-    inner_iterator iter_;
-
-    KeyIterator(inner_iterator iter) : iter_(iter) {}
-    KeyType operator*() const { return iter_->first; }
-    KeyIterator& operator++() {
-      ++iter_;
-      return *this;
-    }
-    KeyIterator operator++(int) { return KeyIterator(iter_++); }
-    bool operator==(const KeyIterator& other) const {
-      return iter_ == other.iter_;
-    }
-    bool operator!=(const KeyIterator& other) const {
-      return iter_ != other.iter_;
-    }
-  };
-
-  KeyType AddInternal(V data) {
-    DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
-    DCHECK(!check_on_null_data_ || data);
-    KeyType this_id = next_id_;
-    DCHECK(data_.find(this_id) == data_.end()) << "Inserting duplicate item";
-    data_[this_id] = std::move(data);
-    next_id_++;
-    return this_id;
-  }
-
-  void AddWithIDInternal(V data, KeyType id) {
-    DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);
-    DCHECK(!check_on_null_data_ || data);
-    if (IsRemoved(id)) {
-      removed_ids_.erase(id);
-    } else {
-      DCHECK(data_.find(id) == data_.end()) << "Inserting duplicate item";
-    }
-    data_[id] = std::move(data);
-  }
-
-  bool IsRemoved(KeyType key) const {
-    return removed_ids_.find(key) != removed_ids_.end();
-  }
-
-  void Compact() {
-    DCHECK_EQ(0, iteration_depth_);
-    for (const auto& i : removed_ids_)
-      data_.erase(i);
-    removed_ids_.clear();
-  }
-
-  // Keep track of how many iterators are currently iterating on us to safely
-  // handle removing items during iteration.
-  int iteration_depth_;
-
-  // Keep set of IDs that should be removed after the outermost iteration has
-  // finished. This way we manage to not invalidate the iterator when an element
-  // is removed.
-  base::flat_set<KeyType> removed_ids_;
-
-  // The next ID that we will return from Add()
-  KeyType next_id_;
-
-  HashTable data_;
-
-  // See description above setter.
-  bool check_on_null_data_;
-
-  SEQUENCE_CHECKER(sequence_checker_);
-
-  DISALLOW_COPY_AND_ASSIGN(IDMap);
-};
-
-}  // namespace base
-
-#endif  // BASE_CONTAINERS_ID_MAP_H_
diff --git a/base/containers/linked_list.h b/base/containers/linked_list.h
deleted file mode 100644
index a913bad..0000000
--- a/base/containers/linked_list.h
+++ /dev/null
@@ -1,190 +0,0 @@
-// Copyright (c) 2009 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef BASE_CONTAINERS_LINKED_LIST_H_
-#define BASE_CONTAINERS_LINKED_LIST_H_
-
-#include "base/macros.h"
-
-// Simple LinkedList type. (See the Q&A section to understand how this
-// differs from std::list).
-//
-// To use, start by declaring the class which will be contained in the linked
-// list, as extending LinkNode (this gives it next/previous pointers).
-//
-//   class MyNodeType : public LinkNode<MyNodeType> {
-//     ...
-//   };
-//
-// Next, to keep track of the list's head/tail, use a LinkedList instance:
-//
-//   LinkedList<MyNodeType> list;
-//
-// To add elements to the list, use any of LinkedList::Append,
-// LinkNode::InsertBefore, or LinkNode::InsertAfter:
-//
-//   LinkNode<MyNodeType>* n1 = ...;
-//   LinkNode<MyNodeType>* n2 = ...;
-//   LinkNode<MyNodeType>* n3 = ...;
-//
-//   list.Append(n1);
-//   list.Append(n3);
-//   n3->InsertBefore(n3);
-//
-// Lastly, to iterate through the linked list forwards:
-//
-//   for (LinkNode<MyNodeType>* node = list.head();
-//        node != list.end();
-//        node = node->next()) {
-//     MyNodeType* value = node->value();
-//     ...
-//   }
-//
-// Or to iterate the linked list backwards:
-//
-//   for (LinkNode<MyNodeType>* node = list.tail();
-//        node != list.end();
-//        node = node->previous()) {
-//     MyNodeType* value = node->value();
-//     ...
-//   }
-//
-// Questions and Answers:
-//
-// Q. Should I use std::list or base::LinkedList?
-//
-// A. The main reason to use base::LinkedList over std::list is
-//    performance. If you don't care about the performance differences
-//    then use an STL container, as it makes for better code readability.
-//
-//    Comparing the performance of base::LinkedList<T> to std::list<T*>:
-//
-//    * Erasing an element of type T* from base::LinkedList<T> is
-//      an O(1) operation. Whereas for std::list<T*> it is O(n).
-//      That is because with std::list<T*> you must obtain an
-//      iterator to the T* element before you can call erase(iterator).
-//
-//    * Insertion operations with base::LinkedList<T> never require
-//      heap allocations.
-//
-// Q. How does base::LinkedList implementation differ from std::list?
-//
-// A. Doubly-linked lists are made up of nodes that contain "next" and
-//    "previous" pointers that reference other nodes in the list.
-//
-//    With base::LinkedList<T>, the type being inserted already reserves
-//    space for the "next" and "previous" pointers (base::LinkNode<T>*).
-//    Whereas with std::list<T> the type can be anything, so the implementation
-//    needs to glue on the "next" and "previous" pointers using
-//    some internal node type.
-
-namespace base {
-
-template <typename T>
-class LinkNode {
- public:
-  LinkNode() : previous_(nullptr), next_(nullptr) {}
-  LinkNode(LinkNode<T>* previous, LinkNode<T>* next)
-      : previous_(previous), next_(next) {}
-
-  LinkNode(LinkNode<T>&& rhs) {
-    next_ = rhs.next_;
-    rhs.next_ = nullptr;
-    previous_ = rhs.previous_;
-    rhs.previous_ = nullptr;
-
-    // If the node belongs to a list, next_ and previous_ are both non-null.
-    // Otherwise, they are both null.
-    if (next_) {
-      next_->previous_ = this;
-      previous_->next_ = this;
-    }
-  }
-
-  // Insert |this| into the linked list, before |e|.
-  void InsertBefore(LinkNode<T>* e) {
-    this->next_ = e;
-    this->previous_ = e->previous_;
-    e->previous_->next_ = this;
-    e->previous_ = this;
-  }
-
-  // Insert |this| into the linked list, after |e|.
-  void InsertAfter(LinkNode<T>* e) {
-    this->next_ = e->next_;
-    this->previous_ = e;
-    e->next_->previous_ = this;
-    e->next_ = this;
-  }
-
-  // Remove |this| from the linked list.
-  void RemoveFromList() {
-    this->previous_->next_ = this->next_;
-    this->next_->previous_ = this->previous_;
-    // next() and previous() return non-null if and only this node is not in any
-    // list.
-    this->next_ = nullptr;
-    this->previous_ = nullptr;
-  }
-
-  LinkNode<T>* previous() const {
-    return previous_;
-  }
-
-  LinkNode<T>* next() const {
-    return next_;
-  }
-
-  // Cast from the node-type to the value type.
-  const T* value() const {
-    return static_cast<const T*>(this);
-  }
-
-  T* value() {
-    return static_cast<T*>(this);
-  }
-
- private:
-  LinkNode<T>* previous_;
-  LinkNode<T>* next_;
-
-  DISALLOW_COPY_AND_ASSIGN(LinkNode);
-};
-
-template <typename T>
-class LinkedList {
- public:
-  // The "root" node is self-referential, and forms the basis of a circular
-  // list (root_.next() will point back to the start of the list,
-  // and root_->previous() wraps around to the end of the list).
-  LinkedList() : root_(&root_, &root_) {}
-
-  // Appends |e| to the end of the linked list.
-  void Append(LinkNode<T>* e) {
-    e->InsertBefore(&root_);
-  }
-
-  LinkNode<T>* head() const {
-    return root_.next();
-  }
-
-  LinkNode<T>* tail() const {
-    return root_.previous();
-  }
-
-  const LinkNode<T>* end() const {
-    return &root_;
-  }
-
-  bool empty() const { return head() == end(); }
-
- private:
-  LinkNode<T> root_;
-
-  DISALLOW_COPY_AND_ASSIGN(LinkedList);
-};
-
-}  // namespace base
-
-#endif  // BASE_CONTAINERS_LINKED_LIST_H_
diff --git a/base/containers/mru_cache.h b/base/containers/mru_cache.h
deleted file mode 100644
index 4a9f44e..0000000
--- a/base/containers/mru_cache.h
+++ /dev/null
@@ -1,268 +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.
-
-// This file contains a template for a Most Recently Used cache that allows
-// constant-time access to items using a key, but easy identification of the
-// least-recently-used items for removal.  Each key can only be associated with
-// one payload item at a time.
-//
-// The key object will be stored twice, so it should support efficient copying.
-//
-// NOTE: While all operations are O(1), this code is written for
-// legibility rather than optimality. If future profiling identifies this as
-// a bottleneck, there is room for smaller values of 1 in the O(1). :]
-
-#ifndef BASE_CONTAINERS_MRU_CACHE_H_
-#define BASE_CONTAINERS_MRU_CACHE_H_
-
-#include <stddef.h>
-
-#include <algorithm>
-#include <functional>
-#include <list>
-#include <map>
-#include <unordered_map>
-#include <utility>
-
-#include "base/logging.h"
-#include "base/macros.h"
-
-namespace base {
-namespace trace_event {
-namespace internal {
-
-template <class MruCacheType>
-size_t DoEstimateMemoryUsageForMruCache(const MruCacheType&);
-
-}  // namespace internal
-}  // namespace trace_event
-
-// MRUCacheBase ----------------------------------------------------------------
-
-// This template is used to standardize map type containers that can be used
-// by MRUCacheBase. This level of indirection is necessary because of the way
-// that template template params and default template params interact.
-template <class KeyType, class ValueType, class CompareType>
-struct MRUCacheStandardMap {
-  typedef std::map<KeyType, ValueType, CompareType> Type;
-};
-
-// Base class for the MRU cache specializations defined below.
-template <class KeyType,
-          class PayloadType,
-          class HashOrCompareType,
-          template <typename, typename, typename> class MapType =
-              MRUCacheStandardMap>
-class MRUCacheBase {
- public:
-  // The payload of the list. This maintains a copy of the key so we can
-  // efficiently delete things given an element of the list.
-  typedef std::pair<KeyType, PayloadType> value_type;
-
- private:
-  typedef std::list<value_type> PayloadList;
-  typedef typename MapType<KeyType,
-                           typename PayloadList::iterator,
-                           HashOrCompareType>::Type KeyIndex;
-
- public:
-  typedef typename PayloadList::size_type size_type;
-
-  typedef typename PayloadList::iterator iterator;
-  typedef typename PayloadList::const_iterator const_iterator;
-  typedef typename PayloadList::reverse_iterator reverse_iterator;
-  typedef typename PayloadList::const_reverse_iterator const_reverse_iterator;
-
-  enum { NO_AUTO_EVICT = 0 };
-
-  // The max_size is the size at which the cache will prune its members to when
-  // a new item is inserted. If the caller wants to manager this itself (for
-  // example, maybe it has special work to do when something is evicted), it
-  // can pass NO_AUTO_EVICT to not restrict the cache size.
-  explicit MRUCacheBase(size_type max_size) : max_size_(max_size) {}
-
-  virtual ~MRUCacheBase() = default;
-
-  size_type max_size() const { return max_size_; }
-
-  // Inserts a payload item with the given key. If an existing item has
-  // the same key, it is removed prior to insertion. An iterator indicating the
-  // inserted item will be returned (this will always be the front of the list).
-  //
-  // The payload will be forwarded.
-  template <typename Payload>
-  iterator Put(const KeyType& key, Payload&& payload) {
-    // Remove any existing payload with that key.
-    typename KeyIndex::iterator index_iter = index_.find(key);
-    if (index_iter != index_.end()) {
-      // Erase the reference to it. The index reference will be replaced in the
-      // code below.
-      Erase(index_iter->second);
-    } else if (max_size_ != NO_AUTO_EVICT) {
-      // New item is being inserted which might make it larger than the maximum
-      // size: kick the oldest thing out if necessary.
-      ShrinkToSize(max_size_ - 1);
-    }
-
-    ordering_.emplace_front(key, std::forward<Payload>(payload));
-    index_.emplace(key, ordering_.begin());
-    return ordering_.begin();
-  }
-
-  // Retrieves the contents of the given key, or end() if not found. This method
-  // has the side effect of moving the requested item to the front of the
-  // recency list.
-  iterator Get(const KeyType& key) {
-    typename KeyIndex::iterator index_iter = index_.find(key);
-    if (index_iter == index_.end())
-      return end();
-    typename PayloadList::iterator iter = index_iter->second;
-
-    // Move the touched item to the front of the recency ordering.
-    ordering_.splice(ordering_.begin(), ordering_, iter);
-    return ordering_.begin();
-  }
-
-  // Retrieves the payload associated with a given key and returns it via
-  // result without affecting the ordering (unlike Get).
-  iterator Peek(const KeyType& key) {
-    typename KeyIndex::const_iterator index_iter = index_.find(key);
-    if (index_iter == index_.end())
-      return end();
-    return index_iter->second;
-  }
-
-  const_iterator Peek(const KeyType& key) const {
-    typename KeyIndex::const_iterator index_iter = index_.find(key);
-    if (index_iter == index_.end())
-      return end();
-    return index_iter->second;
-  }
-
-  // Exchanges the contents of |this| by the contents of the |other|.
-  void Swap(MRUCacheBase& other) {
-    ordering_.swap(other.ordering_);
-    index_.swap(other.index_);
-    std::swap(max_size_, other.max_size_);
-  }
-
-  // Erases the item referenced by the given iterator. An iterator to the item
-  // following it will be returned. The iterator must be valid.
-  iterator Erase(iterator pos) {
-    index_.erase(pos->first);
-    return ordering_.erase(pos);
-  }
-
-  // MRUCache entries are often processed in reverse order, so we add this
-  // convenience function (not typically defined by STL containers).
-  reverse_iterator Erase(reverse_iterator pos) {
-    // We have to actually give it the incremented iterator to delete, since
-    // the forward iterator that base() returns is actually one past the item
-    // being iterated over.
-    return reverse_iterator(Erase((++pos).base()));
-  }
-
-  // Shrinks the cache so it only holds |new_size| items. If |new_size| is
-  // bigger or equal to the current number of items, this will do nothing.
-  void ShrinkToSize(size_type new_size) {
-    for (size_type i = size(); i > new_size; i--)
-      Erase(rbegin());
-  }
-
-  // Deletes everything from the cache.
-  void Clear() {
-    index_.clear();
-    ordering_.clear();
-  }
-
-  // Returns the number of elements in the cache.
-  size_type size() const {
-    // We don't use ordering_.size() for the return value because
-    // (as a linked list) it can be O(n).
-    DCHECK(index_.size() == ordering_.size());
-    return index_.size();
-  }
-
-  // Allows iteration over the list. Forward iteration starts with the most
-  // recent item and works backwards.
-  //
-  // Note that since these iterators are actually iterators over a list, you
-  // can keep them as you insert or delete things (as long as you don't delete
-  // the one you are pointing to) and they will still be valid.
-  iterator begin() { return ordering_.begin(); }
-  const_iterator begin() const { return ordering_.begin(); }
-  iterator end() { return ordering_.end(); }
-  const_iterator end() const { return ordering_.end(); }
-
-  reverse_iterator rbegin() { return ordering_.rbegin(); }
-  const_reverse_iterator rbegin() const { return ordering_.rbegin(); }
-  reverse_iterator rend() { return ordering_.rend(); }
-  const_reverse_iterator rend() const { return ordering_.rend(); }
-
-  bool empty() const { return ordering_.empty(); }
-
- private:
-  template <class MruCacheType>
-  friend size_t trace_event::internal::DoEstimateMemoryUsageForMruCache(
-      const MruCacheType&);
-
-  PayloadList ordering_;
-  KeyIndex index_;
-
-  size_type max_size_;
-
-  DISALLOW_COPY_AND_ASSIGN(MRUCacheBase);
-};
-
-// MRUCache --------------------------------------------------------------------
-
-// A container that does not do anything to free its data. Use this when storing
-// value types (as opposed to pointers) in the list.
-template <class KeyType,
-          class PayloadType,
-          class CompareType = std::less<KeyType>>
-class MRUCache : public MRUCacheBase<KeyType, PayloadType, CompareType> {
- private:
-  using ParentType = MRUCacheBase<KeyType, PayloadType, CompareType>;
-
- public:
-  // See MRUCacheBase, noting the possibility of using NO_AUTO_EVICT.
-  explicit MRUCache(typename ParentType::size_type max_size)
-      : ParentType(max_size) {}
-  virtual ~MRUCache() = default;
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(MRUCache);
-};
-
-// HashingMRUCache ------------------------------------------------------------
-
-template <class KeyType, class ValueType, class HashType>
-struct MRUCacheHashMap {
-  typedef std::unordered_map<KeyType, ValueType, HashType> Type;
-};
-
-// This class is similar to MRUCache, except that it uses std::unordered_map as
-// the map type instead of std::map. Note that your KeyType must be hashable to
-// use this cache or you need to provide a hashing class.
-template <class KeyType, class PayloadType, class HashType = std::hash<KeyType>>
-class HashingMRUCache
-    : public MRUCacheBase<KeyType, PayloadType, HashType, MRUCacheHashMap> {
- private:
-  using ParentType =
-      MRUCacheBase<KeyType, PayloadType, HashType, MRUCacheHashMap>;
-
- public:
-  // See MRUCacheBase, noting the possibility of using NO_AUTO_EVICT.
-  explicit HashingMRUCache(typename ParentType::size_type max_size)
-      : ParentType(max_size) {}
-  virtual ~HashingMRUCache() = default;
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(HashingMRUCache);
-};
-
-}  // namespace base
-
-#endif  // BASE_CONTAINERS_MRU_CACHE_H_
diff --git a/base/containers/ring_buffer.h b/base/containers/ring_buffer.h
deleted file mode 100644
index 4e48907..0000000
--- a/base/containers/ring_buffer.h
+++ /dev/null
@@ -1,119 +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.
-
-#ifndef BASE_CONTAINERS_RING_BUFFER_H_
-#define BASE_CONTAINERS_RING_BUFFER_H_
-
-#include <stddef.h>
-
-#include "base/logging.h"
-#include "base/macros.h"
-
-namespace base {
-
-// base::RingBuffer uses a fixed-size array, unlike base::circular_deque and
-// std::deque, and so, one can access only the last |kSize| elements. Also, you
-// can add elements to the front and read/modify random elements, but cannot
-// remove elements from the back. Therefore, it does not have a |Size| method,
-// only |BufferSize|, which is a constant, and |CurrentIndex|, which is the
-// number of elements added so far.
-//
-// If the above is sufficient for your use case, base::RingBuffer should be more
-// efficient than base::circular_deque.
-template <typename T, size_t kSize>
-class RingBuffer {
- public:
-  RingBuffer() : current_index_(0) {}
-
-  size_t BufferSize() const { return kSize; }
-
-  size_t CurrentIndex() const { return current_index_; }
-
-  // tests if a value was saved to this index
-  bool IsFilledIndex(size_t n) const { return BufferIndex(n) < current_index_; }
-
-  // n = 0 returns the oldest value and
-  // n = bufferSize() - 1 returns the most recent value.
-  const T& ReadBuffer(size_t n) const {
-    DCHECK(IsFilledIndex(n));
-    return buffer_[BufferIndex(n)];
-  }
-
-  T* MutableReadBuffer(size_t n) {
-    DCHECK(IsFilledIndex(n));
-    return &buffer_[BufferIndex(n)];
-  }
-
-  void SaveToBuffer(const T& value) {
-    buffer_[BufferIndex(0)] = value;
-    current_index_++;
-  }
-
-  void Clear() { current_index_ = 0; }
-
-  // Iterator has const access to the RingBuffer it got retrieved from.
-  class Iterator {
-   public:
-    size_t index() const { return index_; }
-
-    const T* operator->() const { return &buffer_.ReadBuffer(index_); }
-    const T* operator*() const { return &buffer_.ReadBuffer(index_); }
-
-    Iterator& operator++() {
-      index_++;
-      if (index_ == kSize)
-        out_of_range_ = true;
-      return *this;
-    }
-
-    Iterator& operator--() {
-      if (index_ == 0)
-        out_of_range_ = true;
-      index_--;
-      return *this;
-    }
-
-    operator bool() const {
-      return buffer_.IsFilledIndex(index_) && !out_of_range_;
-    }
-
-   private:
-    Iterator(const RingBuffer<T, kSize>& buffer, size_t index)
-        : buffer_(buffer), index_(index), out_of_range_(false) {}
-
-    const RingBuffer<T, kSize>& buffer_;
-    size_t index_;
-    bool out_of_range_;
-
-    friend class RingBuffer<T, kSize>;
-  };
-
-  // Returns an Iterator pointing to the oldest value in the buffer.
-  // Example usage (iterate from oldest to newest value):
-  //  for (RingBuffer<T, kSize>::Iterator it = ring_buffer.Begin(); it; ++it) {}
-  Iterator Begin() const {
-    if (current_index_ < kSize)
-      return Iterator(*this, kSize - current_index_);
-    return Iterator(*this, 0);
-  }
-
-  // Returns an Iterator pointing to the newest value in the buffer.
-  // Example usage (iterate backwards from newest to oldest value):
-  //  for (RingBuffer<T, kSize>::Iterator it = ring_buffer.End(); it; --it) {}
-  Iterator End() const { return Iterator(*this, kSize - 1); }
-
- private:
-  inline size_t BufferIndex(size_t n) const {
-    return (current_index_ + n) % kSize;
-  }
-
-  T buffer_[kSize];
-  size_t current_index_;
-
-  DISALLOW_COPY_AND_ASSIGN(RingBuffer);
-};
-
-}  // namespace base
-
-#endif  // BASE_CONTAINERS_RING_BUFFER_H_
diff --git a/base/containers/small_map.h b/base/containers/small_map.h
deleted file mode 100644
index a235f11..0000000
--- a/base/containers/small_map.h
+++ /dev/null
@@ -1,659 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef BASE_CONTAINERS_SMALL_MAP_H_
-#define BASE_CONTAINERS_SMALL_MAP_H_
-
-#include <stddef.h>
-
-#include <map>
-#include <new>
-#include <string>
-#include <utility>
-
-#include "base/logging.h"
-
-namespace base {
-
-// small_map is a container with a std::map-like interface. It starts out
-// backed by a unsorted array but switches to some other container type if it
-// grows beyond this fixed size.
-//
-// Please see //base/containers/README.md for an overview of which container
-// to select.
-//
-// PROS
-//
-//  - Good memory locality and low overhead for smaller maps.
-//  - Handles large maps without the degenerate performance of flat_map.
-//
-// CONS
-//
-//  - Larger code size than the alternatives.
-//
-// IMPORTANT NOTES
-//
-//  - Iterators are invalidated across mutations.
-//
-// DETAILS
-//
-// base::small_map will pick up the comparator from the underlying map type. In
-// std::map only a "less" operator is defined, which requires us to do two
-// comparisons per element when doing the brute-force search in the simple
-// array. std::unordered_map has a key_equal function which will be used.
-//
-// We define default overrides for the common map types to avoid this
-// double-compare, but you should be aware of this if you use your own
-// operator< for your map and supply yor own version of == to the small_map.
-// You can use regular operator== by just doing:
-//
-//   base::small_map<std::map<MyKey, MyValue>, 4, std::equal_to<KyKey>>
-//
-//
-// USAGE
-// -----
-//
-// NormalMap:  The map type to fall back to.  This also defines the key
-//             and value types for the small_map.
-// kArraySize:  The size of the initial array of results. This will be
-//              allocated with the small_map object rather than separately on
-//              the heap. Once the map grows beyond this size, the map type
-//              will be used instead.
-// EqualKey:  A functor which tests two keys for equality.  If the wrapped
-//            map type has a "key_equal" member (hash_map does), then that will
-//            be used by default. If the wrapped map type has a strict weak
-//            ordering "key_compare" (std::map does), that will be used to
-//            implement equality by default.
-// MapInit: A functor that takes a NormalMap* and uses it to initialize the map.
-//          This functor will be called at most once per small_map, when the map
-//          exceeds the threshold of kArraySize and we are about to copy values
-//          from the array to the map. The functor *must* initialize the
-//          NormalMap* argument with placement new, since after it runs we
-//          assume that the NormalMap has been initialized.
-//
-// example:
-//   base::small_map<std::map<string, int>> days;
-//   days["sunday"   ] = 0;
-//   days["monday"   ] = 1;
-//   days["tuesday"  ] = 2;
-//   days["wednesday"] = 3;
-//   days["thursday" ] = 4;
-//   days["friday"   ] = 5;
-//   days["saturday" ] = 6;
-
-namespace internal {
-
-template <typename NormalMap>
-class small_map_default_init {
- public:
-  void operator()(NormalMap* map) const { new (map) NormalMap(); }
-};
-
-// has_key_equal<M>::value is true iff there exists a type M::key_equal. This is
-// used to dispatch to one of the select_equal_key<> metafunctions below.
-template <typename M>
-struct has_key_equal {
-  typedef char sml;  // "small" is sometimes #defined so we use an abbreviation.
-  typedef struct { char dummy[2]; } big;
-  // Two functions, one accepts types that have a key_equal member, and one that
-  // accepts anything. They each return a value of a different size, so we can
-  // determine at compile-time which function would have been called.
-  template <typename U> static big test(typename U::key_equal*);
-  template <typename> static sml test(...);
-  // Determines if M::key_equal exists by looking at the size of the return
-  // type of the compiler-chosen test() function.
-  static const bool value = (sizeof(test<M>(0)) == sizeof(big));
-};
-template <typename M> const bool has_key_equal<M>::value;
-
-// Base template used for map types that do NOT have an M::key_equal member,
-// e.g., std::map<>. These maps have a strict weak ordering comparator rather
-// than an equality functor, so equality will be implemented in terms of that
-// comparator.
-//
-// There's a partial specialization of this template below for map types that do
-// have an M::key_equal member.
-template <typename M, bool has_key_equal_value>
-struct select_equal_key {
-  struct equal_key {
-    bool operator()(const typename M::key_type& left,
-                    const typename M::key_type& right) {
-      // Implements equality in terms of a strict weak ordering comparator.
-      typename M::key_compare comp;
-      return !comp(left, right) && !comp(right, left);
-    }
-  };
-};
-
-// Provide overrides to use operator== for key compare for the "normal" map and
-// hash map types. If you override the default comparator or allocator for a
-// map or hash_map, or use another type of map, this won't get used.
-//
-// If we switch to using std::unordered_map for base::hash_map, then the
-// hash_map specialization can be removed.
-template <typename KeyType, typename ValueType>
-struct select_equal_key<std::map<KeyType, ValueType>, false> {
-  struct equal_key {
-    bool operator()(const KeyType& left, const KeyType& right) {
-      return left == right;
-    }
-  };
-};
-template <typename KeyType, typename ValueType>
-struct select_equal_key<base::hash_map<KeyType, ValueType>, false> {
-  struct equal_key {
-    bool operator()(const KeyType& left, const KeyType& right) {
-      return left == right;
-    }
-  };
-};
-
-// Partial template specialization handles case where M::key_equal exists, e.g.,
-// hash_map<>.
-template <typename M>
-struct select_equal_key<M, true> {
-  typedef typename M::key_equal equal_key;
-};
-
-}  // namespace internal
-
-template <typename NormalMap,
-          int kArraySize = 4,
-          typename EqualKey = typename internal::select_equal_key<
-              NormalMap,
-              internal::has_key_equal<NormalMap>::value>::equal_key,
-          typename MapInit = internal::small_map_default_init<NormalMap>>
-class small_map {
-  // We cannot rely on the compiler to reject array of size 0.  In
-  // particular, gcc 2.95.3 does it but later versions allow 0-length
-  // arrays.  Therefore, we explicitly reject non-positive kArraySize
-  // here.
-  static_assert(kArraySize > 0, "default initial size should be positive");
-
- public:
-  typedef typename NormalMap::key_type key_type;
-  typedef typename NormalMap::mapped_type data_type;
-  typedef typename NormalMap::mapped_type mapped_type;
-  typedef typename NormalMap::value_type value_type;
-  typedef EqualKey key_equal;
-
-  small_map() : size_(0), functor_(MapInit()) {}
-
-  explicit small_map(const MapInit& functor) : size_(0), functor_(functor) {}
-
-  // Allow copy-constructor and assignment, since STL allows them too.
-  small_map(const small_map& src) {
-    // size_ and functor_ are initted in InitFrom()
-    InitFrom(src);
-  }
-  void operator=(const small_map& src) {
-    if (&src == this) return;
-
-    // This is not optimal. If src and dest are both using the small
-    // array, we could skip the teardown and reconstruct. One problem
-    // to be resolved is that the value_type itself is pair<const K,
-    // V>, and const K is not assignable.
-    Destroy();
-    InitFrom(src);
-  }
-  ~small_map() { Destroy(); }
-
-  class const_iterator;
-
-  class iterator {
-   public:
-    typedef typename NormalMap::iterator::iterator_category iterator_category;
-    typedef typename NormalMap::iterator::value_type value_type;
-    typedef typename NormalMap::iterator::difference_type difference_type;
-    typedef typename NormalMap::iterator::pointer pointer;
-    typedef typename NormalMap::iterator::reference reference;
-
-    inline iterator(): array_iter_(NULL) {}
-
-    inline iterator& operator++() {
-      if (array_iter_ != NULL) {
-        ++array_iter_;
-      } else {
-        ++hash_iter_;
-      }
-      return *this;
-    }
-    inline iterator operator++(int /*unused*/) {
-      iterator result(*this);
-      ++(*this);
-      return result;
-    }
-    inline iterator& operator--() {
-      if (array_iter_ != NULL) {
-        --array_iter_;
-      } else {
-        --hash_iter_;
-      }
-      return *this;
-    }
-    inline iterator operator--(int /*unused*/) {
-      iterator result(*this);
-      --(*this);
-      return result;
-    }
-    inline value_type* operator->() const {
-      if (array_iter_ != NULL) {
-        return array_iter_;
-      } else {
-        return hash_iter_.operator->();
-      }
-    }
-
-    inline value_type& operator*() const {
-      if (array_iter_ != NULL) {
-        return *array_iter_;
-      } else {
-        return *hash_iter_;
-      }
-    }
-
-    inline bool operator==(const iterator& other) const {
-      if (array_iter_ != NULL) {
-        return array_iter_ == other.array_iter_;
-      } else {
-        return other.array_iter_ == NULL && hash_iter_ == other.hash_iter_;
-      }
-    }
-
-    inline bool operator!=(const iterator& other) const {
-      return !(*this == other);
-    }
-
-    bool operator==(const const_iterator& other) const;
-    bool operator!=(const const_iterator& other) const;
-
-   private:
-    friend class small_map;
-    friend class const_iterator;
-    inline explicit iterator(value_type* init) : array_iter_(init) {}
-    inline explicit iterator(const typename NormalMap::iterator& init)
-      : array_iter_(NULL), hash_iter_(init) {}
-
-    value_type* array_iter_;
-    typename NormalMap::iterator hash_iter_;
-  };
-
-  class const_iterator {
-   public:
-    typedef typename NormalMap::const_iterator::iterator_category
-        iterator_category;
-    typedef typename NormalMap::const_iterator::value_type value_type;
-    typedef typename NormalMap::const_iterator::difference_type difference_type;
-    typedef typename NormalMap::const_iterator::pointer pointer;
-    typedef typename NormalMap::const_iterator::reference reference;
-
-    inline const_iterator(): array_iter_(NULL) {}
-    // Non-explicit ctor lets us convert regular iterators to const iterators
-    inline const_iterator(const iterator& other)
-      : array_iter_(other.array_iter_), hash_iter_(other.hash_iter_) {}
-
-    inline const_iterator& operator++() {
-      if (array_iter_ != NULL) {
-        ++array_iter_;
-      } else {
-        ++hash_iter_;
-      }
-      return *this;
-    }
-    inline const_iterator operator++(int /*unused*/) {
-      const_iterator result(*this);
-      ++(*this);
-      return result;
-    }
-
-    inline const_iterator& operator--() {
-      if (array_iter_ != NULL) {
-        --array_iter_;
-      } else {
-        --hash_iter_;
-      }
-      return *this;
-    }
-    inline const_iterator operator--(int /*unused*/) {
-      const_iterator result(*this);
-      --(*this);
-      return result;
-    }
-
-    inline const value_type* operator->() const {
-      if (array_iter_ != NULL) {
-        return array_iter_;
-      } else {
-        return hash_iter_.operator->();
-      }
-    }
-
-    inline const value_type& operator*() const {
-      if (array_iter_ != NULL) {
-        return *array_iter_;
-      } else {
-        return *hash_iter_;
-      }
-    }
-
-    inline bool operator==(const const_iterator& other) const {
-      if (array_iter_ != NULL) {
-        return array_iter_ == other.array_iter_;
-      } else {
-        return other.array_iter_ == NULL && hash_iter_ == other.hash_iter_;
-      }
-    }
-
-    inline bool operator!=(const const_iterator& other) const {
-      return !(*this == other);
-    }
-
-   private:
-    friend class small_map;
-    inline explicit const_iterator(const value_type* init)
-        : array_iter_(init) {}
-    inline explicit const_iterator(
-        const typename NormalMap::const_iterator& init)
-      : array_iter_(NULL), hash_iter_(init) {}
-
-    const value_type* array_iter_;
-    typename NormalMap::const_iterator hash_iter_;
-  };
-
-  iterator find(const key_type& key) {
-    key_equal compare;
-    if (size_ >= 0) {
-      for (int i = 0; i < size_; i++) {
-        if (compare(array_[i].first, key)) {
-          return iterator(array_ + i);
-        }
-      }
-      return iterator(array_ + size_);
-    } else {
-      return iterator(map()->find(key));
-    }
-  }
-
-  const_iterator find(const key_type& key) const {
-    key_equal compare;
-    if (size_ >= 0) {
-      for (int i = 0; i < size_; i++) {
-        if (compare(array_[i].first, key)) {
-          return const_iterator(array_ + i);
-        }
-      }
-      return const_iterator(array_ + size_);
-    } else {
-      return const_iterator(map()->find(key));
-    }
-  }
-
-  // Invalidates iterators.
-  data_type& operator[](const key_type& key) {
-    key_equal compare;
-
-    if (size_ >= 0) {
-      // operator[] searches backwards, favoring recently-added
-      // elements.
-      for (int i = size_-1; i >= 0; --i) {
-        if (compare(array_[i].first, key)) {
-          return array_[i].second;
-        }
-      }
-      if (size_ == kArraySize) {
-        ConvertToRealMap();
-        return map_[key];
-      } else {
-        new (&array_[size_]) value_type(key, data_type());
-        return array_[size_++].second;
-      }
-    } else {
-      return map_[key];
-    }
-  }
-
-  // Invalidates iterators.
-  std::pair<iterator, bool> insert(const value_type& x) {
-    key_equal compare;
-
-    if (size_ >= 0) {
-      for (int i = 0; i < size_; i++) {
-        if (compare(array_[i].first, x.first)) {
-          return std::make_pair(iterator(array_ + i), false);
-        }
-      }
-      if (size_ == kArraySize) {
-        ConvertToRealMap();  // Invalidates all iterators!
-        std::pair<typename NormalMap::iterator, bool> ret = map_.insert(x);
-        return std::make_pair(iterator(ret.first), ret.second);
-      } else {
-        new (&array_[size_]) value_type(x);
-        return std::make_pair(iterator(array_ + size_++), true);
-      }
-    } else {
-      std::pair<typename NormalMap::iterator, bool> ret = map_.insert(x);
-      return std::make_pair(iterator(ret.first), ret.second);
-    }
-  }
-
-  // Invalidates iterators.
-  template <class InputIterator>
-  void insert(InputIterator f, InputIterator l) {
-    while (f != l) {
-      insert(*f);
-      ++f;
-    }
-  }
-
-  // Invalidates iterators.
-  template <typename... Args>
-  std::pair<iterator, bool> emplace(Args&&... args) {
-    key_equal compare;
-
-    if (size_ >= 0) {
-      value_type x(std::forward<Args>(args)...);
-      for (int i = 0; i < size_; i++) {
-        if (compare(array_[i].first, x.first)) {
-          return std::make_pair(iterator(array_ + i), false);
-        }
-      }
-      if (size_ == kArraySize) {
-        ConvertToRealMap();  // Invalidates all iterators!
-        std::pair<typename NormalMap::iterator, bool> ret =
-            map_.emplace(std::move(x));
-        return std::make_pair(iterator(ret.first), ret.second);
-      } else {
-        new (&array_[size_]) value_type(std::move(x));
-        return std::make_pair(iterator(array_ + size_++), true);
-      }
-    } else {
-      std::pair<typename NormalMap::iterator, bool> ret =
-          map_.emplace(std::forward<Args>(args)...);
-      return std::make_pair(iterator(ret.first), ret.second);
-    }
-  }
-
-  iterator begin() {
-    if (size_ >= 0) {
-      return iterator(array_);
-    } else {
-      return iterator(map_.begin());
-    }
-  }
-  const_iterator begin() const {
-    if (size_ >= 0) {
-      return const_iterator(array_);
-    } else {
-      return const_iterator(map_.begin());
-    }
-  }
-
-  iterator end() {
-    if (size_ >= 0) {
-      return iterator(array_ + size_);
-    } else {
-      return iterator(map_.end());
-    }
-  }
-  const_iterator end() const {
-    if (size_ >= 0) {
-      return const_iterator(array_ + size_);
-    } else {
-      return const_iterator(map_.end());
-    }
-  }
-
-  void clear() {
-    if (size_ >= 0) {
-      for (int i = 0; i < size_; i++) {
-        array_[i].~value_type();
-      }
-    } else {
-      map_.~NormalMap();
-    }
-    size_ = 0;
-  }
-
-  // Invalidates iterators. Returns iterator following the last removed element.
-  iterator erase(const iterator& position) {
-    if (size_ >= 0) {
-      int i = position.array_iter_ - array_;
-      array_[i].~value_type();
-      --size_;
-      if (i != size_) {
-        new (&array_[i]) value_type(std::move(array_[size_]));
-        array_[size_].~value_type();
-        return iterator(array_ + i);
-      }
-      return end();
-    }
-    return iterator(map_.erase(position.hash_iter_));
-  }
-
-  size_t erase(const key_type& key) {
-    iterator iter = find(key);
-    if (iter == end()) return 0u;
-    erase(iter);
-    return 1u;
-  }
-
-  size_t count(const key_type& key) const {
-    return (find(key) == end()) ? 0 : 1;
-  }
-
-  size_t size() const {
-    if (size_ >= 0) {
-      return static_cast<size_t>(size_);
-    } else {
-      return map_.size();
-    }
-  }
-
-  bool empty() const {
-    if (size_ >= 0) {
-      return (size_ == 0);
-    } else {
-      return map_.empty();
-    }
-  }
-
-  // Returns true if we have fallen back to using the underlying map
-  // representation.
-  bool UsingFullMap() const {
-    return size_ < 0;
-  }
-
-  inline NormalMap* map() {
-    CHECK(UsingFullMap());
-    return &map_;
-  }
-  inline const NormalMap* map() const {
-    CHECK(UsingFullMap());
-    return &map_;
-  }
-
- private:
-  int size_;  // negative = using hash_map
-
-  MapInit functor_;
-
-  // We want to call constructors and destructors manually, but we don't want to
-  // allocate and deallocate the memory used for them separately. Since array_
-  // and map_ are mutually exclusive, we'll put them in a union.
-  union {
-    value_type array_[kArraySize];
-    NormalMap map_;
-  };
-
-  void ConvertToRealMap() {
-    // Storage for the elements in the temporary array. This is intentionally
-    // declared as a union to avoid having to default-construct |kArraySize|
-    // elements, only to move construct over them in the initial loop.
-    union Storage {
-      Storage() {}
-      ~Storage() {}
-      value_type array[kArraySize];
-    } temp;
-
-    // Move the current elements into a temporary array.
-    for (int i = 0; i < kArraySize; i++) {
-      new (&temp.array[i]) value_type(std::move(array_[i]));
-      array_[i].~value_type();
-    }
-
-    // Initialize the map.
-    size_ = -1;
-    functor_(&map_);
-
-    // Insert elements into it.
-    for (int i = 0; i < kArraySize; i++) {
-      map_.insert(std::move(temp.array[i]));
-      temp.array[i].~value_type();
-    }
-  }
-
-  // Helpers for constructors and destructors.
-  void InitFrom(const small_map& src) {
-    functor_ = src.functor_;
-    size_ = src.size_;
-    if (src.size_ >= 0) {
-      for (int i = 0; i < size_; i++) {
-        new (&array_[i]) value_type(src.array_[i]);
-      }
-    } else {
-      functor_(&map_);
-      map_ = src.map_;
-    }
-  }
-  void Destroy() {
-    if (size_ >= 0) {
-      for (int i = 0; i < size_; i++) {
-        array_[i].~value_type();
-      }
-    } else {
-      map_.~NormalMap();
-    }
-  }
-};
-
-template <typename NormalMap,
-          int kArraySize,
-          typename EqualKey,
-          typename Functor>
-inline bool small_map<NormalMap, kArraySize, EqualKey, Functor>::iterator::
-operator==(const const_iterator& other) const {
-  return other == *this;
-}
-template <typename NormalMap,
-          int kArraySize,
-          typename EqualKey,
-          typename Functor>
-inline bool small_map<NormalMap, kArraySize, EqualKey, Functor>::iterator::
-operator!=(const const_iterator& other) const {
-  return other != *this;
-}
-
-}  // namespace base
-
-#endif  // BASE_CONTAINERS_SMALL_MAP_H_
diff --git a/base/containers/stack_container.h b/base/containers/stack_container.h
deleted file mode 100644
index 7d84d07..0000000
--- a/base/containers/stack_container.h
+++ /dev/null
@@ -1,229 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef BASE_CONTAINERS_STACK_CONTAINER_H_
-#define BASE_CONTAINERS_STACK_CONTAINER_H_
-
-#include <stddef.h>
-
-#include <vector>
-
-#include "base/macros.h"
-#include "build_config.h"
-
-namespace base {
-
-// This allocator can be used with STL containers to provide a stack buffer
-// from which to allocate memory and overflows onto the heap. This stack buffer
-// would be allocated on the stack and allows us to avoid heap operations in
-// some situations.
-//
-// STL likes to make copies of allocators, so the allocator itself can't hold
-// the data. Instead, we make the creator responsible for creating a
-// StackAllocator::Source which contains the data. Copying the allocator
-// merely copies the pointer to this shared source, so all allocators created
-// based on our allocator will share the same stack buffer.
-//
-// This stack buffer implementation is very simple. The first allocation that
-// fits in the stack buffer will use the stack buffer. Any subsequent
-// allocations will not use the stack buffer, even if there is unused room.
-// This makes it appropriate for array-like containers, but the caller should
-// be sure to reserve() in the container up to the stack buffer size. Otherwise
-// the container will allocate a small array which will "use up" the stack
-// buffer.
-template<typename T, size_t stack_capacity>
-class StackAllocator : public std::allocator<T> {
- public:
-  typedef typename std::allocator<T>::pointer pointer;
-  typedef typename std::allocator<T>::size_type size_type;
-
-  // Backing store for the allocator. The container owner is responsible for
-  // maintaining this for as long as any containers using this allocator are
-  // live.
-  struct Source {
-    Source() : used_stack_buffer_(false) {
-    }
-
-    // Casts the buffer in its right type.
-    T* stack_buffer() { return reinterpret_cast<T*>(stack_buffer_); }
-    const T* stack_buffer() const {
-      return reinterpret_cast<const T*>(&stack_buffer_);
-    }
-
-    // The buffer itself. It is not of type T because we don't want the
-    // constructors and destructors to be automatically called. Define a POD
-    // buffer of the right size instead.
-    alignas(T) char stack_buffer_[sizeof(T[stack_capacity])];
-#if defined(__GNUC__) && !defined(ARCH_CPU_X86_FAMILY)
-    static_assert(alignof(T) <= 16, "http://crbug.com/115612");
-#endif
-
-    // Set when the stack buffer is used for an allocation. We do not track
-    // how much of the buffer is used, only that somebody is using it.
-    bool used_stack_buffer_;
-  };
-
-  // Used by containers when they want to refer to an allocator of type U.
-  template<typename U>
-  struct rebind {
-    typedef StackAllocator<U, stack_capacity> other;
-  };
-
-  // For the straight up copy c-tor, we can share storage.
-  StackAllocator(const StackAllocator<T, stack_capacity>& rhs)
-      : std::allocator<T>(), source_(rhs.source_) {
-  }
-
-  // ISO C++ requires the following constructor to be defined,
-  // and std::vector in VC++2008SP1 Release fails with an error
-  // in the class _Container_base_aux_alloc_real (from <xutility>)
-  // if the constructor does not exist.
-  // For this constructor, we cannot share storage; there's
-  // no guarantee that the Source buffer of Ts is large enough
-  // for Us.
-  // TODO: If we were fancy pants, perhaps we could share storage
-  // iff sizeof(T) == sizeof(U).
-  template<typename U, size_t other_capacity>
-  StackAllocator(const StackAllocator<U, other_capacity>& other)
-      : source_(NULL) {
-  }
-
-  // This constructor must exist. It creates a default allocator that doesn't
-  // actually have a stack buffer. glibc's std::string() will compare the
-  // current allocator against the default-constructed allocator, so this
-  // should be fast.
-  StackAllocator() : source_(NULL) {
-  }
-
-  explicit StackAllocator(Source* source) : source_(source) {
-  }
-
-  // Actually do the allocation. Use the stack buffer if nobody has used it yet
-  // and the size requested fits. Otherwise, fall through to the standard
-  // allocator.
-  pointer allocate(size_type n, void* hint = 0) {
-    if (source_ != NULL && !source_->used_stack_buffer_
-        && n <= stack_capacity) {
-      source_->used_stack_buffer_ = true;
-      return source_->stack_buffer();
-    } else {
-      return std::allocator<T>::allocate(n, hint);
-    }
-  }
-
-  // Free: when trying to free the stack buffer, just mark it as free. For
-  // non-stack-buffer pointers, just fall though to the standard allocator.
-  void deallocate(pointer p, size_type n) {
-    if (source_ != NULL && p == source_->stack_buffer())
-      source_->used_stack_buffer_ = false;
-    else
-      std::allocator<T>::deallocate(p, n);
-  }
-
- private:
-  Source* source_;
-};
-
-// A wrapper around STL containers that maintains a stack-sized buffer that the
-// initial capacity of the vector is based on. Growing the container beyond the
-// stack capacity will transparently overflow onto the heap. The container must
-// support reserve().
-//
-// This will not work with std::string since some implementations allocate
-// more bytes than requested in calls to reserve(), forcing the allocation onto
-// the heap.  http://crbug.com/709273
-//
-// WATCH OUT: the ContainerType MUST use the proper StackAllocator for this
-// type. This object is really intended to be used only internally. You'll want
-// to use the wrappers below for different types.
-template<typename TContainerType, int stack_capacity>
-class StackContainer {
- public:
-  typedef TContainerType ContainerType;
-  typedef typename ContainerType::value_type ContainedType;
-  typedef StackAllocator<ContainedType, stack_capacity> Allocator;
-
-  // Allocator must be constructed before the container!
-  StackContainer() : allocator_(&stack_data_), container_(allocator_) {
-    // Make the container use the stack allocation by reserving our buffer size
-    // before doing anything else.
-    container_.reserve(stack_capacity);
-  }
-
-  // Getters for the actual container.
-  //
-  // Danger: any copies of this made using the copy constructor must have
-  // shorter lifetimes than the source. The copy will share the same allocator
-  // and therefore the same stack buffer as the original. Use std::copy to
-  // copy into a "real" container for longer-lived objects.
-  ContainerType& container() { return container_; }
-  const ContainerType& container() const { return container_; }
-
-  // Support operator-> to get to the container. This allows nicer syntax like:
-  //   StackContainer<...> foo;
-  //   std::sort(foo->begin(), foo->end());
-  ContainerType* operator->() { return &container_; }
-  const ContainerType* operator->() const { return &container_; }
-
-#ifdef UNIT_TEST
-  // Retrieves the stack source so that that unit tests can verify that the
-  // buffer is being used properly.
-  const typename Allocator::Source& stack_data() const {
-    return stack_data_;
-  }
-#endif
-
- protected:
-  typename Allocator::Source stack_data_;
-  Allocator allocator_;
-  ContainerType container_;
-
- private:
-  DISALLOW_COPY_AND_ASSIGN(StackContainer);
-};
-
-// StackVector -----------------------------------------------------------------
-
-// Example:
-//   StackVector<int, 16> foo;
-//   foo->push_back(22);  // we have overloaded operator->
-//   foo[0] = 10;         // as well as operator[]
-template<typename T, size_t stack_capacity>
-class StackVector : public StackContainer<
-    std::vector<T, StackAllocator<T, stack_capacity> >,
-    stack_capacity> {
- public:
-  StackVector() : StackContainer<
-      std::vector<T, StackAllocator<T, stack_capacity> >,
-      stack_capacity>() {
-  }
-
-  // We need to put this in STL containers sometimes, which requires a copy
-  // constructor. We can't call the regular copy constructor because that will
-  // take the stack buffer from the original. Here, we create an empty object
-  // and make a stack buffer of its own.
-  StackVector(const StackVector<T, stack_capacity>& other)
-      : StackContainer<
-            std::vector<T, StackAllocator<T, stack_capacity> >,
-            stack_capacity>() {
-    this->container().assign(other->begin(), other->end());
-  }
-
-  StackVector<T, stack_capacity>& operator=(
-      const StackVector<T, stack_capacity>& other) {
-    this->container().assign(other->begin(), other->end());
-    return *this;
-  }
-
-  // Vectors are commonly indexed, which isn't very convenient even with
-  // operator-> (using "->at()" does exception stuff we don't want).
-  T& operator[](size_t i) { return this->container().operator[](i); }
-  const T& operator[](size_t i) const {
-    return this->container().operator[](i);
-  }
-};
-
-}  // namespace base
-
-#endif  // BASE_CONTAINERS_STACK_CONTAINER_H_
diff --git a/base/containers/unique_ptr_adapters.h b/base/containers/unique_ptr_adapters.h
deleted file mode 100644
index 42fab19..0000000
--- a/base/containers/unique_ptr_adapters.h
+++ /dev/null
@@ -1,78 +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.
-
-#ifndef BASE_CONTAINERS_UNIQUE_PTR_ADAPTERS_H_
-#define BASE_CONTAINERS_UNIQUE_PTR_ADAPTERS_H_
-
-#include <memory>
-
-namespace base {
-
-// This transparent comparator allows to lookup by raw pointer in
-// a container of unique pointers. This functionality is based on C++14
-// extensions to std::set/std::map interface, and can also be used
-// with base::flat_set/base::flat_map.
-//
-// Example usage:
-//   Foo* foo = ...
-//   std::set<std::unique_ptr<Foo>, base::UniquePtrComparator> set;
-//   set.insert(std::unique_ptr<Foo>(foo));
-//   ...
-//   auto it = set.find(foo);
-//   EXPECT_EQ(foo, it->get());
-//
-// You can find more information about transparent comparisons here:
-// http://en.cppreference.com/w/cpp/utility/functional/less_void
-struct UniquePtrComparator {
-  using is_transparent = int;
-
-  template <typename T>
-  bool operator()(const std::unique_ptr<T>& lhs,
-                  const std::unique_ptr<T>& rhs) const {
-    return lhs < rhs;
-  }
-
-  template <typename T>
-  bool operator()(const T* lhs, const std::unique_ptr<T>& rhs) const {
-    return lhs < rhs.get();
-  }
-
-  template <typename T>
-  bool operator()(const std::unique_ptr<T>& lhs, const T* rhs) const {
-    return lhs.get() < rhs;
-  }
-};
-
-// UniquePtrMatcher is useful for finding an element in a container of
-// unique_ptrs when you have the raw pointer.
-//
-// Example usage:
-//   std::vector<std::unique_ptr<Foo>> vector;
-//   Foo* element = ...
-//   auto iter = std::find_if(vector.begin(), vector.end(),
-//                            MatchesUniquePtr(element));
-//
-// Example of erasing from container:
-//   EraseIf(v, MatchesUniquePtr(element));
-//
-template <class T, class Deleter = std::default_delete<T>>
-struct UniquePtrMatcher {
-  explicit UniquePtrMatcher(T* t) : t_(t) {}
-
-  bool operator()(const std::unique_ptr<T, Deleter>& o) {
-    return o.get() == t_;
-  }
-
- private:
-  T* const t_;
-};
-
-template <class T, class Deleter = std::default_delete<T>>
-UniquePtrMatcher<T, Deleter> MatchesUniquePtr(T* t) {
-  return UniquePtrMatcher<T, Deleter>(t);
-}
-
-}  // namespace base
-
-#endif  // BASE_CONTAINERS_UNIQUE_PTR_ADAPTERS_H_
diff --git a/base/cpu.cc b/base/cpu.cc
deleted file mode 100644
index 68a6bbc..0000000
--- a/base/cpu.cc
+++ /dev/null
@@ -1,242 +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/cpu.h"
-
-#include <limits.h>
-#include <stddef.h>
-#include <stdint.h>
-#include <string.h>
-
-#include <algorithm>
-#include <utility>
-
-#include "base/macros.h"
-#include "build_config.h"
-
-#if defined(ARCH_CPU_ARM_FAMILY) && (defined(OS_ANDROID) || defined(OS_LINUX))
-#include "base/files/file_util.h"
-#endif
-
-#if defined(ARCH_CPU_X86_FAMILY)
-#if defined(COMPILER_MSVC)
-#include <intrin.h>
-#include <immintrin.h>  // For _xgetbv()
-#endif
-#endif
-
-namespace base {
-
-CPU::CPU()
-  : signature_(0),
-    type_(0),
-    family_(0),
-    model_(0),
-    stepping_(0),
-    ext_model_(0),
-    ext_family_(0),
-    has_mmx_(false),
-    has_sse_(false),
-    has_sse2_(false),
-    has_sse3_(false),
-    has_ssse3_(false),
-    has_sse41_(false),
-    has_sse42_(false),
-    has_popcnt_(false),
-    has_avx_(false),
-    has_avx2_(false),
-    has_aesni_(false),
-    has_non_stop_time_stamp_counter_(false),
-    cpu_vendor_("unknown") {
-  Initialize();
-}
-
-namespace {
-
-#if defined(ARCH_CPU_X86_FAMILY)
-#if !defined(COMPILER_MSVC)
-
-#if defined(__pic__) && defined(__i386__)
-
-void __cpuid(int cpu_info[4], int info_type) {
-  __asm__ volatile(
-      "mov %%ebx, %%edi\n"
-      "cpuid\n"
-      "xchg %%edi, %%ebx\n"
-      : "=a"(cpu_info[0]), "=D"(cpu_info[1]), "=c"(cpu_info[2]),
-        "=d"(cpu_info[3])
-      : "a"(info_type), "c"(0));
-}
-
-#else
-
-void __cpuid(int cpu_info[4], int info_type) {
-  __asm__ volatile("cpuid\n"
-                   : "=a"(cpu_info[0]), "=b"(cpu_info[1]), "=c"(cpu_info[2]),
-                     "=d"(cpu_info[3])
-                   : "a"(info_type), "c"(0));
-}
-
-#endif
-
-// _xgetbv returns the value of an Intel Extended Control Register (XCR).
-// Currently only XCR0 is defined by Intel so |xcr| should always be zero.
-uint64_t _xgetbv(uint32_t xcr) {
-  uint32_t eax, edx;
-
-  __asm__ volatile (
-    "xgetbv" : "=a"(eax), "=d"(edx) : "c"(xcr));
-  return (static_cast<uint64_t>(edx) << 32) | eax;
-}
-
-#endif  // !defined(COMPILER_MSVC)
-#endif  // ARCH_CPU_X86_FAMILY
-
-#if defined(ARCH_CPU_ARM_FAMILY) && (defined(OS_ANDROID) || defined(OS_LINUX))
-std::string* CpuInfoBrand() {
-  static std::string* brand = []() {
-    // This function finds the value from /proc/cpuinfo under the key "model
-    // name" or "Processor". "model name" is used in Linux 3.8 and later (3.7
-    // and later for arm64) and is shown once per CPU. "Processor" is used in
-    // earler versions and is shown only once at the top of /proc/cpuinfo
-    // regardless of the number CPUs.
-    const char kModelNamePrefix[] = "model name\t: ";
-    const char kProcessorPrefix[] = "Processor\t: ";
-
-    std::string contents;
-    ReadFileToString(FilePath("/proc/cpuinfo"), &contents);
-    DCHECK(!contents.empty());
-
-    std::istringstream iss(contents);
-    std::string line;
-    while (std::getline(iss, line)) {
-      if (line.compare(0, strlen(kModelNamePrefix), kModelNamePrefix) == 0)
-        return new std::string(line.substr(strlen(kModelNamePrefix)));
-      if (line.compare(0, strlen(kProcessorPrefix), kProcessorPrefix) == 0)
-        return new std::string(line.substr(strlen(kProcessorPrefix)));
-    }
-
-    return new std::string();
-  }();
-
-  return brand;
-}
-#endif  // defined(ARCH_CPU_ARM_FAMILY) && (defined(OS_ANDROID) ||
-        // defined(OS_LINUX))
-
-}  // namespace
-
-void CPU::Initialize() {
-#if defined(ARCH_CPU_X86_FAMILY)
-  int cpu_info[4] = {-1};
-  // This array is used to temporarily hold the vendor name and then the brand
-  // name. Thus it has to be big enough for both use cases. There are
-  // static_asserts below for each of the use cases to make sure this array is
-  // big enough.
-  char cpu_string[sizeof(cpu_info) * 3 + 1];
-
-  // __cpuid with an InfoType argument of 0 returns the number of
-  // valid Ids in CPUInfo[0] and the CPU identification string in
-  // the other three array elements. The CPU identification string is
-  // not in linear order. The code below arranges the information
-  // in a human readable form. The human readable order is CPUInfo[1] |
-  // CPUInfo[3] | CPUInfo[2]. CPUInfo[2] and CPUInfo[3] are swapped
-  // before using memcpy() to copy these three array elements to |cpu_string|.
-  __cpuid(cpu_info, 0);
-  int num_ids = cpu_info[0];
-  std::swap(cpu_info[2], cpu_info[3]);
-  static constexpr size_t kVendorNameSize = 3 * sizeof(cpu_info[1]);
-  static_assert(kVendorNameSize < arraysize(cpu_string),
-                "cpu_string too small");
-  memcpy(cpu_string, &cpu_info[1], kVendorNameSize);
-  cpu_string[kVendorNameSize] = '\0';
-  cpu_vendor_ = cpu_string;
-
-  // Interpret CPU feature information.
-  if (num_ids > 0) {
-    int cpu_info7[4] = {0};
-    __cpuid(cpu_info, 1);
-    if (num_ids >= 7) {
-      __cpuid(cpu_info7, 7);
-    }
-    signature_ = cpu_info[0];
-    stepping_ = cpu_info[0] & 0xf;
-    model_ = ((cpu_info[0] >> 4) & 0xf) + ((cpu_info[0] >> 12) & 0xf0);
-    family_ = (cpu_info[0] >> 8) & 0xf;
-    type_ = (cpu_info[0] >> 12) & 0x3;
-    ext_model_ = (cpu_info[0] >> 16) & 0xf;
-    ext_family_ = (cpu_info[0] >> 20) & 0xff;
-    has_mmx_ =   (cpu_info[3] & 0x00800000) != 0;
-    has_sse_ =   (cpu_info[3] & 0x02000000) != 0;
-    has_sse2_ =  (cpu_info[3] & 0x04000000) != 0;
-    has_sse3_ =  (cpu_info[2] & 0x00000001) != 0;
-    has_ssse3_ = (cpu_info[2] & 0x00000200) != 0;
-    has_sse41_ = (cpu_info[2] & 0x00080000) != 0;
-    has_sse42_ = (cpu_info[2] & 0x00100000) != 0;
-    has_popcnt_ = (cpu_info[2] & 0x00800000) != 0;
-
-    // AVX instructions will generate an illegal instruction exception unless
-    //   a) they are supported by the CPU,
-    //   b) XSAVE is supported by the CPU and
-    //   c) XSAVE is enabled by the kernel.
-    // See http://software.intel.com/en-us/blogs/2011/04/14/is-avx-enabled
-    //
-    // In addition, we have observed some crashes with the xgetbv instruction
-    // even after following Intel's example code. (See crbug.com/375968.)
-    // Because of that, we also test the XSAVE bit because its description in
-    // the CPUID documentation suggests that it signals xgetbv support.
-    has_avx_ =
-        (cpu_info[2] & 0x10000000) != 0 &&
-        (cpu_info[2] & 0x04000000) != 0 /* XSAVE */ &&
-        (cpu_info[2] & 0x08000000) != 0 /* OSXSAVE */ &&
-        (_xgetbv(0) & 6) == 6 /* XSAVE enabled by kernel */;
-    has_aesni_ = (cpu_info[2] & 0x02000000) != 0;
-    has_avx2_ = has_avx_ && (cpu_info7[1] & 0x00000020) != 0;
-  }
-
-  // Get the brand string of the cpu.
-  __cpuid(cpu_info, 0x80000000);
-  const int max_parameter = cpu_info[0];
-
-  static constexpr int kParameterStart = 0x80000002;
-  static constexpr int kParameterEnd = 0x80000004;
-  static constexpr int kParameterSize = kParameterEnd - kParameterStart + 1;
-  static_assert(kParameterSize * sizeof(cpu_info) + 1 == arraysize(cpu_string),
-                "cpu_string has wrong size");
-
-  if (max_parameter >= kParameterEnd) {
-    size_t i = 0;
-    for (int parameter = kParameterStart; parameter <= kParameterEnd;
-         ++parameter) {
-      __cpuid(cpu_info, parameter);
-      memcpy(&cpu_string[i], cpu_info, sizeof(cpu_info));
-      i += sizeof(cpu_info);
-    }
-    cpu_string[i] = '\0';
-    cpu_brand_ = cpu_string;
-  }
-
-  static constexpr int kParameterContainingNonStopTimeStampCounter = 0x80000007;
-  if (max_parameter >= kParameterContainingNonStopTimeStampCounter) {
-    __cpuid(cpu_info, kParameterContainingNonStopTimeStampCounter);
-    has_non_stop_time_stamp_counter_ = (cpu_info[3] & (1 << 8)) != 0;
-  }
-#elif defined(ARCH_CPU_ARM_FAMILY) && (defined(OS_ANDROID) || defined(OS_LINUX))
-  cpu_brand_ = *CpuInfoBrand();
-#endif
-}
-
-CPU::IntelMicroArchitecture CPU::GetIntelMicroArchitecture() const {
-  if (has_avx2()) return AVX2;
-  if (has_avx()) return AVX;
-  if (has_sse42()) return SSE42;
-  if (has_sse41()) return SSE41;
-  if (has_ssse3()) return SSSE3;
-  if (has_sse3()) return SSE3;
-  if (has_sse2()) return SSE2;
-  if (has_sse()) return SSE;
-  return PENTIUM;
-}
-
-}  // namespace base
diff --git a/base/cpu.h b/base/cpu.h
deleted file mode 100644
index 2c6caea..0000000
--- a/base/cpu.h
+++ /dev/null
@@ -1,88 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef BASE_CPU_H_
-#define BASE_CPU_H_
-
-#include <string>
-
-#include "base/base_export.h"
-
-namespace base {
-
-// Query information about the processor.
-class BASE_EXPORT CPU final {
- public:
-  CPU();
-
-  enum IntelMicroArchitecture {
-    PENTIUM,
-    SSE,
-    SSE2,
-    SSE3,
-    SSSE3,
-    SSE41,
-    SSE42,
-    AVX,
-    AVX2,
-    MAX_INTEL_MICRO_ARCHITECTURE
-  };
-
-  // Accessors for CPU information.
-  const std::string& vendor_name() const { return cpu_vendor_; }
-  int signature() const { return signature_; }
-  int stepping() const { return stepping_; }
-  int model() const { return model_; }
-  int family() const { return family_; }
-  int type() const { return type_; }
-  int extended_model() const { return ext_model_; }
-  int extended_family() const { return ext_family_; }
-  bool has_mmx() const { return has_mmx_; }
-  bool has_sse() const { return has_sse_; }
-  bool has_sse2() const { return has_sse2_; }
-  bool has_sse3() const { return has_sse3_; }
-  bool has_ssse3() const { return has_ssse3_; }
-  bool has_sse41() const { return has_sse41_; }
-  bool has_sse42() const { return has_sse42_; }
-  bool has_popcnt() const { return has_popcnt_; }
-  bool has_avx() const { return has_avx_; }
-  bool has_avx2() const { return has_avx2_; }
-  bool has_aesni() const { return has_aesni_; }
-  bool has_non_stop_time_stamp_counter() const {
-    return has_non_stop_time_stamp_counter_;
-  }
-
-  IntelMicroArchitecture GetIntelMicroArchitecture() const;
-  const std::string& cpu_brand() const { return cpu_brand_; }
-
- private:
-  // Query the processor for CPUID information.
-  void Initialize();
-
-  int signature_;  // raw form of type, family, model, and stepping
-  int type_;  // process type
-  int family_;  // family of the processor
-  int model_;  // model of processor
-  int stepping_;  // processor revision number
-  int ext_model_;
-  int ext_family_;
-  bool has_mmx_;
-  bool has_sse_;
-  bool has_sse2_;
-  bool has_sse3_;
-  bool has_ssse3_;
-  bool has_sse41_;
-  bool has_sse42_;
-  bool has_popcnt_;
-  bool has_avx_;
-  bool has_avx2_;
-  bool has_aesni_;
-  bool has_non_stop_time_stamp_counter_;
-  std::string cpu_vendor_;
-  std::string cpu_brand_;
-};
-
-}  // namespace base
-
-#endif  // BASE_CPU_H_
diff --git a/base/file_descriptor_posix.h b/base/file_descriptor_posix.h
deleted file mode 100644
index 2a36611..0000000
--- a/base/file_descriptor_posix.h
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright (c) 2006-2009 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef BASE_FILE_DESCRIPTOR_POSIX_H_
-#define BASE_FILE_DESCRIPTOR_POSIX_H_
-
-#include "base/files/file.h"
-#include "base/files/scoped_file.h"
-
-namespace base {
-
-// -----------------------------------------------------------------------------
-// We introduct a special structure for file descriptors in order that we are
-// able to use template specialisation to special-case their handling.
-//
-// IMPORTANT: This is primarily intended for use when sending file descriptors
-// over IPC. Even if |auto_close| is true, base::FileDescriptor does NOT close()
-// |fd| when going out of scope. Instead, a consumer of a base::FileDescriptor
-// must invoke close() on |fd| if |auto_close| is true.
-//
-// In the case of IPC, the the IPC subsystem knows to close() |fd| after sending
-// a message that contains a base::FileDescriptor if auto_close == true. On the
-// other end, the receiver must make sure to close() |fd| after it has finished
-// processing the IPC message. See the IPC::ParamTraits<> specialization in
-// ipc/ipc_message_utils.h for all the details.
-// -----------------------------------------------------------------------------
-struct FileDescriptor {
-  FileDescriptor() : fd(-1), auto_close(false) {}
-
-  FileDescriptor(int ifd, bool iauto_close) : fd(ifd), auto_close(iauto_close) {
-  }
-
-  FileDescriptor(File file) : fd(file.TakePlatformFile()), auto_close(true) {}
-  explicit FileDescriptor(ScopedFD fd) : fd(fd.release()), auto_close(true) {}
-
-  bool operator==(const FileDescriptor& other) const {
-    return (fd == other.fd && auto_close == other.auto_close);
-  }
-
-  bool operator!=(const FileDescriptor& other) const {
-    return !operator==(other);
-  }
-
-  // A comparison operator so that we can use these as keys in a std::map.
-  bool operator<(const FileDescriptor& other) const {
-    return other.fd < fd;
-  }
-
-  int fd;
-  // If true, this file descriptor should be closed after it has been used. For
-  // example an IPC system might interpret this flag as indicating that the
-  // file descriptor it has been given should be closed after use.
-  bool auto_close;
-};
-
-}  // namespace base
-
-#endif  // BASE_FILE_DESCRIPTOR_POSIX_H_
diff --git a/base/file_descriptor_store.cc b/base/file_descriptor_store.cc
deleted file mode 100644
index 71cf2b3..0000000
--- a/base/file_descriptor_store.cc
+++ /dev/null
@@ -1,73 +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/file_descriptor_store.h"
-
-#include <utility>
-
-#include "base/logging.h"
-
-namespace base {
-
-FileDescriptorStore::Descriptor::Descriptor(const std::string& key,
-                                            base::ScopedFD fd)
-    : key(key),
-      fd(std::move(fd)),
-      region(base::MemoryMappedFile::Region::kWholeFile) {}
-
-FileDescriptorStore::Descriptor::Descriptor(
-    const std::string& key,
-    base::ScopedFD fd,
-    base::MemoryMappedFile::Region region)
-    : key(key), fd(std::move(fd)), region(region) {}
-
-FileDescriptorStore::Descriptor::Descriptor(
-    FileDescriptorStore::Descriptor&& other)
-    : key(other.key), fd(std::move(other.fd)), region(other.region) {}
-
-FileDescriptorStore::Descriptor::~Descriptor() = default;
-
-// static
-FileDescriptorStore& FileDescriptorStore::GetInstance() {
-  static FileDescriptorStore* store = new FileDescriptorStore;
-  return *store;
-}
-
-base::ScopedFD FileDescriptorStore::TakeFD(
-    const std::string& key,
-    base::MemoryMappedFile::Region* region) {
-  base::ScopedFD fd = MaybeTakeFD(key, region);
-  if (!fd.is_valid())
-    DLOG(DCHECK) << "Unknown global descriptor: " << key;
-  return fd;
-}
-
-base::ScopedFD FileDescriptorStore::MaybeTakeFD(
-    const std::string& key,
-    base::MemoryMappedFile::Region* region) {
-  auto iter = descriptors_.find(key);
-  if (iter == descriptors_.end())
-    return base::ScopedFD();
-  *region = iter->second.region;
-  base::ScopedFD result = std::move(iter->second.fd);
-  descriptors_.erase(iter);
-  return result;
-}
-
-void FileDescriptorStore::Set(const std::string& key, base::ScopedFD fd) {
-  Set(key, std::move(fd), base::MemoryMappedFile::Region::kWholeFile);
-}
-
-void FileDescriptorStore::Set(const std::string& key,
-                              base::ScopedFD fd,
-                              base::MemoryMappedFile::Region region) {
-  Descriptor descriptor(key, std::move(fd), region);
-  descriptors_.insert(std::make_pair(key, std::move(descriptor)));
-}
-
-FileDescriptorStore::FileDescriptorStore() = default;
-
-FileDescriptorStore::~FileDescriptorStore() = default;
-
-}  // namespace base
diff --git a/base/file_descriptor_store.h b/base/file_descriptor_store.h
deleted file mode 100644
index b6bd079..0000000
--- a/base/file_descriptor_store.h
+++ /dev/null
@@ -1,73 +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.
-
-#ifndef BASE_FILE_DESCRIPTOR_STORE_H_
-#define BASE_FILE_DESCRIPTOR_STORE_H_
-
-#include <map>
-#include <string>
-
-#include "base/files/memory_mapped_file.h"
-#include "base/files/scoped_file.h"
-#include "base/macros.h"
-
-namespace base {
-
-// The file descriptor store is used to associate file descriptors with keys
-// that must be unique.
-// It is used to share file descriptors from a process to its child.
-class BASE_EXPORT FileDescriptorStore {
- public:
-  struct Descriptor {
-    Descriptor(const std::string& key, base::ScopedFD fd);
-    Descriptor(const std::string& key,
-               base::ScopedFD fd,
-               base::MemoryMappedFile::Region region);
-    Descriptor(Descriptor&& other);
-    ~Descriptor();
-
-    Descriptor& operator=(Descriptor&& other) = default;
-
-    // Globally unique key.
-    std::string key;
-    // Actual FD.
-    base::ScopedFD fd;
-    // Optional region, defaults to kWholeFile.
-    base::MemoryMappedFile::Region region;
-  };
-  using Mapping = std::map<std::string, Descriptor>;
-
-  // Returns the singleton instance of FileDescriptorStore.
-  static FileDescriptorStore& GetInstance();
-
-  // Gets a descriptor given a key and also populates |region|.
-  // It is a fatal error if the key is not known.
-  base::ScopedFD TakeFD(const std::string& key,
-                        base::MemoryMappedFile::Region* region);
-
-  // Gets a descriptor given a key. Returns an empty ScopedFD on error.
-  base::ScopedFD MaybeTakeFD(const std::string& key,
-                             base::MemoryMappedFile::Region* region);
-
-  // Sets the descriptor for the given |key|. This sets the region associated
-  // with |key| to kWholeFile.
-  void Set(const std::string& key, base::ScopedFD fd);
-
-  // Sets the descriptor and |region| for the given |key|.
-  void Set(const std::string& key,
-           base::ScopedFD fd,
-           base::MemoryMappedFile::Region region);
-
- private:
-  FileDescriptorStore();
-  ~FileDescriptorStore();
-
-  Mapping descriptors_;
-
-  DISALLOW_COPY_AND_ASSIGN(FileDescriptorStore);
-};
-
-}  // namespace base
-
-#endif  // BASE_FILE_DESCRIPTOR_STORE_H_
diff --git a/base/files/file_util.h b/base/files/file_util.h
index 9c7c748..d95410a 100644
--- a/base/files/file_util.h
+++ b/base/files/file_util.h
@@ -30,7 +30,6 @@
 #if defined(OS_WIN)
 #include "base/win/windows_types.h"
 #elif defined(OS_POSIX) || defined(OS_FUCHSIA)
-#include "base/file_descriptor_posix.h"
 #include "base/logging.h"
 #include "base/posix/eintr_wrapper.h"
 #endif
diff --git a/base/files/file_util_win.cc b/base/files/file_util_win.cc
index c1a5ced..d59b7e4 100644
--- a/base/files/file_util_win.cc
+++ b/base/files/file_util_win.cc
@@ -23,7 +23,6 @@
 #include "base/logging.h"
 #include "base/macros.h"
 #include "base/process/process_handle.h"
-#include "base/rand_util.h"
 #include "base/strings/string_number_conversions.h"
 #include "base/strings/string_piece.h"
 #include "base/strings/string_util.h"
@@ -33,6 +32,13 @@
 #include "base/win/scoped_handle.h"
 #include "base/win/windows_version.h"
 
+// #define needed to link in RtlGenRandom(), a.k.a. SystemFunction036.  See the
+// "Community Additions" comment on MSDN here:
+// http://msdn.microsoft.com/en-us/library/windows/desktop/aa387694.aspx
+#define SystemFunction036 NTAPI SystemFunction036
+#include <NTSecAPI.h>
+#undef SystemFunction036
+
 namespace base {
 
 namespace {
@@ -258,11 +264,24 @@
       bytes[1] & 0x0000ffff'ffffffffULL);
 }
 
+void RandBytes(void* output, size_t output_length) {
+  char* output_ptr = static_cast<char*>(output);
+  while (output_length > 0) {
+    const ULONG output_bytes_this_pass = static_cast<ULONG>(std::min(
+        output_length, static_cast<size_t>(std::numeric_limits<ULONG>::max())));
+    const bool success =
+        RtlGenRandom(output_ptr, output_bytes_this_pass) != FALSE;
+    CHECK(success);
+    output_length -= output_bytes_this_pass;
+    output_ptr += output_bytes_this_pass;
+  }
+}
+
 std::string GenerateGUID() {
   uint64_t sixteen_bytes[2];
   // Use base::RandBytes instead of crypto::RandBytes, because crypto calls the
   // base version directly, and to prevent the dependency from base/ to crypto/.
-  base::RandBytes(&sixteen_bytes, sizeof(sixteen_bytes));
+  RandBytes(&sixteen_bytes, sizeof(sixteen_bytes));
 
   // Set the GUID to version 4 as described in RFC 4122, section 4.4.
   // The format of GUID version 4 must be xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx,
@@ -488,8 +507,7 @@
     new_dir_name.assign(prefix);
     new_dir_name.append(IntToString16(GetCurrentProcId()));
     new_dir_name.push_back('_');
-    new_dir_name.append(
-        IntToString16(RandInt(0, std::numeric_limits<int16_t>::max())));
+    new_dir_name.append(UTF8ToUTF16(GenerateGUID()));
 
     path_to_create = base_dir.Append(new_dir_name);
     if (::CreateDirectory(path_to_create.value().c_str(), NULL)) {
diff --git a/base/format_macros.h b/base/format_macros.h
deleted file mode 100644
index 46cd12c..0000000
--- a/base/format_macros.h
+++ /dev/null
@@ -1,97 +0,0 @@
-// Copyright (c) 2009 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef BASE_FORMAT_MACROS_H_
-#define BASE_FORMAT_MACROS_H_
-
-// This file defines the format macros for some integer types.
-
-// To print a 64-bit value in a portable way:
-//   int64_t value;
-//   printf("xyz:%" PRId64, value);
-// The "d" in the macro corresponds to %d; you can also use PRIu64 etc.
-//
-// For wide strings, prepend "Wide" to the macro:
-//   int64_t value;
-//   StringPrintf(L"xyz: %" WidePRId64, value);
-//
-// To print a size_t value in a portable way:
-//   size_t size;
-//   printf("xyz: %" PRIuS, size);
-// The "u" in the macro corresponds to %u, and S is for "size".
-
-#include <stddef.h>
-#include <stdint.h>
-
-#include "build_config.h"
-
-#if (defined(OS_POSIX) || defined(OS_FUCHSIA)) && \
-    (defined(_INTTYPES_H) || defined(_INTTYPES_H_)) && !defined(PRId64)
-#error "inttypes.h has already been included before this header file, but "
-#error "without __STDC_FORMAT_MACROS defined."
-#endif
-
-#if (defined(OS_POSIX) || defined(OS_FUCHSIA)) && !defined(__STDC_FORMAT_MACROS)
-#define __STDC_FORMAT_MACROS
-#endif
-
-#include <inttypes.h>
-
-#if defined(OS_WIN)
-
-#if !defined(PRId64) || !defined(PRIu64) || !defined(PRIx64)
-#error "inttypes.h provided by win toolchain should define these."
-#endif
-
-#define WidePRId64 L"I64d"
-#define WidePRIu64 L"I64u"
-#define WidePRIx64 L"I64x"
-
-#if !defined(PRIuS)
-#define PRIuS "Iu"
-#endif
-
-#elif defined(OS_POSIX) || defined(OS_FUCHSIA)
-
-// GCC will concatenate wide and narrow strings correctly, so nothing needs to
-// be done here.
-#define WidePRId64 PRId64
-#define WidePRIu64 PRIu64
-#define WidePRIx64 PRIx64
-
-#if !defined(PRIuS)
-#define PRIuS "zu"
-#endif
-
-#endif  // defined(OS_WIN)
-
-// The size of NSInteger and NSUInteger varies between 32-bit and 64-bit
-// architectures and Apple does not provides standard format macros and
-// recommends casting. This has many drawbacks, so instead define macros
-// for formatting those types.
-#if defined(OS_MACOSX)
-#if defined(ARCH_CPU_64_BITS)
-#if !defined(PRIdNS)
-#define PRIdNS "ld"
-#endif
-#if !defined(PRIuNS)
-#define PRIuNS "lu"
-#endif
-#if !defined(PRIxNS)
-#define PRIxNS "lx"
-#endif
-#else  // defined(ARCH_CPU_64_BITS)
-#if !defined(PRIdNS)
-#define PRIdNS "d"
-#endif
-#if !defined(PRIuNS)
-#define PRIuNS "u"
-#endif
-#if !defined(PRIxNS)
-#define PRIxNS "x"
-#endif
-#endif
-#endif  // defined(OS_MACOSX)
-
-#endif  // BASE_FORMAT_MACROS_H_
diff --git a/base/hash.cc b/base/hash.cc
deleted file mode 100644
index ab5cebc..0000000
--- a/base/hash.cc
+++ /dev/null
@@ -1,104 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "base/hash.h"
-
-// Definition in base/third_party/superfasthash/superfasthash.c. (Third-party
-// code did not come with its own header file, so declaring the function here.)
-// Note: This algorithm is also in Blink under Source/wtf/StringHasher.h.
-extern "C" uint32_t SuperFastHash(const char* data, int len);
-
-namespace base {
-
-uint32_t Hash(const void* data, size_t length) {
-  // Currently our in-memory hash is the same as the persistent hash. The
-  // split between in-memory and persistent hash functions is maintained to
-  // allow the in-memory hash function to be updated in the future.
-  return PersistentHash(data, length);
-}
-
-uint32_t Hash(const std::string& str) {
-  return PersistentHash(str.data(), str.size());
-}
-
-uint32_t Hash(const string16& str) {
-  return PersistentHash(str.data(), str.size() * sizeof(char16));
-}
-
-uint32_t PersistentHash(const void* data, size_t length) {
-  // This hash function must not change, since it is designed to be persistable
-  // to disk.
-  if (length > static_cast<size_t>(std::numeric_limits<int>::max())) {
-    NOTREACHED();
-    return 0;
-  }
-  return ::SuperFastHash(reinterpret_cast<const char*>(data),
-                         static_cast<int>(length));
-}
-
-uint32_t PersistentHash(const std::string& str) {
-  return PersistentHash(str.data(), str.size());
-}
-
-// Implement hashing for pairs of at-most 32 bit integer values.
-// When size_t is 32 bits, we turn the 64-bit hash code into 32 bits by using
-// multiply-add hashing. This algorithm, as described in
-// Theorem 4.3.3 of the thesis "Über die Komplexität der Multiplikation in
-// eingeschränkten Branchingprogrammmodellen" by Woelfel, is:
-//
-//   h32(x32, y32) = (h64(x32, y32) * rand_odd64 + rand16 * 2^16) % 2^64 / 2^32
-//
-// Contact danakj@chromium.org for any questions.
-size_t HashInts32(uint32_t value1, uint32_t value2) {
-  uint64_t value1_64 = value1;
-  uint64_t hash64 = (value1_64 << 32) | value2;
-
-  if (sizeof(size_t) >= sizeof(uint64_t))
-    return static_cast<size_t>(hash64);
-
-  uint64_t odd_random = 481046412LL << 32 | 1025306955LL;
-  uint32_t shift_random = 10121U << 16;
-
-  hash64 = hash64 * odd_random + shift_random;
-  size_t high_bits =
-      static_cast<size_t>(hash64 >> (8 * (sizeof(uint64_t) - sizeof(size_t))));
-  return high_bits;
-}
-
-// Implement hashing for pairs of up-to 64-bit integer values.
-// We use the compound integer hash method to produce a 64-bit hash code, by
-// breaking the two 64-bit inputs into 4 32-bit values:
-// http://opendatastructures.org/versions/edition-0.1d/ods-java/node33.html#SECTION00832000000000000000
-// Then we reduce our result to 32 bits if required, similar to above.
-size_t HashInts64(uint64_t value1, uint64_t value2) {
-  uint32_t short_random1 = 842304669U;
-  uint32_t short_random2 = 619063811U;
-  uint32_t short_random3 = 937041849U;
-  uint32_t short_random4 = 3309708029U;
-
-  uint32_t value1a = static_cast<uint32_t>(value1 & 0xffffffff);
-  uint32_t value1b = static_cast<uint32_t>((value1 >> 32) & 0xffffffff);
-  uint32_t value2a = static_cast<uint32_t>(value2 & 0xffffffff);
-  uint32_t value2b = static_cast<uint32_t>((value2 >> 32) & 0xffffffff);
-
-  uint64_t product1 = static_cast<uint64_t>(value1a) * short_random1;
-  uint64_t product2 = static_cast<uint64_t>(value1b) * short_random2;
-  uint64_t product3 = static_cast<uint64_t>(value2a) * short_random3;
-  uint64_t product4 = static_cast<uint64_t>(value2b) * short_random4;
-
-  uint64_t hash64 = product1 + product2 + product3 + product4;
-
-  if (sizeof(size_t) >= sizeof(uint64_t))
-    return static_cast<size_t>(hash64);
-
-  uint64_t odd_random = 1578233944LL << 32 | 194370989LL;
-  uint32_t shift_random = 20591U << 16;
-
-  hash64 = hash64 * odd_random + shift_random;
-  size_t high_bits =
-      static_cast<size_t>(hash64 >> (8 * (sizeof(uint64_t) - sizeof(size_t))));
-  return high_bits;
-}
-
-}  // namespace base
diff --git a/base/hash.h b/base/hash.h
deleted file mode 100644
index 165899e..0000000
--- a/base/hash.h
+++ /dev/null
@@ -1,69 +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.
-
-#ifndef BASE_HASH_H_
-#define BASE_HASH_H_
-
-#include <stddef.h>
-#include <stdint.h>
-
-#include <limits>
-#include <string>
-#include <utility>
-
-#include "base/base_export.h"
-#include "base/logging.h"
-#include "base/strings/string16.h"
-
-namespace base {
-
-// Computes a hash of a memory buffer. This hash function is subject to change
-// in the future, so use only for temporary in-memory structures. If you need
-// to persist a change on disk or between computers, use PersistentHash().
-//
-// WARNING: This hash function should not be used for any cryptographic purpose.
-BASE_EXPORT uint32_t Hash(const void* data, size_t length);
-BASE_EXPORT uint32_t Hash(const std::string& str);
-BASE_EXPORT uint32_t Hash(const string16& str);
-
-// Computes a hash of a memory buffer. This hash function must not change so
-// that code can use the hashed values for persistent storage purposes or
-// sending across the network. If a new persistent hash function is desired, a
-// new version will have to be added in addition.
-//
-// WARNING: This hash function should not be used for any cryptographic purpose.
-BASE_EXPORT uint32_t PersistentHash(const void* data, size_t length);
-BASE_EXPORT uint32_t PersistentHash(const std::string& str);
-
-// Hash pairs of 32-bit or 64-bit numbers.
-BASE_EXPORT size_t HashInts32(uint32_t value1, uint32_t value2);
-BASE_EXPORT size_t HashInts64(uint64_t value1, uint64_t value2);
-
-template <typename T1, typename T2>
-inline size_t HashInts(T1 value1, T2 value2) {
-  // This condition is expected to be compile-time evaluated and optimised away
-  // in release builds.
-  if (sizeof(T1) > sizeof(uint32_t) || (sizeof(T2) > sizeof(uint32_t)))
-    return HashInts64(value1, value2);
-
-  return HashInts32(value1, value2);
-}
-
-// A templated hasher for pairs of integer types. Example:
-//
-//   using MyPair = std::pair<int32_t, int32_t>;
-//   std::unordered_set<MyPair, base::IntPairHash<MyPair>> set;
-template <typename T>
-struct IntPairHash;
-
-template <typename Type1, typename Type2>
-struct IntPairHash<std::pair<Type1, Type2>> {
-  size_t operator()(std::pair<Type1, Type2> value) const {
-    return HashInts(value.first, value.second);
-  }
-};
-
-}  // namespace base
-
-#endif  // BASE_HASH_H_
diff --git a/base/json/OWNERS b/base/json/OWNERS
deleted file mode 100644
index 14fce2a..0000000
--- a/base/json/OWNERS
+++ /dev/null
@@ -1 +0,0 @@
-rsesek@chromium.org
diff --git a/base/json/json_correctness_fuzzer.cc b/base/json/json_correctness_fuzzer.cc
deleted file mode 100644
index 1f32d8c..0000000
--- a/base/json/json_correctness_fuzzer.cc
+++ /dev/null
@@ -1,63 +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.
-
-// A fuzzer that checks correctness of json parser/writer.
-// The fuzzer input is passed through parsing twice,
-// so that presumably valid json is parsed/written again.
-
-#include <stddef.h>
-#include <stdint.h>
-
-#include <string>
-
-#include "base/json/json_reader.h"
-#include "base/json/json_writer.h"
-#include "base/json/string_escape.h"
-#include "base/logging.h"
-#include "base/values.h"
-
-// Entry point for libFuzzer.
-// We will use the last byte of data as parsing options.
-// The rest will be used as text input to the parser.
-extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
-  if (size < 2)
-    return 0;
-
-  int error_code, error_line, error_column;
-  std::string error_message;
-
-  // Create a copy of input buffer, as otherwise we don't catch
-  // overflow that touches the last byte (which is used in options).
-  std::unique_ptr<char[]> input(new char[size - 1]);
-  memcpy(input.get(), data, size - 1);
-
-  base::StringPiece input_string(input.get(), size - 1);
-
-  const int options = data[size - 1];
-  auto parsed_value = base::JSONReader::ReadAndReturnError(
-      input_string, options, &error_code, &error_message, &error_line,
-      &error_column);
-  if (!parsed_value)
-    return 0;
-
-  std::string parsed_output;
-  bool b = base::JSONWriter::Write(*parsed_value, &parsed_output);
-  LOG_ASSERT(b);
-
-  auto double_parsed_value = base::JSONReader::ReadAndReturnError(
-      parsed_output, options, &error_code, &error_message, &error_line,
-      &error_column);
-  LOG_ASSERT(double_parsed_value);
-  std::string double_parsed_output;
-  bool b2 =
-      base::JSONWriter::Write(*double_parsed_value, &double_parsed_output);
-  LOG_ASSERT(b2);
-
-  LOG_ASSERT(parsed_output == double_parsed_output)
-      << "Parser/Writer mismatch."
-      << "\nInput=" << base::GetQuotedJSONString(parsed_output)
-      << "\nOutput=" << base::GetQuotedJSONString(double_parsed_output);
-
-  return 0;
-}
diff --git a/base/json/json_reader_fuzzer.cc b/base/json/json_reader_fuzzer.cc
deleted file mode 100644
index a8490da..0000000
--- a/base/json/json_reader_fuzzer.cc
+++ /dev/null
@@ -1,29 +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/json/json_reader.h"
-#include "base/values.h"
-
-int error_code, error_line, error_column;
-std::string error_message;
-
-// Entry point for LibFuzzer.
-extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
-  if (size < 2)
-    return 0;
-
-  // Create a copy of input buffer, as otherwise we don't catch
-  // overflow that touches the last byte (which is used in options).
-  std::unique_ptr<char[]> input(new char[size - 1]);
-  memcpy(input.get(), data, size - 1);
-
-  base::StringPiece input_string(input.get(), size - 1);
-
-  const int options = data[size - 1];
-  base::JSONReader::ReadAndReturnError(input_string, options, &error_code,
-                                       &error_message, &error_line,
-                                       &error_column);
-
-  return 0;
-}
diff --git a/base/json/string_escape_fuzzer.cc b/base/json/string_escape_fuzzer.cc
deleted file mode 100644
index e44bd4f..0000000
--- a/base/json/string_escape_fuzzer.cc
+++ /dev/null
@@ -1,37 +0,0 @@
-// Copyright 2018 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/json/string_escape.h"
-
-#include <memory>
-
-std::string escaped_string;
-
-// Entry point for LibFuzzer.
-extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
-  if (size < 2)
-    return 0;
-
-  const bool put_in_quotes = data[size - 1];
-
-  // Create a copy of input buffer, as otherwise we don't catch
-  // overflow that touches the last byte (which is used in put_in_quotes).
-  size_t actual_size_char8 = size - 1;
-  std::unique_ptr<char[]> input(new char[actual_size_char8]);
-  memcpy(input.get(), data, actual_size_char8);
-
-  base::StringPiece input_string(input.get(), actual_size_char8);
-  base::EscapeJSONString(input_string, put_in_quotes, &escaped_string);
-
-  // Test for wide-strings if available size is even.
-  if (actual_size_char8 & 1)
-    return 0;
-
-  size_t actual_size_char16 = actual_size_char8 / 2;
-  base::StringPiece16 input_string16(
-      reinterpret_cast<base::char16*>(input.get()), actual_size_char16);
-  base::EscapeJSONString(input_string16, put_in_quotes, &escaped_string);
-
-  return 0;
-}
diff --git a/base/linux_util.cc b/base/linux_util.cc
deleted file mode 100644
index 1f3ae49..0000000
--- a/base/linux_util.cc
+++ /dev/null
@@ -1,211 +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/linux_util.h"
-
-#include <dirent.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <limits.h>
-#include <stdlib.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-#include <unistd.h>
-
-#include <memory>
-#include <vector>
-
-#include "base/command_line.h"
-#include "base/files/file_util.h"
-#include "base/memory/singleton.h"
-#include "base/strings/string_number_conversions.h"
-#include "base/strings/string_split.h"
-#include "base/strings/string_tokenizer.h"
-#include "base/strings/string_util.h"
-#include "base/synchronization/lock.h"
-#include "build_config.h"
-
-namespace {
-
-// Not needed for OS_CHROMEOS.
-#if defined(OS_LINUX)
-enum LinuxDistroState {
-  STATE_DID_NOT_CHECK  = 0,
-  STATE_CHECK_STARTED  = 1,
-  STATE_CHECK_FINISHED = 2,
-};
-
-// Helper class for GetLinuxDistro().
-class LinuxDistroHelper {
- public:
-  // Retrieves the Singleton.
-  static LinuxDistroHelper* GetInstance() {
-    return base::Singleton<LinuxDistroHelper>::get();
-  }
-
-  // The simple state machine goes from:
-  // STATE_DID_NOT_CHECK -> STATE_CHECK_STARTED -> STATE_CHECK_FINISHED.
-  LinuxDistroHelper() : state_(STATE_DID_NOT_CHECK) {}
-  ~LinuxDistroHelper() = default;
-
-  // Retrieve the current state, if we're in STATE_DID_NOT_CHECK,
-  // we automatically move to STATE_CHECK_STARTED so nobody else will
-  // do the check.
-  LinuxDistroState State() {
-    base::AutoLock scoped_lock(lock_);
-    if (STATE_DID_NOT_CHECK == state_) {
-      state_ = STATE_CHECK_STARTED;
-      return STATE_DID_NOT_CHECK;
-    }
-    return state_;
-  }
-
-  // Indicate the check finished, move to STATE_CHECK_FINISHED.
-  void CheckFinished() {
-    base::AutoLock scoped_lock(lock_);
-    DCHECK_EQ(STATE_CHECK_STARTED, state_);
-    state_ = STATE_CHECK_FINISHED;
-  }
-
- private:
-  base::Lock lock_;
-  LinuxDistroState state_;
-};
-#endif  // if defined(OS_LINUX)
-
-bool GetTasksForProcess(pid_t pid, std::vector<pid_t>* tids) {
-  char buf[256];
-  snprintf(buf, sizeof(buf), "/proc/%d/task", pid);
-
-  DIR* task = opendir(buf);
-  if (!task) {
-    DLOG(WARNING) << "Cannot open " << buf;
-    return false;
-  }
-
-  struct dirent* dent;
-  while ((dent = readdir(task))) {
-    char* endptr;
-    const unsigned long int tid_ul = strtoul(dent->d_name, &endptr, 10);
-    if (tid_ul == ULONG_MAX || *endptr)
-      continue;
-    tids->push_back(tid_ul);
-  }
-  closedir(task);
-  return true;
-}
-
-}  // namespace
-
-namespace base {
-
-// Account for the terminating null character.
-static const int kDistroSize = 128 + 1;
-
-// We use this static string to hold the Linux distro info. If we
-// crash, the crash handler code will send this in the crash dump.
-char g_linux_distro[kDistroSize] = "Unknown";
-
-std::string GetLinuxDistro() {
-  LinuxDistroHelper* distro_state_singleton = LinuxDistroHelper::GetInstance();
-  LinuxDistroState state = distro_state_singleton->State();
-  if (STATE_CHECK_FINISHED == state)
-    return g_linux_distro;
-  if (STATE_CHECK_STARTED == state)
-    return "Unknown"; // Don't wait for other thread to finish.
-  DCHECK_EQ(state, STATE_DID_NOT_CHECK);
-  // We do this check only once per process. If it fails, there's
-  // little reason to believe it will work if we attempt to run
-  // lsb_release again.
-  std::vector<std::string> argv;
-  argv.push_back("lsb_release");
-  argv.push_back("-d");
-  std::string output;
-  GetAppOutput(CommandLine(argv), &output);
-  if (output.length() > 0) {
-    // lsb_release -d should return: Description:<tab>Distro Info
-    const char field[] = "Description:\t";
-    if (output.compare(0, strlen(field), field) == 0) {
-      SetLinuxDistro(output.substr(strlen(field)));
-    }
-  }
-  distro_state_singleton->CheckFinished();
-  return g_linux_distro;
-}
-
-void SetLinuxDistro(const std::string& distro) {
-  std::string trimmed_distro;
-  TrimWhitespaceASCII(distro, TRIM_ALL, &trimmed_distro);
-  strlcpy(g_linux_distro, trimmed_distro.c_str(), kDistroSize);
-}
-
-pid_t FindThreadIDWithSyscall(pid_t pid, const std::string& expected_data,
-                              bool* syscall_supported) {
-  if (syscall_supported != nullptr)
-    *syscall_supported = false;
-
-  std::vector<pid_t> tids;
-  if (!GetTasksForProcess(pid, &tids))
-    return -1;
-
-  std::unique_ptr<char[]> syscall_data(new char[expected_data.length()]);
-  for (pid_t tid : tids) {
-    char buf[256];
-    snprintf(buf, sizeof(buf), "/proc/%d/task/%d/syscall", pid, tid);
-    int fd = open(buf, O_RDONLY);
-    if (fd < 0)
-      continue;
-    if (syscall_supported != nullptr)
-      *syscall_supported = true;
-    bool read_ret = ReadFromFD(fd, syscall_data.get(), expected_data.length());
-    close(fd);
-    if (!read_ret)
-      continue;
-
-    if (0 == strncmp(expected_data.c_str(), syscall_data.get(),
-                     expected_data.length())) {
-      return tid;
-    }
-  }
-  return -1;
-}
-
-pid_t FindThreadID(pid_t pid, pid_t ns_tid, bool* ns_pid_supported) {
-  if (ns_pid_supported)
-    *ns_pid_supported = false;
-
-  std::vector<pid_t> tids;
-  if (!GetTasksForProcess(pid, &tids))
-    return -1;
-
-  for (pid_t tid : tids) {
-    char buf[256];
-    snprintf(buf, sizeof(buf), "/proc/%d/task/%d/status", pid, tid);
-    std::string status;
-    if (!ReadFileToString(FilePath(buf), &status))
-      return -1;
-    StringTokenizer tokenizer(status, "\n");
-    while (tokenizer.GetNext()) {
-      StringPiece value_str(tokenizer.token_piece());
-      if (!value_str.starts_with("NSpid"))
-        continue;
-      if (ns_pid_supported)
-        *ns_pid_supported = true;
-      std::vector<StringPiece> split_value_str = SplitStringPiece(
-          value_str, "\t", TRIM_WHITESPACE, SPLIT_WANT_NONEMPTY);
-      DCHECK_GE(split_value_str.size(), 2u);
-      int value;
-      // The last value in the list is the PID in the namespace.
-      if (StringToInt(split_value_str.back(), &value) && value == ns_tid) {
-        // The second value in the list is the real PID.
-        if (StringToInt(split_value_str[1], &value))
-          return value;
-      }
-      break;
-    }
-  }
-  return -1;
-}
-
-}  // namespace base
diff --git a/base/linux_util.h b/base/linux_util.h
deleted file mode 100644
index 272e06b..0000000
--- a/base/linux_util.h
+++ /dev/null
@@ -1,44 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef BASE_LINUX_UTIL_H_
-#define BASE_LINUX_UTIL_H_
-
-#include <stdint.h>
-#include <sys/types.h>
-
-#include <string>
-
-#include "base/base_export.h"
-
-namespace base {
-
-// This is declared here so the crash reporter can access the memory directly
-// in compromised context without going through the standard library.
-BASE_EXPORT extern char g_linux_distro[];
-
-// Get the Linux Distro if we can, or return "Unknown".
-BASE_EXPORT std::string GetLinuxDistro();
-
-// Set the Linux Distro string.
-BASE_EXPORT void SetLinuxDistro(const std::string& distro);
-
-// For a given process |pid|, look through all its threads and find the first
-// thread with /proc/[pid]/task/[thread_id]/syscall whose first N bytes matches
-// |expected_data|, where N is the length of |expected_data|.
-// Returns the thread id or -1 on error.  If |syscall_supported| is
-// set to false the kernel does not support syscall in procfs.
-BASE_EXPORT pid_t FindThreadIDWithSyscall(pid_t pid,
-                                          const std::string& expected_data,
-                                          bool* syscall_supported);
-
-// For a given process |pid|, look through all its threads and find the first
-// thread with /proc/[pid]/task/[thread_id]/status where NSpid matches |ns_tid|.
-// Returns the thread id or -1 on error.  If |ns_pid_supported| is
-// set to false the kernel does not support NSpid in procfs.
-BASE_EXPORT pid_t FindThreadID(pid_t pid, pid_t ns_tid, bool* ns_pid_supported);
-
-}  // namespace base
-
-#endif  // BASE_LINUX_UTIL_H_
diff --git a/base/mac/OWNERS b/base/mac/OWNERS
deleted file mode 100644
index 93e90e0..0000000
--- a/base/mac/OWNERS
+++ /dev/null
@@ -1,8 +0,0 @@
-mark@chromium.org
-thakis@chromium.org
-
-# sdk_forward_declarations.[h|mm] will likely need to be modified by Cocoa
-# developers in general.
-per-file sdk_forward_declarations.*=file://chrome/browser/ui/cocoa/OWNERS
-
-# COMPONENT: Internals
diff --git a/base/mac/authorization_util.h b/base/mac/authorization_util.h
deleted file mode 100644
index 4629039..0000000
--- a/base/mac/authorization_util.h
+++ /dev/null
@@ -1,82 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef BASE_MAC_AUTHORIZATION_UTIL_H_
-#define BASE_MAC_AUTHORIZATION_UTIL_H_
-
-// AuthorizationExecuteWithPrivileges fork()s and exec()s the tool, but it
-// does not wait() for it.  It also doesn't provide the caller with access to
-// the forked pid.  If used irresponsibly, zombie processes will accumulate.
-//
-// Apple's really gotten us between a rock and a hard place, here.
-//
-// Fortunately, AuthorizationExecuteWithPrivileges does give access to the
-// tool's stdout (and stdin) via a FILE* pipe.  The tool can output its pid
-// to this pipe, and the main program can read it, and then have something
-// that it can wait() for.
-//
-// The contract is that any tool executed by the wrappers declared in this
-// file must print its pid to stdout on a line by itself before doing anything
-// else.
-//
-// http://developer.apple.com/library/mac/#samplecode/BetterAuthorizationSample/Listings/BetterAuthorizationSampleLib_c.html
-// (Look for "What's This About Zombies?")
-
-#include <CoreFoundation/CoreFoundation.h>
-#include <Security/Authorization.h>
-#include <stdio.h>
-#include <sys/types.h>
-
-#include "base/base_export.h"
-
-namespace base {
-namespace mac {
-
-// Obtains an AuthorizationRef for the rights indicated by |rights|.  If
-// necessary, prompts the user for authentication. If the user is prompted,
-// |prompt| will be used as the prompt string and an icon appropriate for the
-// application will be displayed in a prompt dialog. Note that the system
-// appends its own text to the prompt string. |extraFlags| will be ORed
-// together with the default flags. Returns NULL on failure.
-BASE_EXPORT
-AuthorizationRef GetAuthorizationRightsWithPrompt(
-    AuthorizationRights* rights,
-    CFStringRef prompt,
-    AuthorizationFlags extraFlags);
-
-// Obtains an AuthorizationRef (using |GetAuthorizationRightsWithPrompt|) that
-// can be used to run commands as root.
-BASE_EXPORT
-AuthorizationRef AuthorizationCreateToRunAsRoot(CFStringRef prompt);
-
-// Calls straight through to AuthorizationExecuteWithPrivileges.  If that
-// call succeeds, |pid| will be set to the pid of the executed tool.  If the
-// pid can't be determined, |pid| will be set to -1.  |pid| must not be NULL.
-// |pipe| may be NULL, but the tool will always be executed with a pipe in
-// order to read the pid from its stdout.
-BASE_EXPORT
-OSStatus ExecuteWithPrivilegesAndGetPID(AuthorizationRef authorization,
-                                        const char* tool_path,
-                                        AuthorizationFlags options,
-                                        const char** arguments,
-                                        FILE** pipe,
-                                        pid_t* pid);
-
-// Calls ExecuteWithPrivilegesAndGetPID, and if that call succeeds, calls
-// waitpid() to wait for the process to exit.  If waitpid() succeeds, the
-// exit status is placed in |exit_status|, otherwise, -1 is stored.
-// |exit_status| may be NULL and this function will still wait for the process
-// to exit.
-BASE_EXPORT
-OSStatus ExecuteWithPrivilegesAndWait(AuthorizationRef authorization,
-                                      const char* tool_path,
-                                      AuthorizationFlags options,
-                                      const char** arguments,
-                                      FILE** pipe,
-                                      int* exit_status);
-
-}  // namespace mac
-}  // namespace base
-
-#endif  // BASE_MAC_AUTHORIZATION_UTIL_H_
diff --git a/base/mac/authorization_util.mm b/base/mac/authorization_util.mm
deleted file mode 100644
index a3bc4f9..0000000
--- a/base/mac/authorization_util.mm
+++ /dev/null
@@ -1,201 +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/authorization_util.h"
-
-#import <Foundation/Foundation.h>
-#include <stddef.h>
-#include <sys/wait.h>
-
-#include <string>
-
-#include "base/logging.h"
-#include "base/mac/bundle_locations.h"
-#include "base/mac/foundation_util.h"
-#include "base/mac/mac_logging.h"
-#include "base/mac/scoped_authorizationref.h"
-#include "base/macros.h"
-#include "base/posix/eintr_wrapper.h"
-#include "base/strings/string_number_conversions.h"
-#include "base/strings/string_util.h"
-
-namespace base {
-namespace mac {
-
-AuthorizationRef GetAuthorizationRightsWithPrompt(
-    AuthorizationRights* rights,
-    CFStringRef prompt,
-    AuthorizationFlags extraFlags) {
-  // Create an empty AuthorizationRef.
-  ScopedAuthorizationRef authorization;
-  OSStatus status = AuthorizationCreate(NULL, kAuthorizationEmptyEnvironment,
-                                        kAuthorizationFlagDefaults,
-                                        authorization.get_pointer());
-  if (status != errAuthorizationSuccess) {
-    OSSTATUS_LOG(ERROR, status) << "AuthorizationCreate";
-    return NULL;
-  }
-
-  AuthorizationFlags flags = kAuthorizationFlagDefaults |
-                             kAuthorizationFlagInteractionAllowed |
-                             kAuthorizationFlagExtendRights |
-                             kAuthorizationFlagPreAuthorize |
-                             extraFlags;
-
-  // product_logo_32.png is used instead of app.icns because Authorization
-  // Services can't deal with .icns files.
-  NSString* icon_path =
-      [base::mac::FrameworkBundle() pathForResource:@"product_logo_32"
-                                             ofType:@"png"];
-  const char* icon_path_c = [icon_path fileSystemRepresentation];
-  size_t icon_path_length = icon_path_c ? strlen(icon_path_c) : 0;
-
-  // The OS will dispay |prompt| along with a sentence asking the user to type
-  // the "password to allow this."
-  NSString* prompt_ns = base::mac::CFToNSCast(prompt);
-  const char* prompt_c = [prompt_ns UTF8String];
-  size_t prompt_length = prompt_c ? strlen(prompt_c) : 0;
-
-  AuthorizationItem environment_items[] = {
-    {kAuthorizationEnvironmentIcon, icon_path_length, (void*)icon_path_c, 0},
-    {kAuthorizationEnvironmentPrompt, prompt_length, (void*)prompt_c, 0}
-  };
-
-  AuthorizationEnvironment environment = {arraysize(environment_items),
-                                          environment_items};
-
-  status = AuthorizationCopyRights(authorization,
-                                   rights,
-                                   &environment,
-                                   flags,
-                                   NULL);
-
-  if (status != errAuthorizationSuccess) {
-    if (status != errAuthorizationCanceled) {
-      OSSTATUS_LOG(ERROR, status) << "AuthorizationCopyRights";
-    }
-    return NULL;
-  }
-
-  return authorization.release();
-}
-
-AuthorizationRef AuthorizationCreateToRunAsRoot(CFStringRef prompt) {
-  // Specify the "system.privilege.admin" right, which allows
-  // AuthorizationExecuteWithPrivileges to run commands as root.
-  AuthorizationItem right_items[] = {
-    {kAuthorizationRightExecute, 0, NULL, 0}
-  };
-  AuthorizationRights rights = {arraysize(right_items), right_items};
-
-  return GetAuthorizationRightsWithPrompt(&rights, prompt, 0);
-}
-
-OSStatus ExecuteWithPrivilegesAndGetPID(AuthorizationRef authorization,
-                                        const char* tool_path,
-                                        AuthorizationFlags options,
-                                        const char** arguments,
-                                        FILE** pipe,
-                                        pid_t* pid) {
-  // pipe may be NULL, but this function needs one.  In that case, use a local
-  // pipe.
-  FILE* local_pipe;
-  FILE** pipe_pointer;
-  if (pipe) {
-    pipe_pointer = pipe;
-  } else {
-    pipe_pointer = &local_pipe;
-  }
-
-// AuthorizationExecuteWithPrivileges is deprecated in macOS 10.7, but no good
-// replacement exists. https://crbug.com/593133.
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wdeprecated-declarations"
-  // AuthorizationExecuteWithPrivileges wants |char* const*| for |arguments|,
-  // but it doesn't actually modify the arguments, and that type is kind of
-  // silly and callers probably aren't dealing with that.  Put the cast here
-  // to make things a little easier on callers.
-  OSStatus status = AuthorizationExecuteWithPrivileges(authorization,
-                                                       tool_path,
-                                                       options,
-                                                       (char* const*)arguments,
-                                                       pipe_pointer);
-#pragma clang diagnostic pop
-  if (status != errAuthorizationSuccess) {
-    return status;
-  }
-
-  int line_pid = -1;
-  size_t line_length = 0;
-  char* line_c = fgetln(*pipe_pointer, &line_length);
-  if (line_c) {
-    if (line_length > 0 && line_c[line_length - 1] == '\n') {
-      // line_c + line_length is the start of the next line if there is one.
-      // Back up one character.
-      --line_length;
-    }
-    std::string line(line_c, line_length);
-    if (!base::StringToInt(line, &line_pid)) {
-      // StringToInt may have set line_pid to something, but if the conversion
-      // was imperfect, use -1.
-      LOG(ERROR) << "ExecuteWithPrivilegesAndGetPid: funny line: " << line;
-      line_pid = -1;
-    }
-  } else {
-    LOG(ERROR) << "ExecuteWithPrivilegesAndGetPid: no line";
-  }
-
-  if (!pipe) {
-    fclose(*pipe_pointer);
-  }
-
-  if (pid) {
-    *pid = line_pid;
-  }
-
-  return status;
-}
-
-OSStatus ExecuteWithPrivilegesAndWait(AuthorizationRef authorization,
-                                      const char* tool_path,
-                                      AuthorizationFlags options,
-                                      const char** arguments,
-                                      FILE** pipe,
-                                      int* exit_status) {
-  pid_t pid;
-  OSStatus status = ExecuteWithPrivilegesAndGetPID(authorization,
-                                                   tool_path,
-                                                   options,
-                                                   arguments,
-                                                   pipe,
-                                                   &pid);
-  if (status != errAuthorizationSuccess) {
-    return status;
-  }
-
-  // exit_status may be NULL, but this function needs it.  In that case, use a
-  // local version.
-  int local_exit_status;
-  int* exit_status_pointer;
-  if (exit_status) {
-    exit_status_pointer = exit_status;
-  } else {
-    exit_status_pointer = &local_exit_status;
-  }
-
-  if (pid != -1) {
-    pid_t wait_result = HANDLE_EINTR(waitpid(pid, exit_status_pointer, 0));
-    if (wait_result != pid) {
-      PLOG(ERROR) << "waitpid";
-      *exit_status_pointer = -1;
-    }
-  } else {
-    *exit_status_pointer = -1;
-  }
-
-  return status;
-}
-
-}  // namespace mac
-}  // namespace base
diff --git a/base/mac/call_with_eh_frame.cc b/base/mac/call_with_eh_frame.cc
deleted file mode 100644
index 35e01bc..0000000
--- a/base/mac/call_with_eh_frame.cc
+++ /dev/null
@@ -1,54 +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"
-
-#include <stdint.h>
-#include <unwind.h>
-
-#include "build_config.h"
-
-namespace base {
-namespace mac {
-
-#if defined(OS_IOS)
-// No iOS assembly implementation exists, so just call the block directly.
-void CallWithEHFrame(void (^block)(void)) {
-  block();
-}
-#else  // OS_MACOSX
-extern "C" _Unwind_Reason_Code __gxx_personality_v0(int,
-                                                    _Unwind_Action,
-                                                    uint64_t,
-                                                    struct _Unwind_Exception*,
-                                                    struct _Unwind_Context*);
-
-_Unwind_Reason_Code CxxPersonalityRoutine(
-    int version,
-    _Unwind_Action actions,
-    uint64_t exception_class,
-    struct _Unwind_Exception* exception_object,
-    struct _Unwind_Context* context) {
-  // Unwinding is a two-phase process: phase one searches for an exception
-  // handler, and phase two performs cleanup. For phase one, this custom
-  // personality will terminate the search. For phase two, this should delegate
-  // back to the standard personality routine.
-
-  if ((actions & _UA_SEARCH_PHASE) != 0) {
-    // Tell libunwind that this is the end of the stack. When it encounters the
-    // CallWithEHFrame, it will stop searching for an exception handler. The
-    // result is that no exception handler has been found higher on the stack,
-    // and any that are lower on the stack (e.g. in CFRunLoopRunSpecific), will
-    // now be skipped. Since this is reporting the end of the stack, and no
-    // exception handler will have been found, std::terminate() will be called.
-    return _URC_END_OF_STACK;
-  }
-
-  return __gxx_personality_v0(version, actions, exception_class,
-                              exception_object, context);
-}
-#endif  // defined(OS_IOS)
-
-}  // namespace mac
-}  // namespace base
diff --git a/base/mac/call_with_eh_frame.h b/base/mac/call_with_eh_frame.h
deleted file mode 100644
index 1f7d5e0..0000000
--- a/base/mac/call_with_eh_frame.h
+++ /dev/null
@@ -1,26 +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.
-
-#ifndef BASE_MAC_CALL_WITH_EH_FRAME_H_
-#define BASE_MAC_CALL_WITH_EH_FRAME_H_
-
-#include "base/base_export.h"
-
-namespace base {
-namespace mac {
-
-// Invokes the specified block in a stack frame with a special exception
-// handler. This function creates an exception handling stack frame that
-// specifies a custom C++ exception personality routine, which terminates the
-// search for an exception handler at this frame.
-//
-// The purpose of this function is to prevent a try/catch statement in system
-// libraries, acting as a global exception handler, from handling exceptions
-// in such a way that disrupts the generation of useful stack traces.
-void BASE_EXPORT CallWithEHFrame(void (^block)(void));
-
-}  // namespace mac
-}  // namespace base
-
-#endif  // BASE_MAC_CALL_WITH_EH_FRAME_H_
diff --git a/base/mac/call_with_eh_frame_asm.S b/base/mac/call_with_eh_frame_asm.S
deleted file mode 100644
index 0e399cf..0000000
--- a/base/mac/call_with_eh_frame_asm.S
+++ /dev/null
@@ -1,89 +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.
-
-// base::mac::CallWithEHFrame(void () block_pointer)
-#define CALL_WITH_EH_FRAME __ZN4base3mac15CallWithEHFrameEU13block_pointerFvvE
-
-  .section __TEXT,__text,regular,pure_instructions
-#if !defined(COMPONENT_BUILD)
-  .private_extern CALL_WITH_EH_FRAME
-#endif
-  .globl CALL_WITH_EH_FRAME
-  .align 4
-CALL_WITH_EH_FRAME:
-
-  .cfi_startproc
-
-  // Configure the C++ exception handler personality routine. Normally the
-  // compiler would emit ___gxx_personality_v0 here. The purpose of this
-  // function is to use a custom personality routine.
-  .cfi_personality 155, __ZN4base3mac21CxxPersonalityRoutineEi14_Unwind_ActionyP17_Unwind_ExceptionP15_Unwind_Context
-  .cfi_lsda 16, CallWithEHFrame_exception_table
-
-Lfunction_start:
-  pushq %rbp
-  .cfi_def_cfa_offset 16
-  .cfi_offset %rbp, -16
-  movq %rsp, %rbp
-  .cfi_def_cfa_register %rbp
-
-  // Load the function pointer from the block descriptor.
-  movq 16(%rdi), %rax
-
-  // Execute the block in the context of a C++ try{}.
-Ltry_start:
-  callq *%rax
-Ltry_end:
-  popq %rbp
-  ret
-
-  // Landing pad for the exception handler. This should never be called, since
-  // the personality routine will stop the search for an exception handler,
-  // which will cause the runtime to invoke the default terminate handler.
-Lcatch:
-  movq %rax, %rdi
-  callq ___cxa_begin_catch  // The ABI requires a call to the catch handler.
-  ud2  // In the event this is called, make it fatal.
-
-Lfunction_end:
-  .cfi_endproc
-
-// The C++ exception table that is used to identify this frame as an
-// exception handler. See http://llvm.org/docs/ExceptionHandling.html and
-// http://mentorembedded.github.io/cxx-abi/exceptions.pdf.
-  .section __TEXT,__gcc_except_tab
-  .align 2
-CallWithEHFrame_exception_table:
-  .byte 255  // DW_EH_PE_omit
-  .byte 155  // DW_EH_PE_indirect | DW_EH_PE_pcrel | DW_EH_PE_sdata4
-  .asciz "\242\200\200"  // LE int128 for the number of bytes in this table.
-  .byte 3  // DW_EH_PE_udata4
-  .byte 26  // Callsite table length.
-
-// First callsite.
-CS1_begin = Ltry_start - Lfunction_start
-  .long CS1_begin
-CS1_end = Ltry_end - Ltry_start
-  .long CS1_end
-
-// First landing pad.
-LP1 = Lcatch - Lfunction_start
-  .long LP1
-  .byte 1  // Action record.
-
-// Second callsite.
-CS2_begin = Ltry_end - Lfunction_start
-  .long CS2_begin
-CS2_end = Lfunction_end - Ltry_end
-  .long CS2_end
-
-// Second landing pad (none).
-  .long 0
-  .byte 0  // No action.
-
-// Action table.
-  .byte 1  // Action record 1.
-  .byte 0  // No further action to take.
-  .long 0  // No type filter for this catch(){} clause.
-  .align 2
diff --git a/base/mac/close_nocancel.cc b/base/mac/close_nocancel.cc
deleted file mode 100644
index 8971e73..0000000
--- a/base/mac/close_nocancel.cc
+++ /dev/null
@@ -1,70 +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.
-
-// http://crbug.com/269623
-// http://openradar.appspot.com/14999594
-//
-// When the default version of close used on Mac OS X fails with EINTR, the
-// file descriptor is not in a deterministic state. It may have been closed,
-// or it may not have been. This makes it impossible to gracefully recover
-// from the error. If the close is retried after the FD has been closed, the
-// subsequent close can report EBADF, or worse, it can close an unrelated FD
-// opened by another thread. If the close is not retried after the FD has been
-// left open, the FD is leaked. Neither of these are good options.
-//
-// Mac OS X provides an alternate version of close, close$NOCANCEL. This
-// version will never fail with EINTR before the FD is actually closed. With
-// this version, it is thus safe to call close without checking for EINTR (as
-// the HANDLE_EINTR macro does) and not risk leaking the FD. In fact, mixing
-// this verison of close with HANDLE_EINTR is hazardous.
-//
-// The $NOCANCEL variants of various system calls are activated by compiling
-// with __DARWIN_NON_CANCELABLE, which prevents them from being pthread
-// cancellation points. Rather than taking such a heavy-handed approach, this
-// file implements an alternative: to use the $NOCANCEL variant of close (thus
-// preventing it from being a pthread cancellation point) without affecting
-// any other system calls.
-//
-// This file operates by providing a close function with the non-$NOCANCEL
-// symbol name expected for the compilation environment as set by <unistd.h>
-// and <sys/cdefs.h> (the DARWIN_ALIAS_C macro). That name is set by an asm
-// label on the declaration of the close function, so the definition of that
-// function receives that name. The function calls the $NOCANCEL variant, which
-// is resolved from libsyscall. By linking with this version of close prior to
-// the libsyscall version, close's implementation is overridden.
-
-#include <sys/cdefs.h>
-#include <unistd.h>
-
-// If the non-cancelable variants of all system calls have already been
-// chosen, do nothing.
-#if !__DARWIN_NON_CANCELABLE
-
-extern "C" {
-
-#if !__DARWIN_ONLY_UNIX_CONFORMANCE
-
-// When there's a choice between UNIX2003 and pre-UNIX2003. There's no
-// close$NOCANCEL symbol in this case, so use close$NOCANCEL$UNIX2003 as the
-// implementation. It does the same thing that close$NOCANCEL would do.
-#define close_implementation close$NOCANCEL$UNIX2003
-
-#else  // __DARWIN_ONLY_UNIX_CONFORMANCE
-
-// When only UNIX2003 is supported:
-#define close_implementation close$NOCANCEL
-
-#endif
-
-int close_implementation(int fd);
-
-int close(int fd) {
-  return close_implementation(fd);
-}
-
-#undef close_implementation
-
-}  // extern "C"
-
-#endif  // !__DARWIN_NON_CANCELABLE
diff --git a/base/mac/launch_services_util.h b/base/mac/launch_services_util.h
deleted file mode 100644
index 30d1eec..0000000
--- a/base/mac/launch_services_util.h
+++ /dev/null
@@ -1,31 +0,0 @@
-// Copyright (c) 2013 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef BASE_MAC_LAUNCH_SERVICES_UTIL_H_
-#define BASE_MAC_LAUNCH_SERVICES_UTIL_H_
-
-#import <AppKit/AppKit.h>
-
-#include "base/base_export.h"
-#include "base/command_line.h"
-#include "base/files/file_path.h"
-#include "base/process/process.h"
-
-namespace base {
-namespace mac {
-
-// Launches the application bundle at |bundle_path|, passing argv[1..] from
-// |command_line| as command line arguments if the app isn't already running.
-// |launch_options| are passed directly to
-// -[NSWorkspace launchApplicationAtURL:options:configuration:error:].
-// Returns a valid process if the app was successfully launched.
-BASE_EXPORT Process
-OpenApplicationWithPath(const FilePath& bundle_path,
-                        const CommandLine& command_line,
-                        NSWorkspaceLaunchOptions launch_options);
-
-}  // namespace mac
-}  // namespace base
-
-#endif  // BASE_MAC_LAUNCH_SERVICES_UTIL_H_
diff --git a/base/mac/launch_services_util.mm b/base/mac/launch_services_util.mm
deleted file mode 100644
index fa6e808..0000000
--- a/base/mac/launch_services_util.mm
+++ /dev/null
@@ -1,52 +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.
-
-#import "base/mac/launch_services_util.h"
-
-#include "base/logging.h"
-#include "base/strings/sys_string_conversions.h"
-
-namespace base {
-namespace mac {
-
-Process OpenApplicationWithPath(const base::FilePath& bundle_path,
-                                const CommandLine& command_line,
-                                NSWorkspaceLaunchOptions launch_options) {
-  NSString* bundle_url_spec = base::SysUTF8ToNSString(bundle_path.value());
-  NSURL* bundle_url = [NSURL fileURLWithPath:bundle_url_spec isDirectory:YES];
-  DCHECK(bundle_url);
-  if (!bundle_url) {
-    return Process();
-  }
-
-  // NSWorkspace automatically adds the binary path as the first argument and
-  // it should not be included into the list.
-  std::vector<std::string> argv = command_line.argv();
-  int argc = argv.size();
-  NSMutableArray* launch_args = [NSMutableArray arrayWithCapacity:argc - 1];
-  for (int i = 1; i < argc; ++i) {
-    [launch_args addObject:base::SysUTF8ToNSString(argv[i])];
-  }
-
-  NSDictionary* configuration = @{
-    NSWorkspaceLaunchConfigurationArguments : launch_args,
-  };
-  NSError* launch_error = nil;
-  // TODO(jeremya): this opens a new browser window if Chrome is already
-  // running without any windows open.
-  NSRunningApplication* app =
-      [[NSWorkspace sharedWorkspace] launchApplicationAtURL:bundle_url
-                                                    options:launch_options
-                                              configuration:configuration
-                                                      error:&launch_error];
-  if (launch_error) {
-    LOG(ERROR) << base::SysNSStringToUTF8([launch_error localizedDescription]);
-    return Process();
-  }
-  DCHECK(app);
-  return Process([app processIdentifier]);
-}
-
-}  // namespace mac
-}  // namespace base
diff --git a/base/mac/launchd.cc b/base/mac/launchd.cc
deleted file mode 100644
index 0337d2e..0000000
--- a/base/mac/launchd.cc
+++ /dev/null
@@ -1,75 +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/launchd.h"
-
-#include "base/logging.h"
-#include "base/mac/scoped_launch_data.h"
-
-namespace base {
-namespace mac {
-
-// MessageForJob sends a single message to launchd with a simple dictionary
-// mapping |operation| to |job_label|, and returns the result of calling
-// launch_msg to send that message. On failure, returns NULL. The caller
-// assumes ownership of the returned launch_data_t object.
-launch_data_t MessageForJob(const std::string& job_label,
-                            const char* operation) {
-  // launch_data_alloc returns something that needs to be freed.
-  ScopedLaunchData message(launch_data_alloc(LAUNCH_DATA_DICTIONARY));
-  if (!message.is_valid()) {
-    LOG(ERROR) << "launch_data_alloc";
-    return NULL;
-  }
-
-  // launch_data_new_string returns something that needs to be freed, but
-  // the dictionary will assume ownership when launch_data_dict_insert is
-  // called, so put it in a scoper and .release() it when given to the
-  // dictionary.
-  ScopedLaunchData job_label_launchd(launch_data_new_string(job_label.c_str()));
-  if (!job_label_launchd.is_valid()) {
-    LOG(ERROR) << "launch_data_new_string";
-    return NULL;
-  }
-
-  if (!launch_data_dict_insert(message.get(), job_label_launchd.release(),
-                               operation)) {
-    return NULL;
-  }
-
-  return launch_msg(message.get());
-}
-
-pid_t PIDForJob(const std::string& job_label) {
-  ScopedLaunchData response(MessageForJob(job_label, LAUNCH_KEY_GETJOB));
-  if (!response.is_valid()) {
-    return -1;
-  }
-
-  launch_data_type_t response_type = launch_data_get_type(response.get());
-  if (response_type != LAUNCH_DATA_DICTIONARY) {
-    if (response_type == LAUNCH_DATA_ERRNO) {
-      LOG(ERROR) << "PIDForJob: error "
-                 << launch_data_get_errno(response.get());
-    } else {
-      LOG(ERROR) << "PIDForJob: expected dictionary, got " << response_type;
-    }
-    return -1;
-  }
-
-  launch_data_t pid_data =
-      launch_data_dict_lookup(response.get(), LAUNCH_JOBKEY_PID);
-  if (!pid_data)
-    return 0;
-
-  if (launch_data_get_type(pid_data) != LAUNCH_DATA_INTEGER) {
-    LOG(ERROR) << "PIDForJob: expected integer";
-    return -1;
-  }
-
-  return launch_data_get_integer(pid_data);
-}
-
-}  // namespace mac
-}  // namespace base
diff --git a/base/mac/launchd.h b/base/mac/launchd.h
deleted file mode 100644
index 9e4514e..0000000
--- a/base/mac/launchd.h
+++ /dev/null
@@ -1,34 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef BASE_MAC_LAUNCHD_H_
-#define BASE_MAC_LAUNCHD_H_
-
-#include <launch.h>
-#include <sys/types.h>
-
-#include <string>
-
-#include "base/base_export.h"
-
-namespace base {
-namespace mac {
-
-// MessageForJob sends a single message to launchd with a simple dictionary
-// mapping |operation| to |job_label|, and returns the result of calling
-// launch_msg to send that message. On failure, returns NULL. The caller
-// assumes ownership of the returned launch_data_t object.
-BASE_EXPORT
-launch_data_t MessageForJob(const std::string& job_label,
-                            const char* operation);
-
-// Returns the process ID for |job_label| if the job is running, 0 if the job
-// is loaded but not running, or -1 on error.
-BASE_EXPORT
-pid_t PIDForJob(const std::string& job_label);
-
-}  // namespace mac
-}  // namespace base
-
-#endif  // BASE_MAC_LAUNCHD_H_
diff --git a/base/mac/mach_port_broker.h b/base/mac/mach_port_broker.h
deleted file mode 100644
index 4554b6a..0000000
--- a/base/mac/mach_port_broker.h
+++ /dev/null
@@ -1,108 +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.
-
-#ifndef BASE_MAC_MACH_PORT_BROKER_H_
-#define BASE_MAC_MACH_PORT_BROKER_H_
-
-#include <mach/mach.h>
-
-#include <map>
-#include <memory>
-#include <string>
-
-#include "base/base_export.h"
-#include "base/mac/dispatch_source_mach.h"
-#include "base/mac/scoped_mach_port.h"
-#include "base/macros.h"
-#include "base/process/port_provider_mac.h"
-#include "base/process/process_handle.h"
-#include "base/synchronization/lock.h"
-
-namespace base {
-
-// On OS X, the task port of a process is required to collect metrics about the
-// process, and to insert Mach ports into the process. Running |task_for_pid()|
-// is only allowed for privileged code. However, a process has port rights to
-// all its subprocesses, so let the child processes send their Mach port to the
-// parent over IPC.
-//
-// Mach ports can only be sent over Mach IPC, not over the |socketpair()| that
-// the regular IPC system uses. Hence, the child processes opens a Mach
-// connection shortly after launching and ipc their mach data to the parent
-// process. A single |MachPortBroker| with a given name is expected to exist in
-// the parent process.
-//
-// Since this data arrives over a separate channel, it is not available
-// immediately after a child process has been started.
-class BASE_EXPORT MachPortBroker : public base::PortProvider {
- public:
-  // For use in child processes. This will send the task port of the current
-  // process over Mach IPC to the port registered by name (via this class) in
-  // the parent process. Returns true if the message was sent successfully
-  // and false if otherwise.
-  static bool ChildSendTaskPortToParent(const std::string& name);
-
-  // Returns the Mach port name to use when sending or receiving messages.
-  // Does the Right Thing in the browser and in child processes.
-  static std::string GetMachPortName(const std::string& name, bool is_child);
-
-  MachPortBroker(const std::string& name);
-  ~MachPortBroker() override;
-
-  // Performs any initialization work.
-  bool Init();
-
-  // Adds a placeholder to the map for the given pid with MACH_PORT_NULL.
-  // Callers are expected to later update the port with FinalizePid(). Callers
-  // MUST acquire the lock given by GetLock() before calling this method (and
-  // release the lock afterwards).
-  void AddPlaceholderForPid(base::ProcessHandle pid);
-
-  // Removes |pid| from the task port map. Callers MUST acquire the lock given
-  // by GetLock() before calling this method (and release the lock afterwards).
-  void InvalidatePid(base::ProcessHandle pid);
-
-  // The lock that protects this MachPortBroker object. Callers MUST acquire
-  // and release this lock around calls to AddPlaceholderForPid(),
-  // InvalidatePid(), and FinalizePid();
-  base::Lock& GetLock() { return lock_; }
-
-  // Implement |base::PortProvider|.
-  mach_port_t TaskForPid(base::ProcessHandle process) const override;
-
- private:
-  friend class MachPortBrokerTest;
-
-  // Message handler that is invoked on |dispatch_source_| when an
-  // incoming message needs to be received.
-  void HandleRequest();
-
-  // Updates the mapping for |pid| to include the given |mach_info|.  Does
-  // nothing if PlaceholderForPid() has not already been called for the given
-  // |pid|. Callers MUST acquire the lock given by GetLock() before calling
-  // this method (and release the lock afterwards).
-  void FinalizePid(base::ProcessHandle pid, mach_port_t task_port);
-
-  // Name used to identify a particular port broker.
-  const std::string name_;
-
-  // The Mach port on which the server listens.
-  base::mac::ScopedMachReceiveRight server_port_;
-
-  // The dispatch source and queue on which Mach messages will be received.
-  std::unique_ptr<base::DispatchSourceMach> dispatch_source_;
-
-  // Stores mach info for every process in the broker.
-  typedef std::map<base::ProcessHandle, mach_port_t> MachMap;
-  MachMap mach_map_;
-
-  // Mutex that guards |mach_map_|.
-  mutable base::Lock lock_;
-
-  DISALLOW_COPY_AND_ASSIGN(MachPortBroker);
-};
-
-}  // namespace base
-
-#endif  // BASE_MAC_MACH_PORT_BROKER_H_
diff --git a/base/mac/mach_port_broker.mm b/base/mac/mach_port_broker.mm
deleted file mode 100644
index 6d9fec5..0000000
--- a/base/mac/mach_port_broker.mm
+++ /dev/null
@@ -1,184 +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/mach_port_broker.h"
-
-#include <bsm/libbsm.h>
-#include <servers/bootstrap.h>
-
-#include "base/logging.h"
-#include "base/mac/foundation_util.h"
-#include "base/mac/mach_logging.h"
-#include "base/strings/string_util.h"
-#include "base/strings/stringprintf.h"
-
-namespace base {
-
-namespace {
-
-// Mach message structure used in the child as a sending message.
-struct MachPortBroker_ChildSendMsg {
-  mach_msg_header_t header;
-  mach_msg_body_t body;
-  mach_msg_port_descriptor_t child_task_port;
-};
-
-// Complement to the ChildSendMsg, this is used in the parent for receiving
-// a message. Contains a message trailer with audit information.
-struct MachPortBroker_ParentRecvMsg : public MachPortBroker_ChildSendMsg {
-  mach_msg_audit_trailer_t trailer;
-};
-
-}  // namespace
-
-// static
-bool MachPortBroker::ChildSendTaskPortToParent(const std::string& name) {
-  // Look up the named MachPortBroker port that's been registered with the
-  // bootstrap server.
-  mach_port_t parent_port;
-  kern_return_t kr = bootstrap_look_up(bootstrap_port,
-      const_cast<char*>(GetMachPortName(name, true).c_str()), &parent_port);
-  if (kr != KERN_SUCCESS) {
-    BOOTSTRAP_LOG(ERROR, kr) << "bootstrap_look_up";
-    return false;
-  }
-  base::mac::ScopedMachSendRight scoped_right(parent_port);
-
-  // Create the check in message. This will copy a send right on this process'
-  // (the child's) task port and send it to the parent.
-  MachPortBroker_ChildSendMsg msg;
-  bzero(&msg, sizeof(msg));
-  msg.header.msgh_bits = MACH_MSGH_BITS_REMOTE(MACH_MSG_TYPE_COPY_SEND) |
-                         MACH_MSGH_BITS_COMPLEX;
-  msg.header.msgh_remote_port = parent_port;
-  msg.header.msgh_size = sizeof(msg);
-  msg.body.msgh_descriptor_count = 1;
-  msg.child_task_port.name = mach_task_self();
-  msg.child_task_port.disposition = MACH_MSG_TYPE_PORT_SEND;
-  msg.child_task_port.type = MACH_MSG_PORT_DESCRIPTOR;
-
-  kr = mach_msg(&msg.header, MACH_SEND_MSG | MACH_SEND_TIMEOUT, sizeof(msg),
-      0, MACH_PORT_NULL, 100 /*milliseconds*/, MACH_PORT_NULL);
-  if (kr != KERN_SUCCESS) {
-    MACH_LOG(ERROR, kr) << "mach_msg";
-    return false;
-  }
-
-  return true;
-}
-
-// static
-std::string MachPortBroker::GetMachPortName(const std::string& name,
-                                            bool is_child) {
-  // In child processes, use the parent's pid.
-  const pid_t pid = is_child ? getppid() : getpid();
-  return base::StringPrintf(
-      "%s.%s.%d", base::mac::BaseBundleID(), name.c_str(), pid);
-}
-
-mach_port_t MachPortBroker::TaskForPid(base::ProcessHandle pid) const {
-  base::AutoLock lock(lock_);
-  MachPortBroker::MachMap::const_iterator it = mach_map_.find(pid);
-  if (it == mach_map_.end())
-    return MACH_PORT_NULL;
-  return it->second;
-}
-
-MachPortBroker::MachPortBroker(const std::string& name) : name_(name) {}
-
-MachPortBroker::~MachPortBroker() {}
-
-bool MachPortBroker::Init() {
-  DCHECK(server_port_.get() == MACH_PORT_NULL);
-
-  // Check in with launchd and publish the service name.
-  mach_port_t port;
-  kern_return_t kr = bootstrap_check_in(
-      bootstrap_port, GetMachPortName(name_, false).c_str(), &port);
-  if (kr != KERN_SUCCESS) {
-    BOOTSTRAP_LOG(ERROR, kr) << "bootstrap_check_in";
-    return false;
-  }
-  server_port_.reset(port);
-
-  // Start the dispatch source.
-  std::string queue_name =
-      base::StringPrintf("%s.MachPortBroker", base::mac::BaseBundleID());
-  dispatch_source_.reset(new base::DispatchSourceMach(
-      queue_name.c_str(), server_port_.get(), ^{ HandleRequest(); }));
-  dispatch_source_->Resume();
-
-  return true;
-}
-
-void MachPortBroker::AddPlaceholderForPid(base::ProcessHandle pid) {
-  lock_.AssertAcquired();
-  DCHECK_EQ(0u, mach_map_.count(pid));
-  mach_map_[pid] = MACH_PORT_NULL;
-}
-
-void MachPortBroker::InvalidatePid(base::ProcessHandle pid) {
-  lock_.AssertAcquired();
-
-  MachMap::iterator mach_it = mach_map_.find(pid);
-  if (mach_it != mach_map_.end()) {
-    kern_return_t kr = mach_port_deallocate(mach_task_self(), mach_it->second);
-    MACH_LOG_IF(WARNING, kr != KERN_SUCCESS, kr) << "mach_port_deallocate";
-    mach_map_.erase(mach_it);
-  }
-}
-
-void MachPortBroker::HandleRequest() {
-  MachPortBroker_ParentRecvMsg msg;
-  bzero(&msg, sizeof(msg));
-  msg.header.msgh_size = sizeof(msg);
-  msg.header.msgh_local_port = server_port_.get();
-
-  const mach_msg_option_t options = MACH_RCV_MSG |
-      MACH_RCV_TRAILER_TYPE(MACH_RCV_TRAILER_AUDIT) |
-      MACH_RCV_TRAILER_ELEMENTS(MACH_RCV_TRAILER_AUDIT);
-
-  kern_return_t kr = mach_msg(&msg.header,
-                              options,
-                              0,
-                              sizeof(msg),
-                              server_port_.get(),
-                              MACH_MSG_TIMEOUT_NONE,
-                              MACH_PORT_NULL);
-  if (kr != KERN_SUCCESS) {
-    MACH_LOG(ERROR, kr) << "mach_msg";
-    return;
-  }
-
-  // Use the kernel audit information to make sure this message is from
-  // a task that this process spawned. The kernel audit token contains the
-  // unspoofable pid of the task that sent the message.
-  pid_t child_pid = audit_token_to_pid(msg.trailer.msgh_audit);
-  mach_port_t child_task_port = msg.child_task_port.name;
-
-  // Take the lock and update the broker information.
-  {
-    base::AutoLock lock(lock_);
-    FinalizePid(child_pid, child_task_port);
-  }
-  NotifyObservers(child_pid);
-}
-
-void MachPortBroker::FinalizePid(base::ProcessHandle pid,
-                                 mach_port_t task_port) {
-  lock_.AssertAcquired();
-
-  MachMap::iterator it = mach_map_.find(pid);
-  if (it == mach_map_.end()) {
-    // Do nothing for unknown pids.
-    LOG(ERROR) << "Unknown process " << pid << " is sending Mach IPC messages!";
-    return;
-  }
-
-  DCHECK(it->second == MACH_PORT_NULL);
-  if (it->second == MACH_PORT_NULL)
-    it->second = task_port;
-}
-
-}  // namespace base
diff --git a/base/mac/mach_port_util.cc b/base/mac/mach_port_util.cc
deleted file mode 100644
index 0eee210..0000000
--- a/base/mac/mach_port_util.cc
+++ /dev/null
@@ -1,136 +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/mach_port_util.h"
-
-#include "base/logging.h"
-
-namespace base {
-
-namespace {
-
-// Struct for sending a complex Mach message.
-struct MachSendComplexMessage {
-  mach_msg_header_t header;
-  mach_msg_body_t body;
-  mach_msg_port_descriptor_t data;
-};
-
-// Struct for receiving a complex message.
-struct MachReceiveComplexMessage {
-  mach_msg_header_t header;
-  mach_msg_body_t body;
-  mach_msg_port_descriptor_t data;
-  mach_msg_trailer_t trailer;
-};
-
-}  // namespace
-
-kern_return_t SendMachPort(mach_port_t endpoint,
-                           mach_port_t port_to_send,
-                           int disposition) {
-  MachSendComplexMessage send_msg;
-  send_msg.header.msgh_bits =
-      MACH_MSGH_BITS(MACH_MSG_TYPE_MOVE_SEND_ONCE, 0) | MACH_MSGH_BITS_COMPLEX;
-  send_msg.header.msgh_size = sizeof(send_msg);
-  send_msg.header.msgh_remote_port = endpoint;
-  send_msg.header.msgh_local_port = MACH_PORT_NULL;
-  send_msg.header.msgh_reserved = 0;
-  send_msg.header.msgh_id = 0;
-  send_msg.body.msgh_descriptor_count = 1;
-  send_msg.data.name = port_to_send;
-  send_msg.data.disposition = disposition;
-  send_msg.data.type = MACH_MSG_PORT_DESCRIPTOR;
-
-  kern_return_t kr =
-      mach_msg(&send_msg.header, MACH_SEND_MSG | MACH_SEND_TIMEOUT,
-               send_msg.header.msgh_size,
-               0,                // receive limit
-               MACH_PORT_NULL,   // receive name
-               0,                // timeout
-               MACH_PORT_NULL);  // notification port
-
-  if (kr != KERN_SUCCESS)
-    mach_port_deallocate(mach_task_self(), endpoint);
-
-  return kr;
-}
-
-base::mac::ScopedMachSendRight ReceiveMachPort(mach_port_t port_to_listen_on) {
-  MachReceiveComplexMessage recv_msg;
-  mach_msg_header_t* recv_hdr = &recv_msg.header;
-  recv_hdr->msgh_local_port = port_to_listen_on;
-  recv_hdr->msgh_size = sizeof(recv_msg);
-
-  kern_return_t kr =
-      mach_msg(recv_hdr, MACH_RCV_MSG | MACH_RCV_TIMEOUT, 0,
-               recv_hdr->msgh_size, port_to_listen_on, 0, MACH_PORT_NULL);
-  if (kr != KERN_SUCCESS)
-    return base::mac::ScopedMachSendRight(MACH_PORT_NULL);
-  if (recv_msg.header.msgh_id != 0)
-    return base::mac::ScopedMachSendRight(MACH_PORT_NULL);
-  return base::mac::ScopedMachSendRight(recv_msg.data.name);
-}
-
-mach_port_name_t CreateIntermediateMachPort(
-    mach_port_t task_port,
-    base::mac::ScopedMachSendRight port_to_insert,
-    MachCreateError* error_code) {
-  DCHECK_NE(mach_task_self(), task_port);
-  DCHECK_NE(static_cast<mach_port_name_t>(MACH_PORT_NULL), task_port);
-
-  // Make a port with receive rights in the destination task.
-  mach_port_name_t endpoint;
-  kern_return_t kr =
-      mach_port_allocate(task_port, MACH_PORT_RIGHT_RECEIVE, &endpoint);
-  if (kr != KERN_SUCCESS) {
-    if (error_code)
-      *error_code = MachCreateError::ERROR_MAKE_RECEIVE_PORT;
-    return MACH_PORT_NULL;
-  }
-
-  // Change its message queue limit so that it accepts one message.
-  mach_port_limits limits = {};
-  limits.mpl_qlimit = 1;
-  kr = mach_port_set_attributes(task_port, endpoint, MACH_PORT_LIMITS_INFO,
-                                reinterpret_cast<mach_port_info_t>(&limits),
-                                MACH_PORT_LIMITS_INFO_COUNT);
-  if (kr != KERN_SUCCESS) {
-    if (error_code)
-      *error_code = MachCreateError::ERROR_SET_ATTRIBUTES;
-    mach_port_deallocate(task_port, endpoint);
-    return MACH_PORT_NULL;
-  }
-
-  // Get a send right.
-  mach_port_t send_once_right;
-  mach_msg_type_name_t send_right_type;
-  kr =
-      mach_port_extract_right(task_port, endpoint, MACH_MSG_TYPE_MAKE_SEND_ONCE,
-                              &send_once_right, &send_right_type);
-  if (kr != KERN_SUCCESS) {
-    if (error_code)
-      *error_code = MachCreateError::ERROR_EXTRACT_DEST_RIGHT;
-    mach_port_deallocate(task_port, endpoint);
-    return MACH_PORT_NULL;
-  }
-  DCHECK_EQ(static_cast<mach_msg_type_name_t>(MACH_MSG_TYPE_PORT_SEND_ONCE),
-            send_right_type);
-
-  // This call takes ownership of |send_once_right|.
-  kr = base::SendMachPort(
-      send_once_right, port_to_insert.get(), MACH_MSG_TYPE_COPY_SEND);
-  if (kr != KERN_SUCCESS) {
-    if (error_code)
-      *error_code = MachCreateError::ERROR_SEND_MACH_PORT;
-    mach_port_deallocate(task_port, endpoint);
-    return MACH_PORT_NULL;
-  }
-
-  // Endpoint is intentionally leaked into the destination task. An IPC must be
-  // sent to the destination task so that it can clean up this port.
-  return endpoint;
-}
-
-}  // namespace base
diff --git a/base/mac/mach_port_util.h b/base/mac/mach_port_util.h
deleted file mode 100644
index f7a7f32..0000000
--- a/base/mac/mach_port_util.h
+++ /dev/null
@@ -1,48 +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.
-
-#ifndef BASE_MAC_MACH_PORT_UTIL_H_
-#define BASE_MAC_MACH_PORT_UTIL_H_
-
-#include <mach/mach.h>
-
-#include "base/base_export.h"
-#include "base/mac/scoped_mach_port.h"
-
-namespace base {
-
-enum class MachCreateError {
-    ERROR_MAKE_RECEIVE_PORT,
-    ERROR_SET_ATTRIBUTES,
-    ERROR_EXTRACT_DEST_RIGHT,
-    ERROR_SEND_MACH_PORT,
-};
-
-// Sends a Mach port to |dest_port|. Assumes that |dest_port| is a send once
-// right. Takes ownership of |dest_port|.
-BASE_EXPORT kern_return_t SendMachPort(mach_port_t dest_port,
-                                       mach_port_t port_to_send,
-                                       int disposition);
-
-// Receives a Mach port from |port_to_listen_on|, which should have exactly one
-// queued message. Returns |MACH_PORT_NULL| on any error.
-BASE_EXPORT base::mac::ScopedMachSendRight ReceiveMachPort(
-    mach_port_t port_to_listen_on);
-
-// Creates an intermediate Mach port in |task_port| and sends |port_to_insert|
-// as a mach_msg to the intermediate Mach port.
-// |task_port| is the task port of another process.
-// |port_to_insert| must be a send right in the current task's name space.
-// Returns the intermediate port on success, and MACH_PORT_NULL on failure.
-// On failure, |error_code| is set if not null.
-// This method takes ownership of |port_to_insert|. On success, ownership is
-// passed to the intermediate Mach port.
-BASE_EXPORT mach_port_name_t CreateIntermediateMachPort(
-    mach_port_t task_port,
-    base::mac::ScopedMachSendRight port_to_insert,
-    MachCreateError* error_code);
-
-}  // namespace base
-
-#endif  // BASE_MAC_MACH_PORT_UTIL_H_
diff --git a/base/mac/objc_release_properties.h b/base/mac/objc_release_properties.h
deleted file mode 100644
index d064cf9..0000000
--- a/base/mac/objc_release_properties.h
+++ /dev/null
@@ -1,65 +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.
-
-#if defined(__has_feature) && __has_feature(objc_arc)
-#error "ARC manages properties, so base::mac::ReleaseProperties isn't needed."
-#endif
-
-#ifndef BASE_MAC_OBJC_RELEASE_PROPERTIES_H_
-#define BASE_MAC_OBJC_RELEASE_PROPERTIES_H_
-
-#import <Foundation/Foundation.h>
-
-#include "base/base_export.h"
-
-// base::mac::ReleaseProperties(self) can be used in a class's -dealloc method
-// to release all properties marked "retain" or "copy" and backed by instance
-// variables. It only affects properties defined by the calling class, not
-// sub/superclass properties.
-//
-// Example usage:
-//
-//     @interface AllaysIBF : NSObject
-//
-//     @property(retain, nonatomic) NSString* string;
-//     @property(copy, nonatomic) NSMutableDictionary* dictionary;
-//     @property(assign, nonatomic) IBFDelegate* delegate;
-//
-//     @end  // @interface AllaysIBF
-//
-//     @implementation AllaysIBF
-//
-//     - (void)dealloc {
-//       base::mac::ReleaseProperties(self);
-//       [super dealloc];
-//     }
-//
-//     @end  // @implementation AllaysIBF
-//
-// self.string and self.dictionary will each be released, but self.delegate
-// will not because it is marked "assign", not "retain" or "copy".
-//
-// Another approach would be to provide a base class to inherit from whose
-// -dealloc walks the property lists of all subclasses to release their
-// properties. Distant subclasses might not expect it and over-release their
-// properties, so don't do that.
-
-namespace base {
-namespace mac {
-
-namespace details {
-
-BASE_EXPORT void ReleaseProperties(id, Class);
-
-}  // namespace details
-
-template <typename Self>
-void ReleaseProperties(Self* self) {
-  details::ReleaseProperties(self, [Self class]);
-}
-
-}  // namespace mac
-}  // namespace base
-
-#endif  // BASE_MAC_OBJC_RELEASE_PROPERTIES_H_
diff --git a/base/mac/objc_release_properties.mm b/base/mac/objc_release_properties.mm
deleted file mode 100644
index d0006cf..0000000
--- a/base/mac/objc_release_properties.mm
+++ /dev/null
@@ -1,66 +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 <memory>
-
-#include <objc/runtime.h>
-
-#include "base/logging.h"
-#include "base/memory/free_deleter.h"
-
-namespace {
-
-bool IsRetained(objc_property_t property) {
-  // The format of the string returned by property_getAttributes is documented
-  // at
-  // http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Articles/ocrtPropertyIntrospection.html#//apple_ref/doc/uid/TP40008048-CH101-SW6
-  const char* attribute = property_getAttributes(property);
-  while (attribute[0]) {
-    switch (attribute[0]) {
-      case 'C':  // copy
-      case '&':  // retain
-        return true;
-    }
-    do {
-      attribute++;
-    } while (attribute[0] && attribute[-1] != ',');
-  }
-  return false;
-}
-
-id ValueOf(id obj, objc_property_t property) {
-  std::unique_ptr<char, base::FreeDeleter> ivar_name(
-      property_copyAttributeValue(property, "V"));  // instance variable name
-  if (!ivar_name)
-    return nil;
-  id ivar_value = nil;
-  Ivar ivar = object_getInstanceVariable(obj, &*ivar_name,
-                                         reinterpret_cast<void**>(&ivar_value));
-  DCHECK(ivar);
-  return ivar_value;
-}
-
-}  // namespace
-
-namespace base {
-namespace mac {
-namespace details {
-
-void ReleaseProperties(id self, Class cls) {
-  unsigned int property_count;
-  std::unique_ptr<objc_property_t[], base::FreeDeleter> properties(
-      class_copyPropertyList(cls, &property_count));
-  for (size_t i = 0; i < property_count; ++i) {
-    objc_property_t property = properties[i];
-    if (!IsRetained(property))
-      continue;
-    [ValueOf(self, property) release];
-  }
-}
-
-}  // namespace details
-}  // namespace mac
-}  // namespace base
diff --git a/base/mac/os_crash_dumps.cc b/base/mac/os_crash_dumps.cc
deleted file mode 100644
index 95af009..0000000
--- a/base/mac/os_crash_dumps.cc
+++ /dev/null
@@ -1,61 +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/mac/os_crash_dumps.h"
-
-#include <signal.h>
-#include <stddef.h>
-#include <unistd.h>
-
-#include "base/logging.h"
-#include "base/macros.h"
-
-namespace base {
-namespace mac {
-
-namespace {
-
-void ExitSignalHandler(int sig) {
-  // A call to exit() can call atexit() handlers.  If we SIGSEGV due
-  // to a corrupt heap, and if we have an atexit handler that
-  // allocates or frees memory, we are in trouble if we do not _exit.
-  _exit(128 + sig);
-}
-
-}  // namespace
-
-void DisableOSCrashDumps() {
-  // These are the POSIX signals corresponding to the Mach exceptions that
-  // Apple Crash Reporter handles.  See ux_exception() in xnu's
-  // bsd/uxkern/ux_exception.c and machine_exception() in xnu's
-  // bsd/dev/*/unix_signal.c.
-  const int signals_to_intercept[] = {
-    // Hardware faults
-    SIGILL,   // EXC_BAD_INSTRUCTION
-    SIGTRAP,  // EXC_BREAKPOINT
-    SIGFPE,   // EXC_ARITHMETIC
-    SIGBUS,   // EXC_BAD_ACCESS
-    SIGSEGV,  // EXC_BAD_ACCESS
-    // Not a hardware fault
-    SIGABRT
-  };
-
-  // For all these signals, just wire things up so we exit immediately.
-  for (size_t i = 0; i < arraysize(signals_to_intercept); ++i) {
-    struct sigaction act = {};
-    act.sa_handler = ExitSignalHandler;
-
-    // It is better to allow the signal handler to run on the stack
-    // registered with sigaltstack(), if one is present.
-    act.sa_flags = SA_ONSTACK;
-
-    if (sigemptyset(&act.sa_mask) != 0)
-      DPLOG(FATAL) << "sigemptyset() failed";
-    if (sigaction(signals_to_intercept[i], &act, NULL) != 0)
-      DPLOG(FATAL) << "sigaction() failed";
-  }
-}
-
-}  // namespace mac
-}  // namespace base
diff --git a/base/mac/os_crash_dumps.h b/base/mac/os_crash_dumps.h
deleted file mode 100644
index 31d90fb..0000000
--- a/base/mac/os_crash_dumps.h
+++ /dev/null
@@ -1,22 +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.
-
-#ifndef BASE_MAC_OS_CRASH_DUMPS_H_
-#define BASE_MAC_OS_CRASH_DUMPS_H_
-
-#include "base/base_export.h"
-
-namespace base {
-namespace mac {
-
-// On Mac OS X, it can take a really long time for the OS crash handler to
-// process a Chrome crash when debugging symbols are available.  This
-// translates into a long wait until the process actually dies.  This call
-// disables Apple Crash Reporter entirely.
-BASE_EXPORT void DisableOSCrashDumps();
-
-}  // namespace mac
-}  // namespace base
-
-#endif  // BASE_MAC_OS_CRASH_DUMPS_H_
diff --git a/base/mac/scoped_aedesc.h b/base/mac/scoped_aedesc.h
deleted file mode 100644
index 7327092..0000000
--- a/base/mac/scoped_aedesc.h
+++ /dev/null
@@ -1,52 +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.
-
-#ifndef BASE_MAC_SCOPED_AEDESC_H_
-#define BASE_MAC_SCOPED_AEDESC_H_
-
-#import <CoreServices/CoreServices.h>
-
-#include "base/macros.h"
-
-namespace base {
-namespace mac {
-
-// The ScopedAEDesc is used to scope AppleEvent descriptors.  On creation,
-// it will store a NULL descriptor.  On destruction, it will dispose of the
-// descriptor.
-//
-// This class is parameterized for additional type safety checks.  You can use
-// the generic AEDesc type by not providing a template parameter:
-//  ScopedAEDesc<> desc;
-template <typename AEDescType = AEDesc>
-class ScopedAEDesc {
- public:
-  ScopedAEDesc() {
-    AECreateDesc(typeNull, NULL, 0, &desc_);
-  }
-
-  ~ScopedAEDesc() {
-    AEDisposeDesc(&desc_);
-  }
-
-  // Used for in parameters.
-  operator const AEDescType*() {
-    return &desc_;
-  }
-
-  // Used for out parameters.
-  AEDescType* OutPointer() {
-    return &desc_;
-  }
-
- private:
-  AEDescType desc_;
-
-  DISALLOW_COPY_AND_ASSIGN(ScopedAEDesc);
-};
-
-}  // namespace mac
-}  // namespace base
-
-#endif  // BASE_MAC_SCOPED_AEDESC_H_
diff --git a/base/mac/scoped_authorizationref.h b/base/mac/scoped_authorizationref.h
deleted file mode 100644
index b83f8df..0000000
--- a/base/mac/scoped_authorizationref.h
+++ /dev/null
@@ -1,82 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef BASE_MAC_SCOPED_AUTHORIZATIONREF_H_
-#define BASE_MAC_SCOPED_AUTHORIZATIONREF_H_
-
-#include <Security/Authorization.h>
-
-#include "base/compiler_specific.h"
-#include "base/macros.h"
-
-// ScopedAuthorizationRef maintains ownership of an AuthorizationRef.  It is
-// patterned after the unique_ptr interface.
-
-namespace base {
-namespace mac {
-
-class ScopedAuthorizationRef {
- public:
-  explicit ScopedAuthorizationRef(AuthorizationRef authorization = NULL)
-      : authorization_(authorization) {
-  }
-
-  ~ScopedAuthorizationRef() {
-    if (authorization_) {
-      AuthorizationFree(authorization_, kAuthorizationFlagDestroyRights);
-    }
-  }
-
-  void reset(AuthorizationRef authorization = NULL) {
-    if (authorization_ != authorization) {
-      if (authorization_) {
-        AuthorizationFree(authorization_, kAuthorizationFlagDestroyRights);
-      }
-      authorization_ = authorization;
-    }
-  }
-
-  bool operator==(AuthorizationRef that) const {
-    return authorization_ == that;
-  }
-
-  bool operator!=(AuthorizationRef that) const {
-    return authorization_ != that;
-  }
-
-  operator AuthorizationRef() const {
-    return authorization_;
-  }
-
-  AuthorizationRef* get_pointer() { return &authorization_; }
-
-  AuthorizationRef get() const {
-    return authorization_;
-  }
-
-  void swap(ScopedAuthorizationRef& that) {
-    AuthorizationRef temp = that.authorization_;
-    that.authorization_ = authorization_;
-    authorization_ = temp;
-  }
-
-  // ScopedAuthorizationRef::release() is like std::unique_ptr<>::release. It is
-  // NOT a wrapper for AuthorizationFree(). To force a ScopedAuthorizationRef
-  // object to call AuthorizationFree(), use ScopedAuthorizationRef::reset().
-  AuthorizationRef release() WARN_UNUSED_RESULT {
-    AuthorizationRef temp = authorization_;
-    authorization_ = NULL;
-    return temp;
-  }
-
- private:
-  AuthorizationRef authorization_;
-
-  DISALLOW_COPY_AND_ASSIGN(ScopedAuthorizationRef);
-};
-
-}  // namespace mac
-}  // namespace base
-
-#endif  // BASE_MAC_SCOPED_AUTHORIZATIONREF_H_
diff --git a/base/mac/scoped_cffiledescriptorref.h b/base/mac/scoped_cffiledescriptorref.h
deleted file mode 100644
index 923a159..0000000
--- a/base/mac/scoped_cffiledescriptorref.h
+++ /dev/null
@@ -1,39 +0,0 @@
-// Copyright 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef BASE_MAC_SCOPED_CFFILEDESCRIPTORREF_H_
-#define BASE_MAC_SCOPED_CFFILEDESCRIPTORREF_H_
-
-#include <CoreFoundation/CoreFoundation.h>
-
-#include "base/scoped_generic.h"
-
-namespace base {
-namespace mac {
-
-namespace internal {
-
-struct ScopedCFFileDescriptorRefTraits {
-  static CFFileDescriptorRef InvalidValue() { return nullptr; }
-  static void Free(CFFileDescriptorRef ref) {
-    CFFileDescriptorInvalidate(ref);
-    CFRelease(ref);
-  }
-};
-
-}  // namespace internal
-
-// ScopedCFFileDescriptorRef is designed after ScopedCFTypeRef<>. On
-// destruction, it will invalidate the file descriptor.
-// ScopedCFFileDescriptorRef (unlike ScopedCFTypeRef<>) does not support RETAIN
-// semantics, copying, or assignment, as doing so would increase the chances
-// that a file descriptor is invalidated while still in use.
-using ScopedCFFileDescriptorRef =
-    ScopedGeneric<CFFileDescriptorRef,
-                  internal::ScopedCFFileDescriptorRefTraits>;
-
-}  // namespace mac
-}  // namespace base
-
-#endif  // BASE_MAC_SCOPED_CFFILEDESCRIPTORREF_H_
diff --git a/base/mac/scoped_ionotificationportref.h b/base/mac/scoped_ionotificationportref.h
deleted file mode 100644
index 93ebc98..0000000
--- a/base/mac/scoped_ionotificationportref.h
+++ /dev/null
@@ -1,33 +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.
-
-#ifndef BASE_MAC_SCOPED_IONOTIFICATIONPORTREF_H_
-#define BASE_MAC_SCOPED_IONOTIFICATIONPORTREF_H_
-
-#include <IOKit/IOKitLib.h>
-
-#include "base/scoped_generic.h"
-
-namespace base {
-namespace mac {
-
-namespace internal {
-
-struct ScopedIONotificationPortRefTraits {
-  static IONotificationPortRef InvalidValue() { return nullptr; }
-  static void Free(IONotificationPortRef object) {
-    IONotificationPortDestroy(object);
-  }
-};
-
-}  // namepsace internal
-
-using ScopedIONotificationPortRef =
-    ScopedGeneric<IONotificationPortRef,
-                  internal::ScopedIONotificationPortRefTraits>;
-
-}  // namespace mac
-}  // namespace base
-
-#endif  // BASE_MAC_SCOPED_IONOTIFICATIONPORTREF_H_
diff --git a/base/mac/scoped_ioplugininterface.h b/base/mac/scoped_ioplugininterface.h
deleted file mode 100644
index 872da8e..0000000
--- a/base/mac/scoped_ioplugininterface.h
+++ /dev/null
@@ -1,38 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef BASE_MAC_SCOPED_IOPLUGININTERFACE_H_
-#define BASE_MAC_SCOPED_IOPLUGININTERFACE_H_
-
-#include <IOKit/IOKitLib.h>
-
-#include "base/mac/scoped_typeref.h"
-
-namespace base {
-namespace mac {
-
-namespace internal {
-
-template <typename T>
-struct ScopedIOPluginInterfaceTraits {
-  static T InvalidValue() { return nullptr; }
-  static T Retain(T t) {
-    (*t)->AddRef(t);
-    return t;
-  }
-  static void Release(T t) { (*t)->Release(t); }
-};
-
-}  // namespace internal
-
-// Just like ScopedCFTypeRef but for IOCFPlugInInterface and friends
-// (IOUSBInterfaceStruct and IOUSBDeviceStruct320 in particular).
-template <typename T>
-using ScopedIOPluginInterface =
-    ScopedTypeRef<T**, internal::ScopedIOPluginInterfaceTraits<T**>>;
-
-}  // namespace mac
-}  // namespace base
-
-#endif  // BASE_MAC_SCOPED_IOPLUGININTERFACE_H_
diff --git a/base/mac/scoped_launch_data.h b/base/mac/scoped_launch_data.h
deleted file mode 100644
index f4db330..0000000
--- a/base/mac/scoped_launch_data.h
+++ /dev/null
@@ -1,31 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef BASE_MAC_SCOPED_LAUNCH_DATA_H_
-#define BASE_MAC_SCOPED_LAUNCH_DATA_H_
-
-#include <launch.h>
-
-#include "base/scoped_generic.h"
-
-namespace base {
-namespace mac {
-
-namespace internal {
-
-struct ScopedLaunchDataTraits {
-  static launch_data_t InvalidValue() { return nullptr; }
-  static void Free(launch_data_t ldt) { launch_data_free(ldt); }
-};
-
-}  // namespace internal
-
-// Just like std::unique_ptr<> but for launch_data_t.
-using ScopedLaunchData =
-    ScopedGeneric<launch_data_t, internal::ScopedLaunchDataTraits>;
-
-}  // namespace mac
-}  // namespace base
-
-#endif  // BASE_MAC_SCOPED_LAUNCH_DATA_H_
diff --git a/base/mac/scoped_mach_vm.cc b/base/mac/scoped_mach_vm.cc
deleted file mode 100644
index d52c77f..0000000
--- a/base/mac/scoped_mach_vm.cc
+++ /dev/null
@@ -1,33 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "base/mac/scoped_mach_vm.h"
-
-namespace base {
-namespace mac {
-
-void ScopedMachVM::reset(vm_address_t address, vm_size_t size) {
-  DCHECK_EQ(address % PAGE_SIZE, 0u);
-  DCHECK_EQ(size % PAGE_SIZE, 0u);
-
-  if (size_) {
-    if (address_ < address) {
-      vm_deallocate(mach_task_self(),
-                    address_,
-                    std::min(size_, address - address_));
-    }
-    if (address_ + size_ > address + size) {
-      vm_address_t deallocate_start = std::max(address_, address + size);
-      vm_deallocate(mach_task_self(),
-                    deallocate_start,
-                    address_ + size_ - deallocate_start);
-    }
-  }
-
-  address_ = address;
-  size_ = size;
-}
-
-}  // namespace mac
-}  // namespace base
diff --git a/base/mac/scoped_mach_vm.h b/base/mac/scoped_mach_vm.h
deleted file mode 100644
index 58a13f6..0000000
--- a/base/mac/scoped_mach_vm.h
+++ /dev/null
@@ -1,93 +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.
-
-#ifndef BASE_MAC_SCOPED_MACH_VM_H_
-#define BASE_MAC_SCOPED_MACH_VM_H_
-
-#include <mach/mach.h>
-#include <stddef.h>
-
-#include <algorithm>
-
-#include "base/base_export.h"
-#include "base/logging.h"
-#include "base/macros.h"
-
-// Use ScopedMachVM to supervise ownership of pages in the current process
-// through the Mach VM subsystem. Pages allocated with vm_allocate can be
-// released when exiting a scope with ScopedMachVM.
-//
-// The Mach VM subsystem operates on a page-by-page basis, and a single VM
-// allocation managed by a ScopedMachVM object may span multiple pages. As far
-// as Mach is concerned, allocated pages may be deallocated individually. This
-// is in contrast to higher-level allocators such as malloc, where the base
-// address of an allocation implies the size of an allocated block.
-// Consequently, it is not sufficient to just pass the base address of an
-// allocation to ScopedMachVM, it also needs to know the size of the
-// allocation. To avoid any confusion, both the base address and size must
-// be page-aligned.
-//
-// When dealing with Mach VM, base addresses will naturally be page-aligned,
-// but user-specified sizes may not be. If there's a concern that a size is
-// not page-aligned, use the mach_vm_round_page macro to correct it.
-//
-// Example:
-//
-//   vm_address_t address = 0;
-//   vm_size_t size = 12345;  // This requested size is not page-aligned.
-//   kern_return_t kr =
-//       vm_allocate(mach_task_self(), &address, size, VM_FLAGS_ANYWHERE);
-//   if (kr != KERN_SUCCESS) {
-//     return false;
-//   }
-//   ScopedMachVM vm_owner(address, mach_vm_round_page(size));
-
-namespace base {
-namespace mac {
-
-class BASE_EXPORT ScopedMachVM {
- public:
-  explicit ScopedMachVM(vm_address_t address = 0, vm_size_t size = 0)
-      : address_(address), size_(size) {
-    DCHECK_EQ(address % PAGE_SIZE, 0u);
-    DCHECK_EQ(size % PAGE_SIZE, 0u);
-  }
-
-  ~ScopedMachVM() {
-    if (size_) {
-      vm_deallocate(mach_task_self(), address_, size_);
-    }
-  }
-
-  void reset(vm_address_t address = 0, vm_size_t size = 0);
-
-  vm_address_t address() const {
-    return address_;
-  }
-
-  vm_size_t size() const {
-    return size_;
-  }
-
-  void swap(ScopedMachVM& that) {
-    std::swap(address_, that.address_);
-    std::swap(size_, that.size_);
-  }
-
-  void release() {
-    address_ = 0;
-    size_ = 0;
-  }
-
- private:
-  vm_address_t address_;
-  vm_size_t size_;
-
-  DISALLOW_COPY_AND_ASSIGN(ScopedMachVM);
-};
-
-}  // namespace mac
-}  // namespace base
-
-#endif  // BASE_MAC_SCOPED_MACH_VM_H_
diff --git a/base/mac/scoped_objc_class_swizzler.h b/base/mac/scoped_objc_class_swizzler.h
deleted file mode 100644
index e18e4ab..0000000
--- a/base/mac/scoped_objc_class_swizzler.h
+++ /dev/null
@@ -1,49 +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.
-
-#ifndef BASE_MAC_SCOPED_OBJC_CLASS_SWIZZLER_H_
-#define BASE_MAC_SCOPED_OBJC_CLASS_SWIZZLER_H_
-
-#import <objc/runtime.h>
-
-#include "base/base_export.h"
-#include "base/macros.h"
-
-namespace base {
-namespace mac {
-
-// Within a given scope, swaps method implementations of a class interface, or
-// between two class interfaces. The argument and return types must match.
-class BASE_EXPORT ScopedObjCClassSwizzler {
- public:
-  // Given two classes that each respond to |selector|, swap the implementations
-  // of those methods.
-  ScopedObjCClassSwizzler(Class target, Class source, SEL selector);
-
-  // Given two selectors on the same class interface, |target| (e.g. via
-  // inheritance or categories), swap the implementations of methods |original|
-  // and |alternate|.
-  ScopedObjCClassSwizzler(Class target, SEL original, SEL alternate);
-
-  ~ScopedObjCClassSwizzler();
-
-  // Return a callable function pointer for the replaced method. To call this
-  // from the replacing function, the first two arguments should be |self| and
-  // |_cmd|. These are followed by the (variadic) method arguments.
-  IMP GetOriginalImplementation();
-
- private:
-  // Delegated constructor.
-  void Init(Class target, Class source, SEL original, SEL alternate);
-
-  Method old_selector_impl_;
-  Method new_selector_impl_;
-
-  DISALLOW_COPY_AND_ASSIGN(ScopedObjCClassSwizzler);
-};
-
-}  // namespace mac
-}  // namespace base
-
-#endif  // BASE_MAC_SCOPED_OBJC_CLASS_SWIZZLER_H_
diff --git a/base/mac/scoped_objc_class_swizzler.mm b/base/mac/scoped_objc_class_swizzler.mm
deleted file mode 100644
index 20e5c56..0000000
--- a/base/mac/scoped_objc_class_swizzler.mm
+++ /dev/null
@@ -1,71 +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"
-
-#include <string.h>
-
-#include "base/logging.h"
-
-namespace base {
-namespace mac {
-
-ScopedObjCClassSwizzler::ScopedObjCClassSwizzler(Class target,
-                                                 Class source,
-                                                 SEL selector)
-    : old_selector_impl_(NULL), new_selector_impl_(NULL) {
-  Init(target, source, selector, selector);
-}
-
-ScopedObjCClassSwizzler::ScopedObjCClassSwizzler(Class target,
-                                                 SEL original,
-                                                 SEL alternate)
-    : old_selector_impl_(NULL), new_selector_impl_(NULL) {
-  Init(target, target, original, alternate);
-}
-
-ScopedObjCClassSwizzler::~ScopedObjCClassSwizzler() {
-  if (old_selector_impl_ && new_selector_impl_)
-    method_exchangeImplementations(old_selector_impl_, new_selector_impl_);
-}
-
-IMP ScopedObjCClassSwizzler::GetOriginalImplementation() {
-  // Note that while the swizzle is in effect the "new" method is actually
-  // pointing to the original implementation, since they have been swapped.
-  return method_getImplementation(new_selector_impl_);
-}
-
-void ScopedObjCClassSwizzler::Init(Class target,
-                                   Class source,
-                                   SEL original,
-                                   SEL alternate) {
-  old_selector_impl_ = class_getInstanceMethod(target, original);
-  new_selector_impl_ = class_getInstanceMethod(source, alternate);
-  if (!old_selector_impl_ && !new_selector_impl_) {
-    // Try class methods.
-    old_selector_impl_ = class_getClassMethod(target, original);
-    new_selector_impl_ = class_getClassMethod(source, alternate);
-  }
-
-  DCHECK(old_selector_impl_);
-  DCHECK(new_selector_impl_);
-  if (!old_selector_impl_ || !new_selector_impl_)
-    return;
-
-  // The argument and return types must match exactly.
-  const char* old_types = method_getTypeEncoding(old_selector_impl_);
-  const char* new_types = method_getTypeEncoding(new_selector_impl_);
-  DCHECK(old_types);
-  DCHECK(new_types);
-  DCHECK_EQ(0, strcmp(old_types, new_types));
-  if (!old_types || !new_types || strcmp(old_types, new_types)) {
-    old_selector_impl_ = new_selector_impl_ = NULL;
-    return;
-  }
-
-  method_exchangeImplementations(old_selector_impl_, new_selector_impl_);
-}
-
-}  // namespace mac
-}  // namespace base
diff --git a/base/mac/scoped_sending_event.h b/base/mac/scoped_sending_event.h
deleted file mode 100644
index c579cef..0000000
--- a/base/mac/scoped_sending_event.h
+++ /dev/null
@@ -1,48 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef BASE_MAC_SCOPED_SENDING_EVENT_H_
-#define BASE_MAC_SCOPED_SENDING_EVENT_H_
-
-#include "base/base_export.h"
-#include "base/macros.h"
-#include "base/message_loop/message_pump_mac.h"
-
-// Nested event loops can pump IPC messages, including
-// script-initiated tab closes, which could release objects that the
-// nested event loop might message.  CrAppProtocol defines how to ask
-// the embedding NSApplication subclass if an event is currently being
-// handled, in which case such closes are deferred to the top-level
-// event loop.
-//
-// ScopedSendingEvent allows script-initiated event loops to work like
-// a nested event loop, as such events do not arrive via -sendEvent:.
-// CrAppControlProtocol lets ScopedSendingEvent tell the embedding
-// NSApplication what to return from -handlingSendEvent.
-
-@protocol CrAppControlProtocol<CrAppProtocol>
-- (void)setHandlingSendEvent:(BOOL)handlingSendEvent;
-@end
-
-namespace base {
-namespace mac {
-
-class BASE_EXPORT ScopedSendingEvent {
- public:
-  ScopedSendingEvent();
-  ~ScopedSendingEvent();
-
- private:
-  // The NSApp in control at the time the constructor was run, to be
-  // sure the |handling_| setting is restored appropriately.
-  NSObject<CrAppControlProtocol>* app_;
-  BOOL handling_;  // Value of -[app_ handlingSendEvent] at construction.
-
-  DISALLOW_COPY_AND_ASSIGN(ScopedSendingEvent);
-};
-
-}  // namespace mac
-}  // namespace base
-
-#endif  // BASE_MAC_SCOPED_SENDING_EVENT_H_
diff --git a/base/mac/scoped_sending_event.mm b/base/mac/scoped_sending_event.mm
deleted file mode 100644
index c3813d8..0000000
--- a/base/mac/scoped_sending_event.mm
+++ /dev/null
@@ -1,24 +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"
-
-#include "base/logging.h"
-
-namespace base {
-namespace mac {
-
-ScopedSendingEvent::ScopedSendingEvent()
-    : app_(static_cast<NSObject<CrAppControlProtocol>*>(NSApp)) {
-  DCHECK([app_ conformsToProtocol:@protocol(CrAppControlProtocol)]);
-  handling_ = [app_ isHandlingSendEvent];
-  [app_ setHandlingSendEvent:YES];
-}
-
-ScopedSendingEvent::~ScopedSendingEvent() {
-  [app_ setHandlingSendEvent:handling_];
-}
-
-}  // namespace mac
-}  // namespace base
diff --git a/base/memory/ref_counted.cc b/base/memory/ref_counted.cc
index c2d40ef..79ab853 100644
--- a/base/memory/ref_counted.cc
+++ b/base/memory/ref_counted.cc
@@ -4,8 +4,6 @@
 
 #include "base/memory/ref_counted.h"
 
-#include "base/threading/thread_collision_warner.h"
-
 namespace base {
 
 namespace subtle {
diff --git a/base/memory/ref_counted.h b/base/memory/ref_counted.h
index 6466c19..5cb731c 100644
--- a/base/memory/ref_counted.h
+++ b/base/memory/ref_counted.h
@@ -15,7 +15,6 @@
 #include "base/logging.h"
 #include "base/macros.h"
 #include "base/memory/scoped_refptr.h"
-#include "base/threading/thread_collision_warner.h"
 #include "build_config.h"
 
 namespace base {
diff --git a/base/numerics/OWNERS b/base/numerics/OWNERS
deleted file mode 100644
index 5493fba..0000000
--- a/base/numerics/OWNERS
+++ /dev/null
@@ -1,5 +0,0 @@
-jschuh@chromium.org
-tsepez@chromium.org
-
-
-# COMPONENT: Internals
diff --git a/base/numerics/README.md b/base/numerics/README.md
deleted file mode 100644
index 896b124..0000000
--- a/base/numerics/README.md
+++ /dev/null
@@ -1,409 +0,0 @@
-# `base/numerics`
-
-This directory contains a dependency-free, header-only library of templates
-providing well-defined semantics for safely and performantly handling a variety
-of numeric operations, including most common arithmetic operations and
-conversions.
-
-The public API is broken out into the following header files:
-
-*   `checked_math.h` contains the `CheckedNumeric` template class and helper
-    functions for performing arithmetic and conversion operations that detect
-    errors and boundary conditions (e.g. overflow, truncation, etc.).
-*   `clamped_math.h` contains the `ClampedNumeric` template class and
-    helper functions for performing fast, clamped (i.e. non-sticky saturating)
-    arithmetic operations and conversions.
-*   `safe_conversions.h` contains the `StrictNumeric` template class and
-    a collection of custom casting templates and helper functions for safely
-    converting between a range of numeric types.
-*   `safe_math.h` includes all of the previously mentioned headers.
-
-*** aside
-**Note:** The `Numeric` template types implicitly convert from C numeric types
-and `Numeric` templates that are convertable to an underlying C numeric type.
-The conversion priority for `Numeric` type coercions is:
-
-*   `StrictNumeric` coerces to `ClampedNumeric` and `CheckedNumeric`
-*   `ClampedNumeric` coerces to `CheckedNumeric`
-***
-
-[TOC]
-
-## Common patterns and use-cases
-
-The following covers the preferred style for the most common uses of this
-library. Please don't cargo-cult from anywhere else. 😉
-
-### Performing checked arithmetic conversions
-
-The `checked_cast` template converts between arbitrary arithmetic types, and is
-used for cases where a conversion failure should result in program termination:
-
-```cpp
-// Crash if signed_value is out of range for buff_size.
-size_t buff_size = checked_cast<size_t>(signed_value);
-```
-
-### Performing saturated (clamped) arithmetic conversions
-
-The `saturated_cast` template converts between arbitrary arithmetic types, and
-is used in cases where an out-of-bounds source value should be saturated to the
-corresponding maximum or minimum of the destination type:
-
-```cpp
-// Convert from float with saturation to INT_MAX, INT_MIN, or 0 for NaN.
-int int_value = saturated_cast<int>(floating_point_value);
-```
-
-### Enforcing arithmetic conversions at compile-time
-
-The `strict_cast` enforces type restrictions at compile-time and results in
-emitted code that is identical to a normal `static_cast`. However, a
-`strict_cast` assignment will fail to compile if the destination type cannot
-represent the full range of the source type:
-
-```cpp
-// Throw a compiler error if byte_value is changed to an out-of-range-type.
-int int_value = strict_cast<int>(byte_value);
-```
-
-You can also enforce these compile-time restrictions on function parameters by
-using the `StrictNumeric` template:
-
-```cpp
-// Throw a compiler error if the size argument cannot be represented by a
-// size_t (e.g. passing an int will fail to compile).
-bool AllocateBuffer(void** buffer, StrictCast<size_t> size);
-```
-
-### Comparing values between arbitrary arithmetic types
-
-Both the `StrictNumeric` and `ClampedNumeric` types provide well defined
-comparisons between arbitrary arithmetic types. This allows you to perform
-comparisons that are not legal or would trigger compiler warnings or errors
-under the normal arithmetic promotion rules:
-
-```cpp
-bool foo(unsigned value, int upper_bound) {
-  // Converting to StrictNumeric allows this comparison to work correctly.
-  if (MakeStrictNum(value) >= upper_bound)
-    return false;
-```
-
-*** note
-**Warning:** Do not perform manual conversions using the comparison operators.
-Instead, use the cast templates described in the previous sections, or the
-constexpr template functions `IsValueInRangeForNumericType` and
-`IsTypeInRangeForNumericType`, as these templates properly handle the full range
-of corner cases and employ various optimizations.
-***
-
-### Calculating a buffer size (checked arithmetic)
-
-When making exact calculations—such as for buffer lengths—it's often necessary
-to know when those calculations trigger an overflow, undefined behavior, or
-other boundary conditions. The `CheckedNumeric` template does this by storing
-a bit determining whether or not some arithmetic operation has occured that
-would put the variable in an "invalid" state. Attempting to extract the value
-from a variable in an invalid state will trigger a check/trap condition, that
-by default will result in process termination.
-
-Here's an example of a buffer calculation using a `CheckedNumeric` type (note:
-the AssignIfValid method will trigger a compile error if the result is ignored).
-
-```cpp
-// Calculate the buffer size and detect if an overflow occurs.
-size_t size;
-if (!CheckAdd(kHeaderSize, CheckMul(count, kItemSize)).AssignIfValid(&size)) {
-  // Handle an overflow error...
-}
-```
-
-### Calculating clamped coordinates (non-sticky saturating arithmetic)
-
-Certain classes of calculations—such as coordinate calculations—require
-well-defined semantics that always produce a valid result on boundary
-conditions. The `ClampedNumeric` template addresses this by providing
-performant, non-sticky saturating arithmetic operations.
-
-Here's an example of using a `ClampedNumeric` to calculate an operation
-insetting a rectangle.
-
-```cpp
-// Use clamped arithmetic since inset calculations might overflow.
-void Rect::Inset(int left, int top, int right, int bottom) {
-  origin_ += Vector2d(left, top);
-  set_width(ClampSub(width(), ClampAdd(left, right)));
-  set_height(ClampSub(height(), ClampAdd(top, bottom)));
-}
-```
-
-*** note
-The `ClampedNumeric` type is not "sticky", which means the saturation is not
-retained across individual operations. As such, one arithmetic operation may
-result in a saturated value, while the next operation may then "desaturate"
-the value. Here's an example:
-
-```cpp
-ClampedNumeric<int> value = INT_MAX;
-++value;  // value is still INT_MAX, due to saturation.
---value;  // value is now (INT_MAX - 1), because saturation is not sticky.
-```
-
-***
-
-## Conversion functions and StrictNumeric<> in safe_conversions.h
-
-This header includes a collection of helper `constexpr` templates for safely
-performing a range of conversions, assignments, and tests.
-
-### Safe casting templates
-
-*   `as_signed()` - Returns the supplied integral value as a signed type of
-    the same width.
-*   `as_unsigned()` - Returns the supplied integral value as an unsigned type
-    of the same width.
-*   `checked_cast<>()` - Analogous to `static_cast<>` for numeric types, except
-    that by default it will trigger a crash on an out-of-bounds conversion (e.g.
-    overflow, underflow, NaN to integral) or a compile error if the conversion
-    error can be detected at compile time. The crash handler can be overridden
-    to perform a behavior other than crashing.
-*   `saturated_cast<>()` - Analogous to `static_cast` for numeric types, except
-    that it returns a saturated result when the specified numeric conversion
-    would otherwise overflow or underflow. An NaN source returns 0 by
-    default, but can be overridden to return a different result.
-*   `strict_cast<>()` - Analogous to `static_cast` for numeric types, except
-    this causes a compile failure if the destination type is not large
-    enough to contain any value in the source type. It performs no runtime
-    checking and thus introduces no runtime overhead.
-
-### Other helper and conversion functions
-
-*   `IsValueInRangeForNumericType<>()` - A convenience function that returns
-    true if the type supplied as the template parameter can represent the value
-    passed as an argument to the function.
-*   `IsTypeInRangeForNumericType<>()` - A convenience function that evaluates
-    entirely at compile-time and returns true if the destination type (first
-    template parameter) can represent the full range of the source type
-    (second template parameter).
-*   `IsValueNegative()` - A convenience function that will accept any
-    arithmetic type as an argument and will return whether the value is less
-    than zero. Unsigned types always return false.
-*   `SafeUnsignedAbs()` - Returns the absolute value of the supplied integer
-    parameter as an unsigned result (thus avoiding an overflow if the value
-    is the signed, two's complement minimum).
-
-### StrictNumeric<>
-
-`StrictNumeric<>` is a wrapper type that performs assignments and copies via
-the `strict_cast` template, and can perform valid arithmetic comparisons
-across any range of arithmetic types. `StrictNumeric` is the return type for
-values extracted from a `CheckedNumeric` class instance. The raw numeric value
-is extracted via `static_cast` to the underlying type or any type with
-sufficient range to represent the underlying type.
-
-*   `MakeStrictNum()` - Creates a new `StrictNumeric` from the underlying type
-    of the supplied arithmetic or StrictNumeric type.
-*   `SizeT` - Alias for `StrictNumeric<size_t>`.
-
-## CheckedNumeric<> in checked_math.h
-
-`CheckedNumeric<>` implements all the logic and operators for detecting integer
-boundary conditions such as overflow, underflow, and invalid conversions.
-The `CheckedNumeric` type implicitly converts from floating point and integer
-data types, and contains overloads for basic arithmetic operations (i.e.: `+`,
-`-`, `*`, `/` for all types and `%`, `<<`, `>>`, `&`, `|`, `^` for integers).
-However, *the [variadic template functions
-](#CheckedNumeric_in-checked_math_h-Non_member-helper-functions)
-are the prefered API,* as they remove type ambiguities and help prevent a number
-of common errors. The variadic functions can also be more performant, as they
-eliminate redundant expressions that are unavoidable with the with the operator
-overloads. (Ideally the compiler should optimize those away, but better to avoid
-them in the first place.)
-
-Type promotions are a slightly modified version of the [standard C/C++ numeric
-promotions
-](http://en.cppreference.com/w/cpp/language/implicit_conversion#Numeric_promotions)
-with the two differences being that *there is no default promotion to int*
-and *bitwise logical operations always return an unsigned of the wider type.*
-
-### Members
-
-The unary negation, increment, and decrement operators are supported, along
-with the following unary arithmetic methods, which return a new
-`CheckedNumeric` as a result of the operation:
-
-*   `Abs()` - Absolute value.
-*   `UnsignedAbs()` - Absolute value as an equal-width unsigned underlying type
-    (valid for only integral types).
-*   `Max()` - Returns whichever is greater of the current instance or argument.
-    The underlying return type is whichever has the greatest magnitude.
-*   `Min()` - Returns whichever is lowest of the current instance or argument.
-    The underlying return type is whichever has can represent the lowest
-    number in the smallest width (e.g. int8_t over unsigned, int over
-    int8_t, and float over int).
-
-The following are for converting `CheckedNumeric` instances:
-
-*   `type` - The underlying numeric type.
-*   `AssignIfValid()` - Assigns the underlying value to the supplied
-    destination pointer if the value is currently valid and within the
-    range supported by the destination type. Returns true on success.
-*   `Cast<>()` - Instance method returning a `CheckedNumeric` derived from
-    casting the current instance to a `CheckedNumeric` of the supplied
-    destination type.
-
-*** aside
-The following member functions return a `StrictNumeric`, which is valid for
-comparison and assignment operations, but will trigger a compile failure on
-attempts to assign to a type of insufficient range. The underlying value can
-be extracted by an explicit `static_cast` to the underlying type or any type
-with sufficient range to represent the underlying type.
-***
-
-*   `IsValid()` - Returns true if the underlying numeric value is valid (i.e.
-    has not wrapped or saturated and is not the result of an invalid
-    conversion).
-*   `ValueOrDie()` - Returns the underlying value. If the state is not valid
-    this call will trigger a crash by default (but may be overridden by
-    supplying an alternate handler to the template).
-*   `ValueOrDefault()` - Returns the current value, or the supplied default if
-    the state is not valid (but will not crash).
-
-**Comparison operators are explicitly not provided** for `CheckedNumeric`
-types because they could result in a crash if the type is not in a valid state.
-Patterns like the following should be used instead:
-
-```cpp
-// Either input or padding (or both) may be arbitrary sizes.
-size_t buff_size;
-if (!CheckAdd(input, padding, kHeaderLength).AssignIfValid(&buff_size) ||
-     buff_size >= kMaxBuffer) {
-  // Handle an error...
-} else {
-  // Do stuff on success...
-}
-```
-
-### Non-member helper functions
-
-The following variadic convenience functions, which accept standard arithmetic
-or `CheckedNumeric` types, perform arithmetic operations, and return a
-`CheckedNumeric` result. The supported functions are:
-
-*   `CheckAdd()` - Addition.
-*   `CheckSub()` - Subtraction.
-*   `CheckMul()` - Multiplication.
-*   `CheckDiv()` - Division.
-*   `CheckMod()` - Modulus (integer only).
-*   `CheckLsh()` - Left integer shift (integer only).
-*   `CheckRsh()` - Right integer shift (integer only).
-*   `CheckAnd()` - Bitwise AND (integer only with unsigned result).
-*   `CheckOr()`  - Bitwise OR (integer only with unsigned result).
-*   `CheckXor()` - Bitwise XOR (integer only with unsigned result).
-*   `CheckMax()` - Maximum of supplied arguments.
-*   `CheckMin()` - Minimum of supplied arguments.
-
-The following wrapper functions can be used to avoid the template
-disambiguator syntax when converting a destination type.
-
-*   `IsValidForType<>()` in place of: `a.template IsValid<>()`
-*   `ValueOrDieForType<>()` in place of: `a.template ValueOrDie<>()`
-*   `ValueOrDefaultForType<>()` in place of: `a.template ValueOrDefault<>()`
-
-The following general utility methods is are useful for converting from
-arithmetic types to `CheckedNumeric` types:
-
-*   `MakeCheckedNum()` - Creates a new `CheckedNumeric` from the underlying type
-    of the supplied arithmetic or directly convertible type.
-
-## ClampedNumeric<> in clamped_math.h
-
-`ClampedNumeric<>` implements all the logic and operators for clamped
-(non-sticky saturating) arithmetic operations and conversions. The
-`ClampedNumeric` type implicitly converts back and forth between floating point
-and integer data types, saturating on assignment as appropriate. It contains
-overloads for basic arithmetic operations (i.e.: `+`, `-`, `*`, `/` for
-all types and `%`, `<<`, `>>`, `&`, `|`, `^` for integers) along with comparison
-operators for arithmetic types of any size. However, *the [variadic template
-functions
-](#ClampedNumeric_in-clamped_math_h-Non_member-helper-functions)
-are the prefered API,* as they remove type ambiguities and help prevent
-a number of common errors. The variadic functions can also be more performant,
-as they eliminate redundant expressions that are unavoidable with the operator
-overloads. (Ideally the compiler should optimize those away, but better to avoid
-them in the first place.)
-
-Type promotions are a slightly modified version of the [standard C/C++ numeric
-promotions
-](http://en.cppreference.com/w/cpp/language/implicit_conversion#Numeric_promotions)
-with the two differences being that *there is no default promotion to int*
-and *bitwise logical operations always return an unsigned of the wider type.*
-
-*** aside
-Most arithmetic operations saturate normally, to the numeric limit in the
-direction of the sign. The potentially unusual cases are:
-
-*   **Division:** Division by zero returns the saturated limit in the direction
-    of sign of the dividend (first argument). The one exception is 0/0, which
-	returns zero (although logically is NaN).
-*   **Modulus:** Division by zero returns the dividend (first argument).
-*   **Left shift:** Non-zero values saturate in the direction of the signed
-    limit (max/min), even for shifts larger than the bit width. 0 shifted any
-    amount results in 0.
-*   **Right shift:** Negative values saturate to -1. Positive or 0 saturates
-    to 0. (Effectively just an unbounded arithmetic-right-shift.)
-*   **Bitwise operations:** No saturation; bit pattern is identical to
-    non-saturated bitwise operations.
-***
-
-### Members
-
-The unary negation, increment, and decrement operators are supported, along
-with the following unary arithmetic methods, which return a new
-`ClampedNumeric` as a result of the operation:
-
-*   `Abs()` - Absolute value.
-*   `UnsignedAbs()` - Absolute value as an equal-width unsigned underlying type
-    (valid for only integral types).
-*   `Max()` - Returns whichever is greater of the current instance or argument.
-    The underlying return type is whichever has the greatest magnitude.
-*   `Min()` - Returns whichever is lowest of the current instance or argument.
-    The underlying return type is whichever has can represent the lowest
-    number in the smallest width (e.g. int8_t over unsigned, int over
-    int8_t, and float over int).
-
-The following are for converting `ClampedNumeric` instances:
-
-*   `type` - The underlying numeric type.
-*   `RawValue()` - Returns the raw value as the underlying arithmetic type. This
-    is useful when e.g. assigning to an auto type or passing as a deduced
-    template parameter.
-*   `Cast<>()` - Instance method returning a `ClampedNumeric` derived from
-    casting the current instance to a `ClampedNumeric` of the supplied
-    destination type.
-
-### Non-member helper functions
-
-The following variadic convenience functions, which accept standard arithmetic
-or `ClampedNumeric` types, perform arithmetic operations, and return a
-`ClampedNumeric` result. The supported functions are:
-
-*   `ClampAdd()` - Addition.
-*   `ClampSub()` - Subtraction.
-*   `ClampMul()` - Multiplication.
-*   `ClampDiv()` - Division.
-*   `ClampMod()` - Modulus (integer only).
-*   `ClampLsh()` - Left integer shift (integer only).
-*   `ClampRsh()` - Right integer shift (integer only).
-*   `ClampAnd()` - Bitwise AND (integer only with unsigned result).
-*   `ClampOr()`  - Bitwise OR (integer only with unsigned result).
-*   `ClampXor()` - Bitwise XOR (integer only with unsigned result).
-*   `ClampMax()` - Maximum of supplied arguments.
-*   `ClampMin()` - Minimum of supplied arguments.
-
-The following is a general utility method that is useful for converting
-to a `ClampedNumeric` type:
-
-*   `MakeClampedNum()` - Creates a new `ClampedNumeric` from the underlying type
-    of the supplied arithmetic or directly convertible type.
diff --git a/base/observer_list.h b/base/observer_list.h
deleted file mode 100644
index e900e43..0000000
--- a/base/observer_list.h
+++ /dev/null
@@ -1,307 +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.
-
-#ifndef BASE_OBSERVER_LIST_H_
-#define BASE_OBSERVER_LIST_H_
-
-#include <stddef.h>
-
-#include <algorithm>
-#include <iterator>
-#include <limits>
-#include <utility>
-#include <vector>
-
-#include "base/gtest_prod_util.h"
-#include "base/logging.h"
-#include "base/macros.h"
-#include "base/memory/weak_ptr.h"
-#include "base/stl_util.h"
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// OVERVIEW:
-//
-//   A list of observers. Unlike a standard vector or list, this container can
-//   be modified during iteration without invalidating the iterator. So, it
-//   safely handles the case of an observer removing itself or other observers
-//   from the list while observers are being notified.
-//
-//
-// WARNING:
-//
-//   ObserverList is not thread-compatible. Iterating on the same ObserverList
-//   simultaneously in different threads is not safe, even when the ObserverList
-//   itself is not modified.
-//
-//   For a thread-safe observer list, see ObserverListThreadSafe.
-//
-//
-// TYPICAL USAGE:
-//
-//   class MyWidget {
-//    public:
-//     ...
-//
-//     class Observer {
-//      public:
-//       virtual void OnFoo(MyWidget* w) = 0;
-//       virtual void OnBar(MyWidget* w, int x, int y) = 0;
-//     };
-//
-//     void AddObserver(Observer* obs) {
-//       observers_.AddObserver(obs);
-//     }
-//
-//     void RemoveObserver(const Observer* obs) {
-//       observers_.RemoveObserver(obs);
-//     }
-//
-//     void NotifyFoo() {
-//       for (Observer& obs : observers_)
-//         obs.OnFoo(this);
-//     }
-//
-//     void NotifyBar(int x, int y) {
-//       for (Observer& obs : observers_)
-//         obs.OnBar(this, x, y);
-//     }
-//
-//    private:
-//     base::ObserverList<Observer> observers_;
-//   };
-//
-//
-///////////////////////////////////////////////////////////////////////////////
-
-namespace base {
-
-// Enumeration of which observers are notified by ObserverList.
-enum class ObserverListPolicy {
-  // Specifies that any observers added during notification are notified.
-  // This is the default policy if no policy is provided to the constructor.
-  ALL,
-
-  // Specifies that observers added while sending out notification are not
-  // notified.
-  EXISTING_ONLY,
-};
-
-// When check_empty is true, assert that the list is empty on destruction.
-// When allow_reentrancy is false, iterating throught the list while already in
-// the iteration loop will result in DCHECK failure.
-// TODO(oshima): Change the default to non reentrant. https://crbug.com/812109
-template <class ObserverType,
-          bool check_empty = false,
-          bool allow_reentrancy = true>
-class ObserverList
-    : public SupportsWeakPtr<
-          ObserverList<ObserverType, check_empty, allow_reentrancy>> {
- public:
-  // An iterator class that can be used to access the list of observers.
-  class Iter {
-   public:
-    using iterator_category = std::forward_iterator_tag;
-    using value_type = ObserverType;
-    using difference_type = ptrdiff_t;
-    using pointer = ObserverType*;
-    using reference = ObserverType&;
-
-    Iter() : index_(0), max_index_(0) {}
-
-    explicit Iter(const ObserverList* list)
-        : list_(const_cast<ObserverList*>(list)->AsWeakPtr()),
-          index_(0),
-          max_index_(list->policy_ == ObserverListPolicy::ALL
-                         ? std::numeric_limits<size_t>::max()
-                         : list->observers_.size()) {
-      DCHECK(list_);
-      DCHECK(allow_reentrancy || !list_->live_iterator_count_);
-      EnsureValidIndex();
-      ++list_->live_iterator_count_;
-    }
-
-    ~Iter() {
-      if (!list_)
-        return;
-
-      DCHECK_GT(list_->live_iterator_count_, 0);
-      if (--list_->live_iterator_count_ == 0)
-        list_->Compact();
-    }
-
-    Iter(const Iter& other)
-        : list_(other.list_),
-          index_(other.index_),
-          max_index_(other.max_index_) {
-      if (list_)
-        ++list_->live_iterator_count_;
-    }
-
-    Iter& operator=(Iter other) {
-      using std::swap;
-      swap(list_, other.list_);
-      swap(index_, other.index_);
-      swap(max_index_, other.max_index_);
-      return *this;
-    }
-
-    bool operator==(const Iter& other) const {
-      return (is_end() && other.is_end()) ||
-             (list_.get() == other.list_.get() && index_ == other.index_);
-    }
-
-    bool operator!=(const Iter& other) const { return !(*this == other); }
-
-    Iter& operator++() {
-      if (list_) {
-        ++index_;
-        EnsureValidIndex();
-      }
-      return *this;
-    }
-
-    Iter operator++(int) {
-      Iter it(*this);
-      ++(*this);
-      return it;
-    }
-
-    ObserverType* operator->() const {
-      ObserverType* const current = GetCurrent();
-      DCHECK(current);
-      return current;
-    }
-
-    ObserverType& operator*() const {
-      ObserverType* const current = GetCurrent();
-      DCHECK(current);
-      return *current;
-    }
-
-   private:
-    FRIEND_TEST_ALL_PREFIXES(ObserverListTest, BasicStdIterator);
-    FRIEND_TEST_ALL_PREFIXES(ObserverListTest, StdIteratorRemoveFront);
-
-    ObserverType* GetCurrent() const {
-      DCHECK(list_);
-      DCHECK_LT(index_, clamped_max_index());
-      return list_->observers_[index_];
-    }
-
-    void EnsureValidIndex() {
-      DCHECK(list_);
-      const size_t max_index = clamped_max_index();
-      while (index_ < max_index && !list_->observers_[index_])
-        ++index_;
-    }
-
-    size_t clamped_max_index() const {
-      return std::min(max_index_, list_->observers_.size());
-    }
-
-    bool is_end() const { return !list_ || index_ == clamped_max_index(); }
-
-    WeakPtr<ObserverList> list_;
-
-    // When initially constructed and each time the iterator is incremented,
-    // |index_| is guaranteed to point to a non-null index if the iterator
-    // has not reached the end of the ObserverList.
-    size_t index_;
-    size_t max_index_;
-  };
-
-  using iterator = Iter;
-  using const_iterator = Iter;
-
-  const_iterator begin() const {
-    // An optimization: do not involve weak pointers for empty list.
-    return observers_.empty() ? const_iterator() : const_iterator(this);
-  }
-
-  const_iterator end() const { return const_iterator(); }
-
-  ObserverList() = default;
-  explicit ObserverList(ObserverListPolicy policy) : policy_(policy) {}
-
-  ~ObserverList() {
-    if (check_empty) {
-      Compact();
-      DCHECK(observers_.empty());
-    }
-  }
-
-  // Add an observer to this list. An observer should not be added to the same
-  // list more than once.
-  //
-  // Precondition: obs != nullptr
-  // Precondition: !HasObserver(obs)
-  void AddObserver(ObserverType* obs) {
-    DCHECK(obs);
-    if (HasObserver(obs)) {
-      NOTREACHED() << "Observers can only be added once!";
-      return;
-    }
-    observers_.push_back(obs);
-  }
-
-  // Removes the given observer from this list. Does nothing if this observer is
-  // not in this list.
-  void RemoveObserver(const ObserverType* obs) {
-    DCHECK(obs);
-    const auto it = std::find(observers_.begin(), observers_.end(), obs);
-    if (it == observers_.end())
-      return;
-
-    DCHECK_GE(live_iterator_count_, 0);
-    if (live_iterator_count_) {
-      *it = nullptr;
-    } else {
-      observers_.erase(it);
-    }
-  }
-
-  // Determine whether a particular observer is in the list.
-  bool HasObserver(const ObserverType* obs) const {
-    return ContainsValue(observers_, obs);
-  }
-
-  // Removes all the observers from this list.
-  void Clear() {
-    DCHECK_GE(live_iterator_count_, 0);
-    if (live_iterator_count_) {
-      std::fill(observers_.begin(), observers_.end(), nullptr);
-    } else {
-      observers_.clear();
-    }
-  }
-
-  bool might_have_observers() const { return !observers_.empty(); }
-
- private:
-  // Compacts list of observers by removing null pointers.
-  void Compact() {
-    observers_.erase(std::remove(observers_.begin(), observers_.end(), nullptr),
-                     observers_.end());
-  }
-
-  std::vector<ObserverType*> observers_;
-
-  // Number of active iterators referencing this ObserverList.
-  //
-  // This counter is not synchronized although it is modified by const
-  // iterators.
-  int live_iterator_count_ = 0;
-
-  const ObserverListPolicy policy_ = ObserverListPolicy::ALL;
-
-  DISALLOW_COPY_AND_ASSIGN(ObserverList);
-};
-
-template <class ObserverType, bool check_empty = false>
-using ReentrantObserverList = ObserverList<ObserverType, check_empty, true>;
-
-}  // namespace base
-
-#endif  // BASE_OBSERVER_LIST_H_
diff --git a/base/observer_list_threadsafe.h b/base/observer_list_threadsafe.h
deleted file mode 100644
index 05b5a56..0000000
--- a/base/observer_list_threadsafe.h
+++ /dev/null
@@ -1,237 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef BASE_OBSERVER_LIST_THREADSAFE_H_
-#define BASE_OBSERVER_LIST_THREADSAFE_H_
-
-#include <unordered_map>
-
-#include "base/base_export.h"
-#include "base/bind.h"
-#include "base/lazy_instance.h"
-#include "base/location.h"
-#include "base/logging.h"
-#include "base/macros.h"
-#include "base/memory/ref_counted.h"
-#include "base/observer_list.h"
-#include "base/sequenced_task_runner.h"
-#include "base/stl_util.h"
-#include "base/synchronization/lock.h"
-#include "base/threading/sequenced_task_runner_handle.h"
-#include "base/threading/thread_local.h"
-#include "build_config.h"
-
-// TODO(fdoray): Removing these includes causes IWYU failures in other headers,
-// remove them in a follow- up CL.
-#include "base/memory/ptr_util.h"
-#include "base/single_thread_task_runner.h"
-#include "base/threading/thread_task_runner_handle.h"
-
-///////////////////////////////////////////////////////////////////////////////
-//
-// OVERVIEW:
-//
-//   A thread-safe container for a list of observers. This is similar to the
-//   observer_list (see observer_list.h), but it is more robust for multi-
-//   threaded situations.
-//
-//   The following use cases are supported:
-//    * Observers can register for notifications from any sequence. They are
-//      always notified on the sequence from which they were registered.
-//    * Any sequence may trigger a notification via Notify().
-//    * Observers can remove themselves from the observer list inside of a
-//      callback.
-//    * If one sequence is notifying observers concurrently with an observer
-//      removing itself from the observer list, the notifications will be
-//      silently dropped.
-//
-//   The drawback of the threadsafe observer list is that notifications are not
-//   as real-time as the non-threadsafe version of this class. Notifications
-//   will always be done via PostTask() to another sequence, whereas with the
-//   non-thread-safe observer_list, notifications happen synchronously.
-//
-///////////////////////////////////////////////////////////////////////////////
-
-namespace base {
-namespace internal {
-
-class BASE_EXPORT ObserverListThreadSafeBase
-    : public RefCountedThreadSafe<ObserverListThreadSafeBase> {
- public:
-  ObserverListThreadSafeBase() = default;
-
- protected:
-  template <typename ObserverType, typename Method>
-  struct Dispatcher;
-
-  template <typename ObserverType, typename ReceiverType, typename... Params>
-  struct Dispatcher<ObserverType, void (ReceiverType::*)(Params...)> {
-    static void Run(void (ReceiverType::*m)(Params...),
-                    Params... params,
-                    ObserverType* obj) {
-      (obj->*m)(std::forward<Params>(params)...);
-    }
-  };
-
-  struct NotificationDataBase {
-    NotificationDataBase(void* observer_list_in, const Location& from_here_in)
-        : observer_list(observer_list_in), from_here(from_here_in) {}
-
-    void* observer_list;
-    Location from_here;
-  };
-
-  virtual ~ObserverListThreadSafeBase() = default;
-
-  static LazyInstance<ThreadLocalPointer<const NotificationDataBase>>::Leaky
-      tls_current_notification_;
-
- private:
-  friend class RefCountedThreadSafe<ObserverListThreadSafeBase>;
-
-  DISALLOW_COPY_AND_ASSIGN(ObserverListThreadSafeBase);
-};
-
-}  // namespace internal
-
-template <class ObserverType>
-class ObserverListThreadSafe : public internal::ObserverListThreadSafeBase {
- public:
-  ObserverListThreadSafe() = default;
-  explicit ObserverListThreadSafe(ObserverListPolicy policy)
-      : policy_(policy) {}
-
-  // Adds |observer| to the list. |observer| must not already be in the list.
-  void AddObserver(ObserverType* observer) {
-    // TODO(fdoray): Change this to a DCHECK once all call sites have a
-    // SequencedTaskRunnerHandle.
-    if (!SequencedTaskRunnerHandle::IsSet())
-      return;
-
-    AutoLock auto_lock(lock_);
-
-    // Add |observer| to the list of observers.
-    DCHECK(!ContainsKey(observers_, observer));
-    const scoped_refptr<SequencedTaskRunner> task_runner =
-        SequencedTaskRunnerHandle::Get();
-    observers_[observer] = task_runner;
-
-    // If this is called while a notification is being dispatched on this thread
-    // and |policy_| is ALL, |observer| must be notified (if a notification is
-    // being dispatched on another thread in parallel, the notification may or
-    // may not make it to |observer| depending on the outcome of the race to
-    // |lock_|).
-    if (policy_ == ObserverListPolicy::ALL) {
-      const NotificationDataBase* current_notification =
-          tls_current_notification_.Get().Get();
-      if (current_notification && current_notification->observer_list == this) {
-        task_runner->PostTask(
-            current_notification->from_here,
-            BindOnce(
-                &ObserverListThreadSafe<ObserverType>::NotifyWrapper, this,
-                observer,
-                *static_cast<const NotificationData*>(current_notification)));
-      }
-    }
-  }
-
-  // Remove an observer from the list if it is in the list.
-  //
-  // If a notification was sent to the observer but hasn't started to run yet,
-  // it will be aborted. If a notification has started to run, removing the
-  // observer won't stop it.
-  void RemoveObserver(ObserverType* observer) {
-    AutoLock auto_lock(lock_);
-    observers_.erase(observer);
-  }
-
-  // Verifies that the list is currently empty (i.e. there are no observers).
-  void AssertEmpty() const {
-#if DCHECK_IS_ON()
-    AutoLock auto_lock(lock_);
-    DCHECK(observers_.empty());
-#endif
-  }
-
-  // Asynchronously invokes a callback on all observers, on their registration
-  // sequence. You cannot assume that at the completion of the Notify call that
-  // all Observers have been Notified. The notification may still be pending
-  // delivery.
-  template <typename Method, typename... Params>
-  void Notify(const Location& from_here, Method m, Params&&... params) {
-    Callback<void(ObserverType*)> method =
-        Bind(&Dispatcher<ObserverType, Method>::Run, m,
-             std::forward<Params>(params)...);
-
-    AutoLock lock(lock_);
-    for (const auto& observer : observers_) {
-      observer.second->PostTask(
-          from_here,
-          BindOnce(&ObserverListThreadSafe<ObserverType>::NotifyWrapper, this,
-                   observer.first, NotificationData(this, from_here, method)));
-    }
-  }
-
- private:
-  friend class RefCountedThreadSafe<ObserverListThreadSafeBase>;
-
-  struct NotificationData : public NotificationDataBase {
-    NotificationData(ObserverListThreadSafe* observer_list_in,
-                     const Location& from_here_in,
-                     const Callback<void(ObserverType*)>& method_in)
-        : NotificationDataBase(observer_list_in, from_here_in),
-          method(method_in) {}
-
-    Callback<void(ObserverType*)> method;
-  };
-
-  ~ObserverListThreadSafe() override = default;
-
-  void NotifyWrapper(ObserverType* observer,
-                     const NotificationData& notification) {
-    {
-      AutoLock auto_lock(lock_);
-
-      // Check whether the observer still needs a notification.
-      auto it = observers_.find(observer);
-      if (it == observers_.end())
-        return;
-      DCHECK(it->second->RunsTasksInCurrentSequence());
-    }
-
-    // Keep track of the notification being dispatched on the current thread.
-    // This will be used if the callback below calls AddObserver().
-    //
-    // Note: |tls_current_notification_| may not be nullptr if this runs in a
-    // nested loop started by a notification callback. In that case, it is
-    // important to save the previous value to restore it later.
-    auto& tls_current_notification = tls_current_notification_.Get();
-    const NotificationDataBase* const previous_notification =
-        tls_current_notification.Get();
-    tls_current_notification.Set(&notification);
-
-    // Invoke the callback.
-    notification.method.Run(observer);
-
-    // Reset the notification being dispatched on the current thread to its
-    // previous value.
-    tls_current_notification.Set(previous_notification);
-  }
-
-  const ObserverListPolicy policy_ = ObserverListPolicy::ALL;
-
-  // Synchronizes access to |observers_|.
-  mutable Lock lock_;
-
-  // Keys are observers. Values are the SequencedTaskRunners on which they must
-  // be notified.
-  std::unordered_map<ObserverType*, scoped_refptr<SequencedTaskRunner>>
-      observers_;
-
-  DISALLOW_COPY_AND_ASSIGN(ObserverListThreadSafe);
-};
-
-}  // namespace base
-
-#endif  // BASE_OBSERVER_LIST_THREADSAFE_H_
diff --git a/base/posix/unix_domain_socket.cc b/base/posix/unix_domain_socket.cc
deleted file mode 100644
index 17c8a24..0000000
--- a/base/posix/unix_domain_socket.cc
+++ /dev/null
@@ -1,288 +0,0 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "base/posix/unix_domain_socket.h"
-
-#include <errno.h>
-#include <sys/socket.h>
-#if !defined(OS_NACL_NONSFI)
-#include <sys/un.h>
-#endif
-#include <unistd.h>
-
-#include <vector>
-
-#include "base/files/scoped_file.h"
-#include "base/logging.h"
-#include "base/pickle.h"
-#include "base/posix/eintr_wrapper.h"
-#include "base/stl_util.h"
-#include "build_config.h"
-
-#if !defined(OS_NACL_NONSFI)
-#include <sys/uio.h>
-#endif
-
-namespace base {
-
-const size_t UnixDomainSocket::kMaxFileDescriptors = 16;
-
-#if !defined(OS_NACL_NONSFI)
-bool CreateSocketPair(ScopedFD* one, ScopedFD* two) {
-  int raw_socks[2];
-#if defined(OS_MACOSX)
-  // macOS does not support SEQPACKET.
-  const int flags = SOCK_STREAM;
-#else
-  const int flags = SOCK_SEQPACKET;
-#endif
-  if (socketpair(AF_UNIX, flags, 0, raw_socks) == -1)
-    return false;
-#if defined(OS_MACOSX)
-  // On macOS, preventing SIGPIPE is done with socket option.
-  const int no_sigpipe = 1;
-  if (setsockopt(raw_socks[0], SOL_SOCKET, SO_NOSIGPIPE, &no_sigpipe,
-                 sizeof(no_sigpipe)) != 0)
-    return false;
-  if (setsockopt(raw_socks[1], SOL_SOCKET, SO_NOSIGPIPE, &no_sigpipe,
-                 sizeof(no_sigpipe)) != 0)
-    return false;
-#endif
-  one->reset(raw_socks[0]);
-  two->reset(raw_socks[1]);
-  return true;
-}
-
-// static
-bool UnixDomainSocket::EnableReceiveProcessId(int fd) {
-#if !defined(OS_MACOSX)
-  const int enable = 1;
-  return setsockopt(fd, SOL_SOCKET, SO_PASSCRED, &enable, sizeof(enable)) == 0;
-#else
-  // SO_PASSCRED is not supported on macOS.
-  return true;
-#endif  // OS_MACOSX
-}
-#endif  // !defined(OS_NACL_NONSFI)
-
-// static
-bool UnixDomainSocket::SendMsg(int fd,
-                               const void* buf,
-                               size_t length,
-                               const std::vector<int>& fds) {
-  struct msghdr msg = {};
-  struct iovec iov = {const_cast<void*>(buf), length};
-  msg.msg_iov = &iov;
-  msg.msg_iovlen = 1;
-
-  char* control_buffer = nullptr;
-  if (fds.size()) {
-    const unsigned control_len = CMSG_SPACE(sizeof(int) * fds.size());
-    control_buffer = new char[control_len];
-
-    struct cmsghdr* cmsg;
-    msg.msg_control = control_buffer;
-    msg.msg_controllen = control_len;
-    cmsg = CMSG_FIRSTHDR(&msg);
-    cmsg->cmsg_level = SOL_SOCKET;
-    cmsg->cmsg_type = SCM_RIGHTS;
-    cmsg->cmsg_len = CMSG_LEN(sizeof(int) * fds.size());
-    memcpy(CMSG_DATA(cmsg), &fds[0], sizeof(int) * fds.size());
-    msg.msg_controllen = cmsg->cmsg_len;
-  }
-
-// Avoid a SIGPIPE if the other end breaks the connection.
-// Due to a bug in the Linux kernel (net/unix/af_unix.c) MSG_NOSIGNAL isn't
-// regarded for SOCK_SEQPACKET in the AF_UNIX domain, but it is mandated by
-// POSIX. On Mac MSG_NOSIGNAL is not supported, so we need to ensure that
-// SO_NOSIGPIPE is set during socket creation.
-#if defined(OS_MACOSX)
-  const int flags = 0;
-  int no_sigpipe = 0;
-  socklen_t no_sigpipe_len = sizeof(no_sigpipe);
-  DPCHECK(getsockopt(fd, SOL_SOCKET, SO_NOSIGPIPE, &no_sigpipe,
-                     &no_sigpipe_len) == 0)
-      << "Failed ot get socket option.";
-  DCHECK(no_sigpipe) << "SO_NOSIGPIPE not set on the socket.";
-#else
-  const int flags = MSG_NOSIGNAL;
-#endif  // OS_MACOSX
-  const ssize_t r = HANDLE_EINTR(sendmsg(fd, &msg, flags));
-  const bool ret = static_cast<ssize_t>(length) == r;
-  delete[] control_buffer;
-  return ret;
-}
-
-// static
-ssize_t UnixDomainSocket::RecvMsg(int fd,
-                                  void* buf,
-                                  size_t length,
-                                  std::vector<ScopedFD>* fds) {
-  return UnixDomainSocket::RecvMsgWithPid(fd, buf, length, fds, nullptr);
-}
-
-// static
-ssize_t UnixDomainSocket::RecvMsgWithPid(int fd,
-                                         void* buf,
-                                         size_t length,
-                                         std::vector<ScopedFD>* fds,
-                                         ProcessId* pid) {
-  return UnixDomainSocket::RecvMsgWithFlags(fd, buf, length, 0, fds, pid);
-}
-
-// static
-ssize_t UnixDomainSocket::RecvMsgWithFlags(int fd,
-                                           void* buf,
-                                           size_t length,
-                                           int flags,
-                                           std::vector<ScopedFD>* fds,
-                                           ProcessId* out_pid) {
-  fds->clear();
-
-  struct msghdr msg = {};
-  struct iovec iov = {buf, length};
-  msg.msg_iov = &iov;
-  msg.msg_iovlen = 1;
-
-  const size_t kControlBufferSize =
-      CMSG_SPACE(sizeof(int) * kMaxFileDescriptors)
-#if !defined(OS_NACL_NONSFI) && !defined(OS_MACOSX)
-      // The PNaCl toolchain for Non-SFI binary build and macOS do not support
-      // ucred. macOS supports xucred, but this structure is insufficient.
-      + CMSG_SPACE(sizeof(struct ucred))
-#endif  // OS_NACL_NONSFI or OS_MACOSX
-      ;
-  char control_buffer[kControlBufferSize];
-  msg.msg_control = control_buffer;
-  msg.msg_controllen = sizeof(control_buffer);
-
-  const ssize_t r = HANDLE_EINTR(recvmsg(fd, &msg, flags));
-  if (r == -1)
-    return -1;
-
-  int* wire_fds = nullptr;
-  unsigned wire_fds_len = 0;
-  ProcessId pid = -1;
-
-  if (msg.msg_controllen > 0) {
-    struct cmsghdr* cmsg;
-    for (cmsg = CMSG_FIRSTHDR(&msg); cmsg; cmsg = CMSG_NXTHDR(&msg, cmsg)) {
-      const unsigned payload_len = cmsg->cmsg_len - CMSG_LEN(0);
-      if (cmsg->cmsg_level == SOL_SOCKET && cmsg->cmsg_type == SCM_RIGHTS) {
-        DCHECK_EQ(payload_len % sizeof(int), 0u);
-        DCHECK_EQ(wire_fds, static_cast<void*>(nullptr));
-        wire_fds = reinterpret_cast<int*>(CMSG_DATA(cmsg));
-        wire_fds_len = payload_len / sizeof(int);
-      }
-#if !defined(OS_NACL_NONSFI) && !defined(OS_MACOSX)
-      // The PNaCl toolchain for Non-SFI binary build and macOS do not support
-      // SCM_CREDENTIALS.
-      if (cmsg->cmsg_level == SOL_SOCKET &&
-          cmsg->cmsg_type == SCM_CREDENTIALS) {
-        DCHECK_EQ(payload_len, sizeof(struct ucred));
-        DCHECK_EQ(pid, -1);
-        pid = reinterpret_cast<struct ucred*>(CMSG_DATA(cmsg))->pid;
-      }
-#endif  // !defined(OS_NACL_NONSFI) && !defined(OS_MACOSX)
-    }
-  }
-
-  if (msg.msg_flags & MSG_TRUNC || msg.msg_flags & MSG_CTRUNC) {
-    if (msg.msg_flags & MSG_CTRUNC) {
-      // Extraordinary case, not caller fixable. Log something.
-      LOG(ERROR) << "recvmsg returned MSG_CTRUNC flag, buffer len is "
-                 << msg.msg_controllen;
-    }
-    for (unsigned i = 0; i < wire_fds_len; ++i)
-      close(wire_fds[i]);
-    errno = EMSGSIZE;
-    return -1;
-  }
-
-  if (wire_fds) {
-    for (unsigned i = 0; i < wire_fds_len; ++i)
-      fds->push_back(ScopedFD(wire_fds[i]));  // TODO(mdempsky): emplace_back
-  }
-
-  if (out_pid) {
-#if defined(OS_MACOSX)
-    socklen_t pid_size = sizeof(pid);
-    if (getsockopt(fd, SOL_LOCAL, LOCAL_PEERPID, &pid, &pid_size) != 0)
-      pid = -1;
-#else
-    // |pid| will legitimately be -1 if we read EOF, so only DCHECK if we
-    // actually received a message.  Unfortunately, Linux allows sending zero
-    // length messages, which are indistinguishable from EOF, so this check
-    // has false negatives.
-    if (r > 0 || msg.msg_controllen > 0)
-      DCHECK_GE(pid, 0);
-#endif
-
-    *out_pid = pid;
-  }
-
-  return r;
-}
-
-#if !defined(OS_NACL_NONSFI)
-// static
-ssize_t UnixDomainSocket::SendRecvMsg(int fd,
-                                      uint8_t* reply,
-                                      unsigned max_reply_len,
-                                      int* result_fd,
-                                      const Pickle& request) {
-  return UnixDomainSocket::SendRecvMsgWithFlags(fd, reply, max_reply_len,
-                                                0, /* recvmsg_flags */
-                                                result_fd, request);
-}
-
-// static
-ssize_t UnixDomainSocket::SendRecvMsgWithFlags(int fd,
-                                               uint8_t* reply,
-                                               unsigned max_reply_len,
-                                               int recvmsg_flags,
-                                               int* result_fd,
-                                               const Pickle& request) {
-  // This socketpair is only used for the IPC and is cleaned up before
-  // returning.
-  ScopedFD recv_sock, send_sock;
-  if (!CreateSocketPair(&recv_sock, &send_sock))
-    return -1;
-
-  {
-    std::vector<int> send_fds;
-    send_fds.push_back(send_sock.get());
-    if (!SendMsg(fd, request.data(), request.size(), send_fds))
-      return -1;
-  }
-
-  // Close the sending end of the socket right away so that if our peer closes
-  // it before sending a response (e.g., from exiting), RecvMsgWithFlags() will
-  // return EOF instead of hanging.
-  send_sock.reset();
-
-  std::vector<ScopedFD> recv_fds;
-  // When porting to OSX keep in mind it doesn't support MSG_NOSIGNAL, so the
-  // sender might get a SIGPIPE.
-  const ssize_t reply_len = RecvMsgWithFlags(
-      recv_sock.get(), reply, max_reply_len, recvmsg_flags, &recv_fds, nullptr);
-  recv_sock.reset();
-  if (reply_len == -1)
-    return -1;
-
-  // If we received more file descriptors than caller expected, then we treat
-  // that as an error.
-  if (recv_fds.size() > (result_fd != nullptr ? 1 : 0)) {
-    NOTREACHED();
-    return -1;
-  }
-
-  if (result_fd)
-    *result_fd = recv_fds.empty() ? -1 : recv_fds[0].release();
-
-  return reply_len;
-}
-#endif  // !defined(OS_NACL_NONSFI)
-
-}  // namespace base
diff --git a/base/posix/unix_domain_socket.h b/base/posix/unix_domain_socket.h
deleted file mode 100644
index 0bbd064..0000000
--- a/base/posix/unix_domain_socket.h
+++ /dev/null
@@ -1,111 +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.
-
-#ifndef BASE_POSIX_UNIX_DOMAIN_SOCKET_H_
-#define BASE_POSIX_UNIX_DOMAIN_SOCKET_H_
-
-#include <stddef.h>
-#include <stdint.h>
-#include <sys/types.h>
-#include <vector>
-
-#include "base/base_export.h"
-#include "base/files/scoped_file.h"
-#include "base/process/process_handle.h"
-#include "build_config.h"
-
-namespace base {
-
-class Pickle;
-
-#if !defined(OS_NACL_NONSFI)
-// Creates a connected pair of UNIX-domain SOCK_SEQPACKET sockets, and passes
-// ownership of the newly allocated file descriptors to |one| and |two|.
-// Returns true on success.
-bool BASE_EXPORT CreateSocketPair(ScopedFD* one, ScopedFD* two);
-#endif
-
-class BASE_EXPORT UnixDomainSocket {
- public:
-  // Maximum number of file descriptors that can be read by RecvMsg().
-  static const size_t kMaxFileDescriptors;
-
-#if !defined(OS_NACL_NONSFI)
-  // Use to enable receiving process IDs in RecvMsgWithPid.  Should be called on
-  // the receiving socket (i.e., the socket passed to RecvMsgWithPid). Returns
-  // true if successful.
-  static bool EnableReceiveProcessId(int fd);
-#endif  // !defined(OS_NACL_NONSFI)
-
-  // Use sendmsg to write the given msg and include a vector of file
-  // descriptors. Returns true if successful.
-  static bool SendMsg(int fd,
-                      const void* msg,
-                      size_t length,
-                      const std::vector<int>& fds);
-
-  // Use recvmsg to read a message and an array of file descriptors. Returns
-  // -1 on failure. Note: will read, at most, |kMaxFileDescriptors| descriptors.
-  static ssize_t RecvMsg(int fd,
-                         void* msg,
-                         size_t length,
-                         std::vector<ScopedFD>* fds);
-
-  // Same as RecvMsg above, but also returns the sender's process ID (as seen
-  // from the caller's namespace).  However, before using this function to
-  // receive process IDs, EnableReceiveProcessId() should be called on the
-  // receiving socket.
-  static ssize_t RecvMsgWithPid(int fd,
-                                void* msg,
-                                size_t length,
-                                std::vector<ScopedFD>* fds,
-                                ProcessId* pid);
-
-#if !defined(OS_NACL_NONSFI)
-  // Perform a sendmsg/recvmsg pair.
-  //   1. This process creates a UNIX SEQPACKET socketpair. Using
-  //      connection-oriented sockets (SEQPACKET or STREAM) is critical here,
-  //      because if one of the ends closes the other one must be notified.
-  //   2. This process writes a request to |fd| with an SCM_RIGHTS control
-  //      message containing on end of the fresh socket pair.
-  //   3. This process blocks reading from the other end of the fresh
-  //      socketpair.
-  //   4. The target process receives the request, processes it and writes the
-  //      reply to the end of the socketpair contained in the request.
-  //   5. This process wakes up and continues.
-  //
-  //   fd: descriptor to send the request on
-  //   reply: buffer for the reply
-  //   reply_len: size of |reply|
-  //   result_fd: (may be NULL) the file descriptor returned in the reply
-  //              (if any)
-  //   request: the bytes to send in the request
-  static ssize_t SendRecvMsg(int fd,
-                             uint8_t* reply,
-                             unsigned reply_len,
-                             int* result_fd,
-                             const Pickle& request);
-
-  // Similar to SendRecvMsg(), but |recvmsg_flags| allows to control the flags
-  // of the recvmsg(2) call.
-  static ssize_t SendRecvMsgWithFlags(int fd,
-                                      uint8_t* reply,
-                                      unsigned reply_len,
-                                      int recvmsg_flags,
-                                      int* result_fd,
-                                      const Pickle& request);
-#endif  // !defined(OS_NACL_NONSFI)
- private:
-  // Similar to RecvMsg, but allows to specify |flags| for recvmsg(2).
-  static ssize_t RecvMsgWithFlags(int fd,
-                                  void* msg,
-                                  size_t length,
-                                  int flags,
-                                  std::vector<ScopedFD>* fds,
-                                  ProcessId* pid);
-};
-
-}  // namespace base
-
-#endif  // BASE_POSIX_UNIX_DOMAIN_SOCKET_H_
diff --git a/base/post_task_and_reply_with_result_internal.h b/base/post_task_and_reply_with_result_internal.h
deleted file mode 100644
index 6f50de8..0000000
--- a/base/post_task_and_reply_with_result_internal.h
+++ /dev/null
@@ -1,34 +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.
-
-#ifndef BASE_POST_TASK_AND_REPLY_WITH_RESULT_INTERNAL_H_
-#define BASE_POST_TASK_AND_REPLY_WITH_RESULT_INTERNAL_H_
-
-#include <utility>
-
-#include "base/callback.h"
-
-namespace base {
-
-namespace internal {
-
-// Adapts a function that produces a result via a return value to
-// one that returns via an output parameter.
-template <typename ReturnType>
-void ReturnAsParamAdapter(OnceCallback<ReturnType()> func, ReturnType* result) {
-  *result = std::move(func).Run();
-}
-
-// Adapts a T* result to a callblack that expects a T.
-template <typename TaskReturnType, typename ReplyArgType>
-void ReplyAdapter(OnceCallback<void(ReplyArgType)> callback,
-                  TaskReturnType* result) {
-  std::move(callback).Run(std::move(*result));
-}
-
-}  // namespace internal
-
-}  // namespace base
-
-#endif  // BASE_POST_TASK_AND_REPLY_WITH_RESULT_INTERNAL_H_
diff --git a/base/process/port_provider_mac.cc b/base/process/port_provider_mac.cc
deleted file mode 100644
index 23d214c..0000000
--- a/base/process/port_provider_mac.cc
+++ /dev/null
@@ -1,28 +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/process/port_provider_mac.h"
-
-namespace base {
-
-PortProvider::PortProvider() : lock_(), observer_list_() {}
-PortProvider::~PortProvider() {}
-
-void PortProvider::AddObserver(Observer* observer) {
-  base::AutoLock l(lock_);
-  observer_list_.AddObserver(observer);
-}
-
-void PortProvider::RemoveObserver(Observer* observer) {
-  base::AutoLock l(lock_);
-  observer_list_.RemoveObserver(observer);
-}
-
-void PortProvider::NotifyObservers(ProcessHandle process) {
-  base::AutoLock l(lock_);
-  for (auto& observer : observer_list_)
-    observer.OnReceivedTaskPort(process);
-}
-
-}  // namespace base
diff --git a/base/process/port_provider_mac.h b/base/process/port_provider_mac.h
deleted file mode 100644
index 2f40297..0000000
--- a/base/process/port_provider_mac.h
+++ /dev/null
@@ -1,61 +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.
-
-#ifndef BASE_PROCESS_PORT_PROVIDER_MAC_H_
-#define BASE_PROCESS_PORT_PROVIDER_MAC_H_
-
-#include <mach/mach.h>
-
-#include "base/base_export.h"
-#include "base/macros.h"
-#include "base/observer_list.h"
-#include "base/process/process_handle.h"
-#include "base/synchronization/lock.h"
-
-namespace base {
-
-// Abstract base class that provides a mapping from ProcessHandle (pid_t) to the
-// Mach task port. This replicates task_for_pid(), which requires root
-// privileges.
-class BASE_EXPORT PortProvider {
- public:
-  PortProvider();
-  virtual ~PortProvider();
-
-  class Observer {
-   public:
-    virtual ~Observer() {};
-    // Called by the PortProvider to notify observers that the task port was
-    // received for a given process.
-    // No guarantees are made about the thread on which this notification will
-    // be sent.
-    // Observers must not call AddObserver() or RemoveObserver() in this
-    // callback, as doing so will deadlock.
-    virtual void OnReceivedTaskPort(ProcessHandle process) = 0;
-  };
-
-  // Returns the mach task port for |process| if possible, or else
-  // |MACH_PORT_NULL|.
-  virtual mach_port_t TaskForPid(ProcessHandle process) const = 0;
-
-  // Observer interface.
-  void AddObserver(Observer* observer);
-  void RemoveObserver(Observer* observer);
-
- protected:
-  // Called by subclasses to send a notification to observers.
-  void NotifyObservers(ProcessHandle process);
-
- private:
-  // ObserverList is not thread-safe, so |lock_| ensures consistency of
-  // |observer_list_|.
-  base::Lock lock_;
-  base::ObserverList<Observer> observer_list_;
-
-  DISALLOW_COPY_AND_ASSIGN(PortProvider);
-};
-
-}  // namespace base
-
-#endif  // BASE_PROCESS_PORT_PROVIDER_MAC_H_
diff --git a/base/process/process.h b/base/process/process.h
index 2633355..dbfc701 100644
--- a/base/process/process.h
+++ b/base/process/process.h
@@ -15,10 +15,6 @@
 #include "base/win/scoped_handle.h"
 #endif
 
-#if defined(OS_MACOSX)
-#include "base/process/port_provider_mac.h"
-#endif
-
 namespace base {
 
 // Provides a move-only encapsulation of a process.
@@ -64,15 +60,6 @@
   static Process OpenWithAccess(ProcessId pid, DWORD desired_access);
 #endif
 
-  // Creates an object from a |handle| owned by someone else.
-  // Don't use this for new code. It is only intended to ease the migration to
-  // a strict ownership model.
-  // TODO(rvargas) crbug.com/417532: Remove this code.
-  static Process DeprecatedGetProcessFromHandle(ProcessHandle handle);
-
-  // Returns true if processes can be backgrounded.
-  static bool CanBackgroundProcesses();
-
   // Terminates the current process immediately with |exit_code|.
   [[noreturn]] static void TerminateCurrentProcessImmediately(int exit_code);
 
@@ -132,38 +119,6 @@
   // process though that should be avoided.
   void Exited(int exit_code) const;
 
-#if defined(OS_MACOSX)
-  // The Mac needs a Mach port in order to manipulate a process's priority,
-  // and there's no good way to get that from base given the pid. These Mac
-  // variants of the IsProcessBackgrounded and SetProcessBackgrounded API take
-  // a port provider for this reason. See crbug.com/460102
-  //
-  // A process is backgrounded when its task priority is
-  // |TASK_BACKGROUND_APPLICATION|.
-  //
-  // Returns true if the port_provider can locate a task port for the process
-  // and it is backgrounded. If port_provider is null, returns false.
-  bool IsProcessBackgrounded(PortProvider* port_provider) const;
-
-  // Set the process as backgrounded. If value is
-  // true, the priority of the associated task will be set to
-  // TASK_BACKGROUND_APPLICATION. If value is false, the
-  // priority of the process will be set to TASK_FOREGROUND_APPLICATION.
-  //
-  // Returns true if the priority was changed, false otherwise. If
-  // |port_provider| is null, this is a no-op and it returns false.
-  bool SetProcessBackgrounded(PortProvider* port_provider, bool value);
-#else
-  // A process is backgrounded when it's priority is lower than normal.
-  // Return true if this process is backgrounded, false otherwise.
-  bool IsProcessBackgrounded() const;
-
-  // Set a process as backgrounded. If value is true, the priority of the
-  // process will be lowered. If value is false, the priority of the process
-  // will be made "normal" - equivalent to default process priority.
-  // Returns true if the priority was changed, false otherwise.
-  bool SetProcessBackgrounded(bool value);
-#endif  // defined(OS_MACOSX)
   // Returns an integer representing the priority of a process. The meaning
   // of this value is OS dependent.
   int GetPriority() const;
diff --git a/base/process/process_linux.cc b/base/process/process_linux.cc
deleted file mode 100644
index 066c647..0000000
--- a/base/process/process_linux.cc
+++ /dev/null
@@ -1,60 +0,0 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "base/process/process.h"
-
-#include <errno.h>
-#include <sys/resource.h>
-
-#include "base/files/file_util.h"
-#include "base/logging.h"
-#include "base/strings/string_number_conversions.h"
-#include "base/strings/string_split.h"
-#include "base/strings/stringprintf.h"
-#include "base/synchronization/lock.h"
-#include "build_config.h"
-
-namespace base {
-
-namespace {
-
-const int kForegroundPriority = 0;
-
-const int kBackgroundPriority = 5;
-
-bool CanReraisePriority() {
-  // We won't be able to raise the priority if we don't have the right rlimit.
-  // The limit may be adjusted in /etc/security/limits.conf for PAM systems.
-  struct rlimit rlim;
-  return (getrlimit(RLIMIT_NICE, &rlim) == 0) &&
-         (20 - kForegroundPriority) <= static_cast<int>(rlim.rlim_cur);
-}
-
-}  // namespace
-
-// static
-bool Process::CanBackgroundProcesses() {
-  static const bool can_reraise_priority = CanReraisePriority();
-  return can_reraise_priority;
-}
-
-bool Process::IsProcessBackgrounded() const {
-  DCHECK(IsValid());
-
-  return GetPriority() == kBackgroundPriority;
-}
-
-bool Process::SetProcessBackgrounded(bool background) {
-  DCHECK(IsValid());
-
-  if (!CanBackgroundProcesses())
-    return false;
-
-  int priority = background ? kBackgroundPriority : kForegroundPriority;
-  int result = setpriority(PRIO_PROCESS, process_, priority);
-  DPCHECK(result == 0);
-  return result == 0;
-}
-
-}  // namespace base
diff --git a/base/process/process_mac.cc b/base/process/process_mac.cc
deleted file mode 100644
index cd47c62..0000000
--- a/base/process/process_mac.cc
+++ /dev/null
@@ -1,72 +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/process/process.h"
-
-#include <mach/mach.h>
-
-#include "base/mac/mach_logging.h"
-
-namespace base {
-
-bool Process::CanBackgroundProcesses() {
-  return false;
-}
-
-bool Process::IsProcessBackgrounded(PortProvider* port_provider) const {
-  DCHECK(IsValid());
-  if (port_provider == nullptr || !CanBackgroundProcesses())
-    return false;
-
-  mach_port_t task_port = port_provider->TaskForPid(Pid());
-  if (task_port == TASK_NULL)
-    return false;
-
-  task_category_policy_data_t category_policy;
-  mach_msg_type_number_t task_info_count = TASK_CATEGORY_POLICY_COUNT;
-  boolean_t get_default = FALSE;
-
-  kern_return_t result =
-      task_policy_get(task_port, TASK_CATEGORY_POLICY,
-                      reinterpret_cast<task_policy_t>(&category_policy),
-                      &task_info_count, &get_default);
-  MACH_LOG_IF(ERROR, result != KERN_SUCCESS, result)
-      << "task_policy_get TASK_CATEGORY_POLICY";
-
-  if (result == KERN_SUCCESS && get_default == FALSE) {
-    return category_policy.role == TASK_BACKGROUND_APPLICATION;
-  }
-  return false;
-}
-
-bool Process::SetProcessBackgrounded(PortProvider* port_provider,
-                                     bool background) {
-  DCHECK(IsValid());
-  if (port_provider == nullptr || !CanBackgroundProcesses())
-    return false;
-
-  mach_port_t task_port = port_provider->TaskForPid(Pid());
-  if (task_port == TASK_NULL)
-    return false;
-
-  if (IsProcessBackgrounded(port_provider) == background)
-    return true;
-
-  task_category_policy category_policy;
-  category_policy.role =
-      background ? TASK_BACKGROUND_APPLICATION : TASK_FOREGROUND_APPLICATION;
-  kern_return_t result =
-      task_policy_set(task_port, TASK_CATEGORY_POLICY,
-                      reinterpret_cast<task_policy_t>(&category_policy),
-                      TASK_CATEGORY_POLICY_COUNT);
-
-  if (result != KERN_SUCCESS) {
-    MACH_LOG(ERROR, result) << "task_policy_set TASK_CATEGORY_POLICY";
-    return false;
-  }
-
-  return true;
-}
-
-}  // namespace base
diff --git a/base/process/process_posix.cc b/base/process/process_posix.cc
index 57a4f67..3cc9182 100644
--- a/base/process/process_posix.cc
+++ b/base/process/process_posix.cc
@@ -258,19 +258,6 @@
 }
 
 // static
-Process Process::DeprecatedGetProcessFromHandle(ProcessHandle handle) {
-  DCHECK_NE(handle, GetCurrentProcessHandle());
-  return Process(handle);
-}
-
-#if !defined(OS_LINUX) && !defined(OS_MACOSX) && !defined(OS_AIX)
-// static
-bool Process::CanBackgroundProcesses() {
-  return false;
-}
-#endif  // !defined(OS_LINUX) && !defined(OS_MACOSX) && !defined(OS_AIX)
-
-// static
 void Process::TerminateCurrentProcessImmediately(int exit_code) {
   _exit(exit_code);
 }
@@ -346,22 +333,6 @@
 
 void Process::Exited(int exit_code) const {}
 
-#if !defined(OS_LINUX) && !defined(OS_MACOSX) && !defined(OS_AIX)
-bool Process::IsProcessBackgrounded() const {
-  // See SetProcessBackgrounded().
-  DCHECK(IsValid());
-  return false;
-}
-
-bool Process::SetProcessBackgrounded(bool value) {
-  // Not implemented for POSIX systems other than Linux and Mac. With POSIX, if
-  // we were to lower the process priority we wouldn't be able to raise it back
-  // to its initial priority.
-  NOTIMPLEMENTED();
-  return false;
-}
-#endif  // !defined(OS_LINUX) && !defined(OS_MACOSX) && !defined(OS_AIX)
-
 int Process::GetPriority() const {
   DCHECK(IsValid());
   return getpriority(PRIO_PROCESS, process_);
diff --git a/base/process/process_win.cc b/base/process/process_win.cc
index 48f598f..f5bd59e 100644
--- a/base/process/process_win.cc
+++ b/base/process/process_win.cc
@@ -65,23 +65,6 @@
 }
 
 // static
-Process Process::DeprecatedGetProcessFromHandle(ProcessHandle handle) {
-  DCHECK_NE(handle, ::GetCurrentProcess());
-  ProcessHandle out_handle;
-  if (!::DuplicateHandle(GetCurrentProcess(), handle,
-                         GetCurrentProcess(), &out_handle,
-                         0, FALSE, DUPLICATE_SAME_ACCESS)) {
-    return Process();
-  }
-  return Process(out_handle);
-}
-
-// static
-bool Process::CanBackgroundProcesses() {
-  return true;
-}
-
-// static
 void Process::TerminateCurrentProcessImmediately(int exit_code) {
   ::TerminateProcess(GetCurrentProcess(), exit_code);
   // There is some ambiguity over whether the call above can return. Rather than
@@ -182,31 +165,6 @@
 void Process::Exited(int exit_code) const {
 }
 
-bool Process::IsProcessBackgrounded() const {
-  DCHECK(IsValid());
-  DWORD priority = GetPriority();
-  if (priority == 0)
-    return false;  // Failure case.
-  return ((priority == BELOW_NORMAL_PRIORITY_CLASS) ||
-          (priority == IDLE_PRIORITY_CLASS));
-}
-
-bool Process::SetProcessBackgrounded(bool value) {
-  DCHECK(IsValid());
-  // Vista and above introduce a real background mode, which not only
-  // sets the priority class on the threads but also on the IO generated
-  // by it. Unfortunately it can only be set for the calling process.
-  DWORD priority;
-  if (is_current()) {
-    priority = value ? PROCESS_MODE_BACKGROUND_BEGIN :
-                       PROCESS_MODE_BACKGROUND_END;
-  } else {
-    priority = value ? IDLE_PRIORITY_CLASS : NORMAL_PRIORITY_CLASS;
-  }
-
-  return (::SetPriorityClass(Handle(), priority) != 0);
-}
-
 int Process::GetPriority() const {
   DCHECK(IsValid());
   return ::GetPriorityClass(Handle());
diff --git a/base/rand_util.cc b/base/rand_util.cc
deleted file mode 100644
index 5881ef2..0000000
--- a/base/rand_util.cc
+++ /dev/null
@@ -1,82 +0,0 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "base/rand_util.h"
-
-#include <limits.h>
-#include <math.h>
-#include <stdint.h>
-
-#include <algorithm>
-#include <limits>
-
-#include "base/logging.h"
-#include "base/strings/string_util.h"
-
-namespace base {
-
-uint64_t RandUint64() {
-  uint64_t number;
-  RandBytes(&number, sizeof(number));
-  return number;
-}
-
-int RandInt(int min, int max) {
-  DCHECK_LE(min, max);
-
-  uint64_t range = static_cast<uint64_t>(max) - min + 1;
-  // |range| is at most UINT_MAX + 1, so the result of RandGenerator(range)
-  // is at most UINT_MAX.  Hence it's safe to cast it from uint64_t to int64_t.
-  int result =
-      static_cast<int>(min + static_cast<int64_t>(base::RandGenerator(range)));
-  DCHECK_GE(result, min);
-  DCHECK_LE(result, max);
-  return result;
-}
-
-double RandDouble() {
-  return BitsToOpenEndedUnitInterval(base::RandUint64());
-}
-
-double BitsToOpenEndedUnitInterval(uint64_t bits) {
-  // We try to get maximum precision by masking out as many bits as will fit
-  // in the target type's mantissa, and raising it to an appropriate power to
-  // produce output in the range [0, 1).  For IEEE 754 doubles, the mantissa
-  // is expected to accommodate 53 bits.
-
-  static_assert(std::numeric_limits<double>::radix == 2,
-                "otherwise use scalbn");
-  static const int kBits = std::numeric_limits<double>::digits;
-  uint64_t random_bits = bits & ((UINT64_C(1) << kBits) - 1);
-  double result = ldexp(static_cast<double>(random_bits), -1 * kBits);
-  DCHECK_GE(result, 0.0);
-  DCHECK_LT(result, 1.0);
-  return result;
-}
-
-uint64_t RandGenerator(uint64_t range) {
-  DCHECK_GT(range, 0u);
-  // We must discard random results above this number, as they would
-  // make the random generator non-uniform (consider e.g. if
-  // MAX_UINT64 was 7 and |range| was 5, then a result of 1 would be twice
-  // as likely as a result of 3 or 4).
-  uint64_t max_acceptable_value =
-      (std::numeric_limits<uint64_t>::max() / range) * range - 1;
-
-  uint64_t value;
-  do {
-    value = base::RandUint64();
-  } while (value > max_acceptable_value);
-
-  return value % range;
-}
-
-std::string RandBytesAsString(size_t length) {
-  DCHECK_GT(length, 0u);
-  std::string result;
-  RandBytes(WriteInto(&result, length + 1), length);
-  return result;
-}
-
-}  // namespace base
diff --git a/base/rand_util.h b/base/rand_util.h
deleted file mode 100644
index 32c8fc7..0000000
--- a/base/rand_util.h
+++ /dev/null
@@ -1,78 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef BASE_RAND_UTIL_H_
-#define BASE_RAND_UTIL_H_
-
-#include <stddef.h>
-#include <stdint.h>
-
-#include <algorithm>
-#include <string>
-
-#include "base/base_export.h"
-#include "build_config.h"
-
-namespace base {
-
-// Returns a random number in range [0, UINT64_MAX]. Thread-safe.
-BASE_EXPORT uint64_t RandUint64();
-
-// Returns a random number between min and max (inclusive). Thread-safe.
-BASE_EXPORT int RandInt(int min, int max);
-
-// Returns a random number in range [0, range).  Thread-safe.
-BASE_EXPORT uint64_t RandGenerator(uint64_t range);
-
-// Returns a random double in range [0, 1). Thread-safe.
-BASE_EXPORT double RandDouble();
-
-// Given input |bits|, convert with maximum precision to a double in
-// the range [0, 1). Thread-safe.
-BASE_EXPORT double BitsToOpenEndedUnitInterval(uint64_t bits);
-
-// Fills |output_length| bytes of |output| with random data. Thread-safe.
-//
-// Although implementations are required to use a cryptographically secure
-// random number source, code outside of base/ that relies on this should use
-// crypto::RandBytes instead to ensure the requirement is easily discoverable.
-BASE_EXPORT void RandBytes(void* output, size_t output_length);
-
-// Fills a string of length |length| with random data and returns it.
-// |length| should be nonzero. Thread-safe.
-//
-// Note that this is a variation of |RandBytes| with a different return type.
-// The returned string is likely not ASCII/UTF-8. Use with care.
-//
-// Although implementations are required to use a cryptographically secure
-// random number source, code outside of base/ that relies on this should use
-// crypto::RandBytes instead to ensure the requirement is easily discoverable.
-BASE_EXPORT std::string RandBytesAsString(size_t length);
-
-// An STL UniformRandomBitGenerator backed by RandUint64.
-// TODO(tzik): Consider replacing this with a faster implementation.
-class RandomBitGenerator {
- public:
-  using result_type = uint64_t;
-  static constexpr result_type min() { return 0; }
-  static constexpr result_type max() { return UINT64_MAX; }
-  result_type operator()() const { return RandUint64(); }
-
-  RandomBitGenerator() = default;
-  ~RandomBitGenerator() = default;
-};
-
-// Shuffles [first, last) randomly. Thread-safe.
-template <typename Itr>
-void RandomShuffle(Itr first, Itr last) {
-  std::shuffle(first, last, RandomBitGenerator());
-}
-
-#if defined(OS_POSIX) && !defined(OS_FUCHSIA)
-BASE_EXPORT int GetUrandomFD();
-#endif
-
-}  // namespace base
-
-#endif  // BASE_RAND_UTIL_H_
diff --git a/base/rand_util_nacl.cc b/base/rand_util_nacl.cc
deleted file mode 100644
index b26b408..0000000
--- a/base/rand_util_nacl.cc
+++ /dev/null
@@ -1,27 +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/rand_util.h"
-
-#include <nacl/nacl_random.h>
-#include <stddef.h>
-#include <stdint.h>
-
-#include "base/logging.h"
-
-namespace base {
-
-void RandBytes(void* output, size_t output_length) {
-  char* output_ptr = static_cast<char*>(output);
-  while (output_length > 0) {
-    size_t nread;
-    const int error = nacl_secure_random(output_ptr, output_length, &nread);
-    CHECK_EQ(error, 0);
-    CHECK_LE(nread, output_length);
-    output_ptr += nread;
-    output_length -= nread;
-  }
-}
-
-}  // namespace base
diff --git a/base/rand_util_posix.cc b/base/rand_util_posix.cc
deleted file mode 100644
index 13ecaf5..0000000
--- a/base/rand_util_posix.cc
+++ /dev/null
@@ -1,57 +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/rand_util.h"
-
-#include <errno.h>
-#include <fcntl.h>
-#include <stddef.h>
-#include <stdint.h>
-#include <unistd.h>
-
-#include "base/files/file_util.h"
-#include "base/logging.h"
-#include "base/posix/eintr_wrapper.h"
-
-namespace {
-
-// We keep the file descriptor for /dev/urandom around so we don't need to
-// reopen it (which is expensive), and since we may not even be able to reopen
-// it if we are later put in a sandbox. This class wraps the file descriptor so
-// we can use LazyInstance to handle opening it on the first access.
-class URandomFd {
- public:
-  URandomFd() : fd_(HANDLE_EINTR(open("/dev/urandom", O_RDONLY | O_CLOEXEC))) {
-    DCHECK_GE(fd_, 0) << "Cannot open /dev/urandom: " << errno;
-  }
-
-  ~URandomFd() { close(fd_); }
-
-  int fd() const { return fd_; }
-
- private:
-  const int fd_;
-};
-
-URandomFd* GetInstance() {
-  static URandomFd* instance = new URandomFd;
-  return instance;
-}
-
-}  // namespace
-
-namespace base {
-
-void RandBytes(void* output, size_t output_length) {
-  const int urandom_fd = GetInstance()->fd();
-  const bool success =
-      ReadFromFD(urandom_fd, static_cast<char*>(output), output_length);
-  CHECK(success);
-}
-
-int GetUrandomFD(void) {
-  return GetInstance()->fd();
-}
-
-}  // namespace base
diff --git a/base/rand_util_win.cc b/base/rand_util_win.cc
deleted file mode 100644
index e85c216..0000000
--- a/base/rand_util_win.cc
+++ /dev/null
@@ -1,38 +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/rand_util.h"
-
-#include <windows.h>
-#include <stddef.h>
-#include <stdint.h>
-
-// #define needed to link in RtlGenRandom(), a.k.a. SystemFunction036.  See the
-// "Community Additions" comment on MSDN here:
-// http://msdn.microsoft.com/en-us/library/windows/desktop/aa387694.aspx
-#define SystemFunction036 NTAPI SystemFunction036
-#include <NTSecAPI.h>
-#undef SystemFunction036
-
-#include <algorithm>
-#include <limits>
-
-#include "base/logging.h"
-
-namespace base {
-
-void RandBytes(void* output, size_t output_length) {
-  char* output_ptr = static_cast<char*>(output);
-  while (output_length > 0) {
-    const ULONG output_bytes_this_pass = static_cast<ULONG>(std::min(
-        output_length, static_cast<size_t>(std::numeric_limits<ULONG>::max())));
-    const bool success =
-        RtlGenRandom(output_ptr, output_bytes_this_pass) != FALSE;
-    CHECK(success);
-    output_length -= output_bytes_this_pass;
-    output_ptr += output_bytes_this_pass;
-  }
-}
-
-}  // namespace base
diff --git a/base/scoped_observer.h b/base/scoped_observer.h
deleted file mode 100644
index 7f1d6fb..0000000
--- a/base/scoped_observer.h
+++ /dev/null
@@ -1,63 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef BASE_SCOPED_OBSERVER_H_
-#define BASE_SCOPED_OBSERVER_H_
-
-#include <stddef.h>
-
-#include <algorithm>
-#include <vector>
-
-#include "base/logging.h"
-#include "base/macros.h"
-#include "base/stl_util.h"
-
-// ScopedObserver is used to keep track of the set of sources an object has
-// attached itself to as an observer. When ScopedObserver is destroyed it
-// removes the object as an observer from all sources it has been added to.
-template <class Source, class Observer>
-class ScopedObserver {
- public:
-  explicit ScopedObserver(Observer* observer) : observer_(observer) {}
-
-  ~ScopedObserver() {
-    RemoveAll();
-  }
-
-  // Adds the object passed to the constructor as an observer on |source|.
-  void Add(Source* source) {
-    sources_.push_back(source);
-    source->AddObserver(observer_);
-  }
-
-  // Remove the object passed to the constructor as an observer from |source|.
-  void Remove(Source* source) {
-    auto it = std::find(sources_.begin(), sources_.end(), source);
-    DCHECK(it != sources_.end());
-    sources_.erase(it);
-    source->RemoveObserver(observer_);
-  }
-
-  void RemoveAll() {
-    for (size_t i = 0; i < sources_.size(); ++i)
-      sources_[i]->RemoveObserver(observer_);
-    sources_.clear();
-  }
-
-  bool IsObserving(Source* source) const {
-    return base::ContainsValue(sources_, source);
-  }
-
-  bool IsObservingSources() const { return !sources_.empty(); }
-
- private:
-  Observer* observer_;
-
-  std::vector<Source*> sources_;
-
-  DISALLOW_COPY_AND_ASSIGN(ScopedObserver);
-};
-
-#endif  // BASE_SCOPED_OBSERVER_H_
diff --git a/base/strings/OWNERS b/base/strings/OWNERS
deleted file mode 100644
index 5381872..0000000
--- a/base/strings/OWNERS
+++ /dev/null
@@ -1,2 +0,0 @@
-per-file safe_sprintf*=jln@chromium.org
-per-file safe_sprintf*=mdempsky@chromium.org
diff --git a/base/strings/latin1_string_conversions.cc b/base/strings/latin1_string_conversions.cc
deleted file mode 100644
index dca62ce..0000000
--- a/base/strings/latin1_string_conversions.cc
+++ /dev/null
@@ -1,19 +0,0 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "base/strings/latin1_string_conversions.h"
-
-namespace base {
-
-string16 Latin1OrUTF16ToUTF16(size_t length,
-                              const Latin1Char* latin1,
-                              const char16* utf16) {
-  if (!length)
-    return string16();
-  if (latin1)
-    return string16(latin1, latin1 + length);
-  return string16(utf16, utf16 + length);
-}
-
-}  // namespace base
diff --git a/base/strings/latin1_string_conversions.h b/base/strings/latin1_string_conversions.h
deleted file mode 100644
index 42113ef..0000000
--- a/base/strings/latin1_string_conversions.h
+++ /dev/null
@@ -1,34 +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.
-
-#ifndef BASE_STRINGS_LATIN1_STRING_CONVERSIONS_H_
-#define BASE_STRINGS_LATIN1_STRING_CONVERSIONS_H_
-
-#include <stddef.h>
-
-#include <string>
-
-#include "base/base_export.h"
-#include "base/strings/string16.h"
-
-namespace base {
-
-// This definition of Latin1Char matches the definition of LChar in Blink. We
-// use unsigned char rather than char to make less tempting to mix and match
-// Latin-1 and UTF-8 characters..
-typedef unsigned char Latin1Char;
-
-// This somewhat odd function is designed to help us convert from Blink Strings
-// to string16. A Blink string is either backed by an array of Latin-1
-// characters or an array of UTF-16 characters. This function is called by
-// WebString::operator string16() to convert one or the other character array
-// to string16. This function is defined here rather than in WebString.h to
-// avoid binary bloat in all the callers of the conversion operator.
-BASE_EXPORT string16 Latin1OrUTF16ToUTF16(size_t length,
-                                          const Latin1Char* latin1,
-                                          const char16* utf16);
-
-}  // namespace base
-
-#endif  // BASE_STRINGS_LATIN1_STRING_CONVERSIONS_H_
diff --git a/base/strings/nullable_string16.cc b/base/strings/nullable_string16.cc
deleted file mode 100644
index 076b282..0000000
--- a/base/strings/nullable_string16.cc
+++ /dev/null
@@ -1,33 +0,0 @@
-// Copyright (c) 2013 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "base/strings/nullable_string16.h"
-
-#include <ostream>
-#include <utility>
-
-namespace base {
-NullableString16::NullableString16() = default;
-NullableString16::NullableString16(const NullableString16& other) = default;
-NullableString16::NullableString16(NullableString16&& other) = default;
-
-NullableString16::NullableString16(const string16& string, bool is_null) {
-  if (!is_null)
-    string_.emplace(string);
-}
-
-NullableString16::NullableString16(Optional<string16> optional_string16)
-    : string_(std::move(optional_string16)) {}
-
-NullableString16::~NullableString16() = default;
-NullableString16& NullableString16::operator=(const NullableString16& other) =
-    default;
-NullableString16& NullableString16::operator=(NullableString16&& other) =
-    default;
-
-std::ostream& operator<<(std::ostream& out, const NullableString16& value) {
-  return value.is_null() ? out << "(null)" : out << value.string();
-}
-
-}  // namespace base
diff --git a/base/strings/nullable_string16.h b/base/strings/nullable_string16.h
deleted file mode 100644
index abddee0..0000000
--- a/base/strings/nullable_string16.h
+++ /dev/null
@@ -1,55 +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.
-
-#ifndef BASE_STRINGS_NULLABLE_STRING16_H_
-#define BASE_STRINGS_NULLABLE_STRING16_H_
-
-#include <iosfwd>
-
-#include "base/base_export.h"
-#include "base/optional.h"
-#include "base/strings/string16.h"
-#include "base/strings/string_util.h"
-
-namespace base {
-
-// This class is a simple wrapper for string16 which also contains a null
-// state.  This should be used only where the difference between null and
-// empty is meaningful.
-class BASE_EXPORT NullableString16 {
- public:
-  NullableString16();
-  NullableString16(const NullableString16& other);
-  NullableString16(NullableString16&& other);
-  NullableString16(const string16& string, bool is_null);
-  explicit NullableString16(Optional<string16> optional_string16);
-  ~NullableString16();
-
-  NullableString16& operator=(const NullableString16& other);
-  NullableString16& operator=(NullableString16&& other);
-
-  const string16& string() const {
-    return string_ ? *string_ : EmptyString16();
-  }
-  bool is_null() const { return !string_; }
-  const Optional<string16>& as_optional_string16() const { return string_; }
-
- private:
-  Optional<string16> string_;
-};
-
-inline bool operator==(const NullableString16& a, const NullableString16& b) {
-  return a.as_optional_string16() == b.as_optional_string16();
-}
-
-inline bool operator!=(const NullableString16& a, const NullableString16& b) {
-  return !(a == b);
-}
-
-BASE_EXPORT std::ostream& operator<<(std::ostream& out,
-                                     const NullableString16& value);
-
-}  // namespace base
-
-#endif  // BASE_STRINGS_NULLABLE_STRING16_H_
diff --git a/base/strings/old_utf_string_conversions.cc b/base/strings/old_utf_string_conversions.cc
deleted file mode 100644
index b6edb29..0000000
--- a/base/strings/old_utf_string_conversions.cc
+++ /dev/null
@@ -1,262 +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/strings/old_utf_string_conversions.h"
-
-#include <stdint.h>
-
-#include "base/strings/string_piece.h"
-#include "base/strings/string_util.h"
-#include "base/strings/utf_string_conversion_utils.h"
-#include "build_config.h"
-
-namespace base_old {
-
-using base::IsStringASCII;
-using base::ReadUnicodeCharacter;
-using base::WriteUnicodeCharacter;
-
-template<typename CHAR>
-void PrepareForUTF8Output(const CHAR* src,
-                          size_t src_len,
-                          std::string* output) {
-  output->clear();
-  if (src_len == 0)
-    return;
-  if (src[0] < 0x80) {
-    // Assume that the entire input will be ASCII.
-    output->reserve(src_len);
-  } else {
-    // Assume that the entire input is non-ASCII and will have 3 bytes per char.
-    output->reserve(src_len * 3);
-  }
-}
-
-template<typename STRING>
-void PrepareForUTF16Or32Output(const char* src,
-                               size_t src_len,
-                               STRING* output) {
-  output->clear();
-  if (src_len == 0)
-    return;
-  if (static_cast<unsigned char>(src[0]) < 0x80) {
-    // Assume the input is all ASCII, which means 1:1 correspondence.
-    output->reserve(src_len);
-  } else {
-    // Otherwise assume that the UTF-8 sequences will have 2 bytes for each
-    // character.
-    output->reserve(src_len / 2);
-  }
-}
-
-namespace {
-
-// Generalized Unicode converter -----------------------------------------------
-
-// Converts the given source Unicode character type to the given destination
-// Unicode character type as a STL string. The given input buffer and size
-// determine the source, and the given output STL string will be replaced by
-// the result.
-template <typename SRC_CHAR, typename DEST_STRING>
-bool ConvertUnicode(const SRC_CHAR* src, size_t src_len, DEST_STRING* output) {
-  // ICU requires 32-bit numbers.
-  bool success = true;
-  int32_t src_len32 = static_cast<int32_t>(src_len);
-  for (int32_t i = 0; i < src_len32; i++) {
-    uint32_t code_point;
-    if (ReadUnicodeCharacter(src, src_len32, &i, &code_point)) {
-      WriteUnicodeCharacter(code_point, output);
-    } else {
-      WriteUnicodeCharacter(0xFFFD, output);
-      success = false;
-    }
-  }
-
-  return success;
-}
-
-}  // namespace
-
-// UTF-8 <-> Wide --------------------------------------------------------------
-
-bool WideToUTF8(const wchar_t* src, size_t src_len, std::string* output) {
-  if (IsStringASCII(std::wstring(src, src_len))) {
-    output->assign(src, src + src_len);
-    return true;
-  } else {
-    PrepareForUTF8Output(src, src_len, output);
-    return ConvertUnicode(src, src_len, output);
-  }
-}
-
-std::string WideToUTF8(const std::wstring& wide) {
-  if (IsStringASCII(wide)) {
-    return std::string(wide.data(), wide.data() + wide.length());
-  }
-
-  std::string ret;
-  PrepareForUTF8Output(wide.data(), wide.length(), &ret);
-  ConvertUnicode(wide.data(), wide.length(), &ret);
-  return ret;
-}
-
-bool UTF8ToWide(const char* src, size_t src_len, std::wstring* output) {
-  if (IsStringASCII(StringPiece(src, src_len))) {
-    output->assign(src, src + src_len);
-    return true;
-  } else {
-    PrepareForUTF16Or32Output(src, src_len, output);
-    return ConvertUnicode(src, src_len, output);
-  }
-}
-
-std::wstring UTF8ToWide(StringPiece utf8) {
-  if (IsStringASCII(utf8)) {
-    return std::wstring(utf8.begin(), utf8.end());
-  }
-
-  std::wstring ret;
-  PrepareForUTF16Or32Output(utf8.data(), utf8.length(), &ret);
-  ConvertUnicode(utf8.data(), utf8.length(), &ret);
-  return ret;
-}
-
-// UTF-16 <-> Wide -------------------------------------------------------------
-
-#if defined(WCHAR_T_IS_UTF16)
-
-// When wide == UTF-16, then conversions are a NOP.
-bool WideToUTF16(const wchar_t* src, size_t src_len, string16* output) {
-  output->assign(src, src_len);
-  return true;
-}
-
-string16 WideToUTF16(const std::wstring& wide) {
-  return wide;
-}
-
-bool UTF16ToWide(const char16* src, size_t src_len, std::wstring* output) {
-  output->assign(src, src_len);
-  return true;
-}
-
-std::wstring UTF16ToWide(const string16& utf16) {
-  return utf16;
-}
-
-#elif defined(WCHAR_T_IS_UTF32)
-
-bool WideToUTF16(const wchar_t* src, size_t src_len, string16* output) {
-  output->clear();
-  // Assume that normally we won't have any non-BMP characters so the counts
-  // will be the same.
-  output->reserve(src_len);
-  return ConvertUnicode(src, src_len, output);
-}
-
-string16 WideToUTF16(const std::wstring& wide) {
-  string16 ret;
-  WideToUTF16(wide.data(), wide.length(), &ret);
-  return ret;
-}
-
-bool UTF16ToWide(const char16* src, size_t src_len, std::wstring* output) {
-  output->clear();
-  // Assume that normally we won't have any non-BMP characters so the counts
-  // will be the same.
-  output->reserve(src_len);
-  return ConvertUnicode(src, src_len, output);
-}
-
-std::wstring UTF16ToWide(const string16& utf16) {
-  std::wstring ret;
-  UTF16ToWide(utf16.data(), utf16.length(), &ret);
-  return ret;
-}
-
-#endif  // defined(WCHAR_T_IS_UTF32)
-
-// UTF16 <-> UTF8 --------------------------------------------------------------
-
-#if defined(WCHAR_T_IS_UTF32)
-
-bool UTF8ToUTF16(const char* src, size_t src_len, string16* output) {
-  if (IsStringASCII(StringPiece(src, src_len))) {
-    output->assign(src, src + src_len);
-    return true;
-  } else {
-    PrepareForUTF16Or32Output(src, src_len, output);
-    return ConvertUnicode(src, src_len, output);
-  }
-}
-
-string16 UTF8ToUTF16(StringPiece utf8) {
-  if (IsStringASCII(utf8)) {
-    return string16(utf8.begin(), utf8.end());
-  }
-
-  string16 ret;
-  PrepareForUTF16Or32Output(utf8.data(), utf8.length(), &ret);
-  // Ignore the success flag of this call, it will do the best it can for
-  // invalid input, which is what we want here.
-  ConvertUnicode(utf8.data(), utf8.length(), &ret);
-  return ret;
-}
-
-bool UTF16ToUTF8(const char16* src, size_t src_len, std::string* output) {
-  if (IsStringASCII(StringPiece16(src, src_len))) {
-    output->assign(src, src + src_len);
-    return true;
-  } else {
-    PrepareForUTF8Output(src, src_len, output);
-    return ConvertUnicode(src, src_len, output);
-  }
-}
-
-std::string UTF16ToUTF8(StringPiece16 utf16) {
-  std::string ret;
-  // Ignore the success flag of this call, it will do the best it can for
-  // invalid input, which is what we want here.
-  UTF16ToUTF8(utf16.data(), utf16.length(), &ret);
-  return ret;
-}
-
-#elif defined(WCHAR_T_IS_UTF16)
-// Easy case since we can use the "wide" versions we already wrote above.
-
-bool UTF8ToUTF16(const char* src, size_t src_len, string16* output) {
-  return UTF8ToWide(src, src_len, output);
-}
-
-string16 UTF8ToUTF16(StringPiece utf8) {
-  return UTF8ToWide(utf8);
-}
-
-bool UTF16ToUTF8(const char16* src, size_t src_len, std::string* output) {
-  return WideToUTF8(src, src_len, output);
-}
-
-std::string UTF16ToUTF8(StringPiece16 utf16) {
-  if (IsStringASCII(utf16))
-    return std::string(utf16.data(), utf16.data() + utf16.length());
-
-  std::string ret;
-  PrepareForUTF8Output(utf16.data(), utf16.length(), &ret);
-  ConvertUnicode(utf16.data(), utf16.length(), &ret);
-  return ret;
-}
-
-#endif
-
-string16 ASCIIToUTF16(StringPiece ascii) {
-  DCHECK(IsStringASCII(ascii)) << ascii;
-  return string16(ascii.begin(), ascii.end());
-}
-
-std::string UTF16ToASCII(StringPiece16 utf16) {
-  DCHECK(IsStringASCII(utf16)) << UTF16ToUTF8(utf16);
-  return std::string(utf16.begin(), utf16.end());
-}
-
-}  // namespace base_old
diff --git a/base/strings/old_utf_string_conversions.h b/base/strings/old_utf_string_conversions.h
deleted file mode 100644
index 2f0c6c5..0000000
--- a/base/strings/old_utf_string_conversions.h
+++ /dev/null
@@ -1,64 +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.
-
-#ifndef BASE_STRINGS_OLD_UTF_STRING_CONVERSIONS_H_
-#define BASE_STRINGS_OLD_UTF_STRING_CONVERSIONS_H_
-
-#include <stddef.h>
-
-#include <string>
-
-#include "base/base_export.h"
-#include "base/strings/string16.h"
-#include "base/strings/string_piece.h"
-
-namespace base_old {
-
-using base::char16;
-using base::string16;
-using base::StringPiece16;
-using base::StringPiece;
-
-// These convert between UTF-8, -16, and -32 strings. They are potentially slow,
-// so avoid unnecessary conversions. The low-level versions return a boolean
-// indicating whether the conversion was 100% valid. In this case, it will still
-// do the best it can and put the result in the output buffer. The versions that
-// return strings ignore this error and just return the best conversion
-// possible.
-BASE_EXPORT bool WideToUTF8(const wchar_t* src,
-                            size_t src_len,
-                            std::string* output);
-BASE_EXPORT std::string WideToUTF8(const std::wstring& wide);
-BASE_EXPORT bool UTF8ToWide(const char* src,
-                            size_t src_len,
-                            std::wstring* output);
-BASE_EXPORT std::wstring UTF8ToWide(StringPiece utf8);
-
-BASE_EXPORT bool WideToUTF16(const wchar_t* src,
-                             size_t src_len,
-                             string16* output);
-BASE_EXPORT string16 WideToUTF16(const std::wstring& wide);
-BASE_EXPORT bool UTF16ToWide(const char16* src,
-                             size_t src_len,
-                             std::wstring* output);
-BASE_EXPORT std::wstring UTF16ToWide(const string16& utf16);
-
-BASE_EXPORT bool UTF8ToUTF16(const char* src, size_t src_len, string16* output);
-BASE_EXPORT string16 UTF8ToUTF16(StringPiece utf8);
-BASE_EXPORT bool UTF16ToUTF8(const char16* src,
-                             size_t src_len,
-                             std::string* output);
-BASE_EXPORT std::string UTF16ToUTF8(StringPiece16 utf16);
-
-// This converts an ASCII string, typically a hardcoded constant, to a UTF16
-// string.
-BASE_EXPORT string16 ASCIIToUTF16(StringPiece ascii);
-
-// Converts to 7-bit ASCII by truncating. The result must be known to be ASCII
-// beforehand.
-BASE_EXPORT std::string UTF16ToASCII(StringPiece16 utf16);
-
-}  // namespace base_old
-
-#endif  // BASE_STRINGS_OLD_UTF_STRING_CONVERSIONS_H_
diff --git a/base/strings/pattern.cc b/base/strings/pattern.cc
deleted file mode 100644
index f3de0af..0000000
--- a/base/strings/pattern.cc
+++ /dev/null
@@ -1,155 +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/strings/pattern.h"
-
-#include "base/third_party/icu/icu_utf.h"
-
-namespace base {
-
-namespace {
-
-constexpr bool IsWildcard(base_icu::UChar32 character) {
-  return character == '*' || character == '?';
-}
-
-// Searches for the next subpattern of |pattern| in |string|, up to the given
-// |maximum_distance|. The subpattern extends from the start of |pattern| up to
-// the first wildcard character (or the end of the string). If the value of
-// |maximum_distance| is negative, the maximum distance is considered infinite.
-template <typename CHAR, typename NEXT>
-constexpr bool SearchForChars(const CHAR** pattern,
-                              const CHAR* pattern_end,
-                              const CHAR** string,
-                              const CHAR* string_end,
-                              int maximum_distance,
-                              NEXT next) {
-  const CHAR* pattern_start = *pattern;
-  const CHAR* string_start = *string;
-  bool escape = false;
-  while (true) {
-    if (*pattern == pattern_end) {
-      // If this is the end of the pattern, only accept the end of the string;
-      // anything else falls through to the mismatch case.
-      if (*string == string_end)
-        return true;
-    } else {
-      // If we have found a wildcard, we're done.
-      if (!escape && IsWildcard(**pattern))
-        return true;
-
-      // Check if the escape character is found. If so, skip it and move to the
-      // next character.
-      if (!escape && **pattern == '\\') {
-        escape = true;
-        next(pattern, pattern_end);
-        continue;
-      }
-
-      escape = false;
-
-      if (*string == string_end)
-        return false;
-
-      // Check if the chars match, if so, increment the ptrs.
-      const CHAR* pattern_next = *pattern;
-      const CHAR* string_next = *string;
-      base_icu::UChar32 pattern_char = next(&pattern_next, pattern_end);
-      if (pattern_char == next(&string_next, string_end) &&
-          pattern_char != CBU_SENTINEL) {
-        *pattern = pattern_next;
-        *string = string_next;
-        continue;
-      }
-    }
-
-    // Mismatch. If we have reached the maximum distance, return false,
-    // otherwise restart at the beginning of the pattern with the next character
-    // in the string.
-    // TODO(bauerb): This is a naive implementation of substring search, which
-    // could be implemented with a more efficient algorithm, e.g.
-    // Knuth-Morris-Pratt (at the expense of requiring preprocessing).
-    if (maximum_distance == 0)
-      return false;
-
-    // Because unlimited distance is represented as -1, this will never reach 0
-    // and therefore fail the match above.
-    maximum_distance--;
-    *pattern = pattern_start;
-    next(&string_start, string_end);
-    *string = string_start;
-  }
-}
-
-// Consumes consecutive wildcard characters (? or *). Returns the maximum number
-// of characters matched by the sequence of wildcards, or -1 if the wildcards
-// match an arbitrary number of characters (which is the case if it contains at
-// least one *).
-template <typename CHAR, typename NEXT>
-constexpr int EatWildcards(const CHAR** pattern, const CHAR* end, NEXT next) {
-  int num_question_marks = 0;
-  bool has_asterisk = false;
-  while (*pattern != end) {
-    if (**pattern == '?') {
-      num_question_marks++;
-    } else if (**pattern == '*') {
-      has_asterisk = true;
-    } else {
-      break;
-    }
-
-    next(pattern, end);
-  }
-  return has_asterisk ? -1 : num_question_marks;
-}
-
-template <typename CHAR, typename NEXT>
-constexpr bool MatchPatternT(const CHAR* eval,
-                             const CHAR* eval_end,
-                             const CHAR* pattern,
-                             const CHAR* pattern_end,
-                             NEXT next) {
-  do {
-    int maximum_wildcard_length = EatWildcards(&pattern, pattern_end, next);
-    if (!SearchForChars(&pattern, pattern_end, &eval, eval_end,
-                        maximum_wildcard_length, next)) {
-      return false;
-    }
-  } while (pattern != pattern_end);
-  return true;
-}
-
-struct NextCharUTF8 {
-  base_icu::UChar32 operator()(const char** p, const char* end) {
-    base_icu::UChar32 c;
-    int offset = 0;
-    CBU8_NEXT(*p, offset, end - *p, c);
-    *p += offset;
-    return c;
-  }
-};
-
-struct NextCharUTF16 {
-  base_icu::UChar32 operator()(const char16** p, const char16* end) {
-    base_icu::UChar32 c;
-    int offset = 0;
-    CBU16_NEXT(*p, offset, end - *p, c);
-    *p += offset;
-    return c;
-  }
-};
-
-}  // namespace
-
-bool MatchPattern(StringPiece eval, StringPiece pattern) {
-  return MatchPatternT(eval.data(), eval.data() + eval.size(), pattern.data(),
-                       pattern.data() + pattern.size(), NextCharUTF8());
-}
-
-bool MatchPattern(StringPiece16 eval, StringPiece16 pattern) {
-  return MatchPatternT(eval.data(), eval.data() + eval.size(), pattern.data(),
-                       pattern.data() + pattern.size(), NextCharUTF16());
-}
-
-}  // namespace base
diff --git a/base/strings/pattern.h b/base/strings/pattern.h
deleted file mode 100644
index b5172ab..0000000
--- a/base/strings/pattern.h
+++ /dev/null
@@ -1,23 +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.
-
-#ifndef BASE_STRINGS_PATTERN_H_
-#define BASE_STRINGS_PATTERN_H_
-
-#include "base/base_export.h"
-#include "base/strings/string_piece.h"
-
-namespace base {
-
-// Returns true if the |string| passed in matches the |pattern|. The pattern
-// string can contain wildcards like * and ?.
-//
-// The backslash character (\) is an escape character for * and ?.
-// ? matches 0 or 1 character, while * matches 0 or more characters.
-BASE_EXPORT bool MatchPattern(StringPiece string, StringPiece pattern);
-BASE_EXPORT bool MatchPattern(StringPiece16 string, StringPiece16 pattern);
-
-}  // namespace base
-
-#endif  // BASE_STRINGS_PATTERN_H_
diff --git a/base/strings/safe_sprintf.cc b/base/strings/safe_sprintf.cc
deleted file mode 100644
index 8c6e8ca..0000000
--- a/base/strings/safe_sprintf.cc
+++ /dev/null
@@ -1,686 +0,0 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "base/strings/safe_sprintf.h"
-
-#include <errno.h>
-#include <string.h>
-
-#include <limits>
-
-#include "base/macros.h"
-#include "build_config.h"
-
-#if !defined(NDEBUG)
-// In debug builds, we use RAW_CHECK() to print useful error messages, if
-// SafeSPrintf() is called with broken arguments.
-// As our contract promises that SafeSPrintf() can be called from any
-// restricted run-time context, it is not actually safe to call logging
-// functions from it; and we only ever do so for debug builds and hope for the
-// best. We should _never_ call any logging function other than RAW_CHECK(),
-// and we should _never_ include any logging code that is active in production
-// builds. Most notably, we should not include these logging functions in
-// unofficial release builds, even though those builds would otherwise have
-// DCHECKS() enabled.
-// In other words; please do not remove the #ifdef around this #include.
-// Instead, in production builds we opt for returning a degraded result,
-// whenever an error is encountered.
-// E.g. The broken function call
-//        SafeSPrintf("errno = %d (%x)", errno, strerror(errno))
-//      will print something like
-//        errno = 13, (%x)
-//      instead of
-//        errno = 13 (Access denied)
-//      In most of the anticipated use cases, that's probably the preferred
-//      behavior.
-#include "base/logging.h"
-#define DEBUG_CHECK RAW_CHECK
-#else
-#define DEBUG_CHECK(x) do { if (x) { } } while (0)
-#endif
-
-namespace base {
-namespace strings {
-
-// The code in this file is extremely careful to be async-signal-safe.
-//
-// Most obviously, we avoid calling any code that could dynamically allocate
-// memory. Doing so would almost certainly result in bugs and dead-locks.
-// We also avoid calling any other STL functions that could have unintended
-// side-effects involving memory allocation or access to other shared
-// resources.
-//
-// But on top of that, we also avoid calling other library functions, as many
-// of them have the side-effect of calling getenv() (in order to deal with
-// localization) or accessing errno. The latter sounds benign, but there are
-// several execution contexts where it isn't even possible to safely read let
-// alone write errno.
-//
-// The stated design goal of the SafeSPrintf() function is that it can be
-// called from any context that can safely call C or C++ code (i.e. anything
-// that doesn't require assembly code).
-//
-// For a brief overview of some but not all of the issues with async-signal-
-// safety, refer to:
-// http://pubs.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_04.html
-
-namespace {
-const size_t kSSizeMaxConst = ((size_t)(ssize_t)-1) >> 1;
-
-const char kUpCaseHexDigits[]   = "0123456789ABCDEF";
-const char kDownCaseHexDigits[] = "0123456789abcdef";
-}
-
-#if defined(NDEBUG)
-// We would like to define kSSizeMax as std::numeric_limits<ssize_t>::max(),
-// but C++ doesn't allow us to do that for constants. Instead, we have to
-// use careful casting and shifting. We later use a static_assert to
-// verify that this worked correctly.
-namespace {
-const size_t kSSizeMax = kSSizeMaxConst;
-}
-#else  // defined(NDEBUG)
-// For efficiency, we really need kSSizeMax to be a constant. But for unit
-// tests, it should be adjustable. This allows us to verify edge cases without
-// having to fill the entire available address space. As a compromise, we make
-// kSSizeMax adjustable in debug builds, and then only compile that particular
-// part of the unit test in debug builds.
-namespace {
-static size_t kSSizeMax = kSSizeMaxConst;
-}
-
-namespace internal {
-void SetSafeSPrintfSSizeMaxForTest(size_t max) {
-  kSSizeMax = max;
-}
-
-size_t GetSafeSPrintfSSizeMaxForTest() {
-  return kSSizeMax;
-}
-}
-#endif  // defined(NDEBUG)
-
-namespace {
-class Buffer {
- public:
-  // |buffer| is caller-allocated storage that SafeSPrintf() writes to. It
-  // has |size| bytes of writable storage. It is the caller's responsibility
-  // to ensure that the buffer is at least one byte in size, so that it fits
-  // the trailing NUL that will be added by the destructor. The buffer also
-  // must be smaller or equal to kSSizeMax in size.
-  Buffer(char* buffer, size_t size)
-      : buffer_(buffer),
-        size_(size - 1),  // Account for trailing NUL byte
-        count_(0) {
-// MSVS2013's standard library doesn't mark max() as constexpr yet. cl.exe
-// supports static_cast but doesn't really implement constexpr yet so it doesn't
-// complain, but clang does.
-#if __cplusplus >= 201103 && !(defined(__clang__) && defined(OS_WIN))
-    static_assert(kSSizeMaxConst ==
-                      static_cast<size_t>(std::numeric_limits<ssize_t>::max()),
-                  "kSSizeMaxConst should be the max value of an ssize_t");
-#endif
-    DEBUG_CHECK(size > 0);
-    DEBUG_CHECK(size <= kSSizeMax);
-  }
-
-  ~Buffer() {
-    // The code calling the constructor guaranteed that there was enough space
-    // to store a trailing NUL -- and in debug builds, we are actually
-    // verifying this with DEBUG_CHECK()s in the constructor. So, we can
-    // always unconditionally write the NUL byte in the destructor.  We do not
-    // need to adjust the count_, as SafeSPrintf() copies snprintf() in not
-    // including the NUL byte in its return code.
-    *GetInsertionPoint() = '\000';
-  }
-
-  // Returns true, iff the buffer is filled all the way to |kSSizeMax-1|. The
-  // caller can now stop adding more data, as GetCount() has reached its
-  // maximum possible value.
-  inline bool OutOfAddressableSpace() const {
-    return count_ == static_cast<size_t>(kSSizeMax - 1);
-  }
-
-  // Returns the number of bytes that would have been emitted to |buffer_|
-  // if it was sized sufficiently large. This number can be larger than
-  // |size_|, if the caller provided an insufficiently large output buffer.
-  // But it will never be bigger than |kSSizeMax-1|.
-  inline ssize_t GetCount() const {
-    DEBUG_CHECK(count_ < kSSizeMax);
-    return static_cast<ssize_t>(count_);
-  }
-
-  // Emits one |ch| character into the |buffer_| and updates the |count_| of
-  // characters that are currently supposed to be in the buffer.
-  // Returns "false", iff the buffer was already full.
-  // N.B. |count_| increases even if no characters have been written. This is
-  // needed so that GetCount() can return the number of bytes that should
-  // have been allocated for the |buffer_|.
-  inline bool Out(char ch) {
-    if (size_ >= 1 && count_ < size_) {
-      buffer_[count_] = ch;
-      return IncrementCountByOne();
-    }
-    // |count_| still needs to be updated, even if the buffer has been
-    // filled completely. This allows SafeSPrintf() to return the number of
-    // bytes that should have been emitted.
-    IncrementCountByOne();
-    return false;
-  }
-
-  // Inserts |padding|-|len| bytes worth of padding into the |buffer_|.
-  // |count_| will also be incremented by the number of bytes that were meant
-  // to be emitted. The |pad| character is typically either a ' ' space
-  // or a '0' zero, but other non-NUL values are legal.
-  // Returns "false", iff the the |buffer_| filled up (i.e. |count_|
-  // overflowed |size_|) at any time during padding.
-  inline bool Pad(char pad, size_t padding, size_t len) {
-    DEBUG_CHECK(pad);
-    DEBUG_CHECK(padding <= kSSizeMax);
-    for (; padding > len; --padding) {
-      if (!Out(pad)) {
-        if (--padding) {
-          IncrementCount(padding-len);
-        }
-        return false;
-      }
-    }
-    return true;
-  }
-
-  // POSIX doesn't define any async-signal-safe function for converting
-  // an integer to ASCII. Define our own version.
-  //
-  // This also gives us the ability to make the function a little more
-  // powerful and have it deal with |padding|, with truncation, and with
-  // predicting the length of the untruncated output.
-  //
-  // IToASCII() converts an integer |i| to ASCII.
-  //
-  // Unlike similar functions in the standard C library, it never appends a
-  // NUL character. This is left for the caller to do.
-  //
-  // While the function signature takes a signed int64_t, the code decides at
-  // run-time whether to treat the argument as signed (int64_t) or as unsigned
-  // (uint64_t) based on the value of |sign|.
-  //
-  // It supports |base|s 2 through 16. Only a |base| of 10 is allowed to have
-  // a |sign|. Otherwise, |i| is treated as unsigned.
-  //
-  // For bases larger than 10, |upcase| decides whether lower-case or upper-
-  // case letters should be used to designate digits greater than 10.
-  //
-  // Padding can be done with either '0' zeros or ' ' spaces. Padding has to
-  // be positive and will always be applied to the left of the output.
-  //
-  // Prepends a |prefix| to the number (e.g. "0x"). This prefix goes to
-  // the left of |padding|, if |pad| is '0'; and to the right of |padding|
-  // if |pad| is ' '.
-  //
-  // Returns "false", if the |buffer_| overflowed at any time.
-  bool IToASCII(bool sign, bool upcase, int64_t i, int base,
-                char pad, size_t padding, const char* prefix);
-
- private:
-  // Increments |count_| by |inc| unless this would cause |count_| to
-  // overflow |kSSizeMax-1|. Returns "false", iff an overflow was detected;
-  // it then clamps |count_| to |kSSizeMax-1|.
-  inline bool IncrementCount(size_t inc) {
-    // "inc" is either 1 or a "padding" value. Padding is clamped at
-    // run-time to at most kSSizeMax-1. So, we know that "inc" is always in
-    // the range 1..kSSizeMax-1.
-    // This allows us to compute "kSSizeMax - 1 - inc" without incurring any
-    // integer overflows.
-    DEBUG_CHECK(inc <= kSSizeMax - 1);
-    if (count_ > kSSizeMax - 1 - inc) {
-      count_ = kSSizeMax - 1;
-      return false;
-    } else {
-      count_ += inc;
-      return true;
-    }
-  }
-
-  // Convenience method for the common case of incrementing |count_| by one.
-  inline bool IncrementCountByOne() {
-    return IncrementCount(1);
-  }
-
-  // Return the current insertion point into the buffer. This is typically
-  // at |buffer_| + |count_|, but could be before that if truncation
-  // happened. It always points to one byte past the last byte that was
-  // successfully placed into the |buffer_|.
-  inline char* GetInsertionPoint() const {
-    size_t idx = count_;
-    if (idx > size_) {
-      idx = size_;
-    }
-    return buffer_ + idx;
-  }
-
-  // User-provided buffer that will receive the fully formatted output string.
-  char* buffer_;
-
-  // Number of bytes that are available in the buffer excluding the trailing
-  // NUL byte that will be added by the destructor.
-  const size_t size_;
-
-  // Number of bytes that would have been emitted to the buffer, if the buffer
-  // was sufficiently big. This number always excludes the trailing NUL byte
-  // and it is guaranteed to never grow bigger than kSSizeMax-1.
-  size_t count_;
-
-  DISALLOW_COPY_AND_ASSIGN(Buffer);
-};
-
-
-bool Buffer::IToASCII(bool sign, bool upcase, int64_t i, int base,
-                      char pad, size_t padding, const char* prefix) {
-  // Sanity check for parameters. None of these should ever fail, but see
-  // above for the rationale why we can't call CHECK().
-  DEBUG_CHECK(base >= 2);
-  DEBUG_CHECK(base <= 16);
-  DEBUG_CHECK(!sign || base == 10);
-  DEBUG_CHECK(pad == '0' || pad == ' ');
-  DEBUG_CHECK(padding <= kSSizeMax);
-  DEBUG_CHECK(!(sign && prefix && *prefix));
-
-  // Handle negative numbers, if the caller indicated that |i| should be
-  // treated as a signed number; otherwise treat |i| as unsigned (even if the
-  // MSB is set!)
-  // Details are tricky, because of limited data-types, but equivalent pseudo-
-  // code would look like:
-  //   if (sign && i < 0)
-  //     prefix = "-";
-  //   num = abs(i);
-  int minint = 0;
-  uint64_t num;
-  if (sign && i < 0) {
-    prefix = "-";
-
-    // Turn our number positive.
-    if (i == std::numeric_limits<int64_t>::min()) {
-      // The most negative integer needs special treatment.
-      minint = 1;
-      num = static_cast<uint64_t>(-(i + 1));
-    } else {
-      // "Normal" negative numbers are easy.
-      num = static_cast<uint64_t>(-i);
-    }
-  } else {
-    num = static_cast<uint64_t>(i);
-  }
-
-  // If padding with '0' zero, emit the prefix or '-' character now. Otherwise,
-  // make the prefix accessible in reverse order, so that we can later output
-  // it right between padding and the number.
-  // We cannot choose the easier approach of just reversing the number, as that
-  // fails in situations where we need to truncate numbers that have padding
-  // and/or prefixes.
-  const char* reverse_prefix = nullptr;
-  if (prefix && *prefix) {
-    if (pad == '0') {
-      while (*prefix) {
-        if (padding) {
-          --padding;
-        }
-        Out(*prefix++);
-      }
-      prefix = nullptr;
-    } else {
-      for (reverse_prefix = prefix; *reverse_prefix; ++reverse_prefix) {
-      }
-    }
-  } else
-    prefix = nullptr;
-  const size_t prefix_length = reverse_prefix - prefix;
-
-  // Loop until we have converted the entire number. Output at least one
-  // character (i.e. '0').
-  size_t start = count_;
-  size_t discarded = 0;
-  bool started = false;
-  do {
-    // Make sure there is still enough space left in our output buffer.
-    if (count_ >= size_) {
-      if (start < size_) {
-        // It is rare that we need to output a partial number. But if asked
-        // to do so, we will still make sure we output the correct number of
-        // leading digits.
-        // Since we are generating the digits in reverse order, we actually
-        // have to discard digits in the order that we have already emitted
-        // them. This is essentially equivalent to:
-        //   memmove(buffer_ + start, buffer_ + start + 1, size_ - start - 1)
-        for (char* move = buffer_ + start, *end = buffer_ + size_ - 1;
-             move < end;
-             ++move) {
-          *move = move[1];
-        }
-        ++discarded;
-        --count_;
-      } else if (count_ - size_ > 1) {
-        // Need to increment either |count_| or |discarded| to make progress.
-        // The latter is more efficient, as it eventually triggers fast
-        // handling of padding. But we have to ensure we don't accidentally
-        // change the overall state (i.e. switch the state-machine from
-        // discarding to non-discarding). |count_| needs to always stay
-        // bigger than |size_|.
-        --count_;
-        ++discarded;
-      }
-    }
-
-    // Output the next digit and (if necessary) compensate for the most
-    // negative integer needing special treatment. This works because,
-    // no matter the bit width of the integer, the lowest-most decimal
-    // integer always ends in 2, 4, 6, or 8.
-    if (!num && started) {
-      if (reverse_prefix > prefix) {
-        Out(*--reverse_prefix);
-      } else {
-        Out(pad);
-      }
-    } else {
-      started = true;
-      Out((upcase ? kUpCaseHexDigits : kDownCaseHexDigits)[num%base + minint]);
-    }
-
-    minint = 0;
-    num /= base;
-
-    // Add padding, if requested.
-    if (padding > 0) {
-      --padding;
-
-      // Performance optimization for when we are asked to output excessive
-      // padding, but our output buffer is limited in size.  Even if we output
-      // a 64bit number in binary, we would never write more than 64 plus
-      // prefix non-padding characters. So, once this limit has been passed,
-      // any further state change can be computed arithmetically; we know that
-      // by this time, our entire final output consists of padding characters
-      // that have all already been output.
-      if (discarded > 8*sizeof(num) + prefix_length) {
-        IncrementCount(padding);
-        padding = 0;
-      }
-    }
-  } while (num || padding || (reverse_prefix > prefix));
-
-  // Conversion to ASCII actually resulted in the digits being in reverse
-  // order. We can't easily generate them in forward order, as we can't tell
-  // the number of characters needed until we are done converting.
-  // So, now, we reverse the string (except for the possible '-' sign).
-  char* front = buffer_ + start;
-  char* back = GetInsertionPoint();
-  while (--back > front) {
-    char ch = *back;
-    *back = *front;
-    *front++ = ch;
-  }
-
-  IncrementCount(discarded);
-  return !discarded;
-}
-
-}  // anonymous namespace
-
-namespace internal {
-
-ssize_t SafeSNPrintf(char* buf, size_t sz, const char* fmt, const Arg* args,
-                     const size_t max_args) {
-  // Make sure that at least one NUL byte can be written, and that the buffer
-  // never overflows kSSizeMax. Not only does that use up most or all of the
-  // address space, it also would result in a return code that cannot be
-  // represented.
-  if (static_cast<ssize_t>(sz) < 1) {
-    return -1;
-  } else if (sz > kSSizeMax) {
-    sz = kSSizeMax;
-  }
-
-  // Iterate over format string and interpret '%' arguments as they are
-  // encountered.
-  Buffer buffer(buf, sz);
-  size_t padding;
-  char pad;
-  for (unsigned int cur_arg = 0; *fmt && !buffer.OutOfAddressableSpace(); ) {
-    if (*fmt++ == '%') {
-      padding = 0;
-      pad = ' ';
-      char ch = *fmt++;
-    format_character_found:
-      switch (ch) {
-      case '0': case '1': case '2': case '3': case '4':
-      case '5': case '6': case '7': case '8': case '9':
-        // Found a width parameter. Convert to an integer value and store in
-        // "padding". If the leading digit is a zero, change the padding
-        // character from a space ' ' to a zero '0'.
-        pad = ch == '0' ? '0' : ' ';
-        for (;;) {
-          // The maximum allowed padding fills all the available address
-          // space and leaves just enough space to insert the trailing NUL.
-          const size_t max_padding = kSSizeMax - 1;
-          if (padding > max_padding/10 ||
-              10*padding > max_padding - (ch - '0')) {
-            DEBUG_CHECK(padding <= max_padding/10 &&
-                        10*padding <= max_padding - (ch - '0'));
-            // Integer overflow detected. Skip the rest of the width until
-            // we find the format character, then do the normal error handling.
-          padding_overflow:
-            padding = max_padding;
-            while ((ch = *fmt++) >= '0' && ch <= '9') {
-            }
-            if (cur_arg < max_args) {
-              ++cur_arg;
-            }
-            goto fail_to_expand;
-          }
-          padding = 10*padding + ch - '0';
-          if (padding > max_padding) {
-            // This doesn't happen for "sane" values of kSSizeMax. But once
-            // kSSizeMax gets smaller than about 10, our earlier range checks
-            // are incomplete. Unittests do trigger this artificial corner
-            // case.
-            DEBUG_CHECK(padding <= max_padding);
-            goto padding_overflow;
-          }
-          ch = *fmt++;
-          if (ch < '0' || ch > '9') {
-            // Reached the end of the width parameter. This is where the format
-            // character is found.
-            goto format_character_found;
-          }
-        }
-        break;
-      case 'c': {  // Output an ASCII character.
-        // Check that there are arguments left to be inserted.
-        if (cur_arg >= max_args) {
-          DEBUG_CHECK(cur_arg < max_args);
-          goto fail_to_expand;
-        }
-
-        // Check that the argument has the expected type.
-        const Arg& arg = args[cur_arg++];
-        if (arg.type != Arg::INT && arg.type != Arg::UINT) {
-          DEBUG_CHECK(arg.type == Arg::INT || arg.type == Arg::UINT);
-          goto fail_to_expand;
-        }
-
-        // Apply padding, if needed.
-        buffer.Pad(' ', padding, 1);
-
-        // Convert the argument to an ASCII character and output it.
-        char as_char = static_cast<char>(arg.integer.i);
-        if (!as_char) {
-          goto end_of_output_buffer;
-        }
-        buffer.Out(as_char);
-        break; }
-      case 'd':    // Output a possibly signed decimal value.
-      case 'o':    // Output an unsigned octal value.
-      case 'x':    // Output an unsigned hexadecimal value.
-      case 'X':
-      case 'p': {  // Output a pointer value.
-        // Check that there are arguments left to be inserted.
-        if (cur_arg >= max_args) {
-          DEBUG_CHECK(cur_arg < max_args);
-          goto fail_to_expand;
-        }
-
-        const Arg& arg = args[cur_arg++];
-        int64_t i;
-        const char* prefix = nullptr;
-        if (ch != 'p') {
-          // Check that the argument has the expected type.
-          if (arg.type != Arg::INT && arg.type != Arg::UINT) {
-            DEBUG_CHECK(arg.type == Arg::INT || arg.type == Arg::UINT);
-            goto fail_to_expand;
-          }
-          i = arg.integer.i;
-
-          if (ch != 'd') {
-            // The Arg() constructor automatically performed sign expansion on
-            // signed parameters. This is great when outputting a %d decimal
-            // number, but can result in unexpected leading 0xFF bytes when
-            // outputting a %x hexadecimal number. Mask bits, if necessary.
-            // We have to do this here, instead of in the Arg() constructor, as
-            // the Arg() constructor cannot tell whether we will output a %d
-            // or a %x. Only the latter should experience masking.
-            if (arg.integer.width < sizeof(int64_t)) {
-              i &= (1LL << (8*arg.integer.width)) - 1;
-            }
-          }
-        } else {
-          // Pointer values require an actual pointer or a string.
-          if (arg.type == Arg::POINTER) {
-            i = reinterpret_cast<uintptr_t>(arg.ptr);
-          } else if (arg.type == Arg::STRING) {
-            i = reinterpret_cast<uintptr_t>(arg.str);
-          } else if (arg.type == Arg::INT &&
-                     arg.integer.width == sizeof(NULL) &&
-                     arg.integer.i == 0) {  // Allow C++'s version of NULL
-            i = 0;
-          } else {
-            DEBUG_CHECK(arg.type == Arg::POINTER || arg.type == Arg::STRING);
-            goto fail_to_expand;
-          }
-
-          // Pointers always include the "0x" prefix.
-          prefix = "0x";
-        }
-
-        // Use IToASCII() to convert to ASCII representation. For decimal
-        // numbers, optionally print a sign. For hexadecimal numbers,
-        // distinguish between upper and lower case. %p addresses are always
-        // printed as upcase. Supports base 8, 10, and 16. Prints padding
-        // and/or prefixes, if so requested.
-        buffer.IToASCII(ch == 'd' && arg.type == Arg::INT,
-                        ch != 'x', i,
-                        ch == 'o' ? 8 : ch == 'd' ? 10 : 16,
-                        pad, padding, prefix);
-        break; }
-      case 's': {
-        // Check that there are arguments left to be inserted.
-        if (cur_arg >= max_args) {
-          DEBUG_CHECK(cur_arg < max_args);
-          goto fail_to_expand;
-        }
-
-        // Check that the argument has the expected type.
-        const Arg& arg = args[cur_arg++];
-        const char *s;
-        if (arg.type == Arg::STRING) {
-          s = arg.str ? arg.str : "<NULL>";
-        } else if (arg.type == Arg::INT && arg.integer.width == sizeof(NULL) &&
-                   arg.integer.i == 0) {  // Allow C++'s version of NULL
-          s = "<NULL>";
-        } else {
-          DEBUG_CHECK(arg.type == Arg::STRING);
-          goto fail_to_expand;
-        }
-
-        // Apply padding, if needed. This requires us to first check the
-        // length of the string that we are outputting.
-        if (padding) {
-          size_t len = 0;
-          for (const char* src = s; *src++; ) {
-            ++len;
-          }
-          buffer.Pad(' ', padding, len);
-        }
-
-        // Printing a string involves nothing more than copying it into the
-        // output buffer and making sure we don't output more bytes than
-        // available space; Out() takes care of doing that.
-        for (const char* src = s; *src; ) {
-          buffer.Out(*src++);
-        }
-        break; }
-      case '%':
-        // Quoted percent '%' character.
-        goto copy_verbatim;
-      fail_to_expand:
-        // C++ gives us tools to do type checking -- something that snprintf()
-        // could never really do. So, whenever we see arguments that don't
-        // match up with the format string, we refuse to output them. But
-        // since we have to be extremely conservative about being async-
-        // signal-safe, we are limited in the type of error handling that we
-        // can do in production builds (in debug builds we can use
-        // DEBUG_CHECK() and hope for the best). So, all we do is pass the
-        // format string unchanged. That should eventually get the user's
-        // attention; and in the meantime, it hopefully doesn't lose too much
-        // data.
-      default:
-        // Unknown or unsupported format character. Just copy verbatim to
-        // output.
-        buffer.Out('%');
-        DEBUG_CHECK(ch);
-        if (!ch) {
-          goto end_of_format_string;
-        }
-        buffer.Out(ch);
-        break;
-      }
-    } else {
-  copy_verbatim:
-    buffer.Out(fmt[-1]);
-    }
-  }
- end_of_format_string:
- end_of_output_buffer:
-  return buffer.GetCount();
-}
-
-}  // namespace internal
-
-ssize_t SafeSNPrintf(char* buf, size_t sz, const char* fmt) {
-  // Make sure that at least one NUL byte can be written, and that the buffer
-  // never overflows kSSizeMax. Not only does that use up most or all of the
-  // address space, it also would result in a return code that cannot be
-  // represented.
-  if (static_cast<ssize_t>(sz) < 1) {
-    return -1;
-  } else if (sz > kSSizeMax) {
-    sz = kSSizeMax;
-  }
-
-  Buffer buffer(buf, sz);
-
-  // In the slow-path, we deal with errors by copying the contents of
-  // "fmt" unexpanded. This means, if there are no arguments passed, the
-  // SafeSPrintf() function always degenerates to a version of strncpy() that
-  // de-duplicates '%' characters.
-  const char* src = fmt;
-  for (; *src; ++src) {
-    buffer.Out(*src);
-    DEBUG_CHECK(src[0] != '%' || src[1] == '%');
-    if (src[0] == '%' && src[1] == '%') {
-      ++src;
-    }
-  }
-  return buffer.GetCount();
-}
-
-}  // namespace strings
-}  // namespace base
diff --git a/base/strings/safe_sprintf.h b/base/strings/safe_sprintf.h
deleted file mode 100644
index 56a6eaf..0000000
--- a/base/strings/safe_sprintf.h
+++ /dev/null
@@ -1,246 +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.
-
-#ifndef BASE_STRINGS_SAFE_SPRINTF_H_
-#define BASE_STRINGS_SAFE_SPRINTF_H_
-
-#include "build_config.h"
-
-#include <stddef.h>
-#include <stdint.h>
-#include <stdlib.h>
-
-#if defined(OS_POSIX) || defined(OS_FUCHSIA)
-// For ssize_t
-#include <unistd.h>
-#endif
-
-#include "base/base_export.h"
-
-namespace base {
-namespace strings {
-
-#if defined(COMPILER_MSVC)
-// Define ssize_t inside of our namespace.
-#if defined(_WIN64)
-typedef __int64 ssize_t;
-#else
-typedef long ssize_t;
-#endif
-#endif
-
-// SafeSPrintf() is a type-safe and completely self-contained version of
-// snprintf().
-//
-// SafeSNPrintf() is an alternative function signature that can be used when
-// not dealing with fixed-sized buffers. When possible, SafeSPrintf() should
-// always be used instead of SafeSNPrintf()
-//
-// These functions allow for formatting complicated messages from contexts that
-// require strict async-signal-safety. In fact, it is safe to call them from
-// any low-level execution context, as they are guaranteed to make no library
-// or system calls. It deliberately never touches "errno", either.
-//
-// The only exception to this rule is that in debug builds the code calls
-// RAW_CHECK() to help diagnose problems when the format string does not
-// match the rest of the arguments. In release builds, no CHECK()s are used,
-// and SafeSPrintf() instead returns an output string that expands only
-// those arguments that match their format characters. Mismatched arguments
-// are ignored.
-//
-// The code currently only supports a subset of format characters:
-//   %c, %o, %d, %x, %X, %p, and %s.
-//
-// SafeSPrintf() aims to be as liberal as reasonably possible. Integer-like
-// values of arbitrary width can be passed to all of the format characters
-// that expect integers. Thus, it is explicitly legal to pass an "int" to
-// "%c", and output will automatically look at the LSB only. It is also
-// explicitly legal to pass either signed or unsigned values, and the format
-// characters will automatically interpret the arguments accordingly.
-//
-// It is still not legal to mix-and-match integer-like values with pointer
-// values. For instance, you cannot pass a pointer to %x, nor can you pass an
-// integer to %p.
-//
-// The one exception is "0" zero being accepted by "%p". This works-around
-// the problem of C++ defining NULL as an integer-like value.
-//
-// All format characters take an optional width parameter. This must be a
-// positive integer. For %d, %o, %x, %X and %p, if the width starts with
-// a leading '0', padding is done with '0' instead of ' ' characters.
-//
-// There are a few features of snprintf()-style format strings, that
-// SafeSPrintf() does not support at this time.
-//
-// If an actual user showed up, there is no particularly strong reason they
-// couldn't be added. But that assumes that the trade-offs between complexity
-// and utility are favorable.
-//
-// For example, adding support for negative padding widths, and for %n are all
-// likely to be viewed positively. They are all clearly useful, low-risk, easy
-// to test, don't jeopardize the async-signal-safety of the code, and overall
-// have little impact on other parts of SafeSPrintf() function.
-//
-// On the other hands, adding support for alternate forms, positional
-// arguments, grouping, wide characters, localization or floating point numbers
-// are all unlikely to ever be added.
-//
-// SafeSPrintf() and SafeSNPrintf() mimic the behavior of snprintf() and they
-// return the number of bytes needed to store the untruncated output. This
-// does *not* include the terminating NUL byte.
-//
-// They return -1, iff a fatal error happened. This typically can only happen,
-// if the buffer size is a) negative, or b) zero (i.e. not even the NUL byte
-// can be written). The return value can never be larger than SSIZE_MAX-1.
-// This ensures that the caller can always add one to the signed return code
-// in order to determine the amount of storage that needs to be allocated.
-//
-// While the code supports type checking and while it is generally very careful
-// to avoid printing incorrect values, it tends to be conservative in printing
-// as much as possible, even when given incorrect parameters. Typically, in
-// case of an error, the format string will not be expanded. (i.e. something
-// like SafeSPrintf(buf, "%p %d", 1, 2) results in "%p 2"). See above for
-// the use of RAW_CHECK() in debug builds, though.
-//
-// Basic example:
-//   char buf[20];
-//   base::strings::SafeSPrintf(buf, "The answer: %2d", 42);
-//
-// Example with dynamically sized buffer (async-signal-safe). This code won't
-// work on Visual studio, as it requires dynamically allocating arrays on the
-// stack. Consider picking a smaller value for |kMaxSize| if stack size is
-// limited and known. On the other hand, if the parameters to SafeSNPrintf()
-// are trusted and not controllable by the user, you can consider eliminating
-// the check for |kMaxSize| altogether. The current value of SSIZE_MAX is
-// essentially a no-op that just illustrates how to implement an upper bound:
-//   const size_t kInitialSize = 128;
-//   const size_t kMaxSize = std::numeric_limits<ssize_t>::max();
-//   size_t size = kInitialSize;
-//   for (;;) {
-//     char buf[size];
-//     size = SafeSNPrintf(buf, size, "Error message \"%s\"\n", err) + 1;
-//     if (sizeof(buf) < kMaxSize && size > kMaxSize) {
-//       size = kMaxSize;
-//       continue;
-//     } else if (size > sizeof(buf))
-//       continue;
-//     write(2, buf, size-1);
-//     break;
-//   }
-
-namespace internal {
-// Helpers that use C++ overloading, templates, and specializations to deduce
-// and record type information from function arguments. This allows us to
-// later write a type-safe version of snprintf().
-
-struct Arg {
-  enum Type { INT, UINT, STRING, POINTER };
-
-  // Any integer-like value.
-  Arg(signed char c) : type(INT) {
-    integer.i = c;
-    integer.width = sizeof(char);
-  }
-  Arg(unsigned char c) : type(UINT) {
-    integer.i = c;
-    integer.width = sizeof(char);
-  }
-  Arg(signed short j) : type(INT) {
-    integer.i = j;
-    integer.width = sizeof(short);
-  }
-  Arg(unsigned short j) : type(UINT) {
-    integer.i = j;
-    integer.width = sizeof(short);
-  }
-  Arg(signed int j) : type(INT) {
-    integer.i = j;
-    integer.width = sizeof(int);
-  }
-  Arg(unsigned int j) : type(UINT) {
-    integer.i = j;
-    integer.width = sizeof(int);
-  }
-  Arg(signed long j) : type(INT) {
-    integer.i = j;
-    integer.width = sizeof(long);
-  }
-  Arg(unsigned long j) : type(UINT) {
-    integer.i = j;
-    integer.width = sizeof(long);
-  }
-  Arg(signed long long j) : type(INT) {
-    integer.i = j;
-    integer.width = sizeof(long long);
-  }
-  Arg(unsigned long long j) : type(UINT) {
-    integer.i = j;
-    integer.width = sizeof(long long);
-  }
-
-  // A C-style text string.
-  Arg(const char* s) : str(s), type(STRING) { }
-  Arg(char* s)       : str(s), type(STRING) { }
-
-  // Any pointer value that can be cast to a "void*".
-  template<class T> Arg(T* p) : ptr((void*)p), type(POINTER) { }
-
-  union {
-    // An integer-like value.
-    struct {
-      int64_t       i;
-      unsigned char width;
-    } integer;
-
-    // A C-style text string.
-    const char* str;
-
-    // A pointer to an arbitrary object.
-    const void* ptr;
-  };
-  const enum Type type;
-};
-
-// This is the internal function that performs the actual formatting of
-// an snprintf()-style format string.
-BASE_EXPORT ssize_t SafeSNPrintf(char* buf, size_t sz, const char* fmt,
-                                 const Arg* args, size_t max_args);
-
-#if !defined(NDEBUG)
-// In debug builds, allow unit tests to artificially lower the kSSizeMax
-// constant that is used as a hard upper-bound for all buffers. In normal
-// use, this constant should always be std::numeric_limits<ssize_t>::max().
-BASE_EXPORT void SetSafeSPrintfSSizeMaxForTest(size_t max);
-BASE_EXPORT size_t GetSafeSPrintfSSizeMaxForTest();
-#endif
-
-}  // namespace internal
-
-template<typename... Args>
-ssize_t SafeSNPrintf(char* buf, size_t N, const char* fmt, Args... args) {
-  // Use Arg() object to record type information and then copy arguments to an
-  // array to make it easier to iterate over them.
-  const internal::Arg arg_array[] = { args... };
-  return internal::SafeSNPrintf(buf, N, fmt, arg_array, sizeof...(args));
-}
-
-template<size_t N, typename... Args>
-ssize_t SafeSPrintf(char (&buf)[N], const char* fmt, Args... args) {
-  // Use Arg() object to record type information and then copy arguments to an
-  // array to make it easier to iterate over them.
-  const internal::Arg arg_array[] = { args... };
-  return internal::SafeSNPrintf(buf, N, fmt, arg_array, sizeof...(args));
-}
-
-// Fast-path when we don't actually need to substitute any arguments.
-BASE_EXPORT ssize_t SafeSNPrintf(char* buf, size_t N, const char* fmt);
-template<size_t N>
-inline ssize_t SafeSPrintf(char (&buf)[N], const char* fmt) {
-  return SafeSNPrintf(buf, N, fmt);
-}
-
-}  // namespace strings
-}  // namespace base
-
-#endif  // BASE_STRINGS_SAFE_SPRINTF_H_
diff --git a/base/strings/strcat.cc b/base/strings/strcat.cc
deleted file mode 100644
index 3d5b2ca..0000000
--- a/base/strings/strcat.cc
+++ /dev/null
@@ -1,81 +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/strings/strcat.h"
-
-namespace base {
-
-namespace {
-
-// Reserves an additional amount of size in the given string, growing by at
-// least 2x. Used by StrAppend().
-//
-// The "at least 2x" growing rule duplicates the exponential growth of
-// std::string. The problem is that most implementations of reserve() will grow
-// exactly to the requested amount instead of exponentially growing like would
-// happen when appending normally. If we didn't do this, an append after the
-// call to StrAppend() would definitely cause a reallocation, and loops with
-// StrAppend() calls would have O(n^2) complexity to execute. Instead, we want
-// StrAppend() to have the same semantics as std::string::append().
-//
-// If the string is empty, we assume that exponential growth is not necessary.
-template <typename String>
-void ReserveAdditional(String* str, typename String::size_type additional) {
-  str->reserve(std::max(str->size() + additional, str->size() * 2));
-}
-
-template <typename DestString, typename InputString>
-void StrAppendT(DestString* dest, span<const InputString> pieces) {
-  size_t additional_size = 0;
-  for (const auto& cur : pieces)
-    additional_size += cur.size();
-  ReserveAdditional(dest, additional_size);
-
-  for (const auto& cur : pieces)
-    dest->append(cur.data(), cur.size());
-}
-
-}  // namespace
-
-std::string StrCat(span<const StringPiece> pieces) {
-  std::string result;
-  StrAppendT(&result, pieces);
-  return result;
-}
-
-string16 StrCat(span<const StringPiece16> pieces) {
-  string16 result;
-  StrAppendT(&result, pieces);
-  return result;
-}
-
-std::string StrCat(span<const std::string> pieces) {
-  std::string result;
-  StrAppendT(&result, pieces);
-  return result;
-}
-
-string16 StrCat(span<const string16> pieces) {
-  string16 result;
-  StrAppendT(&result, pieces);
-  return result;
-}
-
-void StrAppend(std::string* dest, span<const StringPiece> pieces) {
-  StrAppendT(dest, pieces);
-}
-
-void StrAppend(string16* dest, span<const StringPiece16> pieces) {
-  StrAppendT(dest, pieces);
-}
-
-void StrAppend(std::string* dest, span<const std::string> pieces) {
-  StrAppendT(dest, pieces);
-}
-
-void StrAppend(string16* dest, span<const string16> pieces) {
-  StrAppendT(dest, pieces);
-}
-
-}  // namespace base
diff --git a/base/strings/strcat.h b/base/strings/strcat.h
deleted file mode 100644
index b2fcaae..0000000
--- a/base/strings/strcat.h
+++ /dev/null
@@ -1,99 +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.
-
-#ifndef BASE_STRINGS_STRCAT_H_
-#define BASE_STRINGS_STRCAT_H_
-
-#include <initializer_list>
-
-#include "base/base_export.h"
-#include "base/compiler_specific.h"
-#include "base/containers/span.h"
-#include "base/strings/string_piece.h"
-#include "build_config.h"
-
-#if defined(OS_WIN)
-// To resolve a conflict with Win32 API StrCat macro.
-#include "base/win/windows_types.h"
-#endif
-
-namespace base {
-
-// StrCat ----------------------------------------------------------------------
-//
-// StrCat is a function to perform concatenation on a sequence of strings.
-// It is preferrable to a sequence of "a + b + c" because it is both faster and
-// generates less code.
-//
-//   std::string result = base::StrCat({"foo ", result, "\nfoo ", bar});
-//
-// To join an array of strings with a separator, see base::JoinString in
-// base/strings/string_util.h.
-//
-// MORE INFO
-//
-// StrCat can see all arguments at once, so it can allocate one return buffer
-// of exactly the right size and copy once, as opposed to a sequence of
-// operator+ which generates a series of temporary strings, copying as it goes.
-// And by using StringPiece arguments, StrCat can avoid creating temporary
-// string objects for char* constants.
-//
-// ALTERNATIVES
-//
-// Internal Google / Abseil has a similar StrCat function. That version takes
-// an overloaded number of arguments instead of initializer list (overflowing
-// to initializer list for many arguments). We don't have any legacy
-// requirements and using only initializer_list is simpler and generates
-// roughly the same amount of code at the call sites.
-//
-// Abseil's StrCat also allows numbers by using an intermediate class that can
-// be implicitly constructed from either a string or various number types. This
-// class formats the numbers into a static buffer for increased performance,
-// and the call sites look nice.
-//
-// As-written Abseil's helper class for numbers generates slightly more code
-// than the raw StringPiece version. We can de-inline the helper class'
-// constructors which will cause the StringPiece constructors to be de-inlined
-// for this call and generate slightly less code. This is something we can
-// explore more in the future.
-
-BASE_EXPORT std::string StrCat(span<const StringPiece> pieces);
-BASE_EXPORT string16 StrCat(span<const StringPiece16> pieces);
-BASE_EXPORT std::string StrCat(span<const std::string> pieces);
-BASE_EXPORT string16 StrCat(span<const string16> pieces);
-
-// Initializer list forwards to the array version.
-inline std::string StrCat(std::initializer_list<StringPiece> pieces) {
-  return StrCat(make_span(pieces.begin(), pieces.size()));
-}
-inline string16 StrCat(std::initializer_list<StringPiece16> pieces) {
-  return StrCat(make_span(pieces.begin(), pieces.size()));
-}
-
-// StrAppend -------------------------------------------------------------------
-//
-// Appends a sequence of strings to a destination. Prefer:
-//   StrAppend(&foo, ...);
-// over:
-//   foo += StrCat(...);
-// because it avoids a temporary string allocation and copy.
-
-BASE_EXPORT void StrAppend(std::string* dest, span<const StringPiece> pieces);
-BASE_EXPORT void StrAppend(string16* dest, span<const StringPiece16> pieces);
-BASE_EXPORT void StrAppend(std::string* dest, span<const std::string> pieces);
-BASE_EXPORT void StrAppend(string16* dest, span<const string16> pieces);
-
-// Initializer list forwards to the array version.
-inline void StrAppend(std::string* dest,
-                      std::initializer_list<StringPiece> pieces) {
-  return StrAppend(dest, make_span(pieces.begin(), pieces.size()));
-}
-inline void StrAppend(string16* dest,
-                      std::initializer_list<StringPiece16> pieces) {
-  return StrAppend(dest, make_span(pieces.begin(), pieces.size()));
-}
-
-}  // namespace base
-
-#endif  // BASE_STRINGS_STRCAT_H_
diff --git a/base/strings/string_number_conversions_fuzzer.cc b/base/strings/string_number_conversions_fuzzer.cc
deleted file mode 100644
index 2fed7de..0000000
--- a/base/strings/string_number_conversions_fuzzer.cc
+++ /dev/null
@@ -1,67 +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 <stddef.h>
-#include <stdint.h>
-
-#include <string>
-#include <vector>
-
-#include "base/strings/string_number_conversions.h"
-
-// Entry point for LibFuzzer.
-extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
-  base::StringPiece string_piece_input(reinterpret_cast<const char*>(data),
-                                       size);
-  std::string string_input(reinterpret_cast<const char*>(data), size);
-
-  int out_int;
-  base::StringToInt(string_piece_input, &out_int);
-  unsigned out_uint;
-  base::StringToUint(string_piece_input, &out_uint);
-  int64_t out_int64;
-  base::StringToInt64(string_piece_input, &out_int64);
-  uint64_t out_uint64;
-  base::StringToUint64(string_piece_input, &out_uint64);
-  size_t out_size;
-  base::StringToSizeT(string_piece_input, &out_size);
-
-  // Test for StringPiece16 if size is even.
-  if (size % 2 == 0) {
-    base::StringPiece16 string_piece_input16(
-        reinterpret_cast<const base::char16*>(data), size / 2);
-
-    base::StringToInt(string_piece_input16, &out_int);
-    base::StringToUint(string_piece_input16, &out_uint);
-    base::StringToInt64(string_piece_input16, &out_int64);
-    base::StringToUint64(string_piece_input16, &out_uint64);
-    base::StringToSizeT(string_piece_input16, &out_size);
-  }
-
-  double out_double;
-  base::StringToDouble(string_input, &out_double);
-
-  base::HexStringToInt(string_piece_input, &out_int);
-  base::HexStringToUInt(string_piece_input, &out_uint);
-  base::HexStringToInt64(string_piece_input, &out_int64);
-  base::HexStringToUInt64(string_piece_input, &out_uint64);
-  std::vector<uint8_t> out_bytes;
-  base::HexStringToBytes(string_piece_input, &out_bytes);
-
-  base::HexEncode(data, size);
-
-  // Convert the numbers back to strings.
-  base::NumberToString(out_int);
-  base::NumberToString16(out_int);
-  base::NumberToString(out_uint);
-  base::NumberToString16(out_uint);
-  base::NumberToString(out_int64);
-  base::NumberToString16(out_int64);
-  base::NumberToString(out_uint64);
-  base::NumberToString16(out_uint64);
-  base::NumberToString(out_double);
-  base::NumberToString16(out_double);
-
-  return 0;
-}
diff --git a/base/strings/string_tokenizer_fuzzer.cc b/base/strings/string_tokenizer_fuzzer.cc
deleted file mode 100644
index 917041b..0000000
--- a/base/strings/string_tokenizer_fuzzer.cc
+++ /dev/null
@@ -1,56 +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 <stddef.h>
-#include <stdint.h>
-
-#include <string>
-
-#include "base/strings/string_tokenizer.h"
-
-void GetAllTokens(base::StringTokenizer& t) {
-  while (t.GetNext()) {
-    (void)t.token();
-  }
-}
-
-// Entry point for LibFuzzer.
-extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
-  uint8_t size_t_bytes = sizeof(size_t);
-  if (size < size_t_bytes + 1) {
-    return 0;
-  }
-
-  // Calculate pattern size based on remaining bytes, otherwise fuzzing is
-  // inefficient with bailouts in most cases.
-  size_t pattern_size =
-      *reinterpret_cast<const size_t*>(data) % (size - size_t_bytes);
-
-  std::string pattern(reinterpret_cast<const char*>(data + size_t_bytes),
-                      pattern_size);
-  std::string input(
-      reinterpret_cast<const char*>(data + size_t_bytes + pattern_size),
-      size - pattern_size - size_t_bytes);
-
-  // Allow quote_chars and options to be set. Otherwise full coverage
-  // won't be possible since IsQuote, FullGetNext and other functions
-  // won't be called.
-  base::StringTokenizer t(input, pattern);
-  GetAllTokens(t);
-
-  base::StringTokenizer t_quote(input, pattern);
-  t_quote.set_quote_chars("\"");
-  GetAllTokens(t_quote);
-
-  base::StringTokenizer t_options(input, pattern);
-  t_options.set_options(base::StringTokenizer::RETURN_DELIMS);
-  GetAllTokens(t_options);
-
-  base::StringTokenizer t_quote_and_options(input, pattern);
-  t_quote_and_options.set_quote_chars("\"");
-  t_quote_and_options.set_options(base::StringTokenizer::RETURN_DELIMS);
-  GetAllTokens(t_quote_and_options);
-
-  return 0;
-}
diff --git a/base/strings/utf_string_conversions_fuzzer.cc b/base/strings/utf_string_conversions_fuzzer.cc
deleted file mode 100644
index 37d4be2..0000000
--- a/base/strings/utf_string_conversions_fuzzer.cc
+++ /dev/null
@@ -1,56 +0,0 @@
-// Copyright 2018 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/strings/string_util.h"
-#include "base/strings/utf_string_conversions.h"
-
-std::string output_std_string;
-std::wstring output_std_wstring;
-base::string16 output_string16;
-
-// Entry point for LibFuzzer.
-extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
-  base::StringPiece string_piece_input(reinterpret_cast<const char*>(data),
-                                       size);
-
-  base::UTF8ToWide(string_piece_input);
-  base::UTF8ToWide(reinterpret_cast<const char*>(data), size,
-                   &output_std_wstring);
-  base::UTF8ToUTF16(string_piece_input);
-  base::UTF8ToUTF16(reinterpret_cast<const char*>(data), size,
-                    &output_string16);
-
-  // Test for char16.
-  if (size % 2 == 0) {
-    base::StringPiece16 string_piece_input16(
-        reinterpret_cast<const base::char16*>(data), size / 2);
-    base::UTF16ToWide(output_string16);
-    base::UTF16ToWide(reinterpret_cast<const base::char16*>(data), size / 2,
-                      &output_std_wstring);
-    base::UTF16ToUTF8(string_piece_input16);
-    base::UTF16ToUTF8(reinterpret_cast<const base::char16*>(data), size / 2,
-                      &output_std_string);
-  }
-
-  // Test for wchar_t.
-  size_t wchar_t_size = sizeof(wchar_t);
-  if (size % wchar_t_size == 0) {
-    base::WideToUTF8(output_std_wstring);
-    base::WideToUTF8(reinterpret_cast<const wchar_t*>(data),
-                     size / wchar_t_size, &output_std_string);
-    base::WideToUTF16(output_std_wstring);
-    base::WideToUTF16(reinterpret_cast<const wchar_t*>(data),
-                      size / wchar_t_size, &output_string16);
-  }
-
-  // Test for ASCII. This condition is needed to avoid hitting instant CHECK
-  // failures.
-  if (base::IsStringASCII(string_piece_input)) {
-    output_string16 = base::ASCIIToUTF16(string_piece_input);
-    base::StringPiece16 string_piece_input16(output_string16);
-    base::UTF16ToASCII(string_piece_input16);
-  }
-
-  return 0;
-}
diff --git a/base/strings/utf_string_conversions_regression_fuzzer.cc b/base/strings/utf_string_conversions_regression_fuzzer.cc
deleted file mode 100644
index ca6b4a2..0000000
--- a/base/strings/utf_string_conversions_regression_fuzzer.cc
+++ /dev/null
@@ -1,105 +0,0 @@
-// Copyright (c) 2018 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/logging.h"
-#include "base/strings/old_utf_string_conversions.h"
-#include "base/strings/utf_string_conversions.h"
-
-namespace {
-
-void UTF8ToCheck(const uint8_t* data, size_t size) {
-  const auto* src = reinterpret_cast<const char*>(data);
-  const size_t src_len = size;
-
-  // UTF16
-  {
-    base::string16 new_out;
-    bool new_res = base::UTF8ToUTF16(src, src_len, &new_out);
-
-    base::string16 old_out;
-    bool old_res = base_old::UTF8ToUTF16(src, src_len, &old_out);
-
-    CHECK(new_res == old_res);
-    CHECK(new_out == old_out);
-  }
-
-  // Wide
-  {
-    std::wstring new_out;
-    bool new_res = base::UTF8ToWide(src, src_len, &new_out);
-
-    std::wstring old_out;
-    bool old_res = base_old::UTF8ToWide(src, src_len, &old_out);
-
-    CHECK(new_res == old_res);
-    CHECK(new_out == old_out);
-  }
-}
-
-void UTF16ToCheck(const uint8_t* data, size_t size) {
-  const auto* src = reinterpret_cast<const base::char16*>(data);
-  const size_t src_len = size / 2;
-
-  // UTF8
-  {
-    std::string new_out;
-    bool new_res = base::UTF16ToUTF8(src, src_len, &new_out);
-
-    std::string old_out;
-    bool old_res = base_old::UTF16ToUTF8(src, src_len, &old_out);
-
-    CHECK(new_res == old_res);
-    CHECK(new_out == old_out);
-  }
-
-  // Wide
-  {
-    std::wstring new_out;
-    bool new_res = base::UTF16ToWide(src, src_len, &new_out);
-
-    std::wstring old_out;
-    bool old_res = base_old::UTF16ToWide(src, src_len, &old_out);
-
-    CHECK(new_res == old_res);
-    CHECK(new_out == old_out);
-  }
-}
-
-void WideToCheck(const uint8_t* data, size_t size) {
-  const auto* src = reinterpret_cast<const wchar_t*>(data);
-  const size_t src_len = size / 4;  // It's OK even if Wide is 16bit.
-
-  // UTF8
-  {
-    std::string new_out;
-    bool new_res = base::WideToUTF8(src, src_len, &new_out);
-
-    std::string old_out;
-    bool old_res = base_old::WideToUTF8(src, src_len, &old_out);
-
-    CHECK(new_res == old_res);
-    CHECK(new_out == old_out);
-  }
-
-  // UTF16
-  {
-    base::string16 new_out;
-    bool new_res = base::WideToUTF16(src, src_len, &new_out);
-
-    base::string16 old_out;
-    bool old_res = base_old::WideToUTF16(src, src_len, &old_out);
-
-    CHECK(new_res == old_res);
-    CHECK(new_out == old_out);
-  }
-}
-
-}  // namespace
-
-extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
-  UTF8ToCheck(data, size);
-  UTF16ToCheck(data, size);
-  WideToCheck(data, size);
-  return 0;
-}
diff --git a/base/synchronization/atomic_flag.cc b/base/synchronization/atomic_flag.cc
deleted file mode 100644
index 6cc0e87..0000000
--- a/base/synchronization/atomic_flag.cc
+++ /dev/null
@@ -1,26 +0,0 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "base/synchronization/atomic_flag.h"
-
-#include "base/logging.h"
-
-namespace base {
-
-AtomicFlag::AtomicFlag() {
-}
-
-void AtomicFlag::Set() {
-  base::subtle::Release_Store(&flag_, 1);
-}
-
-bool AtomicFlag::IsSet() const {
-  return base::subtle::Acquire_Load(&flag_) != 0;
-}
-
-void AtomicFlag::UnsafeResetForTesting() {
-  base::subtle::Release_Store(&flag_, 0);
-}
-
-}  // namespace base
diff --git a/base/synchronization/atomic_flag.h b/base/synchronization/atomic_flag.h
deleted file mode 100644
index d033054..0000000
--- a/base/synchronization/atomic_flag.h
+++ /dev/null
@@ -1,42 +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.
-
-#ifndef BASE_SYNCHRONIZATION_ATOMIC_FLAG_H_
-#define BASE_SYNCHRONIZATION_ATOMIC_FLAG_H_
-
-#include "base/atomicops.h"
-#include "base/base_export.h"
-#include "base/macros.h"
-
-namespace base {
-
-// A flag that can safely be set from one thread and read from other threads.
-//
-// This class IS NOT intended for synchronization between threads.
-class BASE_EXPORT AtomicFlag {
- public:
-  AtomicFlag();
-  ~AtomicFlag() = default;
-
-  // Set the flag. Must always be called from the same sequence.
-  void Set();
-
-  // Returns true iff the flag was set. If this returns true, the current thread
-  // is guaranteed to be synchronized with all memory operations on the sequence
-  // which invoked Set() up until at least the first call to Set() on it.
-  bool IsSet() const;
-
-  // Resets the flag. Be careful when using this: callers might not expect
-  // IsSet() to return false after returning true once.
-  void UnsafeResetForTesting();
-
- private:
-  base::subtle::Atomic32 flag_ = 0;
-
-  DISALLOW_COPY_AND_ASSIGN(AtomicFlag);
-};
-
-}  // namespace base
-
-#endif  // BASE_SYNCHRONIZATION_ATOMIC_FLAG_H_
diff --git a/base/synchronization/cancellation_flag.h b/base/synchronization/cancellation_flag.h
deleted file mode 100644
index 39094e2..0000000
--- a/base/synchronization/cancellation_flag.h
+++ /dev/null
@@ -1,20 +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.
-
-#ifndef BASE_SYNCHRONIZATION_CANCELLATION_FLAG_H_
-#define BASE_SYNCHRONIZATION_CANCELLATION_FLAG_H_
-
-#include "base/synchronization/atomic_flag.h"
-
-namespace base {
-
-// Use inheritance instead of "using" to allow forward declaration of "class
-// CancellationFlag".
-// TODO(fdoray): Replace CancellationFlag with AtomicFlag throughout the
-// codebase and delete this file. crbug.com/630251
-class CancellationFlag : public AtomicFlag {};
-
-}  // namespace base
-
-#endif  // BASE_SYNCHRONIZATION_CANCELLATION_FLAG_H_
diff --git a/base/synchronization/spin_wait.h b/base/synchronization/spin_wait.h
deleted file mode 100644
index 9b147cd..0000000
--- a/base/synchronization/spin_wait.h
+++ /dev/null
@@ -1,50 +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.
-
-// This file provides a macro ONLY for use in testing.
-// DO NOT USE IN PRODUCTION CODE.  There are much better ways to wait.
-
-// This code is very helpful in testing multi-threaded code, without depending
-// on almost any primitives.  This is especially helpful if you are testing
-// those primitive multi-threaded constructs.
-
-// We provide a simple one argument spin wait (for 1 second), and a generic
-// spin wait (for longer periods of time).
-
-#ifndef BASE_SYNCHRONIZATION_SPIN_WAIT_H_
-#define BASE_SYNCHRONIZATION_SPIN_WAIT_H_
-
-#include "base/threading/platform_thread.h"
-#include "base/time/time.h"
-
-// Provide a macro that will wait no longer than 1 second for an asynchronous
-// change is the value of an expression.
-// A typical use would be:
-//
-//   SPIN_FOR_1_SECOND_OR_UNTIL_TRUE(0 == f(x));
-//
-// The expression will be evaluated repeatedly until it is true, or until
-// the time (1 second) expires.
-// Since tests generally have a 5 second watch dog timer, this spin loop is
-// typically used to get the padding needed on a given test platform to assure
-// that the test passes, even if load varies, and external events vary.
-
-#define SPIN_FOR_1_SECOND_OR_UNTIL_TRUE(expression) \
-    SPIN_FOR_TIMEDELTA_OR_UNTIL_TRUE(base::TimeDelta::FromSeconds(1), \
-                                     (expression))
-
-#define SPIN_FOR_TIMEDELTA_OR_UNTIL_TRUE(delta, expression) do { \
-  base::TimeTicks start = base::TimeTicks::Now(); \
-  const base::TimeDelta kTimeout = delta; \
-    while (!(expression)) { \
-      if (kTimeout < base::TimeTicks::Now() - start) { \
-      EXPECT_LE((base::TimeTicks::Now() - start).InMilliseconds(), \
-                kTimeout.InMilliseconds()) << "Timed out"; \
-        break; \
-      } \
-      base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(50)); \
-    } \
-  } while (0)
-
-#endif  // BASE_SYNCHRONIZATION_SPIN_WAIT_H_
diff --git a/base/synchronization/waitable_event_perftest.cc b/base/synchronization/waitable_event_perftest.cc
deleted file mode 100644
index 1888077..0000000
--- a/base/synchronization/waitable_event_perftest.cc
+++ /dev/null
@@ -1,178 +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/synchronization/waitable_event.h"
-
-#include <numeric>
-
-#include "base/threading/simple_thread.h"
-#include "testing/gtest/include/gtest/gtest.h"
-#include "testing/perf/perf_test.h"
-
-namespace base {
-
-namespace {
-
-class TraceWaitableEvent {
- public:
-  TraceWaitableEvent(size_t samples)
-      : event_(WaitableEvent::ResetPolicy::AUTOMATIC,
-               WaitableEvent::InitialState::NOT_SIGNALED),
-        samples_(samples) {
-    signal_times_.reserve(samples);
-    wait_times_.reserve(samples);
-  }
-
-  ~TraceWaitableEvent() = default;
-
-  void Signal() {
-    TimeTicks start = TimeTicks::Now();
-    event_.Signal();
-    signal_times_.push_back(TimeTicks::Now() - start);
-  }
-
-  void Wait() {
-    TimeTicks start = TimeTicks::Now();
-    event_.Wait();
-    wait_times_.push_back(TimeTicks::Now() - start);
-  }
-
-  bool TimedWaitUntil(const TimeTicks& end_time) {
-    TimeTicks start = TimeTicks::Now();
-    bool signaled = event_.TimedWaitUntil(end_time);
-    wait_times_.push_back(TimeTicks::Now() - start);
-    return signaled;
-  }
-
-  bool IsSignaled() { return event_.IsSignaled(); }
-
-  const std::vector<TimeDelta>& signal_times() const { return signal_times_; }
-  const std::vector<TimeDelta>& wait_times() const { return wait_times_; }
-  size_t samples() const { return samples_; }
-
- private:
-  WaitableEvent event_;
-
-  std::vector<TimeDelta> signal_times_;
-  std::vector<TimeDelta> wait_times_;
-
-  const size_t samples_;
-
-  DISALLOW_COPY_AND_ASSIGN(TraceWaitableEvent);
-};
-
-class SignalerThread : public SimpleThread {
- public:
-  SignalerThread(TraceWaitableEvent* waiter, TraceWaitableEvent* signaler)
-      : SimpleThread("WaitableEventPerfTest signaler"),
-        waiter_(waiter),
-        signaler_(signaler) {}
-
-  ~SignalerThread() override = default;
-
-  void Run() override {
-    while (!stop_event_.IsSignaled()) {
-      if (waiter_)
-        waiter_->Wait();
-      if (signaler_)
-        signaler_->Signal();
-    }
-  }
-
-  // Signals the thread to stop on the next iteration of its loop (which
-  // will happen immediately if no |waiter_| is present or is signaled.
-  void RequestStop() { stop_event_.Signal(); }
-
- private:
-  WaitableEvent stop_event_{WaitableEvent::ResetPolicy::MANUAL,
-                            WaitableEvent::InitialState::NOT_SIGNALED};
-  TraceWaitableEvent* waiter_;
-  TraceWaitableEvent* signaler_;
-  DISALLOW_COPY_AND_ASSIGN(SignalerThread);
-};
-
-void PrintPerfWaitableEvent(const TraceWaitableEvent* event,
-                            const std::string& modifier,
-                            const std::string& trace) {
-  TimeDelta signal_time = std::accumulate(
-      event->signal_times().begin(), event->signal_times().end(), TimeDelta());
-  TimeDelta wait_time = std::accumulate(event->wait_times().begin(),
-                                        event->wait_times().end(), TimeDelta());
-  perf_test::PrintResult(
-      "signal_time", modifier, trace,
-      static_cast<size_t>(signal_time.InNanoseconds()) / event->samples(),
-      "ns/sample", true);
-  perf_test::PrintResult(
-      "wait_time", modifier, trace,
-      static_cast<size_t>(wait_time.InNanoseconds()) / event->samples(),
-      "ns/sample", true);
-}
-
-}  // namespace
-
-TEST(WaitableEventPerfTest, SingleThread) {
-  const size_t kSamples = 1000;
-
-  TraceWaitableEvent event(kSamples);
-
-  for (size_t i = 0; i < kSamples; ++i) {
-    event.Signal();
-    event.Wait();
-  }
-
-  PrintPerfWaitableEvent(&event, "", "singlethread-1000-samples");
-}
-
-TEST(WaitableEventPerfTest, MultipleThreads) {
-  const size_t kSamples = 1000;
-
-  TraceWaitableEvent waiter(kSamples);
-  TraceWaitableEvent signaler(kSamples);
-
-  // The other thread will wait and signal on the respective opposite events.
-  SignalerThread thread(&signaler, &waiter);
-  thread.Start();
-
-  for (size_t i = 0; i < kSamples; ++i) {
-    signaler.Signal();
-    waiter.Wait();
-  }
-
-  // Signal the stop event and then make sure the signaler event it is
-  // waiting on is also signaled.
-  thread.RequestStop();
-  signaler.Signal();
-
-  thread.Join();
-
-  PrintPerfWaitableEvent(&waiter, "_waiter", "multithread-1000-samples");
-  PrintPerfWaitableEvent(&signaler, "_signaler", "multithread-1000-samples");
-}
-
-TEST(WaitableEventPerfTest, Throughput) {
-  // Reserve a lot of sample space.
-  const size_t kCapacity = 500000;
-  TraceWaitableEvent event(kCapacity);
-
-  SignalerThread thread(nullptr, &event);
-  thread.Start();
-
-  TimeTicks end_time = TimeTicks::Now() + TimeDelta::FromSeconds(1);
-  size_t count = 0;
-  while (event.TimedWaitUntil(end_time)) {
-    ++count;
-  }
-
-  thread.RequestStop();
-  thread.Join();
-
-  perf_test::PrintResult("counts", "", "throughput", count, "signals", true);
-  PrintPerfWaitableEvent(&event, "", "throughput");
-
-  // Make sure that allocation didn't happen during the test.
-  EXPECT_LE(event.signal_times().capacity(), kCapacity);
-  EXPECT_LE(event.wait_times().capacity(), kCapacity);
-}
-
-}  // namespace base
diff --git a/base/task/OWNERS b/base/task/OWNERS
deleted file mode 100644
index 0f3ad5e..0000000
--- a/base/task/OWNERS
+++ /dev/null
@@ -1,6 +0,0 @@
-fdoray@chromium.org
-gab@chromium.org
-robliao@chromium.org
-
-# TEAM: scheduler-dev@chromium.org
-# COMPONENT: Internals>TaskScheduler
diff --git a/base/task/README.md b/base/task/README.md
deleted file mode 100644
index 0db116a..0000000
--- a/base/task/README.md
+++ /dev/null
@@ -1,12 +0,0 @@
-This directory has the following layout (WIP):
-- base/task/: public APIs for posting tasks and managing task queues.
-- base/task/task_scheduler/: implementation of the TaskScheduler.
-- base/task/sequence_manager/: implementation of the SequenceManager.
-
-Apart from embedders explicitly managing a TaskScheduler and/or SequenceManager
-instance(s) for their process/threads, the vast majority of users should only
-need APIs in base/task/.
-
-Documentation:
-- [Threading and tasks](https://chromium.googlesource.com/chromium/src/+/lkcr/docs/threading_and_tasks.md)
-- [Callbacks](https://chromium.googlesource.com/chromium/src/+/lkcr/docs/callback.md)
diff --git a/base/task/cancelable_task_tracker.cc b/base/task/cancelable_task_tracker.cc
deleted file mode 100644
index f304da8..0000000
--- a/base/task/cancelable_task_tracker.cc
+++ /dev/null
@@ -1,176 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "base/task/cancelable_task_tracker.h"
-
-#include <stddef.h>
-
-#include <utility>
-
-#include "base/bind.h"
-#include "base/bind_helpers.h"
-#include "base/callback_helpers.h"
-#include "base/location.h"
-#include "base/memory/ref_counted.h"
-#include "base/synchronization/cancellation_flag.h"
-#include "base/task_runner.h"
-#include "base/threading/sequenced_task_runner_handle.h"
-
-namespace base {
-
-namespace {
-
-void RunIfNotCanceled(const CancellationFlag* flag, OnceClosure task) {
-  if (!flag->IsSet())
-    std::move(task).Run();
-}
-
-void RunIfNotCanceledThenUntrack(const CancellationFlag* flag,
-                                 OnceClosure task,
-                                 OnceClosure untrack) {
-  RunIfNotCanceled(flag, std::move(task));
-  std::move(untrack).Run();
-}
-
-bool IsCanceled(const CancellationFlag* flag,
-                ScopedClosureRunner* cleanup_runner) {
-  return flag->IsSet();
-}
-
-void RunAndDeleteFlag(OnceClosure closure, const CancellationFlag* flag) {
-  std::move(closure).Run();
-  delete flag;
-}
-
-void RunOrPostToTaskRunner(TaskRunner* task_runner, OnceClosure closure) {
-  if (task_runner->RunsTasksInCurrentSequence())
-    std::move(closure).Run();
-  else
-    task_runner->PostTask(FROM_HERE, std::move(closure));
-}
-
-}  // namespace
-
-// static
-const CancelableTaskTracker::TaskId CancelableTaskTracker::kBadTaskId = 0;
-
-CancelableTaskTracker::CancelableTaskTracker()
-    : next_id_(1),weak_factory_(this) {}
-
-CancelableTaskTracker::~CancelableTaskTracker() {
-  DCHECK(sequence_checker_.CalledOnValidSequence());
-
-  TryCancelAll();
-}
-
-CancelableTaskTracker::TaskId CancelableTaskTracker::PostTask(
-    TaskRunner* task_runner,
-    const Location& from_here,
-    OnceClosure task) {
-  DCHECK(sequence_checker_.CalledOnValidSequence());
-
-  return PostTaskAndReply(task_runner, from_here, std::move(task), DoNothing());
-}
-
-CancelableTaskTracker::TaskId CancelableTaskTracker::PostTaskAndReply(
-    TaskRunner* task_runner,
-    const Location& from_here,
-    OnceClosure task,
-    OnceClosure reply) {
-  DCHECK(sequence_checker_.CalledOnValidSequence());
-
-  // We need a SequencedTaskRunnerHandle to run |reply|.
-  DCHECK(SequencedTaskRunnerHandle::IsSet());
-
-  // Owned by reply callback below.
-  CancellationFlag* flag = new CancellationFlag();
-
-  TaskId id = next_id_;
-  next_id_++;  // int64_t is big enough that we ignore the potential overflow.
-
-  OnceClosure untrack_closure =
-      BindOnce(&CancelableTaskTracker::Untrack, weak_factory_.GetWeakPtr(), id);
-  bool success = task_runner->PostTaskAndReply(
-      from_here, BindOnce(&RunIfNotCanceled, flag, std::move(task)),
-      BindOnce(&RunIfNotCanceledThenUntrack, Owned(flag), std::move(reply),
-               std::move(untrack_closure)));
-
-  if (!success)
-    return kBadTaskId;
-
-  Track(id, flag);
-  return id;
-}
-
-CancelableTaskTracker::TaskId CancelableTaskTracker::NewTrackedTaskId(
-    IsCanceledCallback* is_canceled_cb) {
-  DCHECK(sequence_checker_.CalledOnValidSequence());
-  DCHECK(SequencedTaskRunnerHandle::IsSet());
-
-  TaskId id = next_id_;
-  next_id_++;  // int64_t is big enough that we ignore the potential overflow.
-
-  // Will be deleted by |untrack_and_delete_flag| after Untrack().
-  CancellationFlag* flag = new CancellationFlag();
-
-  OnceClosure untrack_and_delete_flag = BindOnce(
-      &RunAndDeleteFlag,
-      BindOnce(&CancelableTaskTracker::Untrack, weak_factory_.GetWeakPtr(), id),
-      flag);
-
-  // Will always run |untrack_and_delete_flag| on current sequence.
-  ScopedClosureRunner* untrack_and_delete_flag_runner =
-      new ScopedClosureRunner(BindOnce(
-          &RunOrPostToTaskRunner, RetainedRef(SequencedTaskRunnerHandle::Get()),
-          std::move(untrack_and_delete_flag)));
-
-  *is_canceled_cb =
-      Bind(&IsCanceled, flag, Owned(untrack_and_delete_flag_runner));
-
-  Track(id, flag);
-  return id;
-}
-
-void CancelableTaskTracker::TryCancel(TaskId id) {
-  DCHECK(sequence_checker_.CalledOnValidSequence());
-
-  const auto it = task_flags_.find(id);
-  if (it == task_flags_.end()) {
-    // Two possibilities:
-    //
-    //   1. The task has already been untracked.
-    //   2. The TaskId is bad or unknown.
-    //
-    // Since this function is best-effort, it's OK to ignore these.
-    return;
-  }
-  it->second->Set();
-}
-
-void CancelableTaskTracker::TryCancelAll() {
-  DCHECK(sequence_checker_.CalledOnValidSequence());
-  for (const auto& it : task_flags_)
-    it.second->Set();
-  weak_factory_.InvalidateWeakPtrs();
-  task_flags_.clear();
-}
-
-bool CancelableTaskTracker::HasTrackedTasks() const {
-  DCHECK(sequence_checker_.CalledOnValidSequence());
-  return !task_flags_.empty();
-}
-
-void CancelableTaskTracker::Track(TaskId id, CancellationFlag* flag) {
-  DCHECK(sequence_checker_.CalledOnValidSequence());
-  bool success = task_flags_.insert(std::make_pair(id, flag)).second;
-  DCHECK(success);
-}
-
-void CancelableTaskTracker::Untrack(TaskId id) {
-  DCHECK(sequence_checker_.CalledOnValidSequence());
-  size_t num = task_flags_.erase(id);
-  DCHECK_EQ(1u, num);
-}
-
-}  // namespace base
diff --git a/base/task/cancelable_task_tracker.h b/base/task/cancelable_task_tracker.h
deleted file mode 100644
index e5e6b5e..0000000
--- a/base/task/cancelable_task_tracker.h
+++ /dev/null
@@ -1,158 +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.
-
-// CancelableTaskTracker posts tasks (in the form of a Closure) to a
-// TaskRunner, and is able to cancel the task later if it's not needed
-// anymore.  On destruction, CancelableTaskTracker will cancel all
-// tracked tasks.
-//
-// Each cancelable task can be associated with a reply (also a Closure). After
-// the task is run on the TaskRunner, |reply| will be posted back to
-// originating TaskRunner.
-//
-// NOTE:
-//
-// CancelableCallback (base/cancelable_callback.h) and WeakPtr binding are
-// preferred solutions for canceling a task. However, they don't support
-// cancelation from another sequence. This is sometimes a performance critical
-// requirement. E.g. We need to cancel database lookup task on DB thread when
-// user changes inputed text. If it is performance critical to do a best effort
-// cancelation of a task, then CancelableTaskTracker is appropriate, otherwise
-// use one of the other mechanisms.
-//
-// THREAD-SAFETY:
-//
-// 1. A CancelableTaskTracker object must be created, used, and destroyed on a
-//    single sequence.
-//
-// 2. It's safe to destroy a CancelableTaskTracker while there are outstanding
-//    tasks. This is commonly used to cancel all outstanding tasks.
-//
-// 3. The task is deleted on the target sequence, and the reply are deleted on
-//    the originating sequence.
-//
-// 4. IsCanceledCallback can be run or deleted on any sequence.
-#ifndef BASE_TASK_CANCELABLE_TASK_TRACKER_H_
-#define BASE_TASK_CANCELABLE_TASK_TRACKER_H_
-
-#include <stdint.h>
-
-#include <utility>
-
-#include "base/base_export.h"
-#include "base/bind.h"
-#include "base/callback.h"
-#include "base/containers/small_map.h"
-#include "base/macros.h"
-#include "base/memory/weak_ptr.h"
-#include "base/post_task_and_reply_with_result_internal.h"
-#include "base/sequence_checker.h"
-
-namespace base {
-
-class CancellationFlag;
-class Location;
-class TaskRunner;
-
-class BASE_EXPORT CancelableTaskTracker {
- public:
-  // All values except kBadTaskId are valid.
-  typedef int64_t TaskId;
-  static const TaskId kBadTaskId;
-
-  typedef Callback<bool()> IsCanceledCallback;
-
-  CancelableTaskTracker();
-
-  // Cancels all tracked tasks.
-  ~CancelableTaskTracker();
-
-  TaskId PostTask(TaskRunner* task_runner,
-                  const Location& from_here,
-                  OnceClosure task);
-
-  TaskId PostTaskAndReply(TaskRunner* task_runner,
-                          const Location& from_here,
-                          OnceClosure task,
-                          OnceClosure reply);
-
-  template <typename TaskReturnType, typename ReplyArgType>
-  TaskId PostTaskAndReplyWithResult(TaskRunner* task_runner,
-                                    const Location& from_here,
-                                    OnceCallback<TaskReturnType()> task,
-                                    OnceCallback<void(ReplyArgType)> reply) {
-    TaskReturnType* result = new TaskReturnType();
-    return PostTaskAndReply(
-        task_runner, from_here,
-        BindOnce(&internal::ReturnAsParamAdapter<TaskReturnType>,
-                 std::move(task), Unretained(result)),
-        BindOnce(&internal::ReplyAdapter<TaskReturnType, ReplyArgType>,
-                 std::move(reply), Owned(result)));
-  }
-
-  // Callback version of PostTaskWithTraitsAndReplyWithResult above.
-  // Though RepeatingCallback is convertible to OnceCallback, we need this since
-  // we can not use template deduction and object conversion at once on the
-  // overload resolution.
-  // TODO(tzik): Update all callers of the Callback version to use OnceCallback.
-  template <typename TaskReturnType, typename ReplyArgType>
-  TaskId PostTaskAndReplyWithResult(TaskRunner* task_runner,
-                                    const Location& from_here,
-                                    Callback<TaskReturnType()> task,
-                                    Callback<void(ReplyArgType)> reply) {
-    return PostTaskAndReplyWithResult(
-        task_runner, from_here,
-        static_cast<OnceCallback<TaskReturnType()>>(std::move(task)),
-        static_cast<OnceCallback<void(ReplyArgType)>>(std::move(reply)));
-  }
-
-  // Creates a tracked TaskId and an associated IsCanceledCallback. Client can
-  // later call TryCancel() with the returned TaskId, and run |is_canceled_cb|
-  // from any thread to check whether the TaskId is canceled.
-  //
-  // The returned task ID is tracked until the last copy of
-  // |is_canceled_cb| is destroyed.
-  //
-  // Note. This function is used to address some special cancelation requirement
-  // in existing code. You SHOULD NOT need this function in new code.
-  TaskId NewTrackedTaskId(IsCanceledCallback* is_canceled_cb);
-
-  // After calling this function, |task| and |reply| will not run. If the
-  // cancelation happens when |task| is running or has finished running, |reply|
-  // will not run. If |reply| is running or has finished running, cancellation
-  // is a noop.
-  //
-  // Note. It's OK to cancel a |task| for more than once. The later calls are
-  // noops.
-  void TryCancel(TaskId id);
-
-  // It's OK to call this function for more than once. The later calls are
-  // noops.
-  void TryCancelAll();
-
-  // Returns true iff there are in-flight tasks that are still being
-  // tracked.
-  bool HasTrackedTasks() const;
-
- private:
-  void Track(TaskId id, CancellationFlag* flag);
-  void Untrack(TaskId id);
-
-  // Typically the number of tasks are 0-2 and occationally 3-4. But since
-  // this is a general API that could be used in unexpected ways, use a
-  // small_map instead of a flat_map to avoid falling over if there are many
-  // tasks.
-  small_map<std::map<TaskId, CancellationFlag*>, 4> task_flags_;
-
-  TaskId next_id_;
-  SequenceChecker sequence_checker_;
-
-  WeakPtrFactory<CancelableTaskTracker> weak_factory_;
-
-  DISALLOW_COPY_AND_ASSIGN(CancelableTaskTracker);
-};
-
-}  // namespace base
-
-#endif  // BASE_TASK_CANCELABLE_TASK_TRACKER_H_
diff --git a/base/task/sequence_manager/OWNERS b/base/task/sequence_manager/OWNERS
deleted file mode 100644
index ac6eae8..0000000
--- a/base/task/sequence_manager/OWNERS
+++ /dev/null
@@ -1,6 +0,0 @@
-altimin@chromium.org
-alexclarke@chromium.org
-skyostil@chromium.org
-
-# TEAM: scheduler-dev@chromium.org
-# Component: Blink>Scheduling
diff --git a/base/task/task_scheduler/OWNERS b/base/task/task_scheduler/OWNERS
deleted file mode 100644
index 0f3ad5e..0000000
--- a/base/task/task_scheduler/OWNERS
+++ /dev/null
@@ -1,6 +0,0 @@
-fdoray@chromium.org
-gab@chromium.org
-robliao@chromium.org
-
-# TEAM: scheduler-dev@chromium.org
-# COMPONENT: Internals>TaskScheduler
diff --git a/base/third_party/nspr/LICENSE b/base/third_party/nspr/LICENSE
deleted file mode 100644
index eba7b77..0000000
--- a/base/third_party/nspr/LICENSE
+++ /dev/null
@@ -1,35 +0,0 @@
-/* ***** BEGIN LICENSE BLOCK *****
- * Version: MPL 1.1/GPL 2.0/LGPL 2.1
- *
- * The contents of this file are subject to the Mozilla Public License Version
- * 1.1 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- * http://www.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- * for the specific language governing rights and limitations under the
- * License.
- *
- * The Original Code is the Netscape Portable Runtime (NSPR).
- *
- * The Initial Developer of the Original Code is
- * Netscape Communications Corporation.
- * Portions created by the Initial Developer are Copyright (C) 1998-2000
- * the Initial Developer. All Rights Reserved.
- *
- * Contributor(s):
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either the GNU General Public License Version 2 or later (the "GPL"), or
- * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- * in which case the provisions of the GPL or the LGPL are applicable instead
- * of those above. If you wish to allow use of your version of this file only
- * under the terms of either the GPL or the LGPL, and not to allow others to
- * use your version of this file under the terms of the MPL, indicate your
- * decision by deleting the provisions above and replace them with the notice
- * and other provisions required by the GPL or the LGPL. If you do not delete
- * the provisions above, a recipient may use your version of this file under
- * the terms of any one of the MPL, the GPL or the LGPL.
- *
- * ***** END LICENSE BLOCK ***** */
diff --git a/base/third_party/nspr/OWNERS b/base/third_party/nspr/OWNERS
deleted file mode 100644
index 20ba660..0000000
--- a/base/third_party/nspr/OWNERS
+++ /dev/null
@@ -1,2 +0,0 @@
-rsleevi@chromium.org
-wtc@chromium.org
diff --git a/base/third_party/nspr/README.chromium b/base/third_party/nspr/README.chromium
deleted file mode 100644
index 3659a2c..0000000
--- a/base/third_party/nspr/README.chromium
+++ /dev/null
@@ -1,3 +0,0 @@
-Name: Netscape Portable Runtime (NSPR)
-URL: http://www.mozilla.org/projects/nspr/
-License: MPL 1.1/GPL 2.0/LGPL 2.1
diff --git a/base/third_party/nspr/prtime.cc b/base/third_party/nspr/prtime.cc
deleted file mode 100644
index 8a3f7c0..0000000
--- a/base/third_party/nspr/prtime.cc
+++ /dev/null
@@ -1,1186 +0,0 @@
-/* Portions are Copyright (C) 2011 Google Inc */
-/* ***** BEGIN LICENSE BLOCK *****
- * Version: MPL 1.1/GPL 2.0/LGPL 2.1
- *
- * The contents of this file are subject to the Mozilla Public License Version
- * 1.1 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- * http://www.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- * for the specific language governing rights and limitations under the
- * License.
- *
- * The Original Code is the Netscape Portable Runtime (NSPR).
- *
- * The Initial Developer of the Original Code is
- * Netscape Communications Corporation.
- * Portions created by the Initial Developer are Copyright (C) 1998-2000
- * the Initial Developer. All Rights Reserved.
- *
- * Contributor(s):
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either the GNU General Public License Version 2 or later (the "GPL"), or
- * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- * in which case the provisions of the GPL or the LGPL are applicable instead
- * of those above. If you wish to allow use of your version of this file only
- * under the terms of either the GPL or the LGPL, and not to allow others to
- * use your version of this file under the terms of the MPL, indicate your
- * decision by deleting the provisions above and replace them with the notice
- * and other provisions required by the GPL or the LGPL. If you do not delete
- * the provisions above, a recipient may use your version of this file under
- * the terms of any one of the MPL, the GPL or the LGPL.
- *
- * ***** END LICENSE BLOCK ***** */
-
-/*
- * prtime.cc --
- * NOTE: The original nspr file name is prtime.c
- *
- *     NSPR date and time functions
- *
- * CVS revision 3.37
- */
-
-/*
- * The following functions were copied from the NSPR prtime.c file.
- * PR_ParseTimeString
- *   We inlined the new PR_ParseTimeStringToExplodedTime function to avoid
- *   copying PR_ExplodeTime and PR_LocalTimeParameters.  (The PR_ExplodeTime
- *   and PR_ImplodeTime calls cancel each other out.)
- * PR_NormalizeTime
- * PR_GMTParameters
- * PR_ImplodeTime
- *   Upstream implementation from
- *   http://lxr.mozilla.org/nspr/source/pr/src/misc/prtime.c#221
- * All types and macros are defined in the base/third_party/prtime.h file.
- * These have been copied from the following nspr files. We have only copied
- * over the types we need.
- * 1. prtime.h
- * 2. prtypes.h
- * 3. prlong.h
- *
- * Unit tests are in base/time/pr_time_unittest.cc.
- */
-
-#include <limits.h>
-
-#include "base/logging.h"
-#include "base/third_party/nspr/prtime.h"
-#include "build_config.h"
-
-#include <errno.h>  /* for EINVAL */
-#include <time.h>
-
-/*
- * The COUNT_LEAPS macro counts the number of leap years passed by
- * till the start of the given year Y.  At the start of the year 4
- * A.D. the number of leap years passed by is 0, while at the start of
- * the year 5 A.D. this count is 1. The number of years divisible by
- * 100 but not divisible by 400 (the non-leap years) is deducted from
- * the count to get the correct number of leap years.
- *
- * The COUNT_DAYS macro counts the number of days since 01/01/01 till the
- * start of the given year Y. The number of days at the start of the year
- * 1 is 0 while the number of days at the start of the year 2 is 365
- * (which is ((2)-1) * 365) and so on. The reference point is 01/01/01
- * midnight 00:00:00.
- */
-
-#define COUNT_LEAPS(Y) (((Y)-1) / 4 - ((Y)-1) / 100 + ((Y)-1) / 400)
-#define COUNT_DAYS(Y) (((Y)-1) * 365 + COUNT_LEAPS(Y))
-#define DAYS_BETWEEN_YEARS(A, B) (COUNT_DAYS(B) - COUNT_DAYS(A))
-
-/* Implements the Unix localtime_r() function for windows */
-#if defined(OS_WIN)
-static void localtime_r(const time_t* secs, struct tm* time) {
-  (void) localtime_s(time, secs);
-}
-#endif
-
-/*
- * Static variables used by functions in this file
- */
-
-/*
- * The following array contains the day of year for the last day of
- * each month, where index 1 is January, and day 0 is January 1.
- */
-
-static const int lastDayOfMonth[2][13] = {
-    {-1, 30, 58, 89, 119, 150, 180, 211, 242, 272, 303, 333, 364},
-    {-1, 30, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365}
-};
-
-/*
- * The number of days in a month
- */
-
-static const PRInt8 nDays[2][12] = {
-    {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
-    {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
-};
-
-/*
- *------------------------------------------------------------------------
- *
- * PR_ImplodeTime --
- *
- *     Cf. time_t mktime(struct tm *tp)
- *     Note that 1 year has < 2^25 seconds.  So an PRInt32 is large enough.
- *
- *------------------------------------------------------------------------
- */
-PRTime
-PR_ImplodeTime(const PRExplodedTime *exploded)
-{
-  PRExplodedTime copy;
-  PRTime retVal;
-  PRInt64 secPerDay, usecPerSec;
-  PRInt64 temp;
-  PRInt64 numSecs64;
-  PRInt32 numDays;
-  PRInt32 numSecs;
-
-  /* Normalize first.  Do this on our copy */
-  copy = *exploded;
-  PR_NormalizeTime(&copy, PR_GMTParameters);
-
-  numDays = DAYS_BETWEEN_YEARS(1970, copy.tm_year);
-
-  numSecs = copy.tm_yday * 86400 + copy.tm_hour * 3600 + copy.tm_min * 60 +
-            copy.tm_sec;
-
-  LL_I2L(temp, numDays);
-  LL_I2L(secPerDay, 86400);
-  LL_MUL(temp, temp, secPerDay);
-  LL_I2L(numSecs64, numSecs);
-  LL_ADD(numSecs64, numSecs64, temp);
-
-  /* apply the GMT and DST offsets */
-  LL_I2L(temp, copy.tm_params.tp_gmt_offset);
-  LL_SUB(numSecs64, numSecs64, temp);
-  LL_I2L(temp, copy.tm_params.tp_dst_offset);
-  LL_SUB(numSecs64, numSecs64, temp);
-
-  LL_I2L(usecPerSec, 1000000L);
-  LL_MUL(temp, numSecs64, usecPerSec);
-  LL_I2L(retVal, copy.tm_usec);
-  LL_ADD(retVal, retVal, temp);
-
-  return retVal;
-}
-
-/*
- *-------------------------------------------------------------------------
- *
- * IsLeapYear --
- *
- *     Returns 1 if the year is a leap year, 0 otherwise.
- *
- *-------------------------------------------------------------------------
- */
-
-static int IsLeapYear(PRInt16 year)
-{
-    if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
-        return 1;
-    else
-        return 0;
-}
-
-/*
- * 'secOffset' should be less than 86400 (i.e., a day).
- * 'time' should point to a normalized PRExplodedTime.
- */
-
-static void
-ApplySecOffset(PRExplodedTime *time, PRInt32 secOffset)
-{
-    time->tm_sec += secOffset;
-
-    /* Note that in this implementation we do not count leap seconds */
-    if (time->tm_sec < 0 || time->tm_sec >= 60) {
-        time->tm_min += time->tm_sec / 60;
-        time->tm_sec %= 60;
-        if (time->tm_sec < 0) {
-            time->tm_sec += 60;
-            time->tm_min--;
-        }
-    }
-
-    if (time->tm_min < 0 || time->tm_min >= 60) {
-        time->tm_hour += time->tm_min / 60;
-        time->tm_min %= 60;
-        if (time->tm_min < 0) {
-            time->tm_min += 60;
-            time->tm_hour--;
-        }
-    }
-
-    if (time->tm_hour < 0) {
-        /* Decrement mday, yday, and wday */
-        time->tm_hour += 24;
-        time->tm_mday--;
-        time->tm_yday--;
-        if (time->tm_mday < 1) {
-            time->tm_month--;
-            if (time->tm_month < 0) {
-                time->tm_month = 11;
-                time->tm_year--;
-                if (IsLeapYear(time->tm_year))
-                    time->tm_yday = 365;
-                else
-                    time->tm_yday = 364;
-            }
-            time->tm_mday = nDays[IsLeapYear(time->tm_year)][time->tm_month];
-        }
-        time->tm_wday--;
-        if (time->tm_wday < 0)
-            time->tm_wday = 6;
-    } else if (time->tm_hour > 23) {
-        /* Increment mday, yday, and wday */
-        time->tm_hour -= 24;
-        time->tm_mday++;
-        time->tm_yday++;
-        if (time->tm_mday >
-                nDays[IsLeapYear(time->tm_year)][time->tm_month]) {
-            time->tm_mday = 1;
-            time->tm_month++;
-            if (time->tm_month > 11) {
-                time->tm_month = 0;
-                time->tm_year++;
-                time->tm_yday = 0;
-            }
-        }
-        time->tm_wday++;
-        if (time->tm_wday > 6)
-            time->tm_wday = 0;
-    }
-}
-
-void
-PR_NormalizeTime(PRExplodedTime *time, PRTimeParamFn params)
-{
-    int daysInMonth;
-    PRInt32 numDays;
-
-    /* Get back to GMT */
-    time->tm_sec -= time->tm_params.tp_gmt_offset
-            + time->tm_params.tp_dst_offset;
-    time->tm_params.tp_gmt_offset = 0;
-    time->tm_params.tp_dst_offset = 0;
-
-    /* Now normalize GMT */
-
-    if (time->tm_usec < 0 || time->tm_usec >= 1000000) {
-        time->tm_sec +=  time->tm_usec / 1000000;
-        time->tm_usec %= 1000000;
-        if (time->tm_usec < 0) {
-            time->tm_usec += 1000000;
-            time->tm_sec--;
-        }
-    }
-
-    /* Note that we do not count leap seconds in this implementation */
-    if (time->tm_sec < 0 || time->tm_sec >= 60) {
-        time->tm_min += time->tm_sec / 60;
-        time->tm_sec %= 60;
-        if (time->tm_sec < 0) {
-            time->tm_sec += 60;
-            time->tm_min--;
-        }
-    }
-
-    if (time->tm_min < 0 || time->tm_min >= 60) {
-        time->tm_hour += time->tm_min / 60;
-        time->tm_min %= 60;
-        if (time->tm_min < 0) {
-            time->tm_min += 60;
-            time->tm_hour--;
-        }
-    }
-
-    if (time->tm_hour < 0 || time->tm_hour >= 24) {
-        time->tm_mday += time->tm_hour / 24;
-        time->tm_hour %= 24;
-        if (time->tm_hour < 0) {
-            time->tm_hour += 24;
-            time->tm_mday--;
-        }
-    }
-
-    /* Normalize month and year before mday */
-    if (time->tm_month < 0 || time->tm_month >= 12) {
-        time->tm_year += static_cast<PRInt16>(time->tm_month / 12);
-        time->tm_month %= 12;
-        if (time->tm_month < 0) {
-            time->tm_month += 12;
-            time->tm_year--;
-        }
-    }
-
-    /* Now that month and year are in proper range, normalize mday */
-
-    if (time->tm_mday < 1) {
-        /* mday too small */
-        do {
-            /* the previous month */
-            time->tm_month--;
-            if (time->tm_month < 0) {
-                time->tm_month = 11;
-                time->tm_year--;
-            }
-            time->tm_mday += nDays[IsLeapYear(time->tm_year)][time->tm_month];
-        } while (time->tm_mday < 1);
-    } else {
-        daysInMonth = nDays[IsLeapYear(time->tm_year)][time->tm_month];
-        while (time->tm_mday > daysInMonth) {
-            /* mday too large */
-            time->tm_mday -= daysInMonth;
-            time->tm_month++;
-            if (time->tm_month > 11) {
-                time->tm_month = 0;
-                time->tm_year++;
-            }
-            daysInMonth = nDays[IsLeapYear(time->tm_year)][time->tm_month];
-        }
-    }
-
-    /* Recompute yday and wday */
-    time->tm_yday = static_cast<PRInt16>(time->tm_mday +
-            lastDayOfMonth[IsLeapYear(time->tm_year)][time->tm_month]);
-
-    numDays = DAYS_BETWEEN_YEARS(1970, time->tm_year) + time->tm_yday;
-    time->tm_wday = (numDays + 4) % 7;
-    if (time->tm_wday < 0) {
-        time->tm_wday += 7;
-    }
-
-    /* Recompute time parameters */
-
-    time->tm_params = params(time);
-
-    ApplySecOffset(time, time->tm_params.tp_gmt_offset
-            + time->tm_params.tp_dst_offset);
-}
-
-/*
- *------------------------------------------------------------------------
- *
- * PR_GMTParameters --
- *
- *     Returns the PRTimeParameters for Greenwich Mean Time.
- *     Trivially, both the tp_gmt_offset and tp_dst_offset fields are 0.
- *
- *------------------------------------------------------------------------
- */
-
-PRTimeParameters
-PR_GMTParameters(const PRExplodedTime *gmt)
-{
-    PRTimeParameters retVal = { 0, 0 };
-    return retVal;
-}
-
-/*
- * The following code implements PR_ParseTimeString().  It is based on
- * ns/lib/xp/xp_time.c, revision 1.25, by Jamie Zawinski <jwz@netscape.com>.
- */
-
-/*
- * We only recognize the abbreviations of a small subset of time zones
- * in North America, Europe, and Japan.
- *
- * PST/PDT: Pacific Standard/Daylight Time
- * MST/MDT: Mountain Standard/Daylight Time
- * CST/CDT: Central Standard/Daylight Time
- * EST/EDT: Eastern Standard/Daylight Time
- * AST: Atlantic Standard Time
- * NST: Newfoundland Standard Time
- * GMT: Greenwich Mean Time
- * BST: British Summer Time
- * MET: Middle Europe Time
- * EET: Eastern Europe Time
- * JST: Japan Standard Time
- */
-
-typedef enum
-{
-  TT_UNKNOWN,
-
-  TT_SUN, TT_MON, TT_TUE, TT_WED, TT_THU, TT_FRI, TT_SAT,
-
-  TT_JAN, TT_FEB, TT_MAR, TT_APR, TT_MAY, TT_JUN,
-  TT_JUL, TT_AUG, TT_SEP, TT_OCT, TT_NOV, TT_DEC,
-
-  TT_PST, TT_PDT, TT_MST, TT_MDT, TT_CST, TT_CDT, TT_EST, TT_EDT,
-  TT_AST, TT_NST, TT_GMT, TT_BST, TT_MET, TT_EET, TT_JST
-} TIME_TOKEN;
-
-/*
- * This parses a time/date string into a PRTime
- * (microseconds after "1-Jan-1970 00:00:00 GMT").
- * It returns PR_SUCCESS on success, and PR_FAILURE
- * if the time/date string can't be parsed.
- *
- * Many formats are handled, including:
- *
- *   14 Apr 89 03:20:12
- *   14 Apr 89 03:20 GMT
- *   Fri, 17 Mar 89 4:01:33
- *   Fri, 17 Mar 89 4:01 GMT
- *   Mon Jan 16 16:12 PDT 1989
- *   Mon Jan 16 16:12 +0130 1989
- *   6 May 1992 16:41-JST (Wednesday)
- *   22-AUG-1993 10:59:12.82
- *   22-AUG-1993 10:59pm
- *   22-AUG-1993 12:59am
- *   22-AUG-1993 12:59 PM
- *   Friday, August 04, 1995 3:54 PM
- *   06/21/95 04:24:34 PM
- *   20/06/95 21:07
- *   95-06-08 19:32:48 EDT
- *   1995-06-17T23:11:25.342156Z
- *
- * If the input string doesn't contain a description of the timezone,
- * we consult the `default_to_gmt' to decide whether the string should
- * be interpreted relative to the local time zone (PR_FALSE) or GMT (PR_TRUE).
- * The correct value for this argument depends on what standard specified
- * the time string which you are parsing.
- */
-
-PRStatus
-PR_ParseTimeString(
-        const char *string,
-        PRBool default_to_gmt,
-        PRTime *result_imploded)
-{
-  PRExplodedTime tm;
-  PRExplodedTime *result = &tm;
-  TIME_TOKEN dotw = TT_UNKNOWN;
-  TIME_TOKEN month = TT_UNKNOWN;
-  TIME_TOKEN zone = TT_UNKNOWN;
-  int zone_offset = -1;
-  int dst_offset = 0;
-  int date = -1;
-  PRInt32 year = -1;
-  int hour = -1;
-  int min = -1;
-  int sec = -1;
-  int usec = -1;
-
-  const char *rest = string;
-
-  int iterations = 0;
-
-  PR_ASSERT(string && result);
-  if (!string || !result) return PR_FAILURE;
-
-  while (*rest)
-        {
-
-          if (iterations++ > 1000)
-                {
-                  return PR_FAILURE;
-                }
-
-          switch (*rest)
-                {
-                case 'a': case 'A':
-                  if (month == TT_UNKNOWN &&
-                          (rest[1] == 'p' || rest[1] == 'P') &&
-                          (rest[2] == 'r' || rest[2] == 'R'))
-                        month = TT_APR;
-                  else if (zone == TT_UNKNOWN &&
-                                   (rest[1] == 's' || rest[1] == 'S') &&
-                                   (rest[2] == 't' || rest[2] == 'T'))
-                        zone = TT_AST;
-                  else if (month == TT_UNKNOWN &&
-                                   (rest[1] == 'u' || rest[1] == 'U') &&
-                                   (rest[2] == 'g' || rest[2] == 'G'))
-                        month = TT_AUG;
-                  break;
-                case 'b': case 'B':
-                  if (zone == TT_UNKNOWN &&
-                          (rest[1] == 's' || rest[1] == 'S') &&
-                          (rest[2] == 't' || rest[2] == 'T'))
-                        zone = TT_BST;
-                  break;
-                case 'c': case 'C':
-                  if (zone == TT_UNKNOWN &&
-                          (rest[1] == 'd' || rest[1] == 'D') &&
-                          (rest[2] == 't' || rest[2] == 'T'))
-                        zone = TT_CDT;
-                  else if (zone == TT_UNKNOWN &&
-                                   (rest[1] == 's' || rest[1] == 'S') &&
-                                   (rest[2] == 't' || rest[2] == 'T'))
-                        zone = TT_CST;
-                  break;
-                case 'd': case 'D':
-                  if (month == TT_UNKNOWN &&
-                          (rest[1] == 'e' || rest[1] == 'E') &&
-                          (rest[2] == 'c' || rest[2] == 'C'))
-                        month = TT_DEC;
-                  break;
-                case 'e': case 'E':
-                  if (zone == TT_UNKNOWN &&
-                          (rest[1] == 'd' || rest[1] == 'D') &&
-                          (rest[2] == 't' || rest[2] == 'T'))
-                        zone = TT_EDT;
-                  else if (zone == TT_UNKNOWN &&
-                                   (rest[1] == 'e' || rest[1] == 'E') &&
-                                   (rest[2] == 't' || rest[2] == 'T'))
-                        zone = TT_EET;
-                  else if (zone == TT_UNKNOWN &&
-                                   (rest[1] == 's' || rest[1] == 'S') &&
-                                   (rest[2] == 't' || rest[2] == 'T'))
-                        zone = TT_EST;
-                  break;
-                case 'f': case 'F':
-                  if (month == TT_UNKNOWN &&
-                          (rest[1] == 'e' || rest[1] == 'E') &&
-                          (rest[2] == 'b' || rest[2] == 'B'))
-                        month = TT_FEB;
-                  else if (dotw == TT_UNKNOWN &&
-                                   (rest[1] == 'r' || rest[1] == 'R') &&
-                                   (rest[2] == 'i' || rest[2] == 'I'))
-                        dotw = TT_FRI;
-                  break;
-                case 'g': case 'G':
-                  if (zone == TT_UNKNOWN &&
-                          (rest[1] == 'm' || rest[1] == 'M') &&
-                          (rest[2] == 't' || rest[2] == 'T'))
-                        zone = TT_GMT;
-                  break;
-                case 'j': case 'J':
-                  if (month == TT_UNKNOWN &&
-                          (rest[1] == 'a' || rest[1] == 'A') &&
-                          (rest[2] == 'n' || rest[2] == 'N'))
-                        month = TT_JAN;
-                  else if (zone == TT_UNKNOWN &&
-                                   (rest[1] == 's' || rest[1] == 'S') &&
-                                   (rest[2] == 't' || rest[2] == 'T'))
-                        zone = TT_JST;
-                  else if (month == TT_UNKNOWN &&
-                                   (rest[1] == 'u' || rest[1] == 'U') &&
-                                   (rest[2] == 'l' || rest[2] == 'L'))
-                        month = TT_JUL;
-                  else if (month == TT_UNKNOWN &&
-                                   (rest[1] == 'u' || rest[1] == 'U') &&
-                                   (rest[2] == 'n' || rest[2] == 'N'))
-                        month = TT_JUN;
-                  break;
-                case 'm': case 'M':
-                  if (month == TT_UNKNOWN &&
-                          (rest[1] == 'a' || rest[1] == 'A') &&
-                          (rest[2] == 'r' || rest[2] == 'R'))
-                        month = TT_MAR;
-                  else if (month == TT_UNKNOWN &&
-                                   (rest[1] == 'a' || rest[1] == 'A') &&
-                                   (rest[2] == 'y' || rest[2] == 'Y'))
-                        month = TT_MAY;
-                  else if (zone == TT_UNKNOWN &&
-                                   (rest[1] == 'd' || rest[1] == 'D') &&
-                                   (rest[2] == 't' || rest[2] == 'T'))
-                        zone = TT_MDT;
-                  else if (zone == TT_UNKNOWN &&
-                                   (rest[1] == 'e' || rest[1] == 'E') &&
-                                   (rest[2] == 't' || rest[2] == 'T'))
-                        zone = TT_MET;
-                  else if (dotw == TT_UNKNOWN &&
-                                   (rest[1] == 'o' || rest[1] == 'O') &&
-                                   (rest[2] == 'n' || rest[2] == 'N'))
-                        dotw = TT_MON;
-                  else if (zone == TT_UNKNOWN &&
-                                   (rest[1] == 's' || rest[1] == 'S') &&
-                                   (rest[2] == 't' || rest[2] == 'T'))
-                        zone = TT_MST;
-                  break;
-                case 'n': case 'N':
-                  if (month == TT_UNKNOWN &&
-                          (rest[1] == 'o' || rest[1] == 'O') &&
-                          (rest[2] == 'v' || rest[2] == 'V'))
-                        month = TT_NOV;
-                  else if (zone == TT_UNKNOWN &&
-                                   (rest[1] == 's' || rest[1] == 'S') &&
-                                   (rest[2] == 't' || rest[2] == 'T'))
-                        zone = TT_NST;
-                  break;
-                case 'o': case 'O':
-                  if (month == TT_UNKNOWN &&
-                          (rest[1] == 'c' || rest[1] == 'C') &&
-                          (rest[2] == 't' || rest[2] == 'T'))
-                        month = TT_OCT;
-                  break;
-                case 'p': case 'P':
-                  if (zone == TT_UNKNOWN &&
-                          (rest[1] == 'd' || rest[1] == 'D') &&
-                          (rest[2] == 't' || rest[2] == 'T'))
-                        zone = TT_PDT;
-                  else if (zone == TT_UNKNOWN &&
-                                   (rest[1] == 's' || rest[1] == 'S') &&
-                                   (rest[2] == 't' || rest[2] == 'T'))
-                        zone = TT_PST;
-                  break;
-                case 's': case 'S':
-                  if (dotw == TT_UNKNOWN &&
-                          (rest[1] == 'a' || rest[1] == 'A') &&
-                          (rest[2] == 't' || rest[2] == 'T'))
-                        dotw = TT_SAT;
-                  else if (month == TT_UNKNOWN &&
-                                   (rest[1] == 'e' || rest[1] == 'E') &&
-                                   (rest[2] == 'p' || rest[2] == 'P'))
-                        month = TT_SEP;
-                  else if (dotw == TT_UNKNOWN &&
-                                   (rest[1] == 'u' || rest[1] == 'U') &&
-                                   (rest[2] == 'n' || rest[2] == 'N'))
-                        dotw = TT_SUN;
-                  break;
-                case 't': case 'T':
-                  if (dotw == TT_UNKNOWN &&
-                          (rest[1] == 'h' || rest[1] == 'H') &&
-                          (rest[2] == 'u' || rest[2] == 'U'))
-                        dotw = TT_THU;
-                  else if (dotw == TT_UNKNOWN &&
-                                   (rest[1] == 'u' || rest[1] == 'U') &&
-                                   (rest[2] == 'e' || rest[2] == 'E'))
-                        dotw = TT_TUE;
-                  break;
-                case 'u': case 'U':
-                  if (zone == TT_UNKNOWN &&
-                          (rest[1] == 't' || rest[1] == 'T') &&
-                          !(rest[2] >= 'A' && rest[2] <= 'Z') &&
-                          !(rest[2] >= 'a' && rest[2] <= 'z'))
-                        /* UT is the same as GMT but UTx is not. */
-                        zone = TT_GMT;
-                  break;
-                case 'w': case 'W':
-                  if (dotw == TT_UNKNOWN &&
-                          (rest[1] == 'e' || rest[1] == 'E') &&
-                          (rest[2] == 'd' || rest[2] == 'D'))
-                        dotw = TT_WED;
-                  break;
-
-                case '+': case '-':
-                  {
-                        const char *end;
-                        int sign;
-                        if (zone_offset != -1)
-                          {
-                                /* already got one... */
-                                rest++;
-                                break;
-                          }
-                        if (zone != TT_UNKNOWN && zone != TT_GMT)
-                          {
-                                /* GMT+0300 is legal, but PST+0300 is not. */
-                                rest++;
-                                break;
-                          }
-
-                        sign = ((*rest == '+') ? 1 : -1);
-                        rest++; /* move over sign */
-                        end = rest;
-                        while (*end >= '0' && *end <= '9')
-                          end++;
-                        if (rest == end) /* no digits here */
-                          break;
-
-                        if ((end - rest) == 4)
-                          /* offset in HHMM */
-                          zone_offset = (((((rest[0]-'0')*10) + (rest[1]-'0')) * 60) +
-                                                         (((rest[2]-'0')*10) + (rest[3]-'0')));
-                        else if ((end - rest) == 2)
-                          /* offset in hours */
-                          zone_offset = (((rest[0]-'0')*10) + (rest[1]-'0')) * 60;
-                        else if ((end - rest) == 1)
-                          /* offset in hours */
-                          zone_offset = (rest[0]-'0') * 60;
-                        else
-                          /* 3 or >4 */
-                          break;
-
-                        zone_offset *= sign;
-                        zone = TT_GMT;
-                        break;
-                  }
-
-                case '0': case '1': case '2': case '3': case '4':
-                case '5': case '6': case '7': case '8': case '9':
-                  {
-                        int tmp_hour = -1;
-                        int tmp_min = -1;
-                        int tmp_sec = -1;
-                        int tmp_usec = -1;
-                        const char *end = rest + 1;
-                        while (*end >= '0' && *end <= '9')
-                          end++;
-
-                        /* end is now the first character after a range of digits. */
-
-                        if (*end == ':')
-                          {
-                                if (hour >= 0 && min >= 0) /* already got it */
-                                  break;
-
-                                /* We have seen "[0-9]+:", so this is probably HH:MM[:SS] */
-                                if ((end - rest) > 2)
-                                  /* it is [0-9][0-9][0-9]+: */
-                                  break;
-                                else if ((end - rest) == 2)
-                                  tmp_hour = ((rest[0]-'0')*10 +
-                                                          (rest[1]-'0'));
-                                else
-                                  tmp_hour = (rest[0]-'0');
-
-                                /* move over the colon, and parse minutes */
-
-                                rest = ++end;
-                                while (*end >= '0' && *end <= '9')
-                                  end++;
-
-                                if (end == rest)
-                                  /* no digits after first colon? */
-                                  break;
-                                else if ((end - rest) > 2)
-                                  /* it is [0-9][0-9][0-9]+: */
-                                  break;
-                                else if ((end - rest) == 2)
-                                  tmp_min = ((rest[0]-'0')*10 +
-                                                         (rest[1]-'0'));
-                                else
-                                  tmp_min = (rest[0]-'0');
-
-                                /* now go for seconds */
-                                rest = end;
-                                if (*rest == ':')
-                                  rest++;
-                                end = rest;
-                                while (*end >= '0' && *end <= '9')
-                                  end++;
-
-                                if (end == rest)
-                                  /* no digits after second colon - that's ok. */
-                                  ;
-                                else if ((end - rest) > 2)
-                                  /* it is [0-9][0-9][0-9]+: */
-                                  break;
-                                else if ((end - rest) == 2)
-                                  tmp_sec = ((rest[0]-'0')*10 +
-                                                         (rest[1]-'0'));
-                                else
-                                  tmp_sec = (rest[0]-'0');
-
-                                /* fractional second */
-                                rest = end;
-                                if (*rest == '.')
-                                  {
-                                    rest++;
-                                    end++;
-                                    tmp_usec = 0;
-                                    /* use up to 6 digits, skip over the rest */
-                                    while (*end >= '0' && *end <= '9')
-                                      {
-                                        if (end - rest < 6)
-                                          tmp_usec = tmp_usec * 10 + *end - '0';
-                                        end++;
-                                      }
-                                    int ndigits = end - rest;
-                                    while (ndigits++ < 6)
-                                      tmp_usec *= 10;
-                                    rest = end;
-                                  }
-
-                                if (*rest == 'Z')
-                                  {
-                                    zone = TT_GMT;
-                                    rest++;
-                                  }
-                                else if (tmp_hour <= 12)
-                                  {
-                                    /* If we made it here, we've parsed hour and min,
-                                       and possibly sec, so the current token is a time.
-                                       Now skip over whitespace and see if there's an AM
-                                       or PM directly following the time.
-                                    */
-                                        const char *s = end;
-                                        while (*s && (*s == ' ' || *s == '\t'))
-                                          s++;
-                                        if ((s[0] == 'p' || s[0] == 'P') &&
-                                                (s[1] == 'm' || s[1] == 'M'))
-                                          /* 10:05pm == 22:05, and 12:05pm == 12:05 */
-                                          tmp_hour = (tmp_hour == 12 ? 12 : tmp_hour + 12);
-                                        else if (tmp_hour == 12 &&
-                                                         (s[0] == 'a' || s[0] == 'A') &&
-                                                         (s[1] == 'm' || s[1] == 'M'))
-                                          /* 12:05am == 00:05 */
-                                          tmp_hour = 0;
-                                  }
-
-                                hour = tmp_hour;
-                                min = tmp_min;
-                                sec = tmp_sec;
-                                usec = tmp_usec;
-                                rest = end;
-                                break;
-                          }
-                        else if ((*end == '/' || *end == '-') &&
-                                         end[1] >= '0' && end[1] <= '9')
-                          {
-                                /* Perhaps this is 6/16/95, 16/6/95, 6-16-95, or 16-6-95
-                                   or even 95-06-05 or 1995-06-22.
-                                 */
-                                int n1, n2, n3;
-                                const char *s;
-
-                                if (month != TT_UNKNOWN)
-                                  /* if we saw a month name, this can't be. */
-                                  break;
-
-                                s = rest;
-
-                                n1 = (*s++ - '0');                                /* first 1, 2 or 4 digits */
-                                if (*s >= '0' && *s <= '9')
-                                  {
-                                    n1 = n1*10 + (*s++ - '0');
-
-                                    if (*s >= '0' && *s <= '9')            /* optional digits 3 and 4 */
-                                      {
-                                        n1 = n1*10 + (*s++ - '0');
-                                        if (*s < '0' || *s > '9')
-                                          break;
-                                        n1 = n1*10 + (*s++ - '0');
-                                      }
-                                  }
-
-                                if (*s != '/' && *s != '-')                /* slash */
-                                  break;
-                                s++;
-
-                                if (*s < '0' || *s > '9')                /* second 1 or 2 digits */
-                                  break;
-                                n2 = (*s++ - '0');
-                                if (*s >= '0' && *s <= '9')
-                                  n2 = n2*10 + (*s++ - '0');
-
-                                if (*s != '/' && *s != '-')                /* slash */
-                                  break;
-                                s++;
-
-                                if (*s < '0' || *s > '9')                /* third 1, 2, 4, or 5 digits */
-                                  break;
-                                n3 = (*s++ - '0');
-                                if (*s >= '0' && *s <= '9')
-                                  n3 = n3*10 + (*s++ - '0');
-
-                                if (*s >= '0' && *s <= '9')            /* optional digits 3, 4, and 5 */
-                                  {
-                                        n3 = n3*10 + (*s++ - '0');
-                                        if (*s < '0' || *s > '9')
-                                          break;
-                                        n3 = n3*10 + (*s++ - '0');
-                                        if (*s >= '0' && *s <= '9')
-                                          n3 = n3*10 + (*s++ - '0');
-                                  }
-
-                                if (*s == 'T' && s[1] >= '0' && s[1] <= '9')
-                                  /* followed by ISO 8601 T delimiter and number is ok */
-                                  ;
-                                else if ((*s >= '0' && *s <= '9') ||
-                                         (*s >= 'A' && *s <= 'Z') ||
-                                         (*s >= 'a' && *s <= 'z'))
-                                  /* but other alphanumerics are not ok */
-                                  break;
-
-                                /* Ok, we parsed three multi-digit numbers, with / or -
-                                   between them.  Now decide what the hell they are
-                                   (DD/MM/YY or MM/DD/YY or [YY]YY/MM/DD.)
-                                 */
-
-                                if (n1 > 31 || n1 == 0)  /* must be [YY]YY/MM/DD */
-                                  {
-                                        if (n2 > 12) break;
-                                        if (n3 > 31) break;
-                                        year = n1;
-                                        if (year < 70)
-                                            year += 2000;
-                                        else if (year < 100)
-                                            year += 1900;
-                                        month = (TIME_TOKEN)(n2 + ((int)TT_JAN) - 1);
-                                        date = n3;
-                                        rest = s;
-                                        break;
-                                  }
-
-                                if (n1 > 12 && n2 > 12)  /* illegal */
-                                  {
-                                        rest = s;
-                                        break;
-                                  }
-
-                                if (n3 < 70)
-                                    n3 += 2000;
-                                else if (n3 < 100)
-                                    n3 += 1900;
-
-                                if (n1 > 12)  /* must be DD/MM/YY */
-                                  {
-                                        date = n1;
-                                        month = (TIME_TOKEN)(n2 + ((int)TT_JAN) - 1);
-                                        year = n3;
-                                  }
-                                else                  /* assume MM/DD/YY */
-                                  {
-                                        /* #### In the ambiguous case, should we consult the
-                                           locale to find out the local default? */
-                                        month = (TIME_TOKEN)(n1 + ((int)TT_JAN) - 1);
-                                        date = n2;
-                                        year = n3;
-                                  }
-                                rest = s;
-                          }
-                        else if ((*end >= 'A' && *end <= 'Z') ||
-                                         (*end >= 'a' && *end <= 'z'))
-                          /* Digits followed by non-punctuation - what's that? */
-                          ;
-                        else if ((end - rest) == 5)                /* five digits is a year */
-                          year = (year < 0
-                                          ? ((rest[0]-'0')*10000L +
-                                                 (rest[1]-'0')*1000L +
-                                                 (rest[2]-'0')*100L +
-                                                 (rest[3]-'0')*10L +
-                                                 (rest[4]-'0'))
-                                          : year);
-                        else if ((end - rest) == 4)                /* four digits is a year */
-                          year = (year < 0
-                                          ? ((rest[0]-'0')*1000L +
-                                                 (rest[1]-'0')*100L +
-                                                 (rest[2]-'0')*10L +
-                                                 (rest[3]-'0'))
-                                          : year);
-                        else if ((end - rest) == 2)                /* two digits - date or year */
-                          {
-                                int n = ((rest[0]-'0')*10 +
-                                                 (rest[1]-'0'));
-                                /* If we don't have a date (day of the month) and we see a number
-                                     less than 32, then assume that is the date.
-
-                                         Otherwise, if we have a date and not a year, assume this is the
-                                         year.  If it is less than 70, then assume it refers to the 21st
-                                         century.  If it is two digits (>= 70), assume it refers to this
-                                         century.  Otherwise, assume it refers to an unambiguous year.
-
-                                         The world will surely end soon.
-                                   */
-                                if (date < 0 && n < 32)
-                                  date = n;
-                                else if (year < 0)
-                                  {
-                                        if (n < 70)
-                                          year = 2000 + n;
-                                        else if (n < 100)
-                                          year = 1900 + n;
-                                        else
-                                          year = n;
-                                  }
-                                /* else what the hell is this. */
-                          }
-                        else if ((end - rest) == 1)                /* one digit - date */
-                          date = (date < 0 ? (rest[0]-'0') : date);
-                        /* else, three or more than five digits - what's that? */
-
-                        break;
-                  }   /* case '0' .. '9' */
-                }   /* switch */
-
-          /* Skip to the end of this token, whether we parsed it or not.
-             Tokens are delimited by whitespace, or ,;-+/()[] but explicitly not .:
-             'T' is also treated as delimiter when followed by a digit (ISO 8601).
-           */
-          while (*rest &&
-                         *rest != ' ' && *rest != '\t' &&
-                         *rest != ',' && *rest != ';' &&
-                         *rest != '-' && *rest != '+' &&
-                         *rest != '/' &&
-                         *rest != '(' && *rest != ')' && *rest != '[' && *rest != ']' &&
-                         !(*rest == 'T' && rest[1] >= '0' && rest[1] <= '9')
-                )
-                rest++;
-          /* skip over uninteresting chars. */
-        SKIP_MORE:
-          while (*rest == ' ' || *rest == '\t' ||
-                 *rest == ',' || *rest == ';' || *rest == '/' ||
-                 *rest == '(' || *rest == ')' || *rest == '[' || *rest == ']')
-                rest++;
-
-          /* "-" is ignored at the beginning of a token if we have not yet
-                 parsed a year (e.g., the second "-" in "30-AUG-1966"), or if
-                 the character after the dash is not a digit. */         
-          if (*rest == '-' && ((rest > string &&
-              isalpha((unsigned char)rest[-1]) && year < 0) ||
-              rest[1] < '0' || rest[1] > '9'))
-                {
-                  rest++;
-                  goto SKIP_MORE;
-                }
-
-          /* Skip T that may precede ISO 8601 time. */
-          if (*rest == 'T' && rest[1] >= '0' && rest[1] <= '9')
-            rest++;
-        }   /* while */
-
-  if (zone != TT_UNKNOWN && zone_offset == -1)
-        {
-          switch (zone)
-                {
-                case TT_PST: zone_offset = -8 * 60; break;
-                case TT_PDT: zone_offset = -8 * 60; dst_offset = 1 * 60; break;
-                case TT_MST: zone_offset = -7 * 60; break;
-                case TT_MDT: zone_offset = -7 * 60; dst_offset = 1 * 60; break;
-                case TT_CST: zone_offset = -6 * 60; break;
-                case TT_CDT: zone_offset = -6 * 60; dst_offset = 1 * 60; break;
-                case TT_EST: zone_offset = -5 * 60; break;
-                case TT_EDT: zone_offset = -5 * 60; dst_offset = 1 * 60; break;
-                case TT_AST: zone_offset = -4 * 60; break;
-                case TT_NST: zone_offset = -3 * 60 - 30; break;
-                case TT_GMT: zone_offset =  0 * 60; break;
-                case TT_BST: zone_offset =  0 * 60; dst_offset = 1 * 60; break;
-                case TT_MET: zone_offset =  1 * 60; break;
-                case TT_EET: zone_offset =  2 * 60; break;
-                case TT_JST: zone_offset =  9 * 60; break;
-                default:
-                  PR_ASSERT (0);
-                  break;
-                }
-        }
-
-  /* If we didn't find a year, month, or day-of-the-month, we can't
-         possibly parse this, and in fact, mktime() will do something random
-         (I'm seeing it return "Tue Feb  5 06:28:16 2036", which is no doubt
-         a numerologically significant date... */
-  if (month == TT_UNKNOWN || date == -1 || year == -1 || year > PR_INT16_MAX)
-      return PR_FAILURE;
-
-  memset(result, 0, sizeof(*result));
-  if (usec != -1)
-        result->tm_usec = usec;
-  if (sec != -1)
-        result->tm_sec = sec;
-  if (min != -1)
-        result->tm_min = min;
-  if (hour != -1)
-        result->tm_hour = hour;
-  if (date != -1)
-        result->tm_mday = date;
-  if (month != TT_UNKNOWN)
-        result->tm_month = (((int)month) - ((int)TT_JAN));
-  if (year != -1)
-        result->tm_year = static_cast<PRInt16>(year);
-  if (dotw != TT_UNKNOWN)
-        result->tm_wday = static_cast<PRInt8>(((int)dotw) - ((int)TT_SUN));
-  /*
-   * Mainly to compute wday and yday, but normalized time is also required
-   * by the check below that works around a Visual C++ 2005 mktime problem.
-   */
-  PR_NormalizeTime(result, PR_GMTParameters);
-  /* The remaining work is to set the gmt and dst offsets in tm_params. */
-
-  if (zone == TT_UNKNOWN && default_to_gmt)
-        {
-          /* No zone was specified, so pretend the zone was GMT. */
-          zone = TT_GMT;
-          zone_offset = 0;
-        }
-
-  if (zone_offset == -1)
-         {
-           /* no zone was specified, and we're to assume that everything
-             is local. */
-          struct tm localTime;
-          time_t secs;
-
-          PR_ASSERT(result->tm_month > -1 &&
-                    result->tm_mday > 0 &&
-                    result->tm_hour > -1 &&
-                    result->tm_min > -1 &&
-                    result->tm_sec > -1);
-
-            /*
-             * To obtain time_t from a tm structure representing the local
-             * time, we call mktime().  However, we need to see if we are
-             * on 1-Jan-1970 or before.  If we are, we can't call mktime()
-             * because mktime() will crash on win16. In that case, we
-             * calculate zone_offset based on the zone offset at
-             * 00:00:00, 2 Jan 1970 GMT, and subtract zone_offset from the
-             * date we are parsing to transform the date to GMT.  We also
-             * do so if mktime() returns (time_t) -1 (time out of range).
-           */
-
-          /* month, day, hours, mins and secs are always non-negative
-             so we dont need to worry about them. */
-          if (result->tm_year >= 1970)
-                {
-                  localTime.tm_sec = result->tm_sec;
-                  localTime.tm_min = result->tm_min;
-                  localTime.tm_hour = result->tm_hour;
-                  localTime.tm_mday = result->tm_mday;
-                  localTime.tm_mon = result->tm_month;
-                  localTime.tm_year = result->tm_year - 1900;
-                  /* Set this to -1 to tell mktime "I don't care".  If you set
-                     it to 0 or 1, you are making assertions about whether the
-                     date you are handing it is in daylight savings mode or not;
-                     and if you're wrong, it will "fix" it for you. */
-                  localTime.tm_isdst = -1;
-
-#if _MSC_VER == 1400  /* 1400 = Visual C++ 2005 (8.0) */
-                  /*
-                   * mktime will return (time_t) -1 if the input is a date
-                   * after 23:59:59, December 31, 3000, US Pacific Time (not
-                   * UTC as documented): 
-                   * http://msdn.microsoft.com/en-us/library/d1y53h2a(VS.80).aspx
-                   * But if the year is 3001, mktime also invokes the invalid
-                   * parameter handler, causing the application to crash.  This
-                   * problem has been reported in
-                   * http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=266036.
-                   * We avoid this crash by not calling mktime if the date is
-                   * out of range.  To use a simple test that works in any time
-                   * zone, we consider year 3000 out of range as well.  (See
-                   * bug 480740.)
-                   */
-                  if (result->tm_year >= 3000) {
-                      /* Emulate what mktime would have done. */
-                      errno = EINVAL;
-                      secs = (time_t) -1;
-                  } else {
-                      secs = mktime(&localTime);
-                  }
-#else
-                  secs = mktime(&localTime);
-#endif
-                  if (secs != (time_t) -1)
-                    {
-                      *result_imploded = (PRInt64)secs * PR_USEC_PER_SEC;
-                      *result_imploded += result->tm_usec;
-                      return PR_SUCCESS;
-                    }
-                }
-                
-                /* So mktime() can't handle this case.  We assume the
-                   zone_offset for the date we are parsing is the same as
-                   the zone offset on 00:00:00 2 Jan 1970 GMT. */
-                secs = 86400;
-                localtime_r(&secs, &localTime);
-                zone_offset = localTime.tm_min
-                              + 60 * localTime.tm_hour
-                              + 1440 * (localTime.tm_mday - 2);
-        }
-
-  result->tm_params.tp_gmt_offset = zone_offset * 60;
-  result->tm_params.tp_dst_offset = dst_offset * 60;
-
-  *result_imploded = PR_ImplodeTime(result);
-  return PR_SUCCESS;
-}
diff --git a/base/third_party/nspr/prtime.h b/base/third_party/nspr/prtime.h
deleted file mode 100644
index 20bae38..0000000
--- a/base/third_party/nspr/prtime.h
+++ /dev/null
@@ -1,263 +0,0 @@
-/* Portions are Copyright (C) 2011 Google Inc */
-/* ***** BEGIN LICENSE BLOCK *****
- * Version: MPL 1.1/GPL 2.0/LGPL 2.1
- *
- * The contents of this file are subject to the Mozilla Public License Version
- * 1.1 (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- * http://www.mozilla.org/MPL/
- *
- * Software distributed under the License is distributed on an "AS IS" basis,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- * for the specific language governing rights and limitations under the
- * License.
- *
- * The Original Code is the Netscape Portable Runtime (NSPR).
- *
- * The Initial Developer of the Original Code is
- * Netscape Communications Corporation.
- * Portions created by the Initial Developer are Copyright (C) 1998-2000
- * the Initial Developer. All Rights Reserved.
- *
- * Contributor(s):
- *
- * Alternatively, the contents of this file may be used under the terms of
- * either the GNU General Public License Version 2 or later (the "GPL"), or
- * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
- * in which case the provisions of the GPL or the LGPL are applicable instead
- * of those above. If you wish to allow use of your version of this file only
- * under the terms of either the GPL or the LGPL, and not to allow others to
- * use your version of this file under the terms of the MPL, indicate your
- * decision by deleting the provisions above and replace them with the notice
- * and other provisions required by the GPL or the LGPL. If you do not delete
- * the provisions above, a recipient may use your version of this file under
- * the terms of any one of the MPL, the GPL or the LGPL.
- *
- * ***** END LICENSE BLOCK ***** */
-
-/*
- *---------------------------------------------------------------------------
- *
- * prtime.h --
- *
- *     NSPR date and time functions
- * CVS revision 3.10
- * This file contains definitions of NSPR's basic types required by
- * prtime.cc. These types have been copied over from the following NSPR
- * files prtime.h, prtypes.h(CVS revision 3.35), prlong.h(CVS revision 3.13)
- *
- *---------------------------------------------------------------------------
- */
-
-#ifndef BASE_PRTIME_H__
-#define BASE_PRTIME_H__
-
-#include <stdint.h>
-
-#include "base/base_export.h"
-
-typedef int8_t PRInt8;
-typedef int16_t PRInt16;
-typedef int32_t PRInt32;
-typedef int64_t PRInt64;
-typedef int PRIntn;
-
-typedef PRIntn PRBool;
-#define PR_TRUE 1
-#define PR_FALSE 0
-
-typedef enum { PR_FAILURE = -1, PR_SUCCESS = 0 } PRStatus;
-
-#define PR_ASSERT DCHECK
-#define PR_CALLBACK
-#define PR_INT16_MAX 32767
-#define NSPR_API(__type) extern __type
-
-/*
- * Long-long (64-bit signed integer type) support macros used by
- * PR_ImplodeTime().
- * See http://lxr.mozilla.org/nspr/source/pr/include/prlong.h
- */
-
-#define LL_I2L(l, i) ((l) = (PRInt64)(i))
-#define LL_MUL(r, a, b) ((r) = (a) * (b))
-#define LL_ADD(r, a, b) ((r) = (a) + (b))
-#define LL_SUB(r, a, b) ((r) = (a) - (b))
-
-/**********************************************************************/
-/************************* TYPES AND CONSTANTS ************************/
-/**********************************************************************/
-
-#define PR_MSEC_PER_SEC		1000UL
-#define PR_USEC_PER_SEC		1000000UL
-#define PR_NSEC_PER_SEC		1000000000UL
-#define PR_USEC_PER_MSEC	1000UL
-#define PR_NSEC_PER_MSEC	1000000UL
-
-/*
- * PRTime --
- *
- *     NSPR represents basic time as 64-bit signed integers relative
- *     to midnight (00:00:00), January 1, 1970 Greenwich Mean Time (GMT).
- *     (GMT is also known as Coordinated Universal Time, UTC.)
- *     The units of time are in microseconds. Negative times are allowed
- *     to represent times prior to the January 1970 epoch. Such values are
- *     intended to be exported to other systems or converted to human
- *     readable form.
- *
- *     Notes on porting: PRTime corresponds to time_t in ANSI C.  NSPR 1.0
- *     simply uses PRInt64.
- */
-
-typedef PRInt64 PRTime;
-
-/*
- * Time zone and daylight saving time corrections applied to GMT to
- * obtain the local time of some geographic location
- */
-
-typedef struct PRTimeParameters {
-    PRInt32 tp_gmt_offset;     /* the offset from GMT in seconds */
-    PRInt32 tp_dst_offset;     /* contribution of DST in seconds */
-} PRTimeParameters;
-
-/*
- * PRExplodedTime --
- *
- *     Time broken down into human-readable components such as year, month,
- *     day, hour, minute, second, and microsecond.  Time zone and daylight
- *     saving time corrections may be applied.  If they are applied, the
- *     offsets from the GMT must be saved in the 'tm_params' field so that
- *     all the information is available to reconstruct GMT.
- *
- *     Notes on porting: PRExplodedTime corrresponds to struct tm in
- *     ANSI C, with the following differences:
- *       - an additional field tm_usec;
- *       - replacing tm_isdst by tm_params;
- *       - the month field is spelled tm_month, not tm_mon;
- *       - we use absolute year, AD, not the year since 1900.
- *     The corresponding type in NSPR 1.0 is called PRTime.  Below is
- *     a table of date/time type correspondence in the three APIs:
- *         API          time since epoch          time in components
- *       ANSI C             time_t                  struct tm
- *       NSPR 1.0           PRInt64                   PRTime
- *       NSPR 2.0           PRTime                  PRExplodedTime
- */
-
-typedef struct PRExplodedTime {
-    PRInt32 tm_usec;		    /* microseconds past tm_sec (0-99999)  */
-    PRInt32 tm_sec;             /* seconds past tm_min (0-61, accomodating
-                                   up to two leap seconds) */	
-    PRInt32 tm_min;             /* minutes past tm_hour (0-59) */
-    PRInt32 tm_hour;            /* hours past tm_day (0-23) */
-    PRInt32 tm_mday;            /* days past tm_mon (1-31, note that it
-				                starts from 1) */
-    PRInt32 tm_month;           /* months past tm_year (0-11, Jan = 0) */
-    PRInt16 tm_year;            /* absolute year, AD (note that we do not
-				                count from 1900) */
-
-    PRInt8 tm_wday;		        /* calculated day of the week
-				                (0-6, Sun = 0) */
-    PRInt16 tm_yday;            /* calculated day of the year
-				                (0-365, Jan 1 = 0) */
-
-    PRTimeParameters tm_params;  /* time parameters used by conversion */
-} PRExplodedTime;
-
-/*
- * PRTimeParamFn --
- *
- *     A function of PRTimeParamFn type returns the time zone and
- *     daylight saving time corrections for some geographic location,
- *     given the current time in GMT.  The input argument gmt should
- *     point to a PRExplodedTime that is in GMT, i.e., whose
- *     tm_params contains all 0's.
- *
- *     For any time zone other than GMT, the computation is intended to
- *     consist of two steps:
- *       - Figure out the time zone correction, tp_gmt_offset.  This number
- *         usually depends on the geographic location only.  But it may
- *         also depend on the current time.  For example, all of China
- *         is one time zone right now.  But this situation may change
- *         in the future.
- *       - Figure out the daylight saving time correction, tp_dst_offset.
- *         This number depends on both the geographic location and the
- *         current time.  Most of the DST rules are expressed in local
- *         current time.  If so, one should apply the time zone correction
- *         to GMT before applying the DST rules.
- */
-
-typedef PRTimeParameters (PR_CALLBACK *PRTimeParamFn)(const PRExplodedTime *gmt);
-
-/**********************************************************************/
-/****************************** FUNCTIONS *****************************/
-/**********************************************************************/
-
-NSPR_API(PRTime)
-PR_ImplodeTime(const PRExplodedTime *exploded);
-
-/*
- * Adjust exploded time to normalize field overflows after manipulation.
- * Note that the following fields of PRExplodedTime should not be
- * manipulated:
- *   - tm_month and tm_year: because the number of days in a month and
- *     number of days in a year are not constant, it is ambiguous to
- *     manipulate the month and year fields, although one may be tempted
- *     to.  For example, what does "a month from January 31st" mean?
- *   - tm_wday and tm_yday: these fields are calculated by NSPR.  Users
- *     should treat them as "read-only".
- */
-
-NSPR_API(void) PR_NormalizeTime(
-    PRExplodedTime *exploded, PRTimeParamFn params);
-
-/**********************************************************************/
-/*********************** TIME PARAMETER FUNCTIONS *********************/
-/**********************************************************************/
-
-/* Time parameters that represent Greenwich Mean Time */
-NSPR_API(PRTimeParameters) PR_GMTParameters(const PRExplodedTime *gmt);
-
-/*
- * This parses a time/date string into a PRTime
- * (microseconds after "1-Jan-1970 00:00:00 GMT").
- * It returns PR_SUCCESS on success, and PR_FAILURE
- * if the time/date string can't be parsed.
- *
- * Many formats are handled, including:
- *
- *   14 Apr 89 03:20:12
- *   14 Apr 89 03:20 GMT
- *   Fri, 17 Mar 89 4:01:33
- *   Fri, 17 Mar 89 4:01 GMT
- *   Mon Jan 16 16:12 PDT 1989
- *   Mon Jan 16 16:12 +0130 1989
- *   6 May 1992 16:41-JST (Wednesday)
- *   22-AUG-1993 10:59:12.82
- *   22-AUG-1993 10:59pm
- *   22-AUG-1993 12:59am
- *   22-AUG-1993 12:59 PM
- *   Friday, August 04, 1995 3:54 PM
- *   06/21/95 04:24:34 PM
- *   20/06/95 21:07
- *   95-06-08 19:32:48 EDT
- *   1995-06-17T23:11:25.342156Z
- *
- * If the input string doesn't contain a description of the timezone,
- * we consult the `default_to_gmt' to decide whether the string should
- * be interpreted relative to the local time zone (PR_FALSE) or GMT (PR_TRUE).
- * The correct value for this argument depends on what standard specified
- * the time string which you are parsing.
- */
-
-/*
- * This is the only funtion that should be called from outside base, and only
- * from the unit test.
- */
-
-BASE_EXPORT PRStatus PR_ParseTimeString (
-	const char *string,
-	PRBool default_to_gmt,
-	PRTime *result);
-
-#endif  // BASE_PRTIME_H__
diff --git a/base/threading/OWNERS b/base/threading/OWNERS
deleted file mode 100644
index 4198e99..0000000
--- a/base/threading/OWNERS
+++ /dev/null
@@ -1,2 +0,0 @@
-# For thread_resrictions.*
-jam@chromium.org
diff --git a/base/threading/thread_collision_warner.cc b/base/threading/thread_collision_warner.cc
deleted file mode 100644
index 547e11c..0000000
--- a/base/threading/thread_collision_warner.cc
+++ /dev/null
@@ -1,64 +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/threading/thread_collision_warner.h"
-
-#include "base/logging.h"
-#include "base/threading/platform_thread.h"
-
-namespace base {
-
-void DCheckAsserter::warn() {
-  NOTREACHED() << "Thread Collision";
-}
-
-static subtle::Atomic32 CurrentThread() {
-  const PlatformThreadId current_thread_id = PlatformThread::CurrentId();
-  // We need to get the thread id into an atomic data type. This might be a
-  // truncating conversion, but any loss-of-information just increases the
-  // chance of a fault negative, not a false positive.
-  const subtle::Atomic32 atomic_thread_id =
-      static_cast<subtle::Atomic32>(current_thread_id);
-
-  return atomic_thread_id;
-}
-
-void ThreadCollisionWarner::EnterSelf() {
-  // If the active thread is 0 then I'll write the current thread ID
-  // if two or more threads arrive here only one will succeed to
-  // write on valid_thread_id_ the current thread ID.
-  subtle::Atomic32 current_thread_id = CurrentThread();
-
-  int previous_value = subtle::NoBarrier_CompareAndSwap(&valid_thread_id_,
-                                                        0,
-                                                        current_thread_id);
-  if (previous_value != 0 && previous_value != current_thread_id) {
-    // gotcha! a thread is trying to use the same class and that is
-    // not current thread.
-    asserter_->warn();
-  }
-
-  subtle::NoBarrier_AtomicIncrement(&counter_, 1);
-}
-
-void ThreadCollisionWarner::Enter() {
-  subtle::Atomic32 current_thread_id = CurrentThread();
-
-  if (subtle::NoBarrier_CompareAndSwap(&valid_thread_id_,
-                                       0,
-                                       current_thread_id) != 0) {
-    // gotcha! another thread is trying to use the same class.
-    asserter_->warn();
-  }
-
-  subtle::NoBarrier_AtomicIncrement(&counter_, 1);
-}
-
-void ThreadCollisionWarner::Leave() {
-  if (subtle::Barrier_AtomicIncrement(&counter_, -1) == 0) {
-    subtle::NoBarrier_Store(&valid_thread_id_, 0);
-  }
-}
-
-}  // namespace base
diff --git a/base/threading/thread_collision_warner.h b/base/threading/thread_collision_warner.h
deleted file mode 100644
index b6993f6..0000000
--- a/base/threading/thread_collision_warner.h
+++ /dev/null
@@ -1,245 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef BASE_THREADING_THREAD_COLLISION_WARNER_H_
-#define BASE_THREADING_THREAD_COLLISION_WARNER_H_
-
-#include <memory>
-
-#include "base/atomicops.h"
-#include "base/base_export.h"
-#include "base/compiler_specific.h"
-#include "base/macros.h"
-
-// A helper class alongside macros to be used to verify assumptions about thread
-// safety of a class.
-//
-// Example: Queue implementation non thread-safe but still usable if clients
-//          are synchronized somehow.
-//
-//          In this case the macro DFAKE_SCOPED_LOCK has to be
-//          used, it checks that if a thread is inside the push/pop then
-//          noone else is still inside the pop/push
-//
-// class NonThreadSafeQueue {
-//  public:
-//   ...
-//   void push(int) { DFAKE_SCOPED_LOCK(push_pop_); ... }
-//   int pop() { DFAKE_SCOPED_LOCK(push_pop_); ... }
-//   ...
-//  private:
-//   DFAKE_MUTEX(push_pop_);
-// };
-//
-//
-// Example: Queue implementation non thread-safe but still usable if clients
-//          are synchronized somehow, it calls a method to "protect" from
-//          a "protected" method
-//
-//          In this case the macro DFAKE_SCOPED_RECURSIVE_LOCK
-//          has to be used, it checks that if a thread is inside the push/pop
-//          then noone else is still inside the pop/push
-//
-// class NonThreadSafeQueue {
-//  public:
-//   void push(int) {
-//     DFAKE_SCOPED_LOCK(push_pop_);
-//     ...
-//   }
-//   int pop() {
-//     DFAKE_SCOPED_RECURSIVE_LOCK(push_pop_);
-//     bar();
-//     ...
-//   }
-//   void bar() { DFAKE_SCOPED_RECURSIVE_LOCK(push_pop_); ... }
-//   ...
-//  private:
-//   DFAKE_MUTEX(push_pop_);
-// };
-//
-//
-// Example: Queue implementation not usable even if clients are synchronized,
-//          so only one thread in the class life cycle can use the two members
-//          push/pop.
-//
-//          In this case the macro DFAKE_SCOPED_LOCK_THREAD_LOCKED pins the
-//          specified
-//          critical section the first time a thread enters push or pop, from
-//          that time on only that thread is allowed to execute push or pop.
-//
-// class NonThreadSafeQueue {
-//  public:
-//   ...
-//   void push(int) { DFAKE_SCOPED_LOCK_THREAD_LOCKED(push_pop_); ... }
-//   int pop() { DFAKE_SCOPED_LOCK_THREAD_LOCKED(push_pop_); ... }
-//   ...
-//  private:
-//   DFAKE_MUTEX(push_pop_);
-// };
-//
-//
-// Example: Class that has to be contructed/destroyed on same thread, it has
-//          a "shareable" method (with external synchronization) and a not
-//          shareable method (even with external synchronization).
-//
-//          In this case 3 Critical sections have to be defined
-//
-// class ExoticClass {
-//  public:
-//   ExoticClass() { DFAKE_SCOPED_LOCK_THREAD_LOCKED(ctor_dtor_); ... }
-//   ~ExoticClass() { DFAKE_SCOPED_LOCK_THREAD_LOCKED(ctor_dtor_); ... }
-//
-//   void Shareable() { DFAKE_SCOPED_LOCK(shareable_section_); ... }
-//   void NotShareable() { DFAKE_SCOPED_LOCK_THREAD_LOCKED(ctor_dtor_); ... }
-//   ...
-//  private:
-//   DFAKE_MUTEX(ctor_dtor_);
-//   DFAKE_MUTEX(shareable_section_);
-// };
-
-
-#if !defined(NDEBUG)
-
-// Defines a class member that acts like a mutex. It is used only as a
-// verification tool.
-#define DFAKE_MUTEX(obj) \
-     mutable base::ThreadCollisionWarner obj
-// Asserts the call is never called simultaneously in two threads. Used at
-// member function scope.
-#define DFAKE_SCOPED_LOCK(obj) \
-     base::ThreadCollisionWarner::ScopedCheck s_check_##obj(&obj)
-// Asserts the call is never called simultaneously in two threads. Used at
-// member function scope. Same as DFAKE_SCOPED_LOCK but allows recursive locks.
-#define DFAKE_SCOPED_RECURSIVE_LOCK(obj) \
-     base::ThreadCollisionWarner::ScopedRecursiveCheck sr_check_##obj(&obj)
-// Asserts the code is always executed in the same thread.
-#define DFAKE_SCOPED_LOCK_THREAD_LOCKED(obj) \
-     base::ThreadCollisionWarner::Check check_##obj(&obj)
-
-#else
-
-#define DFAKE_MUTEX(obj) typedef void InternalFakeMutexType##obj
-#define DFAKE_SCOPED_LOCK(obj) ((void)0)
-#define DFAKE_SCOPED_RECURSIVE_LOCK(obj) ((void)0)
-#define DFAKE_SCOPED_LOCK_THREAD_LOCKED(obj) ((void)0)
-
-#endif
-
-namespace base {
-
-// The class ThreadCollisionWarner uses an Asserter to notify the collision
-// AsserterBase is the interfaces and DCheckAsserter is the default asserter
-// used. During the unit tests is used another class that doesn't "DCHECK"
-// in case of collision (check thread_collision_warner_unittests.cc)
-struct BASE_EXPORT AsserterBase {
-  virtual ~AsserterBase() = default;
-  virtual void warn() = 0;
-};
-
-struct BASE_EXPORT DCheckAsserter : public AsserterBase {
-  ~DCheckAsserter() override = default;
-  void warn() override;
-};
-
-class BASE_EXPORT ThreadCollisionWarner {
- public:
-  // The parameter asserter is there only for test purpose
-  explicit ThreadCollisionWarner(AsserterBase* asserter = new DCheckAsserter())
-      : valid_thread_id_(0),
-        counter_(0),
-        asserter_(asserter) {}
-
-  ~ThreadCollisionWarner() {
-    delete asserter_;
-  }
-
-  // This class is meant to be used through the macro
-  // DFAKE_SCOPED_LOCK_THREAD_LOCKED
-  // it doesn't leave the critical section, as opposed to ScopedCheck,
-  // because the critical section being pinned is allowed to be used only
-  // from one thread
-  class BASE_EXPORT Check {
-   public:
-    explicit Check(ThreadCollisionWarner* warner)
-        : warner_(warner) {
-      warner_->EnterSelf();
-    }
-
-    ~Check() = default;
-
-   private:
-    ThreadCollisionWarner* warner_;
-
-    DISALLOW_COPY_AND_ASSIGN(Check);
-  };
-
-  // This class is meant to be used through the macro
-  // DFAKE_SCOPED_LOCK
-  class BASE_EXPORT ScopedCheck {
-   public:
-    explicit ScopedCheck(ThreadCollisionWarner* warner)
-        : warner_(warner) {
-      warner_->Enter();
-    }
-
-    ~ScopedCheck() {
-      warner_->Leave();
-    }
-
-   private:
-    ThreadCollisionWarner* warner_;
-
-    DISALLOW_COPY_AND_ASSIGN(ScopedCheck);
-  };
-
-  // This class is meant to be used through the macro
-  // DFAKE_SCOPED_RECURSIVE_LOCK
-  class BASE_EXPORT ScopedRecursiveCheck {
-   public:
-    explicit ScopedRecursiveCheck(ThreadCollisionWarner* warner)
-        : warner_(warner) {
-      warner_->EnterSelf();
-    }
-
-    ~ScopedRecursiveCheck() {
-      warner_->Leave();
-    }
-
-   private:
-    ThreadCollisionWarner* warner_;
-
-    DISALLOW_COPY_AND_ASSIGN(ScopedRecursiveCheck);
-  };
-
- private:
-  // This method stores the current thread identifier and does a DCHECK
-  // if a another thread has already done it, it is safe if same thread
-  // calls this multiple time (recursion allowed).
-  void EnterSelf();
-
-  // Same as EnterSelf but recursion is not allowed.
-  void Enter();
-
-  // Removes the thread_id stored in order to allow other threads to
-  // call EnterSelf or Enter.
-  void Leave();
-
-  // This stores the thread id that is inside the critical section, if the
-  // value is 0 then no thread is inside.
-  volatile subtle::Atomic32 valid_thread_id_;
-
-  // Counter to trace how many time a critical section was "pinned"
-  // (when allowed) in order to unpin it when counter_ reaches 0.
-  volatile subtle::Atomic32 counter_;
-
-  // Here only for class unit tests purpose, during the test I need to not
-  // DCHECK but notify the collision with something else.
-  AsserterBase* asserter_;
-
-  DISALLOW_COPY_AND_ASSIGN(ThreadCollisionWarner);
-};
-
-}  // namespace base
-
-#endif  // BASE_THREADING_THREAD_COLLISION_WARNER_H_
diff --git a/base/time/OWNERS b/base/time/OWNERS
deleted file mode 100644
index ff0520a..0000000
--- a/base/time/OWNERS
+++ /dev/null
@@ -1,3 +0,0 @@
-miu@chromium.org
-
-# COMPONENT: Internals>Core
diff --git a/base/time/default_tick_clock.cc b/base/time/default_tick_clock.cc
deleted file mode 100644
index 188c3cf..0000000
--- a/base/time/default_tick_clock.cc
+++ /dev/null
@@ -1,23 +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/time/default_tick_clock.h"
-
-#include "base/no_destructor.h"
-
-namespace base {
-
-DefaultTickClock::~DefaultTickClock() = default;
-
-TimeTicks DefaultTickClock::NowTicks() const {
-  return TimeTicks::Now();
-}
-
-// static
-const DefaultTickClock* DefaultTickClock::GetInstance() {
-  static const base::NoDestructor<DefaultTickClock> default_tick_clock;
-  return default_tick_clock.get();
-}
-
-}  // namespace base
diff --git a/base/time/default_tick_clock.h b/base/time/default_tick_clock.h
deleted file mode 100644
index 78f8a99..0000000
--- a/base/time/default_tick_clock.h
+++ /dev/null
@@ -1,27 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef BASE_TIME_DEFAULT_TICK_CLOCK_H_
-#define BASE_TIME_DEFAULT_TICK_CLOCK_H_
-
-#include "base/base_export.h"
-#include "base/time/tick_clock.h"
-
-namespace base {
-
-// DefaultClock is a Clock implementation that uses TimeTicks::Now().
-class BASE_EXPORT DefaultTickClock : public TickClock {
- public:
-  ~DefaultTickClock() override;
-
-  // Simply returns TimeTicks::Now().
-  TimeTicks NowTicks() const override;
-
-  // Returns a shared instance of DefaultTickClock. This is thread-safe.
-  static const DefaultTickClock* GetInstance();
-};
-
-}  // namespace base
-
-#endif  // BASE_TIME_DEFAULT_TICK_CLOCK_H_
diff --git a/base/time/tick_clock.cc b/base/time/tick_clock.cc
deleted file mode 100644
index 79e396d..0000000
--- a/base/time/tick_clock.cc
+++ /dev/null
@@ -1,11 +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/time/tick_clock.h"
-
-namespace base {
-
-TickClock::~TickClock() = default;
-
-}  // namespace base
diff --git a/base/time/tick_clock.h b/base/time/tick_clock.h
deleted file mode 100644
index dc57354..0000000
--- a/base/time/tick_clock.h
+++ /dev/null
@@ -1,40 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef BASE_TIME_TICK_CLOCK_H_
-#define BASE_TIME_TICK_CLOCK_H_
-
-#include "base/base_export.h"
-#include "base/time/time.h"
-
-namespace base {
-
-// A TickClock is an interface for objects that vend TimeTicks.  It is
-// intended to be able to test the behavior of classes with respect to
-// non-decreasing time.
-//
-// See DefaultTickClock (base/time/default_tick_clock.h) for the default
-// implementation that simply uses TimeTicks::Now().
-//
-// (Other implementations that use TimeTicks::NowFromSystemTime() should
-// be added as needed.)
-//
-// See SimpleTestTickClock (base/test/simple_test_tick_clock.h) for a
-// simple test implementation.
-//
-// See Clock (base/time/clock.h) for the equivalent interface for Times.
-class BASE_EXPORT TickClock {
- public:
-  virtual ~TickClock();
-
-  // NowTicks() must be safe to call from any thread.  The caller may
-  // assume that NowTicks() is monotonic (but not strictly monotonic).
-  // In other words, the returned TimeTicks will never decrease with
-  // time, although they might "stand still".
-  virtual TimeTicks NowTicks() const = 0;
-};
-
-}  // namespace base
-
-#endif  // BASE_TIME_TICK_CLOCK_H_
diff --git a/base/time/time.cc b/base/time/time.cc
index 577895c..bd746b3 100644
--- a/base/time/time.cc
+++ b/base/time/time.cc
@@ -14,7 +14,6 @@
 #include "base/macros.h"
 #include "base/no_destructor.h"
 #include "base/strings/stringprintf.h"
-#include "base/third_party/nspr/prtime.h"
 #include "base/time/time_override.h"
 #include "build_config.h"
 
@@ -291,27 +290,6 @@
 }
 
 // static
-bool Time::FromStringInternal(const char* time_string,
-                              bool is_local,
-                              Time* parsed_time) {
-  DCHECK((time_string != nullptr) && (parsed_time != nullptr));
-
-  if (time_string[0] == '\0')
-    return false;
-
-  PRTime result_time = 0;
-  PRStatus result = PR_ParseTimeString(time_string,
-                                       is_local ? PR_FALSE : PR_TRUE,
-                                       &result_time);
-  if (PR_SUCCESS != result)
-    return false;
-
-  result_time += kTimeTToMicrosecondsOffset;
-  *parsed_time = Time(result_time);
-  return true;
-}
-
-// static
 bool Time::ExplodedMostlyEquals(const Exploded& lhs, const Exploded& rhs) {
   return lhs.year == rhs.year && lhs.month == rhs.month &&
          lhs.day_of_month == rhs.day_of_month && lhs.hour == rhs.hour &&
diff --git a/base/time/time.h b/base/time/time.h
index 936c746..eef95f3 100644
--- a/base/time/time.h
+++ b/base/time/time.h
@@ -619,23 +619,6 @@
     return FromExploded(true, exploded, time);
   }
 
-  // Converts a string representation of time to a Time object.
-  // An example of a time string which is converted is as below:-
-  // "Tue, 15 Nov 1994 12:45:26 GMT". If the timezone is not specified
-  // in the input string, FromString assumes local time and FromUTCString
-  // assumes UTC. A timezone that cannot be parsed (e.g. "UTC" which is not
-  // specified in RFC822) is treated as if the timezone is not specified.
-  // TODO(iyengar) Move the FromString/FromTimeT/ToTimeT/FromFileTime to
-  // a new time converter class.
-  static bool FromString(const char* time_string,
-                         Time* parsed_time) WARN_UNUSED_RESULT {
-    return FromStringInternal(time_string, true, parsed_time);
-  }
-  static bool FromUTCString(const char* time_string,
-                            Time* parsed_time) WARN_UNUSED_RESULT {
-    return FromStringInternal(time_string, false, parsed_time);
-  }
-
   // Fills the given exploded structure with either the local time or UTC from
   // this time structure (containing UTC).
   void UTCExplode(Exploded* exploded) const {
@@ -675,17 +658,6 @@
                            const Exploded& exploded,
                            Time* time) WARN_UNUSED_RESULT;
 
-  // Converts a string representation of time to a Time object.
-  // An example of a time string which is converted is as below:-
-  // "Tue, 15 Nov 1994 12:45:26 GMT". If the timezone is not specified
-  // in the input string, local time |is_local = true| or
-  // UTC |is_local = false| is assumed. A timezone that cannot be parsed
-  // (e.g. "UTC" which is not specified in RFC822) is treated as if the
-  // timezone is not specified.
-  static bool FromStringInternal(const char* time_string,
-                                 bool is_local,
-                                 Time* parsed_time) WARN_UNUSED_RESULT;
-
   // Comparison does not consider |day_of_week| when doing the operation.
   static bool ExplodedMostlyEquals(const Exploded& lhs,
                                    const Exploded& rhs) WARN_UNUSED_RESULT;
@@ -866,12 +838,6 @@
     return TimeTicks(us);
   }
 
-#if defined(OS_WIN)
- protected:
-  typedef DWORD (*TickFunctionType)(void);
-  static TickFunctionType SetMockTickFunction(TickFunctionType ticker);
-#endif
-
  private:
   friend class time_internal::TimeBase<TimeTicks>;
 
@@ -896,10 +862,8 @@
   static bool IsSupported() WARN_UNUSED_RESULT {
 #if (defined(_POSIX_THREAD_CPUTIME) && (_POSIX_THREAD_CPUTIME >= 0)) || \
     (defined(OS_MACOSX) && !defined(OS_IOS)) || defined(OS_ANDROID) ||  \
-    defined(OS_FUCHSIA)
+    defined(OS_FUCHSIA) || defined(OS_WIN)
     return true;
-#elif defined(OS_WIN)
-    return IsSupportedWin();
 #else
     return false;
 #endif
@@ -956,7 +920,6 @@
   // allow testing.
   static double TSCTicksPerSecond();
 
-  static bool IsSupportedWin() WARN_UNUSED_RESULT;
   static void WaitUntilInitializedWin();
 #endif
 };
diff --git a/base/time/time_to_iso8601.cc b/base/time/time_to_iso8601.cc
deleted file mode 100644
index 27e7bfc..0000000
--- a/base/time/time_to_iso8601.cc
+++ /dev/null
@@ -1,20 +0,0 @@
-// Copyright 2018 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/time/time_to_iso8601.h"
-
-#include "base/strings/stringprintf.h"
-#include "base/time/time.h"
-
-namespace base {
-
-std::string TimeToISO8601(const Time& t) {
-  Time::Exploded exploded;
-  t.UTCExplode(&exploded);
-  return StringPrintf("%04d-%02d-%02dT%02d:%02d:%02d.%03dZ", exploded.year,
-                      exploded.month, exploded.day_of_month, exploded.hour,
-                      exploded.minute, exploded.second, exploded.millisecond);
-}
-
-}  // namespace base
diff --git a/base/time/time_to_iso8601.h b/base/time/time_to_iso8601.h
deleted file mode 100644
index 2643484..0000000
--- a/base/time/time_to_iso8601.h
+++ /dev/null
@@ -1,20 +0,0 @@
-// Copyright 2018 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef BASE_TIME_TIME_TO_ISO8601_H_
-#define BASE_TIME_TIME_TO_ISO8601_H_
-
-#include <string>
-
-#include "base/base_export.h"
-
-namespace base {
-
-class Time;
-
-BASE_EXPORT std::string TimeToISO8601(const base::Time& t);
-
-}  // namespace base
-
-#endif  // BASE_TIME_TIME_TO_ISO8601_H_
diff --git a/base/time/time_win.cc b/base/time/time_win.cc
index 9c6eba0..6767fd6 100644
--- a/base/time/time_win.cc
+++ b/base/time/time_win.cc
@@ -39,7 +39,6 @@
 
 #include "base/atomicops.h"
 #include "base/bit_cast.h"
-#include "base/cpu.h"
 #include "base/logging.h"
 #include "base/synchronization/lock.h"
 #include "base/threading/platform_thread.h"
@@ -361,81 +360,6 @@
 
 namespace {
 
-// We define a wrapper to adapt between the __stdcall and __cdecl call of the
-// mock function, and to avoid a static constructor.  Assigning an import to a
-// function pointer directly would require setup code to fetch from the IAT.
-DWORD timeGetTimeWrapper() {
-  return timeGetTime();
-}
-
-DWORD (*g_tick_function)(void) = &timeGetTimeWrapper;
-
-// A structure holding the most significant bits of "last seen" and a
-// "rollover" counter.
-union LastTimeAndRolloversState {
-  // The state as a single 32-bit opaque value.
-  subtle::Atomic32 as_opaque_32;
-
-  // The state as usable values.
-  struct {
-    // The top 8-bits of the "last" time. This is enough to check for rollovers
-    // and the small bit-size means fewer CompareAndSwap operations to store
-    // changes in state, which in turn makes for fewer retries.
-    uint8_t last_8;
-    // A count of the number of detected rollovers. Using this as bits 47-32
-    // of the upper half of a 64-bit value results in a 48-bit tick counter.
-    // This extends the total rollover period from about 49 days to about 8800
-    // years while still allowing it to be stored with last_8 in a single
-    // 32-bit value.
-    uint16_t rollovers;
-  } as_values;
-};
-subtle::Atomic32 g_last_time_and_rollovers = 0;
-static_assert(
-    sizeof(LastTimeAndRolloversState) <= sizeof(g_last_time_and_rollovers),
-    "LastTimeAndRolloversState does not fit in a single atomic word");
-
-// We use timeGetTime() to implement TimeTicks::Now().  This can be problematic
-// because it returns the number of milliseconds since Windows has started,
-// which will roll over the 32-bit value every ~49 days.  We try to track
-// rollover ourselves, which works if TimeTicks::Now() is called at least every
-// 48.8 days (not 49 days because only changes in the top 8 bits get noticed).
-TimeTicks RolloverProtectedNow() {
-  LastTimeAndRolloversState state;
-  DWORD now;  // DWORD is always unsigned 32 bits.
-
-  while (true) {
-    // Fetch the "now" and "last" tick values, updating "last" with "now" and
-    // incrementing the "rollovers" counter if the tick-value has wrapped back
-    // around. Atomic operations ensure that both "last" and "rollovers" are
-    // always updated together.
-    int32_t original = subtle::Acquire_Load(&g_last_time_and_rollovers);
-    state.as_opaque_32 = original;
-    now = g_tick_function();
-    uint8_t now_8 = static_cast<uint8_t>(now >> 24);
-    if (now_8 < state.as_values.last_8)
-      ++state.as_values.rollovers;
-    state.as_values.last_8 = now_8;
-
-    // If the state hasn't changed, exit the loop.
-    if (state.as_opaque_32 == original)
-      break;
-
-    // Save the changed state. If the existing value is unchanged from the
-    // original, exit the loop.
-    int32_t check = subtle::Release_CompareAndSwap(
-        &g_last_time_and_rollovers, original, state.as_opaque_32);
-    if (check == original)
-      break;
-
-    // Another thread has done something in between so retry from the top.
-  }
-
-  return TimeTicks() +
-         TimeDelta::FromMilliseconds(
-             now + (static_cast<uint64_t>(state.as_values.rollovers) << 32));
-}
-
 // Discussion of tick counter options on Windows:
 //
 // (1) CPU cycle counter. (Retrieved via RDTSC)
@@ -511,35 +435,12 @@
   return TimeTicks() + QPCValueToTimeDelta(QPCNowRaw());
 }
 
-bool IsBuggyAthlon(const CPU& cpu) {
-  // On Athlon X2 CPUs (e.g. model 15) QueryPerformanceCounter is unreliable.
-  return cpu.vendor_name() == "AuthenticAMD" && cpu.family() == 15;
-}
-
 void InitializeNowFunctionPointer() {
   LARGE_INTEGER ticks_per_sec = {};
   if (!QueryPerformanceFrequency(&ticks_per_sec))
     ticks_per_sec.QuadPart = 0;
 
-  // If Windows cannot provide a QPC implementation, TimeTicks::Now() must use
-  // the low-resolution clock.
-  //
-  // If the QPC implementation is expensive and/or unreliable, TimeTicks::Now()
-  // will still use the low-resolution clock. A CPU lacking a non-stop time
-  // counter will cause Windows to provide an alternate QPC implementation that
-  // works, but is expensive to use. Certain Athlon CPUs are known to make the
-  // QPC implementation unreliable.
-  //
-  // Otherwise, Now uses the high-resolution QPC clock. As of 21 August 2015,
-  // ~72% of users fall within this category.
-  TimeTicksNowFunction now_function;
-  CPU cpu;
-  if (ticks_per_sec.QuadPart <= 0 ||
-      !cpu.has_non_stop_time_stamp_counter() || IsBuggyAthlon(cpu)) {
-    now_function = &RolloverProtectedNow;
-  } else {
-    now_function = &QPCNow;
-  }
+  TimeTicksNowFunction now_function = &QPCNow;
 
   // Threading note 1: In an unlikely race condition, it's possible for two or
   // more threads to enter InitializeNowFunctionPointer() in parallel. This is
@@ -569,15 +470,6 @@
 
 }  // namespace
 
-// static
-TimeTicks::TickFunctionType TimeTicks::SetMockTickFunction(
-    TickFunctionType ticker) {
-  TickFunctionType old = g_tick_function;
-  g_tick_function = ticker;
-  subtle::NoBarrier_Store(&g_last_time_and_rollovers, 0);
-  return old;
-}
-
 namespace subtle {
 TimeTicks TimeTicksNowIgnoringOverride() {
   return g_time_ticks_now_ignoring_override_function();
@@ -646,13 +538,6 @@
 }
 
 // static
-bool ThreadTicks::IsSupportedWin() {
-  static bool is_supported =
-      CPU().has_non_stop_time_stamp_counter() && !IsBuggyAthlon(CPU());
-  return is_supported;
-}
-
-// static
 void ThreadTicks::WaitUntilInitializedWin() {
   while (TSCTicksPerSecond() == 0)
     ::Sleep(10);
diff --git a/base/timer/mock_timer.cc b/base/timer/mock_timer.cc
deleted file mode 100644
index ca0893b..0000000
--- a/base/timer/mock_timer.cc
+++ /dev/null
@@ -1,59 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "base/timer/mock_timer.h"
-
-namespace base {
-
-MockTimer::MockTimer(bool retain_user_task, bool is_repeating)
-    : Timer(retain_user_task, is_repeating),
-      is_running_(false) {
-}
-
-MockTimer::MockTimer(const Location& posted_from,
-                     TimeDelta delay,
-                     const base::Closure& user_task,
-                     bool is_repeating)
-    : Timer(true, is_repeating), delay_(delay), is_running_(false) {}
-
-MockTimer::~MockTimer() = default;
-
-bool MockTimer::IsRunning() const {
-  return is_running_;
-}
-
-base::TimeDelta MockTimer::GetCurrentDelay() const {
-  return delay_;
-}
-
-void MockTimer::Start(const Location& posted_from,
-                      TimeDelta delay,
-                      const base::Closure& user_task) {
-  delay_ = delay;
-  user_task_ = user_task;
-  Reset();
-}
-
-void MockTimer::Stop() {
-  is_running_ = false;
-  if (!retain_user_task())
-    user_task_.Reset();
-}
-
-void MockTimer::Reset() {
-  DCHECK(!user_task_.is_null());
-  is_running_ = true;
-}
-
-void MockTimer::Fire() {
-  DCHECK(is_running_);
-  base::Closure old_task = user_task_;
-  if (is_repeating())
-    Reset();
-  else
-    Stop();
-  old_task.Run();
-}
-
-}  // namespace base
diff --git a/base/timer/mock_timer.h b/base/timer/mock_timer.h
deleted file mode 100644
index 49394b2..0000000
--- a/base/timer/mock_timer.h
+++ /dev/null
@@ -1,41 +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.
-
-#ifndef BASE_TIMER_MOCK_TIMER_H_
-#define BASE_TIMER_MOCK_TIMER_H_
-
-#include "base/timer/timer.h"
-
-namespace base {
-
-class BASE_EXPORT MockTimer : public Timer {
- public:
-  MockTimer(bool retain_user_task, bool is_repeating);
-  MockTimer(const Location& posted_from,
-            TimeDelta delay,
-            const base::Closure& user_task,
-            bool is_repeating);
-  ~MockTimer() override;
-
-  // base::Timer implementation.
-  bool IsRunning() const override;
-  base::TimeDelta GetCurrentDelay() const override;
-  void Start(const Location& posted_from,
-             base::TimeDelta delay,
-             const base::Closure& user_task) override;
-  void Stop() override;
-  void Reset() override;
-
-  // Testing methods.
-  void Fire();
-
- private:
-  base::Closure user_task_;
-  TimeDelta delay_;
-  bool is_running_;
-};
-
-}  // namespace base
-
-#endif  // BASE_TIMER_MOCK_TIMER_H_
diff --git a/base/win/OWNERS b/base/win/OWNERS
deleted file mode 100644
index 4593b2c..0000000
--- a/base/win/OWNERS
+++ /dev/null
@@ -1,7 +0,0 @@
-brucedawson@chromium.org
-grt@chromium.org
-jschuh@chromium.org
-robliao@chromium.org
-scottmg@chromium.org
-
-# COMPONENT: Internals>PlatformIntegration
diff --git a/build/gen.py b/build/gen.py
index d72f39b..ed92d2f 100755
--- a/build/gen.py
+++ b/build/gen.py
@@ -236,7 +236,6 @@
         'base/files/file_util.cc',
         'base/files/scoped_file.cc',
         'base/files/scoped_temp_dir.cc',
-        'base/hash.cc',
         'base/json/json_parser.cc',
         'base/json/json_reader.cc',
         'base/json/json_string_value_serializer.cc',
@@ -250,9 +249,7 @@
         'base/process/memory.cc',
         'base/process/process_handle.cc',
         'base/process/process_iterator.cc',
-        'base/rand_util.cc',
         'base/sha1.cc',
-        'base/strings/pattern.cc',
         'base/strings/string_number_conversions.cc',
         'base/strings/string_piece.cc',
         'base/strings/string_split.cc',
@@ -261,13 +258,8 @@
         'base/strings/stringprintf.cc',
         'base/strings/utf_string_conversion_utils.cc',
         'base/strings/utf_string_conversions.cc',
-        'base/synchronization/atomic_flag.cc',
         'base/third_party/icu/icu_utf.cc',
-        'base/third_party/nspr/prtime.cc',
-        'base/threading/thread_collision_warner.cc',
         'base/time/clock.cc',
-        'base/time/default_tick_clock.cc',
-        'base/time/tick_clock.cc',
         'base/time/time.cc',
         'base/timer/elapsed_timer.cc',
         'base/value_iterators.cc',
@@ -360,7 +352,6 @@
         'tools/gn/output_file.cc',
         'tools/gn/parse_node_value_adapter.cc',
         'tools/gn/parser.cc',
-        'tools/gn/parser_fuzzer.cc',
         'tools/gn/parse_tree.cc',
         'tools/gn/path_output.cc',
         'tools/gn/pattern.cc',
@@ -484,7 +475,6 @@
         'base/process/kill_posix.cc',
         'base/process/process_handle_posix.cc',
         'base/process/process_posix.cc',
-        'base/rand_util_posix.cc',
         'base/strings/string16.cc',
         'base/synchronization/condition_variable_posix.cc',
         'base/synchronization/lock_impl_posix.cc',
@@ -499,7 +489,6 @@
         'base/process/process_handle_linux.cc',
         'base/process/process_info_linux.cc',
         'base/process/process_iterator_linux.cc',
-        'base/process/process_linux.cc',
         'base/strings/sys_string_conversions_posix.cc',
         'base/synchronization/waitable_event_posix.cc',
         'base/time/time_exploded_posix.cc',
@@ -519,13 +508,10 @@
     static_libraries['base']['sources'].extend([
         'base/files/file_util_mac.mm',
         'base/mac/bundle_locations.mm',
-        'base/mac/call_with_eh_frame.cc',
-        'base/mac/call_with_eh_frame_asm.S',
         'base/mac/dispatch_source_mach.cc',
         'base/mac/foundation_util.mm',
         'base/mac/mach_logging.cc',
         'base/mac/scoped_mach_port.cc',
-        'base/mac/scoped_mach_vm.cc',
         'base/mac/scoped_nsautorelease_pool.mm',
         'base/process/process_handle_mac.cc',
         'base/process/process_info_mac.cc',
@@ -546,7 +532,6 @@
 
   if is_win:
     static_libraries['base']['sources'].extend([
-        'base/cpu.cc',
         'base/files/file_enumerator_win.cc',
         'base/files/file_util_win.cc',
         'base/files/file_win.cc',
@@ -556,7 +541,6 @@
         'base/process/process_info_win.cc',
         'base/process/process_iterator_win.cc',
         'base/process/process_win.cc',
-        'base/rand_util_win.cc',
         'base/strings/sys_string_conversions_win.cc',
         'base/synchronization/condition_variable_win.cc',
         'base/synchronization/lock_impl_win.cc',
diff --git a/tools/gn/OWNERS b/tools/gn/OWNERS
deleted file mode 100644
index 82224cd..0000000
--- a/tools/gn/OWNERS
+++ /dev/null
@@ -1,3 +0,0 @@
-brettw@chromium.org
-dpranke@chromium.org
-sdefresne@chromium.org
diff --git a/tools/gn/README.md b/tools/gn/README.md
deleted file mode 100644
index fd0d9c5..0000000
--- a/tools/gn/README.md
+++ /dev/null
@@ -1,18 +0,0 @@
-# What is GN?
-
-GN is a meta-build system that generates [Ninja](https://ninja-build.org)
-build files so that you can build Chromium with Ninja.
-
-## I want more info on GN!
-
-Read these links:
-
-  * [Quick start](docs/quick_start.md)
-  * [FAQ](docs/faq.md)
-  * [Language and operation details](docs/language.md)
-  * [Reference](docs/reference.md): The built-in `gn help` documentation.
-  * [Style guide](docs/style_guide.md)
-  * [Cross compiling and toolchains](docs/cross_compiles.md)
-  * [Hacking on GN itself](docs/hacking.md)
-  * [Standaline GN projects](docs/standalone.md)
-  * [Pushing new binaries](docs/update_binaries.md)
diff --git a/tools/gn/bin/compare_test_lists.py b/tools/gn/bin/compare_test_lists.py
deleted file mode 100644
index 37fb1bf..0000000
--- a/tools/gn/bin/compare_test_lists.py
+++ /dev/null
@@ -1,101 +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.
-
-# This script compares the gtest test list for two different builds.
-#
-# Usage:
-#   compare_test_lists.py <build_dir_1> <build_dir_2> <binary_name>
-#
-# For example, from the "src" directory:
-#   python tools/gn/bin/compare_test_lists.py out/Debug out/gnbuild ipc_tests
-#
-# This will compile the given binary in both output directories, then extracts
-# the test lists and prints missing or extra tests between the first and the
-# second build.
-
-import os
-import subprocess
-import sys
-
-def BuildBinary(build_dir, binary_name):
-  """Builds the given binary in the given directory with Ninja.
-
-  Returns True on success."""
-  return subprocess.call(["ninja", "-C", build_dir, binary_name]) == 0
-
-
-def GetTestList(path_to_binary):
-  """Returns a set of full test names.
-
-  Each test will be of the form "Case.Test". There will be a separate line
-  for each combination of Case/Test (there are often multiple tests in each
-  case).
-
-  Throws an exception on failure."""
-  raw_output = subprocess.check_output([path_to_binary, "--gtest_list_tests"])
-  input_lines = raw_output.split('\n')
-
-  # The format of the gtest_list_tests output is:
-  # "Case1."
-  # "  Test1  # <Optional extra stuff>"
-  # "  Test2"
-  # "Case2."
-  # "  Test1"
-  case_name = ''  # Includes trailing dot.
-  test_set = set()
-  for line in input_lines:
-    if len(line) > 1:
-      if line[0] == ' ':
-        # Indented means a test in previous case.
-        test_set.add(case_name + line[:line.find('#')].strip())
-      else:
-        # New test case.
-        case_name = line.strip()
-
-  return test_set
-
-
-def PrintSetDiff(a_name, a, b_name, b, binary_name):
-  """Prints the test list difference between the given sets a and b.
-
-  a_name and b_name will be used to refer to the directories of the two sets,
-  and the binary name will be shown as the source of the output."""
-
-  a_not_b = list(a - b)
-  if len(a_not_b):
-    print "\n", binary_name, "tests in", a_name, "but not", b_name
-    a_not_b.sort()
-    for cur in a_not_b:
-      print "  ", cur
-
-  b_not_a = list(b - a)
-  if len(b_not_a):
-    print "\n", binary_name, "tests in", b_name, "but not", a_name
-    b_not_a.sort()
-    for cur in b_not_a:
-      print "  ", cur
-
-  if len(a_not_b) == 0 and len(b_not_a) == 0:
-    print "\nTests match!"
-
-
-def Run(a_dir, b_dir, binary_name):
-  if not BuildBinary(a_dir, binary_name):
-    print "Building", binary_name, "in", a_dir, "failed"
-    return 1
-  if not BuildBinary(b_dir, binary_name):
-    print "Building", binary_name, "in", b_dir, "failed"
-    return 1
-
-  a_tests = GetTestList(os.path.join(a_dir, binary_name))
-  b_tests = GetTestList(os.path.join(b_dir, binary_name))
-
-  PrintSetDiff(a_dir, a_tests, b_dir, b_tests, binary_name)
-
-
-if len(sys.argv) != 4:
-  print "Usage: compare_test_lists.py <build_dir_1> <build_dir_2> " \
-      "<test_binary_name>"
-  sys.exit(1)
-sys.exit(Run(sys.argv[1], sys.argv[2], sys.argv[3]))
diff --git a/tools/gn/bin/roll_gn.py b/tools/gn/bin/roll_gn.py
deleted file mode 100755
index cf4c878..0000000
--- a/tools/gn/bin/roll_gn.py
+++ /dev/null
@@ -1,461 +0,0 @@
-#!/usr/bin/env python
-# 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.
-
-"""An auto-roller for GN binaries into Chromium.
-
-This script is used to update the GN binaries that a Chromium
-checkout uses. In order to update the binaries, one must follow
-four steps in order:
-
-1. Trigger try jobs to build a new GN binary at tip-of-tree and upload
-   the newly-built binaries into the right Google CloudStorage bucket.
-2. Wait for the try jobs to complete.
-3. Update the buildtools repo with the .sha1 hashes of the newly built
-   binaries.
-4. Update Chromium's DEPS file to the new version of the buildtools repo.
-
-The script has four commands that correspond to the four steps above:
-'build', 'wait', 'roll_buildtools', and 'roll_deps'.
-
-The script has a fifth command, 'roll', that runs the four in order.
-
-If given no arguments, the script will run the 'roll' command.
-
-It can only be run on linux in a clean Chromium checkout; it should
-error out in most cases if something bad happens, but the error checking
-isn't yet foolproof.
-
-"""
-
-from __future__ import print_function
-
-import argparse
-import json
-import os
-import re
-import subprocess
-import sys
-import tempfile
-import time
-import urllib2
-
-
-depot_tools_path = os.path.abspath(os.path.normpath(os.path.join(
-    os.path.dirname(__file__), '..', '..', '..', 'third_party', 'depot_tools')))
-if not depot_tools_path in sys.path:
-  sys.path.insert(0, depot_tools_path)
-
-
-CHROMIUM_REPO = 'https://chromium.googlesource.com/chromium/src.git'
-
-COMMITISH_DIGITS = 10
-
-UNKNOWN, PENDING, STARTED, SUCCESS = (
-  'unknown', 'pending', 'started', 'success')
-
-class BuildResult(object):
-  def __init__(self):
-    self.masterName = '-'
-    self.builderName = '-'
-    self.buildNumber = '-'
-    self.state = UNKNOWN
-    self.sha1 = '-'
-    self.url = '-'
-
-
-class GNRoller(object):
-  def __init__(self):
-    self.chromium_src_dir = None
-    self.buildtools_dir = None
-    self.old_gn_commitish = None
-    self.new_gn_commitish = None
-    self.old_gn_version   = None
-    self.new_gn_version = None
-    self.reviewer = 'dpranke@chromium.org'
-    if os.getenv('USER') == 'dpranke':
-      self.reviewer = 'brettw@chromium.org'
-
-  def Roll(self):
-    parser = argparse.ArgumentParser()
-    parser.usage = __doc__
-    parser.add_argument('command', nargs='?', default='roll',
-                        help='build|roll|roll_buildtools|roll_deps|wait'
-                             ' (%(default)s is the default)')
-
-    args = parser.parse_args()
-    command = args.command
-    ret = self.SetUp()
-    if not ret and command in ('roll', 'build'):
-      ret = self.TriggerBuild()
-    if not ret and command in ('roll', 'wait'):
-      ret = self.WaitForBuildToFinish()
-    if not ret and command in ('roll', 'roll_buildtools'):
-      ret = self.RollBuildtools()
-    if not ret and command in ('roll', 'roll_deps'):
-      ret = self.RollDEPS()
-
-    return ret
-
-  def SetUp(self):
-    if sys.platform not in ('darwin', 'linux2'):
-      print('roll_gn is only tested and working on Linux and Mac for now.')
-      return 1
-
-    ret, out, _ = self.Call('git config --get remote.origin.url')
-    origin = out.strip()
-    if ret or origin != CHROMIUM_REPO:
-      print('Not in a Chromium repo? git config --get remote.origin.url '
-            'returned %d: %s' % (ret, origin))
-      return 1
-
-    ret, _, _ = self.Call('git diff -q')
-    if ret:
-      print("Checkout is dirty, exiting")
-      return 1
-
-    _, out, _ = self.Call('git rev-parse --show-toplevel', cwd=os.getcwd())
-    self.chromium_src_dir = out.strip()
-    self.buildtools_dir = os.path.join(self.chromium_src_dir, 'buildtools')
-
-    self.new_gn_commitish, self.new_gn_version = self.GetNewVersions()
-
-    _, out, _ = self.Call('gn --version')
-    self.old_gn_version = out.strip()
-
-    _, out, _ = self.Call('git crrev-parse %s' % self.old_gn_version)
-    self.old_gn_commitish = out.strip()
-    return 0
-
-  def GetNewVersions(self):
-    _, out, _ = self.Call('git log -1 --grep Cr-Commit-Position')
-    commit_msg = out.splitlines()
-    first_line = commit_msg[0]
-    new_gn_commitish = first_line.split()[1]
-
-    last_line = commit_msg[-1]
-    new_gn_version = re.sub('.*master@{#(\d+)}', '\\1', last_line)
-
-    return new_gn_commitish, new_gn_version
-
-  def TriggerBuild(self):
-    ret, _, _ = self.Call('git new-branch build_gn_%s' % self.new_gn_version)
-    if ret:
-      print('Failed to create a new branch for build_gn_%s' %
-            self.new_gn_version)
-      return 1
-
-    self.MakeDummyDepsChange()
-
-    ret, out, err = self.Call('git commit -a -m "Build gn at %s"' %
-                         self.new_gn_version)
-    if ret:
-      print('git commit failed: %s' % out + err)
-      return 1
-
-    print('Uploading CL to build GN at {#%s} - %s' %
-          (self.new_gn_version, self.new_gn_commitish))
-    ret, out, err = self.Call('git cl upload -f')
-    if ret:
-      print('git-cl upload failed: %s' % out + err)
-      return 1
-
-    print('Starting try jobs')
-    self.Call('git-cl try -m tryserver.chromium.linux '
-              '-b linux_chromium_gn_upload -r %s' % self.new_gn_commitish)
-    self.Call('git-cl try -m tryserver.chromium.mac '
-              '-b mac_chromium_gn_upload -r %s' % self.new_gn_commitish)
-    self.Call('git-cl try -m tryserver.chromium.win '
-              '-b win_chromium_gn_upload -r %s' % self.new_gn_commitish)
-
-    return 0
-
-  def MakeDummyDepsChange(self):
-    with open('DEPS') as fp:
-      deps_content = fp.read()
-      new_deps = deps_content.replace("'buildtools_revision':",
-                                      "'buildtools_revision':  ")
-
-    with open('DEPS', 'w') as fp:
-      fp.write(new_deps)
-
-  def WaitForBuildToFinish(self):
-    ret = self.CheckoutBuildBranch()
-    if ret:
-      return ret
-
-    print('Checking build')
-    results = self.CheckBuild()
-    while (any(r.state in (PENDING, STARTED) for r in results.values())):
-      print()
-      print('Sleeping for 30 seconds')
-      time.sleep(30)
-      print('Checking build')
-      results = self.CheckBuild()
-
-    ret = 0 if all(r.state == SUCCESS for r in results.values()) else 1
-    if ret:
-      print('Build failed.')
-    else:
-      print('Builds ready.')
-
-    # Close the build CL and move off of the build branch back to whatever
-    # we were on before.
-    self.Call('git-cl set-close')
-    self.MoveToLastHead()
-
-    return ret
-
-  def CheckoutBuildBranch(self):
-    ret, out, err = self.Call('git checkout build_gn_%s' % self.new_gn_version)
-    if ret:
-      print('Failed to check out build_gn_%s' % self.new_gn_version)
-      if out:
-        print(out)
-      if err:
-        print(err, file=sys.stderr)
-    return ret
-
-  def CheckBuild(self):
-    _, out, _ = self.Call('git-cl try-results')
-
-    builders = {
-        'linux_chromium_gn_upload': 'linux64',
-        'mac_chromium_gn_upload': 'mac',
-        'win_chromium_gn_upload': 'win'
-    }
-
-    results = {}
-    for platform in ('linux64', 'mac', 'win'):
-      results[platform] = BuildResult()
-
-    state = PENDING
-    for line in out.splitlines():
-      fields = line.strip().split()
-      if fields[0] == 'Started:':
-        state = STARTED
-      if fields[0] == 'Successes:':
-        state = SUCCESS
-      elif fields[0] == 'Total':
-        pass
-      elif fields[0] in builders:
-        builder = fields[0]
-        platform = builders[builder]
-        result = results[platform]
-        result.masterName = ('tryserver.chromium.%s' %
-                                platform.replace('linux64', 'linux'))
-        result.builderName = builder
-        result.url = fields[1]
-        if result.url.startswith('id'):
-          result.state = PENDING
-        else:
-          result.state = state
-          result.buildNumber = int(result.url[result.url.rfind('/')+1:])
-
-    for result in results.values():
-      if result.state == SUCCESS:
-        url = 'https://luci-milo.appspot.com/prpc/milo.BuildInfo/Get'
-        data = json.dumps({"buildbot": {
-            'masterName': result.masterName,
-            'builderName': result.builderName,
-            'buildNumber': result.buildNumber,
-            }})
-        headers = {
-            'content-type': 'application/json',
-            'accept': 'application/json',
-        }
-
-        req = urllib2.Request(url, data, headers)
-        resp = urllib2.urlopen(req)
-        data = resp.read()
-        resp.close()
-
-        # The first line of the response is garbage; skip it.
-        js = json.loads(data.splitlines()[1])
-
-        sha1_step_name = 'gn sha1'
-        for step in js['step']['substep']:
-          if step['step']['name'] == sha1_step_name:
-            sha1 = step['step']['text'][-1]
-
-        result.sha1 = sha1
-
-    for platform, r in results.items():
-      print(platform)
-      print('  sha1:  %s' % r.sha1)
-      print('  state: %s' % r.state)
-      print('  build: %s' % r.buildNumber)
-      print('  url:   %s' % r.url)
-      print()
-
-    return results
-
-  def RollBuildtools(self):
-    ret = self.CheckoutBuildBranch()
-    if ret:
-      return ret
-
-    results = self.CheckBuild()
-    if (len(results) < 3 or
-        not all(r.state == SUCCESS for r in results.values()) or
-        not all(r.sha1 != '-' for r in results.values())):
-      print("Roll isn't done or didn't succeed, exiting:")
-      return 1
-
-    desc = self.GetBuildtoolsDesc()
-
-    self.Call('git new-branch roll_buildtools_gn_%s' % self.new_gn_version,
-              cwd=self.buildtools_dir)
-
-    for platform in results:
-      fname = 'gn.exe.sha1' if platform == 'win' else 'gn.sha1'
-      path = os.path.join(self.buildtools_dir, platform, fname)
-      with open(path, 'w') as fp:
-        fp.write('%s\n' % results[platform].sha1)
-
-    desc_file = tempfile.NamedTemporaryFile(delete=False)
-    try:
-      desc_file.write(desc)
-      desc_file.close()
-      self.Call('git commit -a -F %s' % desc_file.name,
-                cwd=self.buildtools_dir)
-      self.Call('git-cl upload -f --send-mail',
-                cwd=self.buildtools_dir)
-    finally:
-      os.remove(desc_file.name)
-
-    ret, out, err = self.Call('git cl land', cwd=self.buildtools_dir)
-    if ret:
-        print("buildtools git cl land failed: %d" % ret)
-        if out:
-            print(out)
-        if err:
-            print(err)
-        return ret
-
-    # Fetch the revision we just committed so that RollDEPS will find it.
-    self.Call('git fetch', cwd=self.buildtools_dir)
-
-    # Reset buildtools to the new commit so that we're not still on the
-    # merged branch.
-    self.Call('git checkout origin/master', cwd=self.buildtools_dir)
-
-    _, out, _ = self.Call('git rev-parse origin/master',
-                          cwd=self.buildtools_dir)
-    new_buildtools_commitish = out.strip()
-    print('Ready to roll buildtools to %s in DEPS' % new_buildtools_commitish)
-
-    return 0
-
-  def RollDEPS(self):
-    ret, _, _ = self.Call('git new-branch roll_gn_%s' % self.new_gn_version)
-    if ret:
-      print('Failed to create a new branch for roll_gn_%s' %
-            self.new_gn_version)
-      return 1
-
-    _, out, _ = self.Call('git rev-parse origin/master',
-                          cwd=self.buildtools_dir)
-    new_buildtools_commitish = out.strip()
-
-    new_deps_lines = []
-    old_buildtools_commitish = ''
-    with open(os.path.join(self.chromium_src_dir, 'DEPS')) as fp:
-      for l in fp.readlines():
-        m = re.match(".*'buildtools_revision':.*'(.+)',", l)
-        if m:
-          old_buildtools_commitish = m.group(1)
-          new_deps_lines.append("  'buildtools_revision': '%s',\n" %
-                                new_buildtools_commitish)
-        else:
-          new_deps_lines.append(l)
-
-    if not old_buildtools_commitish:
-      print('Could not update DEPS properly, exiting')
-      return 1
-
-    with open('DEPS', 'w') as fp:
-      fp.write(''.join(new_deps_lines))
-
-    desc = self.GetDEPSRollDesc(old_buildtools_commitish,
-                                new_buildtools_commitish)
-    desc_file = tempfile.NamedTemporaryFile(delete=False)
-    try:
-      desc_file.write(desc)
-      desc_file.close()
-      self.Call('git commit -a -F %s' % desc_file.name)
-      self.Call('git-cl upload -f --send-mail --use-commit-queue')
-    finally:
-      os.remove(desc_file.name)
-
-    # Move off of the roll branch onto whatever we were on before.
-    # Do not explicitly close the roll CL issue, however; the CQ
-    # will close it when the roll lands, assuming it does so.
-    self.MoveToLastHead()
-
-    return 0
-
-  def MoveToLastHead(self):
-    # When this is called, there will be a commit + a checkout as
-    # the two most recent entries in the reflog, assuming nothing as
-    # modified the repo while this script has been running.
-    _, out, _ = self.Call('git reflog -2')
-    m = re.search('moving from ([^\s]+)', out)
-    last_head = m.group(1)
-    self.Call('git checkout %s' % last_head)
-
-  def GetBuildtoolsDesc(self):
-    gn_changes = self.GetGNChanges()
-    return (
-      'Roll gn %s..%s (r%s:r%s)\n'
-      '\n'
-      '%s'
-      '\n'
-      'TBR=%s\n' % (
-        self.old_gn_commitish[:COMMITISH_DIGITS],
-        self.new_gn_commitish[:COMMITISH_DIGITS],
-        self.old_gn_version,
-        self.new_gn_version,
-        gn_changes,
-        self.reviewer,
-      ))
-
-  def GetDEPSRollDesc(self, old_buildtools_commitish, new_buildtools_commitish):
-    gn_changes = self.GetGNChanges()
-
-    return (
-      'Roll buildtools %s..%s\n'
-      '\n'
-      '  In order to roll GN %s..%s (r%s:r%s) and pick up\n'
-      '  the following changes:\n'
-      '\n'
-      '%s'
-      '\n'
-      'TBR=%s\n' % (
-        old_buildtools_commitish[:COMMITISH_DIGITS],
-        new_buildtools_commitish[:COMMITISH_DIGITS],
-        self.old_gn_commitish[:COMMITISH_DIGITS],
-        self.new_gn_commitish[:COMMITISH_DIGITS],
-        self.old_gn_version,
-        self.new_gn_version,
-        gn_changes,
-        self.reviewer,
-      ))
-
-  def GetGNChanges(self):
-    _, out, _ = self.Call(
-        "git log --pretty='  %h %s' " +
-        "%s..%s tools/gn" % (self.old_gn_commitish, self.new_gn_commitish))
-    return out
-
-  def Call(self, cmd, cwd=None):
-    proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, shell=True,
-                            cwd=(cwd or self.chromium_src_dir))
-    out, err = proc.communicate()
-    return proc.returncode, out or '', err or ''
-
-
-if __name__ == '__main__':
-  roller = GNRoller()
-  sys.exit(roller.Roll())
diff --git a/tools/gn/bootstrap/OWNERS b/tools/gn/bootstrap/OWNERS
deleted file mode 100644
index 21aeec2..0000000
--- a/tools/gn/bootstrap/OWNERS
+++ /dev/null
@@ -1,4 +0,0 @@
-# It's OK to TBR changes to bootstrap.py that edits the file lists to bring
-# them in line with the Chrome build. For more substantial changes, please
-# send a normal review.
-*
diff --git a/tools/gn/misc/OWNERS b/tools/gn/misc/OWNERS
deleted file mode 100644
index 4d2bd88..0000000
--- a/tools/gn/misc/OWNERS
+++ /dev/null
@@ -1,2 +0,0 @@
-scottmg@chromium.org
-erg@chromium.org
diff --git a/tools/gn/bin/help_as_html.py b/tools/gn/misc/help_as_html.py
similarity index 100%
rename from tools/gn/bin/help_as_html.py
rename to tools/gn/misc/help_as_html.py
diff --git a/tools/gn/bin/gn-format.py b/tools/gn/misc/vim/gn-format.py
similarity index 100%
rename from tools/gn/bin/gn-format.py
rename to tools/gn/misc/vim/gn-format.py
diff --git a/tools/gn/parser_fuzzer.cc b/tools/gn/parser_fuzzer.cc
deleted file mode 100644
index e40da78..0000000
--- a/tools/gn/parser_fuzzer.cc
+++ /dev/null
@@ -1,71 +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 <stdint.h>
-
-#include "tools/gn/input_file.h"
-#include "tools/gn/parser.h"
-#include "tools/gn/source_file.h"
-#include "tools/gn/tokenizer.h"
-
-namespace {
-
-enum { kMaxContentDepth = 256, kMaxDodgy = 256 };
-
-// Some auto generated input is too unreasonable for fuzzing GN.
-// We see stack overflow when the parser hits really deeply "nested" input.
-// (I.E.: certain input that causes nested parsing function calls).
-//
-// Abstract max limits are undesirable in the release GN code, so some sanity
-// checks in the fuzzer to prevent stack overflow are done here.
-// - 1) Too many opening bracket, paren, or brace in a row.
-// - 2) Too many '!', '<' or '>' operators in a row.
-bool SanityCheckContent(const std::vector<Token>& tokens) {
-  int depth = 0;
-  int dodgy_count = 0;
-  for (const auto& token : tokens) {
-    switch (token.type()) {
-      case Token::LEFT_PAREN:
-      case Token::LEFT_BRACKET:
-      case Token::LEFT_BRACE:
-        ++depth;
-        break;
-      case Token::RIGHT_PAREN:
-      case Token::RIGHT_BRACKET:
-      case Token::RIGHT_BRACE:
-        --depth;
-        break;
-      case Token::BANG:
-      case Token::LESS_THAN:
-      case Token::GREATER_THAN:
-        ++dodgy_count;
-        break;
-      default:
-        break;
-    }
-    // Bail out as soon as a boundary is hit, inside the loop.
-    if (depth >= kMaxContentDepth || dodgy_count >= kMaxDodgy)
-      return false;
-  }
-
-  return true;
-}
-
-}  // namespace
-
-extern "C" int LLVMFuzzerTestOneInput(const unsigned char* data, size_t size) {
-  SourceFile source;
-  InputFile input(source);
-  input.SetContents(std::string(reinterpret_cast<const char*>(data), size));
-
-  Err err;
-  std::vector<Token> tokens = Tokenizer::Tokenize(&input, &err);
-  if (!SanityCheckContent(tokens))
-    return 0;
-
-  if (!err.has_error())
-    Parser::Parse(tokens, &err);
-
-  return 0;
-}
diff --git a/tools/gn/tutorial/hello.cc b/tools/gn/tutorial/hello.cc
deleted file mode 100644
index 8b25cd9..0000000
--- a/tools/gn/tutorial/hello.cc
+++ /dev/null
@@ -1,17 +0,0 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "tools/gn/tutorial/hello.h"
-
-#include <stdio.h>
-
-void Hello(const char* who) {
-  printf("Hello, %s.\n", who);
-}
-
-#if defined(TWO_PEOPLE)
-void Hello(const char* one, const char* two) {
-  printf("Hello, %s and %s.\n", one, two);
-}
-#endif
diff --git a/tools/gn/tutorial/hello.h b/tools/gn/tutorial/hello.h
deleted file mode 100644
index 253fe24..0000000
--- a/tools/gn/tutorial/hello.h
+++ /dev/null
@@ -1,14 +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.
-
-#ifndef TOOLS_GN_TUTORIAL_HELLO_H_
-#define TOOLS_GN_TUTORIAL_HELLO_H_
-
-void Hello(const char* who);
-
-#if defined(TWO_PEOPLE)
-void Hello(const char* one, const char* two);
-#endif
-
-#endif  // TOOLS_GN_TUTORIAL_HELLO_H_
diff --git a/tools/gn/tutorial/hello_world.cc b/tools/gn/tutorial/hello_world.cc
deleted file mode 100644
index 84ffc3f..0000000
--- a/tools/gn/tutorial/hello_world.cc
+++ /dev/null
@@ -1,10 +0,0 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include <stdio.h>
-
-int main() {
-  printf("Hello, world.\n");
-  return 0;
-}
diff --git a/tools/gn/tutorial/say_hello.cc b/tools/gn/tutorial/say_hello.cc
deleted file mode 100644
index d8092bd..0000000
--- a/tools/gn/tutorial/say_hello.cc
+++ /dev/null
@@ -1,14 +0,0 @@
-// Copyright 2013 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "tools/gn/tutorial/hello.h"
-
-int main() {
-#if defined(TWO_PEOPLE)
-  Hello("Bill", "Joy");
-#else
-  Hello("everyone");
-#endif
-  return 0;
-}