Home | History | Annotate | Download | only in lifetime
      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