blob: 02e54bc2fe4ef433fb9d019d646fb654d8b008be [file] [log] [blame]
// Copyright 2020 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_PROFILES_KEEP_ALIVE_PROFILE_KEEP_ALIVE_TYPES_H_
#define CHROME_BROWSER_PROFILES_KEEP_ALIVE_PROFILE_KEEP_ALIVE_TYPES_H_
#include <ostream>
#include "build/build_config.h"
// Refers to what a ScopedProfileKeepAlive's lifetime is tied to, to help
// debugging.
//
// These values are persisted to logs. Entries should not be renumbered and
// numeric values should never be reused.
//
// Keep this in sync with ProfileKeepAliveOrigin in enums.xml.
enum class ProfileKeepAliveOrigin {
// When a Profile gets created by ProfileManager, it initially has this type
// of keep-alive. This ensures that the Profile has a refcount >=1, at least
// until RemoveKeepAlive() gets called.
//
// When a kBrowserWindow keep-alive gets added, this one gets removed.
kWaitingForFirstBrowserWindow = 0,
// This Profile has browser windows open.
kBrowserWindow = 1,
// This Profile is running extensions with persistent background scripts.
kBackgroundMode = 2,
// A child off-the-record profile holds a strong reference to its parent.
kOffTheRecordProfile = 3,
// This Profile is downloading a file.
kDownloadInProgress = 4,
// On macOS, Chrome doesn't exit when all windows are closed. Keep one Profile
// alive so we can open windows for the last-used Profile when the user
// "launches" Chrome again.
//
// DEPRECATED: Not currently in use, but left here for consistency with
// enums.xml.
// kAppControllerMac = 5,
// In the middle of clearing browsing data, e.g. when the user deletes it via
// the Profile menu, or during ephemeral profile teardown.
kClearingBrowsingData = 6,
// An app (Chrome app, web app, etc.) has a window open.
kAppWindow = 7,
// Background sync in progress.
kBackgroundSync = 8,
// A notification is active in the system tray.
kNotification = 9,
// The user just clicked on a notification. This might cause e.g. a new
// browser window to open, so wait for the event to finish processing.
kPendingNotificationClickEvent = 10,
// There's a visible Push Notification from a Service Worker.
kInFlightPushMessage = 11,
// Session restore in progress.
kSessionRestore = 12,
// Views wants to keep the BrowserProcess (and Profile) alive, e.g. because
// a dropdown menu is active.
kChromeViewsDelegate = 13,
// A DevTools window is open.
kDevToolsWindow = 14,
// A web app permission dialog window is open.
kWebAppPermissionDialogWindow = 15,
// Data for Clear on Exit is being deleted.
kSessionDataDeleter = 16,
// DEPRECATED: kWebAppProtocolHandlerLaunch = 17,
// An extension is being updated.
kExtensionUpdater = 18,
// This profile is being created (and is used to render GAIA sign-in flow).
kProfileCreationFlow = 19,
// The user just closed a notification. This might cause writing to the
// profile's NotificationDatabase, so wait for the event to finish processing.
kPendingNotificationCloseEvent = 20,
// The "Send Feedback" WebUI dialog is visible. Because it renders with WebUI,
// this dialog holds a RenderProcessHost. Closing the Profile before the RPH
// goes away would cause all sorts of problems...
kFeedbackDialog = 21,
// A web app is being updated.
kWebAppUpdate = 22,
// Getting web app info for this profile. This is specifically for handling
// --list-apps switch.
kGettingWebAppInfo = 23,
// An extension .crx is being installed.
kCrxInstaller = 24,
kMaxValue = kCrxInstaller,
};
std::ostream& operator<<(std::ostream& out,
const ProfileKeepAliveOrigin& origin);
#endif // CHROME_BROWSER_PROFILES_KEEP_ALIVE_PROFILE_KEEP_ALIVE_TYPES_H_