1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef CHROME_BROWSER_LIFETIME_APPLICATION_LIFETIME_H_ 6 #define CHROME_BROWSER_LIFETIME_APPLICATION_LIFETIME_H_ 7 8 #include "base/compiler_specific.h" 9 10 class Browser; 11 12 namespace chrome { 13 14 // Starts a user initiated exit process. Called from Browser::Exit. 15 // On platforms other than ChromeOS, this is equivalent to 16 // CloseAllBrowsers() On ChromeOS, this tells session manager 17 // that chrome is signing out, which lets session manager send 18 // SIGTERM to start actual exit process. 19 void AttemptUserExit(); 20 21 // Starts to collect shutdown traces. On ChromeOS this will start immediately 22 // on AttemptUserExit() and all other systems will start once all tabs are 23 // closed. 24 void StartShutdownTracing(); 25 26 // Starts a user initiated restart process. On platforms other than 27 // chromeos, this sets a restart bit in the preference so that 28 // chrome will be restarted at the end of shutdown process. On 29 // ChromeOS, this simply exits the chrome, which lets sesssion 30 // manager re-launch the browser with restore last session flag. 31 void AttemptRestart(); 32 33 #if defined(OS_WIN) 34 enum AshExecutionStatus { 35 ASH_KEEP_RUNNING, 36 ASH_TERMINATE, 37 }; 38 39 // Helper function to activate the desktop from Ash mode. The 40 // |ash_execution_status| parameter indicates if we should exit Ash after 41 // activating desktop. 42 void ActivateDesktopHelper(AshExecutionStatus ash_execution_status); 43 44 // Windows 8 specific: Like AttemptRestart but if chrome is running 45 // in desktop mode it starts in metro mode and vice-versa. The switching like 46 // the restarting is controlled by a preference. 47 void AttemptRestartWithModeSwitch(); 48 void AttemptRestartToDesktopMode(); 49 void AttemptRestartToMetroMode(); 50 #endif 51 52 // Attempt to exit by closing all browsers. This is equivalent to 53 // CloseAllBrowsers() on platforms where the application exits 54 // when no more windows are remaining. On other platforms (the Mac), 55 // this will additionally exit the application if all browsers are 56 // successfully closed. 57 // Note that he exit process may be interrupted by download or 58 // unload handler, and the browser may or may not exit. 59 void AttemptExit(); 60 61 #if defined(OS_CHROMEOS) 62 // Shutdown chrome cleanly without blocking. This is called 63 // when SIGTERM is received on Chrome OS, and always sets 64 // exit-cleanly bit and exits the browser, even if there is 65 // ongoing downloads or a page with onbeforeunload handler. 66 // 67 // If you need to exit or restart in your code on ChromeOS, 68 // use AttemptExit or AttemptRestart respectively. 69 void ExitCleanly(); 70 #endif 71 72 // Closes all browsers and if successful, quits. 73 void CloseAllBrowsersAndQuit(); 74 75 // Closes all browsers. If the session is ending the windows are closed 76 // directly. Otherwise the windows are closed by way of posting a WM_CLOSE 77 // message. This will quit the application if there is nothing other than 78 // browser windows keeping it alive or the application is quitting. 79 void CloseAllBrowsers(); 80 81 // Begins shutdown of the application when the desktop session is ending. 82 void SessionEnding(); 83 84 // Tells the BrowserList to keep the application alive after the last Browser 85 // closes. This is implemented as a count, so callers should pair their calls 86 // to IncrementKeepAliveCount() with matching calls to DecrementKeepAliveCount() 87 // when they no 88 // longer need to keep the application running. 89 void IncrementKeepAliveCount(); 90 91 // Stops keeping the application alive after the last Browser is closed. 92 // Should match a previous call to IncrementKeepAliveCount(). 93 void DecrementKeepAliveCount(); 94 95 // Returns true if application will continue running after the last Browser 96 // closes. 97 bool WillKeepAlive(); 98 99 // Emits APP_TERMINATING notification. It is guaranteed that the 100 // notification is sent only once. 101 void NotifyAppTerminating(); 102 103 // Send out notifications. 104 // For ChromeOS, also request session manager to end the session. 105 void NotifyAndTerminate(bool fast_path); 106 107 // Called once the application is exiting. 108 void OnAppExiting(); 109 110 // Called once the application is exiting to do any platform specific 111 // processing required. 112 void HandleAppExitingForPlatform(); 113 114 // Returns true if we can start the shutdown sequence for the browser, i.e. the 115 // last browser window is being closed. 116 bool ShouldStartShutdown(Browser* browser); 117 118 } // namespace chrome 119 120 #endif // CHROME_BROWSER_LIFETIME_APPLICATION_LIFETIME_H_ 121