// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef CHROME_BROWSER_BROWSER_SHUTDOWN_H_ #define CHROME_BROWSER_BROWSER_SHUTDOWN_H_ #include "build/build_config.h" class PrefRegistrySimple; namespace browser_shutdown { enum ShutdownType { // an uninitialized value NOT_VALID = 0, // the last browser window was closed WINDOW_CLOSE, // user clicked on the Exit menu item BROWSER_EXIT, // windows is logging off or shutting down END_SESSION }; void RegisterPrefs(PrefRegistrySimple* registry); // Called when the browser starts shutting down so that we can measure shutdown // time. void OnShutdownStarting(ShutdownType type); // Get the current shutdown type. ShutdownType GetShutdownType(); #if !defined(OS_ANDROID) // Performs the shutdown tasks that need to be done before // BrowserProcess and the various threads go away. // // Returns true if the session should be restarted. bool ShutdownPreThreadsStop(); // Performs the remaining shutdown tasks after all threads but the // main thread have been stopped. This includes deleting g_browser_process. // // The provided parameter indicates whether a preference to restart // the session was present. void ShutdownPostThreadsStop(bool restart_last_session); #endif // Called at startup to create a histogram from our previous shutdown time. void ReadLastShutdownInfo(); // There are various situations where the browser process should continue to // run after the last browser window has closed - the Mac always continues // running until the user explicitly quits, and on Windows/Linux the application // should not shutdown when the last browser window closes if there are any // BackgroundContents running. // When the user explicitly chooses to shutdown the app (via the "Exit" or // "Quit" menu items) BrowserList will call SetTryingToQuit() to tell itself to // initiate a shutdown when the last window closes. // If the quit is aborted, then the flag should be reset. // This is a low-level mutator; in general, don't call SetTryingToQuit(true), // except from appropriate places in BrowserList. To quit, use usual means, // e.g., using |chrome_browser_application_mac::Terminate()| on the Mac, or // |BrowserList::CloseAllWindowsAndExit()| on other platforms. To stop quitting, // use |chrome_browser_application_mac::CancelTerminate()| on the Mac; other // platforms can call SetTryingToQuit(false) directly. void SetTryingToQuit(bool quitting); // General accessor. bool IsTryingToQuit(); // Starts to collect shutdown traces. On ChromeOS this will start immediately // on AttemptUserExit() and all other systems will start once all tabs are // closed. void StartShutdownTracing(); } // namespace browser_shutdown #endif // CHROME_BROWSER_BROWSER_SHUTDOWN_H_