| // Copyright 2013 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_CHROMEOS_EXTENSIONS_FILE_MANAGER_DESKTOP_NOTIFICATIONS_H_ |
| #define CHROME_BROWSER_CHROMEOS_EXTENSIONS_FILE_MANAGER_DESKTOP_NOTIFICATIONS_H_ |
| |
| #include <map> |
| #include <set> |
| #include <string> |
| |
| #include "base/basictypes.h" |
| #include "base/memory/weak_ptr.h" |
| #include "base/strings/string16.h" |
| #include "base/time/time.h" |
| |
| class Profile; |
| |
| namespace file_manager { |
| |
| // The class is used for showing desktop notifications about activities of |
| // Files.app, such as a new storage device getting detected. |
| // |
| // Note that updates for file transfers from/to Drive shown in the ash tray, |
| // hence not handled in this class. See ash/system/drive/tray_drive.h for |
| // details. |
| class DesktopNotifications |
| : public base::SupportsWeakPtr<DesktopNotifications> { |
| public: |
| // If changing the enum, please also update kNotificationTypes in .cc file. |
| enum NotificationType { |
| DEVICE, |
| DEVICE_FAIL, |
| DEVICE_EXTERNAL_STORAGE_DISABLED, |
| FORMAT_START, |
| FORMAT_START_FAIL, |
| FORMAT_SUCCESS, |
| FORMAT_FAIL, |
| }; |
| |
| explicit DesktopNotifications(Profile* profile); |
| virtual ~DesktopNotifications(); |
| |
| // Registers the removable device whose mount events will be handled in |
| // |ManageNotificationsOnMountComplete|. |
| void RegisterDevice(const std::string& system_path); |
| |
| // Unregisters the removable device whose mount events will be handled in |
| // |ManageNotificationsOnMountComplete|. |
| void UnregisterDevice(const std::string& system_path); |
| |
| void ManageNotificationsOnMountCompleted(const std::string& system_path, |
| const std::string& label, |
| bool is_parent, |
| bool success, |
| bool is_unsupported); |
| |
| // Primary method for showing a notification. |
| void ShowNotification(NotificationType type, const std::string& path); |
| void ShowNotificationDelayed(NotificationType type, |
| const std::string& path, |
| base::TimeDelta delay); |
| |
| // Primary method for hiding a notification. Virtual for mock in unittest. |
| virtual void HideNotification(NotificationType type, const std::string& path); |
| void HideNotificationDelayed(NotificationType type, |
| const std::string& path, |
| base::TimeDelta delay); |
| |
| size_t GetNotificationCountForTest() const { |
| return notification_map_.size(); |
| } |
| |
| bool HasNotificationForTest(const std::string& id) const { |
| return notification_map_.find(id) != notification_map_.end(); |
| } |
| |
| string16 GetNotificationMessageForTest(const std::string& id) const; |
| |
| private: |
| class NotificationMessage; |
| struct MountRequestsInfo; |
| |
| typedef std::map<std::string, MountRequestsInfo> MountRequestsMap; |
| typedef std::map<std::string, NotificationMessage*> NotificationMap; |
| |
| // Virtual for mock in unittest. |
| virtual void ShowNotificationWithMessage(NotificationType type, |
| const std::string& path, |
| const string16& message); |
| void ShowNotificationById(NotificationType type, |
| const std::string& notification_id, |
| const string16& message); |
| void HideNotificationById(const std::string& notification_id); |
| void RemoveNotificationById(const std::string& notification_id); |
| |
| NotificationMap notification_map_; |
| std::set<std::string> hidden_notifications_; |
| MountRequestsMap mount_requests_; |
| Profile* profile_; |
| |
| DISALLOW_COPY_AND_ASSIGN(DesktopNotifications); |
| }; |
| |
| } // namespace file_manager |
| |
| #endif // CHROME_BROWSER_CHROMEOS_EXTENSIONS_FILE_MANAGER_DESKTOP_NOTIFICATIONS_H_ |