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