File: browser_shutdown.h

package info (click to toggle)
chromium 138.0.7204.157-1
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 6,071,864 kB
  • sloc: cpp: 34,936,859; ansic: 7,176,967; javascript: 4,110,704; python: 1,419,953; asm: 946,768; xml: 739,967; pascal: 187,324; sh: 89,623; perl: 88,663; objc: 79,944; sql: 50,304; cs: 41,786; fortran: 24,137; makefile: 21,806; php: 13,980; tcl: 13,166; yacc: 8,925; ruby: 7,485; awk: 3,720; lisp: 3,096; lex: 1,327; ada: 727; jsp: 228; sed: 36
file content (133 lines) | stat: -rw-r--r-- 4,944 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
// 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 {
  // Do not restart the browser.
  kNoRestart,

  // Restart the browser. This is typically used in conjunction with the
  // prefs::kWasRestarted Local State preference to restore the user's browsing
  // session. Regardless of whether or not prefs::kWasRestarted is used,
  // single-use switches (e.g., --app) and any URLs are stripped from the
  // command line.
  kRestartLastSession,

  // Restart the browser into the background. The browser will appear in the
  // system tray without opening any browser windows. This has no effect if
  // |RESTART| is not also set.
  kRestartInBackground,

  // Restart the browser using the original command line. This is useful in
  // cases where startup was interrupted and will continue in the new process.
  // Restart loops are prevented by adding switches::kRelaunched to the command
  // line of the new process.
  kRestartThisSession,
};

#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 {
  // An uninitialized value.
  kNotValid = 0,
  // The last browser window was closed.
  kWindowClose = 1,
  // The user clicked on the Exit menu item.
  kBrowserExit = 2,
  // User logoff or system shutdown.
  kEndSession = 3,
  // Exit without onbeforeunload or in-progress download prompts.
  kSilentExit = 4,
  // The browser process is exiting but not by a user action. These exit paths
  // can happen with early exit paths where the browser main is not executed.
  kOtherExit = 5,
  kMaxValue = kOtherExit
};

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_