1c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file.
4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifndef CHROME_BROWSER_BROWSER_SHUTDOWN_H__
6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define CHROME_BROWSER_BROWSER_SHUTDOWN_H__
73345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#pragma once
8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass PrefService;
10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace browser_shutdown {
12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Should Shutdown() delete the ResourceBundle? This is normally true, but set
14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// to false for in process unit tests.
15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochextern bool delete_resources_on_shutdown;
16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochenum ShutdownType {
18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // an uninitialized value
19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  NOT_VALID = 0,
20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // the last browser window was closed
21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  WINDOW_CLOSE,
22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // user clicked on the Exit menu item
23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  BROWSER_EXIT,
24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // windows is logging off or shutting down
25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  END_SESSION
26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch};
27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid RegisterPrefs(PrefService* local_state);
29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Called when the browser starts shutting down so that we can measure shutdown
31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// time.
32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid OnShutdownStarting(ShutdownType type);
33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Get the current shutdown type.
35c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochShutdownType GetShutdownType();
36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Invoked in two ways:
38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// . When the last browser has been deleted and the message loop has finished
39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch//   running.
40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// . When ChromeFrame::EndSession is invoked and we need to do cleanup.
41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch//   NOTE: in this case the message loop is still running, but will die soon
42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch//         after this returns.
43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid Shutdown();
44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Called at startup to create a histogram from our previous shutdown time.
46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid ReadLastShutdownInfo();
47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// There are various situations where the browser process should continue to
49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// run after the last browser window has closed - the Mac always continues
50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// running until the user explicitly quits, and on Windows/Linux the application
51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// should not shutdown when the last browser window closes if there are any
52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// BackgroundContents running.
53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// When the user explicitly chooses to shutdown the app (via the "Exit" or
54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// "Quit" menu items) BrowserList will call SetTryingToQuit() to tell itself to
55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// initiate a shutdown when the last window closes.
56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// If the quit is aborted, then the flag should be reset.
57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// This is a low-level mutator; in general, don't call SetTryingToQuit(true),
59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// except from appropriate places in BrowserList. To quit, use usual means,
60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// e.g., using |chrome_browser_application_mac::Terminate()| on the Mac, or
61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// |BrowserList::CloseAllWindowsAndExit()| on other platforms. To stop quitting,
62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// use |chrome_browser_application_mac::CancelTerminate()| on the Mac; other
63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// platforms can call SetTryingToQuit(false) directly.
64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid SetTryingToQuit(bool quitting);
65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// General accessor.
67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochbool IsTryingToQuit();
68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
693345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// This is true on X during an END_SESSION, when we can no longer depend
703345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// on the X server to be running. As a result we don't explicitly close the
713345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// browser windows, which can lead to conditions which would fail checks.
723345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickbool ShuttingDownWithoutClosingBrowsers();
733345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
74c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}  // namespace browser_shutdown
75c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // CHROME_BROWSER_BROWSER_SHUTDOWN_H__
77