blob: 01be57ea273b675d76f5e160ad162ea205678a6f [file] [log] [blame]
// Copyright 2022 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef COMPONENTS_SERVICES_APP_SERVICE_PUBLIC_CPP_APP_LAUNCH_UTIL_H_
#define COMPONENTS_SERVICES_APP_SERVICE_PUBLIC_CPP_APP_LAUNCH_UTIL_H_
#include <iosfwd>
#include <optional>
#include "base/component_export.h"
#include "components/services/app_service/public/protos/app_types.pb.h"
#include "ui/gfx/geometry/rect.h"
namespace apps {
// Enumeration of possible app launch sources. When adding a new entry to this
// enum:
// - Update DefaultAppLaunchSource in metadata/apps/histograms.xml
// - Update LaunchSource in enums.xml
// - Update ApplicationLaunchSource in
// //components/services/app_service/public/protos/app_types.proto.
//
// This is used for metrics, persisted to logs, and we should not
// - change the assigned value, nor
// - reuse the value which was used (even in past historically)
// Email chromeos-data-team@google.com to request a corresponding change to
// backend enums.
enum class LaunchSource {
kUnknown = 0,
kFromAppListGrid = 1, // Grid of apps, not the search box.
kFromAppListGridContextMenu = 2, // Grid of apps; context menu.
kFromAppListQuery = 3, // Query-dependent results (larger icons).
kFromAppListQueryContextMenu = 4, // Query-dependent results; context menu.
kFromAppListRecommendation = 5, // Query-less recommendations (smaller
// icons).
kFromParentalControls = 6, // Parental Controls Settings Section and
// Per App time notification.
kFromShelf = 7, // Shelf.
kFromFileManager = 8, // FileManager.
kFromLink = 9, // Left-clicking on links in the browser.
kFromOmnibox = 10, // Enter URL in the Omnibox in the
// browser.
kFromChromeInternal = 11, // Chrome internal call.
kFromKeyboard = 12, // Keyboard shortcut for opening app.
kFromOtherApp = 13, // Clicking link in another app or webui.
kFromMenu = 14, // Menu.
kFromInstalledNotification = 15, // Installed notification
kFromTest = 16, // Test
kFromArc = 17, // Arc.
kFromSharesheet = 18, // Sharesheet.
kFromReleaseNotesNotification = 19, // Release Notes Notification.
kFromFullRestore = 20, // Full restore.
kFromSmartTextContextMenu = 21, // Smart text selection context menu.
kFromDiscoverTabNotification = 22, // Discover Tab Notification.
kFromManagementApi = 23, // Management API.
kFromKiosk = 24, // Kiosk.
kFromCommandLine = 25, // Command line.
kFromBackgroundMode = 26, // Background mode.
kFromNewTabPage = 27, // New tab page.
kFromIntentUrl = 28, // Intent URL.
kFromOsLogin = 29, // Run on OS login.
kFromProtocolHandler = 30, // Protocol handler.
kFromUrlHandler = 31, // Url handler.
kFromLockScreen = 32, // Lock screen app launcher.
kFromAppHomePage = 33, // App Home (chrome://apps) page.
kFromReparenting = 34, // Moving content into an app.
kFromProfileMenu =
35, // Profile menu of installable chrome://password-manager WebUI.
kFromSysTrayCalendar = 36, // Launches from the system tray Calendar.
kFromInstaller = 37, // Installation UI
kFromFirstRun = 38, // First Run.
kFromWelcomeTour = 39, // Welcome Tour.
kFromFocusMode = 40, // Focus Mode panel.
kFromSparky = 41, // From Sparky feature.
kFromNavigationCapturing = 42, // Web App Navigation Capturing.
kFromWebInstallApi = 43, // Web Install API.
// Add any new values above this one, and update kMaxValue to the highest
// enumerator value.
kMaxValue = kFromWebInstallApi,
};
// Don't remove items or change the order of this enum. It's used in
// histograms and preferences.
enum class LaunchContainer {
kLaunchContainerWindow = 0,
kLaunchContainerPanelDeprecated = 1,
kLaunchContainerTab = 2,
// For platform apps, which don't actually have a container (they just get a
// "onLaunched" event).
kLaunchContainerNone = 3,
// Add any new values above this one, and update kMaxValue to the highest
// enumerator value.
kMaxValue = kLaunchContainerNone,
};
// The window information to launch an app.
struct COMPONENT_EXPORT(APP_TYPES) WindowInfo {
WindowInfo() = default;
explicit WindowInfo(int64_t display_id);
int32_t window_id = -1;
int32_t state = 0;
int64_t display_id = -1;
std::optional<gfx::Rect> bounds;
};
using WindowInfoPtr = std::unique_ptr<WindowInfo>;
COMPONENT_EXPORT(APP_TYPES)
ApplicationLaunchSource ConvertLaunchSourceToProtoApplicationLaunchSource(
LaunchSource launch_source);
COMPONENT_EXPORT(APP_TYPES)
std::ostream& operator<<(std::ostream& out, LaunchSource launch_source);
} // namespace apps
#endif // COMPONENTS_SERVICES_APP_SERVICE_PUBLIC_CPP_APP_LAUNCH_UTIL_H_