Chromium Code Reviews| Index: chrome/browser/extensions/api/notifications/extension_notification_display_helper.h |
| diff --git a/chrome/browser/extensions/api/notifications/extension_notification_display_helper.h b/chrome/browser/extensions/api/notifications/extension_notification_display_helper.h |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..dc04cc0f9429001ed4157607df0e272186dbe8d3 |
| --- /dev/null |
| +++ b/chrome/browser/extensions/api/notifications/extension_notification_display_helper.h |
| @@ -0,0 +1,75 @@ |
| +// Copyright 2017 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_EXTENSION_NOTIFICATION_DISPLAY_HELPER_H_ |
| +#define CHROME_BROWSER_EXTENSIONS_API_NOTIFICATIONS_EXTENSION_NOTIFICATION_DISPLAY_HELPER_H_ |
| + |
| +#include <memory> |
| +#include <set> |
| +#include <string> |
| +#include <unordered_map> |
| +#include <vector> |
| + |
| +#include "base/macros.h" |
| +#include "chrome/browser/notifications/notification.h" |
| +#include "components/keyed_service/core/keyed_service.h" |
| + |
| +class GURL; |
| +class Notification; |
| +class NotificationDisplayService; |
| +class Profile; |
| + |
| +namespace extensions { |
| + |
| +// Helper class for displaying notifications through the notification display |
| +// service. The NDS supports notifications that can outlive the browser process, |
| +// and therefore does not retain as much information as is necessary to support |
| +// the extensions API. (Notably the ability to partly update notifications.) |
| +class ExtensionNotificationDisplayHelper : public KeyedService { |
| + public: |
| + using NotificationVector = std::vector<std::unique_ptr<Notification>>; |
| + |
| + explicit ExtensionNotificationDisplayHelper(Profile* profile); |
| + ~ExtensionNotificationDisplayHelper() override; |
| + |
| + // Displays the |notification| using the notification display service. |
| + void Display(const Notification& notification); |
| + |
| + // Returns the notification identified by |notification_id| if it is currently |
| + // visible. May return a nullptr. |
| + const Notification* GetByNotificationId(const std::string& notification_id); |
| + |
| + // Returns a set with the IDs of all notifications that are currently being |
| + // shown on behalf of the |extension_origin|. |
| + std::set<std::string> GetNotificationIdsForExtension( |
| + const GURL& extension_origin) const; |
| + |
| + // Returns a reference to the vector holding all live notifications for |
| + // extensions. Should only be used for testing purposes. |
| + const NotificationVector& GetNotificationsForTests() const; |
|
Miguel Garcia
2017/02/21 10:56:43
It seems that all the tests in in the apitest coul
Peter Beverloo
2017/02/21 17:23:50
Good idea! Done.
|
| + |
| + // Removes stored state for the notification identified by |notification_id|. |
| + // Returns whether there was local state. |
| + bool EraseDataForNotificationId(const std::string& notification_id); |
| + |
| + // Closes the notification identified by |notification_id|. Returns whether a |
| + // notification was closed in response to the call. |
| + bool Close(const std::string& notification_id); |
| + |
| + private: |
| + // Returns the notification display service instance to communicate with. |
| + NotificationDisplayService* GetDisplayService(); |
| + |
| + // The Profile instance that owns this keyed service. |
| + Profile* profile_; |
| + |
| + // Vector of notifications that are being shown for extensions. |
| + NotificationVector notifications_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(ExtensionNotificationDisplayHelper); |
| +}; |
| + |
| +} // namespace extensions |
| + |
| +#endif // CHROME_BROWSER_EXTENSIONS_API_NOTIFICATIONS_EXTENSION_NOTIFICATION_DISPLAY_HELPER_H_ |