// Copyright 2012 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_BROWSER_SHUTDOWN_H_ #define CHROME_BROWSER_LIFETIME_BROWSER_SHUTDOWN_H_ #include <stdint.h> #include "base/auto_reset.h" #include "build/build_config.h" class PrefRegistrySimple; namespace browser_shutdown { #if !BUILDFLAG(IS_ANDROID) // The type of restart to perform during shutdown; see ShutdownPostThreadsStop. enum class RestartMode { … }; #endif // !BUILDFLAG(IS_ANDROID) // These values are persisted to logs. Entries should not be renumbered and // numeric values should never be reused. enum class ShutdownType { … }; void RegisterPrefs(PrefRegistrySimple* registry); // Called when the browser starts shutting down so that we can measure shutdown // time. void OnShutdownStarting(ShutdownType type); // Returns true if OnShutdownStarting has been called to note that shutdown has // started. // TODO (crbug/1155597): Make this work in sync with // BrowserProcessImpl::IsShuttingDown. bool HasShutdownStarted(); // Returns true if OnShutdownStarting has been called and unload handlers (e.g., // an in-progress download or a page's beforeunload handler) should be ignored. // This is true for kEndSession and kSilentExit shutdown types. bool ShouldIgnoreUnloadHandlers(); // Get the current shutdown type. ShutdownType GetShutdownType(); #if !BUILDFLAG(IS_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(); // Records the shutdown retrics. void RecordShutdownMetrics(); // Records the shutdown related prefs, and returns true if the browser should be // restarted on exit. bool RecordShutdownInfoPrefs(); // Performs the remaining shutdown tasks after all threads but the // main thread have been stopped. This includes deleting g_browser_process. void ShutdownPostThreadsStop(RestartMode restart_mode); #endif // 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(); // Allows setting a fake shutdown type for testing purposes. base::AutoReset<ShutdownType> SetShutdownTypeForTesting( ShutdownType shutdown_type); // Allows resetting the shutdown globals for testing purposes. void ResetShutdownGlobalsForTesting(); } // namespace browser_shutdown #endif // CHROME_BROWSER_LIFETIME_BROWSER_SHUTDOWN_H_