| // Copyright 2022 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_LIFETIME_APPLICATION_LIFETIME_DESKTOP_H_ | 
 | #define CHROME_BROWSER_LIFETIME_APPLICATION_LIFETIME_DESKTOP_H_ | 
 |  | 
 | #include "base/callback_list.h" | 
 | #include "base/functional/callback.h" | 
 |  | 
 | static_assert(!BUILDFLAG(IS_ANDROID), "For non-Android Chrome only"); | 
 |  | 
 | namespace chrome { | 
 |  | 
 | // Starts an administrator-initiated relaunch process. On platforms other than | 
 | // Chrome OS, this relaunches the browser and restores the user's session. On | 
 | // Chrome OS, this restarts the entire OS. This differs from AttemptRelaunch in | 
 | // that all user prompts (e.g., beforeunload handlers and confirmation to abort | 
 | // in-progress downloads) are bypassed. | 
 | void RelaunchIgnoreUnloadHandlers(); | 
 |  | 
 | // Closes all browsers and if successful, quits. | 
 | void CloseAllBrowsersAndQuit(); | 
 |  | 
 | // Closes all browsers. If the session is ending the windows are closed | 
 | // directly. Otherwise the windows are closed by way of posting a WM_CLOSE | 
 | // message. This will quit the application if there is nothing other than | 
 | // browser windows keeping it alive or the application is quitting. | 
 | void CloseAllBrowsers(); | 
 |  | 
 | // If there are no browsers open and we aren't already shutting down, | 
 | // initiate a shutdown. | 
 | void ShutdownIfNeeded(); | 
 |  | 
 | // Begins shutdown of the application when the desktop session is ending. | 
 | void SessionEnding(); | 
 |  | 
 | // Called once the application is exiting. | 
 | void OnAppExiting(); | 
 |  | 
 | // Called once the application is exiting to do any platform specific | 
 | // processing required. | 
 | void HandleAppExitingForPlatform(); | 
 |  | 
 | // Called when the process of closing all browsers starts or is cancelled. | 
 | void OnClosingAllBrowsers(bool closing); | 
 |  | 
 | // Registers a callback that will be invoked with true when all browsers start | 
 | // closing, and false if and when that process is cancelled. | 
 | base::CallbackListSubscription AddClosingAllBrowsersCallback( | 
 |     base::RepeatingCallback<void(bool)> closing_all_browsers_callback); | 
 |  | 
 | // Sets the exit type to `ExitType::kClean` for all browser profiles. | 
 | void MarkAsCleanShutdown(); | 
 |  | 
 | // Returns true if all browsers can be closed without user interaction. | 
 | // This currently checks if there is pending download, or if it needs to | 
 | // handle unload handler. | 
 | bool AreAllBrowsersCloseable(); | 
 |  | 
 | }  // namespace chrome | 
 |  | 
 | #endif  // CHROME_BROWSER_LIFETIME_APPLICATION_LIFETIME_DESKTOP_H_ |