| Index: content/public/test/test_utils.cc | 
| diff --git a/content/public/test/test_utils.cc b/content/public/test/test_utils.cc | 
| index 14e3c4b128fc5636024786377120c9576f41a292..cc8757da101ae39a2ac59bc4a86bcdcdf27eabc7 100644 | 
| --- a/content/public/test/test_utils.cc | 
| +++ b/content/public/test/test_utils.cc | 
| @@ -45,10 +45,10 @@ namespace { | 
| // animating page, the potential delay to quitting the RunLoop would be | 
| // kNumQuitDeferrals * frame_render_time. Some perf tests run slow, such as | 
| // 200ms/frame. | 
| -static const int kNumQuitDeferrals = 10; | 
| +constexpr int kNumQuitDeferrals = 10; | 
|  | 
| -static void DeferredQuitRunLoop(const base::Closure& quit_task, | 
| -                                int num_quit_deferrals) { | 
| +void DeferredQuitRunLoop(const base::Closure& quit_task, | 
| +                         int num_quit_deferrals) { | 
| if (num_quit_deferrals <= 0) { | 
| quit_task.Run(); | 
| } else { | 
| @@ -58,12 +58,6 @@ static void DeferredQuitRunLoop(const base::Closure& quit_task, | 
| } | 
| } | 
|  | 
| -void RunAllPendingMessageAndSendQuit(BrowserThread::ID thread_id, | 
| -                                     const base::Closure& quit_task) { | 
| -  RunAllPendingInMessageLoop(); | 
| -  BrowserThread::PostTask(thread_id, FROM_HERE, quit_task); | 
| -} | 
| - | 
| // Class used to handle result callbacks for ExecuteScriptAndGetValue. | 
| class ScriptCallback { | 
| public: | 
| @@ -139,6 +133,7 @@ void RunThisRunLoop(base::RunLoop* run_loop) { | 
| } | 
|  | 
| void RunAllPendingInMessageLoop() { | 
| +  DCHECK_CURRENTLY_ON(BrowserThread::UI); | 
| base::RunLoop run_loop; | 
| base::ThreadTaskRunnerHandle::Get()->PostTask( | 
| FROM_HERE, GetQuitTaskForRunLoop(&run_loop)); | 
| @@ -146,20 +141,23 @@ void RunAllPendingInMessageLoop() { | 
| } | 
|  | 
| void RunAllPendingInMessageLoop(BrowserThread::ID thread_id) { | 
| -  if (BrowserThread::CurrentlyOn(thread_id)) { | 
| +  DCHECK_CURRENTLY_ON(BrowserThread::UI); | 
| +  if (thread_id == BrowserThread::UI) { | 
| RunAllPendingInMessageLoop(); | 
| return; | 
| } | 
| -  BrowserThread::ID current_thread_id; | 
| -  if (!BrowserThread::GetCurrentThreadIdentifier(¤t_thread_id)) { | 
| -    NOTREACHED(); | 
| -    return; | 
| -  } | 
|  | 
| +  // Post a DeferredQuitRunLoop() task to |thread_id|. Then, run a RunLoop on | 
| +  // this thread. When a few generations of pending tasks have run on | 
| +  // |thread_id|, a task will be posted to this thread to exit the RunLoop. | 
| base::RunLoop run_loop; | 
| -  BrowserThread::PostTask(thread_id, FROM_HERE, | 
| -      base::Bind(&RunAllPendingMessageAndSendQuit, current_thread_id, | 
| -                 run_loop.QuitClosure())); | 
| +  const base::Closure post_quit_run_loop_to_ui_thread = base::Bind( | 
| +      base::IgnoreResult(&base::SingleThreadTaskRunner::PostTask), | 
| +      base::ThreadTaskRunnerHandle::Get(), FROM_HERE, run_loop.QuitClosure()); | 
| +  BrowserThread::PostTask( | 
| +      thread_id, FROM_HERE, | 
| +      base::Bind(&DeferredQuitRunLoop, post_quit_run_loop_to_ui_thread, | 
| +                 kNumQuitDeferrals)); | 
| RunThisRunLoop(&run_loop); | 
| } | 
|  | 
|  |