| // Copyright 2014 The Chromium Authors. All rights reserved. | 
 | // Use of this source code is governed by a BSD-style license that can be | 
 | // found in the LICENSE file. | 
 |  | 
 | #include "base/timer/mock_timer.h" | 
 |  | 
 | namespace base { | 
 |  | 
 | MockTimer::MockTimer(bool retain_user_task, bool is_repeating) | 
 |     : Timer(retain_user_task, is_repeating), | 
 |       is_running_(false) { | 
 | } | 
 |  | 
 | MockTimer::MockTimer(const tracked_objects::Location& posted_from, | 
 |                      TimeDelta delay, | 
 |                      const base::Closure& user_task, | 
 |                      bool is_repeating) | 
 |     : Timer(true, is_repeating), | 
 |       delay_(delay), | 
 |       is_running_(false) { | 
 | } | 
 |  | 
 | MockTimer::~MockTimer() { | 
 | } | 
 |  | 
 | bool MockTimer::IsRunning() const { | 
 |   return is_running_; | 
 | } | 
 |  | 
 | base::TimeDelta MockTimer::GetCurrentDelay() const { | 
 |   return delay_; | 
 | } | 
 |  | 
 | void MockTimer::Start(const tracked_objects::Location& posted_from, | 
 |                       TimeDelta delay, | 
 |                       const base::Closure& user_task) { | 
 |   delay_ = delay; | 
 |   user_task_ = user_task; | 
 |   Reset(); | 
 | } | 
 |  | 
 | void MockTimer::Stop() { | 
 |   is_running_ = false; | 
 |   if (!retain_user_task()) | 
 |     user_task_.Reset(); | 
 | } | 
 |  | 
 | void MockTimer::Reset() { | 
 |   DCHECK(!user_task_.is_null()); | 
 |   is_running_ = true; | 
 | } | 
 |  | 
 | void MockTimer::Fire() { | 
 |   DCHECK(is_running_); | 
 |   base::Closure old_task = user_task_; | 
 |   if (is_repeating()) | 
 |     Reset(); | 
 |   else | 
 |     Stop(); | 
 |   old_task.Run(); | 
 | } | 
 |  | 
 | }  // namespace base |