1a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 2a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// found in the LICENSE file. 4a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 5a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "base/timer/mock_timer.h" 6a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 7a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)namespace base { 8a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 9a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)MockTimer::MockTimer(bool retain_user_task, bool is_repeating) 10a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) : Timer(retain_user_task, is_repeating), 11a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) is_running_(false) { 12a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 13a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 14a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)MockTimer::MockTimer(const tracked_objects::Location& posted_from, 15a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) TimeDelta delay, 16a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const base::Closure& user_task, 17a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) bool is_repeating) 18a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) : Timer(true, is_repeating), 19a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) delay_(delay), 20a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) is_running_(false) { 21a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 22a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 23a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)MockTimer::~MockTimer() { 24a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 25a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 26a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)bool MockTimer::IsRunning() const { 27a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return is_running_; 28a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 29a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 30a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)base::TimeDelta MockTimer::GetCurrentDelay() const { 31a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) return delay_; 32a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 33a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 34a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void MockTimer::Start(const tracked_objects::Location& posted_from, 35a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) TimeDelta delay, 36a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) const base::Closure& user_task) { 37a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) delay_ = delay; 38a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) user_task_ = user_task; 39a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) Reset(); 40a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 41a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 42a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void MockTimer::Stop() { 43a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) is_running_ = false; 44a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (!retain_user_task()) 45a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) user_task_.Reset(); 46a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 47a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 48a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void MockTimer::Reset() { 49a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) DCHECK(!user_task_.is_null()); 50a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) is_running_ = true; 51a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 52a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 53a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void MockTimer::Fire() { 54a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) DCHECK(is_running_); 55a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) base::Closure old_task = user_task_; 56a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) if (is_repeating()) 57a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) Reset(); 58a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) else 59a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) Stop(); 60a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) old_task.Run(); 61a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 62a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 63a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} // namespace base 64