blob: 48949982fcc5ac88358dcddb954fc7b52802bfa4 [file] [log] [blame]
// Copyright 2019 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/ui/ui_features.h"
#include "base/feature_list.h"
#include "base/metrics/field_trial_params.h"
#include "base/time/time.h"
#include "build/build_config.h"
#include "chrome/browser/browser_process.h"
#include "components/search/ntp_features.h"
#include "components/variations/service/variations_service.h"
#include "components/webui/flags/feature_entry.h"
#include "ui/base/ui_base_features.h"
namespace features {
// Enables the tab dragging fallback when full window dragging is not supported
// by the platform (e.g. Wayland). See https://crbug.com/896640
BASE_FEATURE(kAllowWindowDragUsingSystemDragDrop,
"AllowWindowDragUsingSystemDragDrop",
base::FEATURE_ENABLED_BY_DEFAULT);
// Enables the use of WGC for the Eye Dropper screen capture.
BASE_FEATURE(kAllowEyeDropperWGCScreenCapture,
"AllowEyeDropperWGCScreenCapture",
#if BUILDFLAG(IS_WIN)
base::FEATURE_ENABLED_BY_DEFAULT
#else
base::FEATURE_DISABLED_BY_DEFAULT
#endif // BUILDFLAG(IS_WIN)
);
// When enabled, clicks outside the omnibox and its popup will close an open
// omnibox popup.
BASE_FEATURE(kCloseOmniboxPopupOnInactiveAreaClick,
"CloseOmniboxPopupOnInactiveAreaClick",
base::FEATURE_ENABLED_BY_DEFAULT);
#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX)
// Enables the feature to remove the last confirmation dialog when relaunching
// to update Chrome.
BASE_FEATURE(kFewerUpdateConfirmations,
"FewerUpdateConfirmations",
base::FEATURE_ENABLED_BY_DEFAULT);
#endif
#if BUILDFLAG(ENABLE_EXTENSIONS)
BASE_FEATURE(kExtensionsCollapseMainMenu,
"ExtensionsCollapseMainMenu",
base::FEATURE_DISABLED_BY_DEFAULT);
#endif // BUILDFLAG(ENABLE_EXTENSIONS)
#if BUILDFLAG(IS_WIN)
BASE_FEATURE(kOfferPinToTaskbarWhenSettingToDefault,
"OfferPinToTaskbarWhenSettingDefault",
base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kOfferPinToTaskbarInFirstRunExperience,
"OfferPinToTaskbarInFirstRunExperience",
base::FEATURE_ENABLED_BY_DEFAULT);
#endif
#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC)
// Shows an infobar at startup offering to pin Chrome to the taskbar (on
// Windows) or the Dock (on MacOS).
BASE_FEATURE(kOfferPinToTaskbarInfoBar,
"OfferPinToTaskbarInfoBar",
base::FEATURE_DISABLED_BY_DEFAULT);
// Shows an infobar on PDFs offering to become the default PDF viewer if Chrome
// isn't the default already.
BASE_FEATURE(kPdfInfoBar, "PdfInfoBar", base::FEATURE_DISABLED_BY_DEFAULT);
constexpr base::FeatureParam<PdfInfoBarTrigger>::Option
kPdfInfoBarTriggerOptions[] = {{PdfInfoBarTrigger::kPdfLoad, "pdf-load"},
{PdfInfoBarTrigger::kStartup, "startup"}};
BASE_FEATURE_ENUM_PARAM(PdfInfoBarTrigger,
kPdfInfoBarTrigger,
&kPdfInfoBar,
"trigger",
PdfInfoBarTrigger::kPdfLoad,
&kPdfInfoBarTriggerOptions);
#endif // BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC)
// Preloads a WebContents with a Top Chrome WebUI on BrowserView initialization,
// so that it can be shown instantly at a later time when necessary.
BASE_FEATURE(kPreloadTopChromeWebUI,
"PreloadTopChromeWebUI",
base::FEATURE_ENABLED_BY_DEFAULT);
// An experiment to reduce the number of navigations when preloading WebUIs.
BASE_FEATURE(kPreloadTopChromeWebUILessNavigations,
"PreloadTopChromeWebUILessNavigations",
base::FEATURE_DISABLED_BY_DEFAULT);
// Enables exiting browser fullscreen (users putting the browser itself into the
// fullscreen mode via the browser UI or shortcuts) with press-and-hold Esc.
BASE_FEATURE(kPressAndHoldEscToExitBrowserFullscreen,
"PressAndHoldEscToExitBrowserFullscreen",
base::FEATURE_ENABLED_BY_DEFAULT);
// When enabled, reloading using the toolbar button, hotkey, and web contents
// context menu will only reload the active tab. The tab context menu will still
// use the selection model to reload.
BASE_FEATURE(kReloadSelectionModel,
"ReloadSelectionModel",
base::FEATURE_DISABLED_BY_DEFAULT);
// When enabled, a scrim is shown behind window modal dialogs to cover the
// entire browser window. This gives user a visual cue that the browser window
// is not interactable.
BASE_FEATURE(kScrimForBrowserWindowModal,
"ScrimForBrowserWindowModal",
base::FEATURE_ENABLED_BY_DEFAULT);
// When enabled, a scrim is shown behind tab modal dialogs to cover the content
// area. This gives user a visual cue that the content area is not interactable.
BASE_FEATURE(KScrimForTabModal,
"ScrimForTabModal",
base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kSideBySide, "SideBySide", base::FEATURE_DISABLED_BY_DEFAULT);
// The delay before showing the drop target for the side-by-side drag-and-drop
// entrypoint.
BASE_FEATURE_PARAM(base::TimeDelta,
kSideBySideShowDropTargetDelay,
&kSideBySide,
"drop_target_show_delay",
base::Milliseconds(500));
BASE_FEATURE_PARAM(int,
kSideBySideDropTargetMinWidth,
&kSideBySide,
"drop_target_min_width",
120);
BASE_FEATURE_PARAM(int,
kSideBySideDropTargetMaxWidth,
&kSideBySide,
"drop_target_max_width",
360);
BASE_FEATURE_PARAM(int,
kSideBySideDropTargetTargetWidthPercentage,
&kSideBySide,
"drop_target_width_percentage",
30);
BASE_FEATURE_PARAM(int,
kSideBySideDropTargetHideForOSWidth,
&kSideBySide,
"drop_target_hide_for_os_width",
#if BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_WIN)
32
#elif BUILDFLAG(IS_LINUX)
50
#else
0
#endif
);
BASE_FEATURE(kSideBySideDropTargetNudge,
"SideBySideDropTargetNudge",
base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE_PARAM(int,
kSideBySideDropTargetNudgeMinWidth,
&kSideBySideDropTargetNudge,
"drop_target_nudge_min_width",
80);
BASE_FEATURE_PARAM(int,
kSideBySideDropTargetNudgeMaxWidth,
&kSideBySideDropTargetNudge,
"drop_target_nudge_max_width",
200);
BASE_FEATURE_PARAM(int,
kSideBySideDropTargetNudgeTargetWidthPercentage,
&kSideBySideDropTargetNudge,
"drop_target_nudge_width_percentage",
5);
BASE_FEATURE_PARAM(int,
kSideBySideDropTargetNudgeToFullMinWidth,
&kSideBySideDropTargetNudge,
"drop_target_nudge_to_full_min_width",
80);
BASE_FEATURE_PARAM(int,
kSideBySideDropTargetNudgeToFullMaxWidth,
&kSideBySideDropTargetNudge,
"drop_target_nudge_to_full_max_width",
600);
BASE_FEATURE_PARAM(int,
kSideBySideDropTargetNudgeToFullTargetWidthPercentage,
&kSideBySideDropTargetNudge,
"drop_target_nudge_to_full_width_percentage",
20);
BASE_FEATURE_PARAM(double,
kSideBySideDropTargetNudgeShowRatio,
&kSideBySideDropTargetNudge,
"drop_target_nudge_show_ratio",
0.4f);
constexpr base::FeatureParam<MiniToolbarActiveConfiguration>::Option
kMiniToolbarActiveConfigurationOptions[] = {
{MiniToolbarActiveConfiguration::Hide, "hide"},
{MiniToolbarActiveConfiguration::ShowMenu, "showmenu"},
{MiniToolbarActiveConfiguration::ShowClose, "showclose"}};
// The active configuration for the mini toolbar on active view of a split.
BASE_FEATURE_ENUM_PARAM(MiniToolbarActiveConfiguration,
kSideBySideMiniToolbarActiveConfiguration,
&kSideBySide,
"mini_toolbar_active_config",
MiniToolbarActiveConfiguration::ShowMenu,
&kMiniToolbarActiveConfigurationOptions);
BASE_FEATURE_PARAM(int,
kSideBySideSnapDistance,
&kSideBySide,
"snap_distance",
5);
// When enabled along with SideBySide flag, split tabs will be restored on
// startup.
BASE_FEATURE(kSideBySideSessionRestore,
"SideBySideSessionRestore",
base::FEATURE_DISABLED_BY_DEFAULT);
bool IsRestoringSplitViewEnabled() {
return base::FeatureList::IsEnabled(features::kSideBySide) &&
base::FeatureList::IsEnabled(features::kSideBySideSessionRestore);
}
BASE_FEATURE(kSideBySideLinkMenuNewBadge,
"SideBySideLinkMenuNewBadge",
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kSidePanelResizing,
"SidePanelResizing",
base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kTabDuplicateMetrics,
"TabDuplicateMetrics",
base::FEATURE_ENABLED_BY_DEFAULT);
// Enables buttons when scrolling the tabstrip https://crbug.com/951078
BASE_FEATURE(kTabScrollingButtonPosition,
"TabScrollingButtonPosition",
base::FEATURE_ENABLED_BY_DEFAULT);
// Enables tabs to be frozen when collapsed.
// https://crbug.com/1110108
BASE_FEATURE(kTabGroupsCollapseFreezing,
"TabGroupsCollapseFreezing",
base::FEATURE_ENABLED_BY_DEFAULT);
// Enables preview images in tab-hover cards.
// https://crbug.com/928954
BASE_FEATURE(kTabHoverCardImages,
"TabHoverCardImages",
#if BUILDFLAG(IS_MAC)
base::FEATURE_DISABLED_BY_DEFAULT
#else
base::FEATURE_ENABLED_BY_DEFAULT
#endif
);
BASE_FEATURE(kTabModalUsesDesktopWidget,
"TabModalUsesDesktopWidget",
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kTabOrganization,
"TabOrganization",
base::FEATURE_DISABLED_BY_DEFAULT);
bool IsTabOrganization() {
return base::FeatureList::IsEnabled(features::kTabOrganization);
}
BASE_FEATURE_PARAM(base::TimeDelta,
kTabOrganizationTriggerPeriod,
&kTabOrganization,
"trigger_period",
base::Hours(6));
BASE_FEATURE_PARAM(double,
kTabOrganizationTriggerBackoffBase,
&kTabOrganization,
"backoff_base",
2.0);
BASE_FEATURE_PARAM(double,
kTabOrganizationTriggerThreshold,
&kTabOrganization,
"trigger_threshold",
7.0);
BASE_FEATURE_PARAM(double,
kTabOrganizationTriggerSensitivityThreshold,
&kTabOrganization,
"trigger_sensitivity_threshold",
0.5);
BASE_FEATURE_PARAM(bool,
KTabOrganizationTriggerDemoMode,
&kTabOrganization,
"trigger_demo_mode",
false);
BASE_FEATURE(kTabstripDeclutter,
"TabstripDeclutter",
base::FEATURE_DISABLED_BY_DEFAULT);
bool IsTabstripDeclutterEnabled() {
return base::FeatureList::IsEnabled(features::kTabstripDeclutter);
}
BASE_FEATURE_PARAM(base::TimeDelta,
kTabstripDeclutterStaleThresholdDuration,
&kTabstripDeclutter,
"stale_threshold_duration",
base::Days(7));
BASE_FEATURE_PARAM(base::TimeDelta,
kTabstripDeclutterTimerInterval,
&kTabstripDeclutter,
"declutter_timer_interval",
base::Minutes(10));
BASE_FEATURE_PARAM(base::TimeDelta,
kTabstripDeclutterNudgeTimerInterval,
&kTabstripDeclutter,
"nudge_timer_interval",
base::Minutes(6 * 60));
BASE_FEATURE(kTabstripDedupe,
"TabstripDedupe",
base::FEATURE_DISABLED_BY_DEFAULT);
bool IsTabstripDedupeEnabled() {
return IsTabstripDeclutterEnabled() &&
base::FeatureList::IsEnabled(features::kTabstripDedupe);
}
BASE_FEATURE(kTabOrganizationAppMenuItem,
"TabOrganizationAppMenuItem",
base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kTabOrganizationModelStrategy,
"TabOrganizationModelStrategy",
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kTabOrganizationUserInstruction,
"TabOrganizationUserInstruction",
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kTabOrganizationEnableNudgeForEnterprise,
"TabOrganizationEnableNudgeForEnterprise",
base::FEATURE_DISABLED_BY_DEFAULT);
// Enables creating a web app window when tearing off a tab with a url
// controlled by a web app.
BASE_FEATURE(kTearOffWebAppTabOpensWebAppWindow,
"TearOffWebAppTabOpensWebAppWindow",
base::FEATURE_DISABLED_BY_DEFAULT);
#if !BUILDFLAG(IS_ANDROID)
BASE_FEATURE(kThreeButtonPasswordSaveDialog,
"ThreeButtonPasswordSaveDialog",
base::FEATURE_DISABLED_BY_DEFAULT);
#endif
// Enables enterprise profile badging for managed profiles on the toolbar
// avatar. On managed profiles, a "Work" or "School" label will be used in the
// toolbar.
BASE_FEATURE(kEnterpriseProfileBadgingForAvatar,
"EnterpriseProfileBadgingForAvatar",
base::FEATURE_ENABLED_BY_DEFAULT);
// Enables enterprise profile badging for managed profiles on the toolbar avatar
// and in the profile menu. On managed profiles, a building icon will be used as
// a badge in the profile menu.
BASE_FEATURE(kEnterpriseProfileBadgingForMenu,
"EnterpriseProfileBadgingForMenu",
base::FEATURE_ENABLED_BY_DEFAULT);
// Enables enterprise profile badging for managed profiles on the toolbar avatar
// and in the profile menu when the policies are set. This acts as a kill
// switch. This has no effect if `kEnterpriseProfileBadging` is enabled.
BASE_FEATURE(kEnterpriseProfileBadgingPolicies,
"EnterpriseProfileBadgingPolicies",
base::FEATURE_ENABLED_BY_DEFAULT);
// Enables enterprise badging for managed bnpwser on the new tab page footer.
// On managed browsers, a building icon and "Managed by <domain>" string will be
// shown in the footer, unless the icon and label are customized by the admin.
BASE_FEATURE(kEnterpriseBadgingForNtpFooter,
"EnterpriseBadgingForNtpFooter",
base::FEATURE_DISABLED_BY_DEFAULT);
// Enables the management notice in the NTP footer if the custom policies are
// set. This acts as a kill switch for "EnterpriseCustomLabelForBrowser" and
// "EnterpriseLogoUrlForBrowser".
BASE_FEATURE(kNTPFooterBadgingPolicies,
"NTPFooterBadgingPolicies",
base::FEATURE_ENABLED_BY_DEFAULT);
// Enables showing the EnterpriseCustomLabel` instead of the cloud policy
// manager in the managed disclaimer "Managed by..." in the profile and app
// menus.
BASE_FEATURE(kEnterpriseManagementDisclaimerUsesCustomLabel,
"EnterpriseManagementDisclaimerUsesCustomLabel",
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kManagedProfileRequiredInterstitial,
"ManagedProfileRequiredInterstitial",
base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kEnableAppMenuButtonColorsForDefaultAvatarButtonStates,
"EnableAppMenuButtonColorsForDefaultAvatarButtonStates",
base::FEATURE_ENABLED_BY_DEFAULT);
// Enables a web-based tab strip. See https://crbug.com/989131. Note this
// feature only works when the ENABLE_WEBUI_TAB_STRIP buildflag is enabled.
BASE_FEATURE(kWebUITabStrip,
"WebUITabStrip",
#if BUILDFLAG(IS_CHROMEOS)
base::FEATURE_ENABLED_BY_DEFAULT
#else
base::FEATURE_DISABLED_BY_DEFAULT
#endif
);
// The default value of this flag is aligned with platform behavior to handle
// context menu with touch.
// TODO(crbug.com/40796475): Enable this flag for all platforms after launch.
BASE_FEATURE(kWebUITabStripContextMenuAfterTap,
"WebUITabStripContextMenuAfterTap",
#if BUILDFLAG(IS_CHROMEOS)
base::FEATURE_DISABLED_BY_DEFAULT
#else
base::FEATURE_ENABLED_BY_DEFAULT
#endif
);
#if BUILDFLAG(IS_MAC)
BASE_FEATURE(kViewsFirstRunDialog,
"ViewsFirstRunDialog",
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kViewsJSAppModalDialog,
"ViewsJSAppModalDialog",
base::FEATURE_DISABLED_BY_DEFAULT);
#endif
#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS)
BASE_FEATURE(kUsePortalAccentColor,
"UsePortalAccentColor",
base::FEATURE_ENABLED_BY_DEFAULT);
#endif
BASE_FEATURE(kPageSpecificDataDialogRelatedInstalledAppsSection,
"PageSpecificDataDialogRelatedInstalledAppsSection",
base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kEnableManagementPromotionBanner,
"EnableManagementPromotionBanner",
base::FEATURE_ENABLED_BY_DEFAULT);
#if BUILDFLAG(IS_CHROMEOS)
BASE_FEATURE(kEnablePolicyPromotionBanner,
"EnablePolicyPromotionBanner",
base::FEATURE_ENABLED_BY_DEFAULT);
#else
BASE_FEATURE(kEnablePolicyPromotionBanner,
"EnablePolicyPromotionBanner",
base::FEATURE_ENABLED_BY_DEFAULT);
#endif
BASE_FEATURE(kInlineFullscreenPerfExperiment,
"InlineFullscreenPerfExperiment",
base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kPageActionsMigration,
"PageActionsMigration",
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE_PARAM(bool,
kPageActionsMigrationEnableAll,
&kPageActionsMigration,
"enable_all",
false);
BASE_FEATURE_PARAM(bool,
kPageActionsMigrationLensOverlay,
&kPageActionsMigration,
"lens_overlay",
false);
BASE_FEATURE_PARAM(bool,
kPageActionsMigrationMemorySaver,
&kPageActionsMigration,
"memory_saver",
false);
BASE_FEATURE_PARAM(bool,
kPageActionsMigrationTranslate,
&kPageActionsMigration,
"translate",
false);
BASE_FEATURE_PARAM(bool,
kPageActionsMigrationIntentPicker,
&kPageActionsMigration,
"intent_picker",
false);
BASE_FEATURE_PARAM(bool,
kPageActionsMigrationZoom,
&kPageActionsMigration,
"zoom",
false);
BASE_FEATURE_PARAM(bool,
kPageActionsMigrationOfferNotification,
&kPageActionsMigration,
"offer_notification",
false);
BASE_FEATURE_PARAM(bool,
kPageActionsMigrationFileSystemAccess,
&kPageActionsMigration,
"file_system_access",
false);
BASE_FEATURE_PARAM(bool,
kPageActionsMigrationPwaInstall,
&kPageActionsMigration,
"pwa_install",
false);
BASE_FEATURE_PARAM(bool,
kPageActionsMigrationPriceInsights,
&kPageActionsMigration,
"price_insights",
false);
BASE_FEATURE_PARAM(bool,
kPageActionsMigrationDiscounts,
&kPageActionsMigration,
"discounts",
false);
BASE_FEATURE_PARAM(bool,
kPageActionsMigrationManagePasswords,
&kPageActionsMigration,
"manage_passwords",
false);
BASE_FEATURE_PARAM(bool,
kPageActionsMigrationCookieControls,
&kPageActionsMigration,
"cookie_controls",
false);
BASE_FEATURE_PARAM(bool,
kPageActionsMigrationAutofillAddress,
&kPageActionsMigration,
"autofill_address",
false);
BASE_FEATURE_PARAM(bool,
kPageActionsMigrationFind,
&kPageActionsMigration,
"find",
false);
BASE_FEATURE_PARAM(bool,
kPageActionsMigrationCollaborationMessaging,
&kPageActionsMigration,
"collaboration_messaging",
false);
BASE_FEATURE_PARAM(bool,
kPageActionsMigrationPriceTracking,
&kPageActionsMigration,
"price_tracking",
false);
BASE_FEATURE_PARAM(bool,
kPageActionsMigrationAutofillMandatoryReauth,
&kPageActionsMigration,
"mandatory_reauth",
false);
BASE_FEATURE_PARAM(bool,
kPageActionsMigrationClickToCall,
&kPageActionsMigration,
"click_to_call",
false);
BASE_FEATURE(kSavePasswordsContextualUi,
"SavePasswordsContextualUi",
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kCompositorLoadingAnimations,
"CompositorLoadingAnimations",
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kByDateHistoryInSidePanel,
"ByDateHistoryInSidePanel",
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kTabStripBrowserApi,
"TabStripBrowserApi",
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kTabstripComboButton,
"TabstripComboButton",
base::FEATURE_DISABLED_BY_DEFAULT);
// This serves as a "kill-switch" for migrating the Tab Search feature to be a
// toolbar button for non-ChromeOS users in the US.
BASE_FEATURE(kLaunchedTabSearchToolbarButton,
"LaunchedTabSearchToolbarButton",
#if BUILDFLAG(IS_CHROMEOS)
base::FEATURE_DISABLED_BY_DEFAULT
#else
base::FEATURE_ENABLED_BY_DEFAULT
#endif
);
BASE_FEATURE_PARAM(bool,
kTabSearchToolbarButton,
&kTabstripComboButton,
"tab_search_toolbar_button",
true);
static std::string GetCountryCode() {
if (!g_browser_process || !g_browser_process->variations_service()) {
return std::string();
}
std::string country_code =
g_browser_process->variations_service()->GetStoredPermanentCountry();
if (country_code.empty()) {
country_code = g_browser_process->variations_service()->GetLatestCountry();
}
return country_code;
}
bool HasTabSearchToolbarButton() {
static const bool is_tab_search_moving = [] {
if (GetCountryCode() == "us" &&
base::FeatureList::IsEnabled(
features::kLaunchedTabSearchToolbarButton)) {
return true;
}
return base::FeatureList::IsEnabled(features::kTabstripComboButton) &&
features::kTabSearchToolbarButton.Get();
}();
return is_tab_search_moving;
}
BASE_FEATURE(kNonMilestoneUpdateToast,
"NonMilestoneUpdateToast",
base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kBookmarkTabGroupConversion,
"BookmarkTabGroupConversion",
base::FEATURE_DISABLED_BY_DEFAULT);
bool IsBookmarkTabGroupConversionEnabled() {
return base::FeatureList::IsEnabled(kBookmarkTabGroupConversion);
}
#if BUILDFLAG(IS_MAC) || BUILDFLAG(IS_WIN) || BUILDFLAG(IS_LINUX)
BASE_FEATURE(kSessionRestoreInfobar,
"SessionRestoreInfobar",
base::FEATURE_DISABLED_BY_DEFAULT);
#endif
#if !BUILDFLAG(IS_ANDROID)
BASE_FEATURE(kNewTabAddsToActiveGroup,
"NewTabAddsToActiveGroup",
base::FEATURE_DISABLED_BY_DEFAULT);
bool IsNewTabAddsToActiveGroupEnabled() {
return base::FeatureList::IsEnabled(kNewTabAddsToActiveGroup);
}
#endif // !BUILDFLAG(IS_ANDROID)
} // namespace features