diff --git a/tools/gn/loader.cc b/tools/gn/loader.cc
index 1899df7..0ede3c9 100644
--- a/tools/gn/loader.cc
+++ b/tools/gn/loader.cc
@@ -6,8 +6,7 @@
 
 #include "base/bind.h"
 #include "base/memory/ptr_util.h"
-#include "base/message_loop/message_loop.h"
-#include "base/single_thread_task_runner.h"
+#include "base/threading/thread_task_runner_handle.h"
 #include "tools/gn/build_settings.h"
 #include "tools/gn/err.h"
 #include "tools/gn/filesystem_utils.h"
@@ -100,9 +99,11 @@
 // -----------------------------------------------------------------------------
 
 LoaderImpl::LoaderImpl(const BuildSettings* build_settings)
-    : main_loop_(base::MessageLoop::current()),
-      pending_loads_(0),
-      build_settings_(build_settings) {
+    : pending_loads_(0), build_settings_(build_settings) {
+  // There may not be an active TaskRunner at this point. When that's the case,
+  // the calling code is expected to call set_task_runner().
+  if (base::ThreadTaskRunnerHandle::IsSet())
+    task_runner_ = base::ThreadTaskRunnerHandle::Get();
 }
 
 LoaderImpl::~LoaderImpl() {
@@ -239,7 +240,7 @@
                                     const LocationRange& origin,
                                     const ParseNode* root) {
   if (!root) {
-    main_loop_->task_runner()->PostTask(
+    task_runner_->PostTask(
         FROM_HERE, base::Bind(&LoaderImpl::DecrementPendingLoads, this));
     return;
   }
@@ -280,8 +281,7 @@
 
   trace.Done();
 
-  main_loop_->task_runner()->PostTask(
-      FROM_HERE, base::Bind(&LoaderImpl::DidLoadFile, this));
+  task_runner_->PostTask(FROM_HERE, base::Bind(&LoaderImpl::DidLoadFile, this));
 }
 
 void LoaderImpl::BackgroundLoadBuildConfig(
@@ -289,7 +289,7 @@
     const Scope::KeyValueMap& toolchain_overrides,
     const ParseNode* root) {
   if (!root) {
-    main_loop_->task_runner()->PostTask(
+    task_runner_->PostTask(
         FROM_HERE, base::Bind(&LoaderImpl::DecrementPendingLoads, this));
     return;
   }
@@ -339,9 +339,9 @@
     }
   }
 
-  main_loop_->task_runner()->PostTask(
-      FROM_HERE, base::Bind(&LoaderImpl::DidLoadBuildConfig, this,
-                            settings->toolchain_label()));
+  task_runner_->PostTask(FROM_HERE,
+                         base::Bind(&LoaderImpl::DidLoadBuildConfig, this,
+                                    settings->toolchain_label()));
 }
 
 void LoaderImpl::DidLoadFile() {
diff --git a/tools/gn/loader.h b/tools/gn/loader.h
index a610835..17f7110 100644
--- a/tools/gn/loader.h
+++ b/tools/gn/loader.h
@@ -11,13 +11,10 @@
 
 #include "base/callback.h"
 #include "base/memory/ref_counted.h"
+#include "base/single_thread_task_runner.h"
 #include "tools/gn/label.h"
 #include "tools/gn/scope.h"
 
-namespace base {
-class MessageLoop;
-}
-
 class BuildSettings;
 class LocationRange;
 class Settings;
@@ -90,10 +87,13 @@
   Label GetDefaultToolchain() const override;
   const Settings* GetToolchainSettings(const Label& label) const override;
 
-  // Sets the message loop corresponding to the main thread. By default this
+  // Sets the task runner corresponding to the main thread. By default this
   // class will use the thread active during construction, but there is not
-  // a message loop active during construction all the time.
-  void set_main_loop(base::MessageLoop* loop) { main_loop_ = loop; }
+  // a task runner active during construction all the time.
+  void set_task_runner(
+      scoped_refptr<base::SingleThreadTaskRunner> task_runner) {
+    task_runner_ = task_runner;
+  }
 
   // The complete callback is called whenever there are no more pending loads.
   // Called on the main thread only. This may be called more than once if the
@@ -159,7 +159,7 @@
                      const base::Callback<void(const ParseNode*)>& callback,
                      Err* err);
 
-  base::MessageLoop* main_loop_;
+  scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
 
   int pending_loads_;
   base::Closure complete_callback_;
diff --git a/tools/gn/loader_unittest.cc b/tools/gn/loader_unittest.cc
index e8d809d..c6cdbdb 100644
--- a/tools/gn/loader_unittest.cc
+++ b/tools/gn/loader_unittest.cc
@@ -7,7 +7,6 @@
 #include <vector>
 
 #include "base/bind.h"
-#include "base/message_loop/message_loop.h"
 #include "base/run_loop.h"
 #include "testing/gtest/include/gtest/gtest.h"
 #include "tools/gn/build_settings.h"
diff --git a/tools/gn/scheduler.cc b/tools/gn/scheduler.cc
index b5f3dd0..7364a02 100644
--- a/tools/gn/scheduler.cc
+++ b/tools/gn/scheduler.cc
@@ -97,14 +97,14 @@
 }
 
 void Scheduler::Log(const std::string& verb, const std::string& msg) {
-  if (base::MessageLoop::current() == &main_loop_) {
+  if (task_runner()->BelongsToCurrentThread()) {
     LogOnMainThread(verb, msg);
   } else {
     // The run loop always joins on the sub threads, so the lifetime of this
     // object outlives the invocations of this function, hence "unretained".
-    main_loop_.task_runner()->PostTask(
-        FROM_HERE, base::Bind(&Scheduler::LogOnMainThread,
-                              base::Unretained(this), verb, msg));
+    task_runner()->PostTask(FROM_HERE,
+                            base::Bind(&Scheduler::LogOnMainThread,
+                                       base::Unretained(this), verb, msg));
   }
 }
 
@@ -118,14 +118,14 @@
     is_failed_ = true;
   }
 
-  if (base::MessageLoop::current() == &main_loop_) {
+  if (task_runner()->BelongsToCurrentThread()) {
     FailWithErrorOnMainThread(err);
   } else {
     // The run loop always joins on the sub threads, so the lifetime of this
     // object outlives the invocations of this function, hence "unretained".
-    main_loop_.task_runner()->PostTask(
-        FROM_HERE, base::Bind(&Scheduler::FailWithErrorOnMainThread,
-                              base::Unretained(this), err));
+    task_runner()->PostTask(FROM_HERE,
+                            base::Bind(&Scheduler::FailWithErrorOnMainThread,
+                                       base::Unretained(this), err));
   }
 }
 
@@ -208,12 +208,11 @@
 
 void Scheduler::DecrementWorkCount() {
   if (!base::AtomicRefCountDec(&work_count_)) {
-    if (base::MessageLoop::current() == &main_loop_) {
+    if (task_runner()->BelongsToCurrentThread()) {
       OnComplete();
     } else {
-      main_loop_.task_runner()->PostTask(
-          FROM_HERE,
-          base::Bind(&Scheduler::OnComplete, base::Unretained(this)));
+      task_runner()->PostTask(FROM_HERE, base::Bind(&Scheduler::OnComplete,
+                                                    base::Unretained(this)));
     }
   }
 }
@@ -236,6 +235,6 @@
 
 void Scheduler::OnComplete() {
   // Should be called on the main thread.
-  DCHECK(base::MessageLoop::current() == main_loop());
+  DCHECK(task_runner()->BelongsToCurrentThread());
   runner_.Quit();
 }
diff --git a/tools/gn/scheduler.h b/tools/gn/scheduler.h
index a9bb036..67650d8 100644
--- a/tools/gn/scheduler.h
+++ b/tools/gn/scheduler.h
@@ -12,6 +12,7 @@
 #include "base/macros.h"
 #include "base/message_loop/message_loop.h"
 #include "base/run_loop.h"
+#include "base/single_thread_task_runner.h"
 #include "base/synchronization/lock.h"
 #include "base/threading/sequenced_worker_pool.h"
 #include "tools/gn/input_file_manager.h"
@@ -29,7 +30,9 @@
 
   bool Run();
 
-  base::MessageLoop* main_loop() { return &main_loop_; }
+  scoped_refptr<base::SingleThreadTaskRunner> task_runner() {
+    return main_loop_.task_runner();
+  }
   base::SequencedWorkerPool* pool() { return pool_.get(); }
 
   InputFileManager* input_file_manager() { return input_file_manager_.get(); }
diff --git a/tools/gn/setup.cc b/tools/gn/setup.cc
index eceb4f0..60aeaa8 100644
--- a/tools/gn/setup.cc
+++ b/tools/gn/setup.cc
@@ -13,6 +13,7 @@
 #include "base/command_line.h"
 #include "base/files/file_path.h"
 #include "base/files/file_util.h"
+#include "base/memory/ref_counted.h"
 #include "base/process/launch.h"
 #include "base/single_thread_task_runner.h"
 #include "base/strings/string_split.h"
@@ -139,13 +140,13 @@
 }
 
 // Called on any thread. Post the item to the builder on the main thread.
-void ItemDefinedCallback(base::MessageLoop* main_loop,
-                         scoped_refptr<Builder> builder,
-                         std::unique_ptr<Item> item) {
+void ItemDefinedCallback(
+    scoped_refptr<base::SingleThreadTaskRunner> task_runner,
+    scoped_refptr<Builder> builder,
+    std::unique_ptr<Item> item) {
   DCHECK(item);
-  main_loop->task_runner()->PostTask(
-      FROM_HERE,
-      base::Bind(&Builder::ItemDefined, builder, base::Passed(&item)));
+  task_runner->PostTask(FROM_HERE, base::Bind(&Builder::ItemDefined, builder,
+                                              base::Passed(&item)));
 }
 
 void DecrementWorkCount() {
@@ -258,12 +259,12 @@
       fill_arguments_(true) {
   dotfile_settings_.set_toolchain_label(Label());
   build_settings_.set_item_defined_callback(
-      base::Bind(&ItemDefinedCallback, scheduler_.main_loop(), builder_));
+      base::Bind(&ItemDefinedCallback, scheduler_.task_runner(), builder_));
 
   loader_->set_complete_callback(base::Bind(&DecrementWorkCount));
-  // The scheduler's main loop wasn't created when the Loader was created, so
+  // The scheduler's task runner wasn't created when the Loader was created, so
   // we need to set it now.
-  loader_->set_main_loop(scheduler_.main_loop());
+  loader_->set_task_runner(scheduler_.task_runner());
 }
 
 Setup::~Setup() {
