Chromium Code Reviews| Index: chrome/browser/safe_browsing/delayed_callback_runner.h |
| diff --git a/chrome/browser/safe_browsing/delayed_callback_runner.h b/chrome/browser/safe_browsing/delayed_callback_runner.h |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..592ea58f5bd45613a8f6d38875b02c15ae3b1ed0 |
| --- /dev/null |
| +++ b/chrome/browser/safe_browsing/delayed_callback_runner.h |
| @@ -0,0 +1,59 @@ |
| +// 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. |
| + |
| +#ifndef CHROME_BROWSER_SAFE_BROWSING_DELAYED_CALLBACK_RUNNER_H_ |
| +#define CHROME_BROWSER_SAFE_BROWSING_DELAYED_CALLBACK_RUNNER_H_ |
| + |
| +#include <list> |
| + |
| +#include "base/callback_forward.h" |
| +#include "base/macros.h" |
| +#include "base/task_runner.h" |
| +#include "base/time/time.h" |
| +#include "base/timer/timer.h" |
| + |
| +namespace safe_browsing { |
| + |
| +// Runs callbacks on a given task runner, waiting a certain amount of time |
| +// between each. The delay also applies to running the first callback (i.e., |
| +// the first callback will be run some time after Start() is invoked. Callbacks |
| +// are deleted after they are run. Start() is idempotent: calling it while the |
| +// runner is doing it job has no effect. |
|
robertshield
2014/08/04 01:35:12
its
grt (UTC plus 2)
2014/08/04 14:15:33
Done.
|
| +class DelayedCallbackRunner { |
|
robertshield
2014/08/04 01:35:12
May be worth mentioning in the class comment that
grt (UTC plus 2)
2014/08/04 14:15:33
Added enforcement via ThreadChecker.
|
| + public: |
| + // Constructs an instance that runs tasks on |callback_runner|, waiting for |
| + // |delay| time to pass before and between each callback. |
| + DelayedCallbackRunner(base::TimeDelta delay, |
| + base::TaskRunner* task_runner); |
| + ~DelayedCallbackRunner(); |
| + |
| + // Registers |callback| with the runner. |
| + void RegisterCallback(const base::Closure& callback); |
|
robertshield
2014/08/04 01:35:12
Is it worth mentioning that a copy of the Closure
grt (UTC plus 2)
2014/08/04 14:15:33
it should be held only until it is run. comment an
|
| + |
| + // Starts running the callbacks after the delay. |
| + void Start(); |
| + |
| + private: |
| + typedef std::list<base::Closure> CallbackList; |
| + |
| + // A callback invoked by the timer to run the next callback. The timer is |
| + // restarted to process the next callback if there is one. |
| + void OnTimer(); |
| + |
| + base::TaskRunner* task_runner_; |
| + |
| + CallbackList callbacks_; |
| + |
| + // callbacks_.end() when no work is being done. Any other value otherwise. |
| + CallbackList::iterator next_callback_; |
| + |
| + // A timer upon the firing of which the next callback will be run. |
| + base::DelayTimer<DelayedCallbackRunner> timer_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(DelayedCallbackRunner); |
| +}; |
| + |
| +} // namespace safe_browsing |
| + |
| +#endif // CHROME_BROWSER_SAFE_BROWSING_DELAYED_CALLBACK_RUNNER_H_ |