diff --git a/DEPS b/DEPS
index 67e7306..11f1a2e 100644
--- a/DEPS
+++ b/DEPS
@@ -39,7 +39,7 @@
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling Skia
   # and whatever else without interference from each other.
-  'skia_revision': 'cf942c4ef750712b624867cbb2217c14857db3c6',
+  'skia_revision': 'f077edd66032c3bd187d67a0cc11cbc0b0916c58',
   # Three lines of non-changing comments so that
   # the commit queue can handle CLs rolling V8
   # and whatever else without interference from each other.
diff --git a/chrome/DEPS b/chrome/DEPS
index f1c8af72..621f4ef 100644
--- a/chrome/DEPS
+++ b/chrome/DEPS
@@ -25,7 +25,6 @@
   "+content/public/common",
   "+content/public/test",
   "+mojo/common",
-  "+mojo/message_pump",
   "+mojo/public",
 
   # Don't allow inclusion of these other libs we shouldn't be calling directly.
diff --git a/chrome/browser/media/router/mojo/media_router_mojo_impl_unittest.cc b/chrome/browser/media/router/mojo/media_router_mojo_impl_unittest.cc
index 819a4380..a348539 100644
--- a/chrome/browser/media/router/mojo/media_router_mojo_impl_unittest.cc
+++ b/chrome/browser/media/router/mojo/media_router_mojo_impl_unittest.cc
@@ -39,7 +39,6 @@
 #include "extensions/common/test_util.h"
 #include "extensions/common/value_builder.h"
 #include "media/base/gmock_callback_support.h"
-#include "mojo/message_pump/message_pump_mojo.h"
 #include "testing/gmock/include/gmock/gmock.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
@@ -1281,9 +1280,7 @@
 
 class MediaRouterMojoExtensionTest : public ::testing::Test {
  public:
-  MediaRouterMojoExtensionTest()
-      : process_manager_(nullptr),
-        message_loop_(mojo::common::MessagePumpMojo::Create()) {}
+  MediaRouterMojoExtensionTest() : process_manager_(nullptr) {}
 
   ~MediaRouterMojoExtensionTest() override {}
 
diff --git a/chrome/browser/media/router/mojo/media_router_mojo_test.cc b/chrome/browser/media/router/mojo/media_router_mojo_test.cc
index 60fcdf4..c4ff378 100644
--- a/chrome/browser/media/router/mojo/media_router_mojo_test.cc
+++ b/chrome/browser/media/router/mojo/media_router_mojo_test.cc
@@ -8,7 +8,6 @@
 
 #include "base/run_loop.h"
 #include "extensions/common/test_util.h"
-#include "mojo/message_pump/message_pump_mojo.h"
 
 namespace media_router {
 namespace {
diff --git a/chrome/chrome_browser.gypi b/chrome/chrome_browser.gypi
index 6fc7db4..da9425f 100644
--- a/chrome/chrome_browser.gypi
+++ b/chrome/chrome_browser.gypi
@@ -3378,7 +3378,6 @@
             '../mojo/mojo_edk.gyp:mojo_system_impl',
             '../mojo/mojo_public.gyp:mojo_cpp_bindings',
             '../mojo/mojo_public.gyp:mojo_js_bindings',
-            '../mojo/mojo_public.gyp:mojo_message_pump_lib',
             '../net/net.gyp:net_extras',
             '../net/net.gyp:net_with_v8',
             '../services/shell/shell.gyp:shell_public',
diff --git a/components/font_service/DEPS b/components/font_service/DEPS
index 74754cf8..f182acc 100644
--- a/components/font_service/DEPS
+++ b/components/font_service/DEPS
@@ -1,7 +1,6 @@
 include_rules = [
   "+services/shell",
   "+mojo/common",
-  "+mojo/message_pump",
   "+mojo/platform_handle",
   "+mojo/public",
   "+services/tracing/public/cpp",
diff --git a/components/font_service/public/cpp/BUILD.gn b/components/font_service/public/cpp/BUILD.gn
index 1110aa7..56bad3e 100644
--- a/components/font_service/public/cpp/BUILD.gn
+++ b/components/font_service/public/cpp/BUILD.gn
@@ -16,7 +16,6 @@
     "../interfaces",
     "//base",
     "//mojo/common",
-    "//mojo/message_pump",
     "//mojo/platform_handle",
     "//mojo/public/cpp/bindings",
     "//mojo/public/cpp/system",
diff --git a/components/font_service/public/cpp/font_service_thread.cc b/components/font_service/public/cpp/font_service_thread.cc
index 810d2c72..7c7b5de2 100644
--- a/components/font_service/public/cpp/font_service_thread.cc
+++ b/components/font_service/public/cpp/font_service_thread.cc
@@ -10,7 +10,6 @@
 #include "base/files/file.h"
 #include "base/synchronization/waitable_event.h"
 #include "components/font_service/public/cpp/mapped_font_file.h"
-#include "mojo/message_pump/message_pump_mojo.h"
 #include "mojo/platform_handle/platform_handle_functions.h"
 
 namespace font_service {
@@ -24,10 +23,7 @@
     : base::Thread(kFontThreadName),
       font_service_info_(font_service.PassInterface()),
       weak_factory_(this) {
-  base::Thread::Options options;
-  options.message_pump_factory =
-      base::Bind(&mojo::common::MessagePumpMojo::Create);
-  StartWithOptions(options);
+  Start();
 }
 
 bool FontServiceThread::MatchFamilyName(
diff --git a/components/leveldb/BUILD.gn b/components/leveldb/BUILD.gn
index 77097ef5..67ce46b 100644
--- a/components/leveldb/BUILD.gn
+++ b/components/leveldb/BUILD.gn
@@ -23,7 +23,6 @@
     "//components/leveldb/public/cpp",
     "//components/leveldb/public/interfaces",
     "//mojo/common",
-    "//mojo/message_pump",
     "//mojo/platform_handle",
     "//services/shell/public/cpp",
     "//third_party/leveldatabase",
diff --git a/components/leveldb/DEPS b/components/leveldb/DEPS
index bd058d6b..13b8f3f4 100644
--- a/components/leveldb/DEPS
+++ b/components/leveldb/DEPS
@@ -1,7 +1,6 @@
 include_rules = [
   "+components/filesystem/public/interfaces",
   "+mojo/common",
-  "+mojo/message_pump",
   "+mojo/platform_handle",
   "+mojo/public",
   "+mojo/util",
diff --git a/components/leveldb/leveldb_mojo_proxy.cc b/components/leveldb/leveldb_mojo_proxy.cc
index e20c87f..d46300c4 100644
--- a/components/leveldb/leveldb_mojo_proxy.cc
+++ b/components/leveldb/leveldb_mojo_proxy.cc
@@ -8,7 +8,6 @@
 
 #include "base/bind.h"
 #include "base/callback.h"
-#include "mojo/message_pump/message_pump_mojo.h"
 #include "mojo/platform_handle/platform_handle_functions.h"
 #include "mojo/public/cpp/bindings/interface_request.h"
 
diff --git a/components/message_port.gypi b/components/message_port.gypi
index be03075..5e126ce 100644
--- a/components/message_port.gypi
+++ b/components/message_port.gypi
@@ -9,7 +9,6 @@
       'type': 'static_library',
       'dependencies': [
         '../base/base.gyp:base',
-        '../mojo/mojo_public.gyp:mojo_message_pump_lib',
         '../mojo/mojo_public.gyp:mojo_cpp_system',
         '../third_party/WebKit/public/blink.gyp:blink',
       ],
diff --git a/components/message_port/BUILD.gn b/components/message_port/BUILD.gn
index 7cdcb5d..2da27a94 100644
--- a/components/message_port/BUILD.gn
+++ b/components/message_port/BUILD.gn
@@ -10,7 +10,6 @@
 
   public_deps = [
     "//base",
-    "//mojo/message_pump",
     "//mojo/public/cpp/system",
     "//third_party/WebKit/public:blink",
   ]
diff --git a/components/message_port/DEPS b/components/message_port/DEPS
index ab2f273..625192e 100644
--- a/components/message_port/DEPS
+++ b/components/message_port/DEPS
@@ -1,5 +1,4 @@
 include_rules = [
-  "+mojo/message_pump",
   "+mojo/public/cpp/system",
   "+third_party/WebKit/public",
 ]
diff --git a/components/message_port/web_message_port_channel_impl.cc b/components/message_port/web_message_port_channel_impl.cc
index dca8b4f..fcd2595 100644
--- a/components/message_port/web_message_port_channel_impl.cc
+++ b/components/message_port/web_message_port_channel_impl.cc
@@ -40,7 +40,11 @@
 WebMessagePortChannelImpl::WebMessagePortChannelImpl(
     mojo::ScopedMessagePipeHandle pipe)
     : client_(nullptr), pipe_(std::move(pipe)) {
-  WaitForNextMessage();
+  handle_watcher_.Start(
+      pipe_.get(),
+      MOJO_HANDLE_SIGNAL_READABLE,
+      base::Bind(&WebMessagePortChannelImpl::OnMessageAvailable,
+                 base::Unretained(this)));
 }
 
 WebMessagePortChannelImpl::~WebMessagePortChannelImpl() {
@@ -66,7 +70,7 @@
       WebMessagePortChannelImpl* channel =
           static_cast<WebMessagePortChannelImpl*>((*channels)[i]);
       handles.push_back(channel->pipe_.release().value());
-      channel->handle_watcher_.Stop();
+      channel->handle_watcher_.Cancel();
     }
     delete channels;
   }
@@ -118,15 +122,6 @@
   return true;
 }
 
-void WebMessagePortChannelImpl::WaitForNextMessage() {
-  handle_watcher_.Start(
-      pipe_.get(),
-      MOJO_HANDLE_SIGNAL_READABLE,
-      MOJO_DEADLINE_INDEFINITE,
-      base::Bind(&WebMessagePortChannelImpl::OnMessageAvailable,
-                 base::Unretained(this)));
-}
-
 void WebMessagePortChannelImpl::OnMessageAvailable(MojoResult result) {
   // |result| can be MOJO_RESULT_ABORTED when the message loop shuts down, or
   // MOJO_RESULT_FAILED_PRECONDITION when the end-of-file is reached.
@@ -138,7 +133,6 @@
   if (!client_)
     return;
   client_->messageAvailable();
-  WaitForNextMessage();
 }
 
 }  // namespace message_port
diff --git a/components/message_port/web_message_port_channel_impl.h b/components/message_port/web_message_port_channel_impl.h
index dda465b..537c87f 100644
--- a/components/message_port/web_message_port_channel_impl.h
+++ b/components/message_port/web_message_port_channel_impl.h
@@ -6,8 +6,8 @@
 #define COMPONENTS_MESSAGE_PORT_WEB_MESSAGE_PORT_CHANNEL_IMPL_H_
 
 #include "base/macros.h"
-#include "mojo/message_pump/handle_watcher.h"
 #include "mojo/public/cpp/system/message_pipe.h"
+#include "mojo/public/cpp/system/watcher.h"
 #include "third_party/WebKit/public/platform/WebMessagePortChannel.h"
 
 namespace message_port {
@@ -30,12 +30,11 @@
   bool tryGetMessage(blink::WebString* message,
                      blink::WebMessagePortChannelArray& channels) override;
 
-  void WaitForNextMessage();
   void OnMessageAvailable(MojoResult result);
 
   blink::WebMessagePortChannelClient* client_;
   mojo::ScopedMessagePipeHandle pipe_;
-  mojo::common::HandleWatcher handle_watcher_;
+  mojo::Watcher handle_watcher_;
 
   DISALLOW_COPY_AND_ASSIGN(WebMessagePortChannelImpl);
 };
diff --git a/content/DEPS b/content/DEPS
index 1d6f952..1606072 100644
--- a/content/DEPS
+++ b/content/DEPS
@@ -31,7 +31,6 @@
   "+mojo/edk/embedder",
   "+mojo/edk/js",
   "+mojo/edk/test",
-  "+mojo/message_pump",
   "+mojo/public",
   "+net",
   "+ppapi",
diff --git a/content/child/BUILD.gn b/content/child/BUILD.gn
index d3f36547..5c78877 100644
--- a/content/child/BUILD.gn
+++ b/content/child/BUILD.gn
@@ -47,7 +47,6 @@
     "//content/common",
     "//crypto:platform",
     "//mojo/common",
-    "//mojo/message_pump",
     "//net",
     "//services/shell/public/interfaces",
     "//services/shell/runner/common",
diff --git a/content/child/web_data_consumer_handle_impl.cc b/content/child/web_data_consumer_handle_impl.cc
index f8986f0..0b180c7 100644
--- a/content/child/web_data_consumer_handle_impl.cc
+++ b/content/child/web_data_consumer_handle_impl.cc
@@ -101,8 +101,6 @@
     case MOJO_RESULT_BUSY:
       return Busy;
     case MOJO_RESULT_SHOULD_WAIT:
-      if (client_)
-        StartWatching();
       return ShouldWait;
     case MOJO_RESULT_RESOURCE_EXHAUSTED:
       return ResourceExhausted;
@@ -114,7 +112,6 @@
 void WebDataConsumerHandleImpl::ReaderImpl::StartWatching() {
   handle_watcher_.Start(
       context_->handle().get(), MOJO_HANDLE_SIGNAL_READABLE,
-      MOJO_DEADLINE_INDEFINITE,
       base::Bind(&ReaderImpl::OnHandleGotReadable, base::Unretained(this)));
 }
 
diff --git a/content/child/web_data_consumer_handle_impl.h b/content/child/web_data_consumer_handle_impl.h
index 5eb1aca..44409ce 100644
--- a/content/child/web_data_consumer_handle_impl.h
+++ b/content/child/web_data_consumer_handle_impl.h
@@ -10,8 +10,8 @@
 #include <memory>
 
 #include "content/common/content_export.h"
-#include "mojo/message_pump/handle_watcher.h"
 #include "mojo/public/cpp/system/data_pipe.h"
+#include "mojo/public/cpp/system/watcher.h"
 #include "third_party/WebKit/public/platform/WebDataConsumerHandle.h"
 
 namespace content {
@@ -41,7 +41,7 @@
     void OnHandleGotReadable(MojoResult);
 
     scoped_refptr<Context> context_;
-    mojo::common::HandleWatcher handle_watcher_;
+    mojo::Watcher handle_watcher_;
     Client* client_;
   };
   std::unique_ptr<Reader> ObtainReader(Client* client);
diff --git a/content/child/web_data_consumer_handle_impl_unittest.cc b/content/child/web_data_consumer_handle_impl_unittest.cc
index 2f75a2319..eeb7d3e 100644
--- a/content/child/web_data_consumer_handle_impl_unittest.cc
+++ b/content/child/web_data_consumer_handle_impl_unittest.cc
@@ -70,7 +70,11 @@
 
   const std::string& result() const { return result_; }
 
-  void ReadMore() override { ReadData(); }
+  void ReadMore() override {
+    // We may have drained the pipe while this task was waiting to run.
+    if (reader_)
+      ReadData();
+  }
 
   void ReadData() {
     if (!client_) {
@@ -80,7 +84,6 @@
 
     Result rv = kOk;
     size_t readSize = 0;
-
     while (true) {
       char buffer[16];
       rv = reader_->read(&buffer, sizeof(buffer), kNone, &readSize);
@@ -126,7 +129,9 @@
   const std::string& result() const { return result_; }
 
   void ReadMore() override {
-    ReadData();
+    // We may have drained the pipe while this task was waiting to run.
+    if (reader_)
+      ReadData();
   }
 
   void ReadData() {
diff --git a/content/content_child.gypi b/content/content_child.gypi
index 1c31dfc..35f7da73 100644
--- a/content/content_child.gypi
+++ b/content/content_child.gypi
@@ -10,7 +10,6 @@
     '../components/webcrypto/webcrypto.gyp:webcrypto',
     '../ipc/ipc.gyp:ipc',
     '../mojo/mojo_base.gyp:mojo_common_lib',
-    '../mojo/mojo_public.gyp:mojo_message_pump_lib',
     '../services/shell/shell.gyp:shell_runner_common_lib',
     '../skia/skia.gyp:skia',
     '../storage/storage_common.gyp:storage_common',
diff --git a/content/content_utility.gypi b/content/content_utility.gypi
index 7d05b35d..2f42dc39 100644
--- a/content/content_utility.gypi
+++ b/content/content_utility.gypi
@@ -8,7 +8,6 @@
     '../courgette/courgette.gyp:courgette_lib',
     '../mojo/mojo_base.gyp:mojo_common_lib',
     '../mojo/mojo_public.gyp:mojo_cpp_bindings',
-    '../mojo/mojo_public.gyp:mojo_message_pump_lib',
     '../services/shell/shell.gyp:shell_public',
     '../services/shell/shell.gyp:shell_lib',
     '../url/url.gyp:url_lib',
diff --git a/extensions/browser/mojo/DEPS b/extensions/browser/mojo/DEPS
index 16f5cb46..df73043 100644
--- a/extensions/browser/mojo/DEPS
+++ b/extensions/browser/mojo/DEPS
@@ -1,4 +1,3 @@
 include_rules = [
-  "+mojo/message_pump",
   "+services/shell/public/interfaces",
 ]
diff --git a/extensions/browser/mojo/stash_backend.cc b/extensions/browser/mojo/stash_backend.cc
index 417410e..8104c4d0 100644
--- a/extensions/browser/mojo/stash_backend.cc
+++ b/extensions/browser/mojo/stash_backend.cc
@@ -12,8 +12,8 @@
 #include "base/bind.h"
 #include "base/macros.h"
 #include "base/memory/ptr_util.h"
-#include "mojo/message_pump/handle_watcher.h"
 #include "mojo/public/cpp/bindings/strong_binding.h"
+#include "mojo/public/cpp/system/watcher.h"
 
 namespace extensions {
 namespace {
@@ -85,7 +85,7 @@
   void OnHandleReady(MojoResult result);
 
   // The waiters that are waiting for handles to be readable.
-  std::vector<std::unique_ptr<mojo::common::HandleWatcher>> waiters_;
+  std::vector<std::unique_ptr<mojo::Watcher>> waiters_;
 
   StashedObjectPtr stashed_object_;
 
@@ -145,10 +145,9 @@
     return;
 
   for (size_t i = 0; i < stashed_object_->stashed_handles.size(); i++) {
-    std::unique_ptr<mojo::common::HandleWatcher> watcher(
-        new mojo::common::HandleWatcher());
+    std::unique_ptr<mojo::Watcher> watcher(new mojo::Watcher);
     watcher->Start(stashed_object_->stashed_handles[i].get(),
-                   MOJO_HANDLE_SIGNAL_READABLE, MOJO_DEADLINE_INDEFINITE,
+                   MOJO_HANDLE_SIGNAL_READABLE,
                    base::Bind(&StashBackend::StashEntry::OnHandleReady,
                               base::Unretained(this)));
     waiters_.push_back(std::move(watcher));
diff --git a/mash/example/window_type_launcher/BUILD.gn b/mash/example/window_type_launcher/BUILD.gn
index 339b61c..8cce6599 100644
--- a/mash/example/window_type_launcher/BUILD.gn
+++ b/mash/example/window_type_launcher/BUILD.gn
@@ -30,7 +30,6 @@
     "//mojo/common:common_base",
     "//mojo/converters/geometry",
     "//mojo/edk/system",
-    "//mojo/message_pump",
     "//mojo/platform_handle:platform_handle_impl",
     "//mojo/public/cpp/bindings",
     "//services/shell/public/cpp",
diff --git a/mash/example/window_type_launcher/DEPS b/mash/example/window_type_launcher/DEPS
index 9b87a7d..5d108a0 100644
--- a/mash/example/window_type_launcher/DEPS
+++ b/mash/example/window_type_launcher/DEPS
@@ -1,5 +1,4 @@
 include_rules = [
   "+mojo/edk/embedder",
-  "+mojo/message_pump",
   "+mojo/runner",
 ]
diff --git a/mojo/common/BUILD.gn b/mojo/common/BUILD.gn
index cdf1f57..961c012 100644
--- a/mojo/common/BUILD.gn
+++ b/mojo/common/BUILD.gn
@@ -45,7 +45,6 @@
   deps = [
     "//base",
     "//base/third_party/dynamic_annotations",
-    "//mojo/message_pump",
     "//mojo/public/c/system:for_component",
     "//mojo/public/cpp/bindings",
   ]
@@ -88,7 +87,6 @@
     "//base/test:test_support",
     "//mojo/edk/test:run_all_unittests",
     "//mojo/edk/test:test_support",
-    "//mojo/message_pump",
     "//mojo/public/cpp/bindings",
     "//mojo/public/cpp/test_support:test_utils",
     "//testing/gtest",
@@ -96,10 +94,6 @@
   ]
 
   sources = [
-    # The message_pump tests are so small and some what related to this code
-    # that we put them here.
-    "../message_pump/handle_watcher_unittest.cc",
-    "../message_pump/message_pump_mojo_unittest.cc",
     "common_custom_types_unittest.cc",
     "common_type_converters_unittest.cc",
   ]
@@ -116,15 +110,10 @@
     ":common",
     "//base",
     "//mojo/edk/test:run_all_perftests",
-    "//mojo/message_pump",
     "//mojo/public/cpp/test_support:test_utils",
     "//testing/gtest",
   ]
 
-  sources = [
-    "../message_pump/handle_watcher_perftest.cc",
-  ]
-
   if (is_linux && !is_component_build) {
     # This test dynamically loads libmojo_test_support even in non-component
     # builds.
diff --git a/mojo/common/DEPS b/mojo/common/DEPS
index 8daa768..588c68d 100644
--- a/mojo/common/DEPS
+++ b/mojo/common/DEPS
@@ -3,7 +3,6 @@
   "-mojo",
   "+services/shell/public/cpp",
   "+mojo/common",
-  "+mojo/message_pump",
   "+mojo/public",
 ]
 
diff --git a/mojo/common/data_pipe_drainer.cc b/mojo/common/data_pipe_drainer.cc
index e652e846..1133e11 100644
--- a/mojo/common/data_pipe_drainer.cc
+++ b/mojo/common/data_pipe_drainer.cc
@@ -17,7 +17,9 @@
                                  mojo::ScopedDataPipeConsumerHandle source)
     : client_(client), source_(std::move(source)), weak_factory_(this) {
   DCHECK(client_);
-  ReadData();
+  handle_watcher_.Start(
+      source_.get(), MOJO_HANDLE_SIGNAL_READABLE,
+      base::Bind(&DataPipeDrainer::WaitComplete, weak_factory_.GetWeakPtr()));
 }
 
 DataPipeDrainer::~DataPipeDrainer() {}
@@ -30,22 +32,13 @@
   if (rv == MOJO_RESULT_OK) {
     client_->OnDataAvailable(buffer, num_bytes);
     EndReadDataRaw(source_.get(), num_bytes);
-    WaitForData();
-  } else if (rv == MOJO_RESULT_SHOULD_WAIT) {
-    WaitForData();
   } else if (rv == MOJO_RESULT_FAILED_PRECONDITION) {
     client_->OnDataComplete();
-  } else {
+  } else if (rv != MOJO_RESULT_SHOULD_WAIT) {
     DCHECK(false) << "Unhandled MojoResult: " << rv;
   }
 }
 
-void DataPipeDrainer::WaitForData() {
-  handle_watcher_.Start(
-      source_.get(), MOJO_HANDLE_SIGNAL_READABLE, MOJO_DEADLINE_INDEFINITE,
-      base::Bind(&DataPipeDrainer::WaitComplete, weak_factory_.GetWeakPtr()));
-}
-
 void DataPipeDrainer::WaitComplete(MojoResult result) {
   ReadData();
 }
diff --git a/mojo/common/data_pipe_drainer.h b/mojo/common/data_pipe_drainer.h
index 7a73716..d0366fa 100644
--- a/mojo/common/data_pipe_drainer.h
+++ b/mojo/common/data_pipe_drainer.h
@@ -10,8 +10,8 @@
 #include "base/macros.h"
 #include "base/memory/weak_ptr.h"
 #include "mojo/common/mojo_common_export.h"
-#include "mojo/message_pump/handle_watcher.h"
 #include "mojo/public/cpp/system/core.h"
+#include "mojo/public/cpp/system/watcher.h"
 
 namespace mojo {
 namespace common {
@@ -32,12 +32,11 @@
 
  private:
   void ReadData();
-  void WaitForData();
   void WaitComplete(MojoResult result);
 
   Client* client_;
   mojo::ScopedDataPipeConsumerHandle source_;
-  mojo::common::HandleWatcher handle_watcher_;
+  mojo::Watcher handle_watcher_;
 
   base::WeakPtrFactory<DataPipeDrainer> weak_factory_;
 
diff --git a/mojo/edk/embedder/BUILD.gn b/mojo/edk/embedder/BUILD.gn
index cca7230c..02fc32c 100644
--- a/mojo/edk/embedder/BUILD.gn
+++ b/mojo/edk/embedder/BUILD.gn
@@ -145,7 +145,6 @@
     "//mojo/edk/system",
     "//mojo/edk/system:test_utils",
     "//mojo/edk/test:test_support",
-    "//mojo/message_pump",
     "//testing/gtest",
   ]
 }
diff --git a/mojo/edk/embedder/embedder_unittest.cc b/mojo/edk/embedder/embedder_unittest.cc
index 5d38b6e..99f0b7f 100644
--- a/mojo/edk/embedder/embedder_unittest.cc
+++ b/mojo/edk/embedder/embedder_unittest.cc
@@ -23,7 +23,6 @@
 #include "mojo/edk/embedder/test_embedder.h"
 #include "mojo/edk/system/test_utils.h"
 #include "mojo/edk/test/mojo_test_base.h"
-#include "mojo/message_pump/message_pump_mojo.h"
 #include "mojo/public/c/system/core.h"
 #include "mojo/public/cpp/system/handle.h"
 #include "mojo/public/cpp/system/message_pipe.h"
diff --git a/mojo/edk/js/BUILD.gn b/mojo/edk/js/BUILD.gn
index 005416d..429a8c0 100644
--- a/mojo/edk/js/BUILD.gn
+++ b/mojo/edk/js/BUILD.gn
@@ -42,7 +42,6 @@
   ]
 
   deps = [
-    "//mojo/message_pump",
     "//mojo/public/cpp/system",
   ]
 }
diff --git a/mojo/edk/js/drain_data.cc b/mojo/edk/js/drain_data.cc
index 3b0a195..ca5fdf44 100644
--- a/mojo/edk/js/drain_data.cc
+++ b/mojo/edk/js/drain_data.cc
@@ -41,7 +41,7 @@
 
 void DrainData::WaitForData() {
   handle_watcher_.Start(
-      handle_.get(), MOJO_HANDLE_SIGNAL_READABLE, MOJO_DEADLINE_INDEFINITE,
+      handle_.get(), MOJO_HANDLE_SIGNAL_READABLE,
       base::Bind(&DrainData::DataReady, base::Unretained(this)));
 }
 
diff --git a/mojo/edk/js/drain_data.h b/mojo/edk/js/drain_data.h
index 13af286..917ca05 100644
--- a/mojo/edk/js/drain_data.h
+++ b/mojo/edk/js/drain_data.h
@@ -7,8 +7,8 @@
 
 #include "base/memory/scoped_vector.h"
 #include "gin/runner.h"
-#include "mojo/message_pump/handle_watcher.h"
 #include "mojo/public/cpp/system/core.h"
+#include "mojo/public/cpp/system/watcher.h"
 #include "v8/include/v8.h"
 
 namespace mojo {
@@ -50,7 +50,7 @@
 
   v8::Isolate* isolate_;
   ScopedDataPipeConsumerHandle handle_;
-  common::HandleWatcher handle_watcher_;
+  Watcher handle_watcher_;
   base::WeakPtr<gin::Runner> runner_;
   v8::UniquePersistent<v8::Promise::Resolver> resolver_;
   ScopedVector<DataBuffer> data_buffers_;
diff --git a/mojo/mojo_base.gyp b/mojo/mojo_base.gyp
index 505ae4a..65039c6 100644
--- a/mojo/mojo_base.gyp
+++ b/mojo/mojo_base.gyp
@@ -145,15 +145,12 @@
         'mojo_edk.gyp:mojo_common_test_support',
         'mojo_edk.gyp:mojo_run_all_unittests',
         'mojo_public.gyp:mojo_cpp_bindings',
-        'mojo_public.gyp:mojo_message_pump_lib',
         'mojo_public.gyp:mojo_public_test_utils',
         'mojo_url_type_converters',
       ],
       'sources': [
         'common/common_custom_types_unittest.cc',
         'common/common_type_converters_unittest.cc',
-        'message_pump/handle_watcher_unittest.cc',
-        'message_pump/message_pump_mojo_unittest.cc',
       ],
     },
     {
diff --git a/mojo/mojo_edk.gyp b/mojo/mojo_edk.gyp
index 57bdc132..7336626 100644
--- a/mojo/mojo_edk.gyp
+++ b/mojo/mojo_edk.gyp
@@ -165,7 +165,6 @@
         '../base/base.gyp:base',
         '../gin/gin.gyp:gin',
         '../v8/src/v8.gyp:v8',
-        'mojo_public.gyp:mojo_message_pump_lib',
       ],
       'export_dependent_settings': [
         '../base/base.gyp:base',
diff --git a/mojo/mojo_edk_tests.gyp b/mojo/mojo_edk_tests.gyp
index 4bed79a..e227edfe 100644
--- a/mojo/mojo_edk_tests.gyp
+++ b/mojo/mojo_edk_tests.gyp
@@ -47,7 +47,6 @@
         '../testing/gtest.gyp:gtest',
         'mojo_edk.gyp:mojo_run_all_unittests',
         'mojo_public.gyp:mojo_cpp_bindings',
-        'mojo_public.gyp:mojo_message_pump_lib',
         'mojo_public.gyp:mojo_public_bindings_test_utils',
         'mojo_public.gyp:mojo_public_test_associated_interfaces',
         'mojo_public.gyp:mojo_public_test_interfaces',
@@ -153,7 +152,6 @@
         'mojo_base.gyp:mojo_common_lib',
         'mojo_edk.gyp:mojo_run_all_perftests',
         'mojo_public.gyp:mojo_cpp_bindings',
-        'mojo_public.gyp:mojo_message_pump_lib',
         'mojo_public.gyp:mojo_public_bindings_test_utils',
         'mojo_public.gyp:mojo_public_test_interfaces',
         'mojo_public.gyp:mojo_public_test_utils',
diff --git a/mojo/public/cpp/bindings/tests/BUILD.gn b/mojo/public/cpp/bindings/tests/BUILD.gn
index 8935e63..fc72724 100644
--- a/mojo/public/cpp/bindings/tests/BUILD.gn
+++ b/mojo/public/cpp/bindings/tests/BUILD.gn
@@ -46,7 +46,6 @@
 
   deps = [
     ":mojo_public_bindings_test_utils",
-    "//mojo/message_pump",
     "//mojo/public/cpp/bindings",
     "//mojo/public/cpp/bindings:callback",
     "//mojo/public/cpp/system",
@@ -116,7 +115,6 @@
   deps = [
     "//base/test:test_support",
     "//mojo/edk/test:test_support",
-    "//mojo/message_pump",
     "//mojo/public/cpp/bindings",
     "//mojo/public/cpp/bindings:callback",
     "//mojo/public/cpp/system",
diff --git a/mojo/public/cpp/bindings/tests/associated_interface_unittest.cc b/mojo/public/cpp/bindings/tests/associated_interface_unittest.cc
index 2004651c..cb01bc0 100644
--- a/mojo/public/cpp/bindings/tests/associated_interface_unittest.cc
+++ b/mojo/public/cpp/bindings/tests/associated_interface_unittest.cc
@@ -12,7 +12,6 @@
 #include "base/run_loop.h"
 #include "base/thread_task_runner_handle.h"
 #include "base/threading/thread.h"
-#include "mojo/message_pump/message_pump_mojo.h"
 #include "mojo/public/cpp/bindings/associated_binding.h"
 #include "mojo/public/cpp/bindings/associated_group.h"
 #include "mojo/public/cpp/bindings/associated_interface_ptr.h"
@@ -91,7 +90,7 @@
 
 class AssociatedInterfaceTest : public testing::Test {
  public:
-  AssociatedInterfaceTest() : loop_(common::MessagePumpMojo::Create()) {}
+  AssociatedInterfaceTest() {}
   ~AssociatedInterfaceTest() override { loop_.RunUntilIdle(); }
 
   void PumpMessages() { loop_.RunUntilIdle(); }
@@ -224,10 +223,7 @@
       : sender_thread_("TestSender"),
         next_sender_(nullptr),
         max_value_to_send_(-1) {
-    base::Thread::Options thread_options;
-    thread_options.message_pump_factory =
-        base::Bind(&common::MessagePumpMojo::Create);
-    sender_thread_.StartWithOptions(thread_options);
+    sender_thread_.Start();
   }
 
   // The following three methods are called on the corresponding sender thread.
@@ -273,10 +269,7 @@
 class TestReceiver {
  public:
   TestReceiver() : receiver_thread_("TestReceiver"), max_value_to_receive_(-1) {
-    base::Thread::Options thread_options;
-    thread_options.message_pump_factory =
-        base::Bind(&common::MessagePumpMojo::Create);
-    receiver_thread_.StartWithOptions(thread_options);
+    receiver_thread_.Start();
   }
 
   void SetUp(AssociatedInterfaceRequest<IntegerSender> request0,
diff --git a/mojo/public/cpp/bindings/tests/binding_callback_unittest.cc b/mojo/public/cpp/bindings/tests/binding_callback_unittest.cc
index 68aedde..34a28b7 100644
--- a/mojo/public/cpp/bindings/tests/binding_callback_unittest.cc
+++ b/mojo/public/cpp/bindings/tests/binding_callback_unittest.cc
@@ -9,7 +9,6 @@
 #include "base/message_loop/message_loop.h"
 #include "base/run_loop.h"
 #include "build/build_config.h"
-#include "mojo/message_pump/message_pump_mojo.h"
 #include "mojo/public/cpp/bindings/binding.h"
 #include "mojo/public/cpp/bindings/interface_ptr.h"
 #include "mojo/public/cpp/bindings/string.h"
@@ -131,7 +130,7 @@
 
 class BindingCallbackTest : public testing::Test {
  public:
-  BindingCallbackTest() : loop_(common::MessagePumpMojo::Create()) {}
+  BindingCallbackTest() {}
   ~BindingCallbackTest() override {}
 
  protected:
diff --git a/mojo/public/cpp/bindings/tests/binding_unittest.cc b/mojo/public/cpp/bindings/tests/binding_unittest.cc
index 15b899d..71f12ca 100644
--- a/mojo/public/cpp/bindings/tests/binding_unittest.cc
+++ b/mojo/public/cpp/bindings/tests/binding_unittest.cc
@@ -13,7 +13,6 @@
 #include "base/macros.h"
 #include "base/message_loop/message_loop.h"
 #include "base/run_loop.h"
-#include "mojo/message_pump/message_pump_mojo.h"
 #include "mojo/public/cpp/bindings/strong_binding.h"
 #include "mojo/public/interfaces/bindings/tests/sample_interfaces.mojom.h"
 #include "mojo/public/interfaces/bindings/tests/sample_service.mojom.h"
@@ -24,7 +23,7 @@
 
 class BindingTestBase : public testing::Test {
  public:
-  BindingTestBase() : loop_(common::MessagePumpMojo::Create()) {}
+  BindingTestBase() {}
   ~BindingTestBase() override {}
 
   base::MessageLoop& loop() { return loop_; }
diff --git a/mojo/public/cpp/bindings/tests/bindings_perftest.cc b/mojo/public/cpp/bindings/tests/bindings_perftest.cc
index 93f00cf..0d4692eb 100644
--- a/mojo/public/cpp/bindings/tests/bindings_perftest.cc
+++ b/mojo/public/cpp/bindings/tests/bindings_perftest.cc
@@ -7,7 +7,6 @@
 
 #include "base/message_loop/message_loop.h"
 #include "base/run_loop.h"
-#include "mojo/message_pump/message_pump_mojo.h"
 #include "mojo/public/cpp/bindings/binding.h"
 #include "mojo/public/cpp/test_support/test_support.h"
 #include "mojo/public/cpp/test_support/test_utils.h"
@@ -92,7 +91,7 @@
 
 class MojoBindingsPerftest : public testing::Test {
  public:
-  MojoBindingsPerftest() : loop_(common::MessagePumpMojo::Create()) {}
+  MojoBindingsPerftest() {}
 
  protected:
   base::MessageLoop loop_;
diff --git a/mojo/public/cpp/bindings/tests/connector_unittest.cc b/mojo/public/cpp/bindings/tests/connector_unittest.cc
index 96fd23d2..f08ffb0b 100644
--- a/mojo/public/cpp/bindings/tests/connector_unittest.cc
+++ b/mojo/public/cpp/bindings/tests/connector_unittest.cc
@@ -12,7 +12,6 @@
 #include "base/message_loop/message_loop.h"
 #include "base/run_loop.h"
 #include "base/thread_task_runner_handle.h"
-#include "mojo/message_pump/message_pump_mojo.h"
 #include "mojo/public/cpp/bindings/lib/message_builder.h"
 #include "mojo/public/cpp/bindings/tests/message_queue.h"
 #include "testing/gtest/include/gtest/gtest.h"
@@ -88,7 +87,7 @@
 
 class ConnectorTest : public testing::Test {
  public:
-  ConnectorTest() : loop_(common::MessagePumpMojo::Create()) {}
+  ConnectorTest() {}
 
   void SetUp() override {
     CreateMessagePipe(nullptr, &handle0_, &handle1_);
diff --git a/mojo/public/cpp/bindings/tests/handle_passing_unittest.cc b/mojo/public/cpp/bindings/tests/handle_passing_unittest.cc
index ff947555..f2dccfb 100644
--- a/mojo/public/cpp/bindings/tests/handle_passing_unittest.cc
+++ b/mojo/public/cpp/bindings/tests/handle_passing_unittest.cc
@@ -7,7 +7,6 @@
 
 #include "base/message_loop/message_loop.h"
 #include "base/run_loop.h"
-#include "mojo/message_pump/message_pump_mojo.h"
 #include "mojo/public/cpp/bindings/binding.h"
 #include "mojo/public/cpp/bindings/strong_binding.h"
 #include "mojo/public/cpp/test_support/test_utils.h"
@@ -157,7 +156,7 @@
 
 class HandlePassingTest : public testing::Test {
  public:
-  HandlePassingTest() : loop_(common::MessagePumpMojo::Create()) {}
+  HandlePassingTest() {}
 
   void TearDown() override { PumpMessages(); }
 
diff --git a/mojo/public/cpp/bindings/tests/interface_ptr_unittest.cc b/mojo/public/cpp/bindings/tests/interface_ptr_unittest.cc
index 633d8f1..512423b41 100644
--- a/mojo/public/cpp/bindings/tests/interface_ptr_unittest.cc
+++ b/mojo/public/cpp/bindings/tests/interface_ptr_unittest.cc
@@ -8,7 +8,6 @@
 #include "base/bind.h"
 #include "base/message_loop/message_loop.h"
 #include "base/run_loop.h"
-#include "mojo/message_pump/message_pump_mojo.h"
 #include "mojo/public/cpp/bindings/binding.h"
 #include "mojo/public/cpp/bindings/strong_binding.h"
 #include "mojo/public/interfaces/bindings/tests/math_calculator.mojom.h"
@@ -214,7 +213,7 @@
 
 class InterfacePtrTest : public testing::Test {
  public:
-  InterfacePtrTest() : loop_(common::MessagePumpMojo::Create()) {}
+  InterfacePtrTest() {}
   ~InterfacePtrTest() override { loop_.RunUntilIdle(); }
 
   void PumpMessages() { loop_.RunUntilIdle(); }
@@ -527,7 +526,7 @@
 };
 
 TEST(StrongConnectorTest, Math) {
-  base::MessageLoop loop(common::MessagePumpMojo::Create());
+  base::MessageLoop loop;
 
   bool error_received = false;
   bool destroyed = false;
@@ -600,7 +599,7 @@
 };
 
 TEST(WeakConnectorTest, Math) {
-  base::MessageLoop loop(common::MessagePumpMojo::Create());
+  base::MessageLoop loop;
 
   bool error_received = false;
   bool destroyed = false;
diff --git a/mojo/public/cpp/bindings/tests/multiplex_router_unittest.cc b/mojo/public/cpp/bindings/tests/multiplex_router_unittest.cc
index 456a81b..9a2a8204 100644
--- a/mojo/public/cpp/bindings/tests/multiplex_router_unittest.cc
+++ b/mojo/public/cpp/bindings/tests/multiplex_router_unittest.cc
@@ -11,7 +11,6 @@
 #include "base/message_loop/message_loop.h"
 #include "base/run_loop.h"
 #include "base/thread_task_runner_handle.h"
-#include "mojo/message_pump/message_pump_mojo.h"
 #include "mojo/public/cpp/bindings/lib/interface_endpoint_client.h"
 #include "mojo/public/cpp/bindings/lib/scoped_interface_endpoint_handle.h"
 #include "mojo/public/cpp/bindings/message.h"
@@ -30,7 +29,7 @@
 
 class MultiplexRouterTest : public testing::Test {
  public:
-  MultiplexRouterTest() : loop_(common::MessagePumpMojo::Create()) {}
+  MultiplexRouterTest() {}
 
   void SetUp() override {
     MessagePipe pipe;
diff --git a/mojo/public/cpp/bindings/tests/request_response_unittest.cc b/mojo/public/cpp/bindings/tests/request_response_unittest.cc
index cbc6515..14f552c 100644
--- a/mojo/public/cpp/bindings/tests/request_response_unittest.cc
+++ b/mojo/public/cpp/bindings/tests/request_response_unittest.cc
@@ -7,7 +7,6 @@
 
 #include "base/message_loop/message_loop.h"
 #include "base/run_loop.h"
-#include "mojo/message_pump/message_pump_mojo.h"
 #include "mojo/public/cpp/bindings/binding.h"
 #include "mojo/public/cpp/test_support/test_utils.h"
 #include "mojo/public/interfaces/bindings/tests/sample_import.mojom.h"
@@ -103,7 +102,7 @@
 
 class RequestResponseTest : public testing::Test {
  public:
-  RequestResponseTest() : loop_(common::MessagePumpMojo::Create()) {}
+  RequestResponseTest() {}
   ~RequestResponseTest() override { loop_.RunUntilIdle(); }
 
   void PumpMessages() { loop_.RunUntilIdle(); }
diff --git a/mojo/public/cpp/bindings/tests/router_unittest.cc b/mojo/public/cpp/bindings/tests/router_unittest.cc
index 2c0ba4cf..746a80f1 100644
--- a/mojo/public/cpp/bindings/tests/router_unittest.cc
+++ b/mojo/public/cpp/bindings/tests/router_unittest.cc
@@ -9,7 +9,6 @@
 #include "base/message_loop/message_loop.h"
 #include "base/run_loop.h"
 #include "base/thread_task_runner_handle.h"
-#include "mojo/message_pump/message_pump_mojo.h"
 #include "mojo/public/cpp/bindings/tests/message_queue.h"
 #include "mojo/public/cpp/bindings/tests/router_test_util.h"
 #include "testing/gtest/include/gtest/gtest.h"
@@ -20,7 +19,7 @@
 
 class RouterTest : public testing::Test {
  public:
-  RouterTest() : loop_(common::MessagePumpMojo::Create()) {}
+  RouterTest() {}
 
   void SetUp() override {
     CreateMessagePipe(nullptr, &handle0_, &handle1_);
diff --git a/mojo/public/cpp/bindings/tests/sync_method_unittest.cc b/mojo/public/cpp/bindings/tests/sync_method_unittest.cc
index d0ffa41..65a098a 100644
--- a/mojo/public/cpp/bindings/tests/sync_method_unittest.cc
+++ b/mojo/public/cpp/bindings/tests/sync_method_unittest.cc
@@ -8,7 +8,6 @@
 #include "base/message_loop/message_loop.h"
 #include "base/run_loop.h"
 #include "base/threading/thread.h"
-#include "mojo/message_pump/message_pump_mojo.h"
 #include "mojo/public/cpp/bindings/associated_binding.h"
 #include "mojo/public/cpp/bindings/binding.h"
 #include "mojo/public/interfaces/bindings/tests/test_sync_methods.mojom.h"
@@ -172,10 +171,7 @@
  public:
   TestSyncServiceThread()
       : thread_("TestSyncServiceThread"), ping_called_(false) {
-    base::Thread::Options thread_options;
-    thread_options.message_pump_factory =
-        base::Bind(&common::MessagePumpMojo::Create);
-    thread_.StartWithOptions(thread_options);
+    thread_.Start();
   }
 
   void SetUp(InterfaceRequest<Interface> request) {
@@ -215,7 +211,7 @@
 
 class SyncMethodTest : public testing::Test {
  public:
-  SyncMethodTest() : loop_(common::MessagePumpMojo::Create()) {}
+  SyncMethodTest() {}
   ~SyncMethodTest() override { loop_.RunUntilIdle(); }
 
  protected:
diff --git a/mojo/public/cpp/bindings/tests/union_unittest.cc b/mojo/public/cpp/bindings/tests/union_unittest.cc
index 4e0f00101..d4bcd47b3 100644
--- a/mojo/public/cpp/bindings/tests/union_unittest.cc
+++ b/mojo/public/cpp/bindings/tests/union_unittest.cc
@@ -9,7 +9,6 @@
 
 #include "base/message_loop/message_loop.h"
 #include "base/run_loop.h"
-#include "mojo/message_pump/message_pump_mojo.h"
 #include "mojo/public/cpp/bindings/array.h"
 #include "mojo/public/cpp/bindings/binding.h"
 #include "mojo/public/cpp/bindings/lib/array_internal.h"
@@ -1120,7 +1119,7 @@
 };
 
 TEST(UnionTest, InterfaceInUnion) {
-  base::MessageLoop message_loop(common::MessagePumpMojo::Create());
+  base::MessageLoop message_loop;
   base::RunLoop run_loop;
   SmallCacheImpl impl(run_loop.QuitClosure());
   SmallCachePtr ptr;
@@ -1135,7 +1134,7 @@
 }
 
 TEST(UnionTest, InterfaceInUnionSerialization) {
-  base::MessageLoop message_loop(common::MessagePumpMojo::Create());
+  base::MessageLoop message_loop;
   base::RunLoop run_loop;
   SmallCacheImpl impl(run_loop.QuitClosure());
   SmallCachePtr ptr;
@@ -1172,7 +1171,7 @@
 };
 
 TEST(UnionTest, UnionInInterface) {
-  base::MessageLoop run_loop(common::MessagePumpMojo::Create());
+  base::MessageLoop run_loop;
   UnionInterfaceImpl impl;
   UnionInterfacePtr ptr;
   Binding<UnionInterface> bindings(&impl, GetProxy(&ptr));
diff --git a/mojo/public/cpp/bindings/tests/validation_unittest.cc b/mojo/public/cpp/bindings/tests/validation_unittest.cc
index 792af21..e6c3f11 100644
--- a/mojo/public/cpp/bindings/tests/validation_unittest.cc
+++ b/mojo/public/cpp/bindings/tests/validation_unittest.cc
@@ -13,7 +13,6 @@
 #include "base/message_loop/message_loop.h"
 #include "base/run_loop.h"
 #include "base/thread_task_runner_handle.h"
-#include "mojo/message_pump/message_pump_mojo.h"
 #include "mojo/public/c/system/macros.h"
 #include "mojo/public/cpp/bindings/binding.h"
 #include "mojo/public/cpp/bindings/interface_ptr.h"
@@ -197,7 +196,7 @@
 
 class ValidationTest : public testing::Test {
  public:
-  ValidationTest() : loop_(common::MessagePumpMojo::Create()) {}
+  ValidationTest() {}
 
  protected:
   base::MessageLoop loop_;
diff --git a/services/shell/background/BUILD.gn b/services/shell/background/BUILD.gn
index 31821aa..067f6eb 100644
--- a/services/shell/background/BUILD.gn
+++ b/services/shell/background/BUILD.gn
@@ -17,7 +17,6 @@
   ]
   deps = [
     "//base",
-    "//mojo/message_pump",
     "//services/catalog:lib",
     "//services/shell",
     "//services/shell/public/cpp:sources",
@@ -33,7 +32,6 @@
   ]
   deps = [
     "//base",
-    "//mojo/message_pump",
     "//services/shell",
     "//services/shell/public/cpp:sources",
     "//services/shell/runner:init",
diff --git a/services/shell/background/background_shell.cc b/services/shell/background/background_shell.cc
index 7e16e7c..4c42c09d 100644
--- a/services/shell/background/background_shell.cc
+++ b/services/shell/background/background_shell.cc
@@ -9,10 +9,10 @@
 #include "base/command_line.h"
 #include "base/logging.h"
 #include "base/memory/ptr_util.h"
+#include "base/message_loop/message_pump_default.h"
 #include "base/path_service.h"
 #include "base/synchronization/waitable_event.h"
 #include "base/threading/simple_thread.h"
-#include "mojo/message_pump/message_pump_mojo.h"
 #include "services/catalog/store.h"
 #include "services/shell/connect_params.h"
 #include "services/shell/public/cpp/shell_client.h"
@@ -24,15 +24,15 @@
 
 namespace {
 
-std::unique_ptr<base::MessagePump> CreateMessagePumpMojo() {
-  return base::WrapUnique(new mojo::common::MessagePumpMojo);
+std::unique_ptr<base::MessagePump> CreateDefaultMessagePump() {
+  return base::WrapUnique(new base::MessagePumpDefault);
 }
 
 class MojoMessageLoop : public base::MessageLoop {
  public:
   MojoMessageLoop()
       : base::MessageLoop(base::MessageLoop::TYPE_CUSTOM,
-                          base::Bind(&CreateMessagePumpMojo)) {}
+                          base::Bind(&CreateDefaultMessagePump)) {}
   ~MojoMessageLoop() override {}
 
   void BindToCurrentThread() { base::MessageLoop::BindToCurrentThread(); }
diff --git a/services/shell/runner/child/BUILD.gn b/services/shell/runner/child/BUILD.gn
index 7f8b2bd5..197a0a46 100644
--- a/services/shell/runner/child/BUILD.gn
+++ b/services/shell/runner/child/BUILD.gn
@@ -26,7 +26,6 @@
   deps = [
     "//base",
     "//mojo/edk/system",
-    "//mojo/message_pump",
     "//services/shell/public/cpp",
     "//services/shell/runner/common",
   ]
diff --git a/services/shell/runner/host/BUILD.gn b/services/shell/runner/host/BUILD.gn
index 0dd14ce9..b7658de 100644
--- a/services/shell/runner/host/BUILD.gn
+++ b/services/shell/runner/host/BUILD.gn
@@ -45,7 +45,6 @@
   deps = [
     "//base",
     "//mojo/edk/system",
-    "//mojo/message_pump",
     "//mojo/platform_handle:platform_handle_impl",
     "//services/shell",
     "//services/shell/public/interfaces",
@@ -71,7 +70,6 @@
     ":native_application_support",
     "//base:base_static",
     "//base:i18n",
-    "//mojo/message_pump",
     "//mojo/platform_handle:platform_handle_impl",
     "//services/shell/public/cpp:sources",
     "//services/shell/runner:init",
@@ -120,7 +118,6 @@
     "//base",
     "//base/test:test_support",
     "//mojo/edk/system",
-    "//mojo/message_pump",
     "//services/shell",
     "//services/shell/runner:init",
     "//services/shell/runner/common",
diff --git a/services/shell/runner/host/child_process.cc b/services/shell/runner/host/child_process.cc
index 1cb8ce1..76e773c72 100644
--- a/services/shell/runner/host/child_process.cc
+++ b/services/shell/runner/host/child_process.cc
@@ -30,7 +30,6 @@
 #include "mojo/edk/embedder/platform_channel_pair.h"
 #include "mojo/edk/embedder/process_delegate.h"
 #include "mojo/edk/embedder/scoped_platform_handle.h"
-#include "mojo/message_pump/message_pump_mojo.h"
 #include "mojo/public/cpp/bindings/binding.h"
 #include "mojo/public/cpp/system/core.h"
 #include "services/shell/runner/common/switches.h"
diff --git a/services/shell/runner/host/child_process_host_unittest.cc b/services/shell/runner/host/child_process_host_unittest.cc
index 3af32ef7..f4867d4 100644
--- a/services/shell/runner/host/child_process_host_unittest.cc
+++ b/services/shell/runner/host/child_process_host_unittest.cc
@@ -20,7 +20,6 @@
 #include "base/threading/thread.h"
 #include "mojo/edk/embedder/embedder.h"
 #include "mojo/edk/embedder/process_delegate.h"
-#include "mojo/message_pump/message_pump_mojo.h"
 #include "services/shell/native_runner_delegate.h"
 #include "testing/gtest/include/gtest/gtest.h"
 
@@ -77,8 +76,7 @@
 TEST(ChildProcessHostTest, MAYBE_StartJoin) {
   base::FilePath shell_dir;
   PathService::Get(base::DIR_MODULE, &shell_dir);
-  base::MessageLoop message_loop(
-      std::unique_ptr<base::MessagePump>(new mojo::common::MessagePumpMojo()));
+  base::MessageLoop message_loop;
   scoped_refptr<base::SequencedWorkerPool> blocking_pool(
       new base::SequencedWorkerPool(3, "blocking_pool"));
 
diff --git a/services/shell/shell.gyp b/services/shell/shell.gyp
index f4c2a51e..1eacf72 100644
--- a/services/shell/shell.gyp
+++ b/services/shell/shell.gyp
@@ -29,7 +29,7 @@
     'export_dependent_settings': [
       '<(DEPTH)/mojo/mojo_base.gyp:mojo_common_custom_types_mojom',
     ],
-  },  
+  },
   {
     # GN version: //services/shell/public/cpp
     'target_name': 'shell_public',
@@ -69,7 +69,6 @@
       'shell_interfaces',
       '<(DEPTH)/base/base.gyp:base_i18n',
       '<(DEPTH)/mojo/mojo_public.gyp:mojo_cpp_bindings',
-      '<(DEPTH)/mojo/mojo_public.gyp:mojo_message_pump_lib',
     ],
   }, {
     'target_name': 'shell_lib',
@@ -196,7 +195,6 @@
       '<(DEPTH)/base/base.gyp:base_static',
       '<(DEPTH)/mojo/mojo_edk.gyp:mojo_system_impl',
       '<(DEPTH)/mojo/mojo_platform_handle.gyp:platform_handle',
-      '<(DEPTH)/mojo/mojo_public.gyp:mojo_message_pump_lib',
     ],
     'export_dependent_settings': [
       'shell_public',
diff --git a/services/shell/standalone/BUILD.gn b/services/shell/standalone/BUILD.gn
index 2faa717f..9eb1c02 100644
--- a/services/shell/standalone/BUILD.gn
+++ b/services/shell/standalone/BUILD.gn
@@ -37,7 +37,6 @@
     "//base/third_party/dynamic_annotations",
     "//components/tracing:startup_tracing",
     "//mojo/edk/system",
-    "//mojo/message_pump",
     "//services/catalog:lib",
     "//services/shell",
     "//services/shell/public/cpp",
diff --git a/services/user/BUILD.gn b/services/user/BUILD.gn
index 84db485..d30ff46 100644
--- a/services/user/BUILD.gn
+++ b/services/user/BUILD.gn
@@ -23,7 +23,6 @@
     "//components/leveldb/public/interfaces",
     "//mojo/common",
     "//mojo/common:common_base",
-    "//mojo/message_pump",
     "//mojo/platform_handle",
     "//services/shell/public/cpp",
     "//services/shell/public/interfaces",
diff --git a/third_party/WebKit/Source/platform/fonts/shaping/ShapeResultInlineHeaders.h b/third_party/WebKit/Source/platform/fonts/shaping/ShapeResultInlineHeaders.h
index 4495db5..67d506d 100644
--- a/third_party/WebKit/Source/platform/fonts/shaping/ShapeResultInlineHeaders.h
+++ b/third_party/WebKit/Source/platform/fonts/shaping/ShapeResultInlineHeaders.h
@@ -84,11 +84,6 @@
     void setGlyphAndPositions(unsigned index, uint16_t glyphId, float advance,
         float offsetX, float offsetY);
 
-    void addAdvance(unsigned index, float advance)
-    {
-        m_glyphData[index].advance += advance;
-    }
-
     size_t glyphToCharacterIndex(size_t i) const
     {
         return m_startIndex + m_glyphData[i].characterIndex;
diff --git a/third_party/WebKit/Source/wtf/HexNumber.h b/third_party/WebKit/Source/wtf/HexNumber.h
index d9e6514..0490eba 100644
--- a/third_party/WebKit/Source/wtf/HexNumber.h
+++ b/third_party/WebKit/Source/wtf/HexNumber.h
@@ -49,15 +49,6 @@
 }
 
 template<typename T>
-inline void placeByteAsHexCompressIfPossible(unsigned char byte, T& destination, unsigned& index, HexConversionMode mode = Uppercase)
-{
-    const LChar* hexDigits = Internal::hexDigitsForMode(mode);
-    if (byte >= 0x10)
-        destination[index++] = hexDigits[byte >> 4];
-    destination[index++] = hexDigits[byte & 0xF];
-}
-
-template<typename T>
 inline void placeByteAsHex(unsigned char byte, T& destination, HexConversionMode mode = Uppercase)
 {
     const LChar* hexDigits = Internal::hexDigitsForMode(mode);
@@ -101,7 +92,6 @@
 using WTF::appendUnsignedAsHex;
 using WTF::appendUnsignedAsHexFixedSize;
 using WTF::placeByteAsHex;
-using WTF::placeByteAsHexCompressIfPossible;
 using WTF::Lowercase;
 
 #endif // HexNumber_h
diff --git a/ui/arc/BUILD.gn b/ui/arc/BUILD.gn
index 7b987aa7..cd4187e 100644
--- a/ui/arc/BUILD.gn
+++ b/ui/arc/BUILD.gn
@@ -35,7 +35,6 @@
     "//base/test:test_support",
     "//components/arc:arc_test_support",
     "//mojo/edk/system",
-    "//mojo/message_pump",
     "//ui/message_center:test_support",
   ]
 }
diff --git a/ui/arc/arc.gyp b/ui/arc/arc.gyp
index e1a40a7..55fb302e 100644
--- a/ui/arc/arc.gyp
+++ b/ui/arc/arc.gyp
@@ -43,7 +43,6 @@
         '../../components/components.gyp:arc_test_support',
         '../../mojo/mojo_edk.gyp:mojo_system_impl',
         '../../mojo/mojo_public.gyp:mojo_cpp_bindings',
-        '../../mojo/mojo_public.gyp:mojo_message_pump_lib',
         '../../testing/gtest.gyp:gtest',
         '../message_center/message_center.gyp:message_center_test_support',
         'arc',
diff --git a/ui/arc/notification/arc_notification_manager_unittest.cc b/ui/arc/notification/arc_notification_manager_unittest.cc
index 94570f5b..eadbb84 100644
--- a/ui/arc/notification/arc_notification_manager_unittest.cc
+++ b/ui/arc/notification/arc_notification_manager_unittest.cc
@@ -7,7 +7,6 @@
 #include "components/arc/test/fake_arc_bridge_instance.h"
 #include "components/arc/test/fake_arc_bridge_service.h"
 #include "components/arc/test/fake_notifications_instance.h"
-#include "mojo/message_pump/message_pump_mojo.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "ui/arc/notification/arc_notification_manager.h"
 #include "ui/message_center/fake_message_center.h"
@@ -70,8 +69,7 @@
 
 class ArcNotificationManagerTest : public testing::Test {
  public:
-  ArcNotificationManagerTest()
-      : loop_(mojo::common::MessagePumpMojo::Create()) {}
+  ArcNotificationManagerTest() {}
   ~ArcNotificationManagerTest() override { loop_.RunUntilIdle(); }
 
  protected: