Avi Drissman | 4a8573c | 2022-09-09 19:35:54 | [diff] [blame] | 1 | // Copyright 2019 The Chromium Authors |
Charlene Yan | 0724dc56 | 2019-04-12 17:57:41 | [diff] [blame] | 2 | // Use of this source code is governed by a BSD-style license that can be |
| 3 | // found in the LICENSE file. |
| 4 | |
| 5 | // This file defines the browser-specific base::FeatureList features that are |
| 6 | // limited to top chrome UI. |
| 7 | |
| 8 | #ifndef CHROME_BROWSER_UI_UI_FEATURES_H_ |
| 9 | #define CHROME_BROWSER_UI_UI_FEATURES_H_ |
| 10 | |
| 11 | #include "base/feature_list.h" |
Thomas Lukaszewicz | 31c038da | 2020-09-24 22:49:07 | [diff] [blame] | 12 | #include "base/metrics/field_trial_params.h" |
Dana Fried | 16e9d9c | 2021-01-28 09:32:28 | [diff] [blame] | 13 | #include "build/branding_buildflags.h" |
Charlene Yan | 0724dc56 | 2019-04-12 17:57:41 | [diff] [blame] | 14 | #include "build/build_config.h" |
Yuta Hijikata | 40b891d | 2020-11-27 09:05:01 | [diff] [blame] | 15 | #include "build/chromeos_buildflags.h" |
Peter Boström | 92add81d | 2019-08-12 22:14:24 | [diff] [blame] | 16 | #include "chrome/common/buildflags.h" |
Devlin Cronin | 8363698 | 2022-09-15 20:32:22 | [diff] [blame] | 17 | #include "extensions/buildflags/buildflags.h" |
Charlene Yan | 0724dc56 | 2019-04-12 17:57:41 | [diff] [blame] | 18 | |
| 19 | namespace features { |
| 20 | |
| 21 | // All features in alphabetical order. The features should be documented |
| 22 | // alongside the definition of their values in the .cc file. |
| 23 | |
Alison Gale | 9130192 | 2024-04-15 19:35:27 | [diff] [blame] | 24 | // TODO(crbug.com/40598679): Remove this when the tab dragging |
Max Ihlenfeldt | 6f51c1c | 2022-01-25 23:58:59 | [diff] [blame] | 25 | // interactive_ui_tests pass on Wayland. |
Daniel Cheng | 0b6369f | 2022-09-20 17:59:39 | [diff] [blame] | 26 | BASE_DECLARE_FEATURE(kAllowWindowDragUsingSystemDragDrop); |
Max Ihlenfeldt | 6f51c1c | 2022-01-25 23:58:59 | [diff] [blame] | 27 | |
Luis Juan Sanchez Padilla | 949923c | 2023-08-25 16:07:41 | [diff] [blame] | 28 | BASE_DECLARE_FEATURE(kAllowEyeDropperWGCScreenCapture); |
| 29 | |
Daniel Cheng | 0b6369f | 2022-09-20 17:59:39 | [diff] [blame] | 30 | BASE_DECLARE_FEATURE(kChromeLabs); |
Elaine Chien | d674b5b | 2023-07-26 20:22:46 | [diff] [blame] | 31 | extern const char kChromeLabsActivationParameterName[]; |
| 32 | extern const base::FeatureParam<int> kChromeLabsActivationPercentage; |
Elaine Chien | 29fce99 | 2020-12-01 17:44:34 | [diff] [blame] | 33 | |
Naman Narula | 572d88a0 | 2023-11-03 17:15:10 | [diff] [blame] | 34 | BASE_DECLARE_FEATURE(kCloseOmniboxPopupOnInactiveAreaClick); |
| 35 | |
Charles Meng | 5997941 | 2024-02-22 18:47:42 | [diff] [blame] | 36 | BASE_DECLARE_FEATURE(kDefaultBrowserPromptRefresh); |
Alison Gale | 60cdbc82 | 2024-03-28 22:20:25 | [diff] [blame] | 37 | BASE_DECLARE_FEATURE(kDefaultBrowserPromptRefreshTrial); |
| 38 | |
| 39 | // String representation of the study group for running a synthetic trial. |
| 40 | extern const base::FeatureParam<std::string> |
| 41 | kDefaultBrowserPromptRefreshStudyGroup; |
Charles Meng | 5997941 | 2024-02-22 18:47:42 | [diff] [blame] | 42 | |
Alison Gale | d7f2598d | 2024-03-15 15:39:18 | [diff] [blame] | 43 | // Whether to show the default browser info bar prompt. |
| 44 | extern const base::FeatureParam<bool> kShowDefaultBrowserInfoBar; |
| 45 | |
| 46 | // Whether to show the default browser app menu chip prompt. |
| 47 | extern const base::FeatureParam<bool> kShowDefaultBrowserAppMenuChip; |
| 48 | |
Alison Gale | 9b585ba | 2024-04-12 01:07:44 | [diff] [blame] | 49 | // Whether to show the default browser app menu item anytime the browser isn't |
| 50 | // default, even if the app menu chip prompt isn't enabled. |
| 51 | extern const base::FeatureParam<bool> kShowDefaultBrowserAppMenuItem; |
| 52 | |
Charles Meng | 5997941 | 2024-02-22 18:47:42 | [diff] [blame] | 53 | // Whether to show the updated info bar strings. |
| 54 | extern const base::FeatureParam<bool> kUpdatedInfoBarCopy; |
| 55 | |
| 56 | // Base duration after which the user may be remprompted. |
| 57 | extern const base::FeatureParam<base::TimeDelta> kRepromptDuration; |
| 58 | |
Charles Meng | 7e9ad6c | 2024-03-12 21:03:33 | [diff] [blame] | 59 | // Maximum number of times a user will be prompted. When set to a negative |
| 60 | // value, the user will be prompted indefinitely. |
Charles Meng | 5997941 | 2024-02-22 18:47:42 | [diff] [blame] | 61 | extern const base::FeatureParam<int> kMaxPromptCount; |
| 62 | |
| 63 | // Exponential backoff multiplier for the reprompt duration. |
| 64 | extern const base::FeatureParam<int> kRepromptDurationMultiplier; |
| 65 | |
Charles Meng | 38b43cd1 | 2024-04-11 21:09:45 | [diff] [blame] | 66 | // The duration after which the app menu prompt should not longer be shown. |
| 67 | extern const base::FeatureParam<base::TimeDelta> kDefaultBrowserAppMenuDuration; |
| 68 | |
Charles Meng | 35bfa238 | 2024-04-19 23:20:37 | [diff] [blame] | 69 | // Whether the app menu chip should use more prominent colors. |
| 70 | extern const base::FeatureParam<bool> kAppMenuChipColorPrimary; |
| 71 | |
Justin Lulejian | 54634a8 | 2023-03-09 23:47:46 | [diff] [blame] | 72 | BASE_DECLARE_FEATURE(kExtensionsMenuInAppMenu); |
Keren Zhu | ab97ffe | 2023-09-23 00:06:14 | [diff] [blame] | 73 | bool IsExtensionMenuInRootAppMenu(); |
Justin Lulejian | 54634a8 | 2023-03-09 23:47:46 | [diff] [blame] | 74 | |
Brian Malcolm | bf99d99 | 2021-10-06 01:51:21 | [diff] [blame] | 75 | #if !defined(ANDROID) |
Daniel Cheng | 0b6369f | 2022-09-20 17:59:39 | [diff] [blame] | 76 | BASE_DECLARE_FEATURE(kAccessCodeCastUI); |
Benjamin Zielinski | 11f187f8 | 2021-07-12 23:51:52 | [diff] [blame] | 77 | #endif |
| 78 | |
Zack Han | 2a3a57f2 | 2024-06-10 17:00:22 | [diff] [blame] | 79 | #if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) |
| 80 | BASE_DECLARE_FEATURE(kFewerUpdateConfirmations); |
| 81 | #endif |
| 82 | |
Jochen Eisinger | 44ea67d | 2023-04-13 14:42:20 | [diff] [blame] | 83 | #if !BUILDFLAG(IS_ANDROID) && BUILDFLAG(GOOGLE_CHROME_BRANDING) |
aliaaborhamy | fc8b6232 | 2024-05-13 17:41:53 | [diff] [blame] | 84 | BASE_DECLARE_FEATURE(kIOSPromoRefreshedPasswordBubble); |
| 85 | |
Aliaa Alborhamy | 8730b1a | 2024-04-11 15:22:18 | [diff] [blame] | 86 | BASE_DECLARE_FEATURE(kIOSPromoAddressBubble); |
Kenichi Ishibashi | bb5b523 | 2024-04-09 02:10:12 | [diff] [blame] | 87 | |
Aliaa Alborhamy | 8730b1a | 2024-04-11 15:22:18 | [diff] [blame] | 88 | BASE_DECLARE_FEATURE(kIOSPromoBookmarkBubble); |
Aliaa Alborhamy | a780261 | 2024-03-21 13:49:45 | [diff] [blame] | 89 | // This enum lists the possible params for the kIOSPromoBookmarkBubble promo. |
| 90 | // The first is the launch candidate, the other one is for debugging/testing. |
| 91 | enum class IOSPromoBookmarkBubbleActivation { |
| 92 | kContextual, |
| 93 | kAlwaysShowWithBookmarkBubble, |
| 94 | }; |
| 95 | extern const base::FeatureParam<IOSPromoBookmarkBubbleActivation> |
| 96 | kIOSPromoBookmarkBubbleActivationParam; |
aliaaborhamy | 12be3c710 | 2024-06-04 14:14:52 | [diff] [blame] | 97 | |
| 98 | BASE_DECLARE_FEATURE(kIOSPromoPaymentBubble); |
Jochen Eisinger | 6ef16de | 2023-03-23 20:44:18 | [diff] [blame] | 99 | #endif |
| 100 | |
Ehimare Okoyomon | 04c9bfe2 | 2023-07-13 14:04:28 | [diff] [blame] | 101 | #if !BUILDFLAG(IS_ANDROID) |
| 102 | BASE_DECLARE_FEATURE(kHaTSWebUI); |
| 103 | #endif |
| 104 | |
Takumi Fujimoto | 6d6fa185 | 2024-03-11 21:09:20 | [diff] [blame] | 105 | #if !BUILDFLAG(IS_ANDROID) |
| 106 | BASE_DECLARE_FEATURE(kKeyboardAndPointerLockPrompt); |
| 107 | #endif |
| 108 | |
Devlin Cronin | 8363698 | 2022-09-15 20:32:22 | [diff] [blame] | 109 | #if BUILDFLAG(ENABLE_EXTENSIONS) |
Daniel Cheng | 0b6369f | 2022-09-20 17:59:39 | [diff] [blame] | 110 | BASE_DECLARE_FEATURE(kLightweightExtensionOverrideConfirmations); |
Devlin Cronin | 8363698 | 2022-09-15 20:32:22 | [diff] [blame] | 111 | #endif |
| 112 | |
Keren Zhu | ff3005d1 | 2024-02-18 22:53:09 | [diff] [blame] | 113 | BASE_DECLARE_FEATURE(kPreloadTopChromeWebUI); |
Keren Zhu | 2af4aa08 | 2024-02-28 17:10:27 | [diff] [blame] | 114 | // This enum entry values must be in sync with |
| 115 | // WebUIContentsPreloadManager::PreloadMode. |
| 116 | enum class PreloadTopChromeWebUIMode { |
| 117 | kPreloadOnWarmup = 0, |
| 118 | kPreloadOnMakeContents = 1 |
| 119 | }; |
Keren Zhu | b2247ef | 2024-05-17 17:21:37 | [diff] [blame] | 120 | extern const char kPreloadTopChromeWebUIModeName[]; |
| 121 | extern const char kPreloadTopChromeWebUIModePreloadOnWarmupName[]; |
| 122 | extern const char kPreloadTopChromeWebUIModePreloadOnMakeContentsName[]; |
Keren Zhu | 2af4aa08 | 2024-02-28 17:10:27 | [diff] [blame] | 123 | extern const base::FeatureParam<PreloadTopChromeWebUIMode> |
| 124 | kPreloadTopChromeWebUIMode; |
Keren Zhu | 2bd3731a | 2024-08-19 15:09:04 | [diff] [blame] | 125 | |
Keren Zhu | 8363203 | 2024-06-13 19:12:53 | [diff] [blame] | 126 | // If smart preload is enabled, the preload WebUI is determined by historical |
| 127 | // engagement scores and whether a WebUI is currently being shown. |
| 128 | // If disabled, always preload Tab Search. |
Keren Zhu | 2bd3731a | 2024-08-19 15:09:04 | [diff] [blame] | 129 | extern const char kPreloadTopChromeWebUISmartPreloadName[]; |
Keren Zhu | 8363203 | 2024-06-13 19:12:53 | [diff] [blame] | 130 | extern const base::FeatureParam<bool> kPreloadTopChromeWebUISmartPreload; |
Keren Zhu | ff3005d1 | 2024-02-18 22:53:09 | [diff] [blame] | 131 | |
Keren Zhu | 2bd3731a | 2024-08-19 15:09:04 | [diff] [blame] | 132 | // If delay preload is enabled, the preloading is delayed until the first |
| 133 | // non empty paint of an observed web contents. |
| 134 | // |
| 135 | // In case of browser startup, the observed web contents is the active web |
| 136 | // contents of the last created browser. |
| 137 | // |
| 138 | // In case of Request() is called, the requested web contents is observed. |
| 139 | // |
| 140 | // In case of web contents destroy, the preloading simply waits for a fixed |
| 141 | // amount of time. |
| 142 | extern const char kPreloadTopChromeWebUIDelayPreloadName[]; |
| 143 | extern const base::FeatureParam<bool> kPreloadTopChromeWebUIDelayPreload; |
| 144 | |
Muyao Xu | 8105b711 | 2024-03-04 20:15:51 | [diff] [blame] | 145 | #if !BUILDFLAG(IS_ANDROID) |
| 146 | BASE_DECLARE_FEATURE(kPressAndHoldEscToExitBrowserFullscreen); |
| 147 | #endif |
| 148 | |
Pengchao Cai | be83f68 | 2023-07-10 23:43:40 | [diff] [blame] | 149 | BASE_DECLARE_FEATURE(kResponsiveToolbar); |
| 150 | |
Emily Shack | a43abf7 | 2024-09-24 18:14:29 | [diff] [blame] | 151 | BASE_DECLARE_FEATURE(kTabDuplicateMetrics); |
| 152 | |
David Pennington | 423db8f | 2022-10-24 22:30:04 | [diff] [blame] | 153 | BASE_DECLARE_FEATURE(kTabScrollingButtonPosition); |
| 154 | extern const char kTabScrollingButtonPositionParameterName[]; |
| 155 | |
Daniel Cheng | 0b6369f | 2022-09-20 17:59:39 | [diff] [blame] | 156 | BASE_DECLARE_FEATURE(kSidePanelWebView); |
Elly Fong-Jones | fe05ca1 | 2022-09-09 23:38:47 | [diff] [blame] | 157 | |
Caroline Rising | 4812636e | 2023-04-10 14:35:24 | [diff] [blame] | 158 | #if !defined(ANDROID) |
| 159 | BASE_DECLARE_FEATURE(kSidePanelCompanionDefaultPinned); |
Caroline Rising | 4812636e | 2023-04-10 14:35:24 | [diff] [blame] | 160 | #endif |
| 161 | |
Marlon Facey | 41373d72b | 2022-10-11 02:34:09 | [diff] [blame] | 162 | BASE_DECLARE_FEATURE(kSidePanelJourneysQueryless); |
Jingqi Sun | ac0acdd | 2024-06-10 18:02:38 | [diff] [blame] | 163 | BASE_DECLARE_FEATURE(kSidePanelResizing); |
Ben Goldberger | bde1cb0c | 2023-01-05 23:35:50 | [diff] [blame] | 164 | BASE_DECLARE_FEATURE(kSidePanelSearchCompanion); |
Marlon Facey | fce1a9e | 2022-03-31 23:48:06 | [diff] [blame] | 165 | |
Michael Crouse | b56427f | 2023-04-12 00:47:49 | [diff] [blame] | 166 | BASE_DECLARE_FEATURE(kSideSearch); |
Daniel Cheng | 0b6369f | 2022-09-20 17:59:39 | [diff] [blame] | 167 | BASE_DECLARE_FEATURE(kSideSearchFeedback); |
Daniel Cheng | 0b6369f | 2022-09-20 17:59:39 | [diff] [blame] | 168 | BASE_DECLARE_FEATURE(kSearchWebInSidePanel); |
tom | 927b2ab8 | 2021-09-23 03:45:27 | [diff] [blame] | 169 | |
Daniel Cheng | 0b6369f | 2022-09-20 17:59:39 | [diff] [blame] | 170 | BASE_DECLARE_FEATURE(kSideSearchAutoTriggering); |
Thomas Lukaszewicz | 35268cac | 2022-08-20 00:35:00 | [diff] [blame] | 171 | extern const base::FeatureParam<int> kSideSearchAutoTriggeringReturnCount; |
| 172 | |
François Doray | 9fe45bbd | 2022-11-17 21:21:13 | [diff] [blame] | 173 | BASE_DECLARE_FEATURE(kTabGroupsCollapseFreezing); |
| 174 | |
Daniel Cheng | 0b6369f | 2022-09-20 17:59:39 | [diff] [blame] | 175 | BASE_DECLARE_FEATURE(kTabHoverCardImages); |
Dana Fried | 2525188 | 2021-09-13 22:19:31 | [diff] [blame] | 176 | |
| 177 | // These parameters control how long the hover card system waits before |
| 178 | // requesting a preview image from a tab where no preview image is available. |
| 179 | // Values are in ms. |
Dana Fried | 1254a2b | 2021-03-10 22:00:45 | [diff] [blame] | 180 | extern const char kTabHoverCardImagesNotReadyDelayParameterName[]; |
| 181 | extern const char kTabHoverCardImagesLoadingDelayParameterName[]; |
| 182 | extern const char kTabHoverCardImagesLoadedDelayParameterName[]; |
Dana Fried | 2525188 | 2021-09-13 22:19:31 | [diff] [blame] | 183 | |
| 184 | // Determines how long to wait during a hover card slide transition before a |
| 185 | // placeholder image is displayed via crossfade. |
| 186 | // -1: disable crossfade entirely |
| 187 | // 0: show placeholder immediately |
| 188 | // 1: show placeholder when the card lands on the new tab |
| 189 | // between 0 and 1: show at a percentage of transition |
| 190 | // |
| 191 | // Note: crossfade is automatically disabled if animations are disabled at the |
| 192 | // OS level (e.g. for accessibility). |
Dana Fried | 43e6bbe | 2021-07-15 22:48:54 | [diff] [blame] | 193 | extern const char kTabHoverCardImagesCrossfadePreviewAtParameterName[]; |
Dana Fried | 2525188 | 2021-09-13 22:19:31 | [diff] [blame] | 194 | |
| 195 | // Adds an amount of time (in ms) to the show delay when tabs are max width - |
| 196 | // typically when there are less than 5 or 6 tabs in a browser window. |
Dana Fried | d3e015b | 2021-07-16 01:22:35 | [diff] [blame] | 197 | extern const char kTabHoverCardAdditionalMaxWidthDelay[]; |
Dana Fried | 2525188 | 2021-09-13 22:19:31 | [diff] [blame] | 198 | |
Emily Shack | c5d2d11a95 | 2023-08-24 20:14:33 | [diff] [blame] | 199 | BASE_DECLARE_FEATURE(kTabOrganization); |
| 200 | bool IsTabOrganization(); |
| 201 | |
Shibalik Mohapatra | 04fd539 | 2024-08-06 22:42:16 | [diff] [blame] | 202 | BASE_DECLARE_FEATURE(kTabstripDeclutter); |
Shibalik Mohapatra | 16ee7fcdc | 2024-08-21 16:36:14 | [diff] [blame] | 203 | bool IsTabstripDeclutterEnabled(); |
Shibalik Mohapatra | 04fd539 | 2024-08-06 22:42:16 | [diff] [blame] | 204 | |
Emily Shack | 2099c34 | 2024-02-13 20:45:13 | [diff] [blame] | 205 | BASE_DECLARE_FEATURE(kMultiTabOrganization); |
| 206 | |
Emily Shack | d71d3d4f | 2024-04-20 17:02:46 | [diff] [blame] | 207 | BASE_DECLARE_FEATURE(kTabOrganizationAppMenuItem); |
| 208 | |
Emily Shack | be4f8e5 | 2024-03-18 19:40:54 | [diff] [blame] | 209 | BASE_DECLARE_FEATURE(kTabReorganization); |
| 210 | |
Emily Shack | d71d3d4f | 2024-04-20 17:02:46 | [diff] [blame] | 211 | BASE_DECLARE_FEATURE(kTabReorganizationDivider); |
| 212 | |
Emily Shack | 07fd133 | 2024-08-19 23:30:22 | [diff] [blame] | 213 | BASE_DECLARE_FEATURE(kTabOrganizationModelStrategy); |
| 214 | |
Emily Shack | caa1a3b1 | 2024-09-12 22:30:39 | [diff] [blame] | 215 | BASE_DECLARE_FEATURE(kTabOrganizationEnableNudgeForEnterprise); |
| 216 | |
Shibalik Mohapatra | 9642c83 | 2024-09-30 23:12:01 | [diff] [blame] | 217 | // Duration of inactivity after which a tab is considered stale for declutter. |
| 218 | extern const base::FeatureParam<base::TimeDelta> |
| 219 | kTabstripDeclutterStaleThresholdDuration; |
| 220 | // Interval between a recomputation of stale tabs for declutter. |
| 221 | extern const base::FeatureParam<base::TimeDelta> |
| 222 | kTabstripDeclutterTimerInterval; |
| 223 | // Default interval after showing a nudge to prevent another nudge from being |
| 224 | // shown for declutter. |
| 225 | extern const base::FeatureParam<base::TimeDelta> |
| 226 | kTabstripDeclutterNudgeTimerInterval; |
| 227 | |
Taylor Bergquist | ccd32384 | 2023-11-20 22:00:51 | [diff] [blame] | 228 | // The target (and minimum) interval between proactive nudge triggers. Measured |
| 229 | // against a clock that only runs while Chrome is in the foreground. |
| 230 | extern const base::FeatureParam<base::TimeDelta> kTabOrganizationTriggerPeriod; |
| 231 | |
| 232 | // The base to use for the trigger logic's exponential backoff. |
| 233 | extern const base::FeatureParam<double> kTabOrganizationTriggerBackoffBase; |
| 234 | |
| 235 | // The minimum score threshold for proactive nudge triggering to occur. |
| 236 | extern const base::FeatureParam<double> kTabOrganizationTriggerThreshold; |
| 237 | |
Taylor Bergquist | e038872 | 2023-12-12 23:00:54 | [diff] [blame] | 238 | // The maximum sensitivity score for a tab to contribute to trigger scoring. |
| 239 | extern const base::FeatureParam<double> |
| 240 | kTabOrganizationTriggerSensitivityThreshold; |
| 241 | |
Taylor Bergquist | 096c024c | 2023-12-14 23:37:42 | [diff] [blame] | 242 | // Enable 'demo mode' for Tab Organization triggering, which triggers much more |
| 243 | // predictably and frequently. |
| 244 | extern const base::FeatureParam<bool> KTabOrganizationTriggerDemoMode; |
| 245 | |
Daniel Cheng | 0b6369f | 2022-09-20 17:59:39 | [diff] [blame] | 246 | BASE_DECLARE_FEATURE(kTabSearchChevronIcon); |
Tom | 58439ac7 | 2021-07-01 19:15:56 | [diff] [blame] | 247 | |
Daniel Cheng | 0b6369f | 2022-09-20 17:59:39 | [diff] [blame] | 248 | BASE_DECLARE_FEATURE(kTabSearchFeedback); |
Roman Arora | 4d4bb4b | 2020-09-24 17:28:13 | [diff] [blame] | 249 | |
Daniel Cheng | 0b6369f | 2022-09-20 17:59:39 | [diff] [blame] | 250 | BASE_DECLARE_FEATURE(kTabSearchRecentlyClosed); |
Yuheng Huang | 58af273 | 2021-10-19 00:00:52 | [diff] [blame] | 251 | |
Roman Arora | adcb4dc | 2021-04-01 23:45:24 | [diff] [blame] | 252 | // Default number of recently closed entries to display by default when no |
| 253 | // search text is provided. |
| 254 | extern const base::FeatureParam<int> |
| 255 | kTabSearchRecentlyClosedDefaultItemDisplayCount; |
| 256 | |
Roman Arora | 0a976ba | 2021-06-17 00:58:39 | [diff] [blame] | 257 | // A threshold of recently closed tabs after which to stop adding recently |
| 258 | // closed item data to the profile data payload should the minimum display |
| 259 | // count have been met. |
| 260 | extern const base::FeatureParam<int> kTabSearchRecentlyClosedTabCountThreshold; |
Roman Arora | adcb4dc | 2021-04-01 23:45:24 | [diff] [blame] | 261 | |
David Bienvenu | c7079c3 | 2023-12-16 00:39:55 | [diff] [blame] | 262 | BASE_DECLARE_FEATURE(kTearOffWebAppTabOpensWebAppWindow); |
| 263 | |
Caroline Rising | 53437cb | 2024-02-06 03:03:31 | [diff] [blame] | 264 | BASE_DECLARE_FEATURE(kToolbarPinning); |
| 265 | |
Joseph Park | 4e7b414f | 2024-02-14 18:31:38 | [diff] [blame] | 266 | bool IsToolbarPinningEnabled(); |
| 267 | |
Anunoy Ghosh | b7b7eca | 2023-04-13 18:38:23 | [diff] [blame] | 268 | #if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) |
| 269 | BASE_DECLARE_FEATURE(kUpdateTextOptions); |
| 270 | extern const base::FeatureParam<int> kUpdateTextOptionNumber; |
| 271 | #endif |
| 272 | |
Yann Dago | 16b94d6 | 2024-01-29 19:44:29 | [diff] [blame] | 273 | BASE_DECLARE_FEATURE(kEnterpriseProfileBadging); |
Yann Dago | fd4102d | 2024-09-27 17:15:04 | [diff] [blame] | 274 | BASE_DECLARE_FEATURE(kEnterpriseProfileBadgingPolicies); |
Yann Dago | 5c6d4b2 | 2024-04-12 19:53:29 | [diff] [blame] | 275 | BASE_DECLARE_FEATURE(kEnterpriseUpdatedProfileCreationScreen); |
Yann Dago | 16b94d6 | 2024-01-29 19:44:29 | [diff] [blame] | 276 | |
Daniel Cheng | 0b6369f | 2022-09-20 17:59:39 | [diff] [blame] | 277 | BASE_DECLARE_FEATURE(kWebUITabStrip); |
Collin Baker | 33a13f5 | 2019-12-13 00:30:23 | [diff] [blame] | 278 | |
Tom | bae38894 | 2021-08-17 02:44:00 | [diff] [blame] | 279 | // Controls whether the context menu is shown on a touch press or a touch |
| 280 | // tap gesture on the WebUI Tab Strip. |
Daniel Cheng | 0b6369f | 2022-09-20 17:59:39 | [diff] [blame] | 281 | BASE_DECLARE_FEATURE(kWebUITabStripContextMenuAfterTap); |
Tom | bae38894 | 2021-08-17 02:44:00 | [diff] [blame] | 282 | |
Keren Zhu | 5680b21d | 2021-05-14 19:01:07 | [diff] [blame] | 283 | // Cocoa to views migration. |
Xiaohan Wang | e9439fd | 2022-01-18 21:00:31 | [diff] [blame] | 284 | #if BUILDFLAG(IS_MAC) |
Daniel Cheng | 0b6369f | 2022-09-20 17:59:39 | [diff] [blame] | 285 | BASE_DECLARE_FEATURE(kViewsFirstRunDialog); |
Daniel Cheng | 0b6369f | 2022-09-20 17:59:39 | [diff] [blame] | 286 | BASE_DECLARE_FEATURE(kViewsJSAppModalDialog); |
Keren Zhu | 5680b21d | 2021-05-14 19:01:07 | [diff] [blame] | 287 | #endif |
| 288 | |
揚帆起航 | 7e91f81c | 2022-09-27 20:00:46 | [diff] [blame] | 289 | BASE_DECLARE_FEATURE(kStopLoadingAnimationForHiddenWindow); |
Alex Attar | ee691b9 | 2022-09-26 20:37:57 | [diff] [blame] | 290 | |
Tom Anderson | 72a6866 | 2024-07-10 16:35:45 | [diff] [blame] | 291 | #if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) |
| 292 | BASE_DECLARE_FEATURE(kUsePortalAccentColor); |
| 293 | #endif |
| 294 | |
dljames | 1bedc20c | 2024-07-25 18:03:36 | [diff] [blame] | 295 | // This feature introduces a toggle that allows users to switch between the |
| 296 | // standard UI and a compact version of the UI by right clicking the empty area |
| 297 | // in the Tabstrip. |
| 298 | BASE_DECLARE_FEATURE(kCompactMode); |
Lia Hiscock | 3c59c0d2 | 2024-09-12 22:57:19 | [diff] [blame] | 299 | |
| 300 | // Controls whether the site-specific data dialog shows a related installed |
| 301 | // applications section. |
| 302 | BASE_DECLARE_FEATURE(kPageSpecificDataDialogRelatedInstalledAppsSection); |
| 303 | |
Charlene Yan | 0724dc56 | 2019-04-12 17:57:41 | [diff] [blame] | 304 | } // namespace features |
| 305 | |
| 306 | #endif // CHROME_BROWSER_UI_UI_FEATURES_H_ |