• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
16 class Notification;
17 
18 namespace extensions {
19 
20 class 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 
54 class 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 
70 class 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 
86 class 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 
102 class 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 
116 class 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