1// Copyright (c) 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 PPAPI_CPP_EXTENSIONS_DEV_ALARMS_DEV_H_
6#define PPAPI_CPP_EXTENSIONS_DEV_ALARMS_DEV_H_
7
8#include <string>
9#include <vector>
10
11#include "ppapi/c/extensions/dev/ppb_ext_alarms_dev.h"
12#include "ppapi/cpp/extensions/dict_field.h"
13#include "ppapi/cpp/extensions/event_base.h"
14#include "ppapi/cpp/extensions/ext_output_traits.h"
15#include "ppapi/cpp/instance_handle.h"
16#include "ppapi/cpp/var.h"
17
18namespace pp {
19namespace ext {
20
21template <class T>
22class ExtCompletionCallbackWithOutput;
23
24template <class T>
25class Optional;
26
27namespace alarms {
28
29// Data types ------------------------------------------------------------------
30class Alarm_Dev {
31 public:
32  Alarm_Dev();
33  ~Alarm_Dev();
34
35  bool Populate(const PP_Ext_Alarms_Alarm_Dev& value);
36
37  Var CreateVar() const;
38
39  static const char* const kName;
40  static const char* const kScheduledTime;
41  static const char* const kPeriodInMinutes;
42
43  DictField<std::string> name;
44  DictField<double> scheduled_time;
45  OptionalDictField<double> period_in_minutes;
46};
47
48class AlarmCreateInfo_Dev {
49 public:
50  AlarmCreateInfo_Dev();
51  ~AlarmCreateInfo_Dev();
52
53  bool Populate(const PP_Ext_Alarms_AlarmCreateInfo_Dev& value);
54
55  Var CreateVar() const;
56
57  static const char* const kWhen;
58  static const char* const kDelayInMinutes;
59  static const char* const kPeriodInMinutes;
60
61  OptionalDictField<double> when;
62  OptionalDictField<double> delay_in_minutes;
63  OptionalDictField<double> period_in_minutes;
64};
65
66// Functions -------------------------------------------------------------------
67class Alarms_Dev {
68 public:
69  explicit Alarms_Dev(const InstanceHandle& instance);
70  ~Alarms_Dev();
71
72  void Create(const Optional<std::string>& name,
73              const AlarmCreateInfo_Dev& alarm_info);
74
75  typedef ExtCompletionCallbackWithOutput<Alarm_Dev> GetCallback;
76  int32_t Get(const Optional<std::string>& name, const GetCallback& callback);
77
78  typedef ExtCompletionCallbackWithOutput<std::vector<Alarm_Dev> >
79      GetAllCallback;
80  int32_t GetAll(const GetAllCallback& callback);
81
82  void Clear(const Optional<std::string>& name);
83
84  void ClearAll();
85
86 private:
87  InstanceHandle instance_;
88};
89
90// Events ----------------------------------------------------------------------
91// Please see ppapi/cpp/extensions/event_base.h for how to use an event class.
92
93class OnAlarmEvent_Dev
94    : public internal::EventBase1<PP_Ext_Alarms_OnAlarm_Dev, Alarm_Dev> {
95 public:
96  class Listener {
97   public:
98    virtual ~Listener() {}
99
100    virtual void OnAlarm(Alarm_Dev& alarm) = 0;
101  };
102
103  // |listener| is not owned by this instance and must outlive it.
104  OnAlarmEvent_Dev(const InstanceHandle& instance, Listener* listener);
105  virtual ~OnAlarmEvent_Dev();
106
107 private:
108  virtual void Callback(Alarm_Dev& alarm);
109
110  Listener* listener_;
111};
112
113}  // namespace alarms
114}  // namespace ext
115}  // namespace pp
116
117#endif  // PPAPI_CPP_EXTENSIONS_DEV_ALARMS_DEV_H_
118