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 // This is equivalent to AttemptUserExit, except that it always set 63 // exit cleanly bit. ChromeOS checks if it can exit without user 64 // interactions, so it will always exit the browser. This is used to 65 // handle SIGTERM on chromeos which is a signal to force shutdown 66 // the chrome. 67 void ExitCleanly(); 68 #endif 69 70 // Closes all browsers and if successful, quits. 71 void CloseAllBrowsersAndQuit(); 72 73 // Closes all browsers. If the session is ending the windows are closed 74 // directly. Otherwise the windows are closed by way of posting a WM_CLOSE 75 // message. This will quit the application if there is nothing other than 76 // browser windows keeping it alive or the application is quitting. 77 void CloseAllBrowsers(); 78 79 // Begins shutdown of the application when the desktop session is ending. 80 void SessionEnding(); 81 82 // Tells the BrowserList to keep the application alive after the last Browser 83 // closes. This is implemented as a count, so callers should pair their calls 84 // to StartKeepAlive() with matching calls to EndKeepAlive() when they no 85 // longer need to keep the application running. 86 void StartKeepAlive(); 87 88 // Stops keeping the application alive after the last Browser is closed. 89 // Should match a previous call to StartKeepAlive(). 90 void EndKeepAlive(); 91 92 // Returns true if application will continue running after the last Browser 93 // closes. 94 bool WillKeepAlive(); 95 96 // Emits APP_TERMINATING notification. It is guaranteed that the 97 // notification is sent only once. 98 void NotifyAppTerminating(); 99 100 // Send out notifications. 101 // For ChromeOS, also request session manager to end the session. 102 void NotifyAndTerminate(bool fast_path); 103 104 // Called once the application is exiting. 105 void OnAppExiting(); 106 107 // Called once the application is exiting to do any platform specific 108 // processing required. 109 void HandleAppExitingForPlatform(); 110 111 // Returns true if we can start the shutdown sequence for the browser, i.e. the 112 // last browser window is being closed. 113 bool ShouldStartShutdown(Browser* browser); 114 115 } // namespace chrome 116 117 #endif // CHROME_BROWSER_LIFETIME_APPLICATION_LIFETIME_H_ 118