Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(46)

Side by Side Diff: gin/modules/timer.cc

Issue 120043008: Add a simple one shot and repeating timer API for Mojo.js. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 12 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
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 #include "gin/modules/timer.h"
6
7 #include "base/bind.h"
8 #include "gin/object_template_builder.h"
9 #include "gin/per_context_data.h"
10
11 namespace gin {
12
13 namespace {
14
15 v8::Handle<v8::String> GetHiddenPropertyName(v8::Isolate* isolate) {
16 return gin::StringToSymbol(isolate, "::mojo::js::Timer");
17 }
18
19 } // namespace
20
21 // Timer
22
23 gin::WrapperInfo Timer::kWrapperInfo = { gin::kEmbedderNativeGin };
24
25 // static
26 Handle<Timer> Timer::Create(TimerType type, v8::Isolate* isolate, int delay_ms,
27 v8::Handle<v8::Function> function) {
28 return CreateHandle(isolate, new Timer(isolate, type == TYPE_REPEATING,
29 delay_ms, function));
30 }
31
32 ObjectTemplateBuilder Timer::GetObjectTemplateBuilder(v8::Isolate* isolate) {
33 return Wrappable<Timer>::GetObjectTemplateBuilder(isolate)
34 .SetMethod("cancel", &Timer::Cancel)
35 .SetMethod("reset", &Timer::Reset);
36 }
37
38 void Timer::Cancel() {
39 timer_.Stop();
40 }
41
42 void Timer::Reset() {
43 timer_.Reset();
44 }
45
46 Timer::Timer(v8::Isolate* isolate, bool repeating, int delay_ms,
47 v8::Handle<v8::Function> function)
48 : weak_factory_(this),
49 timer_(false, repeating),
50 runner_(PerContextData::From(
51 isolate->GetCurrentContext())->runner()->GetWeakPtr()) {
52 GetWrapper(runner_->isolate())->SetHiddenValue(GetHiddenPropertyName(isolate),
53 function);
54 timer_.Start(FROM_HERE, base::TimeDelta::FromMilliseconds(delay_ms),
55 base::Bind(&Timer::OnTimerFired, weak_factory_.GetWeakPtr()));
56 }
57
58 Timer::~Timer() {
59 }
60
61 void Timer::OnTimerFired() {
62 LOG(ERROR) << "on timer fired";
63 Runner::Scope scope(runner_.get());
64 v8::Handle<v8::Function> function = v8::Handle<v8::Function>::Cast(
65 GetWrapper(runner_->isolate())->GetHiddenValue(
66 GetHiddenPropertyName(runner_->isolate())));
67 v8::Handle<v8::Value> argv[] = {};
68 runner_->Call(function, v8::Undefined(runner_->isolate()), 0, argv);
69 }
70
71
72 // TimerModule
73
74 WrapperInfo TimerModule::kWrapperInfo = { kEmbedderNativeGin };
75
76 // static
77 Handle<TimerModule> TimerModule::Create(v8::Isolate* isolate) {
78 return CreateHandle(isolate, new TimerModule());
79 }
80
81 // static
82 v8::Local<v8::Value> TimerModule::GetModule(v8::Isolate* isolate) {
83 return Create(isolate)->GetWrapper(isolate);
84 }
85
86 TimerModule::TimerModule() {
87 }
88
89 TimerModule::~TimerModule() {
90 }
91
92 ObjectTemplateBuilder TimerModule::GetObjectTemplateBuilder(
93 v8::Isolate* isolate) {
94 return Wrappable<TimerModule>::GetObjectTemplateBuilder(isolate)
95 .SetMethod("createOneShot",
96 base::Bind(&Timer::Create, Timer::TYPE_ONE_SHOT))
97 .SetMethod("createRepeating",
98 base::Bind(&Timer::Create, Timer::TYPE_REPEATING));
99 }
100
101 } // namespace gin
OLDNEW
« no previous file with comments | « gin/modules/timer.h ('k') | gin/modules/timer_unittest.cc » ('j') | gin/runner.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698