diff --git a/DEPS b/DEPS
index 1e6ec80..c6a15d9 100644
--- a/DEPS
+++ b/DEPS
@@ -4,9 +4,9 @@
   'chromium_git': 'https://chromium.googlesource.com',
   'pdfium_git': 'https://pdfium.googlesource.com',
 
-  'build_revision': '4d35c0d78ccf35b1597b9dd4adad52203916a01f',
+  'build_revision': '2f91397926336dd46ea49ffef702197b9cc2215a',
   'buildtools_revision': '5378d73123b64907773cc5c1bb027b2f765ff00a',
-  'clang_revision': '9dc1904d214a77f081362c1b848b5f28d2192748',
+  'clang_revision': '2956eca572ff0e1b181df65f71a045f061a2eb34',
   'cygwin_revision': 'c89e446b273697fadf3a10ff1007a97c0b7de6df',
   'gmock_revision': '29763965ab52f24565299976b936d1265cb6a271',
   'gtest_revision': '8245545b6dc9c4703e6496d1efd19e975ad2b038',
diff --git a/build_overrides/gtest.gni b/build_overrides/gtest.gni
new file mode 100644
index 0000000..6089962
--- /dev/null
+++ b/build_overrides/gtest.gni
@@ -0,0 +1,9 @@
+# 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.
+
+# Exclude support for registering main function in multi-process tests.
+gtest_include_multiprocess = false
+
+# Exclude support for platform-specific operations across unit tests.
+gtest_include_platform_test = false
diff --git a/testing/multiprocess_func_list.cc b/testing/multiprocess_func_list.cc
deleted file mode 100644
index a400557..0000000
--- a/testing/multiprocess_func_list.cc
+++ /dev/null
@@ -1,55 +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 "multiprocess_func_list.h"
-
-#include <map>
-
-// Helper functions to maintain mapping of "test name"->test func.
-// The information is accessed via a global map.
-namespace multi_process_function_list {
-
-namespace {
-
-struct ProcessFunctions {
-  ProcessFunctions() : main(NULL), setup(NULL) {}
-  ProcessFunctions(TestMainFunctionPtr main, SetupFunctionPtr setup)
-      : main(main), setup(setup) {}
-  TestMainFunctionPtr main;
-  SetupFunctionPtr setup;
-};
-
-typedef std::map<std::string, ProcessFunctions> MultiProcessTestMap;
-
-// Retrieve a reference to the global 'func name' -> func ptr map.
-MultiProcessTestMap& GetMultiprocessFuncMap() {
-  static MultiProcessTestMap test_name_to_func_ptr_map;
-  return test_name_to_func_ptr_map;
-}
-
-}  // namespace
-
-AppendMultiProcessTest::AppendMultiProcessTest(
-    std::string test_name,
-    TestMainFunctionPtr main_func_ptr,
-    SetupFunctionPtr setup_func_ptr) {
-  GetMultiprocessFuncMap()[test_name] =
-      ProcessFunctions(main_func_ptr, setup_func_ptr);
-}
-
-int InvokeChildProcessTest(std::string test_name) {
-  MultiProcessTestMap& func_lookup_table = GetMultiprocessFuncMap();
-  MultiProcessTestMap::iterator it = func_lookup_table.find(test_name);
-  if (it != func_lookup_table.end()) {
-    const ProcessFunctions& process_functions = it->second;
-    if (process_functions.setup)
-      (*process_functions.setup)();
-    if (process_functions.main)
-      return (*process_functions.main)();
-  }
-
-  return -1;
-}
-
-}  // namespace multi_process_function_list
diff --git a/testing/multiprocess_func_list.h b/testing/multiprocess_func_list.h
deleted file mode 100644
index 2ec4d7d..0000000
--- a/testing/multiprocess_func_list.h
+++ /dev/null
@@ -1,72 +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 TESTING_MULTIPROCESS_FUNC_LIST_H_
-#define TESTING_MULTIPROCESS_FUNC_LIST_H_
-
-#include <string>
-
-// This file provides the plumbing to register functions to be executed
-// as the main function of a child process in a multi-process test.
-// This complements the MultiProcessTest class which provides facilities
-// for launching such tests.
-//
-// The MULTIPROCESS_TEST_MAIN() macro registers a string -> func_ptr mapping
-// by creating a new global instance of the AppendMultiProcessTest() class
-// this means that by the time that we reach our main() function the mapping
-// is already in place.
-//
-// Example usage:
-//  MULTIPROCESS_TEST_MAIN(a_test_func) {
-//    // Code here runs in a child process.
-//    return 0;
-//  }
-//
-// The prototype of a_test_func is implicitly
-//   int test_main_func_name();
-
-namespace multi_process_function_list {
-
-// Type for child process main functions.
-typedef int (*TestMainFunctionPtr)();
-
-// Type for child setup functions.
-typedef void (*SetupFunctionPtr)();
-
-// Helper class to append a test function to the global mapping.
-// Used by the MULTIPROCESS_TEST_MAIN macro.
-class AppendMultiProcessTest {
- public:
-  // |main_func_ptr| is the main function that is run in the child process.
-  // |setup_func_ptr| is a function run when the global mapping is added.
-  AppendMultiProcessTest(std::string test_name,
-                         TestMainFunctionPtr main_func_ptr,
-                         SetupFunctionPtr setup_func_ptr);
-};
-
-// Invoke the main function of a test previously registered with
-// MULTIPROCESS_TEST_MAIN()
-int InvokeChildProcessTest(std::string test_name);
-
-// This macro creates a global MultiProcessTest::AppendMultiProcessTest object
-// whose constructor does the work of adding the global mapping.
-#define MULTIPROCESS_TEST_MAIN(test_main) \
-  MULTIPROCESS_TEST_MAIN_WITH_SETUP(test_main, NULL)
-
-// Same as above but lets callers specify a setup method that is run in the
-// child process, just before the main function is run.  This facilitates
-// adding a generic one-time setup function for multiple tests.
-#define MULTIPROCESS_TEST_MAIN_WITH_SETUP(test_main, test_setup) \
-  int test_main();                                               \
-  namespace {                                                    \
-  multi_process_function_list::AppendMultiProcessTest            \
-      AddMultiProcessTest##_##test_main(#test_main,              \
-                                        (test_main),             \
-                                        (test_setup));           \
-  }                                                              \
-  int test_main()
-
-}  // namespace multi_process_function_list
-
-#endif  // TESTING_MULTIPROCESS_FUNC_LIST_H_
