// Copyright 2018 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_UI_VIEWS_RELAUNCH_NOTIFICATION_RELAUNCH_NOTIFICATION_CONTROLLER_H_ #define CHROME_BROWSER_UI_VIEWS_RELAUNCH_NOTIFICATION_RELAUNCH_NOTIFICATION_CONTROLLER_H_ #include "base/functional/callback_forward.h" #include "base/memory/raw_ptr.h" #include "base/time/time.h" #include "base/timer/wall_clock_timer.h" #include "build/chromeos_buildflags.h" #include "chrome/browser/upgrade_detector/upgrade_detector.h" #include "chrome/browser/upgrade_detector/upgrade_observer.h" #include "components/prefs/pref_change_registrar.h" #if BUILDFLAG(IS_CHROMEOS_ASH) #include "chrome/browser/ui/views/relaunch_notification/relaunch_notification_controller_platform_impl_chromeos.h" #else #include "chrome/browser/ui/views/relaunch_notification/relaunch_notification_controller_platform_impl_desktop.h" #endif // BUILDFLAG(IS_CHROMEOS_ASH) namespace base { class Clock; class TickClock; } // A class that observes changes to the browser.relaunch_notification // preference (which is backed by the RelaunchNotification policy // setting) and upgrade notifications from the UpgradeDetector. The two // values for the RelaunchNotification policy setting are handled as follows: // // On Chrome desktop: // - Recommended (1): The controller displays the relaunch recommended bubble on // each change to the UpgradeDetector's upgrade_notification_stage (an // "annoyance level" of low, elevated, grace or high). Once the high annoyance // level is reached, the controller continually reshows a the bubble on a // timer with a period equal to the time delta between the "elevated" and // "high" showings. // // - Required (2): The controller displays the relaunch required dialog when the // UpgradeDetector's upgrade_notification_stage changes to an "annoyance level" // of low, elevated, and grace. The browser is relaunched when the "annoyance // level" reaches "high". // // On Chrome OS both notifications (recommended and required, described above) // are shown in the unified system tray, overwriting the default "update // available" notification. It cannot be deferred, so it persists until reboot. // In certain conditions, the preference value could be overridden by the // UpgradeDetector which then takes priority over the original value and any // further changes to the preference have no effect. class RelaunchNotificationController : public UpgradeObserver { … }; #endif // CHROME_BROWSER_UI_VIEWS_RELAUNCH_NOTIFICATION_RELAUNCH_NOTIFICATION_CONTROLLER_H_