Let base::Thread::Options pass in an unbound MessageLoopBase

This allows us to construct a SequenceManager and vend task queues
before launching a thread.  This should be useful in blink for
launching workers (which currently have a worker scheduler on top of a
MessageLoop), if we need an IO Thread scheduler (it looks like we might
the IO thread is congested during startup) and for the BrowserThreadTest
with a BrowserUIThreadScheduler.

The message_pump_factory_ was added to base::Thread to support these
two use cases:
https://cs.chromium.org/search/?q=message_pump_factory&type=cs

Bug: 863341, 872372
Change-Id: Ic30052e8af4a9351467792e70b7d7b65027d8a9a
Reviewed-on: https://chromium-review.googlesource.com/c/1462801
Commit-Queue: Alex Clarke <[email protected]>
Auto-Submit: Alex Clarke <[email protected]>
Reviewed-by: Pavel Feldman <[email protected]>
Reviewed-by: Gabriel Charette <[email protected]>
Cr-Commit-Position: refs/heads/master@{#632741}
diff --git a/base/message_loop/message_pump_perftest.cc b/base/message_loop/message_pump_perftest.cc
index 6f900e6f3..68c7fd9 100644
--- a/base/message_loop/message_pump_perftest.cc
+++ b/base/message_loop/message_pump_perftest.cc
@@ -31,7 +31,7 @@
  public:
   ThreadForTest() : Thread("test") {}
 
-  using Thread::message_loop;
+  using Thread::message_loop_base;
 };
 
 class ScheduleWorkTest : public testing::Test {
@@ -56,10 +56,7 @@
     uint64_t schedule_calls = 0u;
     do {
       for (size_t i = 0; i < kBatchSize; ++i) {
-        target_message_loop()
-            ->GetMessageLoopBase()
-            ->GetMessagePump()
-            ->ScheduleWork();
+        target_message_loop_base()->GetMessagePump()->ScheduleWork();
         schedule_calls++;
       }
       now = base::TimeTicks::Now();
@@ -75,7 +72,7 @@
           base::ThreadTicks::Now() - thread_start;
     min_batch_times_[index] = minimum;
     max_batch_times_[index] = maximum;
-    target_message_loop()->task_runner()->PostTask(
+    target_message_loop_base()->GetTaskRunner()->PostTask(
         FROM_HERE, base::BindOnce(&ScheduleWorkTest::Increment,
                                   base::Unretained(this), schedule_calls));
   }
@@ -177,12 +174,12 @@
     }
   }
 
-  MessageLoop* target_message_loop() {
+  MessageLoopBase* target_message_loop_base() {
 #if defined(OS_ANDROID)
     if (java_thread_)
-      return java_thread_->message_loop();
+      return java_thread_->message_loop()->GetMessageLoopBase();
 #endif
-    return target_->message_loop();
+    return target_->message_loop_base();
   }
 
  private: