1// Copyright (c) 2012 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 CHROME_BROWSER_EXTENSIONS_API_NOTIFICATIONS_NOTIFICATIONS_API_H_
6#define CHROME_BROWSER_EXTENSIONS_API_NOTIFICATIONS_NOTIFICATIONS_API_H_
7
8#include <string>
9
10#include "base/memory/ref_counted.h"
11#include "chrome/browser/extensions/chrome_extension_function.h"
12#include "chrome/common/extensions/api/notifications.h"
13#include "extensions/browser/extension_function.h"
14#include "ui/message_center/notification_types.h"
15
16class Notification;
17
18namespace extensions {
19
20class NotificationsApiFunction : public ChromeAsyncExtensionFunction {
21 public:
22  // Whether the current extension and channel allow the API. Public for
23  // testing.
24  bool IsNotificationsApiAvailable();
25
26 protected:
27  NotificationsApiFunction();
28  virtual ~NotificationsApiFunction();
29
30  bool CreateNotification(const std::string& id,
31                          api::notifications::NotificationOptions* options);
32  bool UpdateNotification(const std::string& id,
33                          api::notifications::NotificationOptions* options,
34                          Notification* notification);
35
36  bool IsNotificationsApiEnabled() const;
37
38  bool AreExtensionNotificationsAllowed() const;
39
40  // Returns true if the API function is still allowed to run even when the
41  // notifications for a notifier have been disabled.
42  virtual bool CanRunWhileDisabled() const;
43
44  // Called inside of RunAsync.
45  virtual bool RunNotificationsApi() = 0;
46
47  // UITHreadExtensionFunction:
48  virtual bool RunAsync() OVERRIDE;
49
50  message_center::NotificationType MapApiTemplateTypeToType(
51      api::notifications::TemplateType type);
52};
53
54class NotificationsCreateFunction : public NotificationsApiFunction {
55 public:
56  NotificationsCreateFunction();
57
58  // NotificationsApiFunction:
59  virtual bool RunNotificationsApi() OVERRIDE;
60
61 protected:
62  virtual ~NotificationsCreateFunction();
63
64 private:
65  scoped_ptr<api::notifications::Create::Params> params_;
66
67  DECLARE_EXTENSION_FUNCTION("notifications.create", NOTIFICATIONS_CREATE)
68};
69
70class NotificationsUpdateFunction : public NotificationsApiFunction {
71 public:
72  NotificationsUpdateFunction();
73
74  // NotificationsApiFunction:
75  virtual bool RunNotificationsApi() OVERRIDE;
76
77 protected:
78  virtual ~NotificationsUpdateFunction();
79
80 private:
81  scoped_ptr<api::notifications::Update::Params> params_;
82
83  DECLARE_EXTENSION_FUNCTION("notifications.update", NOTIFICATIONS_UPDATE)
84};
85
86class NotificationsClearFunction : public NotificationsApiFunction {
87 public:
88  NotificationsClearFunction();
89
90  // NotificationsApiFunction:
91  virtual bool RunNotificationsApi() OVERRIDE;
92
93 protected:
94  virtual ~NotificationsClearFunction();
95
96 private:
97  scoped_ptr<api::notifications::Clear::Params> params_;
98
99  DECLARE_EXTENSION_FUNCTION("notifications.clear", NOTIFICATIONS_CLEAR)
100};
101
102class NotificationsGetAllFunction : public NotificationsApiFunction {
103 public:
104  NotificationsGetAllFunction();
105
106  // NotificationsApiFunction:
107  virtual bool RunNotificationsApi() OVERRIDE;
108
109 protected:
110  virtual ~NotificationsGetAllFunction();
111
112 private:
113  DECLARE_EXTENSION_FUNCTION("notifications.getAll", NOTIFICATIONS_GET_ALL)
114};
115
116class NotificationsGetPermissionLevelFunction
117    : public NotificationsApiFunction {
118 public:
119  NotificationsGetPermissionLevelFunction();
120
121  // NotificationsApiFunction:
122  virtual bool CanRunWhileDisabled() const OVERRIDE;
123  virtual bool RunNotificationsApi() OVERRIDE;
124
125 protected:
126  virtual ~NotificationsGetPermissionLevelFunction();
127
128 private:
129  DECLARE_EXTENSION_FUNCTION("notifications.getPermissionLevel",
130                             NOTIFICATIONS_GET_ALL)
131};
132
133}  // namespace extensions
134
135#endif  // CHROME_BROWSER_EXTENSIONS_API_NOTIFICATIONS_NOTIFICATIONS_API_H_
136