| // 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. |
| |
| // This file defines the browser-specific base::FeatureList features that are |
| // limited to top chrome UI. |
| |
| #ifndef CHROME_BROWSER_UI_UI_FEATURES_H_ |
| #define CHROME_BROWSER_UI_UI_FEATURES_H_ |
| |
| #include "base/feature_list.h" |
| #include "base/metrics/field_trial_params.h" |
| #include "build/branding_buildflags.h" |
| #include "build/build_config.h" |
| #include "build/chromeos_buildflags.h" |
| #include "chrome/common/buildflags.h" |
| #include "extensions/buildflags/buildflags.h" |
| |
| namespace features { |
| |
| // All features in alphabetical order. The features should be documented |
| // alongside the definition of their values in the .cc file. |
| |
| // TODO(crbug.com/40598679): Remove this when the tab dragging |
| // interactive_ui_tests pass on Wayland. |
| BASE_DECLARE_FEATURE(kAllowWindowDragUsingSystemDragDrop); |
| |
| BASE_DECLARE_FEATURE(kAllowEyeDropperWGCScreenCapture); |
| |
| #if !defined(ANDROID) |
| BASE_DECLARE_FEATURE(kCastAppMenuExperiment); |
| extern const base::FeatureParam<bool> kCastListedFirst; |
| #endif |
| |
| BASE_DECLARE_FEATURE(kWebAppIconInTitlebar); |
| |
| BASE_DECLARE_FEATURE(kChromeLabs); |
| extern const char kChromeLabsActivationParameterName[]; |
| extern const base::FeatureParam<int> kChromeLabsActivationPercentage; |
| |
| BASE_DECLARE_FEATURE(kCloseOmniboxPopupOnInactiveAreaClick); |
| |
| BASE_DECLARE_FEATURE(kDefaultBrowserPromptRefresh); |
| BASE_DECLARE_FEATURE(kDefaultBrowserPromptRefreshTrial); |
| |
| // String representation of the study group for running a synthetic trial. |
| extern const base::FeatureParam<std::string> |
| kDefaultBrowserPromptRefreshStudyGroup; |
| |
| // Whether to show the default browser info bar prompt. |
| extern const base::FeatureParam<bool> kShowDefaultBrowserInfoBar; |
| |
| // Whether to show the default browser app menu chip prompt. |
| extern const base::FeatureParam<bool> kShowDefaultBrowserAppMenuChip; |
| |
| // Whether to show the default browser app menu item anytime the browser isn't |
| // default, even if the app menu chip prompt isn't enabled. |
| extern const base::FeatureParam<bool> kShowDefaultBrowserAppMenuItem; |
| |
| // Whether to show the updated info bar strings. |
| extern const base::FeatureParam<bool> kUpdatedInfoBarCopy; |
| |
| // Base duration after which the user may be remprompted. |
| extern const base::FeatureParam<base::TimeDelta> kRepromptDuration; |
| |
| // Maximum number of times a user will be prompted. When set to a negative |
| // value, the user will be prompted indefinitely. |
| extern const base::FeatureParam<int> kMaxPromptCount; |
| |
| // Exponential backoff multiplier for the reprompt duration. |
| extern const base::FeatureParam<int> kRepromptDurationMultiplier; |
| |
| // The duration after which the app menu prompt should not longer be shown. |
| extern const base::FeatureParam<base::TimeDelta> kDefaultBrowserAppMenuDuration; |
| |
| // Whether the app menu chip should use more prominent colors. |
| extern const base::FeatureParam<bool> kAppMenuChipColorPrimary; |
| |
| BASE_DECLARE_FEATURE(kExtensionsMenuInAppMenu); |
| bool IsExtensionMenuInRootAppMenu(); |
| |
| #if !defined(ANDROID) |
| BASE_DECLARE_FEATURE(kAccessCodeCastUI); |
| #endif |
| |
| BASE_DECLARE_FEATURE(kEvDetailsInPageInfo); |
| |
| #if !BUILDFLAG(IS_ANDROID) && BUILDFLAG(GOOGLE_CHROME_BRANDING) |
| BASE_DECLARE_FEATURE(kGetTheMostOutOfChrome); |
| |
| BASE_DECLARE_FEATURE(kIOSPromoAddressBubble); |
| |
| BASE_DECLARE_FEATURE(kIOSPromoBookmarkBubble); |
| // This enum lists the possible params for the kIOSPromoBookmarkBubble promo. |
| // The first is the launch candidate, the other one is for debugging/testing. |
| enum class IOSPromoBookmarkBubbleActivation { |
| kContextual, |
| kAlwaysShowWithBookmarkBubble, |
| }; |
| extern const base::FeatureParam<IOSPromoBookmarkBubbleActivation> |
| kIOSPromoBookmarkBubbleActivationParam; |
| #endif |
| |
| #if !BUILDFLAG(IS_ANDROID) |
| BASE_DECLARE_FEATURE(kHaTSWebUI); |
| #endif |
| |
| #if !BUILDFLAG(IS_ANDROID) |
| BASE_DECLARE_FEATURE(kKeyboardAndPointerLockPrompt); |
| #endif |
| |
| #if BUILDFLAG(ENABLE_EXTENSIONS) |
| BASE_DECLARE_FEATURE(kLightweightExtensionOverrideConfirmations); |
| #endif |
| |
| BASE_DECLARE_FEATURE(kPreloadTopChromeWebUI); |
| // This enum entry values must be in sync with |
| // WebUIContentsPreloadManager::PreloadMode. |
| enum class PreloadTopChromeWebUIMode { |
| kPreloadOnWarmup = 0, |
| kPreloadOnMakeContents = 1 |
| }; |
| extern const base::FeatureParam<PreloadTopChromeWebUIMode> |
| kPreloadTopChromeWebUIMode; |
| |
| #if !BUILDFLAG(IS_ANDROID) |
| BASE_DECLARE_FEATURE(kPressAndHoldEscToExitBrowserFullscreen); |
| #endif |
| |
| BASE_DECLARE_FEATURE(kResponsiveToolbar); |
| |
| BASE_DECLARE_FEATURE(kScrollableTabStrip); |
| extern const char kMinimumTabWidthFeatureParameterName[]; |
| |
| BASE_DECLARE_FEATURE(kScrollableTabStripWithDragging); |
| extern const char kTabScrollingWithDraggingModeName[]; |
| |
| BASE_DECLARE_FEATURE(kSplitTabStrip); |
| BASE_DECLARE_FEATURE(kTabStripCollectionStorage); |
| |
| BASE_DECLARE_FEATURE(kTabScrollingButtonPosition); |
| extern const char kTabScrollingButtonPositionParameterName[]; |
| |
| BASE_DECLARE_FEATURE(kScrollableTabStripOverflow); |
| extern const char kScrollableTabStripOverflowModeName[]; |
| |
| BASE_DECLARE_FEATURE(kSidePanelWebView); |
| |
| #if !defined(ANDROID) |
| BASE_DECLARE_FEATURE(kSidePanelCompanionDefaultPinned); |
| |
| BASE_DECLARE_FEATURE(kSidePanelPinning); |
| |
| bool IsSidePanelPinningEnabled(); |
| #endif |
| |
| BASE_DECLARE_FEATURE(kSidePanelJourneysQueryless); |
| BASE_DECLARE_FEATURE(kSidePanelSearchCompanion); |
| |
| BASE_DECLARE_FEATURE(kSideSearch); |
| BASE_DECLARE_FEATURE(kSideSearchFeedback); |
| BASE_DECLARE_FEATURE(kSearchWebInSidePanel); |
| |
| BASE_DECLARE_FEATURE(kSideSearchAutoTriggering); |
| extern const base::FeatureParam<int> kSideSearchAutoTriggeringReturnCount; |
| |
| BASE_DECLARE_FEATURE(kTabGroupsCollapseFreezing); |
| |
| BASE_DECLARE_FEATURE(kTabHoverCardImages); |
| |
| // These parameters control how long the hover card system waits before |
| // requesting a preview image from a tab where no preview image is available. |
| // Values are in ms. |
| extern const char kTabHoverCardImagesNotReadyDelayParameterName[]; |
| extern const char kTabHoverCardImagesLoadingDelayParameterName[]; |
| extern const char kTabHoverCardImagesLoadedDelayParameterName[]; |
| |
| // Determines how long to wait during a hover card slide transition before a |
| // placeholder image is displayed via crossfade. |
| // -1: disable crossfade entirely |
| // 0: show placeholder immediately |
| // 1: show placeholder when the card lands on the new tab |
| // between 0 and 1: show at a percentage of transition |
| // |
| // Note: crossfade is automatically disabled if animations are disabled at the |
| // OS level (e.g. for accessibility). |
| extern const char kTabHoverCardImagesCrossfadePreviewAtParameterName[]; |
| |
| // Adds an amount of time (in ms) to the show delay when tabs are max width - |
| // typically when there are less than 5 or 6 tabs in a browser window. |
| extern const char kTabHoverCardAdditionalMaxWidthDelay[]; |
| |
| BASE_DECLARE_FEATURE(kTabOrganization); |
| bool IsTabOrganization(); |
| |
| BASE_DECLARE_FEATURE(kMultiTabOrganization); |
| |
| BASE_DECLARE_FEATURE(kTabReorganization); |
| |
| // The target (and minimum) interval between proactive nudge triggers. Measured |
| // against a clock that only runs while Chrome is in the foreground. |
| extern const base::FeatureParam<base::TimeDelta> kTabOrganizationTriggerPeriod; |
| |
| // The base to use for the trigger logic's exponential backoff. |
| extern const base::FeatureParam<double> kTabOrganizationTriggerBackoffBase; |
| |
| // The minimum score threshold for proactive nudge triggering to occur. |
| extern const base::FeatureParam<double> kTabOrganizationTriggerThreshold; |
| |
| // The maximum sensitivity score for a tab to contribute to trigger scoring. |
| extern const base::FeatureParam<double> |
| kTabOrganizationTriggerSensitivityThreshold; |
| |
| // Enable 'demo mode' for Tab Organization triggering, which triggers much more |
| // predictably and frequently. |
| extern const base::FeatureParam<bool> KTabOrganizationTriggerDemoMode; |
| |
| BASE_DECLARE_FEATURE(kTabSearchChevronIcon); |
| |
| BASE_DECLARE_FEATURE(kTabSearchFeedback); |
| |
| BASE_DECLARE_FEATURE(kTabSearchFuzzySearch); |
| |
| extern const char kTabSearchSearchThresholdName[]; |
| |
| // Setting this to true will ignore the distance parameter when finding matches. |
| // This means that it will not matter where in the string the pattern occurs. |
| extern const base::FeatureParam<bool> kTabSearchSearchIgnoreLocation; |
| |
| extern const char kTabSearchAlsoShowMediaTabsinOpenTabsSectionParameterName[]; |
| |
| // Determines how close the match must be to the beginning of the string. Eg a |
| // distance of 100 and threshold of 0.8 would require a perfect match to be |
| // within 80 characters of the beginning of the string. |
| extern const base::FeatureParam<int> kTabSearchSearchDistance; |
| |
| // This determines how strong the match should be for the item to be included in |
| // the result set. Eg a threshold of 0.0 requires a perfect match, 1.0 would |
| // match anything. Permissible values are [0.0, 1.0]. |
| extern const base::FeatureParam<double> kTabSearchSearchThreshold; |
| |
| // These are the hardcoded minimum and maximum search threshold values for |
| // |kTabSearchSearchThreshold|. |
| constexpr double kTabSearchSearchThresholdMin = 0.0; |
| constexpr double kTabSearchSearchThresholdMax = 1.0; |
| |
| // Controls the weight associated with a tab's title for filtering and ordering |
| // list items. |
| extern const base::FeatureParam<double> kTabSearchTitleWeight; |
| |
| // Controls the weight associated with a tab's hostname when filering and |
| // odering list items. |
| extern const base::FeatureParam<double> kTabSearchHostnameWeight; |
| |
| // Controls the weight associated with a tab's group title filering and |
| // odering list items |
| extern const base::FeatureParam<double> kTabSearchGroupTitleWeight; |
| |
| // Whether to move the active tab to the bottom of the list. |
| extern const base::FeatureParam<bool> kTabSearchMoveActiveTabToBottom; |
| |
| BASE_DECLARE_FEATURE(kTabSearchRecentlyClosed); |
| |
| // Default number of recently closed entries to display by default when no |
| // search text is provided. |
| extern const base::FeatureParam<int> |
| kTabSearchRecentlyClosedDefaultItemDisplayCount; |
| |
| // A threshold of recently closed tabs after which to stop adding recently |
| // closed item data to the profile data payload should the minimum display |
| // count have been met. |
| extern const base::FeatureParam<int> kTabSearchRecentlyClosedTabCountThreshold; |
| |
| BASE_DECLARE_FEATURE(kTearOffWebAppTabOpensWebAppWindow); |
| |
| BASE_DECLARE_FEATURE(kToolbarPinning); |
| |
| bool IsToolbarPinningEnabled(); |
| |
| BASE_DECLARE_FEATURE(kTopChromeWebUIUsesSpareRenderer); |
| |
| #if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) |
| BASE_DECLARE_FEATURE(kUpdateTextOptions); |
| extern const base::FeatureParam<int> kUpdateTextOptionNumber; |
| #endif |
| |
| BASE_DECLARE_FEATURE(kEnterpriseProfileBadging); |
| BASE_DECLARE_FEATURE(kEnterpriseUpdatedProfileCreationScreen); |
| |
| BASE_DECLARE_FEATURE(kWebUIBubblePerProfilePersistence); |
| |
| BASE_DECLARE_FEATURE(kWebUITabStrip); |
| |
| // Controls whether the context menu is shown on a touch press or a touch |
| // tap gesture on the WebUI Tab Strip. |
| BASE_DECLARE_FEATURE(kWebUITabStripContextMenuAfterTap); |
| |
| #if BUILDFLAG(IS_CHROMEOS) |
| BASE_DECLARE_FEATURE(kChromeOSTabSearchCaptionButton); |
| #endif |
| |
| // Cocoa to views migration. |
| #if BUILDFLAG(IS_MAC) |
| BASE_DECLARE_FEATURE(kLocationPermissionsExperiment); |
| |
| BASE_DECLARE_FEATURE(kViewsFirstRunDialog); |
| BASE_DECLARE_FEATURE(kViewsTaskManager); |
| BASE_DECLARE_FEATURE(kViewsJSAppModalDialog); |
| |
| int GetLocationPermissionsExperimentBubblePromptLimit(); |
| int GetLocationPermissionsExperimentLabelPromptLimit(); |
| #endif |
| |
| BASE_DECLARE_FEATURE(kStopLoadingAnimationForHiddenWindow); |
| |
| } // namespace features |
| |
| #endif // CHROME_BROWSER_UI_UI_FEATURES_H_ |