| Index: base/task_scheduler/scheduler_thread_pool.cc
 | 
| diff --git a/base/task_scheduler/scheduler_thread_pool.cc b/base/task_scheduler/scheduler_thread_pool.cc
 | 
| index b00990bb82945e8026f5cb5ad263462e39277863..b9ad01c8b4349fb2f405b57b40971acf10a64dd0 100644
 | 
| --- a/base/task_scheduler/scheduler_thread_pool.cc
 | 
| +++ b/base/task_scheduler/scheduler_thread_pool.cc
 | 
| @@ -31,9 +31,13 @@ class SchedulerParallelTaskRunner : public TaskRunner {
 | 
|    // long as |executor| is alive.
 | 
|    // TODO(robliao): Find a concrete way to manage |executor|'s memory.
 | 
|    SchedulerParallelTaskRunner(const TaskTraits& traits,
 | 
| +                              SchedulerTaskExecutor* executor,
 | 
|                                TaskTracker* task_tracker,
 | 
| -                              SchedulerTaskExecutor* executor)
 | 
| -      : traits_(traits), task_tracker_(task_tracker), executor_(executor) {}
 | 
| +                              DelayedTaskManager* delayed_task_manager)
 | 
| +      : traits_(traits),
 | 
| +        executor_(executor),
 | 
| +        task_tracker_(task_tracker),
 | 
| +        delayed_task_manager_(delayed_task_manager) {}
 | 
|  
 | 
|    // TaskRunner:
 | 
|    bool PostDelayedTask(const tracked_objects::Location& from_here,
 | 
| @@ -44,7 +48,8 @@ class SchedulerParallelTaskRunner : public TaskRunner {
 | 
|          WrapUnique(
 | 
|              new Task(from_here, closure, traits_,
 | 
|                       delay.is_zero() ? TimeTicks() : TimeTicks::Now() + delay)),
 | 
| -        make_scoped_refptr(new Sequence), executor_, task_tracker_);
 | 
| +        make_scoped_refptr(new Sequence), executor_, task_tracker_,
 | 
| +        delayed_task_manager_);
 | 
|    }
 | 
|  
 | 
|    bool RunsTasksOnCurrentThread() const override {
 | 
| @@ -55,8 +60,9 @@ class SchedulerParallelTaskRunner : public TaskRunner {
 | 
|    ~SchedulerParallelTaskRunner() override = default;
 | 
|  
 | 
|    const TaskTraits traits_;
 | 
| -  TaskTracker* const task_tracker_;
 | 
|    SchedulerTaskExecutor* const executor_;
 | 
| +  TaskTracker* const task_tracker_;
 | 
| +  DelayedTaskManager* const delayed_task_manager_;
 | 
|  
 | 
|    DISALLOW_COPY_AND_ASSIGN(SchedulerParallelTaskRunner);
 | 
|  };
 | 
| @@ -68,9 +74,13 @@ class SchedulerSequencedTaskRunner : public SequencedTaskRunner {
 | 
|    // long as |executor| is alive.
 | 
|    // TODO(robliao): Find a concrete way to manage |executor|'s memory.
 | 
|    SchedulerSequencedTaskRunner(const TaskTraits& traits,
 | 
| +                               SchedulerTaskExecutor* executor,
 | 
|                                 TaskTracker* task_tracker,
 | 
| -                               SchedulerTaskExecutor* executor)
 | 
| -      : traits_(traits), task_tracker_(task_tracker), executor_(executor) {}
 | 
| +                               DelayedTaskManager* delayed_task_manager)
 | 
| +      : traits_(traits),
 | 
| +        executor_(executor),
 | 
| +        task_tracker_(task_tracker),
 | 
| +        delayed_task_manager_(delayed_task_manager) {}
 | 
|  
 | 
|    // SequencedTaskRunner:
 | 
|    bool PostDelayedTask(const tracked_objects::Location& from_here,
 | 
| @@ -81,7 +91,7 @@ class SchedulerSequencedTaskRunner : public SequencedTaskRunner {
 | 
|          WrapUnique(
 | 
|              new Task(from_here, closure, traits_,
 | 
|                       delay.is_zero() ? TimeTicks() : TimeTicks::Now() + delay)),
 | 
| -        sequence_, executor_, task_tracker_);
 | 
| +        sequence_, executor_, task_tracker_, delayed_task_manager_);
 | 
|    }
 | 
|  
 | 
|    bool PostNonNestableDelayedTask(const tracked_objects::Location& from_here,
 | 
| @@ -102,8 +112,9 @@ class SchedulerSequencedTaskRunner : public SequencedTaskRunner {
 | 
|    const scoped_refptr<Sequence> sequence_ = new Sequence;
 | 
|  
 | 
|    const TaskTraits traits_;
 | 
| -  TaskTracker* const task_tracker_;
 | 
|    SchedulerTaskExecutor* const executor_;
 | 
| +  TaskTracker* const task_tracker_;
 | 
| +  DelayedTaskManager* const delayed_task_manager_;
 | 
|  
 | 
|    DISALLOW_COPY_AND_ASSIGN(SchedulerSequencedTaskRunner);
 | 
|  };
 | 
| @@ -141,9 +152,10 @@ std::unique_ptr<SchedulerThreadPool> SchedulerThreadPool::CreateThreadPool(
 | 
|      ThreadPriority thread_priority,
 | 
|      size_t max_threads,
 | 
|      const EnqueueSequenceCallback& enqueue_sequence_callback,
 | 
| -    TaskTracker* task_tracker) {
 | 
| -  std::unique_ptr<SchedulerThreadPool> thread_pool(
 | 
| -      new SchedulerThreadPool(enqueue_sequence_callback, task_tracker));
 | 
| +    TaskTracker* task_tracker,
 | 
| +    DelayedTaskManager* delayed_task_manager) {
 | 
| +  std::unique_ptr<SchedulerThreadPool> thread_pool(new SchedulerThreadPool(
 | 
| +      enqueue_sequence_callback, task_tracker, delayed_task_manager));
 | 
|    if (thread_pool->Initialize(thread_priority, max_threads))
 | 
|      return thread_pool;
 | 
|    return nullptr;
 | 
| @@ -154,12 +166,12 @@ scoped_refptr<TaskRunner> SchedulerThreadPool::CreateTaskRunnerWithTraits(
 | 
|      ExecutionMode execution_mode) {
 | 
|    switch (execution_mode) {
 | 
|      case ExecutionMode::PARALLEL:
 | 
| -      return make_scoped_refptr(
 | 
| -          new SchedulerParallelTaskRunner(traits, task_tracker_, this));
 | 
| +      return make_scoped_refptr(new SchedulerParallelTaskRunner(
 | 
| +          traits, this, task_tracker_, delayed_task_manager_));
 | 
|  
 | 
|      case ExecutionMode::SEQUENCED:
 | 
| -      return make_scoped_refptr(
 | 
| -          new SchedulerSequencedTaskRunner(traits, task_tracker_, this));
 | 
| +      return make_scoped_refptr(new SchedulerSequencedTaskRunner(
 | 
| +          traits, this, task_tracker_, delayed_task_manager_));
 | 
|  
 | 
|      case ExecutionMode::SINGLE_THREADED:
 | 
|        // TODO(fdoray): Support SINGLE_THREADED TaskRunners.
 | 
| @@ -268,7 +280,8 @@ void SchedulerThreadPool::SchedulerWorkerThreadDelegateImpl::EnqueueSequence(
 | 
|  
 | 
|  SchedulerThreadPool::SchedulerThreadPool(
 | 
|      const EnqueueSequenceCallback& enqueue_sequence_callback,
 | 
| -    TaskTracker* task_tracker)
 | 
| +    TaskTracker* task_tracker,
 | 
| +    DelayedTaskManager* delayed_task_manager)
 | 
|      : idle_worker_threads_stack_lock_(shared_priority_queue_.container_lock()),
 | 
|        idle_worker_threads_stack_cv_for_testing_(
 | 
|            idle_worker_threads_stack_lock_.CreateConditionVariable()),
 | 
| @@ -276,8 +289,10 @@ SchedulerThreadPool::SchedulerThreadPool(
 | 
|        worker_thread_delegate_(
 | 
|            new SchedulerWorkerThreadDelegateImpl(this,
 | 
|                                                  enqueue_sequence_callback)),
 | 
| -      task_tracker_(task_tracker) {
 | 
| +      task_tracker_(task_tracker),
 | 
| +      delayed_task_manager_(delayed_task_manager) {
 | 
|    DCHECK(task_tracker_);
 | 
| +  DCHECK(delayed_task_manager_);
 | 
|  }
 | 
|  
 | 
|  bool SchedulerThreadPool::Initialize(ThreadPriority thread_priority,
 | 
| 
 |