| // Copyright 2017 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef CHROME_BROWSER_NOTIFICATIONS_NOTIFICATION_PLATFORM_BRIDGE_CHROMEOS_H_ |
| #define CHROME_BROWSER_NOTIFICATIONS_NOTIFICATION_PLATFORM_BRIDGE_CHROMEOS_H_ |
| |
| #include <map> |
| #include <memory> |
| #include <string> |
| |
| #include "base/memory/weak_ptr.h" |
| #include "chrome/browser/notifications/notification_platform_bridge.h" |
| #include "chrome/browser/notifications/notification_platform_bridge_delegate.h" |
| #include "chrome/browser/notifications/profile_notification.h" |
| |
| // A platform bridge that uses Ash's message center to display notifications. |
| // Forwards requests to a helper implementation class, which either makes |
| // in-process C++ calls (pre-lacros) or mojo calls (post-lacros). |
| class NotificationPlatformBridgeChromeOs |
| : public NotificationPlatformBridge, |
| public NotificationPlatformBridgeDelegate { |
| public: |
| NotificationPlatformBridgeChromeOs(); |
| NotificationPlatformBridgeChromeOs( |
| const NotificationPlatformBridgeChromeOs&) = delete; |
| NotificationPlatformBridgeChromeOs& operator=( |
| const NotificationPlatformBridgeChromeOs&) = delete; |
| ~NotificationPlatformBridgeChromeOs() override; |
| |
| // NotificationPlatformBridge: |
| void Display(NotificationHandler::Type notification_type, |
| Profile* profile, |
| const message_center::Notification& notification, |
| std::unique_ptr<NotificationCommon::Metadata> metadata) override; |
| void Close(Profile* profile, const std::string& notification_id) override; |
| void GetDisplayed(Profile* profile, |
| GetDisplayedNotificationsCallback callback) const override; |
| void GetDisplayedForOrigin( |
| Profile* profile, |
| const GURL& origin, |
| GetDisplayedNotificationsCallback callback) const override; |
| void SetReadyCallback(NotificationBridgeReadyCallback callback) override; |
| void DisplayServiceShutDown(Profile* profile) override; |
| |
| // NotificationPlatformBridgeDelegate: |
| void HandleNotificationClosed(const std::string& id, bool by_user) override; |
| void HandleNotificationClicked(const std::string& id) override; |
| void HandleNotificationButtonClicked( |
| const std::string& id, |
| int button_index, |
| const std::optional<std::u16string>& reply) override; |
| void HandleNotificationSettingsButtonClicked(const std::string& id) override; |
| void DisableNotification(const std::string& id) override; |
| |
| private: |
| // Gets the ProfileNotification for the given identifier which has been |
| // mutated to uniquely identify the profile. This may return null if the |
| // notification has already been closed due to profile shutdown. Ash may |
| // asynchronously inform |this| of actions on notifications after their |
| // associated profile has already been destroyed. |
| ProfileNotification* GetProfileNotification( |
| const std::string& profile_notification_id); |
| |
| // Callback after getting displayed notifications from the |impl_| to convert |
| // profile IDs back to the original notification IDs. |
| void OnGetDisplayed(GetDisplayedNotificationsCallback callback, |
| std::set<std::string> notification_ids, |
| bool supports_synchronization) const; |
| |
| // Helper implementation. |
| std::unique_ptr<NotificationPlatformBridge> impl_; |
| |
| // A container for all active notifications, where IDs are permuted to |
| // uniquely identify both the notification and its source profile. The key is |
| // the permuted ID. |
| std::map<std::string, std::unique_ptr<ProfileNotification>> |
| active_notifications_; |
| |
| base::WeakPtrFactory<NotificationPlatformBridgeChromeOs> weak_ptr_factory_{ |
| this}; |
| }; |
| |
| #endif // CHROME_BROWSER_NOTIFICATIONS_NOTIFICATION_PLATFORM_BRIDGE_CHROMEOS_H_ |