timer.h revision 1320f92c476a1ad9d19dba2a48c72b75566198e9
1// Copyright 2013 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef GIN_MODULES_TIMER_H_
6#define GIN_MODULES_TIMER_H_
7
8#include "base/memory/weak_ptr.h"
9#include "base/timer/timer.h"
10#include "gin/gin_export.h"
11#include "gin/handle.h"
12#include "gin/runner.h"
13#include "gin/wrappable.h"
14#include "v8/include/v8.h"
15
16namespace gin {
17
18class ObjectTemplateBuilder;
19
20// A simple scriptable timer that can work in one-shot or repeating mode.
21class GIN_EXPORT Timer : public Wrappable<Timer> {
22 public:
23  enum TimerType {
24    TYPE_ONE_SHOT,
25    TYPE_REPEATING
26  };
27
28  static WrapperInfo kWrapperInfo;
29  static Handle<Timer> Create(TimerType type, v8::Isolate* isolate,
30                              int delay_ms, v8::Handle<v8::Function> function);
31
32  virtual ObjectTemplateBuilder GetObjectTemplateBuilder(
33      v8::Isolate* isolate) OVERRIDE;
34
35 private:
36  Timer(v8::Isolate* isolate, bool repeating, int delay_ms,
37        v8::Handle<v8::Function> function);
38  virtual ~Timer();
39  void OnTimerFired();
40
41  base::Timer timer_;
42  base::WeakPtr<gin::Runner> runner_;
43  base::WeakPtrFactory<Timer> weak_factory_;
44
45  DISALLOW_COPY_AND_ASSIGN(Timer);
46};
47
48
49class GIN_EXPORT TimerModule : public Wrappable<TimerModule> {
50 public:
51  static const char kName[];
52  static WrapperInfo kWrapperInfo;
53  static Handle<TimerModule> Create(v8::Isolate* isolate);
54  static v8::Local<v8::Value> GetModule(v8::Isolate* isolate);
55
56 private:
57  TimerModule();
58  virtual ~TimerModule();
59
60  virtual ObjectTemplateBuilder GetObjectTemplateBuilder(
61      v8::Isolate* isolate) OVERRIDE;
62};
63
64}  // namespace gin
65
66#endif  // GIN_MODULES_TIMER_H_
67