| // Copyright 2020 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_ASH_CROSTINI_CROSTINI_UPGRADE_AVAILABLE_NOTIFICATION_H_ |
| #define CHROME_BROWSER_ASH_CROSTINI_CROSTINI_UPGRADE_AVAILABLE_NOTIFICATION_H_ |
| |
| #include <memory> |
| |
| #include "base/functional/callback_forward.h" |
| #include "base/memory/raw_ptr.h" |
| #include "base/memory/weak_ptr.h" |
| #include "ui/message_center/public/cpp/notification.h" |
| |
| class Profile; |
| |
| namespace crostini { |
| |
| extern const char kNotifierCrostiniUpgradeAvailable[]; |
| |
| // Reasons the notification may be closed. These are used in histograms so do |
| // not remove/reorder entries. Only add at the end just before kMaxValue. Also |
| // remember to update the enum listing in |
| // tools/metrics/histograms/histograms.xml. |
| enum class CrostiniUpgradeAvailableNotificationClosed { |
| // The notification was dismissed but not by the user (either automatically |
| // or because the device was unplugged). |
| kUnknown, |
| // The user closed the notification via the close box. |
| kByUser, |
| // The user clicked on the Upgrade button of the notification. |
| kUpgradeButton, |
| // The user clicked on the body of the notification. |
| kNotificationBody, |
| // Maximum value for the enum. |
| kMaxValue = kNotificationBody, |
| }; |
| |
| class CrostiniUpgradeAvailableNotification { |
| public: |
| explicit CrostiniUpgradeAvailableNotification(Profile* profile, |
| base::OnceClosure closure); |
| virtual ~CrostiniUpgradeAvailableNotification(); |
| |
| static std::unique_ptr<CrostiniUpgradeAvailableNotification> Show( |
| Profile* profile, |
| base::OnceClosure closure); |
| |
| void ForceRedisplay(); |
| void UpgradeDialogShown(); |
| |
| message_center::Notification* Get() { return notification_.get(); } |
| |
| private: |
| raw_ptr<Profile> profile_; // Not owned. |
| std::unique_ptr<message_center::Notification> notification_; |
| base::WeakPtrFactory<CrostiniUpgradeAvailableNotification> weak_ptr_factory_{ |
| this}; |
| }; |
| |
| } // namespace crostini |
| |
| #endif // CHROME_BROWSER_ASH_CROSTINI_CROSTINI_UPGRADE_AVAILABLE_NOTIFICATION_H_ |