#include "chrome/common/chrome_features.h"
#include "base/command_line.h"
#include "base/feature_list.h"
#include "base/strings/string_split.h"
#include "base/time/time.h"
#include "build/branding_buildflags.h"
#include "build/build_config.h"
#include "chrome/common/chrome_switches.h"
namespace features {
constexpr base::FeatureParam<ActorPaintStabilityMode>::Option
kActorPaintStabilityModeOptions[] = {
{ActorPaintStabilityMode::kDisabled, "disabled"},
{ActorPaintStabilityMode::kLogOnly, "log-only"},
{ActorPaintStabilityMode::kEnabled, "enabled"},
};
BASE_FEATURE_ENUM_PARAM(ActorPaintStabilityMode,
kActorPaintStabilityMode,
&kGlicActor,
"actor-paint-stability-mode",
ActorPaintStabilityMode::kEnabled,
&kActorPaintStabilityModeOptions);
const base::FeatureParam<base::TimeDelta>
kActorPaintStabilityIntialPaintTimeout{
&kGlicActor, "actor-paint-stability-initial-paint-timeout",
base::Seconds(1)};
const base::FeatureParam<base::TimeDelta>
kActorPaintStabilitySubsequentPaintTimeout{
&kGlicActor, "actor-paint-stability-subsequent-paint-timeout",
base::Seconds(1)};
#if BUILDFLAG(IS_WIN)
BASE_FEATURE(kAppSpecificNotifications, base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kDisableBoostPriority, base::FEATURE_DISABLED_BY_DEFAULT);
static constexpr base::FeatureParam<DisableBoostPriorityMode>::Option
kDisableBoostPriorityOptions[] = {
{DisableBoostPriorityMode::kAfterLoading, "AfterLoading"},
{DisableBoostPriorityMode::kAtStartup, "AtStartup"}};
constinit const base::FeatureParam<DisableBoostPriorityMode>
kDisableBoostPriorityMode{&kDisableBoostPriority, "mode",
DisableBoostPriorityMode::kAtStartup,
&kDisableBoostPriorityOptions};
#endif
#if BUILDFLAG(IS_MAC)
BASE_FEATURE(kAppShimRemoteCocoa, base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kAppShimNewCloseBehavior, base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kAppShimLaunchChromeSilently, base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kAppShimNotificationAttribution,
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kUseAdHocSigningForWebAppShims, base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kUseKeychainKeyProvider, base::FEATURE_ENABLED_BY_DEFAULT);
#endif
#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) || \
BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_OHOS)
BASE_FEATURE(kAutofillAddressSurvey, base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kAutofillCardSurvey, base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kAutofillPasswordSurvey, base::FEATURE_DISABLED_BY_DEFAULT);
#endif
#if BUILDFLAG(IS_ANDROID)
BASE_FEATURE(kBoardingPassDetector, base::FEATURE_DISABLED_BY_DEFAULT);
const char kBoardingPassDetectorUrlParamName[] = "boarding_pass_detector_urls";
const base::FeatureParam<std::string> kBoardingPassDetectorUrlParam(
&kBoardingPassDetector,
kBoardingPassDetectorUrlParamName,
"");
#endif
#if BUILDFLAG(IS_CHROMEOS)
BASE_FEATURE(kBorealis, base::FEATURE_DISABLED_BY_DEFAULT);
#endif
#if BUILDFLAG(IS_CHROMEOS)
BASE_FEATURE(kCrostini, base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kCrostiniAdvancedAccessControls,
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kCrostiniAnsibleSoftwareManagement,
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kCrostiniArcSideload, base::FEATURE_ENABLED_BY_DEFAULT);
#endif
BASE_FEATURE(kCryptographyComplianceCnsa, base::FEATURE_DISABLED_BY_DEFAULT);
#if BUILDFLAG(IS_CHROMEOS)
BASE_FEATURE(kCryptohomeDistributedModel, base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kCryptohomeUserDataAuth, base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kCryptohomeUserDataAuthKillswitch,
base::FEATURE_DISABLED_BY_DEFAULT);
#endif
#if BUILDFLAG(IS_CHROMEOS)
BASE_FEATURE(kDataLeakPreventionFilesRestriction,
base::FEATURE_ENABLED_BY_DEFAULT);
#endif
#if !BUILDFLAG(IS_ANDROID)
BASE_FEATURE(kPreinstalledWebAppInstallation,
"DefaultWebAppInstallation",
base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kPreinstalledWebAppAlwaysMigrate,
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kPreinstalledWebAppAlwaysMigrateCalculator,
base::FEATURE_ENABLED_BY_DEFAULT);
#endif
#if BUILDFLAG(IS_CHROMEOS)
BASE_FEATURE(kDesktopTaskManagerEndProcessDisabledForExtension,
base::FEATURE_DISABLED_BY_DEFAULT);
#endif
BASE_FEATURE(kChromeStructuredMetrics, base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kCreateProfileIfNoneExists, base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kCustomizeTabGroupColorPalette, base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kDesktopPWAsElidedExtensionsMenu,
#if BUILDFLAG(IS_CHROMEOS)
base::FEATURE_ENABLED_BY_DEFAULT
#else
base::FEATURE_DISABLED_BY_DEFAULT
#endif
);
BASE_FEATURE(kDesktopPWAsRunOnOsLogin,
#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) || \
BUILDFLAG(IS_CHROMEOS)
base::FEATURE_ENABLED_BY_DEFAULT
#else
base::FEATURE_DISABLED_BY_DEFAULT
#endif
);
BASE_FEATURE(kDesktopPWAsPreventClose,
#if BUILDFLAG(IS_CHROMEOS)
base::FEATURE_ENABLED_BY_DEFAULT
#else
base::FEATURE_DISABLED_BY_DEFAULT
#endif
);
BASE_FEATURE(kPwaNavigationCapturingWithScopeExtensions,
"DesktopPWAsLinkCapturingWithScopeExtensions",
base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kDesktopPWAsTabStripSettings, base::FEATURE_DISABLED_BY_DEFAULT);
#if BUILDFLAG(IS_ANDROID)
BASE_FEATURE(kDisplayEdgeToEdgeFullscreen, base::FEATURE_DISABLED_BY_DEFAULT);
#endif
#if BUILDFLAG(IS_ANDROID)
BASE_FEATURE(kEnableFullscreenToAnyScreenAndroid,
base::FEATURE_DISABLED_BY_DEFAULT);
#endif
BASE_FEATURE(kShowResetProfileBannerV2, base::FEATURE_ENABLED_BY_DEFAULT);
#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) || \
BUILDFLAG(IS_OHOS)
BASE_FEATURE(kChromeAppsDeprecation, base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kShortcutsNotApps, base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kShortcutsNotAppsRevealDesktop, base::FEATURE_ENABLED_BY_DEFAULT);
#endif
// BUILDFLAG(IS_OHOS)
#if BUILDFLAG(IS_CHROMEOS)
BASE_FEATURE(kFileTransferEnterpriseConnector,
base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kFileTransferEnterpriseConnectorUI,
base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kForcedAppRelaunchOnPlaceholderUpdate,
base::FEATURE_ENABLED_BY_DEFAULT);
#endif
BASE_FEATURE(kGeoLanguage, base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kGlicActor, base::FEATURE_ENABLED_BY_DEFAULT);
const base::FeatureParam<base::TimeDelta> kGlicActorPageToolTimeout{
&kGlicActor, "glic-actor-page-tool-timeout", base::Seconds(10)};
const base::FeatureParam<base::TimeDelta> kGlicActorClickDelay{
&kGlicActor, "glic-actor-click-delay", base::Milliseconds(5)};
BASE_FEATURE(kGlicActorUi, base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kGlicActorUiNudgeRedesign, base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kGlicActorUiTaskIconV2, base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kGlicActorUiTaskNudgeUiFix, base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kGlicActorUiTabIndicatorSpinnerIgnoreReducedMotion,
base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kActorUiThemed, base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kGlicHandoffButtonHiddenClientControl,
base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kGlicHandoffButtonShowInImmersiveMode,
base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kGlicHandoffButtonResetFocusAndHoverStatus,
base::FEATURE_ENABLED_BY_DEFAULT);
const char kGlicActorUiTaskIconName[] = "glic-actor-ui-task-icon";
const char kGlicActorUiOverlayName[] = "glic-actor-ui-overlay";
const char kGlicActorUiOverlayMagicCursorName[] =
"glic-actor-ui-overlay-magic-cursor";
const char kGlicActorUiToastName[] = "glic-actor-ui-toast";
const char kGlicActorUiHandoffButtonName[] = "glic-actor-ui-handoff-button";
const char kGlicActorUiTabIndicatorName[] = "glic-actor-ui-tab-indicator";
const char kGlicActorUiBorderGlowName[] = "glic-actor-ui-border-glow";
const char kGlicActorUiStandaloneBorderGlowName[] =
"glic-actor-ui-standalone-border-glow";
const char kGlicActorUiDebounceTimerName[] = "glic-actor-ui-debounce-timer";
const base::FeatureParam<bool> kGlicActorUiTaskIcon{
&kGlicActorUi, kGlicActorUiTaskIconName, true};
const base::FeatureParam<bool> kGlicActorUiOverlay{
&kGlicActorUi, kGlicActorUiOverlayName, true};
const base::FeatureParam<bool> kGlicActorUiOverlayMagicCursor{
&kGlicActorUi, kGlicActorUiOverlayMagicCursorName, false};
const base::FeatureParam<bool> kGlicActorUiToast{&kGlicActorUi,
kGlicActorUiToastName, true};
const base::FeatureParam<bool> kGlicActorUiHandoffButton{
&kGlicActorUi, kGlicActorUiHandoffButtonName, true};
const base::FeatureParam<bool> kGlicActorUiTabIndicator{
&kGlicActorUi, kGlicActorUiTabIndicatorName, true};
const base::FeatureParam<bool> kGlicActorUiBorderGlow{
&kGlicActorUi, kGlicActorUiBorderGlowName, true};
const base::FeatureParam<bool> kGlicActorUiStandaloneBorderGlow{
&kGlicActorUi, kGlicActorUiStandaloneBorderGlowName, true};
const base::FeatureParam<base::TimeDelta> kGlicActorUiDebounceTimer{
&kGlicActorUi, kGlicActorUiDebounceTimerName, base::Milliseconds(25)};
const base::FeatureParam<base::TimeDelta> kGlicActorPageStabilityTimeout{
&kGlicActor, "glic-actor-page-stability-timeout", base::Seconds(4)};
const base::FeatureParam<base::TimeDelta> kGlicActorPageStabilityMinWait{
&kGlicActor, "glic-actor-page-stability-min-wait", base::Seconds(1)};
const base::FeatureParam<base::TimeDelta> kActorObservationDelayTimeout{
&kGlicActor, "actor-observation-delay-timeout", base::Seconds(10)};
const base::FeatureParam<base::TimeDelta> kActorObservationDelayLcp{
&kGlicActor, "actor-observation-delay-lcp", base::Seconds(1)};
BASE_FEATURE(kGlicActorObservationDelayExcludeAdFrameLoading,
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kGlicActorIncrementalTyping, base::FEATURE_ENABLED_BY_DEFAULT);
const base::FeatureParam<base::TimeDelta> kGlicActorKeyDownDuration{
&kGlicActorIncrementalTyping,
"glic-actor-incremental-typing-key-down-duration", base::Milliseconds(25)};
const base::FeatureParam<base::TimeDelta> kGlicActorKeyUpDuration{
&kGlicActorIncrementalTyping,
"glic-actor-incremental-typing-key-up-duration", base::Milliseconds(25)};
const base::FeatureParam<double> kGlicActorIncrementalTypingLongMultiplier{
&kGlicActorIncrementalTyping,
"glic-actor-incremental-typing-long-multiplier", 0.2};
const base::FeatureParam<size_t> kGlicActorIncrementalTypingLongTextThreshold{
&kGlicActorIncrementalTyping,
"glic-actor-incremental-typing-long-text-threshold", 45};
const base::FeatureParam<size_t>
kGlicActorIncrementalTypingLongTextPasteThreshold{
&kGlicActorIncrementalTyping, "glic-actor-long-text-paste-threshold",
200};
const base::FeatureParam<base::TimeDelta> kGlicActorTypeToolEnterDelay{
&kGlicActor, "glic-actor-type-tool-enter-delay", base::Milliseconds(600)};
constexpr base::FeatureParam<std::string> kGlicActorEligibleTiers{
&kGlicActor, "glic-actor-eligible-tiers", ""};
constexpr base::FeatureParam<GlicActorEnterprisePrefDefault>::Option
kGlicActorEnterprisePrefDefaultOptions[] = {
{GlicActorEnterprisePrefDefault::kEnabledByDefault,
"enabled_by_default"},
{GlicActorEnterprisePrefDefault::kDisabledByDefault,
"disabled_by_default"},
{GlicActorEnterprisePrefDefault::kForcedDisabled, "forced_disabled"},
};
BASE_FEATURE_ENUM_PARAM(GlicActorEnterprisePrefDefault,
kGlicActorEnterprisePrefDefault,
&kGlicActor,
"glic_actor_enterprise_pref_default",
GlicActorEnterprisePrefDefault::kForcedDisabled,
&kGlicActorEnterprisePrefDefaultOptions);
const base::FeatureParam<bool> kGlicActorPolicyControlExemption{
&kGlicActor, "glic_actor_policy_control_exemption", false};
BASE_FEATURE(kGlicActorPermissionsBypass, base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kGlicActorToctouValidation, base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kGlicActorInternalPopups, base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kGlicActorIterativeInteractionPointDiscovery,
base::FEATURE_ENABLED_BY_DEFAULT);
const base::FeatureParam<size_t>
kGlicActorInterationPointDiscoveryMaxIterations{
&kGlicActorIterativeInteractionPointDiscovery,
"interaction-discovery-max-iterations", 0};
BASE_FEATURE(kGlicActorMoveBeforeClick, base::FEATURE_ENABLED_BY_DEFAULT);
const base::FeatureParam<base::TimeDelta> kGlicActorMoveBeforeClickDelay{
&kGlicActorMoveBeforeClick, "glic-actor-move-before-click-delay",
base::Milliseconds(5)};
BASE_FEATURE(kGlicActOnWebCapabilityForManagedTrials,
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kGlicUnifiedFreScreen, base::FEATURE_DISABLED_BY_DEFAULT);
#if BUILDFLAG(ENABLE_GLIC)
BASE_FEATURE(kGlic, base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kGlicDetached, base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kGlicMultiInstance, base::FEATURE_DISABLED_BY_DEFAULT);
const base::FeatureParam<int> kGlicSidePanelMinWidth{
&kGlicMultiInstance, "glic-side-panel-min-width", 384};
const base::FeatureParam<int> kGlicMultiInstanceFloatyWidth{
&kGlicMultiInstance, "glic-multi-instance-floaty-width", 400};
const base::FeatureParam<int> kGlicMultiInstanceFloatyHeight{
&kGlicMultiInstance, "glic-multi-instance-floaty-height", 400};
BASE_FEATURE(kGlicEnableMultiInstanceBasedOnTier,
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kGlicDefaultToLastActiveConversation,
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kGlicZOrderChanges, base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kGlicDevelopmentSyncGoogleCookies,
"GlicDevelopmentCookies",
base::FEATURE_DISABLED_BY_DEFAULT);
const base::FeatureParam<bool> kGlicStatusIconOpenMenuWithSecondaryClick{
&kGlic, "open-status-icon-menu-with-secondary-click", true};
BASE_FEATURE(kGlicForceSimplifiedBorder, base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kGlicForceNonSkSLBorder, base::FEATURE_DISABLED_BY_DEFAULT);
const base::FeatureParam<int> kGlicPreLoadingTimeMs{
&kGlic, "glic-pre-loading-time-ms", 200};
const base::FeatureParam<int> kGlicMinLoadingTimeMs{
&kGlic, "glic-min-loading-time-ms", 1000};
const base::FeatureParam<int> kGlicMaxLoadingTimeMs{
&kGlic, "glic-max-loading-time-ms", 15000};
const base::FeatureParam<int> kGlicReloadMaxLoadingTimeMs{
&kGlic, "glic-reload-max-loading-time-ms", 30000};
const base::FeatureParam<int> kGlicInitialWidth{&kGlic, "glic-initial-width",
352};
const base::FeatureParam<int> kGlicInitialHeight{&kGlic, "glic-initial-height",
86};
const base::FeatureParam<int> kGlicFreInitialWidth{
&kGlic, "glic-fre-initial-width", 512};
const base::FeatureParam<int> kGlicFreInitialHeight{
&kGlic, "glic-fre-initial-height", 512};
const base::FeatureParam<int> kGlicScreenshotEncodeQuality{
&kGlic, "glic-screenshot-encode-quality", 100};
const base::FeatureParam<std::string> kGlicDefaultHotkey{
&kGlic, "glic-default-hotkey", ""};
BASE_FEATURE(kGlicURLConfig, base::FEATURE_ENABLED_BY_DEFAULT);
const base::FeatureParam<std::string> kGlicGuestURL{
&kGlicURLConfig, "glic-guest-url", "https://gemini.google.com/glic"};
#if BUILDFLAG(IS_CHROMEOS)
BASE_FEATURE(kGlicShowStatusTrayIcon, base::FEATURE_DISABLED_BY_DEFAULT);
#endif
BASE_FEATURE_PARAM(std::string,
kGlicUserStatusUrl,
&kGlicUserStatusCheck,
"glic-user-status-url",
#if BUILDFLAG(GOOGLE_CHROME_BRANDING)
"https://geminiweb-pa.googleapis.com/v1/glicStatus"
#else
""
#endif
);
BASE_FEATURE_PARAM(base::TimeDelta,
kGlicUserStatusRequestDelay,
&kGlicUserStatusCheck,
"glic-user-status-request-delay",
base::Hours(23));
BASE_FEATURE_PARAM(std::string,
kGeminiOAuth2Scope,
&kGlicUserStatusCheck,
"glic-user-status-oauth2-scope",
"https://www.googleapis.com/auth/gemini");
BASE_FEATURE_PARAM(double,
kGlicUserStatusRequestDelayJitter,
&kGlicUserStatusCheck,
"glic-user-status-request-delay-jitter",
0.005);
constexpr base::FeatureParam<GlicEnterpriseCheckStrategy>::Option
kGlicEnterpriseCheckStrategyOptions[] = {
{GlicEnterpriseCheckStrategy::kPolicy, "policy"},
{GlicEnterpriseCheckStrategy::kManaged, "managed"},
};
BASE_FEATURE_ENUM_PARAM(GlicEnterpriseCheckStrategy,
kGlicUserStatusEnterpriseCheckStrategy,
&kGlicUserStatusCheck,
"glic-user-status-enterprise-check-strategy",
GlicEnterpriseCheckStrategy::kManaged,
&kGlicEnterpriseCheckStrategyOptions);
BASE_FEATURE_PARAM(bool,
kGlicUserStatusRefreshApi,
&kGlicUserStatusCheck,
"glic-user-status-refresh-api",
true);
BASE_FEATURE_PARAM(base::TimeDelta,
kGlicUserStatusThrottleInterval,
&kGlicUserStatusCheck,
"glic-user-status-throttle-interval",
base::Seconds(5));
BASE_FEATURE(kGlicFreURLConfig, base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE_PARAM(std::string,
kGlicFreURL,
&kGlicFreURLConfig,
"glic-fre-url",
"https://gemini.google.com/glic/intro?");
BASE_FEATURE(kGlicLearnMoreURLConfig, base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE_PARAM(std::string,
kGlicShortcutsLearnMoreURL,
&kGlicLearnMoreURLConfig,
"glic-shortcuts-learn-more-url",
"");
BASE_FEATURE_PARAM(std::string,
kGlicLauncherToggleLearnMoreURL,
&kGlicLearnMoreURLConfig,
"glic-shortcuts-launcher-toggle-learn-more-url",
"");
BASE_FEATURE_PARAM(std::string,
kGlicLocationToggleLearnMoreURL,
&kGlicLearnMoreURLConfig,
"glic-shortcuts-location-toggle-learn-more-url",
"");
BASE_FEATURE_PARAM(std::string,
kGlicTabAccessToggleLearnMoreURL,
&kGlicLearnMoreURLConfig,
"glic-shortcuts-tab-access-toggle-learn-more-url",
"");
BASE_FEATURE_PARAM(
std::string,
kGlicTabAccessToggleLearnMoreURLDataProtected,
&kGlicLearnMoreURLConfig,
"glic-shortcuts-tab-access-toggle-learn-more-url-data-protected",
"");
BASE_FEATURE_PARAM(std::string,
kGlicDefaultTabAccessToggleLearnMoreURL,
&kGlicLearnMoreURLConfig,
"glic-default-tab-access-toggle-learn-more-url",
"");
BASE_FEATURE_PARAM(
std::string,
kGlicDefaultTabAccessToggleLearnMoreURLDataProtected,
&kGlicLearnMoreURLConfig,
"glic-default-tab-access-toggle-learn-more-url-data-protected",
"");
BASE_FEATURE_PARAM(std::string,
kGlicSettingsPageLearnMoreURL,
&kGlicLearnMoreURLConfig,
"glic-settings-page-learn-more-url",
"");
BASE_FEATURE_PARAM(std::string,
kGlicWebActuationToggleLearnMoreURL,
&kGlicLearnMoreURLConfig,
"glic-actuation-on-web-toggle-learn-more-url",
"");
BASE_FEATURE_PARAM(std::string,
kGlicWebActuationToggleConsiderSafelyURL,
&kGlicLearnMoreURLConfig,
"glic-actuation-on-web-toggle-things-to-consider-safely-url",
"");
BASE_FEATURE_PARAM(
std::string,
kGlicWebActuationToggleConsiderUnexpectedResultsURL,
&kGlicLearnMoreURLConfig,
"glic-actuation-on-web-toggle-things-to-consider-unexpected-results-url",
"");
BASE_FEATURE_PARAM(std::string,
kGlicExtensionsManagementUrl,
&kGlicLearnMoreURLConfig,
"glic-extensions-management-url",
#if BUILDFLAG(GOOGLE_CHROME_BRANDING)
"https://gemini.google.com/apps"
#else
""
#endif
);
BASE_FEATURE(kGlicCSPConfig, base::FEATURE_ENABLED_BY_DEFAULT);
const base::FeatureParam<std::string> kGlicAllowedOriginsOverride{
&kGlicCSPConfig, "glic-allowed-origins-override",
"https://gemini.google.com https://www.google.com"};
BASE_FEATURE(kGlicClientResponsivenessCheck, base::FEATURE_ENABLED_BY_DEFAULT);
const base::FeatureParam<int> kGlicClientResponsivenessCheckIntervalMs{
&kGlicClientResponsivenessCheck,
"glic-client-responsiveness-check-interval-ms", 5000};
const base::FeatureParam<int> kGlicClientResponsivenessCheckTimeoutMs{
&kGlicClientResponsivenessCheck,
"glic-client-responsiveness-check-timeout-ms", 500};
const base::FeatureParam<int> kGlicClientUnresponsiveUiMaxTimeMs{
&kGlicClientResponsivenessCheck, "glic-client-unresponsive-ui-max-time-ms",
5000};
const base::FeatureParam<bool>
kGlicClientResponsivenessCheckIgnoreWhenDebuggerAttached{
&kGlicClientResponsivenessCheck,
"glic-client-responsiveness-check-ignore-when-debugger-attached", true};
BASE_FEATURE(kGlicUseShaderCache, base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kGlicKeyboardShortcutNewBadge, base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kGlicAppMenuNewBadge, base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kGlicDebugWebview, base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kGlicScrollTo, base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kGlicCaptureRegion, base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kGlicUseNonClient, base::FEATURE_DISABLED_BY_DEFAULT);
const base::FeatureParam<bool> kGlicScrollToEnforceDocumentId{
&kGlicScrollTo, "glic-scroll-to-enforce-document-id", true};
const base::FeatureParam<bool> kGlicScrollToPDF{&kGlicScrollTo,
"glic-scroll-to-pdf", false};
const base::FeatureParam<bool> kGlicScrollToEnforceURLForPDF{
&kGlicScrollTo, "glic-scroll-to-enforce-url-for-pdf", true};
BASE_FEATURE(kGlicWarming, base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kGlicGuestContentsVisibilityState,
#if BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX)
base::FEATURE_ENABLED_BY_DEFAULT);
#else
base::FEATURE_DISABLED_BY_DEFAULT);
#endif
const base::FeatureParam<int> kGlicWarmingDelayMs{
&kGlicWarming, "glic-warming-delay-ms", 20 * 1000};
const base::FeatureParam<int> kGlicWarmingJitterMs{
&kGlicWarming, "glic-warming-jitter-ms", 10 * 1000};
BASE_FEATURE(kGlicFreWarming, base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kGlicWarmMultiple, base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kGlicTieredRollout, base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kGlicRollout, base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kGlicIntro, base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kGlicLearnMore, base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kGlicUserStatusCheck, base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kGlicClosedCaptioning, base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kGlicDefaultTabContextSetting, base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kGlicDefaultContextPinOnBind, base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kGlicUnloadOnClose, base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kGlicApiActivationGating, base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kGlicBindPinnedUnboundTab, base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kGlicExplicitBackgroundColor, base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kGlicPanelResetTopChromeButton, base::FEATURE_ENABLED_BY_DEFAULT);
const base::FeatureParam<int> kGlicPanelResetTopChromeButtonDelayMs{
&kGlicPanelResetTopChromeButton, "glic-panel-reset-delay-ms", 2500};
BASE_FEATURE(kGlicPanelResetOnStart, base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kGlicPanelSetPositionOnDrag, base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kGlicPanelResetOnSessionTimeout, base::FEATURE_ENABLED_BY_DEFAULT);
const base::FeatureParam<double> kGlicPanelResetOnSessionTimeoutDelayH{
&kGlicPanelResetOnSessionTimeout,
"glic-panel-reset-session-timeout-delay-h", 1};
BASE_FEATURE(kGlicPanelResetSizeAndLocationOnOpen,
base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kGlicPersonalContext, base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kGlicGeminiInstructions, base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kGlicPopupWindowsEnabled, base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kGlicRecordActorJournal, base::FEATURE_ENABLED_BY_DEFAULT);
extern const base::FeatureParam<int> kGlicRecordActorJournalFeedbackProductId{
&kGlicRecordActorJournal, "glic-record-actor-journal-feedback-product-id",
5320395};
extern const base::FeatureParam<std::string>
kGlicRecordActorJournalFeedbackCategoryTag{
&kGlicRecordActorJournal,
"glic-record-actor-journal-feedback-category-tag",
"gemini_in_chrome_actor_tt_df"};
BASE_FEATURE(kGlicRecordMemoryFootprintMetrics,
base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kGlicWebClientUnresponsiveMetrics,
base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kGlicParameterizedShader, base::FEATURE_ENABLED_BY_DEFAULT);
extern const base::FeatureParam<std::string> kGlicParameterizedShaderColors{
&kGlicParameterizedShader, "glic-parameterized-shader-colors",
"#3186FF#346BF1#4FA0FF#FF4641#FFCC00#0EBC5F"};
extern const base::FeatureParam<std::string> kGlicParameterizedShaderFloats{
&kGlicParameterizedShader, "glic-parameterized-shader-floats",
"5#0.1#0.3#0.7#1.0#0.5#0.5#0.3"};
BASE_FEATURE(kGlicTabFocusDataDedupDebounce, base::FEATURE_ENABLED_BY_DEFAULT);
const base::FeatureParam<int> kGlicTabFocusDataDebounceDelayMs{
&kGlicTabFocusDataDedupDebounce, "glic-tab-focus-data-debounce-delay-ms",
5};
const base::FeatureParam<int> kGlicTabFocusDataMaxDebounces{
&kGlicTabFocusDataDedupDebounce, "glic-tab-focus-data-max-debounces", 5};
BASE_FEATURE(kGlicGetTabByIdApi, base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kGlicOpenPasswordManagerSettingsPageApi,
base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kGlicAssetsV2, base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kGlicFaviconDataUrls, base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kGlicIgnoreOfflineState, base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kGlicExtensions, base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kGlicMultitabUnderlines, base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kGlicWindowDragRegions, base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kGlicHandleDraggingNatively, base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kGlicHeader, base::FEATURE_ENABLED_BY_DEFAULT);
const base::FeatureParam<std::string> kGlicHeaderRequestTypes{
&kGlicHeader, "glic-header-request-types",
"main_frame,xmlhttprequest,websocket"};
BASE_FEATURE(kGlicCaaGuestError, base::FEATURE_ENABLED_BY_DEFAULT);
extern const base::FeatureParam<std::string> kGlicCaaLinkUrl{
&kGlicCaaGuestError, "glic-caa-link-url", "https://gemini.google.com/"};
extern const base::FeatureParam<std::string> kGlicCaaLinkText{
&kGlicCaaGuestError, "glic-caa-link-text", "gemini.google.com"};
extern const base::FeatureParam<std::string> kGlicCaaGuestRedirectPatterns{
&kGlicCaaGuestError, "glic-caa-redirect-patterns",
"https://access.workspace.google.com https://admin.google.com "
"https://accounts.google.com/info/servicerestricted"};
BASE_FEATURE(kGlicEntrypointVariations, base::FEATURE_ENABLED_BY_DEFAULT);
const base::FeatureParam<bool> kGlicEntrypointVariationsShowLabel{
&kGlicEntrypointVariations, "glic-entrypoint-variations-show-label", true};
const base::FeatureParam<bool> kGlicEntrypointVariationsAltIcon{
&kGlicEntrypointVariations, "glic-entrypoint-variations-alt-icon", false};
const base::FeatureParam<bool> kGlicEntrypointVariationsHighlightNudge{
&kGlicEntrypointVariations, "glic-entrypoint-variations-highlight-nudge",
false};
BASE_FEATURE(kGlicButtonAltLabel, base::FEATURE_DISABLED_BY_DEFAULT);
const base::FeatureParam<int> kGlicButtonAltLabelVariant{
&kGlicButtonAltLabel, "glic-button-alt-label-variant", 0};
BASE_FEATURE(kGlicDaisyChainNewTabs, base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kGlicUseToolbarHeightSidePanel, base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kGlicButtonPressedState, base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kGlicShareImage, base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kGlicShareImageEnterprise, base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kGlicWebActuationSetting, base::FEATURE_ENABLED_BY_DEFAULT);
const base::FeatureParam<std::string> kGlicWebActuationAllowedTiers{
&kGlicWebActuationSetting, "allowed_tiers", ""};
BASE_FEATURE(kGlicWebActuationSettingsToggle,
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kGlicMetricsSession, base::FEATURE_ENABLED_BY_DEFAULT);
const base::FeatureParam<base::TimeDelta> kGlicMetricsSessionInactivityTimeout{
&kGlicMetricsSession, "glic-metrics-session-inactivity-timeout",
base::Minutes(45)};
const base::FeatureParam<base::TimeDelta> kGlicMetricsSessionHiddenTimeout{
&kGlicMetricsSession, "glic-metrics-session-hidden-timeout",
base::Minutes(30)};
const base::FeatureParam<base::TimeDelta>
kGlicMetricsSessionRestartDebounceTimer{
&kGlicMetricsSession, "glic-metrics-session-restart-debounce-timer",
base::Seconds(5)};
const base::FeatureParam<base::TimeDelta> kGlicMetricsSessionStartTimeout{
&kGlicMetricsSession, "glic-metrics-session-start-timeout",
base::Seconds(5)};
#endif
BASE_FEATURE(kGlicActorAutofill, base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE_PARAM(base::TimeDelta,
kGlicActorAutofillFillingTimeout,
&kGlicActorAutofill,
"glic-actor-autofill-filling-timeout",
base::Seconds(2));
BASE_FEATURE_PARAM(base::TimeDelta,
kGlicActorAutofillMaximumTimeout,
&kGlicActorAutofill,
"glic-actor-autofill-maximum-timeout",
base::Minutes(1));
BASE_FEATURE(kActorFormFillingServiceEnableAddress,
base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kActorFormFillingServiceEnableCreditCard,
base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kGoogleChromeScheme, base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kPrivacyGuideForceAvailable, base::FEATURE_DISABLED_BY_DEFAULT);
#if !BUILDFLAG(IS_ANDROID)
BASE_FEATURE(kHappinessTrackingSurveysForDesktopDemo,
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kHappinessTrackingSurveysConfiguration,
base::FEATURE_ENABLED_BY_DEFAULT);
const base::FeatureParam<std::string> kHappinessTrackingSurveysHostedUrl{
&kHappinessTrackingSurveysConfiguration, "custom-url",
"https://www.google.com/chrome/hats/index_m129.html"};
BASE_FEATURE(kHaTSDesktopDevToolsIssuesCOEP, base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kHaTSDesktopDevToolsIssuesMixedContent,
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kHappinessTrackingSurveysForDesktopDevToolsIssuesCookiesSameSite,
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kHaTSDesktopDevToolsIssuesHeavyAd,
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kHaTSDesktopDevToolsIssuesCSP, base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kHappinessTrackingSurveysForDesktopPrivacyGuide,
base::FEATURE_DISABLED_BY_DEFAULT);
const base::FeatureParam<base::TimeDelta>
kHappinessTrackingSurveysForDesktopPrivacyGuideTime{
&kHappinessTrackingSurveysForDesktopPrivacyGuide, "settings-time",
base::Seconds(20)};
BASE_FEATURE(kHappinessTrackingSurveysForDesktopSettings,
base::FEATURE_DISABLED_BY_DEFAULT);
const base::FeatureParam<base::TimeDelta>
kHappinessTrackingSurveysForDesktopSettingsTime{
&kHappinessTrackingSurveysForDesktopSettings, "settings-time",
base::Seconds(20)};
BASE_FEATURE(kHappinessTrackingSurveysForDesktopSettingsPrivacy,
base::FEATURE_DISABLED_BY_DEFAULT);
const base::FeatureParam<bool>
kHappinessTrackingSurveysForDesktopSettingsPrivacyNoGuide{
&kHappinessTrackingSurveysForDesktopSettingsPrivacy, "no-guide", false};
const base::FeatureParam<base::TimeDelta>
kHappinessTrackingSurveysForDesktopSettingsPrivacyTime{
&kHappinessTrackingSurveysForDesktopSettingsPrivacy, "settings-time",
base::Seconds(20)};
BASE_FEATURE(kHappinessTrackingSurveysForDesktopNtpModules,
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kHappinessTrackingSurveysForDesktopNextPanel,
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kHappinessTrackingSurveysForHistoryEmbeddings,
base::FEATURE_DISABLED_BY_DEFAULT);
const base::FeatureParam<base::TimeDelta>
kHappinessTrackingSurveysForHistoryEmbeddingsDelayTime(
&kHappinessTrackingSurveysForHistoryEmbeddings,
"HappinessTrackingSurveysForHistoryEmbeddingsDelayTime",
base::Seconds(20));
BASE_FEATURE(kHappinessTrackingSurveysForNtpPhotosOptOut,
"HappinessTrackingSurveysForrNtpPhotosOptOut",
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kHappinessTrackingSurveysForWallpaperSearch,
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kHappinessTrackingSurveysForDesktopWhatsNew,
base::FEATURE_ENABLED_BY_DEFAULT);
const base::FeatureParam<base::TimeDelta>
kHappinessTrackingSurveysForDesktopWhatsNewTime{
&kHappinessTrackingSurveysForDesktopWhatsNew, "whats-new-time",
base::Seconds(20)};
BASE_FEATURE(kHappinessTrackingSurveysForSecurityPage,
base::FEATURE_DISABLED_BY_DEFAULT);
const base::FeatureParam<base::TimeDelta>
kHappinessTrackingSurveysForSecurityPageTime{
&kHappinessTrackingSurveysForSecurityPage, "security-page-time",
base::Seconds(15)};
const base::FeatureParam<std::string>
kHappinessTrackingSurveysForSecurityPageTriggerId{
&kHappinessTrackingSurveysForSecurityPage, "security-page-trigger-id",
""};
#endif
#if BUILDFLAG(IS_CHROMEOS)
BASE_FEATURE(kHappinessTrackingSystem, base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kHappinessTrackingSystemBluetoothRevamp,
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kHappinessTrackingSystemBatteryLife,
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kHappinessTrackingSystemPeripherals,
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kHappinessTrackingSystemEnt, base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kHappinessTrackingSystemStability,
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kHappinessTrackingSystemPerformance,
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kHappinessTrackingSystemOnboarding,
"HappinessTrackingOnboardingExperience",
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kHappinessTrackingSystemArcGames,
"HappinessTrackingArcGames",
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kHappinessTrackingSystemAudio,
"HappinessTrackingAudio",
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kHappinessTrackingSystemAudioOutputProc,
"HappinessTrackingAudioOutputProc",
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kHappinessTrackingSystemBluetoothAudio,
"HappinessTrackingBluetoothAudio",
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kHappinessTrackingPersonalizationAvatar,
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kHappinessTrackingPersonalizationScreensaver,
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kHappinessTrackingPersonalizationWallpaper,
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kHappinessTrackingMediaAppPdf, base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kHappinessTrackingSystemCameraApp,
"HappinessTrackingCameraApp",
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kHappinessTrackingPhotosExperience,
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kHappinessTrackingGeneralCamera,
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kHappinessTrackingGeneralCameraPrioritized,
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kHappinessTrackingOsSettingsSearch,
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kHappinessTrackingBorealisGames,
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kHappinessTrackingLauncherAppsFinding,
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kHappinessTrackingLauncherAppsNeeding,
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kHappinessTrackingOffice, base::FEATURE_DISABLED_BY_DEFAULT);
#endif
BASE_FEATURE(kHttpsFirstBalancedMode, base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kHttpsFirstBalancedModeAutoEnable,
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kHttpsFirstModeForAdvancedProtectionUsers,
"HttpsOnlyModeForAdvancedProtectionUsers",
base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kHttpsFirstModeV2ForEngagedSites,
base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kHttpsFirstModeV2ForTypicallySecureUsers,
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kHttpsUpgrades, base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kHttpsFirstModeIncognito, base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kHttpsFirstModeIncognitoNewSettings,
base::FEATURE_DISABLED_BY_DEFAULT);
#if BUILDFLAG(IS_MAC)
BASE_FEATURE(kImmersiveFullscreen, base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kImmersiveFullscreenPWAs, base::FEATURE_ENABLED_BY_DEFAULT);
#endif
#if !BUILDFLAG(IS_ANDROID)
BASE_FEATURE(kInstantUsesSpareRenderer, base::FEATURE_DISABLED_BY_DEFAULT);
#endif
BASE_FEATURE(kIsolatedWebAppDevMode, base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kIsolatedWebAppUnmanagedInstall,
base::FEATURE_DISABLED_BY_DEFAULT);
#if BUILDFLAG(IS_CHROMEOS)
BASE_FEATURE(kIsolatedWebAppManagedGuestSessionInstall,
base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kIsolatedWebAppBundleCache, base::FEATURE_ENABLED_BY_DEFAULT);
#endif
BASE_FEATURE(kKAnonymityService, base::FEATURE_DISABLED_BY_DEFAULT);
constexpr base::FeatureParam<std::string> kKAnonymityServiceAuthServer{
&kKAnonymityService, "KAnonymityServiceAuthServer",
"https://chromekanonymityauth-pa.googleapis.com/"};
constexpr base::FeatureParam<std::string> kKAnonymityServiceJoinRelayServer{
&kKAnonymityService, "KAnonymityServiceJoinRelayServer",
"https://google-ohttp-relay-join.fastly-edge.com/"};
constexpr base::FeatureParam<std::string> kKAnonymityServiceJoinServer{
&kKAnonymityService, "KAnonymityServiceJoinServer",
"https://chromekanonymity-pa.googleapis.com/"};
constexpr base::FeatureParam<base::TimeDelta> kKAnonymityServiceJoinInterval{
&kKAnonymityService, "KAnonymityServiceJoinInterval", base::Days(1)};
constexpr base::FeatureParam<std::string> kKAnonymityServiceQueryRelayServer{
&kKAnonymityService, "KAnonymityServiceQueryRelayServer",
"https://google-ohttp-relay-query.fastly-edge.com/"};
constexpr base::FeatureParam<std::string> kKAnonymityServiceQueryServer{
&kKAnonymityService, "KAnonymityServiceQueryServer",
"https://chromekanonymityquery-pa.googleapis.com/"};
constexpr base::FeatureParam<base::TimeDelta> kKAnonymityServiceQueryInterval{
&kKAnonymityService, "KAnonymityServiceQueryInterval", base::Days(1)};
BASE_FEATURE(kKAnonymityServiceOHTTPRequests, base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kKAnonymityServiceStorage, base::FEATURE_ENABLED_BY_DEFAULT);
#if BUILDFLAG(IS_LINUX) && !BUILDFLAG(IS_CHROMEOS)
BASE_FEATURE(kLinuxLowMemoryMonitor, base::FEATURE_DISABLED_BY_DEFAULT);
constexpr base::FeatureParam<int> kLinuxLowMemoryMonitorModerateLevel{
&kLinuxLowMemoryMonitor, "moderate_level", 50};
constexpr base::FeatureParam<int> kLinuxLowMemoryMonitorCriticalLevel{
&kLinuxLowMemoryMonitor, "critical_level", 255};
#endif
#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_WIN)
BASE_FEATURE(kListWebAppsSwitch, base::FEATURE_DISABLED_BY_DEFAULT);
#endif
BASE_FEATURE(kNativeNotifications, base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kSystemNotifications, base::FEATURE_ENABLED_BY_DEFAULT);
#if BUILDFLAG(IS_MAC)
BASE_FEATURE(kNewMacNotificationAPI, base::FEATURE_DISABLED_BY_DEFAULT);
#endif
#if BUILDFLAG(IS_CHROMEOS)
BASE_FEATURE(kNewFilesPolicyUX, base::FEATURE_ENABLED_BY_DEFAULT);
#endif
BASE_FEATURE(kNoReferrers, base::FEATURE_DISABLED_BY_DEFAULT);
#if BUILDFLAG(IS_WIN)
BASE_FEATURE(kNotificationDurationLongForRequireInteraction,
base::FEATURE_DISABLED_BY_DEFAULT);
#endif
#if BUILDFLAG(IS_ANDROID)
BASE_FEATURE(kOfflineAutoFetch, base::FEATURE_ENABLED_BY_DEFAULT);
#endif
#if BUILDFLAG(ENABLE_EXTENSIONS_CORE)
BASE_FEATURE(kOnConnectNative, base::FEATURE_DISABLED_BY_DEFAULT);
#endif
#if BUILDFLAG(IS_ANDROID)
BASE_FEATURE(kOomIntervention, base::FEATURE_ENABLED_BY_DEFAULT);
#endif
#if BUILDFLAG(IS_WIN)
BASE_FEATURE(kOverridePrefetchOnSingleton, base::FEATURE_DISABLED_BY_DEFAULT);
#endif
#if BUILDFLAG(IS_CHROMEOS)
BASE_FEATURE(kPluginVm, base::FEATURE_DISABLED_BY_DEFAULT);
#endif
BASE_FEATURE(kPrerenderFallbackToPreconnect, base::FEATURE_ENABLED_BY_DEFAULT);
#if BUILDFLAG(IS_CHROMEOS)
BASE_FEATURE(kPrintPreviewCrosPrimary, base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kUseManagedPrintJobOptionsInPrintPreview,
base::FEATURE_ENABLED_BY_DEFAULT);
#endif
BASE_FEATURE(kUserValueDefaultBrowserStrings,
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kPushMessagingBackgroundMode, base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kPwaUpdateDialogForIcon, base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kQuietNotificationPrompts, base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kRecordWebAppDebugInfo, base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kAbusiveNotificationPermissionRevocation,
"AbusiveOriginNotificationPermissionRevocation",
base::FEATURE_ENABLED_BY_DEFAULT);
#if BUILDFLAG(IS_CHROMEOS)
BASE_FEATURE(kRemoveSupervisedUsersOnStartup,
base::FEATURE_DISABLED_BY_DEFAULT);
#endif
#if BUILDFLAG(ENABLE_EXTENSIONS_CORE)
BASE_FEATURE(kSafetyHubExtensionsUwSTrigger, base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kSafetyHubExtensionsNoPrivacyPracticesTrigger,
base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kSafetyHubExtensionsOffStoreTrigger,
base::FEATURE_ENABLED_BY_DEFAULT);
#endif
BASE_FEATURE(kSafetyHubThreeDotDetails, base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kSafetyHubDisruptiveNotificationRevocation,
#if BUILDFLAG(IS_ANDROID)
base::FEATURE_ENABLED_BY_DEFAULT
#else
base::FEATURE_DISABLED_BY_DEFAULT
#endif
);
constexpr base::FeatureParam<int>
kSafetyHubDisruptiveNotificationRevocationExperimentVersion{
&kSafetyHubDisruptiveNotificationRevocation,
"experiment_version", 1};
constexpr base::FeatureParam<bool>
kSafetyHubDisruptiveNotificationRevocationShadowRun{
&kSafetyHubDisruptiveNotificationRevocation,
"shadow_run", false};
constexpr base::FeatureParam<int>
kSafetyHubDisruptiveNotificationRevocationMinNotificationCount{
&kSafetyHubDisruptiveNotificationRevocation,
"min_notification_count", 4};
constexpr base::FeatureParam<double>
kSafetyHubDisruptiveNotificationRevocationMaxEngagementScore{
&kSafetyHubDisruptiveNotificationRevocation,
"max_engagement_score", 0.0};
constexpr base::FeatureParam<base::TimeDelta>
kSafetyHubDisruptiveNotificationRevocationWaitingTimeAsProposed{
&kSafetyHubDisruptiveNotificationRevocation,
"waiting_time_as_proposed", base::Days(4)};
constexpr base::FeatureParam<int>
kSafetyHubDisruptiveNotificationRevocationNotificationTimeoutSeconds{
&kSafetyHubDisruptiveNotificationRevocation,
"notification_timeout_seconds",
7 * 24 * 3600};
constexpr base::FeatureParam<int>
kSafetyHubDisruptiveNotificationRevocationMinFalsePositiveCooldown{
&kSafetyHubDisruptiveNotificationRevocation,
"min_false_positive_cooldown", 0};
constexpr base::FeatureParam<int>
kSafetyHubDisruptiveNotificationRevocationMaxFalsePositivePeriod{
&kSafetyHubDisruptiveNotificationRevocation,
"max_false_positive_period", 14};
constexpr base::FeatureParam<double>
kSafetyHubDisruptiveNotificationRevocationMinSiteEngagementScoreDelta{
&kSafetyHubDisruptiveNotificationRevocation,
"min_engagement_score_delta", 3.0};
constexpr base::FeatureParam<int>
kSafetyHubDisruptiveNotificationRevocationUserRegrantWaitingPeriod{
&kSafetyHubDisruptiveNotificationRevocation,
"user_regrant_waiting_period", 7};
constexpr base::FeatureParam<int>
kSafetyHubDisruptiveNotificationRevocationWaitingForMetricsDays{
&kSafetyHubDisruptiveNotificationRevocation,
"waiting_for_metrics_days", 1};
#if BUILDFLAG(IS_ANDROID)
BASE_FEATURE(kSafetyHubWeakAndReusedPasswords,
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kSafetyHubLocalPasswordsModule, base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kSafetyHubUnifiedPasswordsModule,
base::FEATURE_DISABLED_BY_DEFAULT);
#endif
#if !BUILDFLAG(IS_ANDROID)
BASE_FEATURE(kSafetyHubTrustSafetySentimentSurvey,
"TrustSafetySentimentSurveyForSafetyHub",
base::FEATURE_DISABLED_BY_DEFAULT);
#endif
#if BUILDFLAG(GOOGLE_CHROME_BRANDING) && !BUILDFLAG(IS_ANDROID)
BASE_FEATURE(kSCTAuditing, base::FEATURE_ENABLED_BY_DEFAULT);
#else
BASE_FEATURE(kSCTAuditing, base::FEATURE_DISABLED_BY_DEFAULT);
#endif
constexpr base::FeatureParam<double> kSCTAuditingSamplingRate{
&kSCTAuditing, "sampling_rate", 0.0001};
BASE_FEATURE(kSCTAuditingHashdance, base::FEATURE_ENABLED_BY_DEFAULT);
const base::FeatureParam<base::TimeDelta> kSCTLogExpectedIngestionDelay{
&kSCTAuditingHashdance,
"sct_log_expected_ingestion_delay",
base::Hours(1),
};
const base::FeatureParam<base::TimeDelta> kSCTLogMaxIngestionRandomDelay{
&kSCTAuditingHashdance,
"sct_log_max_ingestion_random_delay",
base::Hours(1),
};
BASE_FEATURE(kSitePerProcess,
#if BUILDFLAG(IS_ANDROID)
base::FEATURE_DISABLED_BY_DEFAULT
#else
base::FEATURE_ENABLED_BY_DEFAULT
#endif
);
BASE_FEATURE(kProcessPerSiteSkipDevtoolsUsers,
base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kProcessPerSiteSkipEnterpriseUsers,
base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kProcessPerSiteForDSE, base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kConsiderDSEWarmUpPageAsSRP, base::FEATURE_DISABLED_BY_DEFAULT);
#if BUILDFLAG(IS_CHROMEOS)
BASE_FEATURE(kCameraCloudStorage, base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kSkyVault, base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kSkyVaultV2, base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kSkyVaultV3, base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kSmartDim, base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kSysInternals, base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kTPMFirmwareUpdate, base::FEATURE_ENABLED_BY_DEFAULT);
#endif
#if !BUILDFLAG(IS_ANDROID)
BASE_FEATURE(kSupportToolScreenshot, base::FEATURE_DISABLED_BY_DEFAULT);
#endif
BASE_FEATURE(kTreatUnsafeDownloadsAsActive, base::FEATURE_ENABLED_BY_DEFAULT);
#if !BUILDFLAG(IS_ANDROID)
BASE_FEATURE(kTrustSafetySentimentSurvey, base::FEATURE_DISABLED_BY_DEFAULT);
const base::FeatureParam<base::TimeDelta>
kTrustSafetySentimentSurveyMinTimeToPrompt{
&kTrustSafetySentimentSurvey, "min-time-to-prompt", base::Minutes(2)};
const base::FeatureParam<base::TimeDelta>
kTrustSafetySentimentSurveyMaxTimeToPrompt{
&kTrustSafetySentimentSurvey, "max-time-to-prompt", base::Minutes(60)};
const base::FeatureParam<int> kTrustSafetySentimentSurveyNtpVisitsMinRange{
&kTrustSafetySentimentSurvey, "ntp-visits-min-range", 2};
const base::FeatureParam<int> kTrustSafetySentimentSurveyNtpVisitsMaxRange{
&kTrustSafetySentimentSurvey, "ntp-visits-max-range", 4};
const base::FeatureParam<double>
kTrustSafetySentimentSurveyPrivacySettingsProbability{
&kTrustSafetySentimentSurvey, "privacy-settings-probability", 0.6};
const base::FeatureParam<double>
kTrustSafetySentimentSurveyTrustedSurfaceProbability{
&kTrustSafetySentimentSurvey, "trusted-surface-probability", 0.4};
const base::FeatureParam<double>
kTrustSafetySentimentSurveyTransactionsProbability{
&kTrustSafetySentimentSurvey, "transactions-probability", 0.05};
const base::FeatureParam<std::string>
kTrustSafetySentimentSurveyPrivacySettingsTriggerId{
&kTrustSafetySentimentSurvey, "privacy-settings-trigger-id", ""};
const base::FeatureParam<std::string>
kTrustSafetySentimentSurveyTrustedSurfaceTriggerId{
&kTrustSafetySentimentSurvey, "trusted-surface-trigger-id", ""};
const base::FeatureParam<std::string>
kTrustSafetySentimentSurveyTransactionsTriggerId{
&kTrustSafetySentimentSurvey, "transactions-trigger-id", ""};
const base::FeatureParam<base::TimeDelta>
kTrustSafetySentimentSurveyPrivacySettingsTime{&kTrustSafetySentimentSurvey,
"privacy-settings-time",
base::Seconds(20)};
const base::FeatureParam<base::TimeDelta>
kTrustSafetySentimentSurveyTrustedSurfaceTime{
&kTrustSafetySentimentSurvey, "trusted-surface-time", base::Seconds(5)};
const base::FeatureParam<base::TimeDelta>
kTrustSafetySentimentSurveyTransactionsPasswordManagerTime{
&kTrustSafetySentimentSurvey, "transactions-password-manager-time",
base::Seconds(20)};
#endif
#if !BUILDFLAG(IS_ANDROID)
BASE_FEATURE(kTrustSafetySentimentSurveyV2, base::FEATURE_ENABLED_BY_DEFAULT);
const base::FeatureParam<base::TimeDelta>
kTrustSafetySentimentSurveyV2MinTimeToPrompt{
&kTrustSafetySentimentSurveyV2, "min-time-to-prompt", base::Minutes(2)};
const base::FeatureParam<base::TimeDelta>
kTrustSafetySentimentSurveyV2MaxTimeToPrompt{&kTrustSafetySentimentSurveyV2,
"max-time-to-prompt",
base::Minutes(60)};
const base::FeatureParam<int> kTrustSafetySentimentSurveyV2NtpVisitsMinRange{
&kTrustSafetySentimentSurveyV2, "ntp-visits-min-range", 2};
const base::FeatureParam<int> kTrustSafetySentimentSurveyV2NtpVisitsMaxRange{
&kTrustSafetySentimentSurveyV2, "ntp-visits-max-range", 4};
const base::FeatureParam<base::TimeDelta>
kTrustSafetySentimentSurveyV2MinSessionTime{
&kTrustSafetySentimentSurveyV2, "min-session-time", base::Seconds(30)};
const base::FeatureParam<double>
kTrustSafetySentimentSurveyV2BrowsingDataProbability{
&kTrustSafetySentimentSurveyV2, "browsing-data-probability", 0.006};
const base::FeatureParam<double>
kTrustSafetySentimentSurveyV2ControlGroupProbability{
&kTrustSafetySentimentSurveyV2, "control-group-probability", 0.000025};
const base::FeatureParam<double>
kTrustSafetySentimentSurveyV2DownloadWarningUIProbability{
&kTrustSafetySentimentSurveyV2, "download-warning-ui-probability",
0.05213384};
const base::FeatureParam<double>
kTrustSafetySentimentSurveyV2PasswordCheckProbability{
&kTrustSafetySentimentSurveyV2, "password-check-probability", 0.195};
const base::FeatureParam<double>
kTrustSafetySentimentSurveyV2PasswordProtectionUIProbability{
&kTrustSafetySentimentSurveyV2, "password-protection-ui-probability",
0.5};
const base::FeatureParam<double>
kTrustSafetySentimentSurveyV2SafetyCheckProbability{
&kTrustSafetySentimentSurveyV2, "safety-check-probability", 0.12121};
const base::FeatureParam<double>
kTrustSafetySentimentSurveyV2SafetyHubNotificationProbability{
&kTrustSafetySentimentSurveyV2, "safety-hub-notification-probability",
0.0};
const base::FeatureParam<double>
kTrustSafetySentimentSurveyV2SafetyHubInteractionProbability{
&kTrustSafetySentimentSurveyV2, "safety-hub-interaction-probability",
0.0};
const base::FeatureParam<double>
kTrustSafetySentimentSurveyV2TrustedSurfaceProbability{
&kTrustSafetySentimentSurveyV2, "trusted-surface-probability",
0.012685};
const base::FeatureParam<double>
kTrustSafetySentimentSurveyV2PrivacyGuideProbability{
&kTrustSafetySentimentSurveyV2, "privacy-guide-probability", 0.5};
const base::FeatureParam<double>
kTrustSafetySentimentSurveyV2SafeBrowsingInterstitialProbability{
&kTrustSafetySentimentSurveyV2,
"safe-browsing-interstitial-probability", 0.18932671};
const base::FeatureParam<std::string>
kTrustSafetySentimentSurveyV2BrowsingDataTriggerId{
&kTrustSafetySentimentSurveyV2, "browsing-data-trigger-id",
"1iSgej9Tq0ugnJ3q1cK0QwXZ12oo"};
const base::FeatureParam<std::string>
kTrustSafetySentimentSurveyV2ControlGroupTriggerId{
&kTrustSafetySentimentSurveyV2, "control-group-trigger-id",
"CXMbsBddw0ugnJ3q1cK0QJM1Hu8m"};
const base::FeatureParam<std::string>
kTrustSafetySentimentSurveyV2DownloadWarningUITriggerId{
&kTrustSafetySentimentSurveyV2, "download-warning-ui-trigger-id",
"7SS4sg4oR0ugnJ3q1cK0TNvCvd8U"};
const base::FeatureParam<std::string>
kTrustSafetySentimentSurveyV2PasswordCheckTriggerId{
&kTrustSafetySentimentSurveyV2, "password-check-trigger-id",
"Xd54YDVNJ0ugnJ3q1cK0UYBRruNH"};
const base::FeatureParam<std::string>
kTrustSafetySentimentSurveyV2PasswordProtectionUITriggerId{
&kTrustSafetySentimentSurveyV2, "password-protection-ui-trigger-id",
"bQBRghu5w0ugnJ3q1cK0RrqdqVRP"};
const base::FeatureParam<std::string>
kTrustSafetySentimentSurveyV2SafetyCheckTriggerId{
&kTrustSafetySentimentSurveyV2, "safety-check-trigger-id",
"YSDfPVMnX0ugnJ3q1cK0RxEhwkay"};
const base::FeatureParam<std::string>
kTrustSafetySentimentSurveyV2SafetyHubInteractionTriggerId{
&kTrustSafetySentimentSurveyV2, "safety-hub-interaction-trigger-id",
""};
const base::FeatureParam<std::string>
kTrustSafetySentimentSurveyV2SafetyHubNotificationTriggerId{
&kTrustSafetySentimentSurveyV2, "safety-hub-notification-trigger-id",
""};
const base::FeatureParam<std::string>
kTrustSafetySentimentSurveyV2TrustedSurfaceTriggerId{
&kTrustSafetySentimentSurveyV2, "trusted-surface-trigger-id",
"CMniDmzgE0ugnJ3q1cK0U6PaEn1f"};
const base::FeatureParam<std::string>
kTrustSafetySentimentSurveyV2PrivacyGuideTriggerId{
&kTrustSafetySentimentSurveyV2, "privacy-guide-trigger-id",
"tqR1rjeDu0ugnJ3q1cK0P9yJEq7Z"};
const base::FeatureParam<std::string>
kTrustSafetySentimentSurveyV2SafeBrowsingInterstitialTriggerId{
&kTrustSafetySentimentSurveyV2, "safe-browsing-interstitial-trigger-id",
"Z9pSWP53n0ugnJ3q1cK0Y6YkGRpU"};
const base::FeatureParam<base::TimeDelta>
kTrustSafetySentimentSurveyV2TrustedSurfaceTime{
&kTrustSafetySentimentSurveyV2, "trusted-surface-time",
base::Seconds(5)};
#endif
#if !BUILDFLAG(IS_ANDROID)
BASE_FEATURE(kWebAppManifestIconUpdating, base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kWebAppUsePrimaryIcon, base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kWebAppPeriodicPreinstallUpdate, base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kWebAppMigratePreinstalledChat, base::FEATURE_DISABLED_BY_DEFAULT);
#endif
BASE_FEATURE(kWebAppManifestPolicyAppIdentityUpdate,
base::FEATURE_ENABLED_BY_DEFAULT);
#if !BUILDFLAG(IS_ANDROID)
BASE_FEATURE(kWebium, base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kInitialWebUI, base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kInitialWebUIMetrics, base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kWebUIReloadButton, base::FEATURE_DISABLED_BY_DEFAULT);
#endif
BASE_FEATURE(kRespectUserAgentOverrideInSearchPrefetch,
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kRestrictedWebUICodeCache, base::FEATURE_DISABLED_BY_DEFAULT);
const base::FeatureParam<std::string> kRestrictedWebUICodeCacheResources{
&kRestrictedWebUICodeCache, "RestrictedWebUICodeCacheResources", ""};
#if BUILDFLAG(IS_CHROMEOS)
BASE_FEATURE(kUmaStorageDimensions, base::FEATURE_DISABLED_BY_DEFAULT);
#endif
#if BUILDFLAG(IS_WIN)
BASE_FEATURE(kWinPinPWAShortcutWithLAF, base::FEATURE_ENABLED_BY_DEFAULT);
#endif
#if BUILDFLAG(IS_CHROMEOS)
BASE_FEATURE(kEventBasedLogUpload, base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kPeriodicLogUploadMigration, base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kClassManagementEnabledMetricsProvider,
base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kUnicornChromeActivityReporting,
base::FEATURE_DISABLED_BY_DEFAULT);
#endif
BASE_FEATURE(kDisableShortcutsEnableDiy, base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kSilentPolicyAndDefaultAppUpdating,
base::FEATURE_DISABLED_BY_DEFAULT);
}