// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef CHROME_BROWSER_EXTENSIONS_API_NOTIFICATIONS_NOTIFICATIONS_API_H_ #define CHROME_BROWSER_EXTENSIONS_API_NOTIFICATIONS_NOTIFICATIONS_API_H_ #include <string> #include "base/memory/ref_counted.h" #include "chrome/browser/extensions/chrome_extension_function.h" #include "chrome/common/extensions/api/notifications.h" #include "extensions/browser/extension_function.h" #include "ui/message_center/notification_types.h" class Notification; namespace extensions { class NotificationsApiFunction : public ChromeAsyncExtensionFunction { public: // Whether the current extension and channel allow the API. Public for // testing. bool IsNotificationsApiAvailable(); protected: NotificationsApiFunction(); ~NotificationsApiFunction() override; bool CreateNotification(const std::string& id, api::notifications::NotificationOptions* options); bool UpdateNotification(const std::string& id, api::notifications::NotificationOptions* options, Notification* notification); bool IsNotificationsApiEnabled() const; bool AreExtensionNotificationsAllowed() const; // Returns true if the API function is still allowed to run even when the // notifications for a notifier have been disabled. virtual bool CanRunWhileDisabled() const; // Called inside of RunAsync. virtual bool RunNotificationsApi() = 0; // UITHreadExtensionFunction: bool RunAsync() override; message_center::NotificationType MapApiTemplateTypeToType( api::notifications::TemplateType type); }; class NotificationsCreateFunction : public NotificationsApiFunction { public: NotificationsCreateFunction(); // NotificationsApiFunction: bool RunNotificationsApi() override; protected: ~NotificationsCreateFunction() override; private: scoped_ptr<api::notifications::Create::Params> params_; DECLARE_EXTENSION_FUNCTION("notifications.create", NOTIFICATIONS_CREATE) }; class NotificationsUpdateFunction : public NotificationsApiFunction { public: NotificationsUpdateFunction(); // NotificationsApiFunction: bool RunNotificationsApi() override; protected: ~NotificationsUpdateFunction() override; private: scoped_ptr<api::notifications::Update::Params> params_; DECLARE_EXTENSION_FUNCTION("notifications.update", NOTIFICATIONS_UPDATE) }; class NotificationsClearFunction : public NotificationsApiFunction { public: NotificationsClearFunction(); // NotificationsApiFunction: bool RunNotificationsApi() override; protected: ~NotificationsClearFunction() override; private: scoped_ptr<api::notifications::Clear::Params> params_; DECLARE_EXTENSION_FUNCTION("notifications.clear", NOTIFICATIONS_CLEAR) }; class NotificationsGetAllFunction : public NotificationsApiFunction { public: NotificationsGetAllFunction(); // NotificationsApiFunction: bool RunNotificationsApi() override; protected: ~NotificationsGetAllFunction() override; private: DECLARE_EXTENSION_FUNCTION("notifications.getAll", NOTIFICATIONS_GET_ALL) }; class NotificationsGetPermissionLevelFunction : public NotificationsApiFunction { public: NotificationsGetPermissionLevelFunction(); // NotificationsApiFunction: bool CanRunWhileDisabled() const override; bool RunNotificationsApi() override; protected: ~NotificationsGetPermissionLevelFunction() override; private: DECLARE_EXTENSION_FUNCTION("notifications.getPermissionLevel", NOTIFICATIONS_GET_ALL) }; } // namespace extensions #endif // CHROME_BROWSER_EXTENSIONS_API_NOTIFICATIONS_NOTIFICATIONS_API_H_