diff --git a/DEPS b/DEPS
index 58ffb77..44183a5 100644
--- a/DEPS
+++ b/DEPS
@@ -21,7 +21,7 @@
   'chromium_git': 'https://chromium.googlesource.com',
   'skia_revision': '8cc209111876b7c78b5ec577c9221d8ed5e21024',
   'v8_revision': '3f036fc0ba4ca4483fe77822f8605c277d37ee24',
-  'base_revision': '163fb42027bea947916ba4d2fa03aa0ed7c3f99e',
+  'base_revision': '5e00da80f6adb7082d1c0e88d3274cf87cc43bc5',
   'angle_revision': '46ccef1992a8ede16a596c3dd73cff13c047267d',
   'buildtools_revision': '222bd42ce39d1bd8f08fe089b066f49c469e1cdf',
   'dart_revision': 'f64c907557646699fada4acb7e9a82346a369993',
@@ -31,7 +31,7 @@
   'boringssl_revision': '642f1498d056dbba3e50ed5a232ab2f482626dec',
   'lss_revision': '6f97298fe3794e92c8c896a6bc06e0b36e4c3de3',
   'nacl_revision': 'f5bc68c59b147b66d553dc6fc17426682cf138e2',
-  'tonic_revision': 'e41f72c684e0da61304ebd6f3147d0fe23ffbb56',
+  'tonic_revision': 'f7acabb8fa6c91124486a41194eac3cd421b70d0',
   'gurl_revision': '561639dfb664ee4c14371f569213b9d41f4fe110',
 }
 
@@ -51,7 +51,7 @@
    Var('chromium_git') + '/chromium/buildtools.git' + '@' +  Var('buildtools_revision'),
 
   'src/testing/gtest':
-   Var('chromium_git') + '/external/googletest.git' + '@' + 'be1868139ffe0ccd0e8e3b37292b84c821d9c8ad', # from svn revision 704
+   Var('chromium_git') + '/external/googletest.git' + '@' + '00a70a9667d92a4695d84e4fa36b64f611f147da', # from svn revision 725
 
   'src/testing/gmock':
    Var('chromium_git') + '/external/googlemock.git' + '@' + '29763965ab52f24565299976b936d1265cb6a271', # from svn revision 501
diff --git a/apps/benchmark/benchmark_app.cc b/apps/benchmark/benchmark_app.cc
index 12c2c50..3e2ea0b 100644
--- a/apps/benchmark/benchmark_app.cc
+++ b/apps/benchmark/benchmark_app.cc
@@ -75,8 +75,9 @@
   std::string ComputeCategoriesStr() {
     std::set<std::string> category_set;
     for (const Measurement& measurement : args_.measurements) {
-      std::vector<std::string> categories;
-      base::SplitString(measurement.target_event.categories, ',', &categories);
+      std::vector<std::string> categories =
+          base::SplitString(measurement.target_event.categories, ",",
+                            base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL);
       category_set.insert(categories.begin(), categories.end());
     }
     std::vector<std::string> unique_categories(category_set.begin(),
diff --git a/apps/benchmark/run_args.cc b/apps/benchmark/run_args.cc
index 6f4adba..42e399c 100644
--- a/apps/benchmark/run_args.cc
+++ b/apps/benchmark/run_args.cc
@@ -30,8 +30,8 @@
 bool GetMeasurement(const std::string& measurement_spec, Measurement* result) {
   // Measurements are described in the format:
   // <measurement type>/<event category>/<event name>.
-  std::vector<std::string> parts;
-  base::SplitString(measurement_spec, '/', &parts);
+  std::vector<std::string> parts = base::SplitString(
+      measurement_spec, "/", base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL);
   if (parts.size() < 1) {
     LOG(ERROR) << "Could not parse the measurement description: "
                << measurement_spec;
diff --git a/build/config/BUILD.gn b/build/config/BUILD.gn
index 0eff7b1..810f3a7 100644
--- a/build/config/BUILD.gn
+++ b/build/config/BUILD.gn
@@ -135,6 +135,12 @@
   }
 }
 
+# TODO(vtl): Chromium supports precompiled headers (on a per-target basis), but
+# we don't. Stuff from //base depends on this. Add stuff here if we ever want
+# precompiled headers.
+config("precompiled_headers") {
+}
+
 # Default libraries ------------------------------------------------------------
 
 # This config defines the default libraries applied to all targets.
diff --git a/examples/device_name/java/src/org/chromium/mojo/examples/DeviceName.java b/examples/device_name/java/src/org/chromium/mojo/examples/DeviceName.java
index 1fdbad0..13e2e52 100644
--- a/examples/device_name/java/src/org/chromium/mojo/examples/DeviceName.java
+++ b/examples/device_name/java/src/org/chromium/mojo/examples/DeviceName.java
@@ -7,8 +7,8 @@
 import android.content.Context;
 import android.os.Build;
 
-import org.chromium.base.CalledByNative;
-import org.chromium.base.JNINamespace;
+import org.chromium.base.annotations.CalledByNative;
+import org.chromium.base.annotations.JNINamespace;
 
 /**
  * Example Java class providing functionality to the native side.
diff --git a/examples/native_run_app/native_run_app.cc b/examples/native_run_app/native_run_app.cc
index 090ba7e..dc02ff0 100644
--- a/examples/native_run_app/native_run_app.cc
+++ b/examples/native_run_app/native_run_app.cc
@@ -22,6 +22,7 @@
 #include "base/logging.h"
 #include "base/macros.h"
 #include "base/strings/string_split.h"
+#include "base/strings/string_util.h"
 #include "mojo/public/c/system/main.h"
 #include "mojo/public/cpp/application/application_delegate.h"
 #include "mojo/public/cpp/application/application_impl_base.h"
@@ -95,8 +96,10 @@
 
     std::string input(reinterpret_cast<const char*>(&bytes_read[0]),
                       bytes_read.size());
-    command_line_.clear();
-    base::SplitStringAlongWhitespace(input, &command_line_);
+    // TODO(vtl): Are these arguments really what we want? Probably not.
+    command_line_ =
+        base::SplitString(input, base::kWhitespaceASCII, base::KEEP_WHITESPACE,
+                          base::SPLIT_WANT_NONEMPTY);
 
     if (command_line_.empty()) {
       Start();
diff --git a/examples/ui/tile/tile_app.cc b/examples/ui/tile/tile_app.cc
index 989fa38..bdd24ae 100644
--- a/examples/ui/tile/tile_app.cc
+++ b/examples/ui/tile/tile_app.cc
@@ -42,7 +42,8 @@
     std::string key_str(connection_url, key.begin, key.len);
     std::string value_str(connection_url, value.begin, value.len);
     if (key_str == "views") {
-      base::SplitString(value_str, ',', &params->view_urls);
+      params->view_urls = base::SplitString(
+          value_str, ",", base::KEEP_WHITESPACE, base::SPLIT_WANT_NONEMPTY);
     } else if (key_str == "vm") {
       if (value_str == "any")
         params->version_mode = TileParams::VersionMode::kAny;
diff --git a/gin/modules/file_module_provider.cc b/gin/modules/file_module_provider.cc
index b8465ae..fc8ae99 100644
--- a/gin/modules/file_module_provider.cc
+++ b/gin/modules/file_module_provider.cc
@@ -20,8 +20,8 @@
   if (!runner)
     return;
 
-  std::vector<std::string> components;
-  base::SplitString(id, '/', &components);
+  std::vector<std::string> components =
+      base::SplitString(id, "/", base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL);
 
   base::FilePath path;
   for (size_t i = 0; i < components.size(); ++i) {
diff --git a/gpu/command_buffer/service/feature_info.cc b/gpu/command_buffer/service/feature_info.cc
index 8caca94..502bfc2 100644
--- a/gpu/command_buffer/service/feature_info.cc
+++ b/gpu/command_buffer/service/feature_info.cc
@@ -73,8 +73,8 @@
 void StringToWorkarounds(
     const std::string& types, FeatureInfo::Workarounds* workarounds) {
   DCHECK(workarounds);
-  std::vector<std::string> pieces;
-  base::SplitString(types, ',', &pieces);
+  std::vector<std::string> pieces = base::SplitString(
+      types, ",", base::KEEP_WHITESPACE, base::SPLIT_WANT_NONEMPTY);
   for (size_t i = 0; i < pieces.size(); ++i) {
     int number = 0;
     bool succeed = base::StringToInt(pieces[i], &number);
diff --git a/gpu/command_buffer/service/gpu_tracer.cc b/gpu/command_buffer/service/gpu_tracer.cc
index 33d318d..ae783ac 100644
--- a/gpu/command_buffer/service/gpu_tracer.cc
+++ b/gpu/command_buffer/service/gpu_tracer.cc
@@ -51,21 +51,11 @@
                                  int64 start_time,
                                  int64 end_time) {
   TRACE_EVENT_COPY_BEGIN_WITH_ID_TID_AND_TIMESTAMP1(
-      TRACE_DISABLED_BY_DEFAULT("gpu.device"),
-      name.c_str(),
-      local_trace_id_,
-      named_thread_.thread_id(),
-      start_time,
-      "gl_category",
-      category.c_str());
+      TRACE_DISABLED_BY_DEFAULT("gpu.device"), name.c_str(), local_trace_id_,
+      named_thread_.GetThreadId(), start_time, "gl_category", category.c_str());
   TRACE_EVENT_COPY_END_WITH_ID_TID_AND_TIMESTAMP1(
-      TRACE_DISABLED_BY_DEFAULT("gpu.device"),
-      name.c_str(),
-      local_trace_id_,
-      named_thread_.thread_id(),
-      end_time,
-      "gl_category",
-      category.c_str());
+      TRACE_DISABLED_BY_DEFAULT("gpu.device"), name.c_str(), local_trace_id_,
+      named_thread_.GetThreadId(), end_time, "gl_category", category.c_str());
   ++local_trace_id_;
 }
 
diff --git a/gpu/command_buffer/service/test_helper.cc b/gpu/command_buffer/service/test_helper.cc
index 096a60c..28d16ae 100644
--- a/gpu/command_buffer/service/test_helper.cc
+++ b/gpu/command_buffer/service/test_helper.cc
@@ -270,7 +270,7 @@
 
   SetupFeatureInfoInitExpectationsWithGLVersion(gl, extensions, "", gl_version);
 
-  std::string l_version(base::StringToLowerASCII(std::string(gl_version)));
+  std::string l_version(base::ToLowerASCII(std::string(gl_version)));
   bool is_es3 = (l_version.substr(0, 12) == "opengl es 3.");
 
   EXPECT_CALL(*gl, GetIntegerv(GL_MAX_RENDERBUFFER_SIZE, _))
@@ -345,7 +345,7 @@
       .WillOnce(Return(reinterpret_cast<const uint8*>(gl_version)))
       .RetiresOnSaturation();
 
-  std::string l_version(base::StringToLowerASCII(std::string(gl_version)));
+  std::string l_version(base::ToLowerASCII(std::string(gl_version)));
   bool is_es3 = (l_version.substr(0, 12) == "opengl es 3.");
 
   if (strstr(extensions, "GL_ARB_texture_float") ||
diff --git a/gpu/config/gpu_control_list.cc b/gpu/config/gpu_control_list.cc
index eaa2e61..4d72fa6 100644
--- a/gpu/config/gpu_control_list.cc
+++ b/gpu/config/gpu_control_list.cc
@@ -24,8 +24,10 @@
 bool ProcessVersionString(const std::string& version_string,
                           char splitter,
                           std::vector<std::string>* version) {
+  char splitter_string[2] = {splitter, '\0'};
   DCHECK(version);
-  base::SplitString(version_string, splitter, version);
+  *version = base::SplitString(version_string, splitter_string,
+                               base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL);
   if (version->size() == 0)
     return false;
   // If the splitter is '-', we assume it's a date with format "mm-dd-yyyy";
@@ -1004,8 +1006,8 @@
   if (gl_version_info_.get() == NULL && gl_type_ == kGLTypeNone)
     return false;
 
-  std::vector<std::string> segments;
-  base::SplitString(gl_version, ' ', &segments);
+  std::vector<std::string> segments = base::SplitString(
+      gl_version, " ", base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL);
   std::string number;
   GLType gl_type = kGLTypeNone;
   if (segments.size() > 2 &&
@@ -1015,7 +1017,8 @@
 
     gl_type = kGLTypeGLES;
     if (segments.size() > 3 &&
-        base::StartsWithASCII(segments[3], "(ANGLE", false)) {
+        base::StartsWith(segments[3], "(ANGLE",
+                         base::CompareCase::INSENSITIVE_ASCII)) {
       gl_type = kGLTypeANGLE;
     }
   } else {
diff --git a/gpu/config/gpu_info_collector.cc b/gpu/config/gpu_info_collector.cc
index 0851bca..b60aeab 100644
--- a/gpu/config/gpu_info_collector.cc
+++ b/gpu/config/gpu_info_collector.cc
@@ -69,8 +69,8 @@
       sub_string = version_string.substr(begin, end - begin);
     else
       sub_string = version_string.substr(begin);
-    std::vector<std::string> pieces;
-    base::SplitString(sub_string, '.', &pieces);
+    std::vector<std::string> pieces = base::SplitString(
+        sub_string, ".", base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL);
     if (pieces.size() >= 2)
       return pieces[0] + "." + pieces[1];
   }
diff --git a/gpu/config/gpu_info_collector_android.cc b/gpu/config/gpu_info_collector_android.cc
index 97a79e5..d3b457f 100644
--- a/gpu/config/gpu_info_collector_android.cc
+++ b/gpu/config/gpu_info_collector_android.cc
@@ -37,8 +37,8 @@
     sub_string = version_string.substr(begin, end - begin);
   else
     sub_string = version_string.substr(begin);
-  std::vector<std::string> pieces;
-  base::SplitString(sub_string, '.', &pieces);
+  std::vector<std::string> pieces = base::SplitString(
+      sub_string, ".", base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL);
   if (pieces.size() < 2)
     return "0";
   return pieces[0] + "." + pieces[1];
diff --git a/gpu/config/gpu_info_collector_linux.cc b/gpu/config/gpu_info_collector_linux.cc
index 413e949..3af0127 100644
--- a/gpu/config/gpu_info_collector_linux.cc
+++ b/gpu/config/gpu_info_collector_linux.cc
@@ -56,7 +56,8 @@
   base::StringTokenizer t(contents, "\r\n");
   while (t.GetNext()) {
     std::string line = t.token();
-    if (base::StartsWithASCII(line, "ReleaseVersion=", true)) {
+    if (base::StartsWith(line, "ReleaseVersion=",
+                         base::CompareCase::SENSITIVE)) {
       size_t begin = line.find_first_of("0123456789");
       if (begin != std::string::npos) {
         size_t end = line.find_first_not_of("0123456789.", begin);
@@ -244,10 +245,11 @@
   DCHECK(gpu_info);
 
   std::string gl_version = gpu_info->gl_version;
-  if (base::StartsWithASCII(gl_version, "OpenGL ES", true))
+  if (base::StartsWith(gl_version, "OpenGL ES", base::CompareCase::SENSITIVE))
     gl_version = gl_version.substr(10);
-  std::vector<std::string> pieces;
-  base::SplitStringAlongWhitespace(gl_version, &pieces);
+  std::vector<std::string> pieces =
+      base::SplitString(gl_version, base::kWhitespaceASCII,
+                        base::KEEP_WHITESPACE, base::SPLIT_WANT_NONEMPTY);
   // In linux, the gl version string might be in the format of
   //   GLVersion DriverVendor DriverVersion
   if (pieces.size() < 3)
diff --git a/gpu/config/gpu_test_expectations_parser.cc b/gpu/config/gpu_test_expectations_parser.cc
index 9a6e191..82b3858 100644
--- a/gpu/config/gpu_test_expectations_parser.cc
+++ b/gpu/config/gpu_test_expectations_parser.cc
@@ -129,9 +129,9 @@
 };
 
 Token ParseToken(const std::string& word) {
-  if (base::StartsWithASCII(word, "//", false))
+  if (base::StartsWith(word, "//", base::CompareCase::INSENSITIVE_ASCII))
     return kTokenComment;
-  if (base::StartsWithASCII(word, "0x", false))
+  if (base::StartsWith(word, "0x", base::CompareCase::INSENSITIVE_ASCII))
     return kConfigGPUDeviceID;
 
   for (int32 i = 0; i < kNumberOfExactMatchTokens; ++i) {
@@ -172,8 +172,8 @@
   entries_.clear();
   error_messages_.clear();
 
-  std::vector<std::string> lines;
-  base::SplitString(data, '\n', &lines);
+  std::vector<std::string> lines = base::SplitString(
+      data, "\n", base::KEEP_WHITESPACE, base::SPLIT_WANT_NONEMPTY);
   bool rt = true;
   for (size_t i = 0; i < lines.size(); ++i) {
     if (!ParseLine(lines[i], i + 1))
@@ -219,8 +219,9 @@
 bool GPUTestExpectationsParser::ParseConfig(
     const std::string& config_data, GPUTestConfig* config) {
   DCHECK(config);
-  std::vector<std::string> tokens;
-  base::SplitStringAlongWhitespace(config_data, &tokens);
+  std::vector<std::string> tokens =
+      base::SplitString(config_data, base::kWhitespaceASCII,
+                        base::KEEP_WHITESPACE, base::SPLIT_WANT_NONEMPTY);
 
   for (size_t i = 0; i < tokens.size(); ++i) {
     Token token = ParseToken(tokens[i]);
@@ -263,8 +264,9 @@
 
 bool GPUTestExpectationsParser::ParseLine(
     const std::string& line_data, size_t line_number) {
-  std::vector<std::string> tokens;
-  base::SplitStringAlongWhitespace(line_data, &tokens);
+  std::vector<std::string> tokens =
+      base::SplitString(line_data, base::kWhitespaceASCII,
+                        base::KEEP_WHITESPACE, base::SPLIT_WANT_NONEMPTY);
   int32 stage = kLineParserBegin;
   GPUTestExpectationEntry entry;
   entry.line_number = line_number;
diff --git a/gpu/config/gpu_util.cc b/gpu/config/gpu_util.cc
index 5d67988..96ddedf 100644
--- a/gpu/config/gpu_util.cc
+++ b/gpu/config/gpu_util.cc
@@ -34,8 +34,8 @@
 
 void StringToIntSet(const std::string& str, std::set<int>* list) {
   DCHECK(list);
-  std::vector<std::string> pieces;
-  base::SplitString(str, ',', &pieces);
+  std::vector<std::string> pieces =
+      base::SplitString(str, ",", base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL);
   for (size_t i = 0; i < pieces.size(); ++i) {
     int number = 0;
     bool succeed = base::StringToInt(pieces[i], &number);
diff --git a/mojo/android/javatests/src/org/chromium/mojo/MojoTestCase.java b/mojo/android/javatests/src/org/chromium/mojo/MojoTestCase.java
index 6edf95f..2332fcf 100644
--- a/mojo/android/javatests/src/org/chromium/mojo/MojoTestCase.java
+++ b/mojo/android/javatests/src/org/chromium/mojo/MojoTestCase.java
@@ -7,7 +7,7 @@
 import android.content.Context;
 import android.test.InstrumentationTestCase;
 
-import org.chromium.base.JNINamespace;
+import org.chromium.base.annotations.JNINamespace;
 import org.chromium.base.library_loader.LibraryLoader;
 import org.chromium.base.library_loader.LibraryProcessType;
 
diff --git a/mojo/android/javatests/src/org/chromium/mojo/bindings/ValidationTestUtil.java b/mojo/android/javatests/src/org/chromium/mojo/bindings/ValidationTestUtil.java
index 605cfb0..91b993c 100644
--- a/mojo/android/javatests/src/org/chromium/mojo/bindings/ValidationTestUtil.java
+++ b/mojo/android/javatests/src/org/chromium/mojo/bindings/ValidationTestUtil.java
@@ -4,8 +4,8 @@
 
 package org.chromium.mojo.bindings;
 
-import org.chromium.base.CalledByNative;
-import org.chromium.base.JNINamespace;
+import org.chromium.base.annotations.CalledByNative;
+import org.chromium.base.annotations.JNINamespace;
 
 import java.nio.ByteBuffer;
 import java.nio.ByteOrder;
diff --git a/mojo/android/system/src/org/chromium/mojo/system/impl/BaseRunLoop.java b/mojo/android/system/src/org/chromium/mojo/system/impl/BaseRunLoop.java
index 0d09560..b39d5ed 100644
--- a/mojo/android/system/src/org/chromium/mojo/system/impl/BaseRunLoop.java
+++ b/mojo/android/system/src/org/chromium/mojo/system/impl/BaseRunLoop.java
@@ -4,8 +4,8 @@
 
 package org.chromium.mojo.system.impl;
 
-import org.chromium.base.CalledByNative;
-import org.chromium.base.JNINamespace;
+import org.chromium.base.annotations.CalledByNative;
+import org.chromium.base.annotations.JNINamespace;
 import org.chromium.mojo.system.RunLoop;
 
 import java.lang.Runnable;
diff --git a/mojo/android/system/src/org/chromium/mojo/system/impl/CoreImpl.java b/mojo/android/system/src/org/chromium/mojo/system/impl/CoreImpl.java
index 9cfe61f..72fdd6b 100644
--- a/mojo/android/system/src/org/chromium/mojo/system/impl/CoreImpl.java
+++ b/mojo/android/system/src/org/chromium/mojo/system/impl/CoreImpl.java
@@ -4,8 +4,8 @@
 
 package org.chromium.mojo.system.impl;
 
-import org.chromium.base.CalledByNative;
-import org.chromium.base.JNINamespace;
+import org.chromium.base.annotations.CalledByNative;
+import org.chromium.base.annotations.JNINamespace;
 import org.chromium.mojo.system.AsyncWaiter;
 import org.chromium.mojo.system.Core;
 import org.chromium.mojo.system.DataPipe;
diff --git a/sandbox/linux/services/thread_helpers.cc b/sandbox/linux/services/thread_helpers.cc
index c1ba04a..89648bc 100644
--- a/sandbox/linux/services/thread_helpers.cc
+++ b/sandbox/linux/services/thread_helpers.cc
@@ -121,12 +121,12 @@
   const char* message;
 
   if (action == ThreadAction::Start) {
-    // Should start the thread before calling thread_id().
+    // Should start the thread before calling GetThreadId().
     if (!thread->Start())
       return false;
   }
 
-  const base::PlatformThreadId thread_id = thread->thread_id();
+  const base::PlatformThreadId thread_id = thread->GetThreadId();
   const std::string thread_id_dir_str =
       "self/task/" + base::IntToString(thread_id) + "/";
 
diff --git a/services/http_server/http_request_parser.cc b/services/http_server/http_request_parser.cc
index 5aff0d0..d21107d 100644
--- a/services/http_server/http_request_parser.cc
+++ b/services/http_server/http_request_parser.cc
@@ -79,8 +79,8 @@
   // Request main main header, eg. GET /foobar.html HTTP/1.1
   {
     const std::string header_line = ShiftLine();
-    std::vector<std::string> header_line_tokens;
-    base::SplitString(header_line, ' ', &header_line_tokens);
+    std::vector<std::string> header_line_tokens = base::SplitString(
+        header_line, " ", base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL);
     DCHECK_EQ(3u, header_line_tokens.size());
     // Method.
     http_request_->method = header_line_tokens[0];
@@ -89,8 +89,7 @@
     // know) anything about the server address.
     http_request_->relative_url = header_line_tokens[1];
     // Protocol.
-    const std::string protocol =
-        base::StringToLowerASCII(header_line_tokens[2]);
+    const std::string protocol = base::ToLowerASCII(header_line_tokens[2]);
     CHECK(protocol == "http/1.0" || protocol == "http/1.1") <<
         "Protocol not supported: " << protocol;
   }
diff --git a/services/java_handler/java/src/org/chromium/services/java_handler/JavaHandler.java b/services/java_handler/java/src/org/chromium/services/java_handler/JavaHandler.java
index 5af2df7..9969637 100644
--- a/services/java_handler/java/src/org/chromium/services/java_handler/JavaHandler.java
+++ b/services/java_handler/java/src/org/chromium/services/java_handler/JavaHandler.java
@@ -9,8 +9,8 @@
 
 import dalvik.system.DexClassLoader;
 
-import org.chromium.base.CalledByNative;
-import org.chromium.base.JNINamespace;
+import org.chromium.base.annotations.CalledByNative;
+import org.chromium.base.annotations.JNINamespace;
 import org.chromium.mojo.system.Core;
 import org.chromium.mojo.system.MessagePipeHandle;
 import org.chromium.mojo.system.impl.CoreImpl;
diff --git a/services/native_viewport/android/src/org/chromium/mojo/PlatformViewportAndroid.java b/services/native_viewport/android/src/org/chromium/mojo/PlatformViewportAndroid.java
index fc39880..387f6f5 100644
--- a/services/native_viewport/android/src/org/chromium/mojo/PlatformViewportAndroid.java
+++ b/services/native_viewport/android/src/org/chromium/mojo/PlatformViewportAndroid.java
@@ -14,8 +14,8 @@
 import android.view.inputmethod.EditorInfo;
 import android.view.inputmethod.InputConnection;
 
-import org.chromium.base.CalledByNative;
-import org.chromium.base.JNINamespace;
+import org.chromium.base.annotations.CalledByNative;
+import org.chromium.base.annotations.JNINamespace;
 import org.chromium.mojo.keyboard.KeyboardServiceImpl;
 import org.chromium.mojo.keyboard.KeyboardServiceState;
 
diff --git a/services/python/mojo_url_redirector/mojo_url_redirector_apptest.cc b/services/python/mojo_url_redirector/mojo_url_redirector_apptest.cc
index 5e8e7b7..5d72314 100644
--- a/services/python/mojo_url_redirector/mojo_url_redirector_apptest.cc
+++ b/services/python/mojo_url_redirector/mojo_url_redirector_apptest.cc
@@ -166,8 +166,9 @@
       http_server::HttpRequestPtr request,
       const mojo::Callback<void(http_server::HttpResponsePtr)>& callback) {
   // The relative url should be of the form "/<platform>/<app>_location".
-  std::vector<std::string> url_components;
-  base::SplitString(request->relative_url, '/', &url_components);
+  std::vector<std::string> url_components =
+      base::SplitString(request->relative_url.get(), "/", base::TRIM_WHITESPACE,
+                        base::SPLIT_WANT_ALL);
   ASSERT_EQ(3u, url_components.size());
   std::string requested_platform = url_components[1];
   EXPECT_TRUE(requested_platform == kPlatform1 ||
diff --git a/shell/android/apk/src/org/chromium/mojo/shell/AndroidHandler.java b/shell/android/apk/src/org/chromium/mojo/shell/AndroidHandler.java
index e2df455..17f0189 100644
--- a/shell/android/apk/src/org/chromium/mojo/shell/AndroidHandler.java
+++ b/shell/android/apk/src/org/chromium/mojo/shell/AndroidHandler.java
@@ -9,8 +9,8 @@
 
 import dalvik.system.DexClassLoader;
 
-import org.chromium.base.CalledByNative;
-import org.chromium.base.JNINamespace;
+import org.chromium.base.annotations.CalledByNative;
+import org.chromium.base.annotations.JNINamespace;
 import org.chromium.base.TraceEvent;
 
 import java.io.File;
diff --git a/shell/android/apk/src/org/chromium/mojo/shell/Bootstrap.java b/shell/android/apk/src/org/chromium/mojo/shell/Bootstrap.java
index 0df8871..257e8f5 100644
--- a/shell/android/apk/src/org/chromium/mojo/shell/Bootstrap.java
+++ b/shell/android/apk/src/org/chromium/mojo/shell/Bootstrap.java
@@ -6,7 +6,7 @@
 
 import android.content.Context;
 
-import org.chromium.base.JNINamespace;
+import org.chromium.base.annotations.JNINamespace;
 
 import java.io.File;
 
diff --git a/shell/android/apk/src/org/chromium/mojo/shell/JavaApplicationRegistry.java b/shell/android/apk/src/org/chromium/mojo/shell/JavaApplicationRegistry.java
index 1c33677..0d72b13 100644
--- a/shell/android/apk/src/org/chromium/mojo/shell/JavaApplicationRegistry.java
+++ b/shell/android/apk/src/org/chromium/mojo/shell/JavaApplicationRegistry.java
@@ -6,9 +6,9 @@
 
 import android.os.HandlerThread;
 
+import org.chromium.base.annotations.CalledByNative;
+import org.chromium.base.annotations.JNINamespace;
 import org.chromium.base.ApplicationStatus;
-import org.chromium.base.CalledByNative;
-import org.chromium.base.JNINamespace;
 import org.chromium.mojo.application.ApplicationConnection;
 import org.chromium.mojo.application.ApplicationDelegate;
 import org.chromium.mojo.application.ApplicationRunner;
diff --git a/shell/android/apk/src/org/chromium/mojo/shell/NativeHandlerThread.java b/shell/android/apk/src/org/chromium/mojo/shell/NativeHandlerThread.java
index 334372e..1481616 100644
--- a/shell/android/apk/src/org/chromium/mojo/shell/NativeHandlerThread.java
+++ b/shell/android/apk/src/org/chromium/mojo/shell/NativeHandlerThread.java
@@ -6,7 +6,7 @@
 
 import android.os.HandlerThread;
 
-import org.chromium.base.JNINamespace;
+import org.chromium.base.annotations.JNINamespace;
 
 /**
  * Handler thread associated with a native message loop.
diff --git a/shell/android/apk/src/org/chromium/mojo/shell/ShellService.java b/shell/android/apk/src/org/chromium/mojo/shell/ShellService.java
index af65505..0578e81 100644
--- a/shell/android/apk/src/org/chromium/mojo/shell/ShellService.java
+++ b/shell/android/apk/src/org/chromium/mojo/shell/ShellService.java
@@ -16,9 +16,9 @@
 import android.os.IBinder;
 import android.util.Log;
 
+import org.chromium.base.annotations.CalledByNative;
+import org.chromium.base.annotations.JNINamespace;
 import org.chromium.base.ApplicationStatus;
-import org.chromium.base.CalledByNative;
-import org.chromium.base.JNINamespace;
 import org.chromium.mojo.bindings.ConnectionErrorHandler;
 import org.chromium.mojo.bindings.InterfaceRequest;
 import org.chromium.mojo.system.MojoException;
diff --git a/shell/android/tests/src/org/chromium/mojo/shell/ShellTestBase.java b/shell/android/tests/src/org/chromium/mojo/shell/ShellTestBase.java
index 1b8df8a..3817ada 100644
--- a/shell/android/tests/src/org/chromium/mojo/shell/ShellTestBase.java
+++ b/shell/android/tests/src/org/chromium/mojo/shell/ShellTestBase.java
@@ -7,8 +7,8 @@
 import android.content.Context;
 import android.content.res.AssetManager;
 
-import org.chromium.base.CalledByNative;
-import org.chromium.base.JNINamespace;
+import org.chromium.base.annotations.CalledByNative;
+import org.chromium.base.annotations.JNINamespace;
 
 import java.io.File;
 import java.io.IOException;
diff --git a/shell/context.cc b/shell/context.cc
index 4abe127..3154c8a 100644
--- a/shell/context.cc
+++ b/shell/context.cc
@@ -138,8 +138,8 @@
   base::ReplaceSubstringsAfterOffset(&handlers_spec, 0, "\\,", ",");
 #endif
 
-  std::vector<std::string> parts;
-  base::SplitString(handlers_spec, ',', &parts);
+  std::vector<std::string> parts = base::SplitString(
+      handlers_spec, ",", base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL);
   if (parts.size() % 2 != 0) {
     LOG(ERROR) << "Invalid value for switch " << switches::kContentHandlers
                << ": must be a comma-separated list of mimetype/url pairs."
@@ -162,9 +162,9 @@
 
 void InitNativeOptions(ApplicationManager* manager,
                        const base::CommandLine& command_line) {
-  std::vector<std::string> force_in_process_url_list;
-  base::SplitString(command_line.GetSwitchValueASCII(switches::kForceInProcess),
-                    ',', &force_in_process_url_list);
+  std::vector<std::string> force_in_process_url_list = base::SplitString(
+      command_line.GetSwitchValueASCII(switches::kForceInProcess), ",",
+      base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL);
   for (const auto& force_in_process_url : force_in_process_url_list) {
     GURL url(force_in_process_url);
     if (!url.is_valid()) {
diff --git a/testing/android/native_test/java/src/org/chromium/native_test/NativeTestActivity.java b/testing/android/native_test/java/src/org/chromium/native_test/NativeTestActivity.java
index 35a79f8..2476d2e 100644
--- a/testing/android/native_test/java/src/org/chromium/native_test/NativeTestActivity.java
+++ b/testing/android/native_test/java/src/org/chromium/native_test/NativeTestActivity.java
@@ -11,8 +11,8 @@
 import android.os.Environment;
 import android.os.Handler;
 
+import org.chromium.base.annotations.JNINamespace;
 import org.chromium.base.CommandLine;
-import org.chromium.base.JNINamespace;
 import org.chromium.base.Log;
 
 import java.io.File;
diff --git a/ui/android/java/src/org/chromium/ui/base/Clipboard.java b/ui/android/java/src/org/chromium/ui/base/Clipboard.java
index 67aaca2..fd0625d 100644
--- a/ui/android/java/src/org/chromium/ui/base/Clipboard.java
+++ b/ui/android/java/src/org/chromium/ui/base/Clipboard.java
@@ -11,8 +11,8 @@
 import android.os.Build;
 import android.widget.Toast;
 
-import org.chromium.base.CalledByNative;
-import org.chromium.base.JNINamespace;
+import org.chromium.base.annotations.CalledByNative;
+import org.chromium.base.annotations.JNINamespace;
 import org.chromium.ui.R;
 
 /**
diff --git a/ui/android/java/src/org/chromium/ui/base/DeviceFormFactor.java b/ui/android/java/src/org/chromium/ui/base/DeviceFormFactor.java
index 78f86c9..e91a5d7 100644
--- a/ui/android/java/src/org/chromium/ui/base/DeviceFormFactor.java
+++ b/ui/android/java/src/org/chromium/ui/base/DeviceFormFactor.java
@@ -6,7 +6,7 @@
 
 import android.content.Context;
 
-import org.chromium.base.CalledByNative;
+import org.chromium.base.annotations.CalledByNative;
 
 /**
  * UI utilities for accessing form factor information.
diff --git a/ui/android/java/src/org/chromium/ui/base/SelectFileDialog.java b/ui/android/java/src/org/chromium/ui/base/SelectFileDialog.java
index bc6efb7..1101834 100644
--- a/ui/android/java/src/org/chromium/ui/base/SelectFileDialog.java
+++ b/ui/android/java/src/org/chromium/ui/base/SelectFileDialog.java
@@ -18,9 +18,9 @@
 import android.text.TextUtils;
 import android.util.Log;
 
-import org.chromium.base.CalledByNative;
+import org.chromium.base.annotations.CalledByNative;
+import org.chromium.base.annotations.JNINamespace;
 import org.chromium.base.ContentUriUtils;
-import org.chromium.base.JNINamespace;
 import org.chromium.ui.R;
 
 import java.io.File;
diff --git a/ui/android/java/src/org/chromium/ui/base/ViewAndroid.java b/ui/android/java/src/org/chromium/ui/base/ViewAndroid.java
index f339713..917701e 100644
--- a/ui/android/java/src/org/chromium/ui/base/ViewAndroid.java
+++ b/ui/android/java/src/org/chromium/ui/base/ViewAndroid.java
@@ -6,7 +6,7 @@
 
 import android.view.View;
 
-import org.chromium.base.JNINamespace;
+import org.chromium.base.annotations.JNINamespace;
 
 /**
  * From the Chromium architecture point of view, ViewAndroid and its native counterpart
diff --git a/ui/android/java/src/org/chromium/ui/base/WindowAndroid.java b/ui/android/java/src/org/chromium/ui/base/WindowAndroid.java
index 8f1c58f..beff2c3 100644
--- a/ui/android/java/src/org/chromium/ui/base/WindowAndroid.java
+++ b/ui/android/java/src/org/chromium/ui/base/WindowAndroid.java
@@ -15,8 +15,8 @@
 import android.util.SparseArray;
 import android.widget.Toast;
 
-import org.chromium.base.CalledByNative;
-import org.chromium.base.JNINamespace;
+import org.chromium.base.annotations.CalledByNative;
+import org.chromium.base.annotations.JNINamespace;
 import org.chromium.ui.VSyncMonitor;
 
 import java.lang.ref.WeakReference;
diff --git a/ui/android/java/src/org/chromium/ui/gfx/BitmapHelper.java b/ui/android/java/src/org/chromium/ui/gfx/BitmapHelper.java
index 8ffaae4..4776b71 100644
--- a/ui/android/java/src/org/chromium/ui/gfx/BitmapHelper.java
+++ b/ui/android/java/src/org/chromium/ui/gfx/BitmapHelper.java
@@ -8,8 +8,8 @@
 import android.graphics.Bitmap;
 import android.graphics.BitmapFactory;
 
-import org.chromium.base.CalledByNative;
-import org.chromium.base.JNINamespace;
+import org.chromium.base.annotations.CalledByNative;
+import org.chromium.base.annotations.JNINamespace;
 
 /**
  * Helper class to decode and sample down bitmap resources.
diff --git a/ui/android/java/src/org/chromium/ui/gfx/DeviceDisplayInfo.java b/ui/android/java/src/org/chromium/ui/gfx/DeviceDisplayInfo.java
index 3856951..5ab8611 100644
--- a/ui/android/java/src/org/chromium/ui/gfx/DeviceDisplayInfo.java
+++ b/ui/android/java/src/org/chromium/ui/gfx/DeviceDisplayInfo.java
@@ -13,8 +13,8 @@
 import android.view.Surface;
 import android.view.WindowManager;
 
-import org.chromium.base.CalledByNative;
-import org.chromium.base.JNINamespace;
+import org.chromium.base.annotations.CalledByNative;
+import org.chromium.base.annotations.JNINamespace;
 
 /**
  * This class facilitates access to android information typically only
diff --git a/ui/android/java/src/org/chromium/ui/gfx/ViewConfigurationHelper.java b/ui/android/java/src/org/chromium/ui/gfx/ViewConfigurationHelper.java
index e8fc5b9..6dfc1a6 100644
--- a/ui/android/java/src/org/chromium/ui/gfx/ViewConfigurationHelper.java
+++ b/ui/android/java/src/org/chromium/ui/gfx/ViewConfigurationHelper.java
@@ -11,8 +11,8 @@
 import android.util.TypedValue;
 import android.view.ViewConfiguration;
 
-import org.chromium.base.CalledByNative;
-import org.chromium.base.JNINamespace;
+import org.chromium.base.annotations.CalledByNative;
+import org.chromium.base.annotations.JNINamespace;
 import org.chromium.ui.R;
 
 /**
diff --git a/ui/events/devices/x11/touch_factory_x11.cc b/ui/events/devices/x11/touch_factory_x11.cc
index bd7b157..216c7db 100644
--- a/ui/events/devices/x11/touch_factory_x11.cc
+++ b/ui/events/devices/x11/touch_factory_x11.cc
@@ -62,10 +62,10 @@
           switches::kTouchDevices);
 
   if (!touch_devices.empty()) {
-    std::vector<std::string> devs;
+    std::vector<std::string> devs = base::SplitString(
+        touch_devices, ",", base::KEEP_WHITESPACE, base::SPLIT_WANT_NONEMPTY);
     std::vector<int> device_ids;
     int devid;
-    base::SplitString(touch_devices, ',', &devs);
     for (std::vector<std::string>::iterator iter = devs.begin();
         iter != devs.end(); ++iter) {
       if (base::StringToInt(*iter, reinterpret_cast<int*>(&devid)))
diff --git a/ui/gl/android/java/src/org/chromium/ui/gl/SurfaceTextureListener.java b/ui/gl/android/java/src/org/chromium/ui/gl/SurfaceTextureListener.java
index bc57e1f..3503781 100644
--- a/ui/gl/android/java/src/org/chromium/ui/gl/SurfaceTextureListener.java
+++ b/ui/gl/android/java/src/org/chromium/ui/gl/SurfaceTextureListener.java
@@ -6,7 +6,7 @@
 
 import android.graphics.SurfaceTexture;
 
-import org.chromium.base.JNINamespace;
+import org.chromium.base.annotations.JNINamespace;
 
 /**
  * Listener to an android SurfaceTexture object for frame availability.
diff --git a/ui/gl/android/java/src/org/chromium/ui/gl/SurfaceTexturePlatformWrapper.java b/ui/gl/android/java/src/org/chromium/ui/gl/SurfaceTexturePlatformWrapper.java
index 7f8e5cf..4629692 100644
--- a/ui/gl/android/java/src/org/chromium/ui/gl/SurfaceTexturePlatformWrapper.java
+++ b/ui/gl/android/java/src/org/chromium/ui/gl/SurfaceTexturePlatformWrapper.java
@@ -8,8 +8,8 @@
 import android.os.Build;
 import android.util.Log;
 
-import org.chromium.base.CalledByNative;
-import org.chromium.base.JNINamespace;
+import org.chromium.base.annotations.CalledByNative;
+import org.chromium.base.annotations.JNINamespace;
 
 /**
  * Wrapper class for the underlying platform's SurfaceTexture in order to
diff --git a/ui/gl/android/java/src/org/chromium/ui/gl/VSyncProvider.java b/ui/gl/android/java/src/org/chromium/ui/gl/VSyncProvider.java
index 31cc62a..01dd141 100644
--- a/ui/gl/android/java/src/org/chromium/ui/gl/VSyncProvider.java
+++ b/ui/gl/android/java/src/org/chromium/ui/gl/VSyncProvider.java
@@ -7,8 +7,8 @@
 import android.view.Choreographer;
 import android.view.Choreographer.FrameCallback;
 
-import org.chromium.base.CalledByNative;
-import org.chromium.base.JNINamespace;
+import org.chromium.base.annotations.CalledByNative;
+import org.chromium.base.annotations.JNINamespace;
 
 /**
  * Java implementation of ui/gfx/vsync_provider.h that uses the {@link Choreographer} to compute the
diff --git a/ui/gl/gl_version_info.cc b/ui/gl/gl_version_info.cc
index 375580f..c5fba80 100644
--- a/ui/gl/gl_version_info.cc
+++ b/ui/gl/gl_version_info.cc
@@ -17,7 +17,7 @@
       minor_version(0),
       is_es3(false) {
   if (version_str) {
-    std::string lstr(base::StringToLowerASCII(std::string(version_str)));
+    std::string lstr(base::ToLowerASCII(std::string(version_str)));
     is_es = (lstr.length() > 12) && (lstr.substr(0, 9) == "opengl es");
     if (is_es)
       lstr = lstr.substr(10, 3);
