[M85 Dev][EFL] Fix errors to generate ninja files
[platform/framework/web/chromium-efl.git] / chrome / browser / about_flags.cc
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "chrome/browser/about_flags.h"
6
7 #include <iterator>
8 #include <map>
9 #include <memory>
10 #include <set>
11 #include <utility>
12
13 #include "ash/public/cpp/app_list/app_list_features.h"
14 #include "ash/public/cpp/app_list/app_list_switches.h"
15 #include "ash/public/cpp/ash_features.h"
16 #include "ash/public/cpp/keyboard/keyboard_switches.h"
17 #include "base/base_switches.h"
18 #include "base/bind.h"
19 #include "base/callback.h"
20 #include "base/command_line.h"
21 #include "base/feature_list.h"
22 #include "base/i18n/base_i18n_switches.h"
23 #include "base/memory/singleton.h"
24 #include "base/metrics/histogram_functions.h"
25 #include "base/stl_util.h"
26 #include "base/strings/string_number_conversions.h"
27 #include "base/strings/utf_string_conversions.h"
28 #include "base/time/time_win_features.h"
29 #include "base/values.h"
30 #include "build/branding_buildflags.h"
31 #include "build/build_config.h"
32 #include "cc/base/features.h"
33 #include "cc/base/switches.h"
34 #include "chrome/browser/browser_features.h"
35 #include "chrome/browser/chromeos/android_sms/android_sms_switches.h"
36 #include "chrome/browser/flag_descriptions.h"
37 #include "chrome/browser/lite_video/lite_video_switches.h"
38 #include "chrome/browser/navigation_predictor/search_engine_preconnector.h"
39 #include "chrome/browser/net/stub_resolver_config_reader.h"
40 #include "chrome/browser/net/system_network_context_manager.h"
41 #include "chrome/browser/notifications/scheduler/public/features.h"
42 #include "chrome/browser/performance_hints/performance_hints_features.h"
43 #include "chrome/browser/performance_manager/policies/policy_features.h"
44 #include "chrome/browser/permissions/quiet_notification_permission_ui_config.h"
45 #include "chrome/browser/predictors/loading_predictor_config.h"
46 #include "chrome/browser/prerender/isolated/isolated_prerender_features.h"
47 #include "chrome/browser/prerender/isolated/isolated_prerender_params.h"
48 #include "chrome/browser/prerender/prerender_field_trial.h"
49 #include "chrome/browser/resource_coordinator/tab_manager_features.h"
50 #include "chrome/browser/search/ntp_features.h"
51 #include "chrome/browser/sharing/click_to_call/feature.h"
52 #include "chrome/browser/sharing/features.h"
53 #include "chrome/browser/sharing/shared_clipboard/feature_flags.h"
54 #include "chrome/browser/sharing/sms/sms_flags.h"
55 #include "chrome/browser/sharing/webrtc/webrtc_flags.h"
56 #include "chrome/browser/signin/signin_features.h"
57 #include "chrome/browser/ui/ui_features.h"
58 #include "chrome/browser/unexpire_flags.h"
59 #include "chrome/browser/unexpire_flags_gen.h"
60 #include "chrome/common/buildflags.h"
61 #include "chrome/common/channel_info.h"
62 #include "chrome/common/chrome_content_client.h"
63 #include "chrome/common/chrome_features.h"
64 #include "chrome/common/chrome_switches.h"
65 #include "components/assist_ranker/predictor_config_definitions.h"
66 #include "components/autofill/core/browser/autofill_experiments.h"
67 #include "components/autofill/core/common/autofill_features.h"
68 #include "components/autofill/core/common/autofill_payments_features.h"
69 #include "components/autofill/core/common/autofill_switches.h"
70 #include "components/autofill/core/common/autofill_util.h"
71 #include "components/autofill_assistant/browser/features.h"
72 #include "components/browser_sync/browser_sync_switches.h"
73 #include "components/browsing_data/core/features.h"
74 #include "components/cloud_devices/common/cloud_devices_switches.h"
75 #include "components/content_settings/core/common/features.h"
76 #include "components/contextual_search/core/browser/public.h"
77 #include "components/data_reduction_proxy/core/common/data_reduction_proxy_features.h"
78 #include "components/data_reduction_proxy/core/common/data_reduction_proxy_switches.h"
79 #include "components/dom_distiller/core/dom_distiller_features.h"
80 #include "components/dom_distiller/core/dom_distiller_switches.h"
81 #include "components/download/public/common/download_features.h"
82 #include "components/error_page/common/error_page_switches.h"
83 #include "components/favicon/core/features.h"
84 #include "components/feature_engagement/buildflags.h"
85 #include "components/feature_engagement/public/feature_constants.h"
86 #include "components/feature_engagement/public/feature_list.h"
87 #include "components/feed/feed_feature_list.h"
88 #include "components/flags_ui/feature_entry.h"
89 #include "components/flags_ui/feature_entry_macros.h"
90 #include "components/flags_ui/flags_state.h"
91 #include "components/flags_ui/flags_storage.h"
92 #include "components/flags_ui/flags_ui_metrics.h"
93 #include "components/flags_ui/flags_ui_switches.h"
94 #include "components/games/core/games_features.h"
95 #include "components/invalidation/impl/invalidation_switches.h"
96 #include "components/language/core/common/language_experiments.h"
97 #include "components/lookalikes/core/features.h"
98 #include "components/nacl/common/buildflags.h"
99 #include "components/nacl/common/nacl_switches.h"
100 #include "components/network_session_configurator/common/network_features.h"
101 #include "components/network_session_configurator/common/network_switches.h"
102 #include "components/ntp_snippets/features.h"
103 #include "components/ntp_snippets/ntp_snippets_constants.h"
104 #include "components/ntp_tiles/features.h"
105 #include "components/offline_pages/core/offline_page_feature.h"
106 #include "components/omnibox/browser/omnibox_field_trial.h"
107 #include "components/omnibox/common/omnibox_features.h"
108 #include "components/page_info/android/features.h"
109 #include "components/paint_preview/buildflags/buildflags.h"
110 #include "components/paint_preview/features/features.h"
111 #include "components/password_manager/core/common/password_manager_features.h"
112 #include "components/payments/core/features.h"
113 #include "components/policy/core/common/features.h"
114 #include "components/previews/core/previews_features.h"
115 #include "components/previews/core/previews_switches.h"
116 #include "components/query_tiles/switches.h"
117 #include "components/safe_browsing/core/features.h"
118 #include "components/security_interstitials/content/stateful_ssl_host_state_delegate.h"
119 #include "components/security_interstitials/core/features.h"
120 #include "components/security_state/core/features.h"
121 #include "components/security_state/core/security_state.h"
122 #include "components/send_tab_to_self/features.h"
123 #include "components/services/heap_profiling/public/cpp/switches.h"
124 #include "components/signin/core/browser/dice_account_reconcilor_delegate.h"
125 #include "components/signin/public/base/signin_buildflags.h"
126 #include "components/signin/public/base/signin_switches.h"
127 #include "components/site_isolation/features.h"
128 #include "components/spellcheck/common/spellcheck_features.h"
129 #include "components/spellcheck/spellcheck_buildflags.h"
130 #include "components/sync/driver/sync_driver_switches.h"
131 #include "components/sync/engine/sync_engine_switches.h"
132 #include "components/tracing/common/tracing_switches.h"
133 #include "components/translate/core/browser/translate_prefs.h"
134 #include "components/translate/core/browser/translate_ranker_impl.h"
135 #include "components/translate/core/common/translate_util.h"
136 #include "components/ui_devtools/switches.h"
137 #include "components/version_info/version_info.h"
138 #include "components/viz/common/features.h"
139 #include "components/viz/common/switches.h"
140 #include "content/public/common/content_features.h"
141 #include "content/public/common/content_switches.h"
142 #include "device/base/features.h"
143 #include "device/fido/features.h"
144 #include "device/vr/buildflags/buildflags.h"
145 #include "extensions/buildflags/buildflags.h"
146 #include "gpu/config/gpu_finch_features.h"
147 #include "gpu/config/gpu_switches.h"
148 #include "media/audio/audio_features.h"
149 #include "media/base/media_switches.h"
150 #include "media/capture/capture_switches.h"
151 #include "media/media_buildflags.h"
152 #include "media/midi/midi_switches.h"
153 #include "media/webrtc/webrtc_switches.h"
154 #include "net/base/features.h"
155 #include "net/net_buildflags.h"
156 #include "net/nqe/effective_connection_type.h"
157 #include "net/nqe/network_quality_estimator_params.h"
158 #include "net/websockets/websocket_basic_handshake_stream.h"
159 #include "pdf/buildflags.h"
160 #include "ppapi/buildflags/buildflags.h"
161 #include "printing/buildflags/buildflags.h"
162 #include "services/device/public/cpp/device_features.h"
163 #include "services/media_session/public/cpp/features.h"
164 #include "services/network/public/cpp/features.h"
165 #include "services/network/public/cpp/network_switches.h"
166 #include "services/service_manager/sandbox/features.h"
167 #include "services/service_manager/sandbox/switches.h"
168 #include "third_party/blink/public/common/experiments/memory_ablation_experiment.h"
169 #include "third_party/blink/public/common/features.h"
170 #include "third_party/blink/public/common/forcedark/forcedark_switches.h"
171 #include "third_party/blink/public/common/switches.h"
172 #include "third_party/leveldatabase/leveldb_features.h"
173 #include "ui/accessibility/accessibility_features.h"
174 #include "ui/accessibility/accessibility_switches.h"
175 #include "ui/base/ui_base_features.h"
176 #include "ui/base/ui_base_switches.h"
177 #include "ui/compositor/compositor_switches.h"
178 #include "ui/display/display_features.h"
179 #include "ui/display/display_switches.h"
180 #include "ui/events/blink/blink_features.h"
181 #include "ui/events/event_switches.h"
182 #include "ui/gfx/switches.h"
183 #include "ui/gl/buildflags.h"
184 #include "ui/gl/gl_switches.h"
185 #include "ui/native_theme/native_theme_features.h"
186
187 #if defined(OS_LINUX)
188 #include "base/allocator/buildflags.h"
189 #endif
190
191 #if defined(OS_ANDROID)
192 #include "chrome/browser/android/explore_sites/explore_sites_feature.h"
193 #include "chrome/browser/flags/android/chrome_feature_list.h"
194 #include "components/browser_ui/site_settings/android/features.h"
195 #include "components/external_intents/android/external_intents_feature_list.h"
196 #else  // OS_ANDROID
197 #include "chrome/browser/media/router/media_router_feature.h"
198 #endif  // OS_ANDROID
199
200 #if defined(OS_CHROMEOS)
201 #include "ash/public/cpp/ash_switches.h"
202 #include "chromeos/constants/chromeos_features.h"
203 #include "chromeos/constants/chromeos_switches.h"
204 #include "chromeos/services/assistant/public/cpp/features.h"
205 #include "components/arc/arc_features.h"
206 #include "third_party/cros_system_api/switches/chrome_switches.h"
207 #include "ui/events/ozone/features.h"
208 #endif  // OS_CHROMEOS
209
210 #if defined(OS_MACOSX)
211 #include "chrome/browser/ui/browser_dialogs.h"
212 #endif  // OS_MACOSX
213
214 #if BUILDFLAG(ENABLE_EXTENSIONS)
215 #include "extensions/common/extension_features.h"
216 #include "extensions/common/switches.h"
217 #endif  // ENABLE_EXTENSIONS
218
219 #if BUILDFLAG(ENABLE_PDF)
220 #include "pdf/pdf_features.h"
221 #endif
222
223 #if BUILDFLAG(ENABLE_PRINTING)
224 #include "printing/printing_features.h"
225 #endif
226
227 #if defined(USE_OZONE)
228 #include "ui/ozone/public/ozone_switches.h"
229 #endif  // USE_OZONE
230
231 #if defined(OS_WIN)
232 #include "base/win/windows_version.h"
233 #include "chrome/browser/win/titlebar_config.h"
234 #endif  // OS_WIN
235
236 #if defined(TOOLKIT_VIEWS)
237 #include "ui/views/animation/installable_ink_drop.h"
238 #include "ui/views/views_features.h"
239 #include "ui/views/views_switches.h"
240 #endif  // defined(TOOLKIT_VIEWS)
241
242 using flags_ui::FeatureEntry;
243 using flags_ui::kDeprecated;
244 using flags_ui::kOsAndroid;
245 using flags_ui::kOsCrOS;
246 using flags_ui::kOsCrOSOwnerOnly;
247 using flags_ui::kOsLinux;
248 using flags_ui::kOsMac;
249 using flags_ui::kOsWin;
250
251 namespace about_flags {
252
253 namespace {
254
255 const unsigned kOsAll = kOsMac | kOsWin | kOsLinux | kOsCrOS | kOsAndroid;
256 const unsigned kOsDesktop = kOsMac | kOsWin | kOsLinux | kOsCrOS;
257
258 #if defined(USE_AURA) || defined(OS_ANDROID)
259 const unsigned kOsAura = kOsWin | kOsLinux | kOsCrOS;
260 #endif  // USE_AURA || OS_ANDROID
261
262 const FeatureEntry::Choice kTouchEventFeatureDetectionChoices[] = {
263     {flags_ui::kGenericExperimentChoiceDisabled, "", ""},
264     {flags_ui::kGenericExperimentChoiceEnabled,
265      switches::kTouchEventFeatureDetection,
266      switches::kTouchEventFeatureDetectionEnabled},
267     {flags_ui::kGenericExperimentChoiceAutomatic,
268      switches::kTouchEventFeatureDetection,
269      switches::kTouchEventFeatureDetectionAuto}};
270
271 #if defined(USE_AURA)
272 const FeatureEntry::Choice kPullToRefreshChoices[] = {
273     {flags_ui::kGenericExperimentChoiceDefault, "", ""},
274     {flags_ui::kGenericExperimentChoiceDisabled, switches::kPullToRefresh, "0"},
275     {flags_ui::kGenericExperimentChoiceEnabled, switches::kPullToRefresh, "1"},
276     {flag_descriptions::kPullToRefreshEnabledTouchscreen,
277      switches::kPullToRefresh, "2"}};
278 #endif  // USE_AURA
279
280 const FeatureEntry::Choice kOverlayStrategiesChoices[] = {
281     {flag_descriptions::kOverlayStrategiesDefault, "", ""},
282     {flag_descriptions::kOverlayStrategiesNone,
283      switches::kEnableHardwareOverlays, ""},
284     {flag_descriptions::kOverlayStrategiesUnoccludedFullscreen,
285      switches::kEnableHardwareOverlays, "single-fullscreen"},
286     {flag_descriptions::kOverlayStrategiesUnoccluded,
287      switches::kEnableHardwareOverlays, "single-fullscreen,single-on-top"},
288     {flag_descriptions::kOverlayStrategiesOccludedAndUnoccluded,
289      switches::kEnableHardwareOverlays,
290      "single-fullscreen,single-on-top,underlay"},
291 };
292
293 const FeatureEntry::Choice kTouchTextSelectionStrategyChoices[] = {
294     {flags_ui::kGenericExperimentChoiceDefault, "", ""},
295     {flag_descriptions::kTouchSelectionStrategyCharacter,
296      switches::kTouchTextSelectionStrategy, "character"},
297     {flag_descriptions::kTouchSelectionStrategyDirection,
298      switches::kTouchTextSelectionStrategy, "direction"}};
299
300 const FeatureEntry::Choice kTraceUploadURL[] = {
301     {flags_ui::kGenericExperimentChoiceDisabled, "", ""},
302     {flag_descriptions::kTraceUploadUrlChoiceOther, switches::kTraceUploadURL,
303      "https://performance-insights.appspot.com/upload?tags=flags,Other"},
304     {flag_descriptions::kTraceUploadUrlChoiceEmloading,
305      switches::kTraceUploadURL,
306      "https://performance-insights.appspot.com/upload?tags=flags,emloading"},
307     {flag_descriptions::kTraceUploadUrlChoiceQa, switches::kTraceUploadURL,
308      "https://performance-insights.appspot.com/upload?tags=flags,QA"},
309     {flag_descriptions::kTraceUploadUrlChoiceTesting, switches::kTraceUploadURL,
310      "https://performance-insights.appspot.com/upload?tags=flags,TestingTeam"}};
311
312 const FeatureEntry::Choice kPassiveListenersChoices[] = {
313     {flags_ui::kGenericExperimentChoiceDefault, "", ""},
314     {flag_descriptions::kPassiveEventListenerTrue,
315      switches::kPassiveListenersDefault, "true"},
316     {flag_descriptions::kPassiveEventListenerForceAllTrue,
317      switches::kPassiveListenersDefault, "forcealltrue"},
318 };
319
320 const FeatureEntry::Choice kDataReductionProxyServerExperiment[] = {
321     {flags_ui::kGenericExperimentChoiceDefault, "", ""},
322     {flag_descriptions::kDataReductionProxyServerAlternative1,
323      data_reduction_proxy::switches::kDataReductionProxyExperiment,
324      data_reduction_proxy::switches::kDataReductionProxyServerAlternative1},
325     {flag_descriptions::kDataReductionProxyServerAlternative2,
326      data_reduction_proxy::switches::kDataReductionProxyExperiment,
327      data_reduction_proxy::switches::kDataReductionProxyServerAlternative2},
328     {flag_descriptions::kDataReductionProxyServerAlternative3,
329      data_reduction_proxy::switches::kDataReductionProxyExperiment,
330      data_reduction_proxy::switches::kDataReductionProxyServerAlternative3},
331     {flag_descriptions::kDataReductionProxyServerAlternative4,
332      data_reduction_proxy::switches::kDataReductionProxyExperiment,
333      data_reduction_proxy::switches::kDataReductionProxyServerAlternative4},
334     {flag_descriptions::kDataReductionProxyServerAlternative5,
335      data_reduction_proxy::switches::kDataReductionProxyExperiment,
336      data_reduction_proxy::switches::kDataReductionProxyServerAlternative5},
337     {flag_descriptions::kDataReductionProxyServerAlternative6,
338      data_reduction_proxy::switches::kDataReductionProxyExperiment,
339      data_reduction_proxy::switches::kDataReductionProxyServerAlternative6},
340     {flag_descriptions::kDataReductionProxyServerAlternative7,
341      data_reduction_proxy::switches::kDataReductionProxyExperiment,
342      data_reduction_proxy::switches::kDataReductionProxyServerAlternative7},
343     {flag_descriptions::kDataReductionProxyServerAlternative8,
344      data_reduction_proxy::switches::kDataReductionProxyExperiment,
345      data_reduction_proxy::switches::kDataReductionProxyServerAlternative8},
346     {flag_descriptions::kDataReductionProxyServerAlternative9,
347      data_reduction_proxy::switches::kDataReductionProxyExperiment,
348      data_reduction_proxy::switches::kDataReductionProxyServerAlternative9},
349     {flag_descriptions::kDataReductionProxyServerAlternative10,
350      data_reduction_proxy::switches::kDataReductionProxyExperiment,
351      data_reduction_proxy::switches::kDataReductionProxyServerAlternative10}};
352
353 #if defined(OS_WIN)
354 const FeatureEntry::Choice kUseAngleChoices[] = {
355     {flag_descriptions::kUseAngleDefault, "", ""},
356     {flag_descriptions::kUseAngleGL, switches::kUseANGLE,
357      gl::kANGLEImplementationOpenGLName},
358     {flag_descriptions::kUseAngleD3D11, switches::kUseANGLE,
359      gl::kANGLEImplementationD3D11Name},
360     {flag_descriptions::kUseAngleD3D9, switches::kUseANGLE,
361      gl::kANGLEImplementationD3D9Name},
362     {flag_descriptions::kUseAngleD3D11on12, switches::kUseANGLE,
363      gl::kANGLEImplementationD3D11on12Name}};
364 #endif
365
366 #if BUILDFLAG(ENABLE_VR)
367 const FeatureEntry::Choice kWebXrForceRuntimeChoices[] = {
368     {flags_ui::kGenericExperimentChoiceDefault, "", ""},
369     {flag_descriptions::kWebXrRuntimeChoiceNone, switches::kWebXrForceRuntime,
370      switches::kWebXrRuntimeNone},
371
372 #if BUILDFLAG(ENABLE_OPENXR)
373     {flag_descriptions::kWebXrRuntimeChoiceOpenXR, switches::kWebXrForceRuntime,
374      switches::kWebXrRuntimeOpenXr},
375 #endif  // ENABLE_OPENXR
376
377 #if BUILDFLAG(ENABLE_WINDOWS_MR)
378     {flag_descriptions::kWebXrRuntimeChoiceWindowsMixedReality,
379      switches::kWebXrForceRuntime, switches::kWebXrRuntimeWMR},
380 #endif  // ENABLE_WINDOWS_MR
381 };
382 #endif  // ENABLE_VR
383
384 #if defined(OS_ANDROID)
385 const FeatureEntry::Choice kReaderModeHeuristicsChoices[] = {
386     {flags_ui::kGenericExperimentChoiceDefault, "", ""},
387     {flag_descriptions::kReaderModeHeuristicsMarkup,
388      switches::kReaderModeHeuristics,
389      switches::reader_mode_heuristics::kOGArticle},
390     {flag_descriptions::kReaderModeHeuristicsAdaboost,
391      switches::kReaderModeHeuristics,
392      switches::reader_mode_heuristics::kAdaBoost},
393     {flag_descriptions::kReaderModeHeuristicsAlwaysOn,
394      switches::kReaderModeHeuristics,
395      switches::reader_mode_heuristics::kAlwaysTrue},
396     {flag_descriptions::kReaderModeHeuristicsAlwaysOff,
397      switches::kReaderModeHeuristics, switches::reader_mode_heuristics::kNone},
398     {flag_descriptions::kReaderModeHeuristicsAllArticles,
399      switches::kReaderModeHeuristics,
400      switches::reader_mode_heuristics::kAllArticles},
401 };
402
403 const FeatureEntry::Choice kForceUpdateMenuTypeChoices[] = {
404     {flags_ui::kGenericExperimentChoiceDefault, "", ""},
405     {flag_descriptions::kUpdateMenuTypeNone, switches::kForceUpdateMenuType,
406      "none"},
407     {flag_descriptions::kUpdateMenuTypeUpdateAvailable,
408      switches::kForceUpdateMenuType, "update_available"},
409     {flag_descriptions::kUpdateMenuTypeUnsupportedOSVersion,
410      switches::kForceUpdateMenuType, "unsupported_os_version"},
411     {flag_descriptions::kUpdateMenuTypeInlineUpdateSuccess,
412      switches::kForceUpdateMenuType, "inline_update_success"},
413     {flag_descriptions::kUpdateMenuTypeInlineUpdateDialogCanceled,
414      switches::kForceUpdateMenuType, "inline_update_dialog_canceled"},
415     {flag_descriptions::kUpdateMenuTypeInlineUpdateDialogFailed,
416      switches::kForceUpdateMenuType, "inline_update_dialog_failed"},
417     {flag_descriptions::kUpdateMenuTypeInlineUpdateDownloadFailed,
418      switches::kForceUpdateMenuType, "inline_update_download_failed"},
419     {flag_descriptions::kUpdateMenuTypeInlineUpdateDownloadCanceled,
420      switches::kForceUpdateMenuType, "inline_update_download_canceled"},
421     {flag_descriptions::kUpdateMenuTypeInlineUpdateInstallFailed,
422      switches::kForceUpdateMenuType, "inline_update_install_failed"},
423 };
424 #else  // !defined(OS_ANDROID)
425 const FeatureEntry::FeatureParam kReaderModeOfferInSettings[] = {
426     {switches::kReaderModeDiscoverabilityParamName,
427      switches::kReaderModeOfferInSettings}};
428
429 const FeatureEntry::FeatureVariation kReaderModeDiscoverabilityVariations[] = {
430     {"available in settings", kReaderModeOfferInSettings,
431      base::size(kReaderModeOfferInSettings), nullptr}};
432 #endif  // OS_ANDROID
433
434 #if !defined(OS_CHROMEOS)
435 const FeatureEntry::FeatureParam kForceDark_SimpleHsl[] = {
436     {"inversion_method", "hsl_based"},
437     {"image_behavior", "none"},
438     {"text_lightness_threshold", "256"},
439     {"background_lightness_threshold", "0"}};
440
441 const FeatureEntry::FeatureParam kForceDark_SimpleCielab[] = {
442     {"inversion_method", "cielab_based"},
443     {"image_behavior", "none"},
444     {"text_lightness_threshold", "256"},
445     {"background_lightness_threshold", "0"}};
446
447 const FeatureEntry::FeatureParam kForceDark_SimpleRgb[] = {
448     {"inversion_method", "rgb_based"},
449     {"image_behavior", "none"},
450     {"text_lightness_threshold", "256"},
451     {"background_lightness_threshold", "0"}};
452
453 const FeatureEntry::FeatureParam kForceDark_SelectiveImageInversion[] = {
454     {"inversion_method", "cielab_based"},
455     {"image_behavior", "selective"},
456     {"text_lightness_threshold", "256"},
457     {"background_lightness_threshold", "0"}};
458
459 const FeatureEntry::FeatureParam kForceDark_SelectiveElementInversion[] = {
460     {"inversion_method", "cielab_based"},
461     {"image_behavior", "none"},
462     {"text_lightness_threshold", "150"},
463     {"background_lightness_threshold", "205"}};
464
465 const FeatureEntry::FeatureParam kForceDark_SelectiveGeneralInversion[] = {
466     {"inversion_method", "cielab_based"},
467     {"image_behavior", "selective"},
468     {"text_lightness_threshold", "150"},
469     {"background_lightness_threshold", "205"}};
470
471 const FeatureEntry::FeatureVariation kForceDarkVariations[] = {
472     {"with simple HSL-based inversion", kForceDark_SimpleHsl,
473      base::size(kForceDark_SimpleHsl), nullptr},
474     {"with simple CIELAB-based inversion", kForceDark_SimpleCielab,
475      base::size(kForceDark_SimpleCielab), nullptr},
476     {"with simple RGB-based inversion", kForceDark_SimpleRgb,
477      base::size(kForceDark_SimpleRgb), nullptr},
478     {"with selective image inversion", kForceDark_SelectiveImageInversion,
479      base::size(kForceDark_SelectiveImageInversion), nullptr},
480     {"with selective inversion of non-image elements",
481      kForceDark_SelectiveElementInversion,
482      base::size(kForceDark_SelectiveElementInversion), nullptr},
483     {"with selective inversion of everything",
484      kForceDark_SelectiveGeneralInversion,
485      base::size(kForceDark_SelectiveGeneralInversion), nullptr}};
486 #endif  // !OS_CHROMEOS
487
488 const FeatureEntry::FeatureParam kDelayAsyncScriptExecutionFinishedParsing[] = {
489     {"delay_type", "finished_parsing"}};
490 const FeatureEntry::FeatureParam
491     kDelayAsyncScriptExecutionFirstPaintOrFinishedParsing[] = {
492         {"delay_type", "first_paint_or_finished_parsing"}};
493
494 const FeatureEntry::FeatureVariation
495     kDelayAsyncScriptExecutionFeatureVariations[] = {
496         {"with delay until finished parsing document",
497          kDelayAsyncScriptExecutionFinishedParsing,
498          base::size(kDelayAsyncScriptExecutionFinishedParsing), nullptr},
499         {"with delay until first paint or finished parsing document",
500          kDelayAsyncScriptExecutionFirstPaintOrFinishedParsing,
501          base::size(kDelayAsyncScriptExecutionFirstPaintOrFinishedParsing),
502          nullptr}};
503
504 #if defined(OS_ANDROID)
505 const FeatureEntry::FeatureParam kCloseTabSuggestionsStale_Immediate[] = {
506     {"baseline_tab_suggestions", "true"},
507     {"baseline_close_tab_suggestions", "true"}};
508 const FeatureEntry::FeatureParam kCloseTabSuggestionsStale_4Hours[] = {
509     {"close_tab_suggestions_stale_time_ms", "14400000"}};
510 const FeatureEntry::FeatureParam kCloseTabSuggestionsStale_8Hours[] = {
511     {"close_tab_suggestions_stale_time_ms", "28800000"}};
512 const FeatureEntry::FeatureParam kCloseTabSuggestionsStale_7Days[] = {
513     {"close_tab_suggestions_stale_time_ms", "604800000"}};
514 const FeatureEntry::FeatureParam kCloseTabSuggestionsTimeSiteEngagement[] = {
515     {"close_tab_min_num_tabs", "5"},
516     {"close_tab_features_time_last_used_enabled", "true"},
517     {"close_tab_features_time_last_used_transform", "MEAN_VARIANCE"},
518     {"close_tab_features_time_last_used_threshold", "0.5"},
519     {"close_tab_features_site_engagement_enabled", "true"},
520     {"close_tab_features_site_engagement_threshold", "90.0"},
521 };
522 const FeatureEntry::FeatureParam kGroupAndCloseTabSuggestions_Immediate[] = {
523     {"baseline_tab_suggestions", "true"},
524     {"baseline_group_tab_suggestions", "true"},
525     {"baseline_close_tab_suggestions", "true"}};
526
527 const FeatureEntry::FeatureVariation kCloseTabSuggestionsStaleVariations[] = {
528     {"Close Immediate", kCloseTabSuggestionsStale_Immediate,
529      base::size(kCloseTabSuggestionsStale_Immediate), nullptr},
530     {"Group+Close Immediate", kGroupAndCloseTabSuggestions_Immediate,
531      base::size(kGroupAndCloseTabSuggestions_Immediate), nullptr},
532     {"4 hours", kCloseTabSuggestionsStale_4Hours,
533      base::size(kCloseTabSuggestionsStale_4Hours), nullptr},
534     {"8 hours", kCloseTabSuggestionsStale_8Hours,
535      base::size(kCloseTabSuggestionsStale_8Hours), nullptr},
536     {"7 days", kCloseTabSuggestionsStale_7Days,
537      base::size(kCloseTabSuggestionsStale_7Days), nullptr},
538     {"Time & Site Engagement", kCloseTabSuggestionsTimeSiteEngagement,
539      base::size(kCloseTabSuggestionsTimeSiteEngagement), nullptr},
540 };
541 #endif  // OS_ANDROID
542
543 const FeatureEntry::Choice kEnableGpuRasterizationChoices[] = {
544     {flags_ui::kGenericExperimentChoiceDefault, "", ""},
545     {flags_ui::kGenericExperimentChoiceEnabled,
546      switches::kEnableGpuRasterization, ""},
547     {flags_ui::kGenericExperimentChoiceDisabled,
548      switches::kDisableGpuRasterization, ""},
549 };
550
551 const FeatureEntry::Choice kEnableOopRasterizationChoices[] = {
552     {flags_ui::kGenericExperimentChoiceDefault, "", ""},
553     {flags_ui::kGenericExperimentChoiceEnabled,
554      switches::kEnableOopRasterization, ""},
555     {flags_ui::kGenericExperimentChoiceDisabled,
556      switches::kDisableOopRasterization, ""},
557 };
558
559 const FeatureEntry::Choice kExtensionContentVerificationChoices[] = {
560     {flags_ui::kGenericExperimentChoiceDefault, "", ""},
561     {flag_descriptions::kExtensionContentVerificationBootstrap,
562      switches::kExtensionContentVerification,
563      switches::kExtensionContentVerificationBootstrap},
564     {flag_descriptions::kExtensionContentVerificationEnforce,
565      switches::kExtensionContentVerification,
566      switches::kExtensionContentVerificationEnforce},
567     {flag_descriptions::kExtensionContentVerificationEnforceStrict,
568      switches::kExtensionContentVerification,
569      switches::kExtensionContentVerificationEnforceStrict},
570 };
571
572 const FeatureEntry::Choice kTopChromeTouchUiChoices[] = {
573     {flags_ui::kGenericExperimentChoiceDefault, "", ""},
574     {flags_ui::kGenericExperimentChoiceAutomatic, switches::kTopChromeTouchUi,
575      switches::kTopChromeTouchUiAuto},
576     {flags_ui::kGenericExperimentChoiceDisabled, switches::kTopChromeTouchUi,
577      switches::kTopChromeTouchUiDisabled},
578     {flags_ui::kGenericExperimentChoiceEnabled, switches::kTopChromeTouchUi,
579      switches::kTopChromeTouchUiEnabled}};
580
581 #if defined(OS_CHROMEOS)
582 const char kLacrosSupportInternalName[] = "lacros-support";
583
584 const FeatureEntry::Choice kUiShowCompositedLayerBordersChoices[] = {
585     {flags_ui::kGenericExperimentChoiceDefault, "", ""},
586     {flag_descriptions::kUiShowCompositedLayerBordersRenderPass,
587      cc::switches::kUIShowCompositedLayerBorders,
588      cc::switches::kCompositedRenderPassBorders},
589     {flag_descriptions::kUiShowCompositedLayerBordersSurface,
590      cc::switches::kUIShowCompositedLayerBorders,
591      cc::switches::kCompositedSurfaceBorders},
592     {flag_descriptions::kUiShowCompositedLayerBordersLayer,
593      cc::switches::kUIShowCompositedLayerBorders,
594      cc::switches::kCompositedLayerBorders},
595     {flag_descriptions::kUiShowCompositedLayerBordersAll,
596      cc::switches::kUIShowCompositedLayerBorders, ""}};
597
598 #endif  // OS_CHROMEOS
599
600 #if defined(OS_CHROMEOS)
601 const FeatureEntry::Choice kCrosRegionsModeChoices[] = {
602     {flag_descriptions::kCrosRegionsModeDefault, "", ""},
603     {flag_descriptions::kCrosRegionsModeOverride,
604      chromeos::switches::kCrosRegionsMode,
605      chromeos::switches::kCrosRegionsModeOverride},
606     {flag_descriptions::kCrosRegionsModeHide,
607      chromeos::switches::kCrosRegionsMode,
608      chromeos::switches::kCrosRegionsModeHide},
609 };
610 #endif  // OS_CHROMEOS
611
612 const FeatureEntry::Choice kForceUIDirectionChoices[] = {
613     {flags_ui::kGenericExperimentChoiceDefault, "", ""},
614     {flag_descriptions::kForceDirectionLtr, switches::kForceUIDirection,
615      switches::kForceDirectionLTR},
616     {flag_descriptions::kForceDirectionRtl, switches::kForceUIDirection,
617      switches::kForceDirectionRTL},
618 };
619
620 const FeatureEntry::Choice kForceTextDirectionChoices[] = {
621     {flags_ui::kGenericExperimentChoiceDefault, "", ""},
622     {flag_descriptions::kForceDirectionLtr, switches::kForceTextDirection,
623      switches::kForceDirectionLTR},
624     {flag_descriptions::kForceDirectionRtl, switches::kForceTextDirection,
625      switches::kForceDirectionRTL},
626 };
627
628 #if defined(OS_CHROMEOS)
629 const FeatureEntry::Choice kSchedulerConfigurationChoices[] = {
630     {flags_ui::kGenericExperimentChoiceDefault, "", ""},
631     {flag_descriptions::kSchedulerConfigurationConservative,
632      switches::kSchedulerConfiguration,
633      switches::kSchedulerConfigurationConservative},
634     {flag_descriptions::kSchedulerConfigurationPerformance,
635      switches::kSchedulerConfiguration,
636      switches::kSchedulerConfigurationPerformance},
637 };
638 #endif  // OS_CHROMEOS
639
640 #if defined(OS_ANDROID)
641 const FeatureEntry::FeatureParam kCompactSuggestions_SemicompactVariant[] = {
642     {"omnibox_compact_suggestions_variant", "semi-compact"}};
643
644 const FeatureEntry::FeatureVariation kCompactSuggestionsVariations[] = {
645     {"- Semi-compact", kCompactSuggestions_SemicompactVariant,
646      base::size(kCompactSuggestions_SemicompactVariant), nullptr},
647 };
648 #endif  // OS_ANDROID
649
650 const FeatureEntry::Choice kEnableUseZoomForDSFChoices[] = {
651     {flag_descriptions::kEnableUseZoomForDsfChoiceDefault, "", ""},
652     {flag_descriptions::kEnableUseZoomForDsfChoiceEnabled,
653      switches::kEnableUseZoomForDSF, "true"},
654     {flag_descriptions::kEnableUseZoomForDsfChoiceDisabled,
655      switches::kEnableUseZoomForDSF, "false"},
656 };
657
658 const FeatureEntry::Choice kSiteIsolationOptOutChoices[] = {
659     {flag_descriptions::kSiteIsolationOptOutChoiceDefault, "", ""},
660     {flag_descriptions::kSiteIsolationOptOutChoiceOptOut,
661      switches::kDisableSiteIsolation, ""},
662 };
663
664 const FeatureEntry::Choice kForceColorProfileChoices[] = {
665     {flags_ui::kGenericExperimentChoiceDefault, "", ""},
666     {flag_descriptions::kForceColorProfileSRGB,
667      switches::kForceDisplayColorProfile, "srgb"},
668     {flag_descriptions::kForceColorProfileP3,
669      switches::kForceDisplayColorProfile, "display-p3-d65"},
670     {flag_descriptions::kForceColorProfileColorSpin,
671      switches::kForceDisplayColorProfile, "color-spin-gamma24"},
672     {flag_descriptions::kForceColorProfileSCRGBLinear,
673      switches::kForceDisplayColorProfile, "scrgb-linear"},
674     {flag_descriptions::kForceColorProfileHDR10,
675      switches::kForceDisplayColorProfile, "hdr10"},
676 };
677
678 const FeatureEntry::Choice kForceEffectiveConnectionTypeChoices[] = {
679     {flags_ui::kGenericExperimentChoiceDefault, "", ""},
680     {flag_descriptions::kEffectiveConnectionTypeUnknownDescription,
681      network::switches::kForceEffectiveConnectionType,
682      net::kEffectiveConnectionTypeUnknown},
683     {flag_descriptions::kEffectiveConnectionTypeOfflineDescription,
684      network::switches::kForceEffectiveConnectionType,
685      net::kEffectiveConnectionTypeOffline},
686     {flag_descriptions::kEffectiveConnectionTypeSlow2GDescription,
687      network::switches::kForceEffectiveConnectionType,
688      net::kEffectiveConnectionTypeSlow2G},
689     {flag_descriptions::kEffectiveConnectionTypeSlow2GOnCellularDescription,
690      network::switches::kForceEffectiveConnectionType,
691      net::kEffectiveConnectionTypeSlow2GOnCellular},
692     {flag_descriptions::kEffectiveConnectionType2GDescription,
693      network::switches::kForceEffectiveConnectionType,
694      net::kEffectiveConnectionType2G},
695     {flag_descriptions::kEffectiveConnectionType3GDescription,
696      network::switches::kForceEffectiveConnectionType,
697      net::kEffectiveConnectionType3G},
698     {flag_descriptions::kEffectiveConnectionType4GDescription,
699      network::switches::kForceEffectiveConnectionType,
700      net::kEffectiveConnectionType4G},
701 };
702
703 // Ensure that all effective connection types returned by Network Quality
704 // Estimator (NQE) are also exposed via flags.
705 static_assert(net::EFFECTIVE_CONNECTION_TYPE_LAST + 2 ==
706                   base::size(kForceEffectiveConnectionTypeChoices),
707               "ECT enum value is not handled.");
708 static_assert(net::EFFECTIVE_CONNECTION_TYPE_UNKNOWN == 0,
709               "ECT enum value is not handled.");
710 static_assert(net::EFFECTIVE_CONNECTION_TYPE_4G + 1 ==
711                   net::EFFECTIVE_CONNECTION_TYPE_LAST,
712               "ECT enum value is not handled.");
713
714 const FeatureEntry::FeatureParam kIsolatedPrerenderPrefetchLimitNone[] = {
715     {"max_srp_prefetches", "-1"}};
716 const FeatureEntry::FeatureParam kIsolatedPrerenderPrefetchLimitZero[] = {
717     {"max_srp_prefetches", "0"}};
718 const FeatureEntry::FeatureParam kIsolatedPrerenderPrefetchLimitOne[] = {
719     {"max_srp_prefetches", "1"}};
720 const FeatureEntry::FeatureParam kIsolatedPrerenderPrefetchLimitTwo[] = {
721     {"max_srp_prefetches", "2"}};
722 const FeatureEntry::FeatureParam kIsolatedPrerenderPrefetchLimitThree[] = {
723     {"max_srp_prefetches", "3"}};
724 const FeatureEntry::FeatureParam kIsolatedPrerenderPrefetchLimitFour[] = {
725     {"max_srp_prefetches", "4"}};
726 const FeatureEntry::FeatureParam kIsolatedPrerenderPrefetchLimitFive[] = {
727     {"max_srp_prefetches", "5"}};
728 const FeatureEntry::FeatureParam kIsolatedPrerenderPrefetchLimitTen[] = {
729     {"max_srp_prefetches", "10"}};
730 const FeatureEntry::FeatureParam kIsolatedPrerenderPrefetchLimitFifteen[] = {
731     {"max_srp_prefetches", "15"}};
732
733 const FeatureEntry::FeatureVariation
734     kIsolatedPrerenderFeatureWithPrefetchLimit[] = {
735         {"Unlimited Prefetches", kIsolatedPrerenderPrefetchLimitNone,
736          base::size(kIsolatedPrerenderPrefetchLimitNone), nullptr},
737         {"Zero Prefetches", kIsolatedPrerenderPrefetchLimitZero,
738          base::size(kIsolatedPrerenderPrefetchLimitZero), nullptr},
739         {"One Prefetch", kIsolatedPrerenderPrefetchLimitOne,
740          base::size(kIsolatedPrerenderPrefetchLimitOne), nullptr},
741         {"Two Prefetches", kIsolatedPrerenderPrefetchLimitTwo,
742          base::size(kIsolatedPrerenderPrefetchLimitTwo), nullptr},
743         {"Three Prefetches", kIsolatedPrerenderPrefetchLimitThree,
744          base::size(kIsolatedPrerenderPrefetchLimitThree), nullptr},
745         {"Four Prefetches", kIsolatedPrerenderPrefetchLimitFour,
746          base::size(kIsolatedPrerenderPrefetchLimitFour), nullptr},
747         {"Five Prefetches", kIsolatedPrerenderPrefetchLimitFive,
748          base::size(kIsolatedPrerenderPrefetchLimitFive), nullptr},
749         {"Ten Prefetches", kIsolatedPrerenderPrefetchLimitTen,
750          base::size(kIsolatedPrerenderPrefetchLimitTen), nullptr},
751         {"Fifteen Prefetches", kIsolatedPrerenderPrefetchLimitFifteen,
752          base::size(kIsolatedPrerenderPrefetchLimitFifteen), nullptr},
753 };
754
755 #if defined(OS_ANDROID)
756 const FeatureEntry::FeatureParam
757     kAutofillKeyboardAccessoryFeatureVariationAnimationDuration[] = {
758         {autofill::kAutofillKeyboardAccessoryAnimationDurationKey, "1000"}};
759
760 const FeatureEntry::FeatureParam
761     kAutofillKeyboardAccessoryFeatureVariationLimitLabelWidth[] = {
762         {autofill::kAutofillKeyboardAccessoryLimitLabelWidthKey, "true"}};
763
764 const FeatureEntry::FeatureParam
765     kAutofillKeyboardAccessoryFeatureVariationShowHint[] = {
766         {autofill::kAutofillKeyboardAccessoryHintKey, "true"}};
767
768 const FeatureEntry::FeatureParam
769     kAutofillKeyboardAccessoryFeatureVariationAnimateWithHint[] = {
770         {autofill::kAutofillKeyboardAccessoryAnimationDurationKey, "1000"},
771         {autofill::kAutofillKeyboardAccessoryHintKey, "true"}};
772
773 const FeatureEntry::FeatureVariation
774     kAutofillKeyboardAccessoryFeatureVariations[] = {
775         {"Animate", kAutofillKeyboardAccessoryFeatureVariationAnimationDuration,
776          base::size(
777              kAutofillKeyboardAccessoryFeatureVariationAnimationDuration),
778          nullptr},
779         {"Limit label width",
780          kAutofillKeyboardAccessoryFeatureVariationLimitLabelWidth,
781          base::size(kAutofillKeyboardAccessoryFeatureVariationLimitLabelWidth),
782          nullptr},
783         {"Show hint", kAutofillKeyboardAccessoryFeatureVariationShowHint,
784          base::size(kAutofillKeyboardAccessoryFeatureVariationShowHint),
785          nullptr},
786         {"Animate with hint",
787          kAutofillKeyboardAccessoryFeatureVariationAnimateWithHint,
788          base::size(kAutofillKeyboardAccessoryFeatureVariationAnimateWithHint),
789          nullptr}};
790 #endif  // OS_ANDROID
791
792 const FeatureEntry::Choice kMemlogModeChoices[] = {
793     {flags_ui::kGenericExperimentChoiceDisabled, "", ""},
794     {flag_descriptions::kMemlogModeMinimal, heap_profiling::kMemlogMode,
795      heap_profiling::kMemlogModeMinimal},
796     {flag_descriptions::kMemlogModeAll, heap_profiling::kMemlogMode,
797      heap_profiling::kMemlogModeAll},
798     {flag_descriptions::kMemlogModeBrowser, heap_profiling::kMemlogMode,
799      heap_profiling::kMemlogModeBrowser},
800     {flag_descriptions::kMemlogModeGpu, heap_profiling::kMemlogMode,
801      heap_profiling::kMemlogModeGpu},
802     {flag_descriptions::kMemlogModeAllRenderers, heap_profiling::kMemlogMode,
803      heap_profiling::kMemlogModeAllRenderers},
804     {flag_descriptions::kMemlogModeRendererSampling,
805      heap_profiling::kMemlogMode, heap_profiling::kMemlogModeRendererSampling},
806 };
807
808 const FeatureEntry::Choice kMemlogStackModeChoices[] = {
809     {flags_ui::kGenericExperimentChoiceDefault, "", ""},
810     {flag_descriptions::kMemlogStackModeNative,
811      heap_profiling::kMemlogStackMode, heap_profiling::kMemlogStackModeNative},
812     {flag_descriptions::kMemlogStackModeNativeWithThreadNames,
813      heap_profiling::kMemlogStackMode,
814      heap_profiling::kMemlogStackModeNativeWithThreadNames},
815     {flag_descriptions::kMemlogStackModePseudo,
816      heap_profiling::kMemlogStackMode, heap_profiling::kMemlogStackModePseudo},
817     {flag_descriptions::kMemlogStackModeMixed, heap_profiling::kMemlogStackMode,
818      heap_profiling::kMemlogStackModeMixed},
819 };
820
821 const FeatureEntry::Choice kMemlogSamplingRateChoices[] = {
822     {flags_ui::kGenericExperimentChoiceDefault, "", ""},
823     {flag_descriptions::kMemlogSamplingRate10KB,
824      heap_profiling::kMemlogSamplingRate,
825      heap_profiling::kMemlogSamplingRate10KB},
826     {flag_descriptions::kMemlogSamplingRate50KB,
827      heap_profiling::kMemlogSamplingRate,
828      heap_profiling::kMemlogSamplingRate50KB},
829     {flag_descriptions::kMemlogSamplingRate100KB,
830      heap_profiling::kMemlogSamplingRate,
831      heap_profiling::kMemlogSamplingRate100KB},
832     {flag_descriptions::kMemlogSamplingRate500KB,
833      heap_profiling::kMemlogSamplingRate,
834      heap_profiling::kMemlogSamplingRate500KB},
835     {flag_descriptions::kMemlogSamplingRate1MB,
836      heap_profiling::kMemlogSamplingRate,
837      heap_profiling::kMemlogSamplingRate1MB},
838     {flag_descriptions::kMemlogSamplingRate5MB,
839      heap_profiling::kMemlogSamplingRate,
840      heap_profiling::kMemlogSamplingRate5MB},
841 };
842
843 #if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN)
844 const FeatureEntry::FeatureParam kOmniboxDocumentProviderServerScoring[] = {
845     {"DocumentUseServerScore", "true"},
846     {"DocumentUseClientScore", "false"},
847     {"DocumentCapScorePerRank", "false"},
848     {"DocumentBoostOwned", "false"},
849 };
850 const FeatureEntry::FeatureParam
851     kOmniboxDocumentProviderServerScoringCappedByRank[] = {
852         {"DocumentUseServerScore", "true"},
853         {"DocumentUseClientScore", "false"},
854         {"DocumentCapScorePerRank", "true"},
855         {"DocumentBoostOwned", "true"},
856 };
857 const FeatureEntry::FeatureParam kOmniboxDocumentProviderClientScoring[] = {
858     {"DocumentUseServerScore", "false"},
859     {"DocumentUseClientScore", "true"},
860     {"DocumentCapScorePerRank", "false"},
861     {"DocumentBoostOwned", "false"},
862 };
863 const FeatureEntry::FeatureParam
864     kOmniboxDocumentProviderServerAndClientScoring[] = {
865         {"DocumentUseServerScore", "true"},
866         {"DocumentUseClientScore", "true"},
867         {"DocumentCapScorePerRank", "false"},
868         {"DocumentBoostOwned", "false"},
869 };
870
871 const FeatureEntry::FeatureVariation kOmniboxDocumentProviderVariations[] = {
872     {"server scores", kOmniboxDocumentProviderServerScoring,
873      base::size(kOmniboxDocumentProviderServerScoring), nullptr},
874     {"server scores capped by rank",
875      kOmniboxDocumentProviderServerScoringCappedByRank,
876      base::size(kOmniboxDocumentProviderServerScoringCappedByRank), nullptr},
877     {"client scores", kOmniboxDocumentProviderClientScoring,
878      base::size(kOmniboxDocumentProviderClientScoring), nullptr},
879     {"server and client scores", kOmniboxDocumentProviderServerAndClientScoring,
880      base::size(kOmniboxDocumentProviderServerAndClientScoring), nullptr}};
881
882 // The variations include 13 of the 16 possible permutations of "Title UI",
883 // "2-Line UI", "Title AC", and "Non-Prefix AC". The remaining 3 permutations
884 // would effectively be no-ops.
885 // - Title UI: Displays suggestion titles in the omnibox.
886 //   E.g. en.wikipe | [dia.org/wiki/Space_Shuttle] (Space Shuttle - Wikipedia)
887 // - 2-Line UI: Stretches the omnibox vertically to fit 2 lines and displays
888 //   titles on a 2nd line
889 //   E.g. en.wikipe | [dia.org/wiki/Space_Shuttle]
890 //        Space Shuttle - Wikipedia
891 // - Title AC: Autocompletes suggestions when the input matches the title.
892 //   E.g. Space Sh | [ttle - Wikipedia] (en.wikipedia.org/wiki/Space_Shuttle)
893 // - Non-Prefix AC: Autocompletes suggestions when the input is not necessarily
894 //   a prefix.
895 //   E.g. [en.wikipe dia.org/] wiki/Spac | [e_Shuttle] (Space Shuttle -
896 //   Wikipedia)
897 const FeatureEntry::FeatureVariation kOmniboxRichAutocompletionVariations[] = {
898     {
899         "Title UI",
900         (FeatureEntry::FeatureParam[]){
901             {"RichAutocompletionShowTitles", "true"}},
902         1,
903         nullptr,
904     },
905     // Skipping "2-Line UI" as that would be a no-op
906     {
907         "Title UI & 2-Line UI",
908         (FeatureEntry::FeatureParam[]){
909             {"RichAutocompletionShowTitles", "true"},
910             {"RichAutocompletionTwoLineOmnibox", "true"}},
911         2,
912         nullptr,
913     },
914     {
915         "Title AC",
916         (FeatureEntry::FeatureParam[]){
917             {"RichAutocompletionAutocompleteTitles", "true"}},
918         1,
919         nullptr,
920     },
921     {
922         "Title UI & Title AC",
923         (FeatureEntry::FeatureParam[]){
924             {"RichAutocompletionShowTitles", "true"},
925             {"RichAutocompletionAutocompleteTitles", "true"}},
926         2,
927         nullptr,
928     },
929     {
930         "2-Line UI & Title AC",
931         (FeatureEntry::FeatureParam[]){
932             {"RichAutocompletionTwoLineOmnibox", "true"},
933             {"RichAutocompletionAutocompleteTitles", "true"}},
934         2,
935         nullptr,
936     },
937     {
938         "Title UI , 2-Line UI, & Title AC",
939         (FeatureEntry::FeatureParam[]){
940             {"RichAutocompletionShowTitles", "true"},
941             {"RichAutocompletionAutocompleteTitles", "true"},
942             {"RichAutocompletionTwoLineOmnibox", "true"}},
943         3,
944         nullptr,
945     },
946     {
947         "Non-Prefix AC",
948         (FeatureEntry::FeatureParam[]){
949             {"RichAutocompletionAutocompleteNonPrefix", "true"}},
950         1,
951         nullptr,
952     },
953     {
954         "Title UI & Non-Prefix AC",
955         (FeatureEntry::FeatureParam[]){
956             {"RichAutocompletionShowTitles", "true"},
957             {"RichAutocompletionAutocompleteNonPrefix", "true"}},
958         2,
959         nullptr,
960     },
961     // Skipping "2-Line UI & Non-Prefix AC" as that would be a no-op
962     {
963         "Title UI, 2-Line UI, & Non-Prefix AC",
964         (FeatureEntry::FeatureParam[]){
965             {"RichAutocompletionShowTitles", "true"},
966             {"RichAutocompletionTwoLineOmnibox", "true"},
967             {"RichAutocompletionAutocompleteNonPrefix", "true"}},
968         3,
969         nullptr,
970     },
971     {
972         "Title AC & Non-Prefix AC",
973         (FeatureEntry::FeatureParam[]){
974             {"RichAutocompletionAutocompleteTitles", "true"},
975             {"RichAutocompletionAutocompleteNonPrefix", "true"}},
976         2,
977         nullptr,
978     },
979     {
980         "Title UI, Title AC, & Non-Prefix AC",
981         (FeatureEntry::FeatureParam[]){
982             {"RichAutocompletionShowTitles", "true"},
983             {"RichAutocompletionAutocompleteTitles", "true"},
984             {"RichAutocompletionAutocompleteNonPrefix", "true"}},
985         3,
986         nullptr,
987     },
988     {
989         "2-Line UI, Title AC, & Non-Prefix AC",
990         (FeatureEntry::FeatureParam[]){
991             {"RichAutocompletionTwoLineOmnibox", "true"},
992             {"RichAutocompletionAutocompleteTitles", "true"},
993             {"RichAutocompletionAutocompleteNonPrefix", "true"}},
994         3,
995         nullptr,
996     },
997     {
998         "Title UI, 2-Line UI, Title AC, & Non-Prefix AC",
999         (FeatureEntry::FeatureParam[]){
1000             {"RichAutocompletionAutocompleteNonPrefix", "true"},
1001             {"RichAutocompletionShowTitles", "true"},
1002             {"RichAutocompletionAutocompleteTitles", "true"},
1003             {"RichAutocompletionTwoLineOmnibox", "true"}},
1004         4,
1005         nullptr,
1006     }};
1007
1008 #endif  // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN)
1009
1010 const FeatureEntry::FeatureParam kOmniboxOnFocusSuggestionsParamSERP[] = {
1011     {"ZeroSuggestVariant:6:*", "RemoteSendUrl"},
1012     {"ZeroSuggestVariant:9:*", "RemoteSendUrl"}};
1013 #if defined(OS_ANDROID)
1014 const FeatureEntry::FeatureParam kOmniboxNTPZPSLocal[] = {
1015     {"ZeroSuggestVariant:1:*", "Local"},
1016     {"ZeroSuggestVariant:7:*", "Local"},
1017     {"ZeroSuggestVariant:8:*", "Local"}};
1018 const FeatureEntry::FeatureParam kOmniboxNTPZPSRemote[] = {
1019     {"ZeroSuggestVariant:1:*", "RemoteNoUrl"},
1020     {"ZeroSuggestVariant:7:*", "RemoteNoUrl"},
1021     {"ZeroSuggestVariant:8:*", "RemoteNoUrl"}};
1022 const FeatureEntry::FeatureParam kOmniboxNTPZPSRemoteLocal[] = {
1023     {"ZeroSuggestVariant:1:*", "RemoteNoUrl,Local"},
1024     {"ZeroSuggestVariant:7:*", "RemoteNoUrl,Local"},
1025     {"ZeroSuggestVariant:8:*", "RemoteNoUrl,Local"}};
1026 #else   // !defined(OS_ANDROID)
1027 const FeatureEntry::FeatureParam kNTPOmniboxZPSRemoteLocal[] = {
1028     {"ZeroSuggestVariant:1:*", "RemoteNoUrl,Local"},
1029     {"ZeroSuggestVariant:7:*", "RemoteNoUrl,Local"}};
1030 const FeatureEntry::FeatureParam kNTPOmniboxRealboxZPSRemoteLocal[] = {
1031     {"ZeroSuggestVariant:1:*", "RemoteNoUrl,Local"},
1032     {"ZeroSuggestVariant:7:*", "RemoteNoUrl,Local"},
1033     {"ZeroSuggestVariant:15:*", "RemoteNoUrl,Local"}};
1034 #endif  // defined(OS_ANDROID)
1035
1036 const FeatureEntry::FeatureVariation kOmniboxOnFocusSuggestionsVariations[] = {
1037     {"SERP - RemoteSendURL", kOmniboxOnFocusSuggestionsParamSERP,
1038      base::size(kOmniboxOnFocusSuggestionsParamSERP),
1039      "t3315869" /* variation_id */},
1040 #if defined(OS_ANDROID)
1041     {"ZPS on NTP: Local History", kOmniboxNTPZPSLocal,
1042      base::size(kOmniboxNTPZPSLocal), nullptr},
1043     {"ZPS on NTP: Remote History", kOmniboxNTPZPSRemote,
1044      base::size(kOmniboxNTPZPSRemote), /* variation_id */ "t3314248"},
1045     {"ZPS on NTP: Extended Remote History", kOmniboxNTPZPSRemote,
1046      base::size(kOmniboxNTPZPSRemote), /* variation_id */ "t3317456"},
1047     {"ZPS on NTP: Onboarding", kOmniboxNTPZPSRemote,
1048      base::size(kOmniboxNTPZPSRemote), /* variation_id */ "t3316638"},
1049     {"ZPS on NTP: PZPS, Remote, Local", kOmniboxNTPZPSRemoteLocal,
1050      base::size(kOmniboxNTPZPSRemoteLocal), /* variation_id */ "t3317569"},
1051     {"Contextual Web", kOmniboxNTPZPSRemoteLocal,
1052      base::size(kOmniboxNTPZPSRemoteLocal), /* variation_id */ "t3317605"},
1053 #else   // !defined(OS_ANDROID)
1054     {"NTP Omnibox - Remote History, Local History", kNTPOmniboxZPSRemoteLocal,
1055      base::size(kNTPOmniboxZPSRemoteLocal), "t3316133" /* variation_id */},
1056     {"NTP Omnibox - Remote History + PZPS, Local History",
1057      kNTPOmniboxZPSRemoteLocal, base::size(kNTPOmniboxZPSRemoteLocal),
1058      "t3317462" /* variation_id */},
1059     {"NTP Omnibox/Realbox - Remote History, Local History",
1060      kNTPOmniboxRealboxZPSRemoteLocal,
1061      base::size(kNTPOmniboxRealboxZPSRemoteLocal),
1062      "t3316133" /* variation_id */},
1063     {"NTP Omnibox/Realbox - Remote History + PZPS, Local History",
1064      kNTPOmniboxRealboxZPSRemoteLocal,
1065      base::size(kNTPOmniboxRealboxZPSRemoteLocal),
1066      "t3317462" /* variation_id */},
1067 #endif  // defined(OS_ANDROID)
1068 };
1069
1070 const FeatureEntry::FeatureParam kOmniboxUIMaxAutocompleteMatches3[] = {
1071     {OmniboxFieldTrial::kUIMaxAutocompleteMatchesParam, "3"}};
1072 const FeatureEntry::FeatureParam kOmniboxUIMaxAutocompleteMatches4[] = {
1073     {OmniboxFieldTrial::kUIMaxAutocompleteMatchesParam, "4"}};
1074 const FeatureEntry::FeatureParam kOmniboxUIMaxAutocompleteMatches5[] = {
1075     {OmniboxFieldTrial::kUIMaxAutocompleteMatchesParam, "5"}};
1076 const FeatureEntry::FeatureParam kOmniboxUIMaxAutocompleteMatches6[] = {
1077     {OmniboxFieldTrial::kUIMaxAutocompleteMatchesParam, "6"}};
1078 const FeatureEntry::FeatureParam kOmniboxUIMaxAutocompleteMatches7[] = {
1079     {OmniboxFieldTrial::kUIMaxAutocompleteMatchesParam, "7"}};
1080 const FeatureEntry::FeatureParam kOmniboxUIMaxAutocompleteMatches8[] = {
1081     {OmniboxFieldTrial::kUIMaxAutocompleteMatchesParam, "8"}};
1082 const FeatureEntry::FeatureParam kOmniboxUIMaxAutocompleteMatches9[] = {
1083     {OmniboxFieldTrial::kUIMaxAutocompleteMatchesParam, "9"}};
1084 const FeatureEntry::FeatureParam kOmniboxUIMaxAutocompleteMatches10[] = {
1085     {OmniboxFieldTrial::kUIMaxAutocompleteMatchesParam, "10"}};
1086 const FeatureEntry::FeatureParam kOmniboxUIMaxAutocompleteMatches12[] = {
1087     {OmniboxFieldTrial::kUIMaxAutocompleteMatchesParam, "12"}};
1088
1089 const FeatureEntry::FeatureVariation
1090     kOmniboxUIMaxAutocompleteMatchesVariations[] = {
1091         {"3 matches", kOmniboxUIMaxAutocompleteMatches3,
1092          base::size(kOmniboxUIMaxAutocompleteMatches3), nullptr},
1093         {"4 matches", kOmniboxUIMaxAutocompleteMatches4,
1094          base::size(kOmniboxUIMaxAutocompleteMatches4), nullptr},
1095         {"5 matches", kOmniboxUIMaxAutocompleteMatches5,
1096          base::size(kOmniboxUIMaxAutocompleteMatches5), nullptr},
1097         {"6 matches", kOmniboxUIMaxAutocompleteMatches6,
1098          base::size(kOmniboxUIMaxAutocompleteMatches6), nullptr},
1099         {"7 matches", kOmniboxUIMaxAutocompleteMatches7,
1100          base::size(kOmniboxUIMaxAutocompleteMatches7), nullptr},
1101         {"8 matches", kOmniboxUIMaxAutocompleteMatches8,
1102          base::size(kOmniboxUIMaxAutocompleteMatches8), nullptr},
1103         {"9 matches", kOmniboxUIMaxAutocompleteMatches9,
1104          base::size(kOmniboxUIMaxAutocompleteMatches9), nullptr},
1105         {"10 matches", kOmniboxUIMaxAutocompleteMatches10,
1106          base::size(kOmniboxUIMaxAutocompleteMatches10), nullptr},
1107         {"12 matches", kOmniboxUIMaxAutocompleteMatches12,
1108          base::size(kOmniboxUIMaxAutocompleteMatches12), nullptr}};
1109
1110 const FeatureEntry::FeatureParam kOmniboxMaxURLMatches2[] = {
1111     {OmniboxFieldTrial::kOmniboxMaxURLMatchesParam, "2"}};
1112 const FeatureEntry::FeatureParam kOmniboxMaxURLMatches3[] = {
1113     {OmniboxFieldTrial::kOmniboxMaxURLMatchesParam, "3"}};
1114 const FeatureEntry::FeatureParam kOmniboxMaxURLMatches4[] = {
1115     {OmniboxFieldTrial::kOmniboxMaxURLMatchesParam, "4"}};
1116 const FeatureEntry::FeatureParam kOmniboxMaxURLMatches5[] = {
1117     {OmniboxFieldTrial::kOmniboxMaxURLMatchesParam, "5"}};
1118 const FeatureEntry::FeatureParam kOmniboxMaxURLMatches6[] = {
1119     {OmniboxFieldTrial::kOmniboxMaxURLMatchesParam, "6"}};
1120
1121 const FeatureEntry::FeatureVariation kOmniboxMaxURLMatchesVariations[] = {
1122     {"2 matches", kOmniboxMaxURLMatches2, base::size(kOmniboxMaxURLMatches2),
1123      nullptr},
1124     {"3 matches", kOmniboxMaxURLMatches3, base::size(kOmniboxMaxURLMatches3),
1125      nullptr},
1126     {"4 matches", kOmniboxMaxURLMatches4, base::size(kOmniboxMaxURLMatches4),
1127      nullptr},
1128     {"5 matches", kOmniboxMaxURLMatches5, base::size(kOmniboxMaxURLMatches5),
1129      nullptr},
1130     {"6 matches", kOmniboxMaxURLMatches6, base::size(kOmniboxMaxURLMatches6),
1131      nullptr}};
1132
1133 const FeatureEntry::FeatureParam kMarkHttpAsDangerous[] = {
1134     {security_state::features::kMarkHttpAsFeatureParameterName,
1135      security_state::features::kMarkHttpAsParameterDangerous}};
1136 const FeatureEntry::FeatureParam kMarkHttpAsWarningAndDangerousOnFormEdits[] = {
1137     {security_state::features::kMarkHttpAsFeatureParameterName,
1138      security_state::features::
1139          kMarkHttpAsParameterWarningAndDangerousOnFormEdits}};
1140 const FeatureEntry::FeatureParam kMarkHttpAsDangerWarning[] = {
1141     {security_state::features::kMarkHttpAsFeatureParameterName,
1142      security_state::features::kMarkHttpAsParameterDangerWarning}};
1143
1144 // The "Enabled" state for this feature is "0" and representing setting A.
1145 const FeatureEntry::FeatureParam kTabHoverCardsSettingB[] = {
1146     {features::kTabHoverCardsFeatureParameterName, "1"}};
1147 const FeatureEntry::FeatureParam kTabHoverCardsSettingC[] = {
1148     {features::kTabHoverCardsFeatureParameterName, "2"}};
1149
1150 const FeatureEntry::FeatureVariation kTabHoverCardsFeatureVariations[] = {
1151     {"B", kTabHoverCardsSettingB, base::size(kTabHoverCardsSettingB), nullptr},
1152     {"C", kTabHoverCardsSettingC, base::size(kTabHoverCardsSettingC), nullptr}};
1153
1154 const FeatureEntry::FeatureVariation kMarkHttpAsFeatureVariations[] = {
1155     {"(mark as actively dangerous)", kMarkHttpAsDangerous,
1156      base::size(kMarkHttpAsDangerous), nullptr},
1157     {"(mark with a Not Secure warning and dangerous on form edits)",
1158      kMarkHttpAsWarningAndDangerousOnFormEdits,
1159      base::size(kMarkHttpAsWarningAndDangerousOnFormEdits), nullptr},
1160     {"(mark with a grey triangle icon)", kMarkHttpAsDangerWarning,
1161      base::size(kMarkHttpAsDangerWarning), nullptr}};
1162
1163 #if defined(OS_ANDROID)
1164 const FeatureEntry::FeatureParam kTranslateForceTriggerOnEnglishHeuristic[] = {
1165     {language::kOverrideModelKey, language::kOverrideModelHeuristicValue},
1166     {language::kEnforceRankerKey, "false"}};
1167 const FeatureEntry::FeatureParam kTranslateForceTriggerOnEnglishGeo[] = {
1168     {language::kOverrideModelKey, language::kOverrideModelGeoValue},
1169     {language::kEnforceRankerKey, "false"}};
1170 const FeatureEntry::FeatureParam kTranslateForceTriggerOnEnglishBackoff[] = {
1171     {language::kOverrideModelKey, language::kOverrideModelDefaultValue},
1172     {language::kEnforceRankerKey, "false"},
1173     {language::kBackoffThresholdKey, "0"}};
1174 const FeatureEntry::FeatureVariation
1175     kTranslateForceTriggerOnEnglishVariations[] = {
1176         {"(Heuristic model without Ranker)",
1177          kTranslateForceTriggerOnEnglishHeuristic,
1178          base::size(kTranslateForceTriggerOnEnglishHeuristic), nullptr},
1179         {"(Geo model without Ranker)", kTranslateForceTriggerOnEnglishGeo,
1180          base::size(kTranslateForceTriggerOnEnglishGeo), nullptr},
1181         {"(Zero threshold)", kTranslateForceTriggerOnEnglishBackoff,
1182          base::size(kTranslateForceTriggerOnEnglishBackoff), nullptr}};
1183
1184 const FeatureEntry::FeatureParam kOverscrollHistoryNavigationBottomSheet[] = {
1185     {"overscroll_history_navigation_bottom_sheet", "true"}};
1186 const FeatureEntry::FeatureVariation kOverscrollHistoryNavigationVariations[] =
1187     {{"Navigation sheet", kOverscrollHistoryNavigationBottomSheet,
1188       base::size(kOverscrollHistoryNavigationBottomSheet), nullptr}};
1189 #endif  // defined(OS_ANDROID)
1190
1191 #if defined(OS_ANDROID)
1192 const FeatureEntry::FeatureParam kExploreSitesExperimental = {
1193     chrome::android::explore_sites::kExploreSitesVariationParameterName,
1194     chrome::android::explore_sites::kExploreSitesVariationExperimental};
1195 const FeatureEntry::FeatureParam kExploreSitesDenseTitleBottom[] = {
1196     {chrome::android::explore_sites::kExploreSitesDenseVariationParameterName,
1197      chrome::android::explore_sites::
1198          kExploreSitesDenseVariationDenseTitleBottom},
1199 };
1200 const FeatureEntry::FeatureParam kExploreSitesDenseTitleRight[] = {
1201     {chrome::android::explore_sites::kExploreSitesDenseVariationParameterName,
1202      chrome::android::explore_sites::
1203          kExploreSitesDenseVariationDenseTitleRight},
1204 };
1205 const FeatureEntry::FeatureVariation kExploreSitesVariations[] = {
1206     {"Experimental", &kExploreSitesExperimental, 1, nullptr},
1207     {"Dense Title Bottom", kExploreSitesDenseTitleBottom,
1208      base::size(kExploreSitesDenseTitleBottom), nullptr},
1209     {"Dense Title Right", kExploreSitesDenseTitleRight,
1210      base::size(kExploreSitesDenseTitleRight), nullptr}};
1211 const FeatureEntry::FeatureParam kLongpressResolvePreserveTap = {
1212     contextual_search::kLongpressResolveParamName,
1213     contextual_search::kLongpressResolvePreserveTap};
1214 const FeatureEntry::FeatureVariation kLongpressResolveVariations[] = {
1215     {"and preserve Tap behavior", &kLongpressResolvePreserveTap, 1, nullptr},
1216 };
1217
1218 #endif  // defined(OS_ANDROID)
1219
1220 const FeatureEntry::FeatureParam kResamplingInputEventsLSQEnabled[] = {
1221     {"predictor", blink::features::kScrollPredictorNameLsq}};
1222 const FeatureEntry::FeatureParam kResamplingInputEventsKalmanEnabled[] = {
1223     {"predictor", blink::features::kScrollPredictorNameKalman}};
1224 const FeatureEntry::FeatureParam kResamplingInputEventsLinearFirstEnabled[] = {
1225     {"predictor", blink::features::kScrollPredictorNameLinearFirst}};
1226 const FeatureEntry::FeatureParam kResamplingInputEventsLinearSecondEnabled[] = {
1227     {"predictor", blink::features::kScrollPredictorNameLinearSecond}};
1228 const FeatureEntry::FeatureParam
1229     kResamplingInputEventsLinearResamplingEnabled[] = {
1230         {"predictor", blink::features::kScrollPredictorNameLinearResampling}};
1231
1232 const FeatureEntry::FeatureVariation kResamplingInputEventsFeatureVariations[] =
1233     {{blink::features::kScrollPredictorNameLsq,
1234       kResamplingInputEventsLSQEnabled,
1235       base::size(kResamplingInputEventsLSQEnabled), nullptr},
1236      {blink::features::kScrollPredictorNameKalman,
1237       kResamplingInputEventsKalmanEnabled,
1238       base::size(kResamplingInputEventsKalmanEnabled), nullptr},
1239      {blink::features::kScrollPredictorNameLinearFirst,
1240       kResamplingInputEventsLinearFirstEnabled,
1241       base::size(kResamplingInputEventsLinearFirstEnabled), nullptr},
1242      {blink::features::kScrollPredictorNameLinearSecond,
1243       kResamplingInputEventsLinearSecondEnabled,
1244       base::size(kResamplingInputEventsLinearSecondEnabled), nullptr},
1245      {blink::features::kScrollPredictorNameLinearResampling,
1246       kResamplingInputEventsLinearResamplingEnabled,
1247       base::size(kResamplingInputEventsLinearResamplingEnabled), nullptr}};
1248
1249 const FeatureEntry::FeatureParam kFilteringPredictionEmptyFilterEnabled[] = {
1250     {"filter", blink::features::kFilterNameEmpty}};
1251 const FeatureEntry::FeatureParam kFilteringPredictionOneEuroFilterEnabled[] = {
1252     {"filter", blink::features::kFilterNameOneEuro}};
1253
1254 const FeatureEntry::FeatureVariation kFilteringPredictionFeatureVariations[] = {
1255     {blink::features::kFilterNameEmpty, kFilteringPredictionEmptyFilterEnabled,
1256      base::size(kFilteringPredictionEmptyFilterEnabled), nullptr},
1257     {blink::features::kFilterNameOneEuro,
1258      kFilteringPredictionOneEuroFilterEnabled,
1259      base::size(kFilteringPredictionOneEuroFilterEnabled), nullptr}};
1260
1261 #if defined(OS_ANDROID)
1262 const FeatureEntry::FeatureParam kBottomOfflineIndicatorEnabled[] = {
1263     {"bottom_offline_indicator", "true"}};
1264
1265 const FeatureEntry::FeatureVariation kOfflineIndicatorFeatureVariations[] = {
1266     {"(bottom)", kBottomOfflineIndicatorEnabled,
1267      base::size(kBottomOfflineIndicatorEnabled), nullptr}};
1268 #endif  // OS_ANDROID
1269
1270 #if defined(OS_ANDROID)
1271 const FeatureEntry::FeatureParam kTabSwitcherOnReturn_Immediate[] = {
1272     {"tab_switcher_on_return_time_ms", "0"}};
1273 const FeatureEntry::FeatureParam kTabSwitcherOnReturn_1Minute[] = {
1274     {"tab_switcher_on_return_time_ms", "60000"}};
1275 const FeatureEntry::FeatureParam kTabSwitcherOnReturn_30Minutes[] = {
1276     {"tab_switcher_on_return_time_ms", "1800000"}};
1277 const FeatureEntry::FeatureParam kTabSwitcherOnReturn_60Minutes[] = {
1278     {"tab_switcher_on_return_time_ms", "3600000"}};
1279 const FeatureEntry::FeatureVariation kTabSwitcherOnReturnVariations[] = {
1280     {"Immediate", kTabSwitcherOnReturn_Immediate,
1281      base::size(kTabSwitcherOnReturn_30Minutes), nullptr},
1282     {"1 minute", kTabSwitcherOnReturn_1Minute,
1283      base::size(kTabSwitcherOnReturn_30Minutes), nullptr},
1284     {"30 minutes", kTabSwitcherOnReturn_30Minutes,
1285      base::size(kTabSwitcherOnReturn_30Minutes), nullptr},
1286     {"60 minutes", kTabSwitcherOnReturn_60Minutes,
1287      base::size(kTabSwitcherOnReturn_60Minutes), nullptr},
1288 };
1289 #endif  // OS_ANDROID
1290
1291 #if defined(OS_ANDROID)
1292 const FeatureEntry::FeatureParam kChromeDuet_HomeSearchTabSwitcher[] = {
1293     {"chrome_duet_variation", "HomeSearchTabSwitcher"}};
1294
1295 const FeatureEntry::FeatureParam kChromeDuet_HomeSearchShare[] = {
1296     {"chrome_duet_variation", "HomeSearchShare"}};
1297
1298 const FeatureEntry::FeatureParam kChromeDuet_NewTabSearchShare[] = {
1299     {"chrome_duet_variation", "NewTabSearchShare"}};
1300
1301 const FeatureEntry::FeatureVariation kChromeDuetVariations[] = {
1302     {"Home-Search-TabSwitcher Variation", kChromeDuet_HomeSearchTabSwitcher,
1303      base::size(kChromeDuet_HomeSearchTabSwitcher), nullptr},
1304     {"Home-Search-Share Variation", kChromeDuet_HomeSearchShare,
1305      base::size(kChromeDuet_HomeSearchShare), nullptr},
1306     {"NewTab-Search-Share Variation", kChromeDuet_NewTabSearchShare,
1307      base::size(kChromeDuet_NewTabSearchShare), nullptr},
1308 };
1309
1310 const FeatureEntry::FeatureParam kTabGridLayoutAndroid_NewTabVariation[] = {
1311     {"tab_grid_layout_android_new_tab", "NewTabVariation"},
1312     {"allow_to_refetch", "true"}};
1313
1314 const FeatureEntry::FeatureParam kTabGridLayoutAndroid_NewTabTile[] = {
1315     {"tab_grid_layout_android_new_tab_tile", "NewTabTile"}};
1316
1317 const FeatureEntry::FeatureParam
1318     kTabGridLayoutAndroid_ThumbnailAspectRatio_2[] = {
1319         {"thumbnail_aspect_ratio", "2.0"},
1320         {"allow_to_refetch", "true"}};
1321
1322 const FeatureEntry::FeatureParam
1323     kTabGridLayoutAndroid_ThumbnailAspectRatio_three_quarter[] = {
1324         {"thumbnail_aspect_ratio", "0.75"},
1325         {"allow_to_refetch", "true"}};
1326
1327 const FeatureEntry::FeatureParam
1328     kTabGridLayoutAndroid_ThumbnailAspectRatio_half[] = {
1329         {"thumbnail_aspect_ratio", "0.5"},
1330         {"allow_to_refetch", "true"}};
1331
1332 const FeatureEntry::FeatureParam kTabGridLayoutAndroid_DisableRefetch[] = {
1333     {"allow_to_refetch", "false"}};
1334
1335 const FeatureEntry::FeatureParam kTabGridLayoutAndroid_SearchChip[] = {
1336     {"enable_search_term_chip", "true"}};
1337
1338 const FeatureEntry::FeatureVariation kTabGridLayoutAndroidVariations[] = {
1339     {"New Tab Variation", kTabGridLayoutAndroid_NewTabVariation,
1340      base::size(kTabGridLayoutAndroid_NewTabVariation), nullptr},
1341     {"New Tab Tile", kTabGridLayoutAndroid_NewTabTile,
1342      base::size(kTabGridLayoutAndroid_NewTabTile), nullptr},
1343     {"thumbnail aspect ratio - 2:1",
1344      kTabGridLayoutAndroid_ThumbnailAspectRatio_2,
1345      base::size(kTabGridLayoutAndroid_ThumbnailAspectRatio_2), nullptr},
1346     {"thumbnail aspect ratio - 1:2",
1347      kTabGridLayoutAndroid_ThumbnailAspectRatio_half,
1348      base::size(kTabGridLayoutAndroid_ThumbnailAspectRatio_half), nullptr},
1349     {"thumbnail aspect ratio - 3:4",
1350      kTabGridLayoutAndroid_ThumbnailAspectRatio_three_quarter,
1351      base::size(kTabGridLayoutAndroid_ThumbnailAspectRatio_three_quarter),
1352      nullptr},
1353     {"Disable refetch", kTabGridLayoutAndroid_DisableRefetch,
1354      base::size(kTabGridLayoutAndroid_DisableRefetch), nullptr},
1355     {"Search term chip", kTabGridLayoutAndroid_SearchChip,
1356      base::size(kTabGridLayoutAndroid_SearchChip), nullptr},
1357 };
1358
1359 const FeatureEntry::FeatureParam kStartSurfaceAndroid_SingleSurface[] = {
1360     {"start_surface_variation", "single"}};
1361
1362 const FeatureEntry::FeatureParam kStartSurfaceAndroid_SingleSurface_V2[] = {
1363     {"start_surface_variation", "single"},
1364     {"show_last_active_tab_only", "true"},
1365     {"exclude_mv_tiles", "true"},
1366     {"show_stack_tab_switcher", "true"},
1367     {"open_ntp_instead_of_start", "true"}};
1368
1369 const FeatureEntry::FeatureParam
1370     kStartSurfaceAndroid_SingleSurfaceWithoutMvTiles[] = {
1371         {"start_surface_variation", "single"},
1372         {"exclude_mv_tiles", "true"},
1373         {"hide_switch_when_no_incognito_tabs", "true"}};
1374
1375 const FeatureEntry::FeatureParam kStartSurfaceAndroid_SingleSurfaceSingleTab[] =
1376     {{"start_surface_variation", "single"},
1377      {"show_last_active_tab_only", "true"},
1378      {"hide_switch_when_no_incognito_tabs", "true"}};
1379
1380 const FeatureEntry::FeatureParam
1381     kStartSurfaceAndroid_SingleSurfaceSingleTabStack[] = {
1382         {"start_surface_variation", "single"},
1383         {"show_last_active_tab_only", "true"},
1384         {"show_stack_tab_switcher", "true"}};
1385
1386 const FeatureEntry::FeatureParam
1387     kStartSurfaceAndroid_SingleSurfaceSingleTabWithoutMvTiles[] = {
1388         {"start_surface_variation", "single"},
1389         {"show_last_active_tab_only", "true"},
1390         {"exclude_mv_tiles", "true"}};
1391
1392 const FeatureEntry::FeatureParam kStartSurfaceAndroid_TwoPanesSurface[] = {
1393     {"start_surface_variation", "twopanes"}};
1394
1395 const FeatureEntry::FeatureParam kStartSurfaceAndroid_TasksOnly[] = {
1396     {"start_surface_variation", "tasksonly"}};
1397
1398 const FeatureEntry::FeatureParam kStartSurfaceAndroid_OmniboxOnly[] = {
1399     {"start_surface_variation", "omniboxonly"},
1400     {"hide_switch_when_no_incognito_tabs", "true"}};
1401
1402 const FeatureEntry::FeatureParam kStartSurfaceAndroid_OmniboxOnly_Quick[] = {
1403     {"start_surface_variation", "omniboxonly"},
1404     {"omnibox_scroll_mode", "quick"},
1405     {"hide_switch_when_no_incognito_tabs", "true"}};
1406
1407 const FeatureEntry::FeatureParam kStartSurfaceAndroid_OmniboxOnly_Pinned[] = {
1408     {"start_surface_variation", "omniboxonly"},
1409     {"omnibox_scroll_mode", "pinned"},
1410     {"hide_switch_when_no_incognito_tabs", "true"}};
1411
1412 const FeatureEntry::FeatureParam kStartSurfaceAndroid_TrendyTerms[] = {
1413     {"start_surface_variation", "trendyterms"},
1414     {"trendy_enabled", "true"},
1415     {"trendy_success_min_period_ms", "30000"},
1416     {"trendy_failure_min_period_ms", "10000"},
1417     {"omnibox_scroll_mode", "quick"},
1418     {"hide_switch_when_no_incognito_tabs", "true"}};
1419
1420 const FeatureEntry::FeatureVariation kStartSurfaceAndroidVariations[] = {
1421     {"Single Surface", kStartSurfaceAndroid_SingleSurface,
1422      base::size(kStartSurfaceAndroid_SingleSurface), nullptr},
1423     {"Single Surface V2", kStartSurfaceAndroid_SingleSurface_V2,
1424      base::size(kStartSurfaceAndroid_SingleSurface_V2), nullptr},
1425     {"Single Surface without MV Tiles",
1426      kStartSurfaceAndroid_SingleSurfaceWithoutMvTiles,
1427      base::size(kStartSurfaceAndroid_SingleSurfaceWithoutMvTiles), nullptr},
1428     {"Single Surface + Single Tab", kStartSurfaceAndroid_SingleSurfaceSingleTab,
1429      base::size(kStartSurfaceAndroid_SingleSurfaceSingleTab), nullptr},
1430     {"Single Surface + Single Tab + Tabs Stack",
1431      kStartSurfaceAndroid_SingleSurfaceSingleTabStack,
1432      base::size(kStartSurfaceAndroid_SingleSurfaceSingleTabStack), nullptr},
1433     {"Single Surface + Single Tab without MV Tiles",
1434      kStartSurfaceAndroid_SingleSurfaceSingleTabWithoutMvTiles,
1435      base::size(kStartSurfaceAndroid_SingleSurfaceSingleTabWithoutMvTiles),
1436      nullptr},
1437     {"Two Panes Surface", kStartSurfaceAndroid_TwoPanesSurface,
1438      base::size(kStartSurfaceAndroid_TwoPanesSurface), nullptr},
1439     {"Tasks Only", kStartSurfaceAndroid_TasksOnly,
1440      base::size(kStartSurfaceAndroid_TasksOnly), nullptr},
1441     {"Omnibox Only", kStartSurfaceAndroid_OmniboxOnly,
1442      base::size(kStartSurfaceAndroid_OmniboxOnly), nullptr},
1443     {"Omnibox Only, Quick", kStartSurfaceAndroid_OmniboxOnly_Quick,
1444      base::size(kStartSurfaceAndroid_OmniboxOnly_Quick), nullptr},
1445     {"Omnibox Only, Pinned", kStartSurfaceAndroid_OmniboxOnly_Pinned,
1446      base::size(kStartSurfaceAndroid_OmniboxOnly_Pinned), nullptr},
1447     {"Trendy Terms, Quick", kStartSurfaceAndroid_TrendyTerms,
1448      base::size(kStartSurfaceAndroid_TrendyTerms), nullptr}};
1449
1450 const FeatureEntry::FeatureParam kConditionalTabStripAndroid_Immediate[] = {
1451     {"conditional_tab_strip_session_time_ms", "0"}};
1452 const FeatureEntry::FeatureParam kConditionalTabStripAndroid_60Minutes[] = {
1453     {"conditional_tab_strip_session_time_ms", "3600000"}};
1454 const FeatureEntry::FeatureVariation kConditionalTabStripAndroidVariations[] = {
1455     {"Immediate", kConditionalTabStripAndroid_Immediate,
1456      base::size(kConditionalTabStripAndroid_Immediate), nullptr},
1457     {"60 minutes", kConditionalTabStripAndroid_60Minutes,
1458      base::size(kConditionalTabStripAndroid_60Minutes), nullptr},
1459 };
1460 #endif  // OS_ANDROID
1461
1462 #if defined(OS_ANDROID)
1463 const FeatureEntry::FeatureParam
1464     kAutofillUseMobileLabelDisambiguationShowAll[] = {
1465         {autofill::features::kAutofillUseMobileLabelDisambiguationParameterName,
1466          autofill::features::
1467              kAutofillUseMobileLabelDisambiguationParameterShowAll}};
1468 const FeatureEntry::FeatureParam
1469     kAutofillUseMobileLabelDisambiguationShowOne[] = {
1470         {autofill::features::kAutofillUseMobileLabelDisambiguationParameterName,
1471          autofill::features::
1472              kAutofillUseMobileLabelDisambiguationParameterShowOne}};
1473
1474 const FeatureEntry::FeatureVariation
1475     kAutofillUseMobileLabelDisambiguationVariations[] = {
1476         {"(show all)", kAutofillUseMobileLabelDisambiguationShowAll,
1477          base::size(kAutofillUseMobileLabelDisambiguationShowAll), nullptr},
1478         {"(show one)", kAutofillUseMobileLabelDisambiguationShowOne,
1479          base::size(kAutofillUseMobileLabelDisambiguationShowOne), nullptr}};
1480 #endif  // defined(OS_ANDROID)
1481
1482 #if defined(OS_ANDROID)
1483 const FeatureEntry::FeatureParam kHomepagePromoCardLarge[] = {
1484     {"promo-card-variation", "Large"}};
1485 const FeatureEntry::FeatureParam kHomepagePromoCardCompact[] = {
1486     {"promo-card-variation", "Compact"}};
1487 const FeatureEntry::FeatureParam kHomepagePromoCardSlim[] = {
1488     {"promo-card-variation", "Slim"}};
1489
1490 const FeatureEntry::FeatureVariation kHomepagePromoCardVariations[] = {
1491     {"Large", kHomepagePromoCardLarge, base::size(kHomepagePromoCardLarge),
1492      nullptr},
1493     {"Compact", kHomepagePromoCardCompact,
1494      base::size(kHomepagePromoCardCompact), nullptr},
1495     {"Slim", kHomepagePromoCardSlim, base::size(kHomepagePromoCardSlim),
1496      nullptr}};
1497 #endif  // defined(OS_ANDROID)
1498
1499 #if defined(OS_ANDROID)
1500 const FeatureEntry::FeatureParam kContextMenuShopSimilarProducts[] = {
1501     {"lensShopVariation", "ShopSimilarProducts"}};
1502 const FeatureEntry::FeatureParam kContextMenuShopImageWithGoogleLens[] = {
1503     {"lensShopVariation", "ShopImageWithGoogleLens"}};
1504 const FeatureEntry::FeatureParam kContextMenuSearchSimilarProducts[] = {
1505     {"lensShopVariation", "SearchSimilarProducts"}};
1506
1507 const FeatureEntry::FeatureVariation
1508     kContextMenuShopWithGoogleLensShopVariations[] = {
1509         {"ShopSimilarProducts", kContextMenuShopSimilarProducts,
1510          base::size(kContextMenuShopSimilarProducts), nullptr},
1511         {"ShopImageWithGoogleLens", kContextMenuShopImageWithGoogleLens,
1512          base::size(kContextMenuShopImageWithGoogleLens), nullptr},
1513         {"SearchSimilarProducts", kContextMenuSearchSimilarProducts,
1514          base::size(kContextMenuSearchSimilarProducts), nullptr}};
1515 #endif  // defined(OS_ANDROID)
1516
1517 const FeatureEntry::FeatureParam kLazyFrameLoadingAutomatic[] = {
1518     {"automatic-lazy-load-frames-enabled", "true"},
1519     {"restrict-lazy-load-frames-to-data-saver-only", "false"},
1520 };
1521
1522 const FeatureEntry::FeatureVariation kLazyFrameLoadingVariations[] = {
1523     {"(Automatically lazily load where safe even if not marked "
1524      "'loading=lazy')",
1525      kLazyFrameLoadingAutomatic, base::size(kLazyFrameLoadingAutomatic),
1526      nullptr}};
1527
1528 const FeatureEntry::FeatureParam kLazyImageLoadingAutomatic[] = {
1529     {"automatic-lazy-load-images-enabled", "true"},
1530     {"restrict-lazy-load-images-to-data-saver-only", "false"},
1531 };
1532
1533 const FeatureEntry::FeatureVariation kLazyImageLoadingVariations[] = {
1534     {"(Automatically lazily load where safe even if not marked "
1535      "'loading=lazy')",
1536      kLazyImageLoadingAutomatic, base::size(kLazyImageLoadingAutomatic),
1537      nullptr}};
1538
1539 const FeatureEntry::Choice kNotificationSchedulerChoices[] = {
1540     {flags_ui::kGenericExperimentChoiceDefault, "", ""},
1541     {flag_descriptions::
1542          kNotificationSchedulerImmediateBackgroundTaskDescription,
1543      notifications::switches::kNotificationSchedulerImmediateBackgroundTask,
1544      ""},
1545 };
1546
1547 #if defined(OS_ANDROID)
1548
1549 const FeatureEntry::FeatureParam kOmniboxAssistantVoiceSearchGreyMic[] = {
1550     {"min_agsa_version", "10.95"},
1551     {"min_android_sdk", "21"},
1552     {"min_memory_mb", "1024"},
1553     {"enabled_locales", ""},
1554     {"colorful_mic", "false"}};
1555
1556 const FeatureEntry::FeatureParam kOmniboxAssistantVoiceSearchColorfulMic[] = {
1557     {"min_agsa_version", "10.95"},
1558     {"min_android_sdk", "21"},
1559     {"min_memory_mb", "1024"},
1560     {"enabled_locales", ""},
1561     {"colorful_mic", "true"}};
1562
1563 const FeatureEntry::FeatureVariation kOmniboxAssistantVoiceSearchVariations[] =
1564     {
1565         {"(grey mic)", kOmniboxAssistantVoiceSearchGreyMic,
1566          base::size(kOmniboxAssistantVoiceSearchGreyMic), nullptr},
1567         {"(colorful mic)", kOmniboxAssistantVoiceSearchColorfulMic,
1568          base::size(kOmniboxAssistantVoiceSearchColorfulMic), nullptr},
1569 };
1570
1571 const FeatureEntry::FeatureParam
1572     kOmniboxSearchEngineLogoRoundedEdgesVariationConstant[] = {
1573         {"rounded_edges", "true"}};
1574 const FeatureEntry::FeatureParam
1575     kOmniboxSearchEngineLogoLoupeEverywhereVariationConstant[] = {
1576         {"loupe_everywhere", "true"}};
1577 const FeatureEntry::FeatureVariation
1578     kOmniboxSearchEngineLogoFeatureVariations[] = {
1579         {"(rounded edges)",
1580          kOmniboxSearchEngineLogoRoundedEdgesVariationConstant,
1581          base::size(kOmniboxSearchEngineLogoRoundedEdgesVariationConstant),
1582          nullptr},
1583         {"(loupe everywhere)",
1584          kOmniboxSearchEngineLogoLoupeEverywhereVariationConstant,
1585          base::size(kOmniboxSearchEngineLogoLoupeEverywhereVariationConstant),
1586          nullptr}};
1587
1588 const FeatureEntry::FeatureParam
1589     kOmniboxImageSearchSuggestionThumbnailVariationConstant[] = {
1590         {"ImageSearchSuggestionThumbnail", "true"}};
1591 const FeatureEntry::FeatureVariation
1592     kOmniboxImageSearchSuggestionThumbnailVariation[] = {
1593         {"(with thumbnail)",
1594          kOmniboxImageSearchSuggestionThumbnailVariationConstant,
1595          base::size(kOmniboxImageSearchSuggestionThumbnailVariationConstant),
1596          nullptr}};
1597 #endif  // OS_ANDROID
1598
1599 const FeatureEntry::FeatureVariation
1600     kOmniboxOnDeviceHeadSuggestIncognitoExperimentVariations[] = {{
1601         "relevance-1000",
1602         (FeatureEntry::FeatureParam[]){
1603             {OmniboxFieldTrial::kOnDeviceHeadSuggestMaxScoreForNonUrlInput,
1604              "1000"}},
1605         1,
1606         nullptr,
1607     }};
1608
1609 const FeatureEntry::FeatureVariation
1610     kOmniboxOnDeviceHeadSuggestNonIncognitoExperimentVariations[] = {
1611         {
1612             "relevance-1000",
1613             (FeatureEntry::FeatureParam[]){
1614                 {OmniboxFieldTrial::kOnDeviceHeadSuggestMaxScoreForNonUrlInput,
1615                  "1000"},
1616                 {OmniboxFieldTrial::kOnDeviceHeadSuggestDemoteMode,
1617                  "decrease-relevances"}},
1618             2,
1619             nullptr,
1620         },
1621         {
1622             "request-delay-100ms",
1623             (FeatureEntry::FeatureParam[]){
1624                 {OmniboxFieldTrial::kOnDeviceHeadSuggestDelaySuggestRequestMs,
1625                  "100"}},
1626             1,
1627             nullptr,
1628         },
1629         {
1630             "delay-100ms-relevance-1000",
1631             (FeatureEntry::FeatureParam[]){
1632                 {OmniboxFieldTrial::kOnDeviceHeadSuggestDelaySuggestRequestMs,
1633                  "100"},
1634                 {OmniboxFieldTrial::kOnDeviceHeadSuggestMaxScoreForNonUrlInput,
1635                  "1000"},
1636                 {OmniboxFieldTrial::kOnDeviceHeadSuggestDemoteMode,
1637                  "decrease-relevances"}},
1638             3,
1639             nullptr,
1640         },
1641         {
1642             "request-delay-200ms",
1643             (FeatureEntry::FeatureParam[]){
1644                 {OmniboxFieldTrial::kOnDeviceHeadSuggestDelaySuggestRequestMs,
1645                  "200"}},
1646             1,
1647             nullptr,
1648         },
1649         {
1650             "delay-200ms-relevance-1000",
1651             (FeatureEntry::FeatureParam[]){
1652                 {OmniboxFieldTrial::kOnDeviceHeadSuggestDelaySuggestRequestMs,
1653                  "200"},
1654                 {OmniboxFieldTrial::kOnDeviceHeadSuggestMaxScoreForNonUrlInput,
1655                  "1000"},
1656                 {OmniboxFieldTrial::kOnDeviceHeadSuggestDemoteMode,
1657                  "decrease-relevances"}},
1658             3,
1659             nullptr,
1660         }};
1661
1662 const FeatureEntry::FeatureParam
1663     kQuietNotificationPromptsWithAdaptiveActivation[] = {
1664         {QuietNotificationPermissionUiConfig::kEnableAdaptiveActivation,
1665          "true"},
1666         {QuietNotificationPermissionUiConfig::kEnableAbusiveRequestBlocking,
1667          "true"},
1668         {QuietNotificationPermissionUiConfig::kEnableAbusiveRequestWarning,
1669          "true"},
1670         {QuietNotificationPermissionUiConfig::kEnableCrowdDenyTriggering,
1671          "true"},
1672         {QuietNotificationPermissionUiConfig::kCrowdDenyHoldBackChance, "0"}};
1673
1674 // The default "Enabled" option has the semantics of showing the quiet UI
1675 // (animated location bar indicator on Desktop, and mini-infobars on Android),
1676 // but only when the user directly turns it on in Settings. In addition to that,
1677 // expose an option to also enable adaptively turning on the quiet UI after
1678 // three consecutive denies or based on crowd deny verdicts.
1679 const FeatureEntry::FeatureVariation kQuietNotificationPromptsVariations[] = {
1680     {"(with adaptive activation)",
1681      kQuietNotificationPromptsWithAdaptiveActivation,
1682      base::size(kQuietNotificationPromptsWithAdaptiveActivation), nullptr},
1683 };
1684
1685 #if BUILDFLAG(ENABLE_EXTENSIONS)
1686 const FeatureEntry::FeatureParam kExtensionsCheckup_Startup_Performance[] = {
1687     {extensions_features::kExtensionsCheckupBannerMessageParameter,
1688      extensions_features::kPerformanceMessage},
1689     {extensions_features::kExtensionsCheckupEntryPointParameter,
1690      extensions_features::kStartupEntryPoint}};
1691 const FeatureEntry::FeatureParam kExtensionsCheckup_Startup_Privacy[] = {
1692     {extensions_features::kExtensionsCheckupBannerMessageParameter,
1693      extensions_features::kPrivacyMessage},
1694     {extensions_features::kExtensionsCheckupEntryPointParameter,
1695      extensions_features::kStartupEntryPoint}};
1696 const FeatureEntry::FeatureParam kExtensionsCheckup_Startup_Neutral[] = {
1697     {extensions_features::kExtensionsCheckupBannerMessageParameter,
1698      extensions_features::kNeutralMessage},
1699     {extensions_features::kExtensionsCheckupEntryPointParameter,
1700      extensions_features::kStartupEntryPoint}};
1701 const FeatureEntry::FeatureParam kExtensionsCheckup_Promo_Performance[] = {
1702     {extensions_features::kExtensionsCheckupBannerMessageParameter,
1703      extensions_features::kPerformanceMessage},
1704     {extensions_features::kExtensionsCheckupEntryPointParameter,
1705      extensions_features::kNtpPromoEntryPoint}};
1706 const FeatureEntry::FeatureParam kExtensionsCheckup_Promo_Privacy[] = {
1707     {extensions_features::kExtensionsCheckupBannerMessageParameter,
1708      extensions_features::kPrivacyMessage},
1709     {extensions_features::kExtensionsCheckupEntryPointParameter,
1710      extensions_features::kNtpPromoEntryPoint}};
1711 const FeatureEntry::FeatureParam kExtensionsCheckup_Promo_Neutral[] = {
1712     {extensions_features::kExtensionsCheckupBannerMessageParameter,
1713      extensions_features::kNeutralMessage},
1714     {extensions_features::kExtensionsCheckupEntryPointParameter,
1715      extensions_features::kNtpPromoEntryPoint}};
1716
1717 const FeatureEntry::FeatureVariation kExtensionsCheckupVariations[] = {
1718     {"On Startup - Performance Focused Message",
1719      kExtensionsCheckup_Startup_Performance,
1720      base::size(kExtensionsCheckup_Startup_Performance), nullptr},
1721     {"On Startup - Privacy Focused Message", kExtensionsCheckup_Startup_Privacy,
1722      base::size(kExtensionsCheckup_Startup_Privacy), nullptr},
1723     {"On Startup - Neutral Focused Message", kExtensionsCheckup_Startup_Neutral,
1724      base::size(kExtensionsCheckup_Startup_Neutral), nullptr},
1725     {"NTP Promo - Performance Focused Message",
1726      kExtensionsCheckup_Promo_Performance,
1727      base::size(kExtensionsCheckup_Promo_Performance), nullptr},
1728     {"NTP Promo - Privacy Focused Message", kExtensionsCheckup_Promo_Privacy,
1729      base::size(kExtensionsCheckup_Promo_Privacy), nullptr},
1730     {"NTP Promo - Neutral Focused Message", kExtensionsCheckup_Promo_Neutral,
1731      base::size(kExtensionsCheckup_Promo_Neutral), nullptr}};
1732 #endif  // ENABLE_EXTENSIONS
1733
1734 // TODO(crbug.com/991082,1015377): Remove after proper support for back-forward
1735 // cache is implemented.
1736 const FeatureEntry::FeatureParam kBackForwardCache_ForceCaching[] = {
1737     {"TimeToLiveInBackForwardCacheInSeconds", "300"},
1738     {"should_ignore_blocklists", "true"}};
1739
1740 const FeatureEntry::FeatureVariation kBackForwardCacheVariations[] = {
1741     {"force caching all pages", kBackForwardCache_ForceCaching,
1742      base::size(kBackForwardCache_ForceCaching), nullptr},
1743 };
1744
1745 const FeatureEntry::FeatureParam kSharingDeviceExpirationHours_0[] = {
1746     {"SharingDeviceExpirationHours", "0"}};
1747 const FeatureEntry::FeatureParam kSharingDeviceExpirationHours_12[] = {
1748     {"SharingDeviceExpirationHours", "12"}};
1749 const FeatureEntry::FeatureParam kSharingDeviceExpirationHours_24[] = {
1750     {"SharingDeviceExpirationHours", "24"}};
1751 const FeatureEntry::FeatureParam kSharingDeviceExpirationHours_48[] = {
1752     {"SharingDeviceExpirationHours", "48"}};
1753 const FeatureEntry::FeatureParam kSharingDeviceExpirationHours_96[] = {
1754     {"SharingDeviceExpirationHours", "96"}};
1755 const FeatureEntry::FeatureParam kSharingDeviceExpirationHours_240[] = {
1756     {"SharingDeviceExpirationHours", "240"}};
1757 const FeatureEntry::FeatureVariation kSharingDeviceExpirationVariations[] = {
1758     {"0 hours", kSharingDeviceExpirationHours_0,
1759      base::size(kSharingDeviceExpirationHours_0), nullptr},
1760     {"12 hours", kSharingDeviceExpirationHours_12,
1761      base::size(kSharingDeviceExpirationHours_12), nullptr},
1762     {"1 day", kSharingDeviceExpirationHours_24,
1763      base::size(kSharingDeviceExpirationHours_24), nullptr},
1764     {"2 days", kSharingDeviceExpirationHours_48,
1765      base::size(kSharingDeviceExpirationHours_48), nullptr},
1766     {"4 days", kSharingDeviceExpirationHours_96,
1767      base::size(kSharingDeviceExpirationHours_96), nullptr},
1768     {"10 days", kSharingDeviceExpirationHours_240,
1769      base::size(kSharingDeviceExpirationHours_240), nullptr},
1770 };
1771
1772 const FeatureEntry::FeatureParam
1773     kAlignFontDisplayAutoTimeoutWithLCPGoalFailure2250[] = {
1774         {"lcp-limit-in-ms", "2250"},
1775         {"intervention-mode", "failure"}};
1776 const FeatureEntry::FeatureParam
1777     kAlignFontDisplayAutoTimeoutWithLCPGoalFailure2000[] = {
1778         {"lcp-limit-in-ms", "2000"},
1779         {"intervention-mode", "failure"}};
1780 const FeatureEntry::FeatureParam
1781     kAlignFontDisplayAutoTimeoutWithLCPGoalFailure1750[] = {
1782         {"lcp-limit-in-ms", "1750"},
1783         {"intervention-mode", "failure"}};
1784 const FeatureEntry::FeatureParam
1785     kAlignFontDisplayAutoTimeoutWithLCPGoalFailure1500[] = {
1786         {"lcp-limit-in-ms", "1500"},
1787         {"intervention-mode", "failure"}};
1788 const FeatureEntry::FeatureParam
1789     kAlignFontDisplayAutoTimeoutWithLCPGoalFailure1250[] = {
1790         {"lcp-limit-in-ms", "1250"},
1791         {"intervention-mode", "failure"}};
1792 const FeatureEntry::FeatureParam
1793     kAlignFontDisplayAutoTimeoutWithLCPGoalFailure1000[] = {
1794         {"lcp-limit-in-ms", "1000"},
1795         {"intervention-mode", "failure"}};
1796 const FeatureEntry::FeatureParam
1797     kAlignFontDisplayAutoTimeoutWithLCPGoalSwap2250[] = {
1798         {"lcp-limit-in-ms", "2250"},
1799         {"intervention-mode", "swap"}};
1800 const FeatureEntry::FeatureParam
1801     kAlignFontDisplayAutoTimeoutWithLCPGoalSwap2000[] = {
1802         {"lcp-limit-in-ms", "2000"},
1803         {"intervention-mode", "swap"}};
1804 const FeatureEntry::FeatureParam
1805     kAlignFontDisplayAutoTimeoutWithLCPGoalSwap1750[] = {
1806         {"lcp-limit-in-ms", "1750"},
1807         {"intervention-mode", "swap"}};
1808 const FeatureEntry::FeatureParam
1809     kAlignFontDisplayAutoTimeoutWithLCPGoalSwap1500[] = {
1810         {"lcp-limit-in-ms", "1500"},
1811         {"intervention-mode", "swap"}};
1812 const FeatureEntry::FeatureParam
1813     kAlignFontDisplayAutoTimeoutWithLCPGoalSwap1250[] = {
1814         {"lcp-limit-in-ms", "1250"},
1815         {"intervention-mode", "swap"}};
1816 const FeatureEntry::FeatureParam
1817     kAlignFontDisplayAutoTimeoutWithLCPGoalSwap1000[] = {
1818         {"lcp-limit-in-ms", "1000"},
1819         {"intervention-mode", "swap"}};
1820 const FeatureEntry::FeatureVariation
1821     kAlignFontDisplayAutoTimeoutWithLCPGoalVariations[] = {
1822         {"switch to failure after 2250ms since navigation",
1823          kAlignFontDisplayAutoTimeoutWithLCPGoalFailure2250,
1824          base::size(kAlignFontDisplayAutoTimeoutWithLCPGoalFailure2250),
1825          nullptr},
1826         {"switch to failure after 2000ms since navigation",
1827          kAlignFontDisplayAutoTimeoutWithLCPGoalFailure2000,
1828          base::size(kAlignFontDisplayAutoTimeoutWithLCPGoalFailure2000),
1829          nullptr},
1830         {"switch to failure after 1750ms since navigation",
1831          kAlignFontDisplayAutoTimeoutWithLCPGoalFailure1750,
1832          base::size(kAlignFontDisplayAutoTimeoutWithLCPGoalFailure1750),
1833          nullptr},
1834         {"switch to failure after 1500ms since navigation",
1835          kAlignFontDisplayAutoTimeoutWithLCPGoalFailure1500,
1836          base::size(kAlignFontDisplayAutoTimeoutWithLCPGoalFailure1500),
1837          nullptr},
1838         {"switch to failure after 1250ms since navigation",
1839          kAlignFontDisplayAutoTimeoutWithLCPGoalFailure1250,
1840          base::size(kAlignFontDisplayAutoTimeoutWithLCPGoalFailure1250),
1841          nullptr},
1842         {"switch to failure after 1000ms since navigation",
1843          kAlignFontDisplayAutoTimeoutWithLCPGoalFailure1000,
1844          base::size(kAlignFontDisplayAutoTimeoutWithLCPGoalFailure1000),
1845          nullptr},
1846         {"switch to swap after 2250ms since navigation",
1847          kAlignFontDisplayAutoTimeoutWithLCPGoalSwap2250,
1848          base::size(kAlignFontDisplayAutoTimeoutWithLCPGoalSwap2250), nullptr},
1849         {"switch to swap after 2000ms since navigation",
1850          kAlignFontDisplayAutoTimeoutWithLCPGoalSwap2000,
1851          base::size(kAlignFontDisplayAutoTimeoutWithLCPGoalSwap2000), nullptr},
1852         {"switch to swap after 1750ms since navigation",
1853          kAlignFontDisplayAutoTimeoutWithLCPGoalSwap1750,
1854          base::size(kAlignFontDisplayAutoTimeoutWithLCPGoalSwap1750), nullptr},
1855         {"switch to swap after 1500ms since navigation",
1856          kAlignFontDisplayAutoTimeoutWithLCPGoalSwap1500,
1857          base::size(kAlignFontDisplayAutoTimeoutWithLCPGoalSwap1500), nullptr},
1858         {"switch to swap after 1250ms since navigation",
1859          kAlignFontDisplayAutoTimeoutWithLCPGoalSwap1250,
1860          base::size(kAlignFontDisplayAutoTimeoutWithLCPGoalSwap1250), nullptr},
1861         {"switch to swap after 1000ms since navigation",
1862          kAlignFontDisplayAutoTimeoutWithLCPGoalSwap1000,
1863          base::size(kAlignFontDisplayAutoTimeoutWithLCPGoalSwap1000), nullptr},
1864 };
1865
1866 #if defined(OS_CHROMEOS)
1867 const FeatureEntry::Choice kEnableCrOSActionRecorderChoices[] = {
1868     {flags_ui::kGenericExperimentChoiceDefault, "", ""},
1869     {ash::switches::kCrOSActionRecorderWithHash,
1870      ash::switches::kEnableCrOSActionRecorder,
1871      ash::switches::kCrOSActionRecorderWithHash},
1872     {ash::switches::kCrOSActionRecorderWithoutHash,
1873      ash::switches::kEnableCrOSActionRecorder,
1874      ash::switches::kCrOSActionRecorderWithoutHash},
1875     {ash::switches::kCrOSActionRecorderCopyToDownloadDir,
1876      ash::switches::kEnableCrOSActionRecorder,
1877      ash::switches::kCrOSActionRecorderCopyToDownloadDir},
1878     {ash::switches::kCrOSActionRecorderDisabled,
1879      ash::switches::kEnableCrOSActionRecorder,
1880      ash::switches::kCrOSActionRecorderDisabled},
1881     {ash::switches::kCrOSActionRecorderStructuredDisabled,
1882      ash::switches::kEnableCrOSActionRecorder,
1883      ash::switches::kCrOSActionRecorderStructuredDisabled},
1884 };
1885 #endif  // defined(OS_CHROMEOS)
1886
1887 #if defined(OS_ANDROID)
1888 const FeatureEntry::Choice kWebOtpBackendChoices[] = {
1889     {flags_ui::kGenericExperimentChoiceDefault, "", ""},
1890     {flag_descriptions::kWebOtpBackendSmsVerification, switches::kWebOtpBackend,
1891      switches::kWebOtpBackendSmsVerification},
1892     {flag_descriptions::kWebOtpBackendUserConsent, switches::kWebOtpBackend,
1893      switches::kWebOtpBackendUserConsent},
1894 };
1895
1896 const FeatureEntry::Choice kQueryTilesCountryChoices[] = {
1897     {flags_ui::kGenericExperimentChoiceDefault, "", ""},
1898     {flag_descriptions::kQueryTilesCountryCodeUS,
1899      query_tiles::switches::kQueryTilesCountryCode, "US"},
1900     {flag_descriptions::kQueryTilesCountryCodeIndia,
1901      query_tiles::switches::kQueryTilesCountryCode, "IN"},
1902     {flag_descriptions::kQueryTilesCountryCodeBrazil,
1903      query_tiles::switches::kQueryTilesCountryCode, "BR"},
1904     {flag_descriptions::kQueryTilesCountryCodeNigeria,
1905      query_tiles::switches::kQueryTilesCountryCode, "NG"},
1906     {flag_descriptions::kQueryTilesCountryCodeIndonesia,
1907      query_tiles::switches::kQueryTilesCountryCode, "ID"},
1908 };
1909
1910 #endif  // defined(OS_ANDROID)
1911
1912 // The choices for --enable-experimental-cookie-features. This really should
1913 // just be a SINGLE_VALUE_TYPE, but it is misleading to have the choices be
1914 // labeled "Disabled"/"Enabled". So instead this is made to be a
1915 // MULTI_VALUE_TYPE with choices "Default"/"Enabled".
1916 const FeatureEntry::Choice kEnableExperimentalCookieFeaturesChoices[] = {
1917     {flags_ui::kGenericExperimentChoiceDefault, "", ""},
1918     {flags_ui::kGenericExperimentChoiceEnabled,
1919      switches::kEnableExperimentalCookieFeatures, ""},
1920 };
1921
1922 #if defined(OS_ANDROID)
1923 // The variations of --password-change-support.
1924 const FeatureEntry::FeatureParam
1925     kPasswordChangeVariationWithForcedDialogAfterEverySuccessfulSubmission[] = {
1926         {password_manager::features::
1927              kPasswordChangeWithForcedDialogAfterEverySuccessfulSubmission,
1928          "true"}};
1929
1930 const FeatureEntry::FeatureVariation kPasswordChangeFeatureVariations[] = {
1931     {"Force dialog after every successful form submission.",
1932      kPasswordChangeVariationWithForcedDialogAfterEverySuccessfulSubmission,
1933      base::size(
1934          kPasswordChangeVariationWithForcedDialogAfterEverySuccessfulSubmission),
1935      nullptr}};
1936 #endif  // defined(OS_ANDROID)
1937
1938 // RECORDING USER METRICS FOR FLAGS:
1939 // -----------------------------------------------------------------------------
1940 // The first line of the entry is the internal name.
1941 //
1942 // To add a new entry, add to the end of kFeatureEntries. There are two
1943 // distinct types of entries:
1944 // . SINGLE_VALUE: entry is either on or off. Use the SINGLE_VALUE_TYPE
1945 //   macro for this type supplying the command line to the macro.
1946 // . MULTI_VALUE: a list of choices, the first of which should correspond to a
1947 //   deactivated state for this lab (i.e. no command line option). To specify
1948 //   this type of entry use the macro MULTI_VALUE_TYPE supplying it the
1949 //   array of choices.
1950 // See the documentation of FeatureEntry for details on the fields.
1951 //
1952 // Usage of about:flags is logged on startup via the "Launch.FlagsAtStartup"
1953 // UMA histogram. This histogram shows the number of startups with a given flag
1954 // enabled. If you'd like to see user counts instead, make sure to switch to
1955 // "count users" view on the dashboard. When adding new entries, the enum
1956 // "LoginCustomFlags" must be updated in histograms/enums.xml. See note in
1957 // enums.xml and don't forget to run AboutFlagsHistogramTest unit test to
1958 // calculate and verify checksum.
1959 //
1960 // When adding a new choice, add it to the end of the list.
1961 const FeatureEntry kFeatureEntries[] = {
1962 // Include generated flags for flag unexpiry; see //docs/flag_expiry.md and
1963 // //tools/flags/generate_unexpire_flags.py.
1964 #include "chrome/browser/unexpire_flags_gen.inc"
1965     {"ignore-gpu-blacklist", flag_descriptions::kIgnoreGpuBlacklistName,
1966      flag_descriptions::kIgnoreGpuBlacklistDescription, kOsAll,
1967      SINGLE_VALUE_TYPE(switches::kIgnoreGpuBlacklist)},
1968     {"disable-accelerated-2d-canvas",
1969      flag_descriptions::kAccelerated2dCanvasName,
1970      flag_descriptions::kAccelerated2dCanvasDescription, kOsAll,
1971      SINGLE_DISABLE_VALUE_TYPE(switches::kDisableAccelerated2dCanvas)},
1972     {"composited-layer-borders", flag_descriptions::kCompositedLayerBordersName,
1973      flag_descriptions::kCompositedLayerBordersDescription, kOsAll,
1974      SINGLE_VALUE_TYPE(cc::switches::kShowCompositedLayerBorders)},
1975     {"overlay-strategies", flag_descriptions::kOverlayStrategiesName,
1976      flag_descriptions::kOverlayStrategiesDescription, kOsAll,
1977      MULTI_VALUE_TYPE(kOverlayStrategiesChoices)},
1978     {"tint-gl-composited-content",
1979      flag_descriptions::kTintGlCompositedContentName,
1980      flag_descriptions::kTintGlCompositedContentDescription, kOsAll,
1981      SINGLE_VALUE_TYPE(switches::kTintGlCompositedContent)},
1982     {"show-overdraw-feedback", flag_descriptions::kShowOverdrawFeedbackName,
1983      flag_descriptions::kShowOverdrawFeedbackDescription, kOsAll,
1984      SINGLE_VALUE_TYPE(switches::kShowOverdrawFeedback)},
1985     {"ui-disable-partial-swap", flag_descriptions::kUiPartialSwapName,
1986      flag_descriptions::kUiPartialSwapDescription, kOsAll,
1987      SINGLE_DISABLE_VALUE_TYPE(switches::kUIDisablePartialSwap)},
1988     {"enable-webrtc-capture-multi-channel-audio-processing",
1989      flag_descriptions::kWebrtcCaptureMultiChannelApmName,
1990      flag_descriptions::kWebrtcCaptureMultiChannelApmDescription, kOsAll,
1991      FEATURE_VALUE_TYPE(features::kWebRtcEnableCaptureMultiChannelApm)},
1992     {"disable-webrtc-hw-decoding", flag_descriptions::kWebrtcHwDecodingName,
1993      flag_descriptions::kWebrtcHwDecodingDescription, kOsAndroid | kOsCrOS,
1994      SINGLE_DISABLE_VALUE_TYPE(switches::kDisableWebRtcHWDecoding)},
1995     {"disable-webrtc-hw-encoding", flag_descriptions::kWebrtcHwEncodingName,
1996      flag_descriptions::kWebrtcHwEncodingDescription, kOsAndroid | kOsCrOS,
1997      SINGLE_DISABLE_VALUE_TYPE(switches::kDisableWebRtcHWEncoding)},
1998 #if !defined(OS_ANDROID)
1999     {"enable-reader-mode", flag_descriptions::kEnableReaderModeName,
2000      flag_descriptions::kEnableReaderModeDescription, kOsDesktop,
2001      FEATURE_WITH_PARAMS_VALUE_TYPE(dom_distiller::kReaderMode,
2002                                     kReaderModeDiscoverabilityVariations,
2003                                     "ReaderMode")},
2004 #endif  // !defined(OS_ANDROID)
2005 #if defined(WEBRTC_USE_PIPEWIRE)
2006     {"enable-webrtc-pipewire-capturer",
2007      flag_descriptions::kWebrtcPipeWireCapturerName,
2008      flag_descriptions::kWebrtcPipeWireCapturerDescription, kOsLinux,
2009      FEATURE_VALUE_TYPE(features::kWebRtcPipeWireCapturer)},
2010 #endif  // defined(WEBRTC_USE_PIPEWIRE)
2011 #if !defined(OS_ANDROID)
2012     {"enable-webrtc-remote-event-log",
2013      flag_descriptions::kWebRtcRemoteEventLogName,
2014      flag_descriptions::kWebRtcRemoteEventLogDescription, kOsDesktop,
2015      FEATURE_VALUE_TYPE(features::kWebRtcRemoteEventLog)},
2016 #endif
2017     {"enable-webrtc-srtp-aes-gcm", flag_descriptions::kWebrtcSrtpAesGcmName,
2018      flag_descriptions::kWebrtcSrtpAesGcmDescription, kOsAll,
2019      SINGLE_VALUE_TYPE(switches::kEnableWebRtcSrtpAesGcm)},
2020     {"enable-webrtc-stun-origin", flag_descriptions::kWebrtcStunOriginName,
2021      flag_descriptions::kWebrtcStunOriginDescription, kOsAll,
2022      SINGLE_VALUE_TYPE(switches::kEnableWebRtcStunOrigin)},
2023     {"enable-webrtc-hybrid-agc", flag_descriptions::kWebrtcHybridAgcName,
2024      flag_descriptions::kWebrtcHybridAgcDescription, kOsAll,
2025      FEATURE_VALUE_TYPE(features::kWebRtcHybridAgc)},
2026     {"enable-webrtc-new-encode-cpu-load-estimator",
2027      flag_descriptions::kWebrtcNewEncodeCpuLoadEstimatorName,
2028      flag_descriptions::kWebrtcNewEncodeCpuLoadEstimatorDescription, kOsAll,
2029      FEATURE_VALUE_TYPE(media::kNewEncodeCpuLoadEstimator)},
2030     {"enable-webrtc-hide-local-ips-with-mdns",
2031      flag_descriptions::kWebrtcHideLocalIpsWithMdnsName,
2032      flag_descriptions::kWebrtcHideLocalIpsWithMdnsDecription, kOsDesktop,
2033      FEATURE_VALUE_TYPE(blink::features::kWebRtcHideLocalIpsWithMdns)},
2034     {"enable-webrtc-use-min-max-vea-dimensions",
2035      flag_descriptions::kWebrtcUseMinMaxVEADimensionsName,
2036      flag_descriptions::kWebrtcUseMinMaxVEADimensionsDescription, kOsAll,
2037      FEATURE_VALUE_TYPE(blink::features::kWebRtcUseMinMaxVEADimensions)},
2038 #if defined(OS_ANDROID)
2039     {"clear-old-browsing-data", flag_descriptions::kClearOldBrowsingDataName,
2040      flag_descriptions::kClearOldBrowsingDataDescription, kOsAndroid,
2041      FEATURE_VALUE_TYPE(features::kClearOldBrowsingData)},
2042 #endif  // OS_ANDROID
2043 #if BUILDFLAG(ENABLE_NACL)
2044     {"enable-nacl", flag_descriptions::kNaclName,
2045      flag_descriptions::kNaclDescription, kOsAll,
2046      SINGLE_VALUE_TYPE(switches::kEnableNaCl)},
2047 #endif  // ENABLE_NACL
2048 #if BUILDFLAG(ENABLE_EXTENSIONS)
2049     {"extension-apis", flag_descriptions::kExperimentalExtensionApisName,
2050      flag_descriptions::kExperimentalExtensionApisDescription, kOsDesktop,
2051      SINGLE_VALUE_TYPE(extensions::switches::kEnableExperimentalExtensionApis)},
2052     {"extension-checkup", flag_descriptions::kExtensionsCheckupName,
2053      flag_descriptions::kExtensionsCheckupDescription, kOsDesktop,
2054      FEATURE_WITH_PARAMS_VALUE_TYPE(extensions_features::kExtensionsCheckup,
2055                                     kExtensionsCheckupVariations,
2056                                     "ExtensionsCheckup")},
2057     {"extensions-toolbar-menu", flag_descriptions::kExtensionsToolbarMenuName,
2058      flag_descriptions::kExtensionsToolbarMenuDescription, kOsDesktop,
2059      FEATURE_VALUE_TYPE(features::kExtensionsToolbarMenu)},
2060     {"extensions-on-chrome-urls",
2061      flag_descriptions::kExtensionsOnChromeUrlsName,
2062      flag_descriptions::kExtensionsOnChromeUrlsDescription, kOsAll,
2063      SINGLE_VALUE_TYPE(extensions::switches::kExtensionsOnChromeURLs)},
2064 #endif  // ENABLE_EXTENSIONS
2065     {"enable-history-manipulation-intervention",
2066      flag_descriptions::kHistoryManipulationIntervention,
2067      flag_descriptions::kHistoryManipulationInterventionDescription, kOsAll,
2068      FEATURE_VALUE_TYPE(features::kHistoryManipulationIntervention)},
2069 #if defined(OS_ANDROID)
2070     {"contextual-search-debug", flag_descriptions::kContextualSearchDebugName,
2071      flag_descriptions::kContextualSearchDebugDescription, kOsAndroid,
2072      FEATURE_VALUE_TYPE(chrome::android::kContextualSearchDebug)},
2073     {"contextual-search-definitions",
2074      flag_descriptions::kContextualSearchDefinitionsName,
2075      flag_descriptions::kContextualSearchDefinitionsDescription, kOsAndroid,
2076      FEATURE_VALUE_TYPE(chrome::android::kContextualSearchDefinitions)},
2077     {"contextual-search-longpress-resolve",
2078      flag_descriptions::kContextualSearchLongpressResolveName,
2079      flag_descriptions::kContextualSearchLongpressResolveDescription,
2080      kOsAndroid,
2081      FEATURE_WITH_PARAMS_VALUE_TYPE(
2082          chrome::android::kContextualSearchLongpressResolve,
2083          kLongpressResolveVariations,
2084          "ContextualSearchLongpressResolve")},
2085     {"contextual-search-ml-tap-suppression",
2086      flag_descriptions::kContextualSearchMlTapSuppressionName,
2087      flag_descriptions::kContextualSearchMlTapSuppressionDescription,
2088      kOsAndroid,
2089      FEATURE_VALUE_TYPE(chrome::android::kContextualSearchMlTapSuppression)},
2090     {"contextual-search-ranker-query",
2091      flag_descriptions::kContextualSearchRankerQueryName,
2092      flag_descriptions::kContextualSearchRankerQueryDescription, kOsAndroid,
2093      FEATURE_VALUE_TYPE(assist_ranker::kContextualSearchRankerQuery)},
2094     {"contextual-search-second-tap",
2095      flag_descriptions::kContextualSearchSecondTapName,
2096      flag_descriptions::kContextualSearchSecondTapDescription, kOsAndroid,
2097      FEATURE_VALUE_TYPE(chrome::android::kContextualSearchSecondTap)},
2098     {"contextual-search-translations",
2099      flag_descriptions::kContextualSearchTranslationsName,
2100      flag_descriptions::kContextualSearchTranslationsDescription, kOsAndroid,
2101      FEATURE_VALUE_TYPE(chrome::android::kContextualSearchTranslations)},
2102     {"direct-actions", flag_descriptions::kDirectActionsName,
2103      flag_descriptions::kDirectActionsDescription, kOsAndroid,
2104      FEATURE_VALUE_TYPE(chrome::android::kDirectActions)},
2105     {"explore-sites", flag_descriptions::kExploreSitesName,
2106      flag_descriptions::kExploreSitesDescription, kOsAndroid,
2107      FEATURE_WITH_PARAMS_VALUE_TYPE(chrome::android::kExploreSites,
2108                                     kExploreSitesVariations,
2109                                     "ExploreSites InitialCountries")},
2110     {"related-searches", flag_descriptions::kRelatedSearchesName,
2111      flag_descriptions::kRelatedSearchesDescription, kOsAndroid,
2112      FEATURE_VALUE_TYPE(chrome::android::kRelatedSearches)},
2113 #endif  // OS_ANDROID
2114     {"show-autofill-type-predictions",
2115      flag_descriptions::kShowAutofillTypePredictionsName,
2116      flag_descriptions::kShowAutofillTypePredictionsDescription, kOsAll,
2117      FEATURE_VALUE_TYPE(autofill::features::kAutofillShowTypePredictions)},
2118     {"smooth-scrolling", flag_descriptions::kSmoothScrollingName,
2119      flag_descriptions::kSmoothScrollingDescription,
2120      // Mac has a separate implementation with its own setting to disable.
2121      kOsLinux | kOsCrOS | kOsWin | kOsAndroid,
2122      ENABLE_DISABLE_VALUE_TYPE(switches::kEnableSmoothScrolling,
2123                                switches::kDisableSmoothScrolling)},
2124     {"sms-receiver-cross-device",
2125      flag_descriptions::kSmsReceiverCrossDeviceName,
2126      flag_descriptions::kSmsReceiverCrossDeviceDescription, kOsAll,
2127      FEATURE_VALUE_TYPE(kSmsReceiverCrossDevice)},
2128     {"fractional-scroll-offsets",
2129      flag_descriptions::kFractionalScrollOffsetsName,
2130      flag_descriptions::kFractionalScrollOffsetsDescription, kOsAll,
2131      FEATURE_VALUE_TYPE(features::kFractionalScrollOffsets)},
2132 #if defined(USE_AURA)
2133     {"overlay-scrollbars", flag_descriptions::kOverlayScrollbarsName,
2134      flag_descriptions::kOverlayScrollbarsDescription,
2135      // Uses the system preference on Mac (a different implementation).
2136      // On Android, this is always enabled.
2137      kOsAura, FEATURE_VALUE_TYPE(features::kOverlayScrollbar)},
2138     {"overlay-scrollbars-flash-after-scroll-update",
2139      flag_descriptions::kOverlayScrollbarsFlashAfterAnyScrollUpdateName,
2140      flag_descriptions::kOverlayScrollbarsFlashAfterAnyScrollUpdateDescription,
2141      kOsAura,
2142      FEATURE_VALUE_TYPE(features::kOverlayScrollbarFlashAfterAnyScrollUpdate)},
2143     {"overlay-scrollbars-flash-when-mouse-enter",
2144      flag_descriptions::kOverlayScrollbarsFlashWhenMouseEnterName,
2145      flag_descriptions::kOverlayScrollbarsFlashWhenMouseEnterDescription,
2146      kOsAura,
2147      FEATURE_VALUE_TYPE(features::kOverlayScrollbarFlashWhenMouseEnter)},
2148 #endif  // USE_AURA
2149     {"enable-quic", flag_descriptions::kQuicName,
2150      flag_descriptions::kQuicDescription, kOsAll,
2151      ENABLE_DISABLE_VALUE_TYPE(switches::kEnableQuic, switches::kDisableQuic)},
2152     {"disable-javascript-harmony-shipping",
2153      flag_descriptions::kJavascriptHarmonyShippingName,
2154      flag_descriptions::kJavascriptHarmonyShippingDescription, kOsAll,
2155      SINGLE_DISABLE_VALUE_TYPE(switches::kDisableJavaScriptHarmonyShipping)},
2156     {"enable-javascript-harmony", flag_descriptions::kJavascriptHarmonyName,
2157      flag_descriptions::kJavascriptHarmonyDescription, kOsAll,
2158      SINGLE_VALUE_TYPE(switches::kJavaScriptHarmony)},
2159     {"enable-experimental-webassembly-features",
2160      flag_descriptions::kExperimentalWebAssemblyFeaturesName,
2161      flag_descriptions::kExperimentalWebAssemblyFeaturesDescription, kOsAll,
2162      SINGLE_VALUE_TYPE(switches::kEnableExperimentalWebAssemblyFeatures)},
2163     {"enable-webassembly-baseline", flag_descriptions::kEnableWasmBaselineName,
2164      flag_descriptions::kEnableWasmBaselineDescription, kOsAll,
2165      FEATURE_VALUE_TYPE(features::kWebAssemblyBaseline)},
2166     {"enable-webassembly-lazy-compilation",
2167      flag_descriptions::kEnableWasmLazyCompilationName,
2168      flag_descriptions::kEnableWasmLazyCompilationDescription, kOsAll,
2169      FEATURE_VALUE_TYPE(features::kWebAssemblyLazyCompilation)},
2170     {"enable-webassembly-simd", flag_descriptions::kEnableWasmSimdName,
2171      flag_descriptions::kEnableWasmSimdDescription, kOsAll,
2172      FEATURE_VALUE_TYPE(features::kWebAssemblySimd)},
2173     {"enable-webassembly-threads", flag_descriptions::kEnableWasmThreadsName,
2174      flag_descriptions::kEnableWasmThreadsDescription, kOsAll,
2175      FEATURE_VALUE_TYPE(features::kWebAssemblyThreads)},
2176     {"enable-webassembly-tiering", flag_descriptions::kEnableWasmTieringName,
2177      flag_descriptions::kEnableWasmTieringDescription, kOsAll,
2178      FEATURE_VALUE_TYPE(features::kWebAssemblyTiering)},
2179     {"enable-future-v8-vm-features", flag_descriptions::kV8VmFutureName,
2180      flag_descriptions::kV8VmFutureDescription, kOsAll,
2181      FEATURE_VALUE_TYPE(features::kV8VmFuture)},
2182     {"enable-gpu-rasterization", flag_descriptions::kGpuRasterizationName,
2183      flag_descriptions::kGpuRasterizationDescription, kOsAll,
2184      MULTI_VALUE_TYPE(kEnableGpuRasterizationChoices)},
2185     {"enable-oop-rasterization", flag_descriptions::kOopRasterizationName,
2186      flag_descriptions::kOopRasterizationDescription, kOsAll,
2187      MULTI_VALUE_TYPE(kEnableOopRasterizationChoices)},
2188     {"enable-oop-rasterization-ddl",
2189      flag_descriptions::kOopRasterizationDDLName,
2190      flag_descriptions::kOopRasterizationDDLDescription, kOsAll,
2191      FEATURE_VALUE_TYPE(features::kOopRasterizationDDL)},
2192     {"enable-experimental-web-platform-features",
2193      flag_descriptions::kExperimentalWebPlatformFeaturesName,
2194      flag_descriptions::kExperimentalWebPlatformFeaturesDescription, kOsAll,
2195      SINGLE_VALUE_TYPE(switches::kEnableExperimentalWebPlatformFeatures)},
2196 #if defined(OS_ANDROID)
2197     {"enable-app-notification-status-messaging",
2198      flag_descriptions::kAppNotificationStatusMessagingName,
2199      flag_descriptions::kAppNotificationStatusMessagingDescription, kOsAndroid,
2200      FEATURE_VALUE_TYPE(browser_ui::kAppNotificationStatusMessaging)},
2201 #endif  // OS_ANDROID
2202     {"silent-debugger-extension-api",
2203      flag_descriptions::kSilentDebuggerExtensionApiName,
2204      flag_descriptions::kSilentDebuggerExtensionApiDescription, kOsDesktop,
2205      SINGLE_VALUE_TYPE(switches::kSilentDebuggerExtensionAPI)},
2206 #if BUILDFLAG(ENABLE_SPELLCHECK) && defined(OS_ANDROID)
2207     {"enable-android-spellchecker",
2208      flag_descriptions::kEnableAndroidSpellcheckerDescription,
2209      flag_descriptions::kEnableAndroidSpellcheckerDescription, kOsAndroid,
2210      FEATURE_VALUE_TYPE(spellcheck::kAndroidSpellCheckerNonLowEnd)},
2211 #endif  // ENABLE_SPELLCHECK && OS_ANDROID
2212     {"top-chrome-touch-ui", flag_descriptions::kTopChromeTouchUiName,
2213      flag_descriptions::kTopChromeTouchUiDescription, kOsDesktop,
2214      MULTI_VALUE_TYPE(kTopChromeTouchUiChoices)},
2215 #if BUILDFLAG(ENABLE_WEBUI_TAB_STRIP)
2216     {"webui-tab-strip", flag_descriptions::kWebUITabStripName,
2217      flag_descriptions::kWebUITabStripDescription, kOsDesktop,
2218      FEATURE_VALUE_TYPE(features::kWebUITabStrip)},
2219     {"webui-tab-strip-demo-options",
2220      flag_descriptions::kWebUITabStripDemoOptionsName,
2221      flag_descriptions::kWebUITabStripDemoOptionsDescription, kOsDesktop,
2222      FEATURE_VALUE_TYPE(features::kWebUITabStripDemoOptions)},
2223 #endif  // BUILDFLAG(ENABLE_WEBUI_TAB_STRIP)
2224     {"focus-mode", flag_descriptions::kFocusMode,
2225      flag_descriptions::kFocusModeDescription, kOsDesktop,
2226      FEATURE_VALUE_TYPE(features::kFocusMode)},
2227     {"touch-events", flag_descriptions::kTouchEventsName,
2228      flag_descriptions::kTouchEventsDescription, kOsDesktop,
2229      MULTI_VALUE_TYPE(kTouchEventFeatureDetectionChoices)},
2230     {"disable-touch-adjustment", flag_descriptions::kTouchAdjustmentName,
2231      flag_descriptions::kTouchAdjustmentDescription,
2232      kOsWin | kOsLinux | kOsCrOS | kOsAndroid,
2233      SINGLE_DISABLE_VALUE_TYPE(switches::kDisableTouchAdjustment)},
2234 #if defined(OS_CHROMEOS)
2235     {"disable-explicit-dma-fences",
2236      flag_descriptions::kDisableExplicitDmaFencesName,
2237      flag_descriptions::kDisableExplicitDmaFencesDescription, kOsCrOS,
2238      SINGLE_VALUE_TYPE(switches::kDisableExplicitDmaFences)},
2239     // TODO(crbug.com/1012846): Remove this flag and provision when HDR is fully
2240     //  supported on ChromeOS.
2241     {"use-hdr-transfer-function",
2242      flag_descriptions::kUseHDRTransferFunctionName,
2243      flag_descriptions::kUseHDRTransferFunctionDescription, kOsCrOS,
2244      FEATURE_VALUE_TYPE(display::features::kUseHDRTransferFunction)},
2245 #endif  // OS_CHROMEOS
2246 #if defined(OS_CHROMEOS)
2247     {"ash-limit-alt-tab-to-active-desk",
2248      flag_descriptions::kLimitAltTabToActiveDeskName,
2249      flag_descriptions::kLimitAltTabToActiveDeskDescription, kOsCrOS,
2250      FEATURE_VALUE_TYPE(ash::features::kLimitAltTabToActiveDesk)},
2251     {"ash-limit-shelf-items-to-active-desk",
2252      flag_descriptions::kLimitShelfItemsToActiveDeskName,
2253      flag_descriptions::kLimitShelfItemsToActiveDeskDescription, kOsCrOS,
2254      FEATURE_VALUE_TYPE(ash::features::kPerDeskShelf)},
2255     {"ash-enable-unified-desktop",
2256      flag_descriptions::kAshEnableUnifiedDesktopName,
2257      flag_descriptions::kAshEnableUnifiedDesktopDescription, kOsCrOS,
2258      SINGLE_VALUE_TYPE(switches::kEnableUnifiedDesktop)},
2259     {"bluetooth-aggressive-appearance-filter",
2260      flag_descriptions::kBluetoothAggressiveAppearanceFilterName,
2261      flag_descriptions::kBluetoothAggressiveAppearanceFilterDescription,
2262      kOsCrOS,
2263      FEATURE_VALUE_TYPE(
2264          chromeos::features::kBluetoothAggressiveAppearanceFilter)},
2265     {"bluetooth-fix-a2dp-packet-size",
2266      flag_descriptions::kBluetoothFixA2dpPacketSizeName,
2267      flag_descriptions::kBluetoothFixA2dpPacketSizeDescription, kOsCrOS,
2268      FEATURE_VALUE_TYPE(chromeos::features::kBluetoothFixA2dpPacketSize)},
2269     {"bluetooth-next-handsfree-profile",
2270      flag_descriptions::kBluetoothNextHandsfreeProfileName,
2271      flag_descriptions::kBluetoothNextHandsfreeProfileDescription, kOsCrOS,
2272      FEATURE_VALUE_TYPE(chromeos::features::kBluetoothNextHandsfreeProfile)},
2273     {"cryptauth-v2-device-activity-status",
2274      flag_descriptions::kCryptAuthV2DeviceActivityStatusName,
2275      flag_descriptions::kCryptAuthV2DeviceActivityStatusDescription, kOsCrOS,
2276      FEATURE_VALUE_TYPE(chromeos::features::kCryptAuthV2DeviceActivityStatus)},
2277     {"cryptauth-v2-devicesync", flag_descriptions::kCryptAuthV2DeviceSyncName,
2278      flag_descriptions::kCryptAuthV2DeviceSyncDescription, kOsCrOS,
2279      FEATURE_VALUE_TYPE(chromeos::features::kCryptAuthV2DeviceSync)},
2280     {"cryptauth-v2-enrollment", flag_descriptions::kCryptAuthV2EnrollmentName,
2281      flag_descriptions::kCryptAuthV2EnrollmentDescription, kOsCrOS,
2282      FEATURE_VALUE_TYPE(chromeos::features::kCryptAuthV2Enrollment)},
2283     {"disable-cryptauth-v1-devicesync",
2284      flag_descriptions::kDisableCryptAuthV1DeviceSyncName,
2285      flag_descriptions::kDisableCryptAuthV1DeviceSyncDescription, kOsCrOS,
2286      FEATURE_VALUE_TYPE(chromeos::features::kDisableCryptAuthV1DeviceSync)},
2287     {"disable-office-editing-component-app",
2288      flag_descriptions::kDisableOfficeEditingComponentAppName,
2289      flag_descriptions::kDisableOfficeEditingComponentAppDescription, kOsCrOS,
2290      FEATURE_VALUE_TYPE(chromeos::features::kDisableOfficeEditingComponentApp)},
2291     {"updated_cellular_activation_ui",
2292      flag_descriptions::kUpdatedCellularActivationUiName,
2293      flag_descriptions::kUpdatedCellularActivationUiDescription, kOsCrOS,
2294      FEATURE_VALUE_TYPE(chromeos::features::kUpdatedCellularActivationUi)},
2295     {"use_messages_staging_url", flag_descriptions::kUseMessagesStagingUrlName,
2296      flag_descriptions::kUseMessagesStagingUrlDescription, kOsCrOS,
2297      FEATURE_VALUE_TYPE(chromeos::features::kUseMessagesStagingUrl)},
2298     {"use-custom-messages-domain",
2299      flag_descriptions::kUseCustomMessagesDomainName,
2300      flag_descriptions::kUseCustomMessagesDomainDescription, kOsCrOS,
2301      ORIGIN_LIST_VALUE_TYPE(switches::kCustomAndroidMessagesDomain, "")},
2302     {"disable-cancel-all-touches",
2303      flag_descriptions::kDisableCancelAllTouchesName,
2304      flag_descriptions::kDisableCancelAllTouchesDescription, kOsCrOS,
2305      SINGLE_VALUE_TYPE(switches::kDisableCancelAllTouches)},
2306     {
2307         "enable-background-blur",
2308         flag_descriptions::kEnableBackgroundBlurName,
2309         flag_descriptions::kEnableBackgroundBlurDescription,
2310         kOsCrOS,
2311         FEATURE_VALUE_TYPE(ash::features::kEnableBackgroundBlur),
2312     },
2313     {"enable-notification-indicator",
2314      flag_descriptions::kNotificationIndicatorName,
2315      flag_descriptions::kNotificationIndicatorDescription, kOsCrOS,
2316      FEATURE_VALUE_TYPE(features::kNotificationIndicator)},
2317     {"enable-app-list-search-autocomplete",
2318      flag_descriptions::kEnableAppListSearchAutocompleteName,
2319      flag_descriptions::kEnableAppListSearchAutocompleteDescription, kOsCrOS,
2320      FEATURE_VALUE_TYPE(app_list_features::kEnableAppListSearchAutocomplete)},
2321     {kLacrosSupportInternalName, flag_descriptions::kLacrosSupportName,
2322      flag_descriptions::kLacrosSupportDescription, kOsCrOS,
2323      FEATURE_VALUE_TYPE(chromeos::features::kLacrosSupport)},
2324     {"list-all-display-modes", flag_descriptions::kListAllDisplayModesName,
2325      flag_descriptions::kListAllDisplayModesDescription, kOsCrOS,
2326      FEATURE_VALUE_TYPE(display::features::kListAllDisplayModes)},
2327     {"instant-tethering", flag_descriptions::kTetherName,
2328      flag_descriptions::kTetherDescription, kOsCrOS,
2329      FEATURE_VALUE_TYPE(chromeos::features::kInstantTethering)},
2330     {
2331         "new-shortcut-mapping",
2332         flag_descriptions::kEnableNewShortcutMappingName,
2333         flag_descriptions::kEnableNewShortcutMappingDescription,
2334         kOsCrOS,
2335         FEATURE_VALUE_TYPE(features::kNewShortcutMapping),
2336     },
2337     {"shelf-hide-buttons-in-tablet",
2338      flag_descriptions::kHideShelfControlsInTabletModeName,
2339      flag_descriptions::kHideShelfControlsInTabletModeDescription, kOsCrOS,
2340      FEATURE_VALUE_TYPE(ash::features::kHideShelfControlsInTabletMode)},
2341     {"shelf-app-scaling", flag_descriptions::kShelfAppScalingName,
2342      flag_descriptions::kShelfAppScalingDescription, kOsCrOS,
2343      FEATURE_VALUE_TYPE(ash::features::kShelfAppScaling)},
2344     {"shelf-hotseat", flag_descriptions::kShelfHotseatName,
2345      flag_descriptions::kShelfHotseatDescription, kOsCrOS,
2346      FEATURE_VALUE_TYPE(chromeos::features::kShelfHotseat)},
2347     {"shelf-hover-previews", flag_descriptions::kShelfHoverPreviewsName,
2348      flag_descriptions::kShelfHoverPreviewsDescription, kOsCrOS,
2349      SINGLE_VALUE_TYPE(chromeos::switches::kShelfHoverPreviews)},
2350     {"show-bluetooth-debug-log-toggle",
2351      flag_descriptions::kShowBluetoothDebugLogToggleName,
2352      flag_descriptions::kShowBluetoothDebugLogToggleDescription, kOsCrOS,
2353      FEATURE_VALUE_TYPE(chromeos::features::kShowBluetoothDebugLogToggle)},
2354     {"show-bluetooth-device-battery",
2355      flag_descriptions::kShowBluetoothDeviceBatteryName,
2356      flag_descriptions::kShowBluetoothDeviceBatteryDescription, kOsCrOS,
2357      FEATURE_VALUE_TYPE(chromeos::features::kShowBluetoothDeviceBattery)},
2358     {"show-taps", flag_descriptions::kShowTapsName,
2359      flag_descriptions::kShowTapsDescription, kOsCrOS,
2360      SINGLE_VALUE_TYPE(ash::switches::kShowTaps)},
2361     {"show-touch-hud", flag_descriptions::kShowTouchHudName,
2362      flag_descriptions::kShowTouchHudDescription, kOsCrOS,
2363      SINGLE_VALUE_TYPE(ash::switches::kAshTouchHud)},
2364     {"trim-on-memory-pressure", flag_descriptions::kTrimOnMemoryPressureName,
2365      flag_descriptions::kTrimOnMemoryPressureDescription, kOsCrOS,
2366      FEATURE_VALUE_TYPE(performance_manager::features::kTrimOnMemoryPressure)},
2367     {"system-tray-mic-gain", flag_descriptions::kSystemTrayMicGainName,
2368      flag_descriptions::kSystemTrayMicGainDescription, kOsCrOS,
2369      FEATURE_VALUE_TYPE(ash::features::kSystemTrayMicGainSetting)},
2370 #endif  // OS_CHROMEOS
2371     {
2372         "disable-accelerated-video-decode",
2373         flag_descriptions::kAcceleratedVideoDecodeName,
2374         flag_descriptions::kAcceleratedVideoDecodeDescription,
2375         kOsMac | kOsWin | kOsCrOS | kOsAndroid,
2376         SINGLE_DISABLE_VALUE_TYPE(switches::kDisableAcceleratedVideoDecode),
2377     },
2378     {
2379         "disable-accelerated-video-encode",
2380         flag_descriptions::kAcceleratedVideoEncodeName,
2381         flag_descriptions::kAcceleratedVideoEncodeDescription,
2382         kOsMac | kOsWin | kOsCrOS | kOsAndroid,
2383         SINGLE_DISABLE_VALUE_TYPE(switches::kDisableAcceleratedVideoEncode),
2384     },
2385 #if defined(OS_CHROMEOS)
2386     {
2387         "zero-copy-video-capture",
2388         flag_descriptions::kZeroCopyVideoCaptureName,
2389         flag_descriptions::kZeroCopyVideoCaptureDescription,
2390         kOsCrOS,
2391         ENABLE_DISABLE_VALUE_TYPE_AND_VALUE(
2392             switches::kVideoCaptureUseGpuMemoryBuffer,
2393             "1",
2394             switches::kDisableVideoCaptureUseGpuMemoryBuffer,
2395             "1"),
2396     },
2397     {
2398         "ash-debug-shortcuts",
2399         flag_descriptions::kDebugShortcutsName,
2400         flag_descriptions::kDebugShortcutsDescription,
2401         kOsAll,
2402         SINGLE_VALUE_TYPE(ash::switches::kAshDebugShortcuts),
2403     },
2404     {"ui-slow-animations", flag_descriptions::kUiSlowAnimationsName,
2405      flag_descriptions::kUiSlowAnimationsDescription, kOsCrOS,
2406      SINGLE_VALUE_TYPE(switches::kUISlowAnimations)},
2407     {"ui-show-composited-layer-borders",
2408      flag_descriptions::kUiShowCompositedLayerBordersName,
2409      flag_descriptions::kUiShowCompositedLayerBordersDescription, kOsCrOS,
2410      MULTI_VALUE_TYPE(kUiShowCompositedLayerBordersChoices)},
2411     {"enable-request-tablet-site", flag_descriptions::kRequestTabletSiteName,
2412      flag_descriptions::kRequestTabletSiteDescription, kOsCrOS,
2413      SINGLE_VALUE_TYPE(chromeos::switches::kEnableRequestTabletSite)},
2414 #endif  // OS_CHROMEOS
2415     {"debug-packed-apps", flag_descriptions::kDebugPackedAppName,
2416      flag_descriptions::kDebugPackedAppDescription, kOsDesktop,
2417      SINGLE_VALUE_TYPE(switches::kDebugPackedApps)},
2418     {"use-lookalikes-for-navigation-suggestions",
2419      flag_descriptions::kUseLookalikesForNavigationSuggestionsName,
2420      flag_descriptions::kUseLookalikesForNavigationSuggestionsDescription,
2421      kOsAll,
2422      FEATURE_VALUE_TYPE(net::features::kUseLookalikesForNavigationSuggestions)},
2423     {"username-first-flow", flag_descriptions::kUsernameFirstFlowName,
2424      flag_descriptions::kUsernameFirstFlowDescription, kOsAll,
2425      FEATURE_VALUE_TYPE(password_manager::features::kUsernameFirstFlow)},
2426     {"enable-show-autofill-signatures",
2427      flag_descriptions::kShowAutofillSignaturesName,
2428      flag_descriptions::kShowAutofillSignaturesDescription, kOsAll,
2429      SINGLE_VALUE_TYPE(autofill::switches::kShowAutofillSignatures)},
2430     {"wallet-service-use-sandbox",
2431      flag_descriptions::kWalletServiceUseSandboxName,
2432      flag_descriptions::kWalletServiceUseSandboxDescription,
2433      kOsAndroid | kOsDesktop,
2434      ENABLE_DISABLE_VALUE_TYPE_AND_VALUE(
2435          autofill::switches::kWalletServiceUseSandbox,
2436          "1",
2437          autofill::switches::kWalletServiceUseSandbox,
2438          "0")},
2439     {"enable-web-bluetooth-new-permissions-backend",
2440      flag_descriptions::kWebBluetoothNewPermissionsBackendName,
2441      flag_descriptions::kWebBluetoothNewPermissionsBackendDescription,
2442      kOsAndroid | kOsDesktop,
2443      FEATURE_VALUE_TYPE(features::kWebBluetoothNewPermissionsBackend)},
2444 #if defined(USE_AURA) || defined(OS_ANDROID)
2445     {"overscroll-history-navigation",
2446      flag_descriptions::kOverscrollHistoryNavigationName,
2447      flag_descriptions::kOverscrollHistoryNavigationDescription,
2448      kOsAura | kOsAndroid,
2449 #if defined(OS_ANDROID)
2450      FEATURE_WITH_PARAMS_VALUE_TYPE(features::kOverscrollHistoryNavigation,
2451                                     kOverscrollHistoryNavigationVariations,
2452                                     "OverscrollNavigation")},
2453 #else
2454      FEATURE_VALUE_TYPE(features::kOverscrollHistoryNavigation)},
2455     {"pull-to-refresh", flag_descriptions::kPullToRefreshName,
2456      flag_descriptions::kPullToRefreshDescription, kOsAura,
2457      MULTI_VALUE_TYPE(kPullToRefreshChoices)},
2458 #endif  // OS_ANDROID
2459 #endif  // USE_AURA || OS_ANDROID
2460     {"enable-touch-drag-drop", flag_descriptions::kTouchDragDropName,
2461      flag_descriptions::kTouchDragDropDescription, kOsWin | kOsCrOS,
2462      ENABLE_DISABLE_VALUE_TYPE(switches::kEnableTouchDragDrop,
2463                                switches::kDisableTouchDragDrop)},
2464     {"touch-selection-strategy", flag_descriptions::kTouchSelectionStrategyName,
2465      flag_descriptions::kTouchSelectionStrategyDescription,
2466      kOsAndroid,  // TODO(mfomitchev): Add CrOS/Win/Linux support soon.
2467      MULTI_VALUE_TYPE(kTouchTextSelectionStrategyChoices)},
2468     {"trace-upload-url", flag_descriptions::kTraceUploadUrlName,
2469      flag_descriptions::kTraceUploadUrlDescription, kOsAll,
2470      MULTI_VALUE_TYPE(kTraceUploadURL)},
2471     {"enable-suggestions-with-substring-match",
2472      flag_descriptions::kSuggestionsWithSubStringMatchName,
2473      flag_descriptions::kSuggestionsWithSubStringMatchDescription, kOsAll,
2474      FEATURE_VALUE_TYPE(autofill::features::kAutofillTokenPrefixMatching)},
2475     {"enable-offer-store-unmasked-wallet-cards",
2476      flag_descriptions::kOfferStoreUnmaskedWalletCardsName,
2477      flag_descriptions::kOfferStoreUnmaskedWalletCardsDescription, kOsAll,
2478      ENABLE_DISABLE_VALUE_TYPE(
2479          autofill::switches::kEnableOfferStoreUnmaskedWalletCards,
2480          autofill::switches::kDisableOfferStoreUnmaskedWalletCards)},
2481 #if defined(OS_CHROMEOS)
2482     {"enable-virtual-keyboard", flag_descriptions::kVirtualKeyboardName,
2483      flag_descriptions::kVirtualKeyboardDescription, kOsCrOS,
2484      SINGLE_VALUE_TYPE(keyboard::switches::kEnableVirtualKeyboard)},
2485 #endif  // OS_CHROMEOS
2486 #if BUILDFLAG(ENABLE_SERVICE_DISCOVERY)
2487     {"device-discovery-notifications",
2488      flag_descriptions::kDeviceDiscoveryNotificationsName,
2489      flag_descriptions::kDeviceDiscoveryNotificationsDescription, kOsDesktop,
2490      ENABLE_DISABLE_VALUE_TYPE(switches::kEnableDeviceDiscoveryNotifications,
2491                                switches::kDisableDeviceDiscoveryNotifications)},
2492 #endif  // BUILDFLAG(ENABLE_SERVICE_DISCOVERY)
2493 #if defined(OS_WIN)
2494     {"enable-cloud-print-xps", flag_descriptions::kCloudPrintXpsName,
2495      flag_descriptions::kCloudPrintXpsDescription, kOsWin,
2496      SINGLE_VALUE_TYPE(switches::kEnableCloudPrintXps)},
2497 #endif  // OS_WIN
2498 #if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_CHROMEOS)
2499     {"enable-webgl2-compute-context",
2500      flag_descriptions::kWebGL2ComputeContextName,
2501      flag_descriptions::kWebGL2ComputeContextDescription,
2502      kOsWin | kOsLinux | kOsCrOS,
2503      SINGLE_VALUE_TYPE(switches::kEnableWebGL2ComputeContext)},
2504 #endif  // defined(OS_WIN) || defined(OS_LINUX) || defined(OS_CHROMEOS)
2505     {"enable-webgl-draft-extensions",
2506      flag_descriptions::kWebglDraftExtensionsName,
2507      flag_descriptions::kWebglDraftExtensionsDescription, kOsAll,
2508      SINGLE_VALUE_TYPE(switches::kEnableWebGLDraftExtensions)},
2509 #if defined(OS_ANDROID)
2510     {"enable-android-autofill-accessibility",
2511      flag_descriptions::kAndroidAutofillAccessibilityName,
2512      flag_descriptions::kAndroidAutofillAccessibilityDescription, kOsAndroid,
2513      FEATURE_VALUE_TYPE(features::kAndroidAutofillAccessibility)},
2514 #endif  // OS_ANDROID
2515     {"enable-zero-copy", flag_descriptions::kZeroCopyName,
2516      flag_descriptions::kZeroCopyDescription, kOsAll,
2517      ENABLE_DISABLE_VALUE_TYPE(blink::switches::kEnableZeroCopy,
2518                                blink::switches::kDisableZeroCopy)},
2519     {"enable-vulkan", flag_descriptions::kEnableVulkanName,
2520      flag_descriptions::kEnableVulkanDescription,
2521      kOsWin | kOsLinux | kOsAndroid, FEATURE_VALUE_TYPE(features::kVulkan)},
2522 #if defined(OS_MACOSX)
2523     {"disable-hosted-app-shim-creation",
2524      flag_descriptions::kHostedAppShimCreationName,
2525      flag_descriptions::kHostedAppShimCreationDescription, kOsMac,
2526      SINGLE_DISABLE_VALUE_TYPE(switches::kDisableHostedAppShimCreation)},
2527     {"enable-hosted-app-quit-notification",
2528      flag_descriptions::kHostedAppQuitNotificationName,
2529      flag_descriptions::kHostedAppQuitNotificationDescription, kOsMac,
2530      SINGLE_VALUE_TYPE(switches::kHostedAppQuitNotification)},
2531 #endif  // OS_MACOSX
2532 #if defined(OS_ANDROID)
2533     {"translate-force-trigger-on-english",
2534      flag_descriptions::kTranslateForceTriggerOnEnglishName,
2535      flag_descriptions::kTranslateForceTriggerOnEnglishDescription, kOsAndroid,
2536      FEATURE_WITH_PARAMS_VALUE_TYPE(language::kOverrideTranslateTriggerInIndia,
2537                                     kTranslateForceTriggerOnEnglishVariations,
2538                                     "OverrideTranslateTriggerInIndia")},
2539 #endif  // OS_ANDROID
2540
2541 #if BUILDFLAG(ENABLE_NATIVE_NOTIFICATIONS) && !defined(OS_CHROMEOS)
2542     {"enable-native-notifications",
2543      flag_descriptions::kNotificationsNativeFlagName,
2544      flag_descriptions::kNotificationsNativeFlagDescription,
2545      kOsMac | kOsLinux | kOsWin,
2546      FEATURE_VALUE_TYPE(features::kNativeNotifications)},
2547 #endif  // ENABLE_NATIVE_NOTIFICATIONS
2548 #if defined(OS_ANDROID)
2549     {"reader-mode-heuristics", flag_descriptions::kReaderModeHeuristicsName,
2550      flag_descriptions::kReaderModeHeuristicsDescription, kOsAndroid,
2551      MULTI_VALUE_TYPE(kReaderModeHeuristicsChoices)},
2552 #endif  // OS_ANDROID
2553 #if defined(OS_ANDROID)
2554     {"enable-chrome-duet", flag_descriptions::kChromeDuetName,
2555      flag_descriptions::kChromeDuetDescription, kOsAndroid,
2556      FEATURE_WITH_PARAMS_VALUE_TYPE(chrome::android::kChromeDuetFeature,
2557                                     kChromeDuetVariations,
2558                                     "ChromeDuet")},
2559     {"enable-chrome-duet-labels", flag_descriptions::kChromeDuetLabelsName,
2560      flag_descriptions::kChromeDuetLabelsDescription, kOsAndroid,
2561      FEATURE_VALUE_TYPE(chrome::android::kChromeDuetLabeled)},
2562     {"share-button-in-top-toolbar",
2563      flag_descriptions::kShareButtonInTopToolbarName,
2564      flag_descriptions::kShareButtonInTopToolbarDescription, kOsAndroid,
2565      FEATURE_VALUE_TYPE(chrome::android::kShareButtonInTopToolbar)},
2566     {"chrome-share-qr-code", flag_descriptions::kChromeShareQRCodeName,
2567      flag_descriptions::kChromeShareQRCodeDescription, kOsAndroid,
2568      FEATURE_VALUE_TYPE(chrome::android::kChromeShareQRCode)},
2569     {"chrome-share-screenshot", flag_descriptions::kChromeShareScreenshotName,
2570      flag_descriptions::kChromeShareScreenshotDescription, kOsAndroid,
2571      FEATURE_VALUE_TYPE(chrome::android::kChromeShareScreenshot)},
2572     {"chrome-sharing-hub", flag_descriptions::kChromeSharingHubName,
2573      flag_descriptions::kChromeSharingHubDescription, kOsAndroid,
2574      FEATURE_VALUE_TYPE(chrome::android::kChromeSharingHub)},
2575     {"chrome-sharing-hub-v1-5", flag_descriptions::kChromeSharingHubV15Name,
2576      flag_descriptions::kChromeSharingHubV15Description, kOsAndroid,
2577      FEATURE_VALUE_TYPE(chrome::android::kChromeSharingHubV15)},
2578     {"request-unbuffered-dispatch",
2579      flag_descriptions::kRequestUnbufferedDispatchName,
2580      flag_descriptions::kRequestUnbufferedDispatchDescription, kOsAndroid,
2581      FEATURE_VALUE_TYPE(features::kRequestUnbufferedDispatch)},
2582 #endif  // OS_ANDROID
2583     {"in-product-help-demo-mode-choice",
2584      flag_descriptions::kInProductHelpDemoModeChoiceName,
2585      flag_descriptions::kInProductHelpDemoModeChoiceDescription, kOsAll,
2586      FEATURE_WITH_PARAMS_VALUE_TYPE(
2587          feature_engagement::kIPHDemoMode,
2588          feature_engagement::kIPHDemoModeChoiceVariations,
2589          "IPH_DemoMode")},
2590     {"disable-threaded-scrolling", flag_descriptions::kThreadedScrollingName,
2591      flag_descriptions::kThreadedScrollingDescription, kOsAll,
2592      SINGLE_DISABLE_VALUE_TYPE(switches::kDisableThreadedScrolling)},
2593     {"extension-content-verification",
2594      flag_descriptions::kExtensionContentVerificationName,
2595      flag_descriptions::kExtensionContentVerificationDescription, kOsDesktop,
2596      MULTI_VALUE_TYPE(kExtensionContentVerificationChoices)},
2597 #if defined(OS_CHROMEOS)
2598     {"enable-lock-screen-notification",
2599      flag_descriptions::kLockScreenNotificationName,
2600      flag_descriptions::kLockScreenNotificationDescription, kOsCrOS,
2601      FEATURE_VALUE_TYPE(ash::features::kLockScreenNotifications)},
2602 #endif  // OS_CHROMEOS
2603     {"reduced-referrer-granularity",
2604      flag_descriptions::kReducedReferrerGranularityName,
2605      flag_descriptions::kReducedReferrerGranularityDescription, kOsAll,
2606      FEATURE_VALUE_TYPE(features::kReducedReferrerGranularity)},
2607 #if defined(OS_CHROMEOS)
2608     {"crostini-port-forwarding", flag_descriptions::kCrostiniPortForwardingName,
2609      flag_descriptions::kCrostiniPortForwardingDescription, kOsCrOS,
2610      FEATURE_VALUE_TYPE(chromeos::features::kCrostiniPortForwarding)},
2611     {"crostini-show-mic-setting",
2612      flag_descriptions::kCrostiniShowMicSettingName,
2613      flag_descriptions::kCrostiniShowMicSettingDescription, kOsCrOS,
2614      FEATURE_VALUE_TYPE(chromeos::features::kCrostiniShowMicSetting)},
2615     {"terminal-system-app", flag_descriptions::kTerminalSystemAppName,
2616      flag_descriptions::kTerminalSystemAppDescription, kOsCrOS,
2617      FEATURE_VALUE_TYPE(features::kTerminalSystemApp)},
2618     {"terminal-system-app-legacy-settings",
2619      flag_descriptions::kTerminalSystemAppLegacySettingsName,
2620      flag_descriptions::kTerminalSystemAppLegacySettingsDescription, kOsCrOS,
2621      FEATURE_VALUE_TYPE(features::kTerminalSystemAppLegacySettings)},
2622     {"pluginvm-show-camera-permissions",
2623      flag_descriptions::kPluginVmShowCameraPermissionsName,
2624      flag_descriptions::kPluginVmShowCameraPermissionsDescription, kOsCrOS,
2625      FEATURE_VALUE_TYPE(chromeos::features::kPluginVmShowCameraPermissions)},
2626     {"pluginvm-show-microphone-permissions",
2627      flag_descriptions::kPluginVmShowMicrophonePermissionsName,
2628      flag_descriptions::kPluginVmShowMicrophonePermissionsDescription, kOsCrOS,
2629      FEATURE_VALUE_TYPE(
2630          chromeos::features::kPluginVmShowMicrophonePermissions)},
2631 #if BUILDFLAG(USE_TCMALLOC)
2632     {"dynamic-tcmalloc-tuning", flag_descriptions::kDynamicTcmallocName,
2633      flag_descriptions::kDynamicTcmallocDescription, kOsCrOS,
2634      FEATURE_VALUE_TYPE(performance_manager::features::kDynamicTcmallocTuning)},
2635 #endif  // BUILDFLAG(USE_TCMALLOC)
2636 #endif  // OS_CHROMEOS
2637 #if defined(OS_ANDROID)
2638     {"enable-credit-card-assist", flag_descriptions::kCreditCardAssistName,
2639      flag_descriptions::kCreditCardAssistDescription, kOsAndroid,
2640      FEATURE_VALUE_TYPE(autofill::features::kAutofillCreditCardAssist)},
2641 #endif  // OS_ANDROID
2642 #if defined(OS_ANDROID)
2643     {"enable-site-isolation-for-password-sites",
2644      flag_descriptions::kSiteIsolationForPasswordSitesName,
2645      flag_descriptions::kSiteIsolationForPasswordSitesDescription, kOsAndroid,
2646      FEATURE_VALUE_TYPE(
2647          site_isolation::features::kSiteIsolationForPasswordSites)},
2648     {"enable-site-per-process", flag_descriptions::kStrictSiteIsolationName,
2649      flag_descriptions::kStrictSiteIsolationDescription, kOsAndroid,
2650      SINGLE_VALUE_TYPE(switches::kSitePerProcess)},
2651     {"enable-process-sharing-with-default-site-instances",
2652      flag_descriptions::kProcessSharingWithDefaultSiteInstancesName,
2653      flag_descriptions::kProcessSharingWithDefaultSiteInstancesDescription,
2654      kOsAndroid,
2655      FEATURE_VALUE_TYPE(features::kProcessSharingWithDefaultSiteInstances)},
2656     {"enable-process-sharing-with-strict-site-instances",
2657      flag_descriptions::kProcessSharingWithStrictSiteInstancesName,
2658      flag_descriptions::kProcessSharingWithStrictSiteInstancesDescription,
2659      kOsAndroid,
2660      FEATURE_VALUE_TYPE(features::kProcessSharingWithStrictSiteInstances)},
2661 #endif
2662     {"isolate-origins", flag_descriptions::kIsolateOriginsName,
2663      flag_descriptions::kIsolateOriginsDescription, kOsAll,
2664      ORIGIN_LIST_VALUE_TYPE(switches::kIsolateOrigins, "")},
2665     {"site-isolation-trial-opt-out",
2666      flag_descriptions::kSiteIsolationOptOutName,
2667      flag_descriptions::kSiteIsolationOptOutDescription, kOsAll,
2668      MULTI_VALUE_TYPE(kSiteIsolationOptOutChoices)},
2669     {"enable-use-zoom-for-dsf", flag_descriptions::kEnableUseZoomForDsfName,
2670      flag_descriptions::kEnableUseZoomForDsfDescription, kOsAll,
2671      MULTI_VALUE_TYPE(kEnableUseZoomForDSFChoices)},
2672     {"allow-previews", flag_descriptions::kPreviewsAllowedName,
2673      flag_descriptions::kPreviewsAllowedDescription, kOsAll,
2674      FEATURE_VALUE_TYPE(previews::features::kPreviews)},
2675     {"ignore-previews-blocklist",
2676      flag_descriptions::kIgnorePreviewsBlocklistName,
2677      flag_descriptions::kIgnorePreviewsBlocklistDescription, kOsAll,
2678      SINGLE_VALUE_TYPE(previews::switches::kIgnorePreviewsBlocklist)},
2679     {"enable-data-reduction-proxy-server-experiment",
2680      flag_descriptions::kEnableDataReductionProxyServerExperimentName,
2681      flag_descriptions::kEnableDataReductionProxyServerExperimentDescription,
2682      kOsAll, MULTI_VALUE_TYPE(kDataReductionProxyServerExperiment)},
2683     {"enable-subresource-redirect",
2684      flag_descriptions::kEnableSubresourceRedirectName,
2685      flag_descriptions::kEnableSubresourceRedirectDescription, kOsAll,
2686      FEATURE_VALUE_TYPE(blink::features::kSubresourceRedirect)},
2687 #if defined(OS_ANDROID)
2688     {"enable-offline-previews", flag_descriptions::kEnableOfflinePreviewsName,
2689      flag_descriptions::kEnableOfflinePreviewsDescription, kOsAndroid,
2690      FEATURE_VALUE_TYPE(previews::features::kOfflinePreviews)},
2691 #endif  // OS_ANDROID
2692 #if defined(OS_CHROMEOS) || defined(OS_LINUX)
2693     {"enable-save-data", flag_descriptions::kEnableSaveDataName,
2694      flag_descriptions::kEnableSaveDataDescription, kOsCrOS | kOsLinux,
2695      SINGLE_VALUE_TYPE(
2696          data_reduction_proxy::switches::kEnableDataReductionProxy)},
2697     {"enable-navigation-predictor",
2698      flag_descriptions::kEnableNavigationPredictorName,
2699      flag_descriptions::kEnableNavigationPredictorDescription,
2700      kOsCrOS | kOsLinux,
2701      FEATURE_VALUE_TYPE(blink::features::kNavigationPredictor)},
2702 #endif  // OS_CHROMEOS || OS_LINUX
2703     {"enable-preconnect-to-search",
2704      flag_descriptions::kEnablePreconnectToSearchName,
2705      flag_descriptions::kEnablePreconnectToSearchDescription, kOsAll,
2706      FEATURE_VALUE_TYPE(features::kPreconnectToSearch)},
2707     {"enable-noscript-previews", flag_descriptions::kEnableNoScriptPreviewsName,
2708      flag_descriptions::kEnableNoScriptPreviewsDescription, kOsAll,
2709      FEATURE_VALUE_TYPE(previews::features::kNoScriptPreviews)},
2710     {"enable-resource-loading-hints",
2711      flag_descriptions::kEnableResourceLoadingHintsName,
2712      flag_descriptions::kEnableResourceLoadingHintsDescription, kOsAll,
2713      FEATURE_VALUE_TYPE(previews::features::kResourceLoadingHints)},
2714     {"enable-previews-coin-flip",
2715      flag_descriptions::kEnablePreviewsCoinFlipName,
2716      flag_descriptions::kEnablePreviewsCoinFlipDescription, kOsAll,
2717      FEATURE_VALUE_TYPE(previews::features::kCoinFlipHoldback)},
2718     {"enable-google-srp-isolated-prerender-probing",
2719      flag_descriptions::kEnableSRPIsolatedPrerenderProbingName,
2720      flag_descriptions::kEnableSRPIsolatedPrerenderProbingDescription, kOsAll,
2721      FEATURE_VALUE_TYPE(features::kIsolatePrerendersMustProbeOrigin)},
2722     {"enable-google-srp-isolated-prerenders",
2723      flag_descriptions::kEnableSRPIsolatedPrerendersName,
2724      flag_descriptions::kEnableSRPIsolatedPrerendersDescription, kOsAll,
2725      FEATURE_WITH_PARAMS_VALUE_TYPE(features::kIsolatePrerenders,
2726                                     kIsolatedPrerenderFeatureWithPrefetchLimit,
2727                                     "Prefetch Limit")},
2728     {"enable-google-srp-isolated-prerender-nsp",
2729      flag_descriptions::kEnableSRPIsolatedPrerendersNSPName,
2730      flag_descriptions::kEnableSRPIsolatedPrerendersNSPDescription, kOsAll,
2731      SINGLE_VALUE_TYPE(kIsolatedPrerenderEnableNSPCmdLineFlag)},
2732     {"allow-insecure-localhost", flag_descriptions::kAllowInsecureLocalhostName,
2733      flag_descriptions::kAllowInsecureLocalhostDescription, kOsAll,
2734      SINGLE_VALUE_TYPE(switches::kAllowInsecureLocalhost)},
2735     {"bypass-app-banner-engagement-checks",
2736      flag_descriptions::kBypassAppBannerEngagementChecksName,
2737      flag_descriptions::kBypassAppBannerEngagementChecksDescription, kOsAll,
2738      SINGLE_VALUE_TYPE(switches::kBypassAppBannerEngagementChecks)},
2739     {"enable-desktop-pwas-local-updating",
2740      flag_descriptions::kDesktopPWAsLocalUpdatingName,
2741      flag_descriptions::kDesktopPWAsLocalUpdatingDescription, kOsDesktop,
2742      FEATURE_VALUE_TYPE(features::kDesktopPWAsLocalUpdating)},
2743     // TODO(https://crbug.com/1069293): Add macOS and Linux implementations.
2744     {"enable-desktop-pwas-app-icon-shortcuts-menu",
2745      flag_descriptions::kDesktopPWAsAppIconShortcutsMenuName,
2746      flag_descriptions::kDesktopPWAsAppIconShortcutsMenuDescription, kOsWin,
2747      FEATURE_VALUE_TYPE(features::kDesktopPWAsAppIconShortcutsMenu)},
2748     {"enable-desktop-pwas-tab-strip",
2749      flag_descriptions::kDesktopPWAsTabStripName,
2750      flag_descriptions::kDesktopPWAsTabStripDescription, kOsDesktop,
2751      FEATURE_VALUE_TYPE(features::kDesktopPWAsTabStrip)},
2752     {"enable-desktop-pwas-tab-strip-link-capturing",
2753      flag_descriptions::kDesktopPWAsTabStripLinkCapturingName,
2754      flag_descriptions::kDesktopPWAsTabStripLinkCapturingDescription,
2755      kOsDesktop,
2756      FEATURE_VALUE_TYPE(features::kDesktopPWAsTabStripLinkCapturing)},
2757     {"enable-desktop-pwas-without-extensions",
2758      flag_descriptions::kDesktopPWAsWithoutExtensionsName,
2759      flag_descriptions::kDesktopPWAsWithoutExtensionsDescription, kOsDesktop,
2760      FEATURE_VALUE_TYPE(features::kDesktopPWAsWithoutExtensions)},
2761     {"enable-desktop-pwas-run-on-os-login",
2762      flag_descriptions::kDesktopPWAsRunOnOsLoginName,
2763      flag_descriptions::kDesktopPWAsRunOnOsLoginDescription, kOsDesktop,
2764      FEATURE_VALUE_TYPE(features::kDesktopPWAsRunOnOsLogin)},
2765     {"enable-system-webapps", flag_descriptions::kEnableSystemWebAppsName,
2766      flag_descriptions::kEnableSystemWebAppsDescription, kOsDesktop,
2767      FEATURE_VALUE_TYPE(features::kSystemWebApps)},
2768     {"use-sync-sandbox", flag_descriptions::kSyncSandboxName,
2769      flag_descriptions::kSyncSandboxDescription, kOsAll,
2770      SINGLE_VALUE_TYPE_AND_VALUE(
2771          switches::kSyncServiceURL,
2772          "https://chrome-sync.sandbox.google.com/chrome-sync/alpha")},
2773 #if !defined(OS_ANDROID)
2774     {"load-media-router-component-extension",
2775      flag_descriptions::kLoadMediaRouterComponentExtensionName,
2776      flag_descriptions::kLoadMediaRouterComponentExtensionDescription,
2777      kOsDesktop,
2778      ENABLE_DISABLE_VALUE_TYPE_AND_VALUE(
2779          switches::kLoadMediaRouterComponentExtension,
2780          "1",
2781          switches::kLoadMediaRouterComponentExtension,
2782          "0")},
2783     {"media-router-cast-allow-all-ips",
2784      flag_descriptions::kMediaRouterCastAllowAllIPsName,
2785      flag_descriptions::kMediaRouterCastAllowAllIPsDescription, kOsDesktop,
2786      FEATURE_VALUE_TYPE(media_router::kCastAllowAllIPsFeature)},
2787     {"cast-media-route-provider",
2788      flag_descriptions::kCastMediaRouteProviderName,
2789      flag_descriptions::kCastMediaRouteProviderDescription, kOsDesktop,
2790      FEATURE_VALUE_TYPE(media_router::kCastMediaRouteProvider)},
2791 #endif  // !OS_ANDROID
2792 #if defined(OS_ANDROID)
2793     {"autofill-keyboard-accessory-view",
2794      flag_descriptions::kAutofillAccessoryViewName,
2795      flag_descriptions::kAutofillAccessoryViewDescription, kOsAndroid,
2796      FEATURE_WITH_PARAMS_VALUE_TYPE(
2797          autofill::features::kAutofillKeyboardAccessory,
2798          kAutofillKeyboardAccessoryFeatureVariations,
2799          "AutofillKeyboardAccessoryVariations")},
2800 #endif  // OS_ANDROID
2801 #if defined(OS_WIN)
2802     {"try-supported-channel-layouts",
2803      flag_descriptions::kTrySupportedChannelLayoutsName,
2804      flag_descriptions::kTrySupportedChannelLayoutsDescription, kOsWin,
2805      SINGLE_VALUE_TYPE(switches::kTrySupportedChannelLayouts)},
2806 #endif  // OS_WIN
2807 #if defined(OS_MACOSX)
2808     {"mac-syscall-sandbox", flag_descriptions::kMacSyscallSandboxName,
2809      flag_descriptions::kMacSyscallSandboxDescription, kOsMac,
2810      FEATURE_VALUE_TYPE(features::kMacSyscallSandbox)},
2811     {"mac-v2-gpu-sandbox", flag_descriptions::kMacV2GPUSandboxName,
2812      flag_descriptions::kMacV2GPUSandboxDescription, kOsMac,
2813      FEATURE_VALUE_TYPE(features::kMacV2GPUSandbox)},
2814 #endif  // OS_MACOSX
2815 #if BUILDFLAG(ENABLE_VR)
2816     {"webxr-incubations", flag_descriptions::kWebXrIncubationsName,
2817      flag_descriptions::kWebXrIncubationsDescription, kOsAll,
2818      FEATURE_VALUE_TYPE(features::kWebXrIncubations)},
2819     {"webxr-multi-gpu", flag_descriptions::kWebXrMultiGpuName,
2820      flag_descriptions::kWebXrMultiGpuDescription, kOsDesktop,
2821      FEATURE_VALUE_TYPE(blink::features::kWebXrMultiGpu)},
2822     {"webxr-runtime", flag_descriptions::kWebXrForceRuntimeName,
2823      flag_descriptions::kWebXrForceRuntimeDescription, kOsDesktop,
2824      MULTI_VALUE_TYPE(kWebXrForceRuntimeChoices)},
2825 #endif  // ENABLE_VR
2826 #if defined(OS_CHROMEOS)
2827     {"disable-accelerated-mjpeg-decode",
2828      flag_descriptions::kAcceleratedMjpegDecodeName,
2829      flag_descriptions::kAcceleratedMjpegDecodeDescription, kOsCrOS,
2830      SINGLE_DISABLE_VALUE_TYPE(switches::kDisableAcceleratedMjpegDecode)},
2831 #endif  // OS_CHROMEOS
2832     {"system-keyboard-lock", flag_descriptions::kSystemKeyboardLockName,
2833      flag_descriptions::kSystemKeyboardLockDescription, kOsDesktop,
2834      FEATURE_VALUE_TYPE(features::kSystemKeyboardLock)},
2835 #if defined(OS_ANDROID)
2836     {"offline-pages-load-signal-collecting",
2837      flag_descriptions::kOfflinePagesLoadSignalCollectingName,
2838      flag_descriptions::kOfflinePagesLoadSignalCollectingDescription,
2839      kOsAndroid,
2840      FEATURE_VALUE_TYPE(
2841          offline_pages::kOfflinePagesLoadSignalCollectingFeature)},
2842     {"offline-pages-live-page-sharing",
2843      flag_descriptions::kOfflinePagesLivePageSharingName,
2844      flag_descriptions::kOfflinePagesLivePageSharingDescription, kOsAndroid,
2845      FEATURE_VALUE_TYPE(offline_pages::kOfflinePagesLivePageSharingFeature)},
2846     {"offline-pages-prefetching",
2847      flag_descriptions::kOfflinePagesPrefetchingName,
2848      flag_descriptions::kOfflinePagesPrefetchingDescription, kOsAndroid,
2849      FEATURE_VALUE_TYPE(offline_pages::kPrefetchingOfflinePagesFeature)},
2850     {"offline-pages-failed-download",
2851      flag_descriptions::kOfflinePagesDescriptiveFailStatusName,
2852      flag_descriptions::kOfflinePagesDescriptiveFailStatusDescription,
2853      kOsAndroid,
2854      FEATURE_VALUE_TYPE(
2855          offline_pages::kOfflinePagesDescriptiveFailStatusFeature)},
2856     {"offline-pages-pending-download",
2857      flag_descriptions::kOfflinePagesDescriptivePendingStatusName,
2858      flag_descriptions::kOfflinePagesDescriptivePendingStatusDescription,
2859      kOsAndroid,
2860      FEATURE_VALUE_TYPE(
2861          offline_pages::kOfflinePagesDescriptivePendingStatusFeature)},
2862     {"offline-pages-resource-based-snapshot",
2863      flag_descriptions::kOfflinePagesResourceBasedSnapshotName,
2864      flag_descriptions::kOfflinePagesResourceBasedSnapshotDescription,
2865      kOsAndroid,
2866      FEATURE_VALUE_TYPE(
2867          offline_pages::kOfflinePagesResourceBasedSnapshotFeature)},
2868     {"offline-pages-renovations",
2869      flag_descriptions::kOfflinePagesRenovationsName,
2870      flag_descriptions::kOfflinePagesRenovationsDescription, kOsAndroid,
2871      FEATURE_VALUE_TYPE(offline_pages::kOfflinePagesRenovationsFeature)},
2872     {"offline-pages-in-downloads-home-open-in-cct",
2873      flag_descriptions::kOfflinePagesInDownloadHomeOpenInCctName,
2874      flag_descriptions::kOfflinePagesInDownloadHomeOpenInCctDescription,
2875      kOsAndroid,
2876      FEATURE_VALUE_TYPE(
2877          offline_pages::kOfflinePagesInDownloadHomeOpenInCctFeature)},
2878     {"offline-pages-alternate-dino-page",
2879      flag_descriptions::kOfflinePagesShowAlternateDinoPageName,
2880      flag_descriptions::kOfflinePagesShowAlternateDinoPageDescription,
2881      kOsAndroid,
2882      FEATURE_VALUE_TYPE(
2883          offline_pages::kOfflinePagesShowAlternateDinoPageFeature)},
2884     {"offline-indicator-choice", flag_descriptions::kOfflineIndicatorChoiceName,
2885      flag_descriptions::kOfflineIndicatorChoiceDescription, kOsAndroid,
2886      FEATURE_WITH_PARAMS_VALUE_TYPE(offline_pages::kOfflineIndicatorFeature,
2887                                     kOfflineIndicatorFeatureVariations,
2888                                     "OfflineIndicator")},
2889     {"offline-indicator-always-http-probe",
2890      flag_descriptions::kOfflineIndicatorAlwaysHttpProbeName,
2891      flag_descriptions::kOfflineIndicatorAlwaysHttpProbeDescription, kOsAndroid,
2892      FEATURE_VALUE_TYPE(
2893          offline_pages::kOfflineIndicatorAlwaysHttpProbeFeature)},
2894     {"content-indexing-download-home",
2895      flag_descriptions::kContentIndexingDownloadHomeName,
2896      flag_descriptions::kContentIndexingDownloadHomeDescription, kOsAndroid,
2897      FEATURE_VALUE_TYPE(chrome::android::kContentIndexingDownloadHome)},
2898     {"content-indexing-ntp", flag_descriptions::kContentIndexingNTPName,
2899      flag_descriptions::kContentIndexingNTPDescription, kOsAndroid,
2900      FEATURE_VALUE_TYPE(chrome::android::kContentIndexingNTP)},
2901     {"offline-indicator-v2", flag_descriptions::kOfflineIndicatorV2Name,
2902      flag_descriptions::kOfflineIndicatorV2Description, kOsAndroid,
2903      FEATURE_VALUE_TYPE(chrome::android::kOfflineIndicatorV2)},
2904     {"on-the-fly-mhtml-hash-computation",
2905      flag_descriptions::kOnTheFlyMhtmlHashComputationName,
2906      flag_descriptions::kOnTheFlyMhtmlHashComputationDescription, kOsAndroid,
2907      FEATURE_VALUE_TYPE(offline_pages::kOnTheFlyMhtmlHashComputationFeature)},
2908     {"query-tiles", flag_descriptions::kQueryTilesName,
2909      flag_descriptions::kQueryTilesDescription, kOsAndroid,
2910      FEATURE_VALUE_TYPE(query_tiles::features::kQueryTiles)},
2911     {"query-tiles-omnibox", flag_descriptions::kQueryTilesOmniboxName,
2912      flag_descriptions::kQueryTilesOmniboxDescription, kOsAndroid,
2913      FEATURE_VALUE_TYPE(query_tiles::features::kQueryTilesInOmnibox)},
2914     {"query-tiles-single-tier", flag_descriptions::kQueryTilesSingleTierName,
2915      flag_descriptions::kQueryTilesSingleTierDescription, kOsAndroid,
2916      SINGLE_VALUE_TYPE(query_tiles::switches::kQueryTilesSingleTier)},
2917     {"query-tiles-enable-query-editing",
2918      flag_descriptions::kQueryTilesEnableQueryEditingName,
2919      flag_descriptions::kQueryTilesEnableQueryEditingDescription, kOsAndroid,
2920      FEATURE_VALUE_TYPE(query_tiles::features::kQueryTilesEnableQueryEditing)},
2921     {"query-tiles-country-code", flag_descriptions::kQueryTilesCountryCode,
2922      flag_descriptions::kQueryTilesCountryCodeDescription, kOsAndroid,
2923      MULTI_VALUE_TYPE(kQueryTilesCountryChoices)},
2924     {"query-tiles-instant-fetch",
2925      flag_descriptions::kQueryTilesInstantFetchName,
2926      flag_descriptions::kQueryTilesInstantFetchDescription, kOsAndroid,
2927      SINGLE_VALUE_TYPE(
2928          query_tiles::switches::kQueryTilesInstantBackgroundTask)},
2929     {"android-picture-in-picture-api",
2930      flag_descriptions::kAndroidPictureInPictureAPIName,
2931      flag_descriptions::kAndroidPictureInPictureAPIDescription, kOsAndroid,
2932      FEATURE_VALUE_TYPE(media::kPictureInPictureAPI)},
2933     {"reengagement-notification",
2934      flag_descriptions::kReengagementNotificationName,
2935      flag_descriptions::kReengagementNotificationDescription, kOsAndroid,
2936      FEATURE_VALUE_TYPE(chrome::android::kReengagementNotification)},
2937 #endif  // OS_ANDROID
2938     {"disallow-doc-written-script-loads",
2939      flag_descriptions::kDisallowDocWrittenScriptsUiName,
2940      flag_descriptions::kDisallowDocWrittenScriptsUiDescription, kOsAll,
2941      // NOTE: if we want to add additional experiment entries for other
2942      // features controlled by kBlinkSettings, we'll need to add logic to
2943      // merge the flag values.
2944      ENABLE_DISABLE_VALUE_TYPE_AND_VALUE(
2945          switches::kBlinkSettings,
2946          "disallowFetchForDocWrittenScriptsInMainFrame=true",
2947          switches::kBlinkSettings,
2948          "disallowFetchForDocWrittenScriptsInMainFrame=false")},
2949 #if defined(OS_WIN)
2950     {"use-winrt-midi-api", flag_descriptions::kUseWinrtMidiApiName,
2951      flag_descriptions::kUseWinrtMidiApiDescription, kOsWin,
2952      FEATURE_VALUE_TYPE(midi::features::kMidiManagerWinrt)},
2953 #endif  // OS_WIN
2954 #if defined(OS_CHROMEOS)
2955     {"cros-regions-mode", flag_descriptions::kCrosRegionsModeName,
2956      flag_descriptions::kCrosRegionsModeDescription, kOsCrOS,
2957      MULTI_VALUE_TYPE(kCrosRegionsModeChoices)},
2958 #endif  // OS_CHROMEOS
2959 #if defined(TOOLKIT_VIEWS) || defined(OS_ANDROID)
2960     {"enable-autofill-credit-card-upload",
2961      flag_descriptions::kAutofillCreditCardUploadName,
2962      flag_descriptions::kAutofillCreditCardUploadDescription, kOsAll,
2963      FEATURE_VALUE_TYPE(autofill::features::kAutofillUpstream)},
2964 #endif  // TOOLKIT_VIEWS || OS_ANDROID
2965     {"force-ui-direction", flag_descriptions::kForceUiDirectionName,
2966      flag_descriptions::kForceUiDirectionDescription, kOsAll,
2967      MULTI_VALUE_TYPE(kForceUIDirectionChoices)},
2968     {"force-text-direction", flag_descriptions::kForceTextDirectionName,
2969      flag_descriptions::kForceTextDirectionDescription, kOsAll,
2970      MULTI_VALUE_TYPE(kForceTextDirectionChoices)},
2971 #if defined(OS_ANDROID)
2972     {"force-update-menu-type", flag_descriptions::kUpdateMenuTypeName,
2973      flag_descriptions::kUpdateMenuTypeDescription, kOsAndroid,
2974      MULTI_VALUE_TYPE(kForceUpdateMenuTypeChoices)},
2975     {"enable-inline-update-flow", flag_descriptions::kInlineUpdateFlowName,
2976      flag_descriptions::kInlineUpdateFlowDescription, kOsAndroid,
2977      FEATURE_VALUE_TYPE(chrome::android::kInlineUpdateFlow)},
2978     {"update-menu-item-custom-summary",
2979      flag_descriptions::kUpdateMenuItemCustomSummaryName,
2980      flag_descriptions::kUpdateMenuItemCustomSummaryDescription, kOsAndroid,
2981      SINGLE_VALUE_TYPE_AND_VALUE(
2982          switches::kForceShowUpdateMenuItemCustomSummary,
2983          "Custom Summary")},
2984     {"force-show-update-menu-badge", flag_descriptions::kUpdateMenuBadgeName,
2985      flag_descriptions::kUpdateMenuBadgeDescription, kOsAndroid,
2986      SINGLE_VALUE_TYPE(switches::kForceShowUpdateMenuBadge)},
2987     {"set-market-url-for-testing",
2988      flag_descriptions::kSetMarketUrlForTestingName,
2989      flag_descriptions::kSetMarketUrlForTestingDescription, kOsAndroid,
2990      SINGLE_VALUE_TYPE_AND_VALUE(switches::kMarketUrlForTesting,
2991                                  "https://play.google.com/store/apps/"
2992                                  "details?id=com.android.chrome")},
2993 #endif  // OS_ANDROID
2994     {"tls13-hardening-for-local-anchors",
2995      flag_descriptions::kTLS13HardeningForLocalAnchorsName,
2996      flag_descriptions::kTLS13HardeningForLocalAnchorsDescription, kOsAll,
2997      FEATURE_VALUE_TYPE(features::kTLS13HardeningForLocalAnchors)},
2998     {"enable-tls13-early-data", flag_descriptions::kEnableTLS13EarlyDataName,
2999      flag_descriptions::kEnableTLS13EarlyDataDescription, kOsAll,
3000      FEATURE_VALUE_TYPE(net::features::kEnableTLS13EarlyData)},
3001     {"post-quantum-cecpq2", flag_descriptions::kPostQuantumCECPQ2Name,
3002      flag_descriptions::kPostQuantumCECPQ2Description, kOsAll,
3003      FEATURE_VALUE_TYPE(net::features::kPostQuantumCECPQ2)},
3004 #if defined(OS_ANDROID)
3005     {"interest-feed-feedback", flag_descriptions::kInterestFeedFeedbackName,
3006      flag_descriptions::kInterestFeedFeedbackDescription, kOsAndroid,
3007      FEATURE_VALUE_TYPE(feed::kInterestFeedFeedback)},
3008     {"interest-feed-notifications",
3009      flag_descriptions::kInterestFeedNotificationsName,
3010      flag_descriptions::kInterestFeedNotificationsDescription, kOsAndroid,
3011      FEATURE_VALUE_TYPE(feed::kInterestFeedNotifications)},
3012     {"interest-feed-v2", flag_descriptions::kInterestFeedV2Name,
3013      flag_descriptions::kInterestFeedV2Description, kOsAndroid,
3014      FEATURE_VALUE_TYPE(feed::kInterestFeedV2)},
3015     {"report-feed-user-actions", flag_descriptions::kReportFeedUserActionsName,
3016      flag_descriptions::kReportFeedUserActionsDescription, kOsAndroid,
3017      FEATURE_VALUE_TYPE(feed::kReportFeedUserActions)},
3018     {"offlining-recent-pages", flag_descriptions::kOffliningRecentPagesName,
3019      flag_descriptions::kOffliningRecentPagesDescription, kOsAndroid,
3020      FEATURE_VALUE_TYPE(offline_pages::kOffliningRecentPagesFeature)},
3021     {"offline-pages-ct", flag_descriptions::kOfflinePagesCtName,
3022      flag_descriptions::kOfflinePagesCtDescription, kOsAndroid,
3023      FEATURE_VALUE_TYPE(offline_pages::kOfflinePagesCTFeature)},
3024     {"offline-pages-ct-v2", flag_descriptions::kOfflinePagesCtV2Name,
3025      flag_descriptions::kOfflinePagesCtV2Description, kOsAndroid,
3026      FEATURE_VALUE_TYPE(offline_pages::kOfflinePagesCTV2Feature)},
3027     {"offline-pages-ct-suppress-completed-notification",
3028      flag_descriptions::kOfflinePagesCTSuppressNotificationsName,
3029      flag_descriptions::kOfflinePagesCTSuppressNotificationsDescription,
3030      kOsAndroid,
3031      FEATURE_VALUE_TYPE(
3032          offline_pages::kOfflinePagesCTSuppressNotificationsFeature)},
3033 #endif  // OS_ANDROID
3034     {"PasswordImport", flag_descriptions::kPasswordImportName,
3035      flag_descriptions::kPasswordImportDescription, kOsAll,
3036      FEATURE_VALUE_TYPE(password_manager::features::kPasswordImport)},
3037 #if defined(OS_ANDROID)
3038     {"password-editing-android", flag_descriptions::kPasswordEditingAndroidName,
3039      flag_descriptions::kPasswordEditingAndroidDescription, kOsAndroid,
3040      FEATURE_VALUE_TYPE(password_manager::features::kPasswordEditingAndroid)},
3041 #endif  // OS_ANDROID
3042 #if !defined(OS_CHROMEOS)
3043     // TODO(https://crbug.com/1011696): Investigate crash reports and re-enable
3044     // for ChromeOS.
3045     {"enable-force-dark", flag_descriptions::kForceWebContentsDarkModeName,
3046      flag_descriptions::kForceWebContentsDarkModeDescription,
3047      kOsWin | kOsLinux | kOsMac | kOsAndroid,
3048      FEATURE_WITH_PARAMS_VALUE_TYPE(blink::features::kForceWebContentsDarkMode,
3049                                     kForceDarkVariations,
3050                                     "ForceDarkVariations")},
3051 #endif  // !OS_CHROMEOS
3052 #if defined(OS_ANDROID)
3053     {"enable-android-dark-search", flag_descriptions::kAndroidDarkSearchName,
3054      flag_descriptions::kAndroidDarkSearchDescription, kOsAndroid,
3055      FEATURE_VALUE_TYPE(features::kAndroidDarkSearch)},
3056
3057     {"enable-android-night-mode-tab-reparenting",
3058      flag_descriptions::kAndroidNightModeTabReparentingName,
3059      flag_descriptions::kAndroidNightModeTabReparentingDescription, kOsAndroid,
3060      FEATURE_VALUE_TYPE(chrome::android::kAndroidNightModeTabReparenting)},
3061 #endif  // OS_ANDROID
3062     {"enable-experimental-accessibility-language-detection",
3063      flag_descriptions::kExperimentalAccessibilityLanguageDetectionName,
3064      flag_descriptions::kExperimentalAccessibilityLanguageDetectionDescription,
3065      kOsAll,
3066      SINGLE_VALUE_TYPE(
3067          ::switches::kEnableExperimentalAccessibilityLanguageDetection)},
3068     {"enable-experimental-accessibility-language-detection-dynamic",
3069      flag_descriptions::kExperimentalAccessibilityLanguageDetectionDynamicName,
3070      flag_descriptions::
3071          kExperimentalAccessibilityLanguageDetectionDynamicDescription,
3072      kOsAll,
3073      SINGLE_VALUE_TYPE(
3074          ::switches::kEnableExperimentalAccessibilityLanguageDetectionDynamic)},
3075 #if defined(OS_CHROMEOS)
3076     {"enable-encryption-migration",
3077      flag_descriptions::kEnableEncryptionMigrationName,
3078      flag_descriptions::kEnableEncryptionMigrationDescription, kOsCrOS,
3079      ENABLE_DISABLE_VALUE_TYPE(
3080          chromeos::switches::kEnableEncryptionMigration,
3081          chromeos::switches::kDisableEncryptionMigration)},
3082     {"enable-cros-ime-assist-autocorrect",
3083      flag_descriptions::kImeAssistAutocorrectName,
3084      flag_descriptions::kImeAssistAutocorrectDescription, kOsCrOS,
3085      FEATURE_VALUE_TYPE(chromeos::features::kAssistAutoCorrect)},
3086     {"enable-cros-ime-assist-personal-info",
3087      flag_descriptions::kImeAssistPersonalInfoName,
3088      flag_descriptions::kImeAssistPersonalInfoDescription, kOsCrOS,
3089      FEATURE_VALUE_TYPE(chromeos::features::kAssistPersonalInfo)},
3090     {"enable-cros-ime-emoji-suggest-addition",
3091      flag_descriptions::kImeEmojiSuggestAdditionName,
3092      flag_descriptions::kImeEmojiSuggestAdditionDescription, kOsCrOS,
3093      FEATURE_VALUE_TYPE(chromeos::features::kEmojiSuggestAddition)},
3094     {"enable-cros-ime-input-logic-fst",
3095      flag_descriptions::kImeInputLogicFstName,
3096      flag_descriptions::kImeInputLogicFstDescription, kOsCrOS,
3097      FEATURE_VALUE_TYPE(chromeos::features::kImeInputLogicFst)},
3098     {"enable-cros-ime-input-logic-hmm",
3099      flag_descriptions::kImeInputLogicHmmName,
3100      flag_descriptions::kImeInputLogicHmmDescription, kOsCrOS,
3101      FEATURE_VALUE_TYPE(chromeos::features::kImeInputLogicHmm)},
3102     {"enable-cros-ime-input-logic-mozc",
3103      flag_descriptions::kImeInputLogicMozcName,
3104      flag_descriptions::kImeInputLogicMozcDescription, kOsCrOS,
3105      FEATURE_VALUE_TYPE(chromeos::features::kImeInputLogicMozc)},
3106     {"enable-cros-ime-mozc-proto", flag_descriptions::kImeMozcProtoName,
3107      flag_descriptions::kImeMozcProtoDescription, kOsCrOS,
3108      FEATURE_VALUE_TYPE(chromeos::features::kImeMozcProto)},
3109     {"enable-cros-ime-sandbox", flag_descriptions::kImeServiceSandboxName,
3110      flag_descriptions::kImeServiceSandboxDescription, kOsCrOS,
3111      FEATURE_VALUE_TYPE(chromeos::features::kEnableImeSandbox)},
3112     {"enable-cros-virtual-keyboard-bordered-key",
3113      flag_descriptions::kVirtualKeyboardBorderedKeyName,
3114      flag_descriptions::kVirtualKeyboardBorderedKeyDescription, kOsCrOS,
3115      FEATURE_VALUE_TYPE(chromeos::features::kVirtualKeyboardBorderedKey)},
3116     {"enable-cros-virtual-keyboard-floating-resizable",
3117      flag_descriptions::kVirtualKeyboardFloatingResizableName,
3118      flag_descriptions::kVirtualKeyboardFloatingResizableDescription, kOsCrOS,
3119      FEATURE_VALUE_TYPE(chromeos::features::kVirtualKeyboardFloatingResizable)},
3120     {"enable-experimental-accessibility-switch-access",
3121      flag_descriptions::kExperimentalAccessibilitySwitchAccessName,
3122      flag_descriptions::kExperimentalAccessibilitySwitchAccessDescription,
3123      kOsCrOS,
3124      SINGLE_VALUE_TYPE(
3125          ::switches::kEnableExperimentalAccessibilitySwitchAccess)},
3126     {"enable-experimental-accessibility-switch-access-text",
3127      flag_descriptions::kExperimentalAccessibilitySwitchAccessTextName,
3128      flag_descriptions::kExperimentalAccessibilitySwitchAccessTextDescription,
3129      kOsCrOS,
3130      SINGLE_VALUE_TYPE(
3131          ::switches::kEnableExperimentalAccessibilitySwitchAccessText)},
3132     {"enable-experimental-accessibility-chromevox-annotations",
3133      flag_descriptions::kExperimentalAccessibilityChromeVoxAnnotationsName,
3134      flag_descriptions::
3135          kExperimentalAccessibilityChromeVoxAnnotationsDescription,
3136      kOsCrOS,
3137      SINGLE_VALUE_TYPE(
3138          ::switches::kEnableExperimentalAccessibilityChromeVoxAnnotations)},
3139     {"disable-experimental-accessibility-chromevox-language-switching",
3140      flag_descriptions::
3141          kExperimentalAccessibilityChromeVoxLanguageSwitchingName,
3142      flag_descriptions::
3143          kExperimentalAccessibilityChromeVoxLanguageSwitchingDescription,
3144      kOsCrOS,
3145      SINGLE_VALUE_TYPE(
3146          ::switches::
3147              kDisableExperimentalAccessibilityChromeVoxLanguageSwitching)},
3148     {"enable-experimental-accessibility-cursor-colors",
3149      flag_descriptions::kExperimentalAccessibilityCursorColorsName,
3150      flag_descriptions::kExperimentalAccessibilityCursorColorsDescription,
3151      kOsCrOS, FEATURE_VALUE_TYPE(features::kAccessibilityCursorColor)},
3152     {"enable-experimental-kernel-vm-support",
3153      flag_descriptions::kKernelnextVMsName,
3154      flag_descriptions::kKernelnextVMsDescription, kOsCrOS,
3155      FEATURE_VALUE_TYPE(features::kKernelnextVMs)},
3156     {"disable-experimental-accessibility-chromevox-search-menus",
3157      flag_descriptions::kExperimentalAccessibilityChromeVoxSearchMenusName,
3158      flag_descriptions::
3159          kExperimentalAccessibilityChromeVoxSearchMenusDescription,
3160      kOsCrOS,
3161      SINGLE_VALUE_TYPE(
3162          ::switches::kDisableExperimentalAccessibilityChromeVoxSearchMenus)},
3163     {"enable-experimental-accessibility-chromevox-tutorial",
3164      flag_descriptions::kExperimentalAccessibilityChromeVoxTutorialName,
3165      flag_descriptions::kExperimentalAccessibilityChromeVoxTutorialDescription,
3166      kOsCrOS,
3167      SINGLE_VALUE_TYPE(
3168          ::switches::kEnableExperimentalAccessibilityChromeVoxTutorial)},
3169 #endif  // OS_CHROMEOS
3170 #if defined(OS_MACOSX)
3171     {"enable-immersive-fullscreen-toolbar",
3172      flag_descriptions::kImmersiveFullscreenName,
3173      flag_descriptions::kImmersiveFullscreenDescription, kOsMac,
3174      FEATURE_VALUE_TYPE(features::kImmersiveFullscreen)},
3175 #endif  // OS_MACOSX
3176     {"rewrite-leveldb-on-deletion",
3177      flag_descriptions::kRewriteLevelDBOnDeletionName,
3178      flag_descriptions::kRewriteLevelDBOnDeletionDescription, kOsAll,
3179      FEATURE_VALUE_TYPE(leveldb::kLevelDBRewriteFeature)},
3180     {"passive-listener-default",
3181      flag_descriptions::kPassiveEventListenerDefaultName,
3182      flag_descriptions::kPassiveEventListenerDefaultDescription, kOsAll,
3183      MULTI_VALUE_TYPE(kPassiveListenersChoices)},
3184     {"enable-experimental-fling-animation",
3185      flag_descriptions::kExperimentalFlingAnimationName,
3186      flag_descriptions::kExperimentalFlingAnimationDescription, kOsAll,
3187      FEATURE_VALUE_TYPE(features::kExperimentalFlingAnimation)},
3188     {"per-method-can-make-payment-quota",
3189      flag_descriptions::kPerMethodCanMakePaymentQuotaName,
3190      flag_descriptions::kPerMethodCanMakePaymentQuotaDescription, kOsAll,
3191      FEATURE_VALUE_TYPE(
3192          payments::features::kWebPaymentsPerMethodCanMakePaymentQuota)},
3193     {"enable-web-payments-experimental-features",
3194      flag_descriptions::kWebPaymentsExperimentalFeaturesName,
3195      flag_descriptions::kWebPaymentsExperimentalFeaturesDescription, kOsAll,
3196      FEATURE_VALUE_TYPE(payments::features::kWebPaymentsExperimentalFeatures)},
3197     {"enable-web-payments-minimal-ui",
3198      flag_descriptions::kWebPaymentsMinimalUIName,
3199      flag_descriptions::kWebPaymentsMinimalUIDescription, kOsAll,
3200      FEATURE_VALUE_TYPE(features::kWebPaymentsMinimalUI)},
3201     {"enable-debug-for-store-billing",
3202      flag_descriptions::kAppStoreBillingDebugName,
3203      flag_descriptions::kAppStoreBillingDebugDescription, kOsAll,
3204      FEATURE_VALUE_TYPE(payments::features::kAppStoreBillingDebug)},
3205     {"fill-on-account-select", flag_descriptions::kFillOnAccountSelectName,
3206      flag_descriptions::kFillOnAccountSelectDescription, kOsAll,
3207      FEATURE_VALUE_TYPE(password_manager::features::kFillOnAccountSelect)},
3208 #if defined(OS_CHROMEOS)
3209     {"arc-custom-tabs-experiment",
3210      flag_descriptions::kArcCustomTabsExperimentName,
3211      flag_descriptions::kArcCustomTabsExperimentDescription, kOsCrOS,
3212      FEATURE_VALUE_TYPE(arc::kCustomTabsExperimentFeature)},
3213     {"arc-documents-provider", flag_descriptions::kArcDocumentsProviderName,
3214      flag_descriptions::kArcDocumentsProviderDescription, kOsCrOS,
3215      FEATURE_VALUE_TYPE(arc::kEnableDocumentsProviderInFilesAppFeature)},
3216     {"arc-file-picker-experiment",
3217      flag_descriptions::kArcFilePickerExperimentName,
3218      flag_descriptions::kArcFilePickerExperimentDescription, kOsCrOS,
3219      FEATURE_VALUE_TYPE(arc::kFilePickerExperimentFeature)},
3220     {"arc-native-bridge-toggle", flag_descriptions::kArcNativeBridgeToggleName,
3221      flag_descriptions::kArcNativeBridgeToggleDescription, kOsCrOS,
3222      FEATURE_VALUE_TYPE(arc::kNativeBridgeToggleFeature)},
3223     {"arc-print-spooler-experiment",
3224      flag_descriptions::kArcPrintSpoolerExperimentName,
3225      flag_descriptions::kArcPrintSpoolerExperimentDescription, kOsCrOS,
3226      FEATURE_VALUE_TYPE(arc::kPrintSpoolerExperimentFeature)},
3227     {"arc-usb-host", flag_descriptions::kArcUsbHostName,
3228      flag_descriptions::kArcUsbHostDescription, kOsCrOS,
3229      FEATURE_VALUE_TYPE(arc::kUsbHostFeature)},
3230     {"arc-usb-storage-ui", flag_descriptions::kArcUsbStorageUIName,
3231      flag_descriptions::kArcUsbStorageUIDescription, kOsCrOS,
3232      FEATURE_VALUE_TYPE(arc::kUsbStorageUIFeature)},
3233 #endif  // OS_CHROMEOS
3234 #if defined(OS_WIN)
3235     {"enable-winrt-sensor-implementation",
3236      flag_descriptions::kWinrtSensorsImplementationName,
3237      flag_descriptions::kWinrtSensorsImplementationDescription, kOsWin,
3238      FEATURE_VALUE_TYPE(features::kWinrtSensorsImplementation)},
3239 #endif
3240     {"enable-generic-sensor-extra-classes",
3241      flag_descriptions::kEnableGenericSensorExtraClassesName,
3242      flag_descriptions::kEnableGenericSensorExtraClassesDescription, kOsAll,
3243      FEATURE_VALUE_TYPE(features::kGenericSensorExtraClasses)},
3244     {"expensive-background-timer-throttling",
3245      flag_descriptions::kExpensiveBackgroundTimerThrottlingName,
3246      flag_descriptions::kExpensiveBackgroundTimerThrottlingDescription, kOsAll,
3247      FEATURE_VALUE_TYPE(features::kExpensiveBackgroundTimerThrottling)},
3248
3249 #if defined(OS_CHROMEOS)
3250     {ui_devtools::switches::kEnableUiDevTools,
3251      flag_descriptions::kUiDevToolsName,
3252      flag_descriptions::kUiDevToolsDescription, kOsCrOS,
3253      SINGLE_VALUE_TYPE(ui_devtools::switches::kEnableUiDevTools)},
3254 #endif  // defined(OS_CHROMEOS)
3255
3256     {"enable-autofill-credit-card-ablation-experiment",
3257      flag_descriptions::kEnableAutofillCreditCardAblationExperimentDisplayName,
3258      flag_descriptions::kEnableAutofillCreditCardAblationExperimentDescription,
3259      kOsAll,
3260      FEATURE_VALUE_TYPE(
3261          autofill::features::kAutofillCreditCardAblationExperiment)},
3262
3263 #if defined(OS_ANDROID)
3264     {"enable-autofill-manual-fallback",
3265      flag_descriptions::kAutofillManualFallbackAndroidName,
3266      flag_descriptions::kAutofillManualFallbackAndroidDescription, kOsAndroid,
3267      FEATURE_VALUE_TYPE(autofill::features::kAutofillManualFallbackAndroid)},
3268
3269     {"enable-autofill-refresh-style",
3270      flag_descriptions::kEnableAutofillRefreshStyleName,
3271      flag_descriptions::kEnableAutofillRefreshStyleDescription, kOsAndroid,
3272      FEATURE_VALUE_TYPE(autofill::features::kAutofillRefreshStyleAndroid)},
3273 #endif
3274
3275 #if defined(OS_CHROMEOS)
3276     {"enable-touchscreen-calibration",
3277      flag_descriptions::kTouchscreenCalibrationName,
3278      flag_descriptions::kTouchscreenCalibrationDescription, kOsCrOS,
3279      SINGLE_VALUE_TYPE(chromeos::switches::kEnableTouchCalibrationSetting)},
3280 #endif  // defined(OS_CHROMEOS)
3281 #if defined(OS_CHROMEOS)
3282     {"android-files-in-files-app",
3283      flag_descriptions::kShowAndroidFilesInFilesAppName,
3284      flag_descriptions::kShowAndroidFilesInFilesAppDescription, kOsCrOS,
3285      ENABLE_DISABLE_VALUE_TYPE(
3286          chromeos::switches::kShowAndroidFilesInFilesApp,
3287          chromeos::switches::kHideAndroidFilesInFilesApp)},
3288     {"camera-system-web-app", flag_descriptions::kCameraSystemWebAppName,
3289      flag_descriptions::kCameraSystemWebAppDescription, kOsCrOS,
3290      FEATURE_VALUE_TYPE(chromeos::features::kCameraSystemWebApp)},
3291     {"crostini-gpu-support", flag_descriptions::kCrostiniGpuSupportName,
3292      flag_descriptions::kCrostiniGpuSupportDescription, kOsCrOS,
3293      FEATURE_VALUE_TYPE(chromeos::features::kCrostiniGpuSupport)},
3294     {"crostini-usb-allow-unsupported",
3295      flag_descriptions::kCrostiniUsbAllowUnsupportedName,
3296      flag_descriptions::kCrostiniUsbAllowUnsupportedDescription, kOsCrOS,
3297      FEATURE_VALUE_TYPE(chromeos::features::kCrostiniUsbAllowUnsupported)},
3298     {"files-ng", flag_descriptions::kFilesNGName,
3299      flag_descriptions::kFilesNGDescription, kOsCrOS,
3300      FEATURE_VALUE_TYPE(chromeos::features::kFilesNG)},
3301     {"files-transfer-details", flag_descriptions::kFilesTransferDetailsName,
3302      flag_descriptions::kFilesTransferDetailsDescription, kOsCrOS,
3303      FEATURE_VALUE_TYPE(chromeos::features::kFilesTransferDetails)},
3304     {"files-zip-no-nacl", flag_descriptions::kFilesZipNoNaClName,
3305      flag_descriptions::kFilesZipNoNaClDescription, kOsCrOS,
3306      FEATURE_VALUE_TYPE(chromeos::features::kFilesZipNoNaCl)},
3307     {"files-unified-media-view", flag_descriptions::kUnifiedMediaViewName,
3308      flag_descriptions::kUnifiedMediaViewDescription, kOsCrOS,
3309      FEATURE_VALUE_TYPE(chromeos::features::kUnifiedMediaView)},
3310     {"rar2fs", flag_descriptions::kRar2FsName,
3311      flag_descriptions::kRar2FsDescription, kOsCrOS,
3312      FEATURE_VALUE_TYPE(chromeos::features::kRar2Fs)},
3313     {"smbfs-file-shares", flag_descriptions::kSmbfsFileSharesName,
3314      flag_descriptions::kSmbfsFileSharesName, kOsCrOS,
3315      FEATURE_VALUE_TYPE(features::kSmbFs)},
3316 #endif  // OS_CHROMEOS
3317
3318 #if defined(OS_WIN)
3319     {"gdi-text-printing", flag_descriptions::kGdiTextPrinting,
3320      flag_descriptions::kGdiTextPrintingDescription, kOsWin,
3321      FEATURE_VALUE_TYPE(features::kGdiTextPrinting)},
3322 #endif  // defined(OS_WIN)
3323
3324 #if defined(OS_WIN)
3325     {"new-usb-backend", flag_descriptions::kNewUsbBackendName,
3326      flag_descriptions::kNewUsbBackendDescription, kOsWin,
3327      FEATURE_VALUE_TYPE(device::kNewUsbBackend)},
3328 #endif  // defined(OS_WIN)
3329
3330 #if defined(OS_ANDROID)
3331     {"omnibox-adaptive-suggestions-count",
3332      flag_descriptions::kOmniboxAdaptiveSuggestionsCountName,
3333      flag_descriptions::kOmniboxAdaptiveSuggestionsCountDescription, kOsAndroid,
3334      FEATURE_VALUE_TYPE(omnibox::kAdaptiveSuggestionsCount)},
3335     {"omnibox-assistant-voice-search",
3336      flag_descriptions::kOmniboxAssistantVoiceSearchName,
3337      flag_descriptions::kOmniboxAssistantVoiceSearchDescription, kOsAndroid,
3338      FEATURE_WITH_PARAMS_VALUE_TYPE(omnibox::kOmniboxAssistantVoiceSearch,
3339                                     kOmniboxAssistantVoiceSearchVariations,
3340                                     "OmniboxAssistantVoiceSearch")},
3341     {"omnibox-compact-suggestions",
3342      flag_descriptions::kOmniboxCompactSuggestionsName,
3343      flag_descriptions::kOmniboxCompactSuggestionsDescription, kOsAndroid,
3344      FEATURE_WITH_PARAMS_VALUE_TYPE(omnibox::kCompactSuggestions,
3345                                     kCompactSuggestionsVariations,
3346                                     "OmniboxCompactSuggestions")},
3347     {"omnibox-deferred-keyboard-popup",
3348      flag_descriptions::kOmniboxDeferredKeyboardPopupName,
3349      flag_descriptions::kOmniboxDeferredKeyboardPopupDescription, kOsAndroid,
3350      FEATURE_VALUE_TYPE(omnibox::kDeferredKeyboardPopup)},
3351     {"omnibox-search-engine-logo",
3352      flag_descriptions::kOmniboxSearchEngineLogoName,
3353      flag_descriptions::kOmniboxSearchEngineLogoDescription, kOsAndroid,
3354      FEATURE_WITH_PARAMS_VALUE_TYPE(omnibox::kOmniboxSearchEngineLogo,
3355                                     kOmniboxSearchEngineLogoFeatureVariations,
3356                                     "OmniboxSearchEngineLogo")},
3357     {"omnibox-search-ready-incognito",
3358      flag_descriptions::kOmniboxSearchReadyIncognitoName,
3359      flag_descriptions::kOmniboxSearchReadyIncognitoDescription, kOsAndroid,
3360      FEATURE_VALUE_TYPE(omnibox::kOmniboxSearchReadyIncognito)},
3361     {"omnibox-suggestions-recycler-view",
3362      flag_descriptions::kOmniboxSuggestionsRecyclerViewName,
3363      flag_descriptions::kOmniboxSuggestionsRecyclerViewDescription, kOsAndroid,
3364      FEATURE_VALUE_TYPE(omnibox::kOmniboxSuggestionsRecyclerView)},
3365     {"omnibox-suggestions-wrap-around",
3366      flag_descriptions::kOmniboxSuggestionsWrapAroundName,
3367      flag_descriptions::kOmniboxSuggestionsWrapAroundDescription, kOsAndroid,
3368      FEATURE_VALUE_TYPE(omnibox::kOmniboxSuggestionsWrapAround)},
3369     {"omnibox-tab-switch-suggestions",
3370      flag_descriptions::kOmniboxTabSwitchSuggestionsName,
3371      flag_descriptions::kOmniboxTabSwitchSuggestionsDescription, kOsAndroid,
3372      FEATURE_VALUE_TYPE(omnibox::kOmniboxTabSwitchSuggestions)},
3373 #endif  // defined(OS_ANDROID)
3374
3375     {"omnibox-on-device-head-suggestions-incognito",
3376      flag_descriptions::kOmniboxOnDeviceHeadSuggestionsIncognitoName,
3377      flag_descriptions::kOmniboxOnDeviceHeadSuggestionsIncognitoDescription,
3378      kOsAll,
3379      FEATURE_WITH_PARAMS_VALUE_TYPE(
3380          omnibox::kOnDeviceHeadProviderIncognito,
3381          kOmniboxOnDeviceHeadSuggestIncognitoExperimentVariations,
3382          "OmniboxOnDeviceHeadSuggestIncognito")},
3383
3384     {"omnibox-on-device-head-suggestions-non-incognito",
3385      flag_descriptions::kOmniboxOnDeviceHeadSuggestionsNonIncognitoName,
3386      flag_descriptions::kOmniboxOnDeviceHeadSuggestionsNonIncognitoDescription,
3387      kOsAll,
3388      FEATURE_WITH_PARAMS_VALUE_TYPE(
3389          omnibox::kOnDeviceHeadProviderNonIncognito,
3390          kOmniboxOnDeviceHeadSuggestNonIncognitoExperimentVariations,
3391          "OmniboxOnDeviceHeadSuggestNonIncognito")},
3392
3393     {"omnibox-on-focus-suggestions",
3394      flag_descriptions::kOmniboxOnFocusSuggestionsName,
3395      flag_descriptions::kOmniboxOnFocusSuggestionsDescription, kOsAll,
3396      FEATURE_WITH_PARAMS_VALUE_TYPE(omnibox::kOnFocusSuggestions,
3397                                     kOmniboxOnFocusSuggestionsVariations,
3398                                     "OmniboxBundledExperimentV1")},
3399
3400     {"omnibox-on-focus-suggestions-contextual-web",
3401      flag_descriptions::kOmniboxOnFocusSuggestionsContextualWebName,
3402      flag_descriptions::kOmniboxOnFocusSuggestionsContextualWebDescription,
3403      kOsAll, FEATURE_VALUE_TYPE(omnibox::kOnFocusSuggestionsContextualWeb)},
3404
3405     {"omnibox-preserve-default-match-against-async-update",
3406      flag_descriptions::kOmniboxPreserveDefaultMatchAgainstAsyncUpdateName,
3407      flag_descriptions::
3408          kOmniboxPreserveDefaultMatchAgainstAsyncUpdateDescription,
3409      kOsAll,
3410      FEATURE_VALUE_TYPE(
3411          omnibox::kOmniboxPreserveDefaultMatchAgainstAsyncUpdate)},
3412
3413     {"omnibox-local-entity-suggestions",
3414      flag_descriptions::kOmniboxLocalEntitySuggestionsName,
3415      flag_descriptions::kOmniboxLocalEntitySuggestionsDescription, kOsAll,
3416      FEATURE_VALUE_TYPE(omnibox::kOmniboxLocalEntitySuggestions)},
3417
3418     {"omnibox-experimental-suggest-scoring",
3419      flag_descriptions::kOmniboxExperimentalSuggestScoringName,
3420      flag_descriptions::kOmniboxExperimentalSuggestScoringDescription, kOsAll,
3421      FEATURE_VALUE_TYPE(omnibox::kOmniboxExperimentalSuggestScoring)},
3422
3423     {"omnibox-history-quick-provider-allow-but-do-not-score-midword-terms",
3424      flag_descriptions::
3425          kOmniboxHistoryQuickProviderAllowButDoNotScoreMidwordTermsName,
3426      flag_descriptions::
3427          kOmniboxHistoryQuickProviderAllowButDoNotScoreMidwordTermsDescription,
3428      kOsAll,
3429      FEATURE_VALUE_TYPE(
3430          omnibox::kHistoryQuickProviderAllowButDoNotScoreMidwordTerms)},
3431     {"omnibox-history-quick-provider-allow-midword-continuations",
3432      flag_descriptions::
3433          kOmniboxHistoryQuickProviderAllowMidwordContinuationsName,
3434      flag_descriptions::
3435          kOmniboxHistoryQuickProviderAllowMidwordContinuationsDescription,
3436      kOsAll,
3437      FEATURE_VALUE_TYPE(
3438          omnibox::kHistoryQuickProviderAllowMidwordContinuations)},
3439
3440 #if defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN)
3441     {"omnibox-experimental-keyword-mode",
3442      flag_descriptions::kOmniboxExperimentalKeywordModeName,
3443      flag_descriptions::kOmniboxExperimentalKeywordModeDescription, kOsDesktop,
3444      FEATURE_VALUE_TYPE(omnibox::kExperimentalKeywordMode)},
3445     {"omnibox-loose-max-limit-on-dedicated-rows",
3446      flag_descriptions::kOmniboxLooseMaxLimitOnDedicatedRowsName,
3447      flag_descriptions::kOmniboxLooseMaxLimitOnDedicatedRowsDescription,
3448      kOsDesktop,
3449      FEATURE_VALUE_TYPE(omnibox::kOmniboxLooseMaxLimitOnDedicatedRows)},
3450     {"omnibox-reverse-answers", flag_descriptions::kOmniboxReverseAnswersName,
3451      flag_descriptions::kOmniboxReverseAnswersDescription, kOsDesktop,
3452      FEATURE_VALUE_TYPE(omnibox::kOmniboxReverseAnswers)},
3453     {"omnibox-short-bookmark-suggestions",
3454      flag_descriptions::kOmniboxShortBookmarkSuggestionsName,
3455      flag_descriptions::kOmniboxShortBookmarkSuggestionsDescription, kOsDesktop,
3456      FEATURE_VALUE_TYPE(omnibox::kOmniboxShortBookmarkSuggestions)},
3457     {"omnibox-tab-switch-suggestions",
3458      flag_descriptions::kOmniboxTabSwitchSuggestionsName,
3459      flag_descriptions::kOmniboxTabSwitchSuggestionsDescription, kOsDesktop,
3460      FEATURE_VALUE_TYPE(omnibox::kOmniboxTabSwitchSuggestions)},
3461     {"omnibox-tab-switch-suggestions-dedicated-row",
3462      flag_descriptions::kOmniboxTabSwitchSuggestionsDedicatedRowName,
3463      flag_descriptions::kOmniboxTabSwitchSuggestionsDedicatedRowDescription,
3464      kOsDesktop,
3465      FEATURE_VALUE_TYPE(omnibox::kOmniboxTabSwitchSuggestionsDedicatedRow)},
3466     {"omnibox-pedal-suggestions",
3467      flag_descriptions::kOmniboxPedalSuggestionsName,
3468      flag_descriptions::kOmniboxPedalSuggestionsDescription, kOsDesktop,
3469      FEATURE_VALUE_TYPE(omnibox::kOmniboxPedalSuggestions)},
3470     {"omnibox-suggestion-button-row",
3471      flag_descriptions::kOmniboxSuggestionButtonRowName,
3472      flag_descriptions::kOmniboxSuggestionButtonRowDescription, kOsDesktop,
3473      FEATURE_VALUE_TYPE(omnibox::kOmniboxSuggestionButtonRow)},
3474     {"omnibox-drive-suggestions",
3475      flag_descriptions::kOmniboxDriveSuggestionsName,
3476      flag_descriptions::kOmniboxDriveSuggestionsDescriptions, kOsDesktop,
3477      FEATURE_WITH_PARAMS_VALUE_TYPE(omnibox::kDocumentProvider,
3478                                     kOmniboxDocumentProviderVariations,
3479                                     "OmniboxBundledExperimentV1")},
3480     {"omnibox-autocomplete-titles",
3481      flag_descriptions::kOmniboxAutocompleteTitlesName,
3482      flag_descriptions::kOmniboxAutocompleteTitlesDescription, kOsDesktop,
3483      FEATURE_VALUE_TYPE(omnibox::kAutocompleteTitles)},
3484     {"omnibox-rich-autocompletion",
3485      flag_descriptions::kOmniboxRichAutocompletionName,
3486      flag_descriptions::kOmniboxRichAutocompletionDescription, kOsDesktop,
3487      FEATURE_WITH_PARAMS_VALUE_TYPE(omnibox::kRichAutocompletion,
3488                                     kOmniboxRichAutocompletionVariations,
3489                                     "OmniboxBundledExperimentV1")},
3490 #endif  // defined(OS_LINUX) || defined(OS_MACOSX) || defined(OS_WIN)
3491
3492     {"enable-speculative-service-worker-start-on-query-input",
3493      flag_descriptions::kSpeculativeServiceWorkerStartOnQueryInputName,
3494      flag_descriptions::kSpeculativeServiceWorkerStartOnQueryInputDescription,
3495      kOsAll,
3496      FEATURE_VALUE_TYPE(omnibox::kSpeculativeServiceWorkerStartOnQueryInput)},
3497
3498     {"enable-service-worker-on-ui", flag_descriptions::kServiceWorkerOnUIName,
3499      flag_descriptions::kServiceWorkerOnUIDescription, kOsAll,
3500      FEATURE_VALUE_TYPE(features::kServiceWorkerOnUI)},
3501
3502 #if defined(OS_CHROMEOS)
3503     {"scheduler-configuration", flag_descriptions::kSchedulerConfigurationName,
3504      flag_descriptions::kSchedulerConfigurationDescription, kOsCrOS,
3505      MULTI_VALUE_TYPE(kSchedulerConfigurationChoices)},
3506 #endif  // OS_CHROMEOS
3507
3508 #if defined(OS_ANDROID)
3509     {"enable-command-line-on-non-rooted-devices",
3510      flag_descriptions::kEnableCommandLineOnNonRootedName,
3511      flag_descriptions::kEnableCommandLineOnNoRootedDescription, kOsAndroid,
3512      FEATURE_VALUE_TYPE(chrome::android::kCommandLineOnNonRooted)},
3513 #endif  // OS_ANDROID
3514
3515 #if defined(OS_ANDROID)
3516     {"enable-revamped-context-menu",
3517      flag_descriptions::kEnableRevampedContextMenuName,
3518      flag_descriptions::kEnableRevampedContextMenuDescription, kOsAndroid,
3519      FEATURE_VALUE_TYPE(chrome::android::kRevampedContextMenu)},
3520 #endif  // OS_ANDROID
3521
3522     {"omnibox-display-title-for-current-url",
3523      flag_descriptions::kOmniboxDisplayTitleForCurrentUrlName,
3524      flag_descriptions::kOmniboxDisplayTitleForCurrentUrlDescription, kOsAll,
3525      FEATURE_VALUE_TYPE(omnibox::kDisplayTitleForCurrentUrl)},
3526
3527     {"force-color-profile", flag_descriptions::kForceColorProfileName,
3528      flag_descriptions::kForceColorProfileDescription, kOsAll,
3529      MULTI_VALUE_TYPE(kForceColorProfileChoices)},
3530
3531     {"force-effective-connection-type",
3532      flag_descriptions::kForceEffectiveConnectionTypeName,
3533      flag_descriptions::kForceEffectiveConnectionTypeDescription, kOsAll,
3534      MULTI_VALUE_TYPE(kForceEffectiveConnectionTypeChoices)},
3535
3536     {"forced-colors", flag_descriptions::kForcedColorsName,
3537      flag_descriptions::kForcedColorsDescription, kOsAll,
3538      FEATURE_VALUE_TYPE(features::kForcedColors)},
3539
3540 #if defined(OS_ANDROID)
3541     {"dynamic-color-gamut", flag_descriptions::kDynamicColorGamutName,
3542      flag_descriptions::kDynamicColorGamutDescription, kOsAndroid,
3543      FEATURE_VALUE_TYPE(features::kDynamicColorGamut)},
3544 #endif
3545
3546     {"memlog", flag_descriptions::kMemlogName,
3547      flag_descriptions::kMemlogDescription, kOsAll,
3548      MULTI_VALUE_TYPE(kMemlogModeChoices)},
3549
3550     {"memlog-sampling-rate", flag_descriptions::kMemlogSamplingRateName,
3551      flag_descriptions::kMemlogSamplingRateDescription, kOsAll,
3552      MULTI_VALUE_TYPE(kMemlogSamplingRateChoices)},
3553
3554     {"memlog-stack-mode", flag_descriptions::kMemlogStackModeName,
3555      flag_descriptions::kMemlogStackModeDescription, kOsAll,
3556      MULTI_VALUE_TYPE(kMemlogStackModeChoices)},
3557
3558     {"omnibox-ui-hide-steady-state-url-scheme",
3559      flag_descriptions::kOmniboxUIHideSteadyStateUrlSchemeName,
3560      flag_descriptions::kOmniboxUIHideSteadyStateUrlSchemeDescription, kOsAll,
3561      FEATURE_VALUE_TYPE(omnibox::kHideSteadyStateUrlScheme)},
3562
3563     {"omnibox-ui-hide-steady-state-url-trivial-subdomains",
3564      flag_descriptions::kOmniboxUIHideSteadyStateUrlTrivialSubdomainsName,
3565      flag_descriptions::
3566          kOmniboxUIHideSteadyStateUrlTrivialSubdomainsDescription,
3567      kOsAll, FEATURE_VALUE_TYPE(omnibox::kHideSteadyStateUrlTrivialSubdomains)},
3568
3569     {"omnibox-ui-reveal-steady-state-url-path-query-and-ref-on-hover",
3570      flag_descriptions::
3571          kOmniboxUIRevealSteadyStateUrlPathQueryAndRefOnHoverName,
3572      flag_descriptions::
3573          kOmniboxUIRevealSteadyStateUrlPathQueryAndRefOnHoverDescription,
3574      kOsDesktop,
3575      FEATURE_VALUE_TYPE(omnibox::kRevealSteadyStateUrlPathQueryAndRefOnHover)},
3576
3577     {"omnibox-ui-hide-steady-state-url-path-query-and-ref-on-interaction",
3578      flag_descriptions::
3579          kOmniboxUIHideSteadyStateUrlPathQueryAndRefOnInteractionName,
3580      flag_descriptions::
3581          kOmniboxUIHideSteadyStateUrlPathQueryAndRefOnInteractionDescription,
3582      kOsDesktop,
3583      FEATURE_VALUE_TYPE(
3584          omnibox::kHideSteadyStateUrlPathQueryAndRefOnInteraction)},
3585
3586     {"omnibox-ui-max-autocomplete-matches",
3587      flag_descriptions::kOmniboxUIMaxAutocompleteMatchesName,
3588      flag_descriptions::kOmniboxUIMaxAutocompleteMatchesDescription,
3589      kOsDesktop | kOsAndroid,
3590      FEATURE_WITH_PARAMS_VALUE_TYPE(
3591          omnibox::kUIExperimentMaxAutocompleteMatches,
3592          kOmniboxUIMaxAutocompleteMatchesVariations,
3593          "OmniboxBundledExperimentV1")},
3594
3595     {"omnibox-max-url-matches", flag_descriptions::kOmniboxMaxURLMatchesName,
3596      flag_descriptions::kOmniboxMaxURLMatchesDescription, kOsAll,
3597      FEATURE_WITH_PARAMS_VALUE_TYPE(omnibox::kOmniboxMaxURLMatches,
3598                                     kOmniboxMaxURLMatchesVariations,
3599                                     "OmniboxMaxURLMatchesVariations")},
3600
3601     {"omnibox-ui-swap-title-and-url",
3602      flag_descriptions::kOmniboxUISwapTitleAndUrlName,
3603      flag_descriptions::kOmniboxUISwapTitleAndUrlDescription, kOsDesktop,
3604      FEATURE_VALUE_TYPE(omnibox::kUIExperimentSwapTitleAndUrl)},
3605
3606     {"omnibox-zero-suggestions-on-ntp",
3607      flag_descriptions::kOmniboxZeroSuggestionsOnNTPName,
3608      flag_descriptions::kOmniboxZeroSuggestionsOnNTPDescription,
3609      kOsDesktop | kOsAndroid,
3610      FEATURE_VALUE_TYPE(omnibox::kZeroSuggestionsOnNTP)},
3611
3612     {"omnibox-zero-suggestions-on-ntp-realbox",
3613      flag_descriptions::kOmniboxZeroSuggestionsOnNTPRealboxName,
3614      flag_descriptions::kOmniboxZeroSuggestionsOnNTPRealboxDescription,
3615      kOsDesktop, FEATURE_VALUE_TYPE(omnibox::kZeroSuggestionsOnNTPRealbox)},
3616
3617     {"omnibox-zero-suggestions-on-serp",
3618      flag_descriptions::kOmniboxZeroSuggestionsOnSERPName,
3619      flag_descriptions::kOmniboxZeroSuggestionsOnSERPDescription, kOsAll,
3620      FEATURE_VALUE_TYPE(omnibox::kZeroSuggestionsOnSERP)},
3621
3622     {"omnibox-disable-instant-extended-limit",
3623      flag_descriptions::kOmniboxDisableInstantExtendedLimitName,
3624      flag_descriptions::kOmniboxDisableInstantExtendedLimitDescription, kOsAll,
3625      FEATURE_VALUE_TYPE(omnibox::kOmniboxDisableInstantExtendedLimit)},
3626
3627 #if defined(OS_CHROMEOS)
3628     {"handwriting-gesture", flag_descriptions::kHandwritingGestureName,
3629      flag_descriptions::kHandwritingGestureDescription, kOsCrOS,
3630      FEATURE_VALUE_TYPE(features::kHandwritingGesture)},
3631 #endif  // OS_CHROMEOS
3632
3633 #if BUILDFLAG(ENABLE_EXTENSIONS)
3634     {"cors-for-content-scripts", flag_descriptions::kCorsForContentScriptsName,
3635      flag_descriptions::kCorsForContentScriptsDescription, kOsDesktop,
3636      FEATURE_VALUE_TYPE(network::features::kCorbAllowlistAlsoAppliesToOorCors)},
3637
3638     {"force-empty-CORB-and-CORS-allowlist",
3639      flag_descriptions::kForceEmptyCorbAndCorsAllowlistName,
3640      flag_descriptions::kForceEmptyCorbAndCorsAllowlistDescription, kOsDesktop,
3641      SINGLE_VALUE_TYPE(extensions::switches::kForceEmptyCorbAllowlist)},
3642 #endif
3643
3644     {"cross-origin-opener-policy",
3645      flag_descriptions::kCrossOriginOpenerPolicyName,
3646      flag_descriptions::kCrossOriginOpenerPolicyDescription, kOsAll,
3647      FEATURE_VALUE_TYPE(network::features::kCrossOriginOpenerPolicy)},
3648
3649     {"cross-origin-opener-policy-reporting",
3650      flag_descriptions::kCrossOriginOpenerPolicyReportingName,
3651      flag_descriptions::kCrossOriginOpenerPolicyReportingDescription, kOsAll,
3652      FEATURE_VALUE_TYPE(network::features::kCrossOriginOpenerPolicyReporting)},
3653
3654     {"cross-origin-opener-policy-access-reporting",
3655      flag_descriptions::kCrossOriginOpenerPolicyAccessReportingName,
3656      flag_descriptions::kCrossOriginOpenerPolicyAccessReportingDescription,
3657      kOsAll,
3658      FEATURE_VALUE_TYPE(
3659          network::features::kCrossOriginOpenerPolicyAccessReporting)},
3660
3661     {"disable-keepalive-fetch", flag_descriptions::kDisableKeepaliveFetchName,
3662      flag_descriptions::kDisableKeepaliveFetchDescription, kOsAll,
3663      FEATURE_VALUE_TYPE(network::features::kDisableKeepaliveFetch)},
3664
3665     {"delay-async-script-execution",
3666      flag_descriptions::kDelayAsyncScriptExecutionName,
3667      flag_descriptions::kDelayAsyncScriptExecutionDescription, kOsAll,
3668      FEATURE_WITH_PARAMS_VALUE_TYPE(blink::features::kDelayAsyncScriptExecution,
3669                                     kDelayAsyncScriptExecutionFeatureVariations,
3670                                     "DelayAsyncScriptExecution")},
3671
3672     {"prefetch-privacy-changes", flag_descriptions::kPrefetchPrivacyChangesName,
3673      flag_descriptions::kPrefetchPrivacyChangesDescription, kOsAll,
3674      FEATURE_VALUE_TYPE(blink::features::kPrefetchPrivacyChanges)},
3675
3676     {"intensive-wake-up-throttling",
3677      flag_descriptions::kIntensiveWakeUpThrottlingName,
3678      flag_descriptions::kIntensiveWakeUpThrottlingDescription, kOsAll,
3679      FEATURE_VALUE_TYPE(blink::features::kIntensiveWakeUpThrottling)},
3680
3681 #if defined(OS_ANDROID)
3682     {"omnibox-spare-renderer", flag_descriptions::kOmniboxSpareRendererName,
3683      flag_descriptions::kOmniboxSpareRendererDescription, kOsAndroid,
3684      FEATURE_VALUE_TYPE(chrome::android::kOmniboxSpareRenderer)},
3685 #endif
3686
3687 #if defined(OS_CHROMEOS)
3688     {"double-tap-to-zoom-in-tablet-mode",
3689      flag_descriptions::kDoubleTapToZoomInTabletModeName,
3690      flag_descriptions::kDoubleTapToZoomInTabletModeDescription, kOsCrOS,
3691      FEATURE_VALUE_TYPE(features::kDoubleTapToZoomInTabletMode)},
3692 #endif  // defined(OS_CHROMEOS)
3693
3694     {"tab-groups", flag_descriptions::kTabGroupsName,
3695      flag_descriptions::kTabGroupsDescription, kOsDesktop,
3696      FEATURE_VALUE_TYPE(features::kTabGroups)},
3697
3698     {"tab-groups-collapse", flag_descriptions::kTabGroupsCollapseName,
3699      flag_descriptions::kTabGroupsCollapseDescription, kOsDesktop,
3700      FEATURE_VALUE_TYPE(features::kTabGroupsCollapse)},
3701
3702     {"tab-groups-feedback", flag_descriptions::kTabGroupsFeedbackName,
3703      flag_descriptions::kTabGroupsFeedbackDescription, kOsDesktop,
3704      FEATURE_VALUE_TYPE(features::kTabGroupsFeedback)},
3705
3706     {"new-tabstrip-animation", flag_descriptions::kNewTabstripAnimationName,
3707      flag_descriptions::kNewTabstripAnimationDescription, kOsDesktop,
3708      FEATURE_VALUE_TYPE(features::kNewTabstripAnimation)},
3709
3710     {"scrollable-tabstrip", flag_descriptions::kScrollableTabStripName,
3711      flag_descriptions::kScrollableTabStripDescription, kOsDesktop,
3712      FEATURE_VALUE_TYPE(features::kScrollableTabStrip)},
3713
3714     {"tab-outlines-in-low-contrast-themes",
3715      flag_descriptions::kTabOutlinesInLowContrastThemesName,
3716      flag_descriptions::kTabOutlinesInLowContrastThemesDescription, kOsDesktop,
3717      FEATURE_VALUE_TYPE(features::kTabOutlinesInLowContrastThemes)},
3718
3719     {"prominent-dark-mode-active-tab-title",
3720      flag_descriptions::kProminentDarkModeActiveTabTitleName,
3721      flag_descriptions::kProminentDarkModeActiveTabTitleDescription, kOsDesktop,
3722      FEATURE_VALUE_TYPE(features::kProminentDarkModeActiveTabTitle)},
3723
3724 #if defined(OS_ANDROID)
3725     {"enable-reader-mode-in-cct", flag_descriptions::kReaderModeInCCTName,
3726      flag_descriptions::kReaderModeInCCTDescription, kOsAndroid,
3727      FEATURE_VALUE_TYPE(chrome::android::kReaderModeInCCT)},
3728 #endif  // !defined(OS_ANDROID)
3729
3730     {"click-to-open-pdf", flag_descriptions::kClickToOpenPDFName,
3731      flag_descriptions::kClickToOpenPDFDescription, kOsAll,
3732      FEATURE_VALUE_TYPE(features::kClickToOpenPDFPlaceholder)},
3733
3734 #if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
3735     {"direct-manipulation-stylus",
3736      flag_descriptions::kDirectManipulationStylusName,
3737      flag_descriptions::kDirectManipulationStylusDescription,
3738      kOsWin | kOsMac | kOsLinux,
3739      FEATURE_VALUE_TYPE(features::kDirectManipulationStylus)},
3740 #endif  // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
3741
3742 #if !defined(OS_ANDROID)
3743     {"ntp-confirm-suggestion-removals",
3744      flag_descriptions::kNtpConfirmSuggestionRemovalsName,
3745      flag_descriptions::kNtpConfirmSuggestionRemovalsDescription, kOsDesktop,
3746      FEATURE_VALUE_TYPE(ntp_features::kConfirmSuggestionRemovals)},
3747
3748     {"ntp-dismiss-promos", flag_descriptions::kNtpDismissPromosName,
3749      flag_descriptions::kNtpDismissPromosDescription, kOsDesktop,
3750      FEATURE_VALUE_TYPE(ntp_features::kDismissPromos)},
3751
3752     {"ntp-iframe-one-google-bar", flag_descriptions::kNtpIframeOneGoogleBarName,
3753      flag_descriptions::kNtpIframeOneGoogleBarDescription, kOsDesktop,
3754      FEATURE_VALUE_TYPE(ntp_features::kIframeOneGoogleBar)},
3755
3756     {"ntp-one-google-bar-modal-overlays",
3757      flag_descriptions::kNtpOneGoogleBarModalOverlaysName,
3758      flag_descriptions::kNtpOneGoogleBarModalOverlaysDescription, kOsDesktop,
3759      FEATURE_VALUE_TYPE(ntp_features::kOneGoogleBarModalOverlays)},
3760
3761     {"ntp-realbox", flag_descriptions::kNtpRealboxName,
3762      flag_descriptions::kNtpRealboxDescription, kOsDesktop,
3763      FEATURE_VALUE_TYPE(ntp_features::kRealbox)},
3764
3765     {"ntp-realbox-match-omnibox-theme",
3766      flag_descriptions::kNtpRealboxMatchOmniboxThemeName,
3767      flag_descriptions::kNtpRealboxMatchOmniboxThemeDescription, kOsDesktop,
3768      FEATURE_VALUE_TYPE(ntp_features::kRealboxMatchOmniboxTheme)},
3769
3770     {"ntp-webui", flag_descriptions::kNtpWebUIName,
3771      flag_descriptions::kNtpWebUIDescription, kOsDesktop,
3772      FEATURE_VALUE_TYPE(ntp_features::kWebUI)},
3773 #endif  // !defined(OS_ANDROID)
3774
3775 #if defined(DCHECK_IS_CONFIGURABLE)
3776     {"dcheck-is-fatal", flag_descriptions::kDcheckIsFatalName,
3777      flag_descriptions::kDcheckIsFatalDescription, kOsWin,
3778      FEATURE_VALUE_TYPE(base::kDCheckIsFatalFeature)},
3779 #endif  // defined(DCHECK_IS_CONFIGURABLE)
3780
3781     {"enable-pixel-canvas-recording",
3782      flag_descriptions::kEnablePixelCanvasRecordingName,
3783      flag_descriptions::kEnablePixelCanvasRecordingDescription, kOsDesktop,
3784      FEATURE_VALUE_TYPE(features::kEnablePixelCanvasRecording)},
3785
3786     {"enable-parallel-downloading", flag_descriptions::kParallelDownloadingName,
3787      flag_descriptions::kParallelDownloadingDescription, kOsAll,
3788      FEATURE_VALUE_TYPE(download::features::kParallelDownloading)},
3789
3790     {"enable-pointer-lock-options", flag_descriptions::kPointerLockOptionsName,
3791      flag_descriptions::kPointerLockOptionsDescription, kOsDesktop,
3792      FEATURE_VALUE_TYPE(features::kPointerLockOptions)},
3793
3794 #if defined(OS_ANDROID)
3795     {"enable-async-dns", flag_descriptions::kAsyncDnsName,
3796      flag_descriptions::kAsyncDnsDescription, kOsAndroid,
3797      FEATURE_VALUE_TYPE(features::kAsyncDns)},
3798 #endif  // defined(OS_ANDROID)
3799
3800 #if defined(OS_ANDROID)
3801     {"download-auto-resumption-native",
3802      flag_descriptions::kDownloadAutoResumptionNativeName,
3803      flag_descriptions::kDownloadAutoResumptionNativeDescription, kOsAndroid,
3804      FEATURE_VALUE_TYPE(download::features::kDownloadAutoResumptionNative)},
3805
3806     {"download-later", flag_descriptions::kDownloadLaterName,
3807      flag_descriptions::kDownloadLaterDescription, kOsAndroid,
3808      FEATURE_VALUE_TYPE(download::features::kDownloadLater)},
3809
3810     {"download-later-debug-on-wifi",
3811      flag_descriptions::kDownloadLaterDebugOnWifiName,
3812      flag_descriptions::kDownloadLaterDebugOnWifiNameDescription, kOsAndroid,
3813      SINGLE_VALUE_TYPE(download::switches::kDownloadLaterDebugOnWifi)},
3814 #endif
3815
3816     {"enable-new-download-backend",
3817      flag_descriptions::kEnableNewDownloadBackendName,
3818      flag_descriptions::kEnableNewDownloadBackendDescription, kOsAll,
3819      FEATURE_VALUE_TYPE(
3820          download::features::kUseDownloadOfflineContentProvider)},
3821
3822 #if defined(OS_ANDROID)
3823     {"update-notification-scheduling-integration",
3824      flag_descriptions::kUpdateNotificationSchedulingIntegrationName,
3825      flag_descriptions::kUpdateNotificationSchedulingIntegrationDescription,
3826      kOsAndroid,
3827      FEATURE_VALUE_TYPE(
3828          chrome::android::kUpdateNotificationSchedulingIntegration)},
3829 #endif
3830
3831 #if defined(OS_ANDROID)
3832     {"prefetch-notification-scheduling-integration",
3833      flag_descriptions::kPrefetchNotificationSchedulingIntegrationName,
3834      flag_descriptions::kPrefetchNotificationSchedulingIntegrationDescription,
3835      kOsAndroid,
3836      FEATURE_VALUE_TYPE(
3837          chrome::android::kPrefetchNotificationSchedulingIntegration)},
3838 #endif
3839
3840 #if defined(OS_ANDROID)
3841     {"update-notification-scheduling-show-immediately",
3842      flag_descriptions::kUpdateNotificationServiceImmediateShowOptionName,
3843      flag_descriptions::
3844          kUpdateNotificationServiceImmediateShowOptionDescription,
3845      kOsAndroid,
3846      FEATURE_VALUE_TYPE(
3847          chrome::android::
3848              kUpdateNotificationScheduleServiceImmediateShowOption)},
3849 #endif
3850
3851     {"tab-hover-cards", flag_descriptions::kTabHoverCardsName,
3852      flag_descriptions::kTabHoverCardsDescription, kOsDesktop,
3853      FEATURE_WITH_PARAMS_VALUE_TYPE(features::kTabHoverCards,
3854                                     kTabHoverCardsFeatureVariations,
3855                                     "TabHoverCards")},
3856
3857     {"tab-hover-card-images", flag_descriptions::kTabHoverCardImagesName,
3858      flag_descriptions::kTabHoverCardImagesDescription, kOsDesktop,
3859      FEATURE_VALUE_TYPE(features::kTabHoverCardImages)},
3860
3861     {"stop-non-timers-in-background",
3862      flag_descriptions::kStopNonTimersInBackgroundName,
3863      flag_descriptions::kStopNonTimersInBackgroundDescription, kOsAll,
3864      FEATURE_VALUE_TYPE(blink::features::kStopNonTimersInBackground)},
3865
3866     {"stop-in-background", flag_descriptions::kStopInBackgroundName,
3867      flag_descriptions::kStopInBackgroundDescription, kOsAndroid,
3868      FEATURE_VALUE_TYPE(blink::features::kStopInBackground)},
3869
3870     {"enable-storage-pressure-event",
3871      flag_descriptions::kStoragePressureEventName,
3872      flag_descriptions::kStoragePressureEventDescription, kOsAll,
3873      FEATURE_VALUE_TYPE(features::kStoragePressureEvent)},
3874
3875     {"enable-storage-pressure-ui", flag_descriptions::kStoragePressureUIName,
3876      flag_descriptions::kStoragePressureUIDescription, kOsAll,
3877      FEATURE_VALUE_TYPE(features::kStoragePressureUI)},
3878
3879     {"installed-apps-in-cbd", flag_descriptions::kInstalledAppsInCbdName,
3880      flag_descriptions::kInstalledAppsInCbdDescription, kOsDesktop,
3881      FEATURE_VALUE_TYPE(features::kInstalledAppsInCbd)},
3882
3883     {"enable-network-logging-to-file",
3884      flag_descriptions::kEnableNetworkLoggingToFileName,
3885      flag_descriptions::kEnableNetworkLoggingToFileDescription, kOsAll,
3886      SINGLE_VALUE_TYPE(network::switches::kLogNetLog)},
3887
3888     {"enable-mark-http-as", flag_descriptions::kMarkHttpAsName,
3889      flag_descriptions::kMarkHttpAsDescription, kOsAll,
3890      FEATURE_WITH_PARAMS_VALUE_TYPE(
3891          security_state::features::kMarkHttpAsFeature,
3892          kMarkHttpAsFeatureVariations,
3893          "HTTPReallyBadFinal")},
3894
3895     {"enable-web-authentication-cable-v2-support",
3896      flag_descriptions::kEnableWebAuthenticationCableV2SupportName,
3897      flag_descriptions::kEnableWebAuthenticationCableV2SupportDescription,
3898      kOsDesktop | kOsAndroid, FEATURE_VALUE_TYPE(device::kWebAuthPhoneSupport)},
3899
3900     {"use-preferred-interval-for-video",
3901      flag_descriptions::kUsePreferredIntervalForVideoName,
3902      flag_descriptions::kUsePreferredIntervalForVideoDescription, kOsDesktop,
3903      FEATURE_VALUE_TYPE(features::kUsePreferredIntervalForVideo)},
3904
3905     {"split-partially-occluded-quads",
3906      flag_descriptions::kSplitPartiallyOccludedQuadsName,
3907      flag_descriptions::kSplitPartiallyOccludedQuadsDescription, kOsAll,
3908      FEATURE_VALUE_TYPE(features::kSplitPartiallyOccludedQuads)},
3909
3910 #if BUILDFLAG(ENABLE_PDF)
3911     {"pdf-form-save", flag_descriptions::kPdfFormSaveName,
3912      flag_descriptions::kPdfFormSaveDescription, kOsDesktop,
3913      FEATURE_VALUE_TYPE(chrome_pdf::features::kSaveEditedPDFForm)},
3914
3915     {"pdf-honor-js-content-settings",
3916      flag_descriptions::kPdfHonorJsContentSettingsName,
3917      flag_descriptions::kPdfHonorJsContentSettingsDescription, kOsDesktop,
3918      FEATURE_VALUE_TYPE(chrome_pdf::features::kPdfHonorJsContentSettings)},
3919
3920     {"pdf-two-up-view", flag_descriptions::kPdfTwoUpViewName,
3921      flag_descriptions::kPdfTwoUpViewDescription, kOsDesktop,
3922      FEATURE_VALUE_TYPE(chrome_pdf::features::kPDFTwoUpView)},
3923
3924     {"pdf-viewer-update", flag_descriptions::kPdfViewerUpdateName,
3925      flag_descriptions::kPdfViewerUpdateDescription, kOsDesktop,
3926      FEATURE_VALUE_TYPE(chrome_pdf::features::kPDFViewerUpdate)},
3927 #endif  // BUILDFLAG(ENABLE_PDF)
3928
3929 #if BUILDFLAG(ENABLE_PRINTING)
3930 #if defined(OS_MACOSX)
3931     {"cups-ipp-printing-backend",
3932      flag_descriptions::kCupsIppPrintingBackendName,
3933      flag_descriptions::kCupsIppPrintingBackendDescription, kOsMac,
3934      FEATURE_VALUE_TYPE(printing::features::kCupsIppPrintingBackend)},
3935 #endif  // defined(OS_MACOSX)
3936
3937 #if defined(OS_WIN)
3938     {"print-with-reduced-rasterization",
3939      flag_descriptions::kPrintWithReducedRasterizationName,
3940      flag_descriptions::kPrintWithReducedRasterizationDescription, kOsWin,
3941      FEATURE_VALUE_TYPE(printing::features::kPrintWithReducedRasterization)},
3942
3943     {"use-xps-for-printing", flag_descriptions::kUseXpsForPrintingName,
3944      flag_descriptions::kUseXpsForPrintingDescription, kOsWin,
3945      FEATURE_VALUE_TYPE(printing::features::kUseXpsForPrinting)},
3946
3947     {"use-xps-for-printing-from-pdf",
3948      flag_descriptions::kUseXpsForPrintingFromPdfName,
3949      flag_descriptions::kUseXpsForPrintingFromPdfDescription, kOsWin,
3950      FEATURE_VALUE_TYPE(printing::features::kUseXpsForPrintingFromPdf)},
3951 #endif  // defined(OS_WIN)
3952 #endif  // BUILDFLAG(ENABLE_PRINTING)
3953
3954     {"autofill-profile-client-validation",
3955      flag_descriptions::kAutofillProfileClientValidationName,
3956      flag_descriptions::kAutofillProfileClientValidationDescription, kOsAll,
3957      FEATURE_VALUE_TYPE(autofill::features::kAutofillProfileClientValidation)},
3958
3959     {"autofill-profile-server-validation",
3960      flag_descriptions::kAutofillProfileServerValidationName,
3961      flag_descriptions::kAutofillProfileServerValidationDescription, kOsAll,
3962      FEATURE_VALUE_TYPE(autofill::features::kAutofillProfileServerValidation)},
3963
3964     {"autofill-reject-company-birthyear",
3965      flag_descriptions::kAutofillRejectCompanyBirthyearName,
3966      flag_descriptions::kAutofillRejectCompanyBirthyearDescription, kOsAll,
3967      FEATURE_VALUE_TYPE(autofill::features::kAutofillRejectCompanyBirthyear)},
3968
3969     {"autofill-restrict-formless-form-extraction",
3970      flag_descriptions::kAutofillRestrictUnownedFieldsToFormlessCheckoutName,
3971      flag_descriptions::
3972          kAutofillRestrictUnownedFieldsToFormlessCheckoutDescription,
3973      kOsAll,
3974      FEATURE_VALUE_TYPE(
3975          autofill::features::kAutofillRestrictUnownedFieldsToFormlessCheckout)},
3976
3977 #if defined(OS_ANDROID)
3978     {"enable-start-surface", flag_descriptions::kStartSurfaceAndroidName,
3979      flag_descriptions::kStartSurfaceAndroidDescription, kOsAndroid,
3980      FEATURE_WITH_PARAMS_VALUE_TYPE(chrome::android::kStartSurfaceAndroid,
3981                                     kStartSurfaceAndroidVariations,
3982                                     "ChromeStart")},
3983
3984     {"enable-instant-start", flag_descriptions::kInstantStartName,
3985      flag_descriptions::kInstantStartDescription, kOsAndroid,
3986      FEATURE_VALUE_TYPE(chrome::android::kInstantStart)},
3987
3988     {"enable-close-tab-suggestions",
3989      flag_descriptions::kCloseTabSuggestionsName,
3990      flag_descriptions::kCloseTabSuggestionsDescription, kOsAndroid,
3991      FEATURE_WITH_PARAMS_VALUE_TYPE(chrome::android::kCloseTabSuggestions,
3992                                     kCloseTabSuggestionsStaleVariations,
3993                                     "CloseSuggestionsTab")},
3994
3995     {"enable-horizontal-tab-switcher",
3996      flag_descriptions::kHorizontalTabSwitcherAndroidName,
3997      flag_descriptions::kHorizontalTabSwitcherAndroidDescription, kOsAndroid,
3998      FEATURE_VALUE_TYPE(chrome::android::kHorizontalTabSwitcherAndroid)},
3999
4000     {"enable-tab-grid-layout", flag_descriptions::kTabGridLayoutAndroidName,
4001      flag_descriptions::kTabGridLayoutAndroidDescription, kOsAndroid,
4002      FEATURE_WITH_PARAMS_VALUE_TYPE(chrome::android::kTabGridLayoutAndroid,
4003                                     kTabGridLayoutAndroidVariations,
4004                                     "TabGridLayoutAndroid")},
4005
4006     {"enable-tab-groups", flag_descriptions::kTabGroupsAndroidName,
4007      flag_descriptions::kTabGroupsAndroidDescription, kOsAndroid,
4008      FEATURE_VALUE_TYPE(chrome::android::kTabGroupsAndroid)},
4009
4010     {"enable-tab-groups-continuation",
4011      flag_descriptions::kTabGroupsContinuationAndroidName,
4012      flag_descriptions::kTabGroupsContinuationAndroidDescription, kOsAndroid,
4013      FEATURE_VALUE_TYPE(chrome::android::kTabGroupsContinuationAndroid)},
4014
4015     {"enable-tab-groups-ui-improvements",
4016      flag_descriptions::kTabGroupsUiImprovementsAndroidName,
4017      flag_descriptions::kTabGroupsUiImprovementsAndroidDescription, kOsAndroid,
4018      FEATURE_VALUE_TYPE(chrome::android::kTabGroupsUiImprovementsAndroid)},
4019
4020     {"enable-tab-switcher-on-return",
4021      flag_descriptions::kTabSwitcherOnReturnName,
4022      flag_descriptions::kTabSwitcherOnReturnDescription, kOsAndroid,
4023      FEATURE_WITH_PARAMS_VALUE_TYPE(chrome::android::kTabSwitcherOnReturn,
4024                                     kTabSwitcherOnReturnVariations,
4025                                     "ChromeStart")},
4026
4027     {"enable-tab-to-gts-animation",
4028      flag_descriptions::kTabToGTSAnimationAndroidName,
4029      flag_descriptions::kTabToGTSAnimationAndroidDescription, kOsAndroid,
4030      FEATURE_VALUE_TYPE(chrome::android::kTabToGTSAnimation)},
4031
4032     {"enable-tab-engagement-reporting",
4033      flag_descriptions::kTabEngagementReportingName,
4034      flag_descriptions::kTabEngagementReportingDescription, kOsAndroid,
4035      FEATURE_VALUE_TYPE(chrome::android::kTabEngagementReportingAndroid)},
4036
4037     {"enable-duet-tabstrip-integration",
4038      flag_descriptions::kDuetTabStripIntegrationAndroidName,
4039      flag_descriptions::kDuetTabStripIntegrationAndroidDescription, kOsAndroid,
4040      FEATURE_VALUE_TYPE(chrome::android::kDuetTabStripIntegrationAndroid)},
4041
4042     {"enable-conditional-tabstrip",
4043      flag_descriptions::kConditionalTabStripAndroidName,
4044      flag_descriptions::kConditionalTabStripAndroidDescription, kOsAndroid,
4045      FEATURE_WITH_PARAMS_VALUE_TYPE(
4046          chrome::android::kConditionalTabStripAndroid,
4047          kConditionalTabStripAndroidVariations,
4048          "ConditioanlTabStrip")},
4049 #endif  // OS_ANDROID
4050
4051     {"enable-layout-ng", flag_descriptions::kEnableLayoutNGName,
4052      flag_descriptions::kEnableLayoutNGDescription, kOsAll,
4053      FEATURE_VALUE_TYPE(blink::features::kLayoutNG)},
4054
4055     {"enable-lazy-image-loading",
4056      flag_descriptions::kEnableLazyImageLoadingName,
4057      flag_descriptions::kEnableLazyImageLoadingDescription, kOsAll,
4058      FEATURE_WITH_PARAMS_VALUE_TYPE(features::kLazyImageLoading,
4059                                     kLazyImageLoadingVariations,
4060                                     "LazyLoad")},
4061
4062     {"enable-lazy-frame-loading",
4063      flag_descriptions::kEnableLazyFrameLoadingName,
4064      flag_descriptions::kEnableLazyFrameLoadingDescription, kOsAll,
4065      FEATURE_WITH_PARAMS_VALUE_TYPE(features::kLazyFrameLoading,
4066                                     kLazyFrameLoadingVariations,
4067                                     "LazyLoad")},
4068
4069     {"autofill-cache-query-responses",
4070      flag_descriptions::kAutofillCacheQueryResponsesName,
4071      flag_descriptions::kAutofillCacheQueryResponsesDescription, kOsAll,
4072      FEATURE_VALUE_TYPE(autofill::features::kAutofillCacheQueryResponses)},
4073
4074     {"autofill-enable-company-name",
4075      flag_descriptions::kAutofillEnableCompanyNameName,
4076      flag_descriptions::kAutofillEnableCompanyNameDescription, kOsAll,
4077      FEATURE_VALUE_TYPE(autofill::features::kAutofillEnableCompanyName)},
4078
4079     {"autofill-enable-toolbar-status-chip",
4080      flag_descriptions::kAutofillEnableToolbarStatusChipName,
4081      flag_descriptions::kAutofillEnableToolbarStatusChipDescription,
4082      kOsMac | kOsWin | kOsLinux,
4083      FEATURE_VALUE_TYPE(autofill::features::kAutofillEnableToolbarStatusChip)},
4084
4085     {"autofill-enforce-min-required-fields-for-heuristics",
4086      flag_descriptions::kAutofillEnforceMinRequiredFieldsForHeuristicsName,
4087      flag_descriptions::
4088          kAutofillEnforceMinRequiredFieldsForHeuristicsDescription,
4089      kOsAll,
4090      FEATURE_VALUE_TYPE(
4091          autofill::features::kAutofillEnforceMinRequiredFieldsForHeuristics)},
4092     {"autofill-enforce-min-required-fields-for-query",
4093      flag_descriptions::kAutofillEnforceMinRequiredFieldsForQueryName,
4094      flag_descriptions::kAutofillEnforceMinRequiredFieldsForQueryDescription,
4095      kOsAll,
4096      FEATURE_VALUE_TYPE(
4097          autofill::features::kAutofillEnforceMinRequiredFieldsForQuery)},
4098     {"autofill-enforce-min-required-fields-for-upload",
4099      flag_descriptions::kAutofillEnforceMinRequiredFieldsForUploadName,
4100      flag_descriptions::kAutofillEnforceMinRequiredFieldsForUploadDescription,
4101      kOsAll,
4102      FEATURE_VALUE_TYPE(
4103          autofill::features::kAutofillEnforceMinRequiredFieldsForUpload)},
4104     {"autofill-rich-metadata-queries",
4105      flag_descriptions::kAutofillRichMetadataQueriesName,
4106      flag_descriptions::kAutofillRichMetadataQueriesDescription, kOsAll,
4107      FEATURE_VALUE_TYPE(autofill::features::kAutofillRichMetadataQueries)},
4108     {"enable-experimental-productivity-features",
4109      flag_descriptions::kExperimentalProductivityFeaturesName,
4110      flag_descriptions::kExperimentalProductivityFeaturesDescription, kOsAll,
4111      FEATURE_VALUE_TYPE(features::kExperimentalProductivityFeatures)},
4112
4113 #if defined(USE_AURA)
4114     {"touchpad-overscroll-history-navigation",
4115      flag_descriptions::kTouchpadOverscrollHistoryNavigationName,
4116      flag_descriptions::kTouchpadOverscrollHistoryNavigationDescription,
4117      kOsWin | kOsCrOS,
4118      FEATURE_VALUE_TYPE(features::kTouchpadOverscrollHistoryNavigation)},
4119 #endif
4120
4121     {"unsafely-treat-insecure-origin-as-secure",
4122      flag_descriptions::kTreatInsecureOriginAsSecureName,
4123      flag_descriptions::kTreatInsecureOriginAsSecureDescription, kOsAll,
4124      ORIGIN_LIST_VALUE_TYPE(
4125          network::switches::kUnsafelyTreatInsecureOriginAsSecure,
4126          "")},
4127
4128     {"treat-unsafe-downloads-as-active-content",
4129      flag_descriptions::kTreatUnsafeDownloadsAsActiveName,
4130      flag_descriptions::kTreatUnsafeDownloadsAsActiveDescription,
4131      kOsDesktop | kOsAndroid,
4132      FEATURE_VALUE_TYPE(features::kTreatUnsafeDownloadsAsActive)},
4133
4134     {"detect-target-embedding-lookalikes",
4135      flag_descriptions::kDetectTargetEmbeddingLookalikesName,
4136      flag_descriptions::kDetectTargetEmbeddingLookalikesDescription,
4137      kOsDesktop | kOsAndroid,
4138      FEATURE_VALUE_TYPE(
4139          lookalikes::features::kDetectTargetEmbeddingLookalikes)},
4140
4141 #if defined(OS_CHROMEOS)
4142     {"enable-play-store-search", flag_descriptions::kEnablePlayStoreSearchName,
4143      flag_descriptions::kEnablePlayStoreSearchDescription, kOsCrOS,
4144      FEATURE_VALUE_TYPE(app_list_features::kEnablePlayStoreAppSearch)},
4145
4146     {"enable-app-data-search", flag_descriptions::kEnableAppDataSearchName,
4147      flag_descriptions::kEnableAppDataSearchDescription, kOsCrOS,
4148      FEATURE_VALUE_TYPE(app_list_features::kEnableAppDataSearch)},
4149
4150     {"enable-app-grid-ghost", flag_descriptions::kEnableAppGridGhostName,
4151      flag_descriptions::kEnableAppGridGhostDescription, kOsCrOS,
4152      FEATURE_VALUE_TYPE(app_list_features::kEnableAppGridGhost)},
4153 #endif  // OS_CHROMEOS
4154
4155     {"enable-accessibility-expose-aria-annotations",
4156      flag_descriptions::kAccessibilityExposeARIAAnnotationsName,
4157      flag_descriptions::kAccessibilityExposeARIAAnnotationsDescription, kOsAll,
4158      FEATURE_VALUE_TYPE(features::kEnableAccessibilityExposeARIAAnnotations)},
4159
4160     {"enable-accessibility-expose-display-none",
4161      flag_descriptions::kAccessibilityExposeDisplayNoneName,
4162      flag_descriptions::kAccessibilityExposeDisplayNoneDescription, kOsAll,
4163      FEATURE_VALUE_TYPE(features::kEnableAccessibilityExposeDisplayNone)},
4164
4165 #if !defined(OS_ANDROID)
4166     {"enable-accessibility-live-captions",
4167      flag_descriptions::kEnableAccessibilityLiveCaptionsName,
4168      flag_descriptions::kEnableAccessibilityLiveCaptionsDescription, kOsDesktop,
4169      FEATURE_VALUE_TYPE(media::kLiveCaption)},
4170 #endif  // !defined(OS_ANDROID)
4171
4172     {"enable-accessibility-object-model",
4173      flag_descriptions::kEnableAccessibilityObjectModelName,
4174      flag_descriptions::kEnableAccessibilityObjectModelDescription, kOsAll,
4175      SINGLE_VALUE_TYPE(switches::kEnableAccessibilityObjectModel)},
4176
4177 #if defined(OS_ANDROID)
4178     {"cct-incognito", flag_descriptions::kCCTIncognitoName,
4179      flag_descriptions::kCCTIncognitoDescription, kOsAndroid,
4180      FEATURE_VALUE_TYPE(chrome::android::kCCTIncognito)},
4181 #endif
4182
4183 #if defined(OS_CHROMEOS)
4184     {"enable-arc-cups-api", flag_descriptions::kArcCupsApiName,
4185      flag_descriptions::kArcCupsApiDescription, kOsCrOS,
4186      FEATURE_VALUE_TYPE(features::kArcCupsApi)},
4187 #endif  // OS_CHROMEOS
4188
4189 #if defined(OS_ANDROID)
4190     {"background-task-component-update",
4191      flag_descriptions::kBackgroundTaskComponentUpdateName,
4192      flag_descriptions::kBackgroundTaskComponentUpdateDescription, kOsAndroid,
4193      FEATURE_VALUE_TYPE(chrome::android::kBackgroundTaskComponentUpdate)},
4194 #endif
4195
4196 #if defined(OS_ANDROID)
4197     {"enable-use-aaudio-driver", flag_descriptions::kEnableUseAaudioDriverName,
4198      flag_descriptions::kEnableUseAaudioDriverDescription, kOsAndroid,
4199      FEATURE_VALUE_TYPE(features::kUseAAudioDriver)},
4200 #endif
4201
4202 #if defined(OS_CHROMEOS)
4203     {"smart-text-selection", flag_descriptions::kSmartTextSelectionName,
4204      flag_descriptions::kSmartTextSelectionDescription, kOsCrOS,
4205      FEATURE_VALUE_TYPE(arc::kSmartTextSelectionFeature)},
4206 #endif  // OS_CHROMEOS
4207
4208     {"allow-sxg-certs-without-extension",
4209      flag_descriptions::kAllowSignedHTTPExchangeCertsWithoutExtensionName,
4210      flag_descriptions::
4211          kAllowSignedHTTPExchangeCertsWithoutExtensionDescription,
4212      kOsAll,
4213      FEATURE_VALUE_TYPE(
4214          features::kAllowSignedHTTPExchangeCertsWithoutExtension)},
4215
4216     {"enable-sxg-subresource-prefetching",
4217      flag_descriptions::kEnableSignedExchangeSubresourcePrefetchName,
4218      flag_descriptions::kEnableSignedExchangeSubresourcePrefetchDescription,
4219      kOsAll, FEATURE_VALUE_TYPE(features::kSignedExchangeSubresourcePrefetch)},
4220
4221     {"enable-sxg-prefetch-cache-for-navigations",
4222      flag_descriptions::kEnableSignedExchangePrefetchCacheForNavigationsName,
4223      flag_descriptions::
4224          kEnableSignedExchangePrefetchCacheForNavigationsDescription,
4225      kOsAll,
4226      FEATURE_VALUE_TYPE(features::kSignedExchangePrefetchCacheForNavigations)},
4227
4228     {"enable-autofill-account-wallet-storage",
4229      flag_descriptions::kEnableAutofillAccountWalletStorageName,
4230      flag_descriptions::kEnableAutofillAccountWalletStorageDescription, kOsAll,
4231      FEATURE_VALUE_TYPE(
4232          autofill::features::kAutofillEnableAccountWalletStorage)},
4233
4234 #if defined(OS_CHROMEOS)
4235     {"enable-zero-state-suggestions",
4236      flag_descriptions::kEnableZeroStateSuggestionsName,
4237      flag_descriptions::kEnableZeroStateSuggestionsDescription, kOsCrOS,
4238      FEATURE_VALUE_TYPE(app_list_features::kEnableZeroStateSuggestions)},
4239     {"enable-zero-state-app-reinstall-suggestions",
4240      flag_descriptions::kEnableAppReinstallZeroStateName,
4241      flag_descriptions::kEnableAppReinstallZeroStateDescription, kOsCrOS,
4242      FEATURE_VALUE_TYPE(app_list_features::kEnableAppReinstallZeroState)},
4243 #endif  // OS_CHROMEOS
4244
4245     {"enable-sync-device-info-in-transport-mode",
4246      flag_descriptions::kSyncDeviceInfoInTransportModeName,
4247      flag_descriptions::kSyncDeviceInfoInTransportModeDescription, kOsAll,
4248      FEATURE_VALUE_TYPE(switches::kSyncDeviceInfoInTransportMode)},
4249
4250     {"enable-resampling-input-events",
4251      flag_descriptions::kEnableResamplingInputEventsName,
4252      flag_descriptions::kEnableResamplingInputEventsDescription, kOsAll,
4253      FEATURE_WITH_PARAMS_VALUE_TYPE(blink::features::kResamplingInputEvents,
4254                                     kResamplingInputEventsFeatureVariations,
4255                                     "ResamplingInputEvents")},
4256
4257     {"enable-resampling-scroll-events",
4258      flag_descriptions::kEnableResamplingScrollEventsName,
4259      flag_descriptions::kEnableResamplingScrollEventsDescription, kOsAll,
4260      FEATURE_WITH_PARAMS_VALUE_TYPE(blink::features::kResamplingScrollEvents,
4261                                     kResamplingInputEventsFeatureVariations,
4262                                     "ResamplingScrollEvents")},
4263
4264     {"enable-filtering-scroll-events",
4265      flag_descriptions::kFilteringScrollPredictionName,
4266      flag_descriptions::kFilteringScrollPredictionDescription, kOsAll,
4267      FEATURE_WITH_PARAMS_VALUE_TYPE(blink::features::kFilteringScrollPrediction,
4268                                     kFilteringPredictionFeatureVariations,
4269                                     "FilteringScrollPrediction")},
4270
4271     {"enable-first-scroll-latency-measurement",
4272      flag_descriptions::kFirstScrollLatencyMeasurementName,
4273      flag_descriptions::kFirstScrollLatencyMeasurementDescription, kOsAll,
4274      FEATURE_VALUE_TYPE(features::kFirstScrollLatencyMeasurement)},
4275
4276     {"compositor-threaded-scrollbar-scrolling",
4277      flag_descriptions::kCompositorThreadedScrollbarScrollingName,
4278      flag_descriptions::kCompositorThreadedScrollbarScrollingDescription,
4279      kOsAll,
4280      FEATURE_VALUE_TYPE(features::kCompositorThreadedScrollbarScrolling)},
4281
4282 #if defined(OS_CHROMEOS)
4283     {"enable-vaapi-jpeg-image-decode-acceleration",
4284      flag_descriptions::kVaapiJpegImageDecodeAccelerationName,
4285      flag_descriptions::kVaapiJpegImageDecodeAccelerationDescription, kOsCrOS,
4286      FEATURE_VALUE_TYPE(features::kVaapiJpegImageDecodeAcceleration)},
4287
4288     {"enable-vaapi-webp-image-decode-acceleration",
4289      flag_descriptions::kVaapiWebPImageDecodeAccelerationName,
4290      flag_descriptions::kVaapiWebPImageDecodeAccelerationDescription, kOsCrOS,
4291      FEATURE_VALUE_TYPE(features::kVaapiWebPImageDecodeAcceleration)},
4292 #endif
4293
4294 #if defined(OS_WIN)
4295     {"calculate-native-win-occlusion",
4296      flag_descriptions::kCalculateNativeWinOcclusionName,
4297      flag_descriptions::kCalculateNativeWinOcclusionDescription, kOsWin,
4298      FEATURE_VALUE_TYPE(features::kCalculateNativeWinOcclusion)},
4299 #endif  // OS_WIN
4300
4301 #if !defined(OS_ANDROID)
4302     {"happiness-tracking-surveys-for-desktop",
4303      flag_descriptions::kHappinessTrackingSurveysForDesktopName,
4304      flag_descriptions::kHappinessTrackingSurveysForDesktopDescription,
4305      kOsDesktop,
4306      FEATURE_VALUE_TYPE(features::kHappinessTrackingSurveysForDesktop)},
4307
4308     {"happiness-tracking-surveys-for-desktop-demo",
4309      flag_descriptions::kHappinessTrackingSurveysForDesktopDemoName,
4310      flag_descriptions::kHappinessTrackingSurveysForDesktopDemoDescription,
4311      kOsDesktop,
4312      FEATURE_VALUE_TYPE(features::kHappinessTrackingSurveysForDesktopDemo)},
4313
4314     {"happiness-tracking-surveys-for-desktop-migration",
4315      flag_descriptions::kHappinessTrackingSurveysForDesktopMigrationName,
4316      flag_descriptions::kHappinessTrackingSurveysForDesktopMigrationDescription,
4317      kOsDesktop,
4318      FEATURE_VALUE_TYPE(
4319          features::kHappinessTrackingSurveysForDesktopMigration)},
4320
4321     {"happiness-tracking-surveys-for-desktop-settings",
4322      flag_descriptions::kHappinessTrackingSurveysForDesktopSettingsName,
4323      flag_descriptions::kHappinessTrackingSurveysForDesktopSettingsDescription,
4324      kOsDesktop,
4325      FEATURE_VALUE_TYPE(features::kHappinessTrackingSurveysForDesktopSettings)},
4326
4327     {"happiness-tracking-surveys-for-desktop-settings-privacy",
4328      flag_descriptions::kHappinessTrackingSurveysForDesktopSettingsPrivacyName,
4329      flag_descriptions::
4330          kHappinessTrackingSurveysForDesktopSettingsPrivacyDescription,
4331      kOsDesktop,
4332      FEATURE_VALUE_TYPE(
4333          features::kHappinessTrackingSurveysForDesktopSettingsPrivacy)},
4334 #endif  // !defined(OS_ANDROID)
4335
4336 #if BUILDFLAG(ENABLE_DICE_SUPPORT)
4337     {"use-multilogin-endpoint", flag_descriptions::kUseMultiloginEndpointName,
4338      flag_descriptions::kUseMultiloginEndpointDescription,
4339      kOsMac | kOsWin | kOsLinux, FEATURE_VALUE_TYPE(kUseMultiloginEndpoint)},
4340
4341     {"enable-new-profile-picker", flag_descriptions::kNewProfilePickerName,
4342      flag_descriptions::kNewProfilePickerDescription,
4343      kOsMac | kOsWin | kOsLinux,
4344      FEATURE_VALUE_TYPE(features::kNewProfilePicker)},
4345 #endif
4346
4347 #if defined(OS_CHROMEOS)
4348     {"enable-usbguard", flag_descriptions::kUsbguardName,
4349      flag_descriptions::kUsbguardDescription, kOsCrOS,
4350      FEATURE_VALUE_TYPE(features::kUsbguard)},
4351     {"enable-fs-nosymfollow", flag_descriptions::kFsNosymfollowName,
4352      flag_descriptions::kFsNosymfollowDescription, kOsCrOS,
4353      FEATURE_VALUE_TYPE(chromeos::features::kFsNosymfollow)},
4354     {"enable-arc-unified-audio-focus",
4355      flag_descriptions::kEnableArcUnifiedAudioFocusName,
4356      flag_descriptions::kEnableArcUnifiedAudioFocusDescription, kOsCrOS,
4357      FEATURE_VALUE_TYPE(arc::kEnableUnifiedAudioFocusFeature)},
4358 #endif  // defined(OS_CHROMEOS)
4359
4360 #if defined(OS_WIN)
4361     {"use-angle", flag_descriptions::kUseAngleName,
4362      flag_descriptions::kUseAngleDescription, kOsWin,
4363      MULTI_VALUE_TYPE(kUseAngleChoices)},
4364 #endif
4365 #if defined(OS_ANDROID)
4366     {"draw-vertically-edge-to-edge",
4367      flag_descriptions::kDrawVerticallyEdgeToEdgeName,
4368      flag_descriptions::kDrawVerticallyEdgeToEdgeDescription, kOsAndroid,
4369      FEATURE_VALUE_TYPE(chrome::android::kDrawVerticallyEdgeToEdge)},
4370 #endif
4371 #if defined(OS_ANDROID)
4372     {"enable-ephemeral-tab-bottom-sheet",
4373      flag_descriptions::kEphemeralTabUsingBottomSheetName,
4374      flag_descriptions::kEphemeralTabUsingBottomSheetDescription, kOsAndroid,
4375      FEATURE_VALUE_TYPE(chrome::android::kEphemeralTabUsingBottomSheet)},
4376     {"overlay-new-layout", flag_descriptions::kOverlayNewLayoutName,
4377      flag_descriptions::kOverlayNewLayoutDescription, kOsAndroid,
4378      FEATURE_VALUE_TYPE(chrome::android::kOverlayNewLayout)},
4379 #endif  // defined(OS_ANDROID)
4380
4381 #if defined(OS_CHROMEOS)
4382     {"enable-assistant-dsp", flag_descriptions::kEnableGoogleAssistantDspName,
4383      flag_descriptions::kEnableGoogleAssistantDspDescription, kOsCrOS,
4384      FEATURE_VALUE_TYPE(chromeos::assistant::features::kEnableDspHotword)},
4385
4386     {"enable-assistant-app-support",
4387      flag_descriptions::kEnableAssistantAppSupportName,
4388      flag_descriptions::kEnableAssistantAppSupportDescription, kOsCrOS,
4389      FEATURE_VALUE_TYPE(chromeos::assistant::features::kAssistantAppSupport)},
4390
4391     {"enable-assistant-media-session-integration",
4392      flag_descriptions::kEnableAssistantMediaSessionIntegrationName,
4393      flag_descriptions::kEnableAssistantMediaSessionIntegrationDescription,
4394      kOsCrOS,
4395      FEATURE_VALUE_TYPE(
4396          chromeos::assistant::features::kEnableMediaSessionIntegration)},
4397
4398     {"enable-quick-answers", flag_descriptions::kEnableQuickAnswersName,
4399      flag_descriptions::kEnableQuickAnswersDescription, kOsCrOS,
4400      FEATURE_VALUE_TYPE(chromeos::features::kQuickAnswers)},
4401
4402     {"enable-quick-answers-rich-ui",
4403      flag_descriptions::kEnableQuickAnswersRichUiName,
4404      flag_descriptions::kEnableQuickAnswersRichUiDescription, kOsCrOS,
4405      FEATURE_VALUE_TYPE(chromeos::features::kQuickAnswersRichUi)},
4406
4407     {"enable-quick-answers-text-annotator",
4408      flag_descriptions::kEnableQuickAnswersTextAnnotatorName,
4409      flag_descriptions::kEnableQuickAnswersTextAnnotatorDescription, kOsCrOS,
4410      FEATURE_VALUE_TYPE(chromeos::features::kQuickAnswersTextAnnotator)},
4411
4412     {"enable-on-device-assistant",
4413      flag_descriptions::kEnableOnDeviceAssistantName,
4414      flag_descriptions::kEnableOnDeviceAssistantDescription, kOsCrOS,
4415      FEATURE_VALUE_TYPE(
4416          chromeos::assistant::features::kEnableOnDeviceAssistant)},
4417
4418 #endif  // defined(OS_CHROMEOS)
4419
4420 #if BUILDFLAG(ENABLE_CLICK_TO_CALL)
4421     {"click-to-call-ui", flag_descriptions::kClickToCallUIName,
4422      flag_descriptions::kClickToCallUIDescription, kOsDesktop,
4423      FEATURE_VALUE_TYPE(kClickToCallUI)},
4424 #endif  // BUILDFLAG(ENABLE_CLICK_TO_CALL)
4425
4426 #if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || \
4427     defined(OS_CHROMEOS)
4428     {"remote-copy-receiver", flag_descriptions::kRemoteCopyReceiverName,
4429      flag_descriptions::kRemoteCopyReceiverDescription, kOsDesktop,
4430      FEATURE_VALUE_TYPE(kRemoteCopyReceiver)},
4431     {"remote-copy-image-notification",
4432      flag_descriptions::kRemoteCopyImageNotificationName,
4433      flag_descriptions::kRemoteCopyImageNotificationDescription, kOsDesktop,
4434      FEATURE_VALUE_TYPE(kRemoteCopyImageNotification)},
4435     {"remote-copy-persistent-notification",
4436      flag_descriptions::kRemoteCopyPersistentNotificationName,
4437      flag_descriptions::kRemoteCopyPersistentNotificationDescription,
4438      kOsDesktop, FEATURE_VALUE_TYPE(kRemoteCopyPersistentNotification)},
4439     {"remote-copy-progress-notification",
4440      flag_descriptions::kRemoteCopyProgressNotificationName,
4441      flag_descriptions::kRemoteCopyProgressNotificationDescription, kOsDesktop,
4442      FEATURE_VALUE_TYPE(kRemoteCopyProgressNotification)},
4443 #endif  // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) ||
4444         // defined(OS_CHROMEOS)
4445
4446     {"shared-clipboard-ui", flag_descriptions::kSharedClipboardUIName,
4447      flag_descriptions::kSharedClipboardUIDescription, kOsAll,
4448      FEATURE_VALUE_TYPE(kSharedClipboardUI)},
4449
4450     {"enable-ambient-authentication-in-incognito",
4451      flag_descriptions::kEnableAmbientAuthenticationInIncognitoName,
4452      flag_descriptions::kEnableAmbientAuthenticationInIncognitoDescription,
4453      kOsAll,
4454      FEATURE_VALUE_TYPE(features::kEnableAmbientAuthenticationInIncognito)},
4455
4456     {"enable-ambient-authentication-in-guest-session",
4457      flag_descriptions::kEnableAmbientAuthenticationInGuestSessionName,
4458      flag_descriptions::kEnableAmbientAuthenticationInGuestSessionDescription,
4459      kOsAll,
4460      FEATURE_VALUE_TYPE(features::kEnableAmbientAuthenticationInGuestSession)},
4461
4462     {"enable-send-tab-to-self-omnibox-sending-animation",
4463      flag_descriptions::kSendTabToSelfOmniboxSendingAnimationName,
4464      flag_descriptions::kSendTabToSelfOmniboxSendingAnimationDescription,
4465      kOsDesktop,
4466      FEATURE_VALUE_TYPE(
4467          send_tab_to_self::kSendTabToSelfOmniboxSendingAnimation)},
4468
4469 #if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || \
4470     defined(OS_CHROMEOS)
4471     {"sharing-peer-connection-receiver",
4472      flag_descriptions::kSharingPeerConnectionReceiverName,
4473      flag_descriptions::kSharingPeerConnectionReceiverDescription, kOsDesktop,
4474      FEATURE_VALUE_TYPE(kSharingPeerConnectionReceiver)},
4475
4476     {"sharing-peer-connection-sender",
4477      flag_descriptions::kSharingPeerConnectionSenderName,
4478      flag_descriptions::kSharingPeerConnectionSenderDescription, kOsDesktop,
4479      FEATURE_VALUE_TYPE(kSharingPeerConnectionSender)},
4480 #endif  // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) ||
4481         // defined(OS_CHROMEOS)
4482
4483     {"sharing-prefer-vapid", flag_descriptions::kSharingPreferVapidName,
4484      flag_descriptions::kSharingPreferVapidDescription, kOsAll,
4485      FEATURE_VALUE_TYPE(kSharingPreferVapid)},
4486
4487     {"sharing-qr-code-generator",
4488      flag_descriptions::kSharingQRCodeGeneratorName,
4489      flag_descriptions::kSharingQRCodeGeneratorDescription, kOsDesktop,
4490      FEATURE_VALUE_TYPE(kSharingQRCodeGenerator)},
4491
4492     {"sharing-send-via-sync", flag_descriptions::kSharingSendViaSyncName,
4493      flag_descriptions::kSharingSendViaSyncDescription, kOsAll,
4494      FEATURE_VALUE_TYPE(kSharingSendViaSync)},
4495
4496     {"sharing-device-expiration",
4497      flag_descriptions::kSharingDeviceExpirationName,
4498      flag_descriptions::kSharingDeviceExpirationDescription, kOsAll,
4499      FEATURE_WITH_PARAMS_VALUE_TYPE(kSharingDeviceExpiration,
4500                                     kSharingDeviceExpirationVariations,
4501                                     "SharingDeviceExpiration")},
4502
4503 #if defined(OS_CHROMEOS)
4504     {"discover-app", flag_descriptions::kEnableDiscoverAppName,
4505      flag_descriptions::kEnableDiscoverAppDescription, kOsCrOS,
4506      FEATURE_VALUE_TYPE(chromeos::features::kDiscoverApp)},
4507 #endif  // defined(OS_CHROMEOS)
4508
4509 #if defined(OS_CHROMEOS)
4510     {"ash-enable-pip-rounded-corners",
4511      flag_descriptions::kAshEnablePipRoundedCornersName,
4512      flag_descriptions::kAshEnablePipRoundedCornersDescription, kOsCrOS,
4513      FEATURE_VALUE_TYPE(ash::features::kPipRoundedCorners)},
4514
4515     {"ash-swap-side-volume-buttons-for-orientation",
4516      flag_descriptions::kAshSwapSideVolumeButtonsForOrientationName,
4517      flag_descriptions::kAshSwapSideVolumeButtonsForOrientationDescription,
4518      kOsCrOS,
4519      FEATURE_VALUE_TYPE(ash::features::kSwapSideVolumeButtonsForOrientation)},
4520 #endif  // defined(OS_CHROMEOS)
4521     {"google-password-manager", flag_descriptions::kGooglePasswordManagerName,
4522      flag_descriptions::kGooglePasswordManagerDescription, kOsAll,
4523      FEATURE_VALUE_TYPE(password_manager::features::kGooglePasswordManager)},
4524
4525     {"enable-implicit-root-scroller",
4526      flag_descriptions::kEnableImplicitRootScrollerName,
4527      flag_descriptions::kEnableImplicitRootScrollerDescription, kOsAll,
4528      FEATURE_VALUE_TYPE(blink::features::kImplicitRootScroller)},
4529
4530     {"enable-cssom-view-scroll-coordinates",
4531      flag_descriptions::kEnableCSSOMViewScrollCoordinatesName,
4532      flag_descriptions::kEnableCSSOMViewScrollCoordinatesDescription, kOsAll,
4533      FEATURE_VALUE_TYPE(blink::features::kCSSOMViewScrollCoordinates)},
4534
4535     {"enable-text-fragment-anchor",
4536      flag_descriptions::kEnableTextFragmentAnchorName,
4537      flag_descriptions::kEnableTextFragmentAnchorDescription, kOsAll,
4538      FEATURE_VALUE_TYPE(blink::features::kTextFragmentAnchor)},
4539
4540 #if defined(OS_CHROMEOS)
4541     {"enable-assistant-stereo-input",
4542      flag_descriptions::kEnableGoogleAssistantStereoInputName,
4543      flag_descriptions::kEnableGoogleAssistantStereoInputDescription, kOsCrOS,
4544      FEATURE_VALUE_TYPE(
4545          chromeos::assistant::features::kEnableStereoAudioInput)},
4546 #endif  // defined(OS_CHROMEOS)
4547
4548 #if BUILDFLAG(ENABLE_PRINT_PREVIEW) && defined(OS_MACOSX)
4549     {"enable-custom-mac-paper-sizes",
4550      flag_descriptions::kEnableCustomMacPaperSizesName,
4551      flag_descriptions::kEnableCustomMacPaperSizesDescription, kOsMac,
4552      FEATURE_VALUE_TYPE(printing::features::kEnableCustomMacPaperSizes)},
4553 #endif
4554
4555 #if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) || \
4556     defined(OS_CHROMEOS)
4557     {"enable-reopen-tab-in-product-help",
4558      flag_descriptions::kReopenTabInProductHelpName,
4559      flag_descriptions::kReopenTabInProductHelpDescription, kOsDesktop,
4560      FEATURE_VALUE_TYPE(feature_engagement::kIPHReopenTabFeature)},
4561 #endif  // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX) ||
4562         // defined(OS_CHROMEOS)
4563
4564     {"enable-audio-focus-enforcement",
4565      flag_descriptions::kEnableAudioFocusEnforcementName,
4566      flag_descriptions::kEnableAudioFocusEnforcementDescription, kOsDesktop,
4567      FEATURE_VALUE_TYPE(media_session::features::kAudioFocusEnforcement)},
4568     {"enable-media-session-service",
4569      flag_descriptions::kEnableMediaSessionServiceName,
4570      flag_descriptions::kEnableMediaSessionServiceDescription, kOsDesktop,
4571      FEATURE_VALUE_TYPE(media_session::features::kMediaSessionService)},
4572     {"enable-gpu-service-logging",
4573      flag_descriptions::kEnableGpuServiceLoggingName,
4574      flag_descriptions::kEnableGpuServiceLoggingDescription, kOsAll,
4575      SINGLE_VALUE_TYPE(switches::kEnableGPUServiceLogging)},
4576
4577 #if !defined(OS_ANDROID)
4578     {"hardware-media-key-handling",
4579      flag_descriptions::kHardwareMediaKeyHandling,
4580      flag_descriptions::kHardwareMediaKeyHandlingDescription, kOsDesktop,
4581      FEATURE_VALUE_TYPE(media::kHardwareMediaKeyHandling)},
4582 #endif
4583
4584     {"enable-paint-holding", flag_descriptions::kPaintHoldingName,
4585      flag_descriptions::kPaintHoldingDescription, kOsAll,
4586      FEATURE_VALUE_TYPE(blink::features::kPaintHolding)},
4587
4588 #if defined(OS_CHROMEOS)
4589     {"app-service-adaptive-icon",
4590      flag_descriptions::kAppServiceAdaptiveIconName,
4591      flag_descriptions::kAppServiceAdaptiveIconDescription, kOsCrOS,
4592      FEATURE_VALUE_TYPE(features::kAppServiceAdaptiveIcon)},
4593
4594     {"app-service-instance-registry",
4595      flag_descriptions::kAppServiceInstanceRegistryName,
4596      flag_descriptions::kAppServiceInstanceRegistryDescription, kOsCrOS,
4597      FEATURE_VALUE_TYPE(features::kAppServiceInstanceRegistry)},
4598
4599     {"app-service-intent-handling",
4600      flag_descriptions::kAppServiceIntentHandlingName,
4601      flag_descriptions::kAppServiceIntentHandlingDescription, kOsCrOS,
4602      FEATURE_VALUE_TYPE(features::kAppServiceIntentHandling)},
4603
4604     {"ash-swiping-from-left-edge-to-go-back",
4605      flag_descriptions::kAshSwipingFromLeftEdgeToGoBackName,
4606      flag_descriptions::kAshSwipingFromLeftEdgeToGoBackDescription, kOsCrOS,
4607      FEATURE_VALUE_TYPE(ash::features::kSwipingFromLeftEdgeToGoBack)},
4608
4609     {"use-fake-device-for-media-stream",
4610      flag_descriptions::kUseFakeDeviceForMediaStreamName,
4611      flag_descriptions::kUseFakeDeviceForMediaStreamDescription, kOsCrOS,
4612      FEATURE_VALUE_TYPE(media::kUseFakeDeviceForMediaStream)},
4613
4614     {"ash-drag-window-from-shelf",
4615      flag_descriptions::kAshDragWindowFromShelfName,
4616      flag_descriptions::kAshDragWindowFromShelfDescription, kOsCrOS,
4617      FEATURE_VALUE_TYPE(ash::features::kDragFromShelfToHomeOrOverview)},
4618
4619     {"intent-picker-pwa-persistence",
4620      flag_descriptions::kIntentPickerPWAPersistenceName,
4621      flag_descriptions::kIntentPickerPWAPersistenceDescription, kOsCrOS,
4622      FEATURE_VALUE_TYPE(features::kIntentPickerPWAPersistence)},
4623
4624     {"intent-handling-sharing", flag_descriptions::kIntentHandlingSharingName,
4625      flag_descriptions::kIntentHandlingSharingDescription, kOsCrOS,
4626      FEATURE_VALUE_TYPE(features::kIntentHandlingSharing)},
4627 #endif  // defined(OS_CHROMEOS)
4628
4629 #if defined(OS_WIN)
4630     {"d3d11-video-decoder", flag_descriptions::kD3D11VideoDecoderName,
4631      flag_descriptions::kD3D11VideoDecoderDescription, kOsWin,
4632      FEATURE_VALUE_TYPE(media::kD3D11VideoDecoder)},
4633 #elif defined(OS_CHROMEOS)
4634     {"chromeos-video-decoder", flag_descriptions::kChromeosVideoDecoderName,
4635      flag_descriptions::kChromeosVideoDecoderDescription, kOsCrOS,
4636      FEATURE_VALUE_TYPE(media::kChromeosVideoDecoder)},
4637 #endif
4638
4639 #if defined(OS_ANDROID)
4640     {"autofill-assistant-chrome-entry",
4641      flag_descriptions::kAutofillAssistantChromeEntryName,
4642      flag_descriptions::kAutofillAssistantChromeEntryDescription, kOsAndroid,
4643      FEATURE_VALUE_TYPE(
4644          autofill_assistant::features::kAutofillAssistantChromeEntry)},
4645
4646     {"autofill-assistant-direct-actions",
4647      flag_descriptions::kAutofillAssistantDirectActionsName,
4648      flag_descriptions::kAutofillAssistantDirectActionsDescription, kOsAndroid,
4649      FEATURE_VALUE_TYPE(
4650          autofill_assistant::features::kAutofillAssistantDirectActions)},
4651 #endif  // defined(OS_ANDROID)
4652
4653     {"disable-best-effort-tasks",
4654      flag_descriptions::kDisableBestEffortTasksName,
4655      flag_descriptions::kDisableBestEffortTasksDescription, kOsAll,
4656      SINGLE_VALUE_TYPE(switches::kDisableBestEffortTasks)},
4657
4658 #if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_CHROMEOS)
4659     {"web-contents-occlusion", flag_descriptions::kWebContentsOcclusionName,
4660      flag_descriptions::kWebContentsOcclusionDescription,
4661      kOsWin | kOsMac | kOsCrOS,
4662      FEATURE_VALUE_TYPE(features::kWebContentsOcclusion)},
4663 #endif  // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_CHROMEOS)
4664
4665 #if defined(OS_ANDROID)
4666     {"mobile-identity-consistency",
4667      flag_descriptions::kMobileIdentityConsistencyName,
4668      flag_descriptions::kMobileIdentityConsistencyDescription, kOsAndroid,
4669      FEATURE_VALUE_TYPE(signin::kMobileIdentityConsistency)},
4670 #endif  // defined(OS_ANDROID)
4671
4672 #if defined(OS_ANDROID)
4673     {"sync-error-infobar", flag_descriptions::kSyncErrorInfoBarName,
4674      flag_descriptions::kSyncErrorInfoBarDescription, kOsAndroid,
4675      FEATURE_VALUE_TYPE(switches::kSyncErrorInfoBarAndroid)},
4676 #endif  // defined(OS_ANDROID)
4677
4678     {"autofill-use-improved-label-disambiguation",
4679      flag_descriptions::kAutofillUseImprovedLabelDisambiguationName,
4680      flag_descriptions::kAutofillUseImprovedLabelDisambiguationDescription,
4681      kOsAll,
4682      FEATURE_VALUE_TYPE(
4683          autofill::features::kAutofillUseImprovedLabelDisambiguation)},
4684
4685 #if defined(OS_ANDROID)
4686     {"cct-target-translate-language",
4687      flag_descriptions::kCCTTargetTranslateLanguageName,
4688      flag_descriptions::kCCTTargetTranslateLanguageDescription, kOsAndroid,
4689      FEATURE_VALUE_TYPE(chrome::android::kCCTTargetTranslateLanguage)},
4690 #endif
4691
4692     {"native-file-system-api", flag_descriptions::kNativeFileSystemAPIName,
4693      flag_descriptions::kNativeFileSystemAPIDescription, kOsDesktop,
4694      FEATURE_VALUE_TYPE(blink::features::kNativeFileSystemAPI)},
4695
4696     {"file-handling-api", flag_descriptions::kFileHandlingAPIName,
4697      flag_descriptions::kFileHandlingAPIDescription, kOsDesktop,
4698      FEATURE_VALUE_TYPE(blink::features::kFileHandlingAPI)},
4699
4700 #if defined(TOOLKIT_VIEWS)
4701     {"installable-ink-drop", flag_descriptions::kInstallableInkDropName,
4702      flag_descriptions::kInstallableInkDropDescription, kOsDesktop,
4703      FEATURE_VALUE_TYPE(views::kInstallableInkDropFeature)},
4704 #endif  // defined(TOOLKIT_VIEWS)
4705
4706 #if defined(OS_CHROMEOS)
4707     {"enable-assistant-launcher-integration",
4708      flag_descriptions::kEnableAssistantLauncherIntegrationName,
4709      flag_descriptions::kEnableAssistantLauncherIntegrationDescription, kOsCrOS,
4710      FEATURE_VALUE_TYPE(app_list_features::kEnableAssistantSearch)},
4711 #endif  // OS_CHROMEOS
4712
4713 #if defined(TOOLKIT_VIEWS)
4714     {"enable-md-rounded-corners-on-dialogs",
4715      flag_descriptions::kEnableMDRoundedCornersOnDialogsName,
4716      flag_descriptions::kEnableMDRoundedCornersOnDialogsDescription, kOsDesktop,
4717      FEATURE_VALUE_TYPE(views::features::kEnableMDRoundedCornersOnDialogs)},
4718
4719     {"enable-new-badge-on-menu-items",
4720      flag_descriptions::kEnableNewBadgeOnMenuItemsName,
4721      flag_descriptions::kEnableNewBadgeOnMenuItemsDescription, kOsDesktop,
4722      FEATURE_VALUE_TYPE(views::features::kEnableNewBadgeOnMenuItems)},
4723 #endif  // defined(TOOLKIT_VIEWS)
4724
4725     {"strict-origin-isolation", flag_descriptions::kStrictOriginIsolationName,
4726      flag_descriptions::kStrictOriginIsolationDescription, kOsAll,
4727      FEATURE_VALUE_TYPE(features::kStrictOriginIsolation)},
4728
4729 #if defined(OS_ANDROID)
4730     {"enable-logging-js-console-messages",
4731      flag_descriptions::kLogJsConsoleMessagesName,
4732      flag_descriptions::kLogJsConsoleMessagesDescription, kOsAndroid,
4733      FEATURE_VALUE_TYPE(features::kLogJsConsoleMessages)},
4734 #endif  // OS_ANDROID
4735
4736     {"enable-skia-renderer", flag_descriptions::kSkiaRendererName,
4737      flag_descriptions::kSkiaRendererDescription,
4738      kOsLinux | kOsWin | kOsAndroid,
4739      FEATURE_VALUE_TYPE(features::kUseSkiaRenderer)},
4740
4741 #if defined(OS_CHROMEOS)
4742     {"allow-disable-mouse-acceleration",
4743      flag_descriptions::kAllowDisableMouseAccelerationName,
4744      flag_descriptions::kAllowDisableMouseAccelerationDescription, kOsCrOS,
4745      FEATURE_VALUE_TYPE(features::kAllowDisableMouseAcceleration)},
4746
4747     {"allow-scroll-settings", flag_descriptions::kAllowScrollSettingsName,
4748      flag_descriptions::kAllowScrollSettingsDescription, kOsCrOS,
4749      FEATURE_VALUE_TYPE(chromeos::features::kAllowScrollSettings)},
4750
4751     {"enable-streamlined-usb-printer-setup",
4752      flag_descriptions::kStreamlinedUsbPrinterSetupName,
4753      flag_descriptions::kStreamlinedUsbPrinterSetupDescription, kOsCrOS,
4754      FEATURE_VALUE_TYPE(features::kStreamlinedUsbPrinterSetup)},
4755
4756     {"enable-media-session-notifications",
4757      flag_descriptions::kMediaSessionNotificationsName,
4758      flag_descriptions::kMediaSessionNotificationsDescription, kOsCrOS,
4759      FEATURE_VALUE_TYPE(ash::features::kMediaSessionNotification)},
4760
4761     {"enable-neural-stylus-palm-rejection",
4762      flag_descriptions::kEnableNeuralStylusPalmRejectionName,
4763      flag_descriptions::kEnableNeuralStylusPalmRejectionDescription, kOsCrOS,
4764      FEATURE_VALUE_TYPE(ui::kEnableNeuralPalmDetectionFilter)},
4765
4766     {"enable-palm-max-touch-major",
4767      flag_descriptions::kEnablePalmOnMaxTouchMajorName,
4768      flag_descriptions::kEnablePalmOnMaxTouchMajorDescription, kOsCrOS,
4769      FEATURE_VALUE_TYPE(ui::kEnablePalmOnMaxTouchMajor)},
4770
4771     {"enable-palm-tool-type-palm",
4772      flag_descriptions::kEnablePalmOnToolTypePalmName,
4773      flag_descriptions::kEnablePalmOnToolTypePalmName, kOsCrOS,
4774      FEATURE_VALUE_TYPE(ui::kEnablePalmOnToolTypePalm)},
4775
4776     {"enable-heuristic-stylus-palm-rejection",
4777      flag_descriptions::kEnableHeuristicStylusPalmRejectionName,
4778      flag_descriptions::kEnableHeuristicStylusPalmRejectionDescription, kOsCrOS,
4779      FEATURE_VALUE_TYPE(ui::kEnableHeuristicPalmDetectionFilter)},
4780
4781     {"enable-hide-arc-media-notifications",
4782      flag_descriptions::kHideArcMediaNotificationsName,
4783      flag_descriptions::kHideArcMediaNotificationsDescription, kOsCrOS,
4784      FEATURE_VALUE_TYPE(ash::features::kHideArcMediaNotifications)},
4785
4786     {"reduce-display-notifications",
4787      flag_descriptions::kReduceDisplayNotificationsName,
4788      flag_descriptions::kReduceDisplayNotificationsDescription, kOsCrOS,
4789      FEATURE_VALUE_TYPE(ash::features::kReduceDisplayNotifications)},
4790
4791     {"use-search-click-for-right-click",
4792      flag_descriptions::kUseSearchClickForRightClickName,
4793      flag_descriptions::kUseSearchClickForRightClickDescription, kOsCrOS,
4794      FEATURE_VALUE_TYPE(chromeos::features::kUseSearchClickForRightClick)},
4795
4796     {"show-metered-toggle", flag_descriptions::kMeteredShowToggleName,
4797      flag_descriptions::kMeteredShowToggleDescription, kOsCrOS,
4798      FEATURE_VALUE_TYPE(features::kMeteredShowToggle)},
4799
4800     {"enable-print-server-ui", flag_descriptions::kPrintServerUiName,
4801      flag_descriptions::kPrintServerUiDescription, kOsCrOS,
4802      FEATURE_VALUE_TYPE(features::kPrintServerUi)},
4803
4804     {"printer-status", flag_descriptions::kPrinterStatusName,
4805      flag_descriptions::kPrinterStatusDescription, kOsCrOS,
4806      FEATURE_VALUE_TYPE(chromeos::features::kPrinterStatus)},
4807
4808     {"print-job-management-app", flag_descriptions::kPrintJobManagementAppName,
4809      flag_descriptions::kPrintJobManagementAppDescription, kOsCrOS,
4810      FEATURE_VALUE_TYPE(chromeos::features::kPrintJobManagementApp)},
4811
4812     {"display-identification", flag_descriptions::kDisplayIdentificationName,
4813      flag_descriptions::kDisplayIdentificationDescription, kOsCrOS,
4814      FEATURE_VALUE_TYPE(ash::features::kDisplayIdentification)},
4815 #endif  // OS_CHROMEOS
4816
4817     {"autofill-off-no-server-data",
4818      flag_descriptions::kAutofillOffNoServerDataName,
4819      flag_descriptions::kAutofillOffNoServerDataDescription, kOsAll,
4820      FEATURE_VALUE_TYPE(autofill::features::kAutofillOffNoServerData)},
4821
4822     {"enable-portals", flag_descriptions::kEnablePortalsName,
4823      flag_descriptions::kEnablePortalsDescription, kOsAll,
4824      FEATURE_VALUE_TYPE(blink::features::kPortals)},
4825     {"enable-portals-cross-origin",
4826      flag_descriptions::kEnablePortalsCrossOriginName,
4827      flag_descriptions::kEnablePortalsCrossOriginDescription, kOsAll,
4828      FEATURE_VALUE_TYPE(blink::features::kPortalsCrossOrigin)},
4829     {"enable-autofill-credit-card-authentication",
4830      flag_descriptions::kEnableAutofillCreditCardAuthenticationName,
4831      flag_descriptions::kEnableAutofillCreditCardAuthenticationDescription,
4832      kOsAll,
4833      FEATURE_VALUE_TYPE(autofill::features::kAutofillCreditCardAuthentication)},
4834
4835 #if defined(OS_MACOSX)
4836     {"mac-system-media-permissions-info-ui",
4837      flag_descriptions::kMacSystemMediaPermissionsInfoUiName,
4838      flag_descriptions::kMacSystemMediaPermissionsInfoUiDescription, kOsMac,
4839      FEATURE_VALUE_TYPE(features::kMacSystemMediaPermissionsInfoUi)},
4840 #endif  // defined(OS_MACOSX)
4841
4842     {"storage-access-api", flag_descriptions::kStorageAccessAPIName,
4843      flag_descriptions::kStorageAccessAPIDescription, kOsAll,
4844      FEATURE_VALUE_TYPE(blink::features::kStorageAccessAPI)},
4845
4846     {"same-site-by-default-cookies",
4847      flag_descriptions::kSameSiteByDefaultCookiesName,
4848      flag_descriptions::kSameSiteByDefaultCookiesDescription, kOsAll,
4849      FEATURE_VALUE_TYPE(net::features::kSameSiteByDefaultCookies)},
4850
4851     {"enable-removing-all-third-party-cookies",
4852      flag_descriptions::kEnableRemovingAllThirdPartyCookiesName,
4853      flag_descriptions::kEnableRemovingAllThirdPartyCookiesDescription,
4854      kOsDesktop,
4855      FEATURE_VALUE_TYPE(
4856          browsing_data::features::kEnableRemovingAllThirdPartyCookies)},
4857
4858     {"cookies-without-same-site-must-be-secure",
4859      flag_descriptions::kCookiesWithoutSameSiteMustBeSecureName,
4860      flag_descriptions::kCookiesWithoutSameSiteMustBeSecureDescription, kOsAll,
4861      FEATURE_VALUE_TYPE(net::features::kCookiesWithoutSameSiteMustBeSecure)},
4862
4863 #if defined(OS_CHROMEOS)
4864     {"enterprise-reporting-in-chromeos",
4865      flag_descriptions::kEnterpriseReportingInChromeOSName,
4866      flag_descriptions::kEnterpriseReportingInChromeOSDescription, kOsCrOS,
4867      FEATURE_VALUE_TYPE(features::kEnterpriseReportingInChromeOS)},
4868 #endif  // !defined(OS_CHROMEOS)
4869
4870     {"enable-unsafe-webgpu", flag_descriptions::kUnsafeWebGPUName,
4871      flag_descriptions::kUnsafeWebGPUDescription, kOsMac | kOsWin,
4872      SINGLE_VALUE_TYPE(switches::kEnableUnsafeWebGPU)},
4873
4874 #if defined(OS_ANDROID)
4875     {"autofill-use-mobile-label-disambiguation",
4876      flag_descriptions::kAutofillUseMobileLabelDisambiguationName,
4877      flag_descriptions::kAutofillUseMobileLabelDisambiguationDescription,
4878      kOsAndroid,
4879      FEATURE_WITH_PARAMS_VALUE_TYPE(
4880          autofill::features::kAutofillUseMobileLabelDisambiguation,
4881          kAutofillUseMobileLabelDisambiguationVariations,
4882          "AutofillUseMobileLabelDisambiguation")},
4883 #endif  // defined(OS_ANDROID)
4884
4885     {"autofill-prune-suggestions",
4886      flag_descriptions::kAutofillPruneSuggestionsName,
4887      flag_descriptions::kAutofillPruneSuggestionsDescription, kOsAll,
4888      FEATURE_VALUE_TYPE(autofill::features::kAutofillPruneSuggestions)},
4889
4890     {"allow-popups-during-page-unload",
4891      flag_descriptions::kAllowPopupsDuringPageUnloadName,
4892      flag_descriptions::kAllowPopupsDuringPageUnloadDescription,
4893      kOsAll | kDeprecated,
4894      FEATURE_VALUE_TYPE(features::kAllowPopupsDuringPageUnload)},
4895
4896 #if defined(OS_CHROMEOS)
4897     {"enable-advanced-ppd-attributes",
4898      flag_descriptions::kEnableAdvancedPpdAttributesName,
4899      flag_descriptions::kEnableAdvancedPpdAttributesDescription, kOsCrOS,
4900      FEATURE_VALUE_TYPE(printing::features::kAdvancedPpdAttributes)},
4901 #endif  // defined(OS_CHROMEOS)
4902
4903     {"allow-sync-xhr-in-page-dismissal",
4904      flag_descriptions::kAllowSyncXHRInPageDismissalName,
4905      flag_descriptions::kAllowSyncXHRInPageDismissalDescription,
4906      kOsAll | kDeprecated,
4907      FEATURE_VALUE_TYPE(blink::features::kAllowSyncXHRInPageDismissal)},
4908
4909 #if !defined(OS_ANDROID)
4910     {"form-controls-dark-mode", flag_descriptions::kFormControlsDarkModeName,
4911      flag_descriptions::kFormControlsDarkModeDescription, kOsDesktop,
4912      FEATURE_VALUE_TYPE(features::kCSSColorSchemeUARendering)},
4913 #endif  // !defined(OS_ANDROID)
4914
4915     {"form-controls-refresh", flag_descriptions::kFormControlsRefreshName,
4916      flag_descriptions::kFormControlsRefreshDescription, kOsAll,
4917      FEATURE_VALUE_TYPE(features::kFormControlsRefresh)},
4918
4919 #if defined(OS_CHROMEOS)
4920     {"auto-screen-brightness", flag_descriptions::kAutoScreenBrightnessName,
4921      flag_descriptions::kAutoScreenBrightnessDescription, kOsCrOS,
4922      FEATURE_VALUE_TYPE(chromeos::features::kAutoScreenBrightness)},
4923     {"sync-wifi-configurations", flag_descriptions::kSyncWifiConfigurationsName,
4924      flag_descriptions::kSyncWifiConfigurationsDescription, kOsCrOS,
4925      FEATURE_VALUE_TYPE(switches::kSyncWifiConfigurations)},
4926 #endif  // defined(OS_CHROMEOS)
4927
4928     {"audio-worklet-realtime-thread",
4929      flag_descriptions::kAudioWorkletRealtimeThreadName,
4930      flag_descriptions::kAudioWorkletRealtimeThreadDescription, kOsAll,
4931      FEATURE_VALUE_TYPE(blink::features::kAudioWorkletRealtimeThread)},
4932
4933 #if defined(OS_CHROMEOS)
4934     {"release-notes", flag_descriptions::kReleaseNotesName,
4935      flag_descriptions::kReleaseNotesDescription, kOsCrOS,
4936      FEATURE_VALUE_TYPE(chromeos::features::kReleaseNotes)},
4937 #endif  // defined(OS_CHROMEOS)
4938
4939 #if defined(OS_CHROMEOS)
4940     {"maintain-shelf-state-overview",
4941      flag_descriptions::kMaintainShelfStateWhenEnteringOverviewName,
4942      flag_descriptions::kMaintainShelfStateWhenEnteringOverviewDescription,
4943      kOsCrOS,
4944      FEATURE_VALUE_TYPE(
4945          ash::features::kMaintainShelfStateWhenEnteringOverview)},
4946 #endif  // defined(OS_CHROMEOS)
4947
4948 #if defined(OS_CHROMEOS)
4949     {"smart-dim-model-v3", flag_descriptions::kSmartDimModelV3Name,
4950      flag_descriptions::kSmartDimModelV3Description, kOsCrOS,
4951      FEATURE_VALUE_TYPE(chromeos::features::kSmartDimModelV3)},
4952     {"smart-dim-new-ml-agent", flag_descriptions::kSmartDimNewMlAgentName,
4953      flag_descriptions::kSmartDimNewMlAgentDescription, kOsCrOS,
4954      FEATURE_VALUE_TYPE(chromeos::features::kSmartDimNewMlAgent)},
4955 #endif  // defined(OS_CHROMEOS)
4956
4957 #if defined(OS_ANDROID)
4958     {"privacy-elevated-android", flag_descriptions::kPrivacyElevatedAndroidName,
4959      flag_descriptions::kPrivacyElevatedAndroidDescription, kOsAndroid,
4960      FEATURE_VALUE_TYPE(features::kPrivacyElevatedAndroid)},
4961 #endif
4962
4963     {"privacy-settings-redesign",
4964      flag_descriptions::kPrivacySettingsRedesignName,
4965      flag_descriptions::kPrivacySettingsRedesignDescription, kOsDesktop,
4966      FEATURE_VALUE_TYPE(features::kPrivacySettingsRedesign)},
4967
4968 #if defined(OS_ANDROID)
4969     {"safety-check-android", flag_descriptions::kSafetyCheckAndroidName,
4970      flag_descriptions::kSafetyCheckAndroidDescription, kOsAndroid,
4971      FEATURE_VALUE_TYPE(features::kSafetyCheckAndroid)},
4972 #endif
4973
4974 #if defined(OS_CHROMEOS)
4975     {"gesture-properties-dbus-service",
4976      flag_descriptions::kEnableGesturePropertiesDBusServiceName,
4977      flag_descriptions::kEnableGesturePropertiesDBusServiceDescription, kOsCrOS,
4978      FEATURE_VALUE_TYPE(chromeos::features::kGesturePropertiesDBusService)},
4979 #endif  // defined(OS_CHROMEOS)
4980
4981     {"cookie-deprecation-messages",
4982      flag_descriptions::kCookieDeprecationMessagesName,
4983      flag_descriptions::kCookieDeprecationMessagesDescription, kOsAll,
4984      FEATURE_VALUE_TYPE(features::kCookieDeprecationMessages)},
4985
4986     {"ev-details-in-page-info", flag_descriptions::kEvDetailsInPageInfoName,
4987      flag_descriptions::kEvDetailsInPageInfoDescription, kOsDesktop,
4988      FEATURE_VALUE_TYPE(features::kEvDetailsInPageInfo)},
4989
4990     {"enable-autofill-credit-card-upload-feedback",
4991      flag_descriptions::kEnableAutofillCreditCardUploadFeedbackName,
4992      flag_descriptions::kEnableAutofillCreditCardUploadFeedbackDescription,
4993      kOsWin | kOsMac | kOsLinux,
4994      FEATURE_VALUE_TYPE(autofill::features::kAutofillCreditCardUploadFeedback)},
4995
4996     {"font-access", flag_descriptions::kFontAccessAPIName,
4997      flag_descriptions::kFontAccessAPIDescription, kOsAll,
4998      FEATURE_VALUE_TYPE(blink::features::kFontAccess)},
4999
5000 #if defined(OS_CHROMEOS)
5001     {"enable-parental-controls-settings",
5002      flag_descriptions::kEnableParentalControlsSettingsName,
5003      flag_descriptions::kEnableParentalControlsSettingsDescription, kOsCrOS,
5004      FEATURE_VALUE_TYPE(chromeos::features::kParentalControlsSettings)},
5005 #endif  // defined(OS_CHROMEOS)
5006
5007     {"mouse-subframe-no-implicit-capture",
5008      flag_descriptions::kMouseSubframeNoImplicitCaptureName,
5009      flag_descriptions::kMouseSubframeNoImplicitCaptureDescription, kOsAll,
5010      FEATURE_VALUE_TYPE(features::kMouseSubframeNoImplicitCapture)},
5011
5012 #if defined(OS_ANDROID)
5013     {"touch-to-fill", flag_descriptions::kAutofillTouchToFillName,
5014      flag_descriptions::kAutofillTouchToFillDescription, kOsAndroid,
5015      FEATURE_VALUE_TYPE(autofill::features::kAutofillTouchToFill)},
5016 #endif  // defined(OS_ANDROID)
5017
5018     {"enable-sync-trusted-vault",
5019      flag_descriptions::kEnableSyncTrustedVaultName,
5020      flag_descriptions::kEnableSyncTrustedVaultDescription, kOsAll,
5021      FEATURE_VALUE_TYPE(switches::kSyncSupportTrustedVaultPassphrase)},
5022
5023 #if defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
5024     {"global-media-controls", flag_descriptions::kGlobalMediaControlsName,
5025      flag_descriptions::kGlobalMediaControlsDescription,
5026      kOsWin | kOsMac | kOsLinux,
5027      FEATURE_VALUE_TYPE(media::kGlobalMediaControls)},
5028
5029     {"global-media-controls-for-cast",
5030      flag_descriptions::kGlobalMediaControlsForCastName,
5031      flag_descriptions::kGlobalMediaControlsForCastDescription,
5032      kOsWin | kOsMac | kOsLinux,
5033      FEATURE_VALUE_TYPE(media::kGlobalMediaControlsForCast)},
5034
5035     {"global-media-controls-picture-in-picture",
5036      flag_descriptions::kGlobalMediaControlsPictureInPictureName,
5037      flag_descriptions::kGlobalMediaControlsPictureInPictureDescription,
5038      kOsWin | kOsMac | kOsLinux | kOsCrOS,
5039      FEATURE_VALUE_TYPE(media::kGlobalMediaControlsPictureInPicture)},
5040
5041     {"global-media-controls-seamless-transfer",
5042      flag_descriptions::kGlobalMediaControlsSeamlessTransferName,
5043      flag_descriptions::kGlobalMediaControlsSeamlessTransferDescription,
5044      kOsWin | kOsMac | kOsLinux,
5045      FEATURE_VALUE_TYPE(media::kGlobalMediaControlsSeamlessTransfer)},
5046 #endif  // defined(OS_WIN) || defined(OS_MACOSX) || defined(OS_LINUX)
5047
5048 #if BUILDFLAG(ENABLE_SPELLCHECK) && defined(OS_WIN)
5049     {"win-use-native-spellchecker",
5050      flag_descriptions::kWinUseBrowserSpellCheckerName,
5051      flag_descriptions::kWinUseBrowserSpellCheckerDescription, kOsWin,
5052      FEATURE_VALUE_TYPE(spellcheck::kWinUseBrowserSpellChecker)},
5053 #endif  // BUILDFLAG(ENABLE_SPELLCHECK) && defined(OS_WIN)
5054
5055     {"safety-tips", flag_descriptions::kSafetyTipName,
5056      flag_descriptions::kSafetyTipDescription, kOsAll,
5057      FEATURE_VALUE_TYPE(security_state::features::kSafetyTipUI)},
5058
5059 #if defined(OS_CHROMEOS)
5060     {"crostini-webui-upgrader", flag_descriptions::kCrostiniWebUIUpgraderName,
5061      flag_descriptions::kCrostiniWebUIUpgraderDescription, kOsCrOS,
5062      FEATURE_VALUE_TYPE(chromeos::features::kCrostiniWebUIUpgrader)},
5063 #endif  // OS_CHROMEOS
5064
5065     {"turn-off-streaming-media-caching",
5066      flag_descriptions::kTurnOffStreamingMediaCachingName,
5067      flag_descriptions::kTurnOffStreamingMediaCachingDescription, kOsAll,
5068      FEATURE_VALUE_TYPE(net::features::kTurnOffStreamingMediaCaching)},
5069
5070 #if defined(OS_ANDROID)
5071     {"password-manager-onboarding-android",
5072      flag_descriptions::kPasswordManagerOnboardingAndroidName,
5073      flag_descriptions::kPasswordManagerOnboardingAndroidDescription,
5074      kOsAndroid,
5075      FEATURE_VALUE_TYPE(
5076          password_manager::features::kPasswordManagerOnboardingAndroid)},
5077 #endif  // defined(OS_ANDROID)
5078
5079     {"enable-cooperative-scheduling",
5080      flag_descriptions::kCooperativeSchedulingName,
5081      flag_descriptions::kCooperativeSchedulingDescription, kOsAll,
5082      FEATURE_VALUE_TYPE(features::kCooperativeScheduling)},
5083
5084     {"enable-defer-all-script", flag_descriptions::kEnableDeferAllScriptName,
5085      flag_descriptions::kEnableDeferAllScriptDescription, kOsAll,
5086      FEATURE_VALUE_TYPE(previews::features::kDeferAllScriptPreviews)},
5087     {"enable-defer-all-script-without-optimization-hints",
5088      flag_descriptions::kEnableDeferAllScriptWithoutOptimizationHintsName,
5089      flag_descriptions::
5090          kEnableDeferAllScriptWithoutOptimizationHintsDescription,
5091      kOsAll,
5092      SINGLE_VALUE_TYPE(
5093          previews::switches::kEnableDeferAllScriptWithoutOptimizationHints)},
5094
5095 #if defined(OS_CHROMEOS)
5096     {"enable-edu-coexistence", flag_descriptions::kEnableEduCoexistenceName,
5097      flag_descriptions::kEnableEduCoexistenceDescription, kOsCrOS,
5098      FEATURE_VALUE_TYPE(chromeos::features::kEduCoexistence)},
5099 #endif  // OS_CHROMEOS
5100
5101 #if defined(OS_CHROMEOS)
5102     {"enable-edu-coexistence-consent-log",
5103      flag_descriptions::kEnableEduCoexistenceConsentLogName,
5104      flag_descriptions::kEnableEduCoexistenceConsentLogDescription, kOsCrOS,
5105      FEATURE_VALUE_TYPE(chromeos::features::kEduCoexistenceConsentLog)},
5106 #endif  // OS_CHROMEOS
5107
5108 #if defined(OS_CHROMEOS)
5109     {"enable-assistant-routines",
5110      flag_descriptions::kEnableAssistantRoutinesName,
5111      flag_descriptions::kEnableAssistantRoutinesDescription, kOsCrOS,
5112      FEATURE_VALUE_TYPE(chromeos::assistant::features::kAssistantRoutines)},
5113 #endif  // OS_CHROMEOS
5114
5115 #if defined(OS_CHROMEOS)
5116     {"gaia-action-buttons", flag_descriptions::kGaiaActionButtonsName,
5117      flag_descriptions::kGaiaActionButtonsDescription, kOsCrOSOwnerOnly,
5118      FEATURE_VALUE_TYPE(chromeos::features::kGaiaActionButtons)},
5119 #endif  // defined(OS_CHROMEOS)
5120
5121     {"notification-scheduler-debug-options",
5122      flag_descriptions::kNotificationSchedulerDebugOptionName,
5123      flag_descriptions::kNotificationSchedulerDebugOptionDescription,
5124      kOsAndroid, MULTI_VALUE_TYPE(kNotificationSchedulerChoices)},
5125
5126 #if defined(OS_ANDROID)
5127     {"usage-stats", flag_descriptions::kUsageStatsName,
5128      flag_descriptions::kUsageStatsDescription, kOsAndroid,
5129      FEATURE_VALUE_TYPE(chrome::android::kUsageStatsFeature)},
5130 #endif  // defined(OS_ANDROID)
5131
5132 #if defined(OS_CHROMEOS)
5133     {"lock-screen-media-controls",
5134      flag_descriptions::kLockScreenMediaControlsName,
5135      flag_descriptions::kLockScreenMediaControlsDescription, kOsCrOS,
5136      FEATURE_VALUE_TYPE(ash::features::kLockScreenMediaControls)},
5137 #endif  // defined(OS_CHROMEOS)
5138
5139 #if defined(OS_CHROMEOS)
5140     {"contextual-nudges", flag_descriptions::kContextualNudgesName,
5141      flag_descriptions::kContextualNudgesDescription, kOsCrOS,
5142      FEATURE_VALUE_TYPE(ash::features::kContextualNudges)},
5143 #endif  // defined(OS_CHROMEOS)
5144
5145     {"policy-atomic-group-enabled",
5146      flag_descriptions::kPolicyAtomicGroupsEnabledName,
5147      flag_descriptions::kPolicyAtomicGroupsEnabledDescription, kOsAll,
5148      FEATURE_VALUE_TYPE(policy::features::kPolicyAtomicGroup)},
5149
5150     {"decode-jpeg-images-to-yuv",
5151      flag_descriptions::kDecodeJpeg420ImagesToYUVName,
5152      flag_descriptions::kDecodeJpeg420ImagesToYUVDescription, kOsAll,
5153      FEATURE_VALUE_TYPE(blink::features::kDecodeJpeg420ImagesToYUV)},
5154
5155     {"decode-webp-images-to-yuv",
5156      flag_descriptions::kDecodeLossyWebPImagesToYUVName,
5157      flag_descriptions::kDecodeLossyWebPImagesToYUVDescription, kOsAll,
5158      FEATURE_VALUE_TYPE(blink::features::kDecodeLossyWebPImagesToYUV)},
5159
5160     {"dns-httpssvc", flag_descriptions::kDnsHttpssvcName,
5161      flag_descriptions::kDnsHttpssvcDescription,
5162      kOsMac | kOsWin | kOsCrOS | kOsAndroid,
5163      FEATURE_VALUE_TYPE(net::features::kDnsHttpssvc)},
5164
5165     {"dns-over-https", flag_descriptions::kDnsOverHttpsName,
5166      flag_descriptions::kDnsOverHttpsDescription,
5167      kOsMac | kOsWin | kOsCrOS | kOsAndroid,
5168      FEATURE_VALUE_TYPE(features::kDnsOverHttps)},
5169
5170     {"web-bundles", flag_descriptions::kWebBundlesName,
5171      flag_descriptions::kWebBundlesDescription, kOsAll,
5172      FEATURE_VALUE_TYPE(features::kWebBundles)},
5173
5174 #if defined(OS_ANDROID)
5175     {"web-otp-backend", flag_descriptions::kWebOtpBackendName,
5176      flag_descriptions::kWebOtpBackendDescription, kOsAndroid,
5177      MULTI_VALUE_TYPE(kWebOtpBackendChoices)},
5178
5179     {"darken-websites-checkbox-in-themes-setting",
5180      flag_descriptions::kDarkenWebsitesCheckboxInThemesSettingName,
5181      flag_descriptions::kDarkenWebsitesCheckboxInThemesSettingDescription,
5182      kOsAndroid,
5183      FEATURE_VALUE_TYPE(
5184          chrome::android::kDarkenWebsitesCheckboxInThemesSetting)},
5185 #endif  // defined(OS_ANDROID)
5186
5187     {"enable-autofill-upi-vpa", flag_descriptions::kAutofillSaveAndFillVPAName,
5188      flag_descriptions::kAutofillSaveAndFillVPADescription, kOsAll,
5189      FEATURE_VALUE_TYPE(autofill::features::kAutofillSaveAndFillVPA)},
5190
5191     {"quiet-notification-prompts",
5192      flag_descriptions::kQuietNotificationPromptsName,
5193      flag_descriptions::kQuietNotificationPromptsDescription, kOsAll,
5194      FEATURE_WITH_PARAMS_VALUE_TYPE(features::kQuietNotificationPrompts,
5195                                     kQuietNotificationPromptsVariations,
5196                                     "QuietNotificationPrompts")},
5197
5198 #if defined(OS_ANDROID)
5199     {"context-menu-search-with-google-lens",
5200      flag_descriptions::kContextMenuSearchWithGoogleLensName,
5201      flag_descriptions::kContextMenuSearchWithGoogleLensDescription, kOsAndroid,
5202      FEATURE_VALUE_TYPE(chrome::android::kContextMenuSearchWithGoogleLens)},
5203
5204     {"context-menu-shop-with-google-lens",
5205      flag_descriptions::kContextMenuShopWithGoogleLensName,
5206      flag_descriptions::kContextMenuShopWithGoogleLensDescription, kOsAndroid,
5207      FEATURE_WITH_PARAMS_VALUE_TYPE(
5208          chrome::android::kContextMenuShopWithGoogleLens,
5209          kContextMenuShopWithGoogleLensShopVariations,
5210          "ContextMenuShopWithGoogleLens")},
5211
5212     {"context-menu-search-and-shop-with-google-lens",
5213      flag_descriptions::kContextMenuSearchAndShopWithGoogleLensName,
5214      flag_descriptions::kContextMenuSearchAndShopWithGoogleLensDescription,
5215      kOsAndroid,
5216      FEATURE_VALUE_TYPE(
5217          chrome::android::kContextMenuSearchAndShopWithGoogleLens)},
5218 #endif  // defined(OS_ANDROID)
5219
5220 #if defined(OS_CHROMEOS)
5221     {"launcher-settings-search", flag_descriptions::kLauncherSettingsSearchName,
5222      flag_descriptions::kLauncherSettingsSearchDescription, kOsCrOS,
5223      FEATURE_VALUE_TYPE(app_list_features::kLauncherSettingsSearch)},
5224
5225     {"enable-suggested-files", flag_descriptions::kEnableSuggestedFilesName,
5226      flag_descriptions::kEnableSuggestedFilesDescription, kOsCrOS,
5227      FEATURE_VALUE_TYPE(app_list_features::kEnableSuggestedFiles)},
5228
5229     {"zero-state-files", flag_descriptions::kZeroStateFilesName,
5230      flag_descriptions::kZeroStateFilesDescription, kOsCrOS,
5231      FEATURE_VALUE_TYPE(app_list_features::kEnableZeroStateMixedTypesRanker)},
5232
5233     {"aggregated-ml-app-ranking",
5234      flag_descriptions::kAggregatedMlAppRankingName,
5235      flag_descriptions::kAggregatedMlAppRankingDescription, kOsCrOS,
5236      FEATURE_VALUE_TYPE(app_list_features::kEnableAggregatedMlAppRanking)},
5237
5238     {"fuzzy-app-search", flag_descriptions::kFuzzyAppSearchName,
5239      flag_descriptions::kFuzzyAppSearchDescription, kOsCrOS,
5240      FEATURE_VALUE_TYPE(app_list_features::kEnableFuzzyAppSearch)},
5241
5242     {"aggregated-ml-search-ranking",
5243      flag_descriptions::kAggregatedMlSearchRankingName,
5244      flag_descriptions::kAggregatedMlSearchRankingDescription, kOsCrOS,
5245      FEATURE_VALUE_TYPE(app_list_features::kEnableAggregatedMlSearchRanking)},
5246
5247 #endif  // defined(OS_CHROMEOS)
5248
5249     {"passwords-account-storage",
5250      flag_descriptions::kEnablePasswordsAccountStorageName,
5251      flag_descriptions::kEnablePasswordsAccountStorageDescription,
5252      kOsWin | kOsMac | kOsLinux,
5253      FEATURE_VALUE_TYPE(
5254          password_manager::features::kEnablePasswordsAccountStorage)},
5255
5256     {"improved-cookie-controls", flag_descriptions::kImprovedCookieControlsName,
5257      flag_descriptions::kImprovedCookieControlsDescription, kOsAll,
5258      FEATURE_VALUE_TYPE(content_settings::kImprovedCookieControls)},
5259
5260     {"improved-cookie-controls-for-third-party-cookie-blocking",
5261      flag_descriptions::kImprovedCookieControlsForThirdPartyCookieBlockingName,
5262      flag_descriptions::
5263          kImprovedCookieControlsForThirdPartyCookieBlockingDescription,
5264      kOsAll,
5265      FEATURE_VALUE_TYPE(
5266          content_settings::kImprovedCookieControlsForThirdPartyCookieBlocking)},
5267
5268     {"autofill-always-return-cloud-tokenized-card",
5269      flag_descriptions::kAutofillAlwaysReturnCloudTokenizedCardName,
5270      flag_descriptions::kAutofillAlwaysReturnCloudTokenizedCardDescription,
5271      kOsAll,
5272      FEATURE_VALUE_TYPE(
5273          autofill::features::kAutofillAlwaysReturnCloudTokenizedCard)},
5274
5275     {"back-forward-cache", flag_descriptions::kBackForwardCacheName,
5276      flag_descriptions::kBackForwardCacheDescription, kOsAll,
5277      FEATURE_WITH_PARAMS_VALUE_TYPE(features::kBackForwardCache,
5278                                     kBackForwardCacheVariations,
5279                                     "BackForwardCache")},
5280
5281 #if defined(OS_ANDROID)
5282     {"context-menu-copy-image", flag_descriptions::kContextMenuCopyImageName,
5283      flag_descriptions::kContextMenuCopyImageDescription, kOsAndroid,
5284      FEATURE_VALUE_TYPE(chrome::android::kContextMenuCopyImage)},
5285     {"enable-clipboard-provider-image-suggestions",
5286      flag_descriptions::kEnableClipboardProviderImageSuggestionsName,
5287      flag_descriptions::kEnableClipboardProviderImageSuggestionsDescription,
5288      kOsAndroid,
5289      FEATURE_WITH_PARAMS_VALUE_TYPE(
5290          omnibox::kEnableClipboardProviderImageSuggestions,
5291          kOmniboxImageSearchSuggestionThumbnailVariation,
5292          "OmniboxEnableClipboardProviderImageSuggestions")},
5293 #endif  // defined(OS_ANDROID)
5294
5295     {"impulse-scroll-animations",
5296      flag_descriptions::kImpulseScrollAnimationsName,
5297      flag_descriptions::kImpulseScrollAnimationsDescription, kOsAll,
5298      FEATURE_VALUE_TYPE(features::kImpulseScrollAnimations)},
5299     {"texture-layer-skip-wait-for-activation",
5300      flag_descriptions::kTextureLayerSkipWaitForActivationName,
5301      flag_descriptions::kTextureLayerSkipWaitForActivationDescription, kOsAll,
5302      FEATURE_VALUE_TYPE(features::kTextureLayerSkipWaitForActivation)},
5303     {"percent-based-scrolling", flag_descriptions::kPercentBasedScrollingName,
5304      flag_descriptions::kPercentBasedScrollingDescription, kOsAll,
5305      FEATURE_VALUE_TYPE(features::kPercentBasedScrolling)},
5306
5307     {"scroll-unification", flag_descriptions::kScrollUnificationName,
5308      flag_descriptions::kScrollUnificationDescription, kOsAll,
5309      FEATURE_VALUE_TYPE(features::kScrollUnification)},
5310
5311 #if defined(OS_WIN)
5312     {"elastic-overscroll-win", flag_descriptions::kElasticOverscrollWinName,
5313      flag_descriptions::kElasticOverscrollWinDescription, kOsWin,
5314      FEATURE_VALUE_TYPE(features::kElasticOverscrollWin)},
5315 #endif
5316
5317 #if !defined(OS_ANDROID)
5318     {"show-legacy-tls-warnings", flag_descriptions::kLegacyTLSWarningsName,
5319      flag_descriptions::kLegacyTLSWarningsDescription, kOsDesktop,
5320      FEATURE_VALUE_TYPE(security_state::features::kLegacyTLSWarnings)},
5321 #endif
5322
5323 #if defined(OS_CHROMEOS)
5324     {"enable-assistant-aec", flag_descriptions::kEnableGoogleAssistantAecName,
5325      flag_descriptions::kEnableGoogleAssistantAecDescription, kOsCrOS,
5326      FEATURE_VALUE_TYPE(chromeos::assistant::features::kAssistantAudioEraser)},
5327 #endif
5328
5329 #if defined(OS_WIN)
5330     {"enable-winrt-geolocation-implementation",
5331      flag_descriptions::kWinrtGeolocationImplementationName,
5332      flag_descriptions::kWinrtGeolocationImplementationDescription, kOsWin,
5333      FEATURE_VALUE_TYPE(features::kWinrtGeolocationImplementation)},
5334 #endif
5335
5336 #if defined(OS_MACOSX)
5337     {"enable-core-location-implementation",
5338      flag_descriptions::kMacCoreLocationImplementationName,
5339      flag_descriptions::kMacCoreLocationImplementationDescription, kOsMac,
5340      FEATURE_VALUE_TYPE(features::kMacCoreLocationImplementation)},
5341 #endif
5342
5343 #if defined(OS_CHROMEOS)
5344     {"exo-pointer-lock", flag_descriptions::kExoPointerLockName,
5345      flag_descriptions::kExoPointerLockDescription, kOsCrOS,
5346      FEATURE_VALUE_TYPE(chromeos::features::kExoPointerLock)},
5347 #endif  // defined(OS_CHROMEOS)
5348
5349 #if defined(OS_MACOSX)
5350     {"metal", flag_descriptions::kMetalName,
5351      flag_descriptions::kMetalDescription, kOsMac,
5352      FEATURE_VALUE_TYPE(features::kMetal)},
5353 #endif
5354
5355     {"enable-de-jelly", flag_descriptions::kEnableDeJellyName,
5356      flag_descriptions::kEnableDeJellyDescription, kOsAll,
5357      SINGLE_VALUE_TYPE(switches::kEnableDeJelly)},
5358
5359 #if defined(OS_CHROMEOS)
5360     {"enable-cros-action-recorder",
5361      flag_descriptions::kEnableCrOSActionRecorderName,
5362      flag_descriptions::kEnableCrOSActionRecorderDescription, kOsCrOS,
5363      MULTI_VALUE_TYPE(kEnableCrOSActionRecorderChoices)},
5364 #endif  // defined(OS_CHROMEOS)
5365
5366 #if !defined(OS_ANDROID)
5367     {"mix-browser-type-tabs", flag_descriptions::kMixBrowserTypeTabsName,
5368      flag_descriptions::kMixBrowserTypeTabsDescription, kOsDesktop,
5369      FEATURE_VALUE_TYPE(features::kMixBrowserTypeTabs)},
5370 #endif  // !defined(OS_ANDROID)
5371
5372 #if defined(OS_ANDROID)
5373     {"enable-games-hub", flag_descriptions::kGamesHubName,
5374      flag_descriptions::kGamesHubDescription, kOsAndroid,
5375      FEATURE_VALUE_TYPE(games::features::kGamesHub)},
5376 #endif  // defined(OS_ANDROID)
5377
5378     {"enable-heavy-ad-intervention",
5379      flag_descriptions::kHeavyAdInterventionName,
5380      flag_descriptions::kHeavyAdInterventionDescription, kOsAll,
5381      FEATURE_VALUE_TYPE(features::kHeavyAdIntervention)},
5382
5383     {"heavy-ad-privacy-mitigations",
5384      flag_descriptions::kHeavyAdPrivacyMitigationsName,
5385      flag_descriptions::kHeavyAdPrivacyMitigationsDescription, kOsAll,
5386      FEATURE_VALUE_TYPE(features::kHeavyAdPrivacyMitigations)},
5387
5388 #if !BUILDFLAG(DISABLE_FTP_SUPPORT)
5389     {"enable-ftp", flag_descriptions::kEnableFtpName,
5390      flag_descriptions::kEnableFtpDescription, kOsAll,
5391      FEATURE_VALUE_TYPE(features::kFtpProtocol)},
5392 #endif
5393
5394 #if defined(OS_CHROMEOS)
5395     {"crostini-use-buster-image",
5396      flag_descriptions::kCrostiniUseBusterImageName,
5397      flag_descriptions::kCrostiniUseBusterImageDescription, kOsCrOS,
5398      FEATURE_VALUE_TYPE(chromeos::features::kCrostiniUseBusterImage)},
5399     {"arc-application-zoom", flag_descriptions::kArcApplicationZoomName,
5400      flag_descriptions::kArcApplicationZoomDescription, kOsCrOS,
5401      FEATURE_VALUE_TYPE(arc::kEnableApplicationZoomFeature)},
5402     {"crostini-disk-resizing", flag_descriptions::kCrostiniDiskResizingName,
5403      flag_descriptions::kCrostiniDiskResizingDescription, kOsCrOS,
5404      FEATURE_VALUE_TYPE(chromeos::features::kCrostiniDiskResizing)},
5405 #endif  // defined(OS_CHROMEOS)
5406
5407 #if defined(OS_ANDROID)
5408     {"enable-home-page-location-policy",
5409      flag_descriptions::kHomepageLocationName,
5410      flag_descriptions::kHomepageLocationDescription, kOsAndroid,
5411      FEATURE_VALUE_TYPE(chrome::android::kHomepageLocation)},
5412     {"homepage-settings-ui-conversion",
5413      flag_descriptions::kHomepageSettingsUIConversionName,
5414      flag_descriptions::kHomepageSettingsUIConversionDescription, kOsAndroid,
5415      FEATURE_VALUE_TYPE(chrome::android::kHomepageSettingsUIConversion)},
5416     {"homepage-promo-card", flag_descriptions::kHomepagePromoCardName,
5417      flag_descriptions::kHomepagePromoCardDescription, kOsAndroid,
5418      FEATURE_WITH_PARAMS_VALUE_TYPE(chrome::android::kHomepagePromoCard,
5419                                     kHomepagePromoCardVariations,
5420                                     "HomepagePromoCard")},
5421 #endif  // defined(OS_ANDROID)
5422
5423 #if defined(OS_CHROMEOS)
5424     {"split-settings-sync", flag_descriptions::kSplitSettingsSyncName,
5425      flag_descriptions::kSplitSettingsSyncDescription, kOsCrOS,
5426      FEATURE_VALUE_TYPE(chromeos::features::kSplitSettingsSync)},
5427     {"new-os-settings-search", flag_descriptions::kNewOsSettingsSearchName,
5428      flag_descriptions::kNewOsSettingsSearchDescription, kOsCrOS,
5429      FEATURE_VALUE_TYPE(chromeos::features::kNewOsSettingsSearch)},
5430     {"dlc-settings-ui", flag_descriptions::kDlcSettingsUiName,
5431      flag_descriptions::kDlcSettingsUiDescription, kOsCrOS,
5432      FEATURE_VALUE_TYPE(chromeos::features::kDlcSettingsUi)},
5433     {"help-app", flag_descriptions::kHelpAppName,
5434      flag_descriptions::kHelpAppDescription, kOsCrOS,
5435      FEATURE_VALUE_TYPE(chromeos::features::kHelpAppV2)},
5436     {"media-app", flag_descriptions::kMediaAppName,
5437      flag_descriptions::kMediaAppDescription, kOsCrOS,
5438      FEATURE_VALUE_TYPE(chromeos::features::kMediaApp)},
5439 #endif  // defined(OS_CHROMEOS)
5440
5441     {"passive-mixed-content-warning",
5442      flag_descriptions::kPassiveMixedContentWarningName,
5443      flag_descriptions::kPassiveMixedContentWarningDescription, kOsAll,
5444      FEATURE_VALUE_TYPE(security_state::features::kPassiveMixedContentWarning)},
5445
5446     {"autofill-enable-virtual-card",
5447      flag_descriptions::kAutofillEnableVirtualCardName,
5448      flag_descriptions::kAutofillEnableVirtualCardDescription, kOsDesktop,
5449      FEATURE_VALUE_TYPE(autofill::features::kAutofillEnableVirtualCard)},
5450
5451 #if defined(OS_CHROMEOS)
5452     {"account-id-migration", flag_descriptions::kAccountIdMigrationName,
5453      flag_descriptions::kAccountIdMigrationDescription, kOsCrOS,
5454      FEATURE_VALUE_TYPE(switches::kAccountIdMigration)},
5455 #endif  // defined(OS_CHROMEOS)
5456
5457     // TODO(https://crbug.com/1032161): Implement and enable for ChromeOS.
5458     {"raw-clipboard", flag_descriptions::kRawClipboardName,
5459      flag_descriptions::kRawClipboardDescription, kOsMac | kOsWin | kOsLinux,
5460      FEATURE_VALUE_TYPE(blink::features::kRawClipboard)},
5461
5462 #if defined(OS_WIN)
5463     {"slow-dc-timer-interrupts-win",
5464      flag_descriptions::kSlowDCTimerInterruptsWinName,
5465      flag_descriptions::kSlowDCTimerInterruptsWinDescription, kOsWin,
5466      FEATURE_VALUE_TYPE(base::kSlowDCTimerInterruptsWin)},
5467 #endif  // OS_WIN
5468
5469 #if BUILDFLAG(ENABLE_PAINT_PREVIEW) && defined(OS_ANDROID)
5470     {"paint-preview-demo", flag_descriptions::kPaintPreviewDemoName,
5471      flag_descriptions::kPaintPreviewDemoDescription, kOsAndroid,
5472      FEATURE_VALUE_TYPE(paint_preview::kPaintPreviewDemo)},
5473     {"paint-preview-startup", flag_descriptions::kPaintPreviewStartupName,
5474      flag_descriptions::kPaintPreviewStartupDescription, kOsAndroid,
5475      FEATURE_VALUE_TYPE(paint_preview::kPaintPreviewShowOnStartup)},
5476 #endif  // ENABLE_PAINT_PREVIEW && defined(OS_ANDROID)
5477
5478 #if !defined(OS_ANDROID)
5479     {"sync-setup-friendly-settings",
5480      flag_descriptions::kSyncSetupFriendlySettingsName,
5481      flag_descriptions::kSyncSetupFriendlySettingsDescription, kOsDesktop,
5482      FEATURE_VALUE_TYPE(features::kSyncSetupFriendlySettings)},
5483 #endif  // !defined(OS_ANDROID)
5484
5485 #if defined(OS_ANDROID)
5486     {"block-external-form-redirects-no-gesture",
5487      flag_descriptions::kIntentBlockExternalFormRedirectsNoGestureName,
5488      flag_descriptions::kIntentBlockExternalFormRedirectsNoGestureDescription,
5489      kOsAndroid,
5490      FEATURE_VALUE_TYPE(
5491          external_intents::kIntentBlockExternalFormRedirectsNoGesture)},
5492     {"recover-from-never-save-android",
5493      flag_descriptions::kRecoverFromNeverSaveAndroidName,
5494      flag_descriptions::kRecoverFromNeverSaveAndroidDescription, kOsAndroid,
5495      FEATURE_VALUE_TYPE(
5496          password_manager::features::kRecoverFromNeverSaveAndroid)},
5497     {"photo-picker-video-support",
5498      flag_descriptions::kPhotoPickerVideoSupportName,
5499      flag_descriptions::kPhotoPickerVideoSupportDescription, kOsAndroid,
5500      FEATURE_VALUE_TYPE(chrome::android::kPhotoPickerVideoSupport)},
5501 #endif  // defined(OS_ANDROID)
5502
5503     {"freeze-user-agent", flag_descriptions::kFreezeUserAgentName,
5504      flag_descriptions::kFreezeUserAgentDescription, kOsDesktop | kOsAndroid,
5505      FEATURE_VALUE_TYPE(blink::features::kFreezeUserAgent)},
5506
5507 #if !defined(OS_ANDROID) && !defined(OS_CHROMEOS)
5508     {"enable-user-data-snapshot", flag_descriptions::kUserDataSnapshotName,
5509      flag_descriptions::kUserDataSnapshotDescription,
5510      kOsMac | kOsWin | kOsLinux,
5511      FEATURE_VALUE_TYPE(features::kUserDataSnapshot)},
5512 #endif
5513
5514 #if defined(OS_WIN)
5515     {"run-video-capture-service-in-browser",
5516      flag_descriptions::kRunVideoCaptureServiceInBrowserProcessName,
5517      flag_descriptions::kRunVideoCaptureServiceInBrowserProcessDescription,
5518      kOsWin,
5519      FEATURE_VALUE_TYPE(features::kRunVideoCaptureServiceInBrowserProcess)},
5520 #endif  // defined(OS_WIN)
5521
5522     {"legacy-tls-enforced", flag_descriptions::kLegacyTLSEnforcedName,
5523      flag_descriptions::kLegacyTLSEnforcedDescription, kOsDesktop | kOsAndroid,
5524      FEATURE_VALUE_TYPE(net::features::kLegacyTLSEnforced)},
5525
5526 #if defined(OS_ANDROID)
5527     {"password-check", flag_descriptions::kPasswordCheckName,
5528      flag_descriptions::kPasswordCheckDescription, kOsAndroid,
5529      FEATURE_VALUE_TYPE(password_manager::features::kPasswordCheck)},
5530 #endif  // defined(OS_ANDROID)
5531
5532     {"export-tagged-pdf", flag_descriptions::kExportTaggedPDFName,
5533      flag_descriptions::kExportTaggedPDFDescription, kOsDesktop,
5534      FEATURE_VALUE_TYPE(features::kExportTaggedPDF)},
5535     {"double-buffer-compositing",
5536      flag_descriptions::kDoubleBufferCompositingName,
5537      flag_descriptions::kDoubleBufferCompositingDescription, kOsCrOS,
5538      SINGLE_VALUE_TYPE(switches::kDoubleBufferCompositing)},
5539
5540 #if defined(OS_CHROMEOS)
5541     {"enable-ambient-mode", flag_descriptions::kEnableAmbientModeName,
5542      flag_descriptions::kEnableAmbientModeDescription, kOsCrOS,
5543      FEATURE_VALUE_TYPE(chromeos::features::kAmbientModeFeature)},
5544 #endif  // defined(OS_CHROMEOS)
5545
5546 #if defined(OS_ANDROID)
5547     {"password-change-support", flag_descriptions::kPasswordChangeName,
5548      flag_descriptions::kPasswordChangeDescription, kOsAndroid,
5549      FEATURE_WITH_PARAMS_VALUE_TYPE(password_manager::features::kPasswordChange,
5550                                     kPasswordChangeFeatureVariations,
5551                                     "PasswordChangeFeatureVariations.")},
5552
5553     {"context-menu-performance-info-and-remote-hints-fetching",
5554      flag_descriptions::kContextMenuPerformanceInfoAndRemoteHintFetchingName,
5555      flag_descriptions::
5556          kContextMenuPerformanceInfoAndRemoteHintFetchingDescription,
5557      kOsAndroid,
5558      FEATURE_VALUE_TYPE(kContextMenuPerformanceInfoAndRemoteHintFetching)},
5559 #endif  // !defined(OS_ANDROID)
5560
5561 #if defined(OS_ANDROID)
5562     {"page-info-performance-hints",
5563      flag_descriptions::kPageInfoPerformanceHintsName,
5564      flag_descriptions::kPageInfoPerformanceHintsDescription, kOsAndroid,
5565      FEATURE_VALUE_TYPE(kPageInfoPerformanceHints)},
5566 #endif  // !defined(OS_ANDROID)
5567
5568 #if defined(OS_ANDROID)
5569     {"page-info-version-2", flag_descriptions::kPageInfoV2Name,
5570      flag_descriptions::kPageInfoV2Description, kOsAndroid,
5571      FEATURE_VALUE_TYPE(page_info::kPageInfoV2)},
5572 #endif  // !defined(OS_ANDROID)
5573
5574 #if defined(OS_CHROMEOS)
5575     {"drag-to-snap-in-clamshell-mode",
5576      flag_descriptions::kDragToSnapInClamshellModeName,
5577      flag_descriptions::kDragToSnapInClamshellModeDescription, kOsCrOS,
5578      FEATURE_VALUE_TYPE(ash::features::kDragToSnapInClamshellMode)},
5579     {"multi-display-overview-and-split-view",
5580      flag_descriptions::kMultiDisplayOverviewAndSplitViewName,
5581      flag_descriptions::kMultiDisplayOverviewAndSplitViewDescription, kOsCrOS,
5582      FEATURE_VALUE_TYPE(ash::features::kMultiDisplayOverviewAndSplitView)},
5583 #endif  // defined(OS_CHROMEOS)
5584
5585 #if defined(OS_WIN)
5586     {"enable-media-foundation-video-capture",
5587      flag_descriptions::kEnableMediaFoundationVideoCaptureName,
5588      flag_descriptions::kEnableMediaFoundationVideoCaptureDescription, kOsWin,
5589      FEATURE_VALUE_TYPE(media::kMediaFoundationVideoCapture)},
5590 #endif  // defined(OS_WIN)
5591
5592 #if defined(OS_CHROMEOS)
5593     {"scanning-ui", flag_descriptions::kScanningUIName,
5594      flag_descriptions::kScanningUIDescription, kOsCrOS,
5595      FEATURE_VALUE_TYPE(chromeos::features::kScanningUI)},
5596     {"avatar-toolbar-button", flag_descriptions::kAvatarToolbarButtonName,
5597      flag_descriptions::kAvatarToolbarButtonDescription, kOsCrOS,
5598      FEATURE_VALUE_TYPE(chromeos::features::kAvatarToolbarButton)},
5599 #endif  // defined(OS_CHROMEOS)
5600
5601     {"omnibox-context-menu-show-full-urls",
5602      flag_descriptions::kOmniboxContextMenuShowFullUrlsName,
5603      flag_descriptions::kOmniboxContextMenuShowFullUrlsDescription, kOsDesktop,
5604      FEATURE_VALUE_TYPE(omnibox::kOmniboxContextMenuShowFullUrls)},
5605
5606     {"color-provider-redirection",
5607      flag_descriptions::kColorProviderRedirectionName,
5608      flag_descriptions::kColorProviderRedirectionDescription, kOsDesktop,
5609      FEATURE_VALUE_TYPE(features::kColorProviderRedirection)},
5610
5611     {"trust-tokens", flag_descriptions::kTrustTokensName,
5612      flag_descriptions::kTrustTokensDescription, kOsAll,
5613      FEATURE_VALUE_TYPE(network::features::kTrustTokens)},
5614
5615 #if defined(OS_ANDROID)
5616     {"android-partner-customization-phenotype",
5617      flag_descriptions::kAndroidPartnerCustomizationPhenotypeName,
5618      flag_descriptions::kAndroidPartnerCustomizationPhenotypeDescription,
5619      kOsAndroid,
5620      FEATURE_VALUE_TYPE(
5621          chrome::android::kAndroidPartnerCustomizationPhenotype)},
5622 #endif  // defined(OS_ANDROID)
5623
5624     {"media-history", flag_descriptions::kMediaHistoryName,
5625      flag_descriptions::kMediaHistoryDescription, kOsAll,
5626      FEATURE_VALUE_TYPE(media::kUseMediaHistoryStore)},
5627
5628 #if !defined(OS_ANDROID)
5629     {"nearby-sharing", flag_descriptions::kNearbySharingName,
5630      flag_descriptions::kNearbySharingDescription, kOsDesktop,
5631      FEATURE_VALUE_TYPE(features::kNearbySharing)},
5632 #endif  // !defined(OS_ANDROID)
5633
5634 #if defined(OS_ANDROID)
5635     {"android-default-browser-promo",
5636      flag_descriptions::kAndroidDefaultBrowserPromoName,
5637      flag_descriptions::kAndroidDefaultBrowserPromoDescription, kOsAndroid,
5638      FEATURE_VALUE_TYPE(chrome::android::kAndroidDefaultBrowserPromo)},
5639
5640     {"android-multiple-display", flag_descriptions::kAndroidMultipleDisplayName,
5641      flag_descriptions::kAndroidMultipleDisplayDescription, kOsAndroid,
5642      FEATURE_VALUE_TYPE(chrome::android::kAndroidMultipleDisplay)},
5643 #endif  // defined(OS_ANDROID)
5644     {"autofill-enable-surfacing-server-card-nickname",
5645      flag_descriptions::kAutofillEnableSurfacingServerCardNicknameName,
5646      flag_descriptions::kAutofillEnableSurfacingServerCardNicknameDescription,
5647      kOsAll,
5648      FEATURE_VALUE_TYPE(
5649          autofill::features::kAutofillEnableSurfacingServerCardNickname)},
5650
5651     {"app-cache", flag_descriptions::kAppCacheName,
5652      flag_descriptions::kAppCacheDescription, kOsAll,
5653      FEATURE_VALUE_TYPE(blink::features::kAppCache)},
5654     {"enable-autofill-cache-server-card-info",
5655      flag_descriptions::kEnableAutofillCacheServerCardInfoName,
5656      flag_descriptions::kEnableAutofillCacheServerCardInfoDescription, kOsAll,
5657      FEATURE_VALUE_TYPE(autofill::features::kAutofillCacheServerCardInfo)},
5658
5659     {"autofill-enable-sticky-payments-bubble",
5660      flag_descriptions::kAutofillEnableStickyPaymentsBubbleName,
5661      flag_descriptions::kAutofillEnableStickyPaymentsBubbleDescription,
5662      kOsDesktop,
5663      FEATURE_VALUE_TYPE(
5664          autofill::features::kAutofillEnableStickyPaymentsBubble)},
5665
5666     {"align-font-display-auto-lcp",
5667      flag_descriptions::kAlignFontDisplayAutoTimeoutWithLCPGoalName,
5668      flag_descriptions::kAlignFontDisplayAutoTimeoutWithLCPGoalDescription,
5669      kOsAll,
5670      FEATURE_WITH_PARAMS_VALUE_TYPE(
5671          blink::features::kAlignFontDisplayAutoTimeoutWithLCPGoal,
5672          kAlignFontDisplayAutoTimeoutWithLCPGoalVariations,
5673          "AlignFontDisplayAutoTimeoutWithLCPGoalVariations")},
5674
5675 #if defined(OS_CHROMEOS)
5676     {"enable-palm-suppression", flag_descriptions::kEnablePalmSuppressionName,
5677      flag_descriptions::kEnablePalmSuppressionDescription, kOsCrOS,
5678      FEATURE_VALUE_TYPE(ui::kEnablePalmSuppression)},
5679
5680     {"enable-high-resolution-mouse-scrolling",
5681      flag_descriptions::kEnableHighResolutionMouseScrollingName,
5682      flag_descriptions::kEnableHighResolutionMouseScrollingDescription, kOsCrOS,
5683      FEATURE_VALUE_TYPE(ui::kEnableHighResolutionMouseScrolling)},
5684
5685     {"movable-partial-screenshot-region",
5686      flag_descriptions::kMovablePartialScreenshotName,
5687      flag_descriptions::kMovablePartialScreenshotDescription, kOsCrOS,
5688      FEATURE_VALUE_TYPE(ash::features::kMovablePartialScreenshot)},
5689 #endif  // defined(OS_CHROMEOS)
5690
5691     {"enable-experimental-cookie-features",
5692      flag_descriptions::kEnableExperimentalCookieFeaturesName,
5693      flag_descriptions::kEnableExperimentalCookieFeaturesDescription, kOsAll,
5694      MULTI_VALUE_TYPE(kEnableExperimentalCookieFeaturesChoices)},
5695
5696     {"autofill-enable-google-issued-card",
5697      flag_descriptions::kAutofillEnableGoogleIssuedCardName,
5698      flag_descriptions::kAutofillEnableGoogleIssuedCardDescription, kOsAll,
5699      FEATURE_VALUE_TYPE(autofill::features::kAutofillEnableGoogleIssuedCard)},
5700
5701 #if defined(TOOLKIT_VIEWS)
5702     {"textfield-focus-on-tap-up", flag_descriptions::kTextfieldFocusOnTapUpName,
5703      flag_descriptions::kTextfieldFocusOnTapUpDescription, kOsDesktop,
5704      FEATURE_VALUE_TYPE(views::features::kTextfieldFocusOnTapUp)},
5705 #endif  // defined(TOOLKIT_VIEWS)
5706
5707     {"permission-chip", flag_descriptions::kPermissionChipName,
5708      flag_descriptions::kPermissionChipDescription, kOsDesktop,
5709      FEATURE_VALUE_TYPE(features::kPermissionChip)},
5710
5711 #if BUILDFLAG(ENABLE_DICE_SUPPORT)
5712     {"dice-web-signin-interception",
5713      flag_descriptions::kDiceWebSigninInterceptionName,
5714      flag_descriptions::kDiceWebSigninInterceptionDescription,
5715      kOsMac | kOsWin | kOsLinux,
5716      FEATURE_VALUE_TYPE(kDiceWebSigninInterceptionFeature)},
5717 #endif  // ENABLE_DICE_SUPPORT
5718     {"new-canvas-2d-api", flag_descriptions::kNewCanvas2DAPIName,
5719      flag_descriptions::kNewCanvas2DAPIDescription, kOsAll,
5720      SINGLE_VALUE_TYPE(switches::kEnableNewCanvas2DAPI)},
5721
5722     {"enable-translate-sub-frames",
5723      flag_descriptions::kEnableTranslateSubFramesName,
5724      flag_descriptions::kEnableTranslateSubFramesDescription, kOsAll,
5725      FEATURE_VALUE_TYPE(translate::kTranslateSubFrames)},
5726
5727 #if defined(OS_CHROMEOS)
5728     {"suggested-content-toggle", flag_descriptions::kSuggestedContentToggleName,
5729      flag_descriptions::kSuggestedContentToggleDescription, kOsCrOS,
5730      FEATURE_VALUE_TYPE(chromeos::features::kSuggestedContentToggle)},
5731 #endif  // defined(OS_CHROMEOS)
5732
5733 #if !defined(OS_ANDROID)
5734     {"enable-media-feeds", flag_descriptions::kEnableMediaFeedsName,
5735      flag_descriptions::kEnableMediaFeedsDescription, kOsDesktop,
5736      FEATURE_VALUE_TYPE(media::kMediaFeeds)},
5737 #endif  // !defined(OS_ANDROID)
5738
5739     {"autofill-enable-card-nickname-management",
5740      flag_descriptions::kAutofillEnableCardNicknameManagementName,
5741      flag_descriptions::kAutofillEnableCardNicknameManagementDescription,
5742      kOsAll,
5743      FEATURE_VALUE_TYPE(
5744          autofill::features::kAutofillEnableCardNicknameManagement)},
5745
5746     {"conversion-measurement-api",
5747      flag_descriptions::kConversionMeasurementApiName,
5748      flag_descriptions::kConversionMeasurementApiDescription, kOsAll,
5749      FEATURE_VALUE_TYPE(features::kConversionMeasurement)},
5750     {"conversion-measurement-debug-mode",
5751      flag_descriptions::kConversionMeasurementDebugModeName,
5752      flag_descriptions::kConversionMeasurementDebugModeDescription, kOsAll,
5753      SINGLE_VALUE_TYPE(switches::kConversionsDebugMode)},
5754
5755     {"client-storage-access-context-auditing",
5756      flag_descriptions::kClientStorageAccessContextAuditingName,
5757      flag_descriptions::kClientStorageAccessContextAuditingDescription,
5758      kOsDesktop,
5759      FEATURE_VALUE_TYPE(features::kClientStorageAccessContextAuditing)},
5760
5761     {"autofill-enable-card-nickname-upstream",
5762      flag_descriptions::kAutofillEnableCardNicknameUpstreamName,
5763      flag_descriptions::kAutofillEnableCardNicknameUpstreamDescription, kOsAll,
5764      FEATURE_VALUE_TYPE(
5765          autofill::features::kAutofillEnableCardNicknameUpstream)},
5766
5767 #if defined(OS_WIN)
5768     {"safety-check-chrome-cleaner-child",
5769      flag_descriptions::kSafetyCheckChromeCleanerChildName,
5770      flag_descriptions::kSafetyCheckChromeCleanerChildDescription, kOsWin,
5771      FEATURE_VALUE_TYPE(features::kSafetyCheckChromeCleanerChild)},
5772 #endif  // !defined(OS_WIN)
5773
5774 #if defined(OS_CHROMEOS)
5775     {"enable-launcher-app-paging",
5776      flag_descriptions::kNewDragSpecInLauncherName,
5777      flag_descriptions::kNewDragSpecInLauncherDescription, kOsCrOS,
5778      FEATURE_VALUE_TYPE(app_list_features::kNewDragSpecInLauncher)},
5779 #endif  // OS_CHROMEOS
5780
5781     {"autofill-enable-offers-in-downstream",
5782      flag_descriptions::kAutofillEnableOffersInDownstreamName,
5783      flag_descriptions::kAutofillEnableOffersInDownstreamDescription, kOsAll,
5784      FEATURE_VALUE_TYPE(autofill::features::kAutofillEnableOffersInDownstream)},
5785
5786 #if defined(OS_CHROMEOS)
5787     {"enable-sharesheet", flag_descriptions::kSharesheetName,
5788      flag_descriptions::kSharesheetDescription, kOsAll,
5789      FEATURE_VALUE_TYPE(features::kSharesheet)},
5790 #endif  // OS_CHROMEOS
5791
5792     {"enable-lite-video", flag_descriptions::kLiteVideoName,
5793      flag_descriptions::kLiteVideoDescription, kOsAll,
5794      FEATURE_VALUE_TYPE(features::kLiteVideo)},
5795
5796     {"lite-video-force-override-decision",
5797      flag_descriptions::kLiteVideoForceOverrideDecisionName,
5798      flag_descriptions::kLiteVideoForceOverrideDecisionDescription, kOsAll,
5799      SINGLE_VALUE_TYPE(lite_video::switches::kLiteVideoForceOverrideDecision)}
5800
5801     // NOTE: Adding a new flag requires adding a corresponding entry to enum
5802     // "LoginCustomFlags" in tools/metrics/histograms/enums.xml. See "Flag
5803     // Histograms" in tools/metrics/histograms/README.md (run the
5804     // AboutFlagsHistogramTest unit test to verify this process).
5805 };
5806
5807 class FlagsStateSingleton : public flags_ui::FlagsState::Delegate {
5808  public:
5809   FlagsStateSingleton()
5810       : flags_state_(
5811             std::make_unique<flags_ui::FlagsState>(kFeatureEntries, this)) {}
5812   ~FlagsStateSingleton() override = default;
5813
5814   static FlagsStateSingleton* GetInstance() {
5815     return base::Singleton<FlagsStateSingleton>::get();
5816   }
5817
5818   static flags_ui::FlagsState* GetFlagsState() {
5819     return GetInstance()->flags_state_.get();
5820   }
5821
5822   void RebuildState(const std::vector<flags_ui::FeatureEntry>& entries) {
5823     flags_state_ = std::make_unique<flags_ui::FlagsState>(entries, this);
5824   }
5825
5826  private:
5827   // flags_ui::FlagsState::Delegate:
5828   bool ShouldExcludeFlag(const FeatureEntry& entry) override {
5829     return flags::IsFlagExpired(entry.internal_name);
5830   }
5831
5832   std::unique_ptr<flags_ui::FlagsState> flags_state_;
5833
5834   DISALLOW_COPY_AND_ASSIGN(FlagsStateSingleton);
5835 };
5836
5837 bool ShouldSkipNonDeprecatedFeatureEntry(const FeatureEntry& entry) {
5838   return ~entry.supported_platforms & kDeprecated;
5839 }
5840
5841 bool SkipConditionalFeatureEntry(const FeatureEntry& entry) {
5842   version_info::Channel channel = chrome::GetChannel();
5843 #if defined(OS_CHROMEOS)
5844   // enable-ui-devtools is only available on for non Stable channels.
5845   if (!strcmp(ui_devtools::switches::kEnableUiDevTools, entry.internal_name) &&
5846       channel == version_info::Channel::STABLE) {
5847     return true;
5848   }
5849
5850   if (!strcmp(kLacrosSupportInternalName, entry.internal_name) &&
5851       channel != version_info::Channel::BETA &&
5852       channel != version_info::Channel::DEV &&
5853       channel != version_info::Channel::CANARY &&
5854       channel != version_info::Channel::UNKNOWN) {
5855     return true;
5856   }
5857 #endif  // defined(OS_CHROMEOS)
5858
5859   // data-reduction-proxy-lo-fi and enable-data-reduction-proxy-lite-page
5860   // are only available for Chromium builds and the Canary/Dev/Beta channels.
5861   if ((!strcmp("data-reduction-proxy-lo-fi", entry.internal_name) ||
5862        !strcmp("enable-data-reduction-proxy-lite-page", entry.internal_name)) &&
5863       channel != version_info::Channel::BETA &&
5864       channel != version_info::Channel::DEV &&
5865       channel != version_info::Channel::CANARY &&
5866       channel != version_info::Channel::UNKNOWN) {
5867     return true;
5868   }
5869
5870   // enable-unsafe-webgpu is only available on Dev/Canary channels.
5871   if (!strcmp("enable-unsafe-webgpu", entry.internal_name) &&
5872       channel != version_info::Channel::DEV &&
5873       channel != version_info::Channel::CANARY &&
5874       channel != version_info::Channel::UNKNOWN) {
5875     return true;
5876   }
5877
5878 #if defined(OS_WIN)
5879   // HDR mode works, but displays everything horribly wrong prior to windows 10.
5880   if (!strcmp("enable-hdr", entry.internal_name) &&
5881       base::win::GetVersion() < base::win::Version::WIN10) {
5882     return true;
5883   }
5884 #endif  // OS_WIN
5885
5886   if (!strcmp("dns-over-https", entry.internal_name) &&
5887       (SystemNetworkContextManager::GetStubResolverConfigReader()
5888            ->ShouldDisableDohForManaged() ||
5889        features::kDnsOverHttpsShowUiParam.Get())) {
5890     return true;
5891   }
5892
5893   if (!strcmp("password-change-support", entry.internal_name)) {
5894     return !base::FeatureList::IsEnabled(features::kTeamfoodFlags);
5895   }
5896
5897   if (flags::IsFlagExpired(entry.internal_name))
5898     return true;
5899
5900   return false;
5901 }
5902
5903 }  // namespace
5904
5905 void ConvertFlagsToSwitches(flags_ui::FlagsStorage* flags_storage,
5906                             base::CommandLine* command_line,
5907                             flags_ui::SentinelsMode sentinels) {
5908   if (command_line->HasSwitch(switches::kNoExperiments))
5909     return;
5910
5911   FlagsStateSingleton::GetFlagsState()->ConvertFlagsToSwitches(
5912       flags_storage, command_line, sentinels, switches::kEnableFeatures,
5913       switches::kDisableFeatures);
5914 }
5915
5916 std::vector<std::string> RegisterAllFeatureVariationParameters(
5917     flags_ui::FlagsStorage* flags_storage,
5918     base::FeatureList* feature_list) {
5919   return FlagsStateSingleton::GetFlagsState()
5920       ->RegisterAllFeatureVariationParameters(flags_storage, feature_list);
5921 }
5922
5923 bool AreSwitchesIdenticalToCurrentCommandLine(
5924     const base::CommandLine& new_cmdline,
5925     const base::CommandLine& active_cmdline,
5926     std::set<base::CommandLine::StringType>* out_difference) {
5927   const char* extra_flag_sentinel_begin_flag_name = nullptr;
5928   const char* extra_flag_sentinel_end_flag_name = nullptr;
5929 #if defined(OS_CHROMEOS)
5930   // Put the flags between --policy-switches--begin and --policy-switches-end on
5931   // ChromeOS.
5932   extra_flag_sentinel_begin_flag_name =
5933       chromeos::switches::kPolicySwitchesBegin;
5934   extra_flag_sentinel_end_flag_name = chromeos::switches::kPolicySwitchesEnd;
5935 #endif  // OS_CHROMEOS
5936   return flags_ui::FlagsState::AreSwitchesIdenticalToCurrentCommandLine(
5937       new_cmdline, active_cmdline, out_difference,
5938       extra_flag_sentinel_begin_flag_name, extra_flag_sentinel_end_flag_name);
5939 }
5940
5941 void GetFlagFeatureEntries(flags_ui::FlagsStorage* flags_storage,
5942                            flags_ui::FlagAccess access,
5943                            base::ListValue* supported_entries,
5944                            base::ListValue* unsupported_entries) {
5945   FlagsStateSingleton::GetFlagsState()->GetFlagFeatureEntries(
5946       flags_storage, access, supported_entries, unsupported_entries,
5947       base::Bind(&SkipConditionalFeatureEntry));
5948 }
5949
5950 void GetFlagFeatureEntriesForDeprecatedPage(
5951     flags_ui::FlagsStorage* flags_storage,
5952     flags_ui::FlagAccess access,
5953     base::ListValue* supported_entries,
5954     base::ListValue* unsupported_entries) {
5955   FlagsStateSingleton::GetFlagsState()->GetFlagFeatureEntries(
5956       flags_storage, access, supported_entries, unsupported_entries,
5957       base::Bind(&ShouldSkipNonDeprecatedFeatureEntry));
5958 }
5959
5960 bool IsRestartNeededToCommitChanges() {
5961   return FlagsStateSingleton::GetFlagsState()->IsRestartNeededToCommitChanges();
5962 }
5963
5964 void SetFeatureEntryEnabled(flags_ui::FlagsStorage* flags_storage,
5965                             const std::string& internal_name,
5966                             bool enable) {
5967   FlagsStateSingleton::GetFlagsState()->SetFeatureEntryEnabled(
5968       flags_storage, internal_name, enable);
5969 }
5970
5971 void SetOriginListFlag(const std::string& internal_name,
5972                        const std::string& value,
5973                        flags_ui::FlagsStorage* flags_storage) {
5974   FlagsStateSingleton::GetFlagsState()->SetOriginListFlag(internal_name, value,
5975                                                           flags_storage);
5976 }
5977
5978 void RemoveFlagsSwitches(base::CommandLine::SwitchMap* switch_list) {
5979   FlagsStateSingleton::GetFlagsState()->RemoveFlagsSwitches(switch_list);
5980 }
5981
5982 void ResetAllFlags(flags_ui::FlagsStorage* flags_storage) {
5983   FlagsStateSingleton::GetFlagsState()->ResetAllFlags(flags_storage);
5984 }
5985
5986 void RecordUMAStatistics(flags_ui::FlagsStorage* flags_storage) {
5987   std::set<std::string> switches;
5988   std::set<std::string> features;
5989   FlagsStateSingleton::GetFlagsState()->GetSwitchesAndFeaturesFromFlags(
5990       flags_storage, &switches, &features);
5991   flags_ui::ReportAboutFlagsHistogram("Launch.FlagsAtStartup", switches,
5992                                       features);
5993 }
5994
5995 namespace testing {
5996
5997 std::vector<FeatureEntry>* GetEntriesForTesting() {
5998   static base::NoDestructor<std::vector<FeatureEntry>> entries;
5999   return entries.get();
6000 }
6001
6002 const FeatureEntry* GetFeatureEntries(size_t* count) {
6003   if (!GetEntriesForTesting()->empty()) {
6004     *count = GetEntriesForTesting()->size();
6005     return GetEntriesForTesting()->data();
6006   }
6007   *count = base::size(kFeatureEntries);
6008   return kFeatureEntries;
6009 }
6010
6011 void SetFeatureEntries(const std::vector<FeatureEntry>& entries) {
6012   GetEntriesForTesting()->clear();
6013   for (const auto& entry : entries)
6014     GetEntriesForTesting()->push_back(entry);
6015   FlagsStateSingleton::GetInstance()->RebuildState(*GetEntriesForTesting());
6016 }
6017
6018 }  // namespace testing
6019
6020 }  // namespace about_flags