#ifdef UNSAFE_BUFFERS_BUILD
#pragma allow_unsafe_buffers
#endif
#include "chrome/browser/about_flags.h"
#include <iterator>
#include <map>
#include <memory>
#include <set>
#include <utility>
#include "base/base_switches.h"
#include "base/command_line.h"
#include "base/feature_list.h"
#include "base/functional/bind.h"
#include "base/functional/callback.h"
#include "base/i18n/base_i18n_switches.h"
#include "base/memory/singleton.h"
#include "base/metrics/histogram_functions.h"
#include "base/no_destructor.h"
#include "base/strings/string_number_conversions.h"
#include "base/strings/utf_string_conversions.h"
#include "base/task/task_features.h"
#include "base/values.h"
#include "build/branding_buildflags.h"
#include "build/build_config.h"
#include "cc/base/features.h"
#include "cc/base/switches.h"
#include "chrome/browser/apps/app_discovery_service/app_discovery_service.h"
#include "chrome/browser/apps/link_capturing/link_capturing_features.h"
#include "chrome/browser/browser_features.h"
#include "chrome/browser/browser_process.h"
#include "chrome/browser/companion/core/features.h"
#include "chrome/browser/file_system_access/file_system_access_features.h"
#include "chrome/browser/flag_descriptions.h"
#include "chrome/browser/ip_protection/ip_protection_switches.h"
#include "chrome/browser/login_detection/login_detection_util.h"
#include "chrome/browser/media/router/discovery/access_code/access_code_cast_constants.h"
#include "chrome/browser/media/router/discovery/access_code/access_code_cast_feature.h"
#include "chrome/browser/navigation_predictor/navigation_predictor_features.h"
#include "chrome/browser/navigation_predictor/search_engine_preconnector.h"
#include "chrome/browser/net/stub_resolver_config_reader.h"
#include "chrome/browser/net/system_network_context_manager.h"
#include "chrome/browser/notifications/scheduler/public/features.h"
#include "chrome/browser/page_info/page_info_features.h"
#include "chrome/browser/permissions/notifications_permission_revocation_config.h"
#include "chrome/browser/permissions/quiet_notification_permission_ui_config.h"
#include "chrome/browser/predictors/loading_predictor_config.h"
#include "chrome/browser/preloading/prefetch/search_prefetch/field_trial_settings.h"
#include "chrome/browser/preloading/preloading_features.h"
#include "chrome/browser/resource_coordinator/tab_manager_features.h"
#include "chrome/browser/sharing_hub/sharing_hub_features.h"
#include "chrome/browser/site_isolation/about_flags.h"
#include "chrome/browser/tpcd/experiment/tpcd_experiment_features.h"
#include "chrome/browser/ui/browser_navigator_params.h"
#include "chrome/browser/ui/toasts/toast_features.h"
#include "chrome/browser/ui/ui_features.h"
#include "chrome/browser/unexpire_flags.h"
#include "chrome/browser/unexpire_flags_gen.h"
#include "chrome/browser/web_applications/features.h"
#include "chrome/browser/webauthn/webauthn_switches.h"
#include "chrome/common/buildflags.h"
#include "chrome/common/channel_info.h"
#include "chrome/common/chrome_content_client.h"
#include "chrome/common/chrome_features.h"
#include "chrome/common/chrome_switches.h"
#include "chrome/common/companion/visual_query/features.h"
#include "chromeos/constants/chromeos_features.h"
#include "components/assist_ranker/predictor_config_definitions.h"
#include "components/autofill/content/common/content_autofill_features.h"
#include "components/autofill/core/browser/autofill_experiments.h"
#include "components/autofill/core/common/autofill_features.h"
#include "components/autofill/core/common/autofill_payments_features.h"
#include "components/autofill/core/common/autofill_switches.h"
#include "components/autofill/core/common/autofill_util.h"
#include "components/browser_sync/browser_sync_switches.h"
#include "components/commerce/core/commerce_feature_list.h"
#include "components/commerce/core/flag_descriptions.h"
#include "components/component_updater/component_updater_command_line_config_policy.h"
#include "components/component_updater/component_updater_switches.h"
#include "components/compose/buildflags.h"
#include "components/compose/core/browser/compose_features.h"
#include "components/content_settings/core/common/features.h"
#include "components/contextual_search/core/browser/contextual_search_field_trial.h"
#include "components/contextual_search/core/browser/public.h"
#include "components/data_sharing/public/features.h"
#include "components/dom_distiller/core/dom_distiller_features.h"
#include "components/dom_distiller/core/dom_distiller_switches.h"
#include "components/download/public/common/download_features.h"
#include "components/error_page/common/error_page_switches.h"
#include "components/feature_engagement/public/feature_constants.h"
#include "components/feature_engagement/public/feature_list.h"
#include "components/feed/feed_feature_list.h"
#include "components/fingerprinting_protection_filter/common/fingerprinting_protection_filter_features.h"
#include "components/flags_ui/feature_entry.h"
#include "components/flags_ui/feature_entry_macros.h"
#include "components/flags_ui/flags_state.h"
#include "components/flags_ui/flags_storage.h"
#include "components/flags_ui/flags_ui_metrics.h"
#include "components/flags_ui/flags_ui_switches.h"
#include "components/flags_ui/pref_service_flags_storage.h"
#include "components/heavy_ad_intervention/heavy_ad_features.h"
#include "components/history/core/browser/features.h"
#include "components/history_clusters/core/config.h"
#include "components/history_clusters/core/features.h"
#include "components/history_clusters/core/on_device_clustering_features.h"
#include "components/history_embeddings/history_embeddings_features.h"
#include "components/invalidation/impl/invalidation_switches.h"
#include "components/language/core/common/language_experiments.h"
#include "components/lens/buildflags.h"
#include "components/lens/lens_features.h"
#include "components/manta/features.h"
#include "components/mirroring/service/mirroring_features.h"
#include "components/nacl/common/buildflags.h"
#include "components/nacl/common/nacl_switches.h"
#include "components/network_session_configurator/common/network_features.h"
#include "components/network_session_configurator/common/network_switches.h"
#include "components/no_state_prefetch/browser/no_state_prefetch_field_trial.h"
#include "components/ntp_tiles/features.h"
#include "components/offline_pages/core/offline_page_feature.h"
#include "components/omnibox/browser/omnibox_feature_configs.h"
#include "components/omnibox/browser/omnibox_field_trial.h"
#include "components/omnibox/common/omnibox_features.h"
#include "components/open_from_clipboard/clipboard_recent_content_features.h"
#include "components/optimization_guide/core/model_execution/model_execution_features.h"
#include "components/optimization_guide/core/optimization_guide_features.h"
#include "components/optimization_guide/core/optimization_guide_switches.h"
#include "components/page_content_annotations/core/page_content_annotations_features.h"
#include "components/page_content_annotations/core/page_content_annotations_switches.h"
#include "components/page_image_service/features.h"
#include "components/page_info/core/features.h"
#include "components/paint_preview/buildflags/buildflags.h"
#include "components/paint_preview/features/features.h"
#include "components/password_manager/core/browser/features/password_features.h"
#include "components/password_manager/core/common/password_manager_features.h"
#include "components/payments/core/features.h"
#include "components/performance_manager/public/features.h"
#include "components/permissions/features.h"
#include "components/power_bookmarks/core/power_bookmark_features.h"
#include "components/privacy_sandbox/privacy_sandbox_features.h"
#include "components/reading_list/features/reading_list_switches.h"
#include "components/safe_browsing/core/common/features.h"
#include "components/saved_tab_groups/features.h"
#include "components/search/ntp_features.h"
#include "components/search_engines/search_engines_switches.h"
#include "components/security_interstitials/content/stateful_ssl_host_state_delegate.h"
#include "components/security_state/core/security_state.h"
#include "components/segmentation_platform/public/features.h"
#include "components/send_tab_to_self/features.h"
#include "components/sensitive_content/features.h"
#include "components/services/heap_profiling/public/cpp/switches.h"
#include "components/services/storage/public/cpp/buckets/bucket_info.h"
#include "components/shared_highlighting/core/common/shared_highlighting_features.h"
#include "components/sharing_message/features.h"
#include "components/signin/core/browser/dice_account_reconcilor_delegate.h"
#include "components/signin/public/base/signin_buildflags.h"
#include "components/signin/public/base/signin_switches.h"
#include "components/site_isolation/features.h"
#include "components/soda/soda_features.h"
#include "components/spellcheck/common/spellcheck_features.h"
#include "components/spellcheck/spellcheck_buildflags.h"
#include "components/supervised_user/core/common/features.h"
#include "components/supervised_user/core/common/supervised_user_constants.h"
#include "components/sync/base/command_line_switches.h"
#include "components/sync/base/features.h"
#include "components/tracing/common/tracing_switches.h"
#include "components/translate/core/browser/translate_prefs.h"
#include "components/translate/core/browser/translate_ranker_impl.h"
#include "components/translate/core/common/translate_util.h"
#include "components/trusted_vault/features.h"
#include "components/ui_devtools/switches.h"
#include "components/variations/variations_switches.h"
#include "components/version_info/channel.h"
#include "components/version_info/version_info.h"
#include "components/visited_url_ranking/public/features.h"
#include "components/viz/common/features.h"
#include "components/viz/common/switches.h"
#include "components/webapps/browser/features.h"
#include "components/webapps/common/switches.h"
#include "content/public/common/content_features.h"
#include "content/public/common/content_switches.h"
#include "device/base/features.h"
#include "device/bluetooth/bluez/bluez_features.h"
#include "device/bluetooth/chromeos_platform_features.h"
#include "device/bluetooth/floss/floss_features.h"
#include "device/fido/features.h"
#include "device/gamepad/public/cpp/gamepad_features.h"
#include "device/vr/buildflags/buildflags.h"
#include "extensions/buildflags/buildflags.h"
#include "flag_descriptions.h"
#include "gpu/config/gpu_finch_features.h"
#include "gpu/config/gpu_switches.h"
#include "media/audio/audio_features.h"
#include "media/base/media_switches.h"
#include "media/capture/capture_switches.h"
#include "media/media_buildflags.h"
#include "media/midi/midi_switches.h"
#include "media/webrtc/webrtc_features.h"
#include "mojo/core/embedder/features.h"
#include "net/base/features.h"
#include "net/net_buildflags.h"
#include "net/nqe/effective_connection_type.h"
#include "net/nqe/network_quality_estimator_params.h"
#include "net/websockets/websocket_basic_handshake_stream.h"
#include "pdf/buildflags.h"
#include "ppapi/buildflags/buildflags.h"
#include "printing/buildflags/buildflags.h"
#include "sandbox/policy/features.h"
#include "sandbox/policy/switches.h"
#include "services/device/public/cpp/device_features.h"
#include "services/media_session/public/cpp/features.h"
#include "services/network/public/cpp/features.h"
#include "services/network/public/cpp/network_switches.h"
#include "services/tracing/public/cpp/tracing_features.h"
#include "services/webnn/public/mojom/features.mojom-features.h"
#include "storage/browser/quota/quota_features.h"
#include "third_party/blink/public/common/features.h"
#include "third_party/blink/public/common/features_generated.h"
#include "third_party/blink/public/common/forcedark/forcedark_switches.h"
#include "third_party/blink/public/common/switches.h"
#include "ui/accessibility/accessibility_features.h"
#include "ui/accessibility/accessibility_switches.h"
#include "ui/base/ozone_buildflags.h"
#include "ui/base/ui_base_features.h"
#include "ui/base/ui_base_switches.h"
#include "ui/compositor/compositor_switches.h"
#include "ui/display/display_features.h"
#include "ui/display/display_switches.h"
#include "ui/events/blink/blink_features.h"
#include "ui/events/event_switches.h"
#include "ui/gfx/switches.h"
#include "ui/gl/buildflags.h"
#include "ui/gl/gl_features.h"
#include "ui/gl/gl_switches.h"
#include "ui/native_theme/native_theme_features.h"
#include "ui/ui_features.h"
#include "url/url_features.h"
#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS)
#include "base/allocator/buildflags.h"
#endif
#if BUILDFLAG(IS_CHROMEOS)
#include "base/process/process.h"
#include "chromeos/constants/chromeos_features.h"
#endif
#if BUILDFLAG(IS_ANDROID)
#include "chrome/browser/flags/android/chrome_feature_list.h"
#include "chrome/browser/notifications/chime/android/features.h"
#include "chrome/browser/push_messaging/push_messaging_features.h"
#include "components/browser_ui/photo_picker/android/features.h"
#include "components/browsing_data/core/features.h"
#include "components/external_intents/android/external_intents_features.h"
#include "components/facilitated_payments/core/features/features.h"
#include "components/messages/android/messages_feature.h"
#include "components/translate/content/android/translate_message.h"
#include "ui/android/ui_android_features.h"
#else
#include "chrome/browser/media/router/discovery/access_code/access_code_cast_sink_service.h"
#include "chrome/browser/media/router/media_router_feature.h"
#include "chrome/browser/ui/tabs/features.h"
#include "chrome/browser/web_applications/preinstalled_app_install_features.h"
#include "components/user_notes/user_notes_features.h"
#endif
#if BUILDFLAG(IS_CHROMEOS_ASH)
#include "ash/components/arc/arc_features.h"
#include "ash/components/arc/arc_util.h"
#include "ash/constants/ash_features.h"
#include "ash/constants/ash_switches.h"
#include "ash/public/cpp/app_list/app_list_features.h"
#include "ash/public/cpp/keyboard/keyboard_switches.h"
#include "chrome/browser/ash/app_list/search/search_features.h"
#include "chrome/browser/ash/crosapi/browser_manager.h"
#include "chrome/browser/ash/crosapi/browser_util.h"
#include "chrome/browser/ash/crostini/crostini_util.h"
#include "chrome/browser/ash/file_suggest/item_suggest_cache.h"
#include "chrome/browser/ash/ownership/owner_settings_service_ash.h"
#include "chrome/browser/ash/ownership/owner_settings_service_ash_factory.h"
#include "chrome/browser/ash/policy/reporting/metrics_reporting/metric_reporting_manager.h"
#include "chrome/browser/ash/settings/about_flags.h"
#include "chrome/browser/component_updater/cros_component_installer_chromeos.h"
#include "chrome/browser/nearby_sharing/common/nearby_share_features.h"
#include "chrome/common/chrome_features.h"
#include "chrome/common/webui_url_constants.h"
#include "chromeos/ash/components/assistant/buildflags.h"
#include "chromeos/ash/components/memory/swap_configuration.h"
#include "chromeos/ash/components/standalone_browser/channel_util.h"
#include "chromeos/ash/components/standalone_browser/lacros_availability.h"
#include "chromeos/ash/components/standalone_browser/lacros_selection.h"
#include "chromeos/ash/components/standalone_browser/standalone_browser_features.h"
#include "chromeos/ash/services/assistant/public/cpp/features.h"
#include "chromeos/constants/chromeos_switches.h"
#include "components/app_restore/features.h"
#include "components/cross_device/nearby/nearby_features.h"
#include "components/metrics/structured/structured_metrics_features.h"
#include "media/capture/video/chromeos/video_capture_features_chromeos.h"
#include "remoting/host/chromeos/features.h"
#include "third_party/cros_system_api/switches/chrome_switches.h"
#include "ui/events/ozone/features.h"
#endif
#if BUILDFLAG(IS_CHROMEOS_LACROS)
#include "chrome/browser/lacros/lacros_url_handling.h"
#include "chrome/common/webui_url_constants.h"
#endif
#if BUILDFLAG(IS_MAC)
#include "chrome/browser/enterprise/platform_auth/platform_auth_features.h"
#include "chrome/browser/ui/browser_dialogs.h"
#endif
#if BUILDFLAG(ENABLE_EXTENSIONS)
#include "chrome/browser/extensions/cws_info_service.h"
#include "extensions/common/extension_features.h"
#include "extensions/common/switches.h"
#endif
#if BUILDFLAG(ENABLE_PDF)
#include "pdf/pdf_features.h"
#endif
#if BUILDFLAG(ENABLE_PRINTING)
#include "printing/printing_features.h"
#endif
#if BUILDFLAG(ENABLE_VR)
#include "device/vr/public/cpp/features.h"
#endif
#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS_ASH)
#include "ui/ozone/public/ozone_switches.h"
#endif
#if BUILDFLAG(IS_WIN)
#include "chrome/browser/enterprise/platform_auth/platform_auth_features.h"
#include "chrome/browser/win/mica_titlebar.h"
#endif
#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_WIN)
#include "chrome/browser/enterprise/profile_management/profile_management_features.h"
#endif
#if !BUILDFLAG(IS_ANDROID)
#include "components/user_education/common/user_education_features.h"
#endif
#if BUILDFLAG(IS_LINUX)
#include "chrome/browser/ui/ui_features.h"
#include "ui/base/ui_base_features.h"
#endif
#if defined(TOOLKIT_VIEWS)
#include "ui/views/views_features.h"
#include "ui/views/views_switches.h"
#endif
#if BUILDFLAG(ENABLE_BOUND_SESSION_CREDENTIALS)
#include "components/unexportable_keys/features.h"
#endif
FeatureEntry;
kDeprecated;
kOsAndroid;
kOsCrOS;
kOsCrOSOwnerOnly;
kOsLacros;
kOsLinux;
kOsMac;
kOsWin;
namespace about_flags {
namespace {
const unsigned kOsAll = …;
const unsigned kOsDesktop = …;
#if defined(USE_AURA)
const unsigned kOsAura = …;
#endif
#if defined(USE_AURA)
const FeatureEntry::Choice kPullToRefreshChoices[] = …;
#endif
const FeatureEntry::Choice kEnableBenchmarkingChoices[] = …;
const FeatureEntry::Choice kOverlayStrategiesChoices[] = …;
const FeatureEntry::Choice kTouchTextSelectionStrategyChoices[] = …;
#if BUILDFLAG(IS_WIN)
const FeatureEntry::FeatureParam kMediaFoundationClearStrategyUseFrameServer[] =
{{"strategy", "frame-server"}};
const FeatureEntry::FeatureParam
kMediaFoundationClearStrategyUseDirectComposition[] = {
{"strategy", "direct-composition"}};
const FeatureEntry::FeatureParam kMediaFoundationClearStrategyUseDynamic[] = {
{"strategy", "dynamic"}};
const FeatureEntry::FeatureVariation kMediaFoundationClearStrategyVariations[] =
{{"Direct Composition", kMediaFoundationClearStrategyUseDirectComposition,
std::size(kMediaFoundationClearStrategyUseDirectComposition), nullptr},
{"Frame Server", kMediaFoundationClearStrategyUseFrameServer,
std::size(kMediaFoundationClearStrategyUseFrameServer), nullptr},
{"Dynamic", kMediaFoundationClearStrategyUseDynamic,
std::size(kMediaFoundationClearStrategyUseDynamic), nullptr}};
const FeatureEntry::Choice kUseAngleChoicesWindows[] = {
{flag_descriptions::kUseAngleDefault, "", ""},
{flag_descriptions::kUseAngleGL, switches::kUseANGLE,
gl::kANGLEImplementationOpenGLName},
{flag_descriptions::kUseAngleD3D11, switches::kUseANGLE,
gl::kANGLEImplementationD3D11Name},
{flag_descriptions::kUseAngleD3D9, switches::kUseANGLE,
gl::kANGLEImplementationD3D9Name},
{flag_descriptions::kUseAngleD3D11on12, switches::kUseANGLE,
gl::kANGLEImplementationD3D11on12Name}};
#elif BUILDFLAG(IS_MAC)
const FeatureEntry::Choice kUseAngleChoicesMac[] = {
{flag_descriptions::kUseAngleDefault, "", ""},
{flag_descriptions::kUseAngleGL, switches::kUseANGLE,
gl::kANGLEImplementationOpenGLName},
{flag_descriptions::kUseAngleMetal, switches::kUseANGLE,
gl::kANGLEImplementationMetalName}};
#endif
#if BUILDFLAG(ENABLE_EXTENSIONS)
const FeatureEntry::Choice kExtensionsToolbarZeroStateChoices[] = …;
#endif
#if BUILDFLAG(IS_WIN)
const FeatureEntry::FeatureParam kDXGIWaitableSwapChain1Frame = {
"DXGIWaitableSwapChainMaxQueuedFrames", "1"};
const FeatureEntry::FeatureParam kDXGIWaitableSwapChain2Frames = {
"DXGIWaitableSwapChainMaxQueuedFrames", "2"};
const FeatureEntry::FeatureParam kDXGIWaitableSwapChain3Frames = {
"DXGIWaitableSwapChainMaxQueuedFrames", "3"};
const FeatureEntry::FeatureVariation kDXGIWaitableSwapChainVariations[] = {
{"Max 1 Frame", &kDXGIWaitableSwapChain1Frame, 1, nullptr},
{"Max 2 Frames", &kDXGIWaitableSwapChain2Frames, 1, nullptr},
{"Max 3 Frames", &kDXGIWaitableSwapChain3Frames, 1, nullptr}};
#endif
#if BUILDFLAG(IS_LINUX)
const FeatureEntry::Choice kOzonePlatformHintRuntimeChoices[] = …;
#endif
#if BUILDFLAG(ENABLE_VR)
const FeatureEntry::Choice kWebXrForceRuntimeChoices[] = …;
#endif
#if BUILDFLAG(IS_ANDROID)
const FeatureEntry::FeatureParam kAndroidDefaultFontFamilyDevTesting[] = {
{"dev_testing", "true"}};
const FeatureEntry::FeatureVariation kAndroidDefaultFontFamilyVariations[] = {
{"Use dev testing font families", kAndroidDefaultFontFamilyDevTesting,
std::size(kAndroidDefaultFontFamilyDevTesting), nullptr}};
const FeatureEntry::FeatureParam kCCTMinimizedDefaultIcon[] = {
{"icon_variant", "0"}};
const FeatureEntry::FeatureParam kCCTMinimizedAlternativeIcon[] = {
{"icon_variant", "1"}};
const FeatureEntry::FeatureVariation kCCTMinimizedIconVariations[] = {
{"Use default minimize icon", kCCTMinimizedDefaultIcon,
std::size(kCCTMinimizedDefaultIcon), nullptr},
{"Use alternative minimize icon", kCCTMinimizedAlternativeIcon,
std::size(kCCTMinimizedAlternativeIcon), nullptr}};
const FeatureEntry::FeatureParam kCCTResizablePolicyParamUseAllowlist[] = {
{"default_policy", "use-allowlist"}};
const FeatureEntry::FeatureParam kCCTResizablePolicyParamUseDenylist[] = {
{"default_policy", "use-denylist"}};
const FeatureEntry::FeatureVariation
kCCTResizableThirdPartiesDefaultPolicyVariations[] = {
{"Use Allowlist", kCCTResizablePolicyParamUseAllowlist,
std::size(kCCTResizablePolicyParamUseAllowlist), nullptr},
{"Use Denylist", kCCTResizablePolicyParamUseDenylist,
std::size(kCCTResizablePolicyParamUseDenylist), nullptr}};
const FeatureEntry::FeatureParam kCCTBottomBarButtonBalancedWithHomeParam[] = {
{"google_bottom_bar_button_list", "0,10,3,2"}};
const FeatureEntry::FeatureParam kCCTBottomBarButtonsBalancedWithCustomParam[] =
{{"google_bottom_bar_button_list", "0,3,8,2"}};
const FeatureEntry::FeatureParam kCCTBottomBarButtonsBalancedWithSearchParam[] =
{{"google_bottom_bar_button_list", "0,3,9,2"}};
const FeatureEntry::FeatureParam kCCTBottomBarHomeInSpotlightParam[] = {
{"google_bottom_bar_button_list", "10,10,3,2"}};
const FeatureEntry::FeatureParam kCCTBottomBarCustomInSpotlightParam[] = {
{"google_bottom_bar_button_list", "8,8,3,2"}};
const FeatureEntry::FeatureParam kCCTBottomBarSearchInSpotlightParam[] = {
{"google_bottom_bar_button_list", "9,9,3,2"}};
const FeatureEntry::FeatureVariation kCCTGoogleBottomBarVariations[] = {
{"Balanced with home button", kCCTBottomBarButtonBalancedWithHomeParam,
std::size(kCCTBottomBarButtonBalancedWithHomeParam), nullptr},
{"Balanced with custom button", kCCTBottomBarButtonsBalancedWithCustomParam,
std::size(kCCTBottomBarButtonsBalancedWithCustomParam), nullptr},
{"Balanced with search button", kCCTBottomBarButtonsBalancedWithSearchParam,
std::size(kCCTBottomBarButtonsBalancedWithSearchParam), nullptr},
{"home button in spotlight", kCCTBottomBarHomeInSpotlightParam,
std::size(kCCTBottomBarHomeInSpotlightParam), nullptr},
{"custom button in spotlight", kCCTBottomBarCustomInSpotlightParam,
std::size(kCCTBottomBarCustomInSpotlightParam), nullptr},
{"search button in spotlight", kCCTBottomBarSearchInSpotlightParam,
std::size(kCCTBottomBarSearchInSpotlightParam), nullptr},
};
const FeatureEntry::FeatureParam kCCTDoubleDeckerBottomBarParam[] = {
{"google_bottom_bar_variant_layout", "1"}};
const FeatureEntry::FeatureParam kCCTSingleDeckerBottomBarParam[] = {
{"google_bottom_bar_variant_layout", "2"}};
const FeatureEntry::FeatureParam
kCCTSingleDeckerBottomBarWithButtonsOnRightParam[] = {
{"google_bottom_bar_variant_layout", "3"}};
const FeatureEntry::FeatureVariation
kCCTGoogleBottomBarVariantLayoutsVariations[] = {
{"Double decker", kCCTDoubleDeckerBottomBarParam,
std::size(kCCTDoubleDeckerBottomBarParam), nullptr},
{"Single decker", kCCTSingleDeckerBottomBarParam,
std::size(kCCTSingleDeckerBottomBarParam), nullptr},
{"Single decker with button(s) on right",
kCCTSingleDeckerBottomBarWithButtonsOnRightParam,
std::size(kCCTSingleDeckerBottomBarWithButtonsOnRightParam), nullptr},
};
const FeatureEntry::Choice kReaderModeHeuristicsChoices[] = {
{flags_ui::kGenericExperimentChoiceDefault, "", ""},
{flag_descriptions::kReaderModeHeuristicsMarkup,
switches::kReaderModeHeuristics,
switches::reader_mode_heuristics::kOGArticle},
{flag_descriptions::kReaderModeHeuristicsAdaboost,
switches::kReaderModeHeuristics,
switches::reader_mode_heuristics::kAdaBoost},
{flag_descriptions::kReaderModeHeuristicsAlwaysOn,
switches::kReaderModeHeuristics,
switches::reader_mode_heuristics::kAlwaysTrue},
{flag_descriptions::kReaderModeHeuristicsAlwaysOff,
switches::kReaderModeHeuristics, switches::reader_mode_heuristics::kNone},
{flag_descriptions::kReaderModeHeuristicsAllArticles,
switches::kReaderModeHeuristics,
switches::reader_mode_heuristics::kAllArticles},
};
const FeatureEntry::Choice kForceUpdateMenuTypeChoices[] = {
{flags_ui::kGenericExperimentChoiceDefault, "", ""},
{flag_descriptions::kUpdateMenuTypeNone, switches::kForceUpdateMenuType,
"none"},
{flag_descriptions::kUpdateMenuTypeUpdateAvailable,
switches::kForceUpdateMenuType, "update_available"},
{flag_descriptions::kUpdateMenuTypeUnsupportedOSVersion,
switches::kForceUpdateMenuType, "unsupported_os_version"},
};
const FeatureEntry::FeatureParam kOmahaMinSdkVersionAndroidMinSdk1[] = {
{"min_sdk_version", "1"}};
const FeatureEntry::FeatureParam kOmahaMinSdkVersionAndroidMinSdk1000[] = {
{"min_sdk_version", "1000"}};
const FeatureEntry::FeatureVariation kOmahaMinSdkVersionAndroidVariations[] = {
{flag_descriptions::kOmahaMinSdkVersionAndroidMinSdk1Description,
kOmahaMinSdkVersionAndroidMinSdk1,
std::size(kOmahaMinSdkVersionAndroidMinSdk1), nullptr},
{flag_descriptions::kOmahaMinSdkVersionAndroidMinSdk1000Description,
kOmahaMinSdkVersionAndroidMinSdk1000,
std::size(kOmahaMinSdkVersionAndroidMinSdk1000), nullptr},
};
const FeatureEntry::FeatureParam
kOptimizationGuidePersonalizedFetchingAllowPageInsights[] = {
{"allowed_contexts", "CONTEXT_PAGE_INSIGHTS_HUB"}};
const FeatureEntry::FeatureVariation
kOptimizationGuidePersonalizedFetchingAllowPageInsightsVariations[] = {
{"for Page Insights",
kOptimizationGuidePersonalizedFetchingAllowPageInsights,
std::size(kOptimizationGuidePersonalizedFetchingAllowPageInsights),
nullptr}};
const FeatureEntry::FeatureParam kAccessibilityPageZoomNoOSAdjustment[] = {
{"AdjustForOSLevel", "false"},
};
const FeatureEntry::FeatureParam kAccessibilityPageZoomWithOSAdjustment[] = {
{"AdjustForOSLevel", "true"},
};
const FeatureEntry::FeatureVariation kAccessibilityPageZoomVariations[] = {
{"- With OS Adjustment", kAccessibilityPageZoomWithOSAdjustment,
std::size(kAccessibilityPageZoomWithOSAdjustment), nullptr},
{"- No OS Adjustment (default)", kAccessibilityPageZoomNoOSAdjustment,
std::size(kAccessibilityPageZoomNoOSAdjustment), nullptr},
};
#endif
#if !BUILDFLAG(IS_CHROMEOS_ASH)
const FeatureEntry::FeatureParam kForceDark_SimpleHsl[] = …;
const FeatureEntry::FeatureParam kForceDark_SimpleCielab[] = …;
const FeatureEntry::FeatureParam kForceDark_SimpleRgb[] = …;
const FeatureEntry::FeatureParam kForceDark_SelectiveImageInversion[] = …;
const FeatureEntry::FeatureParam kForceDark_SelectiveElementInversion[] = …;
const FeatureEntry::FeatureParam kForceDark_SelectiveGeneralInversion[] = …;
const FeatureEntry::FeatureParam kForceDark_TransparencyAndNumColors[] = …;
const FeatureEntry::FeatureVariation kForceDarkVariations[] = …;
#endif
const FeatureEntry::FeatureParam kSearchEngineChoiceEnabledWithForcedEea[] = …;
const FeatureEntry::FeatureVariation kSearchEngineChoiceVariations[] = …;
const FeatureEntry::FeatureParam
kWebIdentityDigitalIdentityCredentialNoDialogParam[] = …;
const FeatureEntry::FeatureParam
kWebIdentityDigitalIdentityCredentialDefaultParam[] = …;
const FeatureEntry::FeatureParam
kWebIdentityDigitalIdentityCredentialLowRiskDialogParam[] = …;
const FeatureEntry::FeatureParam
kWebIdentityDigitalIdentityCredentialHighRiskDialogParam[] = …;
const FeatureEntry::FeatureVariation
kWebIdentityDigitalIdentityCredentialVariations[] = …;
const FeatureEntry::FeatureParam kClipboardMaximumAge60Seconds[] = …;
const FeatureEntry::FeatureParam kClipboardMaximumAge90Seconds[] = …;
const FeatureEntry::FeatureParam kClipboardMaximumAge120Seconds[] = …;
const FeatureEntry::FeatureParam kClipboardMaximumAge150Seconds[] = …;
const FeatureEntry::FeatureParam kClipboardMaximumAge180Seconds[] = …;
const FeatureEntry::FeatureVariation kClipboardMaximumAgeVariations[] = …;
const FeatureEntry::FeatureParam kMBIModeLegacy[] = …;
const FeatureEntry::FeatureParam kMBIModeEnabledPerRenderProcessHost[] = …;
const FeatureEntry::FeatureParam kMBIModeEnabledPerSiteInstance[] = …;
const FeatureEntry::FeatureVariation kMBIModeVariations[] = …;
const FeatureEntry::FeatureParam kSearchPrefetchWithoutHoldback[] = …;
const FeatureEntry::FeatureParam kSearchPrefetchWithHoldback[] = …;
const FeatureEntry::FeatureVariation
kSearchPrefetchServicePrefetchingVariations[] = …;
#if BUILDFLAG(IS_CHROMEOS_ASH)
const FeatureEntry::FeatureParam kArcVmMemorySizeShift_200[] = {
{"shift_mib", "-200"}};
const FeatureEntry::FeatureParam kArcVmMemorySizeShift_500[] = {
{"shift_mib", "-500"}};
const FeatureEntry::FeatureParam kArcVmMemorySizeShift_800[] = {
{"shift_mib", "-800"}};
const FeatureEntry::FeatureVariation kArcVmMemorySizeVariations[] = {
{"shift -200MiB", kArcVmMemorySizeShift_200,
std::size(kArcVmMemorySizeShift_200), nullptr},
{"shift -500MiB", kArcVmMemorySizeShift_500,
std::size(kArcVmMemorySizeShift_500), nullptr},
{"shift -800MiB", kArcVmMemorySizeShift_800,
std::size(kArcVmMemorySizeShift_800), nullptr},
};
#endif
const FeatureEntry::Choice kEnableGpuRasterizationChoices[] = …;
const FeatureEntry::Choice kTopChromeTouchUiChoices[] = …;
#if !BUILDFLAG(IS_ANDROID)
const FeatureEntry::FeatureParam kToastWith8Seconds[] = …;
const FeatureEntry::FeatureParam kToastWith10Seconds[] = …;
const FeatureEntry::FeatureParam kToastWith12Seconds[] = …;
const FeatureEntry::FeatureVariation kToastVariations[] = …;
#endif
#if BUILDFLAG(IS_CHROMEOS_ASH)
const FeatureEntry::FeatureParam kRoundedWindowRadius8 = {
chromeos::features::kRoundedWindowsRadius, "8"};
const FeatureEntry::FeatureParam kRoundedWindowRadius10 = {
chromeos::features::kRoundedWindowsRadius, "10"};
const FeatureEntry::FeatureParam kRoundedWindowRadius12 = {
chromeos::features::kRoundedWindowsRadius, "12"};
const FeatureEntry::FeatureParam kRoundedWindowRadius14 = {
chromeos::features::kRoundedWindowsRadius, "14"};
const FeatureEntry::FeatureParam kRoundedWindowRadius16 = {
chromeos::features::kRoundedWindowsRadius, "16"};
const FeatureEntry::FeatureParam kRoundedWindowRadius18 = {
chromeos::features::kRoundedWindowsRadius, "18"};
const FeatureEntry::FeatureVariation kRoundedWindowsRadiusVariation[] = {
{"8", &kRoundedWindowRadius8, 1, nullptr},
{"10", &kRoundedWindowRadius10, 1, nullptr},
{"12", &kRoundedWindowRadius12, 1, nullptr},
{"14", &kRoundedWindowRadius14, 1, nullptr},
{"16", &kRoundedWindowRadius16, 1, nullptr},
{"18", &kRoundedWindowRadius18, 1, nullptr},
};
const FeatureEntry::FeatureParam
kArcRoundedWindowCompatStrategyLeftRightBottomGesture = {
arc::kRoundedWindowCompatStrategy,
arc::kRoundedWindowCompatStrategy_LeftRightBottomGesture};
const FeatureEntry::FeatureParam
kArcRoundedWindowCompatStrategyBottomOnlyGesture = {
arc::kRoundedWindowCompatStrategy,
arc::kRoundedWindowCompatStrategy_BottomOnlyGesture};
const FeatureEntry::FeatureVariation kArcRoundedWindowCompatVariation[] = {
{"Left-Right-Bottom Gesture Exclusion",
&kArcRoundedWindowCompatStrategyLeftRightBottomGesture, 1, nullptr},
{"Bottom-only Gesture Exclusion",
&kArcRoundedWindowCompatStrategyBottomOnlyGesture, 1, nullptr},
};
const FeatureEntry::FeatureParam kZinkEnableRecommended[] = {
{"BorealisZinkGlDriverParam", "ZinkEnableRecommended"}};
const FeatureEntry::FeatureParam kZinkEnableAll[] = {
{"BorealisZinkGlDriverParam", "ZinkEnableAll"}};
const FeatureEntry::FeatureVariation kBorealisZinkGlDriverVariations[] = {
{"for recommended apps", kZinkEnableRecommended,
std::size(kZinkEnableRecommended), nullptr},
{"for all apps", kZinkEnableAll, std::size(kZinkEnableAll), nullptr}};
const char kPreferDcheckInternalName[] = "prefer-dcheck";
const char kLacrosAvailabilityIgnoreInternalName[] =
"lacros-availability-ignore";
const char kLacrosStabilityInternalName[] = "lacros-stability";
const char kLacrosWaylandLoggingInternalName[] = "lacros-wayland-logging";
const char kArcEnableVirtioBlkForDataInternalName[] =
"arc-enable-virtio-blk-for-data";
const FeatureEntry::Choice kPreferDcheckChoices[] = {
{flags_ui::kGenericExperimentChoiceDefault, "", ""},
{component_updater::kPreferDcheckOptIn,
component_updater::kPreferDcheckSwitch,
component_updater::kPreferDcheckOptIn},
{component_updater::kPreferDcheckOptOut,
component_updater::kPreferDcheckSwitch,
component_updater::kPreferDcheckOptOut},
};
const FeatureEntry::Choice kLacrosStabilityChoices[] = {
{flags_ui::kGenericExperimentChoiceDefault, "", ""},
{ash::standalone_browser::kLacrosStabilityChannelCanary,
ash::standalone_browser::kLacrosStabilitySwitch,
ash::standalone_browser::kLacrosStabilityChannelCanary},
{ash::standalone_browser::kLacrosStabilityChannelDev,
ash::standalone_browser::kLacrosStabilitySwitch,
ash::standalone_browser::kLacrosStabilityChannelDev},
{ash::standalone_browser::kLacrosStabilityChannelBeta,
ash::standalone_browser::kLacrosStabilitySwitch,
ash::standalone_browser::kLacrosStabilityChannelBeta},
{ash::standalone_browser::kLacrosStabilityChannelStable,
ash::standalone_browser::kLacrosStabilitySwitch,
ash::standalone_browser::kLacrosStabilityChannelStable},
};
const char kLacrosSelectionInternalName[] = "lacros-selection";
const char kProjectorServerSideSpeechRecognition[] =
"enable-projector-server-side-speech-recognition";
const FeatureEntry::Choice kLacrosSelectionChoices[] = {
{flags_ui::kGenericExperimentChoiceDefault, "", ""},
{flag_descriptions::kLacrosSelectionStatefulDescription,
ash::standalone_browser::kLacrosSelectionSwitch,
ash::standalone_browser::kLacrosSelectionStateful},
{flag_descriptions::kLacrosSelectionRootfsDescription,
ash::standalone_browser::kLacrosSelectionSwitch,
ash::standalone_browser::kLacrosSelectionRootfs},
};
const char kLacrosSelectionPolicyIgnoreInternalName[] =
"lacros-selection-ignore";
const FeatureEntry::Choice kLacrosAvailabilityPolicyChoices[] = {
{flags_ui::kGenericExperimentChoiceDefault, "", ""},
{ash::standalone_browser::kLacrosAvailabilityPolicyUserChoice,
ash::standalone_browser::kLacrosAvailabilityPolicySwitch,
ash::standalone_browser::kLacrosAvailabilityPolicyUserChoice},
{ash::standalone_browser::kLacrosAvailabilityPolicyLacrosDisabled,
ash::standalone_browser::kLacrosAvailabilityPolicySwitch,
ash::standalone_browser::kLacrosAvailabilityPolicyLacrosDisabled},
{ash::standalone_browser::kLacrosAvailabilityPolicyLacrosOnly,
ash::standalone_browser::kLacrosAvailabilityPolicySwitch,
ash::standalone_browser::kLacrosAvailabilityPolicyLacrosOnly},
};
const FeatureEntry::Choice kLacrosDataBackwardMigrationModePolicyChoices[] = {
{flags_ui::kGenericExperimentChoiceDefault, "", ""},
{crosapi::browser_util::kLacrosDataBackwardMigrationModePolicyNone,
crosapi::browser_util::kLacrosDataBackwardMigrationModePolicySwitch,
crosapi::browser_util::kLacrosDataBackwardMigrationModePolicyNone},
{crosapi::browser_util::kLacrosDataBackwardMigrationModePolicyKeepNone,
crosapi::browser_util::kLacrosDataBackwardMigrationModePolicySwitch,
crosapi::browser_util::kLacrosDataBackwardMigrationModePolicyKeepNone},
{crosapi::browser_util::kLacrosDataBackwardMigrationModePolicyKeepSafeData,
crosapi::browser_util::kLacrosDataBackwardMigrationModePolicySwitch,
crosapi::browser_util::kLacrosDataBackwardMigrationModePolicyKeepSafeData},
{crosapi::browser_util::kLacrosDataBackwardMigrationModePolicyKeepAll,
crosapi::browser_util::kLacrosDataBackwardMigrationModePolicySwitch,
crosapi::browser_util::kLacrosDataBackwardMigrationModePolicyKeepAll},
};
#endif
const FeatureEntry::Choice kForceUIDirectionChoices[] = …;
const FeatureEntry::Choice kForceTextDirectionChoices[] = …;
const FeatureEntry::Choice kIpProtectionProxyOptOutChoices[] = …;
#if BUILDFLAG(IS_CHROMEOS_ASH)
const FeatureEntry::Choice kSchedulerConfigurationChoices[] = {
{flags_ui::kGenericExperimentChoiceDefault, "", ""},
{flag_descriptions::kSchedulerConfigurationConservative,
switches::kSchedulerConfiguration,
switches::kSchedulerConfigurationConservative},
{flag_descriptions::kSchedulerConfigurationPerformance,
switches::kSchedulerConfiguration,
switches::kSchedulerConfigurationPerformance},
};
#endif
#if BUILDFLAG(IS_CHROMEOS_ASH)
const FeatureEntry::FeatureParam kDynamicSearchUpdateAnimationDuration_50[] = {
{"search_result_translation_duration", "50"}};
const FeatureEntry::FeatureParam kDynamicSearchUpdateAnimationDuration_100[] = {
{"search_result_translation_duration", "100"}};
const FeatureEntry::FeatureParam kDynamicSearchUpdateAnimationDuration_150[] = {
{"search_result_translation_duration", "150"}};
const FeatureEntry::FeatureVariation kDynamicSearchUpdateAnimationVariations[] =
{{"50ms", kDynamicSearchUpdateAnimationDuration_50,
std::size(kDynamicSearchUpdateAnimationDuration_50), nullptr},
{"100ms", kDynamicSearchUpdateAnimationDuration_100,
std::size(kDynamicSearchUpdateAnimationDuration_100), nullptr},
{"150ms", kDynamicSearchUpdateAnimationDuration_150,
std::size(kDynamicSearchUpdateAnimationDuration_150), nullptr}};
#endif
#if BUILDFLAG(ENABLE_NACL)
const FeatureEntry::Choice kVerboseLoggingInNaclChoices[] = {
{flag_descriptions::kVerboseLoggingInNaclChoiceDefault, "", ""},
{flag_descriptions::kVerboseLoggingInNaclChoiceLow,
switches::kVerboseLoggingInNacl, switches::kVerboseLoggingInNaclChoiceLow},
{flag_descriptions::kVerboseLoggingInNaclChoiceMedium,
switches::kVerboseLoggingInNacl,
switches::kVerboseLoggingInNaclChoiceMedium},
{flag_descriptions::kVerboseLoggingInNaclChoiceHigh,
switches::kVerboseLoggingInNacl,
switches::kVerboseLoggingInNaclChoiceHigh},
{flag_descriptions::kVerboseLoggingInNaclChoiceHighest,
switches::kVerboseLoggingInNacl,
switches::kVerboseLoggingInNaclChoiceHighest},
{flag_descriptions::kVerboseLoggingInNaclChoiceDisabled,
switches::kVerboseLoggingInNacl,
switches::kVerboseLoggingInNaclChoiceDisabled},
};
#endif
const FeatureEntry::Choice kSiteIsolationOptOutChoices[] = …;
const FeatureEntry::Choice kForceColorProfileChoices[] = …;
const FeatureEntry::Choice kMemlogModeChoices[] = …;
const FeatureEntry::Choice kMemlogStackModeChoices[] = …;
const FeatureEntry::Choice kMemlogSamplingRateChoices[] = …;
const FeatureEntry::FeatureParam
kOptimizationGuideOnDeviceModelBypassPerfParams[] = …;
const FeatureEntry::FeatureVariation
kOptimizationGuideOnDeviceModelVariations[] = …;
const FeatureEntry::FeatureParam kPageContentAnnotationsContentParams[] = …;
const FeatureEntry::FeatureParam kPageContentAnnotationsTitleParams[] = …;
const FeatureEntry::FeatureVariation kPageContentAnnotationsVariations[] = …;
#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_MAC) || \
BUILDFLAG(IS_WIN)
const FeatureEntry::FeatureParam kHistoryEmbeddingsAtKeywordAcceleration[]{ … };
const FeatureEntry::FeatureVariation kHistoryEmbeddingsVariations[] = …;
#endif
const FeatureEntry::FeatureParam kJourneysShowAllVisitsParams[] = …;
const FeatureEntry::FeatureParam kJourneysAllLocalesParams[] = …;
const FeatureEntry::FeatureVariation kJourneysVariations[] = …;
const FeatureEntry::FeatureVariation
kImageServiceOptimizationGuideSalientImagesVariations[] = …;
const FeatureEntry::FeatureParam kSidePanelJourneysOpensFromOmniboxParams[] = …;
const FeatureEntry::FeatureVariation
kSidePanelJourneysOpensFromOmniboxVariations[] = …;
#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_MAC) || \
BUILDFLAG(IS_WIN)
const FeatureEntry::FeatureParam kShortcutBoostSingleUrl[] = …;
const FeatureEntry::FeatureParam kShortcutBoostMultipleUrls[] = …;
const FeatureEntry::FeatureParam kShortcutBoostMultipleSearchesAndUrls[] = …;
const FeatureEntry::FeatureVariation kOmniboxShortcutBoostVariations[] = …;
const FeatureEntry::FeatureParam
kOmniboxRichAutocompletionConservativeModerate[] = …;
const FeatureEntry::FeatureParam
kOmniboxRichAutocompletionConservativeModerate2[] = …;
const FeatureEntry::FeatureParam kOmniboxRichAutocompletionAggressive2[] = …;
const FeatureEntry::FeatureParam kOmniboxRichAutocompletionAggressive3[] = …;
const FeatureEntry::FeatureParam kOmniboxRichAutocompletionAggressive4[] = …;
const FeatureEntry::FeatureVariation
kOmniboxRichAutocompletionPromisingVariations[] = …;
const FeatureEntry::FeatureParam
kOmniboxDriveSuggestionsIgnoreWhenDebouncing[] = …;
const FeatureEntry::FeatureVariation kOmniboxDriveSuggestionsVariations[] = …;
const FeatureEntry::FeatureParam kOmniboxStarterPackExpansionPreProdUrl[] = …;
const FeatureEntry::FeatureParam kOmniboxStarterPackExpansionStagingUrl[] = …;
const FeatureEntry::FeatureVariation kOmniboxStarterPackExpansionVariations[] = …;
#endif
const FeatureEntry::FeatureParam kOmniboxMlUrlScoringEnabledWithFixes[] = …;
const FeatureEntry::FeatureParam kOmniboxMlUrlScoringUnlimitedNumCandidates[] = …;
const FeatureEntry::FeatureParam kOmniboxMlUrlScoringMaxMatchesByProvider10[] = …;
const FeatureEntry::FeatureParam kOmniboxMlUrlScoringWithSearches[] = …;
const FeatureEntry::FeatureParam kOmniboxMlUrlScoringWithVerbatimURLs[] = …;
const FeatureEntry::FeatureParam
kOmniboxMlUrlScoringWithSearchesAndVerbatimURLs[] = …;
const FeatureEntry::FeatureVariation kOmniboxMlUrlScoringVariations[] = …;
const FeatureEntry::FeatureParam
kMlUrlPiecewiseMappedSearchBlendingAdjustedBy0[] = …;
const FeatureEntry::FeatureParam
kMlUrlPiecewiseMappedSearchBlendingDemotedBy50[] = …;
const FeatureEntry::FeatureParam
kMlUrlPiecewiseMappedSearchBlendingPromotedBy50[] = …;
const FeatureEntry::FeatureParam
kMlUrlPiecewiseMappedSearchBlendingPromotedBy100[] = …;
const FeatureEntry::FeatureParam
kMlUrlPiecewiseMappedSearchBlendingMobileMapping[] = …;
const FeatureEntry::FeatureVariation
kMlUrlPiecewiseMappedSearchBlendingVariations[] = …;
const FeatureEntry::FeatureParam kMlUrlSearchBlendingStable[] = …;
const FeatureEntry::FeatureParam kMlUrlSearchBlendingMappedConservativeUrls[] = …;
const FeatureEntry::FeatureParam kMlUrlSearchBlendingMappedModerateUrls[] = …;
const FeatureEntry::FeatureParam kMlUrlSearchBlendingMappedAggressiveUrls[] = …;
const FeatureEntry::FeatureVariation kMlUrlSearchBlendingVariations[] = …;
const FeatureEntry::FeatureVariation kUrlScoringModelVariations[] = …;
const FeatureEntry::FeatureParam
kOmniboxZeroSuggestPrefetchDebouncingMinimalFromLastRun[] = …;
const FeatureEntry::FeatureParam
kOmniboxZeroSuggestPrefetchDebouncingMinimalFromLastRequest[] = …;
const FeatureEntry::FeatureParam
kOmniboxZeroSuggestPrefetchDebouncingModerateFromLastRun[] = …;
const FeatureEntry::FeatureParam
kOmniboxZeroSuggestPrefetchDebouncingModerateFromLastRequest[] = …;
const FeatureEntry::FeatureParam
kOmniboxZeroSuggestPrefetchDebouncingAggressiveFromLastRun[] = …;
const FeatureEntry::FeatureParam
kOmniboxZeroSuggestPrefetchDebouncingAggressiveFromLastRequest[] = …;
const FeatureEntry::FeatureVariation
kOmniboxZeroSuggestPrefetchDebouncingVariations[] = …;
#if BUILDFLAG(IS_ANDROID)
constexpr FeatureEntry::FeatureParam kOmniboxActionsInSuggestTreatment1[] = {
{OmniboxFieldTrial::kActionsInSuggestPromoteEntitySuggestion.name, "true"},
{OmniboxFieldTrial::kActionsInSuggestPromoteReviewsAction.name, "true"},
{OmniboxFieldTrial::kActionsInSuggestRemoveActionTypes.name, ""}};
constexpr FeatureEntry::FeatureParam kOmniboxActionsInSuggestTreatment2[] = {
{OmniboxFieldTrial::kActionsInSuggestPromoteEntitySuggestion.name, "false"},
{OmniboxFieldTrial::kActionsInSuggestPromoteReviewsAction.name, "true"},
{OmniboxFieldTrial::kActionsInSuggestRemoveActionTypes.name, ""}};
constexpr FeatureEntry::FeatureParam kOmniboxActionsInSuggestTreatment3[] = {
{OmniboxFieldTrial::kActionsInSuggestPromoteEntitySuggestion.name, "true"},
{OmniboxFieldTrial::kActionsInSuggestPromoteReviewsAction.name, "false"},
{OmniboxFieldTrial::kActionsInSuggestRemoveActionTypes.name, ""}};
constexpr FeatureEntry::FeatureParam kOmniboxActionsInSuggestTreatment4[] = {
{OmniboxFieldTrial::kActionsInSuggestPromoteEntitySuggestion.name, "true"},
{OmniboxFieldTrial::kActionsInSuggestPromoteReviewsAction.name, "true"},
{OmniboxFieldTrial::kActionsInSuggestRemoveActionTypes.name, "reviews"}};
constexpr FeatureEntry::FeatureParam kOmniboxActionsInSuggestTreatment5[] = {
{OmniboxFieldTrial::kActionsInSuggestPromoteEntitySuggestion.name, "true"},
{OmniboxFieldTrial::kActionsInSuggestPromoteReviewsAction.name, "true"},
{OmniboxFieldTrial::kActionsInSuggestRemoveActionTypes.name, "call"}};
constexpr FeatureEntry::FeatureParam kOmniboxActionsInSuggestTreatment6[] = {
{OmniboxFieldTrial::kActionsInSuggestPromoteEntitySuggestion.name, "true"},
{OmniboxFieldTrial::kActionsInSuggestPromoteReviewsAction.name, "true"},
{OmniboxFieldTrial::kActionsInSuggestRemoveActionTypes.name, "directions"}};
constexpr FeatureEntry::FeatureParam kOmniboxActionsInSuggestTreatment7[] = {
{OmniboxFieldTrial::kActionsInSuggestPromoteEntitySuggestion.name, "true"},
{OmniboxFieldTrial::kActionsInSuggestPromoteReviewsAction.name, "false"},
{OmniboxFieldTrial::kActionsInSuggestRemoveActionTypes.name, "call"}};
constexpr FeatureEntry::FeatureParam kOmniboxActionsInSuggestTreatment8[] = {
{OmniboxFieldTrial::kActionsInSuggestPromoteEntitySuggestion.name, "false"},
{OmniboxFieldTrial::kActionsInSuggestPromoteReviewsAction.name, "false"},
{OmniboxFieldTrial::kActionsInSuggestRemoveActionTypes.name, "call"}};
constexpr FeatureEntry::FeatureVariation kOmniboxActionsInSuggestVariants[] = {
{"T1: Promote, Reviews, Directions, Calls",
kOmniboxActionsInSuggestTreatment1,
std::size(kOmniboxActionsInSuggestTreatment1), "t3366528"},
{"T2: Reviews, Directions, Calls", kOmniboxActionsInSuggestTreatment2,
std::size(kOmniboxActionsInSuggestTreatment2), "t3366528"},
{"T3: Promote, Calls, Directions, Reviews",
kOmniboxActionsInSuggestTreatment3,
std::size(kOmniboxActionsInSuggestTreatment3), "t3366528"},
{"T4: Promote, Directions, Calls", kOmniboxActionsInSuggestTreatment4,
std::size(kOmniboxActionsInSuggestTreatment4), "t3366528"},
{"T5: Promote, Reviews, Directions", kOmniboxActionsInSuggestTreatment5,
std::size(kOmniboxActionsInSuggestTreatment5), "t3366528"},
{"T6: Promote, Reviews, Calls", kOmniboxActionsInSuggestTreatment6,
std::size(kOmniboxActionsInSuggestTreatment6), "t3366528"},
{"T7: Promote, Directions, Reviews", kOmniboxActionsInSuggestTreatment7,
std::size(kOmniboxActionsInSuggestTreatment7), "t3366528"},
{"T8: Directions, Reviews", kOmniboxActionsInSuggestTreatment8,
std::size(kOmniboxActionsInSuggestTreatment8), "t3366528"},
};
constexpr FeatureEntry::FeatureParam kOmniboxAnswerActionsCounterfactual[] = {
{OmniboxFieldTrial::kAnswerActionsCounterfactual.name, "true"}};
constexpr FeatureEntry::FeatureParam kOmniboxAnswerActionsTreatment1[] = {
{OmniboxFieldTrial::kAnswerActionsShowAboveKeyboard.name, "true"},
{OmniboxFieldTrial::kAnswerActionsShowIfUrlsPresent.name, "false"},
{OmniboxFieldTrial::kAnswerActionsShowRichCard.name, "false"}};
constexpr FeatureEntry::FeatureParam kOmniboxAnswerActionsTreatment2[] = {
{OmniboxFieldTrial::kAnswerActionsShowAboveKeyboard.name, "false"},
{OmniboxFieldTrial::kAnswerActionsShowIfUrlsPresent.name, "true"},
{OmniboxFieldTrial::kAnswerActionsShowRichCard.name, "false"}};
constexpr FeatureEntry::FeatureParam kOmniboxAnswerActionsTreatment3[] = {
{OmniboxFieldTrial::kAnswerActionsShowAboveKeyboard.name, "false"},
{OmniboxFieldTrial::kAnswerActionsShowIfUrlsPresent.name, "false"},
{OmniboxFieldTrial::kAnswerActionsShowRichCard.name, "false"}};
constexpr FeatureEntry::FeatureParam kOmniboxAnswerActionsTreatment4[] = {
{OmniboxFieldTrial::kAnswerActionsShowAboveKeyboard.name, "true"},
{OmniboxFieldTrial::kAnswerActionsShowIfUrlsPresent.name, "false"},
{OmniboxFieldTrial::kAnswerActionsShowRichCard.name, "true"}};
constexpr FeatureEntry::FeatureParam kOmniboxAnswerActionsTreatment5[] = {
{OmniboxFieldTrial::kAnswerActionsShowAboveKeyboard.name, "false"},
{OmniboxFieldTrial::kAnswerActionsShowIfUrlsPresent.name, "false"},
{OmniboxFieldTrial::kAnswerActionsShowRichCard.name, "true"}};
constexpr FeatureEntry::FeatureVariation kOmniboxAnswerActionsVariants[] = {
{"Counterfactual: fetch without rendering ",
kOmniboxAnswerActionsCounterfactual,
std::size(kOmniboxAnswerActionsCounterfactual), "t3379046"},
{"T1: Show chips above keyboard when there are no url matches",
kOmniboxAnswerActionsTreatment1,
std::size(kOmniboxAnswerActionsTreatment1), "t3379047"},
{"T2: Show chips at position 0", kOmniboxAnswerActionsTreatment2,
std::size(kOmniboxAnswerActionsTreatment2), "t3379048"},
{"T3: Show chips at position 0 when there are no url matches",
kOmniboxAnswerActionsTreatment3,
std::size(kOmniboxAnswerActionsTreatment3), "t3379049"},
{"T4: Show rich card above keyboard when there are no url matches",
kOmniboxAnswerActionsTreatment4,
std::size(kOmniboxAnswerActionsTreatment4), "t3379050"},
{"T5: Show rich card at position 0 when there are no url matches",
kOmniboxAnswerActionsTreatment5,
std::size(kOmniboxAnswerActionsTreatment5), "t3379051"},
};
#endif
const FeatureEntry::FeatureParam kOmniboxSquareSuggestionIconFavicons[] = …;
const FeatureEntry::FeatureParam kOmniboxSquareSuggestionIconAnswers[] = …;
const FeatureEntry::FeatureParam
kOmniboxSquareSuggestionIconFaviconsAndAnswers[] = …;
const FeatureEntry::FeatureParam kOmniboxSquareSuggestionIconEntities[] = …;
const FeatureEntry::FeatureParam kOmniboxSquareSuggestionIconWeather[] = …;
const FeatureEntry::FeatureParam kOmniboxSquareSuggestionIconAll[] = …;
const FeatureEntry::FeatureParam kOmniboxSquareSuggestionIconAllFullEntity[] = …;
const FeatureEntry::FeatureVariation kOmniboxSquareSuggestionIconVariations[] = …;
const FeatureEntry::FeatureParam kMaxZeroSuggestMatches5[] = …;
const FeatureEntry::FeatureParam kMaxZeroSuggestMatches6[] = …;
const FeatureEntry::FeatureParam kMaxZeroSuggestMatches7[] = …;
const FeatureEntry::FeatureParam kMaxZeroSuggestMatches8[] = …;
const FeatureEntry::FeatureParam kMaxZeroSuggestMatches9[] = …;
const FeatureEntry::FeatureParam kMaxZeroSuggestMatches10[] = …;
const FeatureEntry::FeatureParam kMaxZeroSuggestMatches11[] = …;
const FeatureEntry::FeatureParam kMaxZeroSuggestMatches12[] = …;
const FeatureEntry::FeatureParam kMaxZeroSuggestMatches13[] = …;
const FeatureEntry::FeatureParam kMaxZeroSuggestMatches14[] = …;
const FeatureEntry::FeatureParam kMaxZeroSuggestMatches15[] = …;
const FeatureEntry::FeatureVariation kMaxZeroSuggestMatchesVariations[] = …;
const FeatureEntry::FeatureParam kOmniboxUIMaxAutocompleteMatches3[] = …;
const FeatureEntry::FeatureParam kOmniboxUIMaxAutocompleteMatches4[] = …;
const FeatureEntry::FeatureParam kOmniboxUIMaxAutocompleteMatches5[] = …;
const FeatureEntry::FeatureParam kOmniboxUIMaxAutocompleteMatches6[] = …;
const FeatureEntry::FeatureParam kOmniboxUIMaxAutocompleteMatches7[] = …;
const FeatureEntry::FeatureParam kOmniboxUIMaxAutocompleteMatches8[] = …;
const FeatureEntry::FeatureParam kOmniboxUIMaxAutocompleteMatches9[] = …;
const FeatureEntry::FeatureParam kOmniboxUIMaxAutocompleteMatches10[] = …;
const FeatureEntry::FeatureParam kOmniboxUIMaxAutocompleteMatches12[] = …;
const FeatureEntry::FeatureVariation
kOmniboxUIMaxAutocompleteMatchesVariations[] = …;
const FeatureEntry::FeatureParam kOmniboxMaxURLMatches2[] = …;
const FeatureEntry::FeatureParam kOmniboxMaxURLMatches3[] = …;
const FeatureEntry::FeatureParam kOmniboxMaxURLMatches4[] = …;
const FeatureEntry::FeatureParam kOmniboxMaxURLMatches5[] = …;
const FeatureEntry::FeatureParam kOmniboxMaxURLMatches6[] = …;
const FeatureEntry::FeatureVariation kOmniboxMaxURLMatchesVariations[] = …;
const FeatureEntry::FeatureParam kOmniboxDynamicMaxAutocomplete90[] = …;
const FeatureEntry::FeatureParam kOmniboxDynamicMaxAutocomplete91[] = …;
const FeatureEntry::FeatureParam kOmniboxDynamicMaxAutocomplete92[] = …;
const FeatureEntry::FeatureParam kOmniboxDynamicMaxAutocomplete100[] = …;
const FeatureEntry::FeatureParam kOmniboxDynamicMaxAutocomplete101[] = …;
const FeatureEntry::FeatureParam kOmniboxDynamicMaxAutocomplete102[] = …;
const FeatureEntry::FeatureVariation
kOmniboxDynamicMaxAutocompleteVariations[] = …;
const FeatureEntry::FeatureParam kOmniboxUniformRowHeight36[] = …;
const FeatureEntry::FeatureParam kOmniboxUniformRowHeight40[] = …;
const FeatureEntry::FeatureVariation kOmniboxSuggestionHeightVariations[] = …;
const FeatureEntry::FeatureParam kOmniboxFontSize12[] = …;
const FeatureEntry::FeatureParam kOmniboxFontSize13[] = …;
const FeatureEntry::FeatureParam kOmniboxFontSize14[] = …;
const FeatureEntry::FeatureVariation kOmniboxFontSizeVariations[] = …;
const FeatureEntry::FeatureParam kRepeatableQueries_6Searches_90Days[] = …;
const FeatureEntry::FeatureParam kRepeatableQueries_12Searches_90Days[] = …;
const FeatureEntry::FeatureParam kRepeatableQueries_6Searches_7Days[] = …;
const FeatureEntry::FeatureParam kRepeatableQueries_12Searches_7Days[] = …;
const FeatureEntry::FeatureVariation kOrganicRepeatableQueriesVariations[] = …;
#if !BUILDFLAG(IS_ANDROID)
const FeatureEntry::FeatureParam kMinimumTabWidthSettingPinned[] = …;
const FeatureEntry::FeatureParam kMinimumTabWidthSettingMedium[] = …;
const FeatureEntry::FeatureParam kMinimumTabWidthSettingLarge[] = …;
const FeatureEntry::FeatureParam kMinimumTabWidthSettingFull[] = …;
const FeatureEntry::FeatureVariation kTabScrollingVariations[] = …;
#endif
const FeatureEntry::FeatureParam kTabScrollingButtonPositionRight[] = …;
const FeatureEntry::FeatureParam kTabScrollingButtonPositionLeft[] = …;
const FeatureEntry::FeatureParam kTabScrollingButtonPositionSplit[] = …;
const FeatureEntry::FeatureVariation kTabScrollingButtonPositionVariations[] = …;
#if !BUILDFLAG(IS_ANDROID)
const FeatureEntry::FeatureParam kTabScrollingWithDraggingWithConstantSpeed[] = …;
const FeatureEntry::FeatureParam kTabScrollingWithDraggingWithVariableSpeed[] = …;
const FeatureEntry::FeatureVariation kTabScrollingWithDraggingVariations[] = …;
const FeatureEntry::FeatureParam kScrollableTabStripOverflowDivider[] = …;
const FeatureEntry::FeatureParam kScrollableTabStripOverflowFade[] = …;
const FeatureEntry::FeatureParam kScrollableTabStripOverflowShadow[] = …;
const FeatureEntry::FeatureVariation kScrollableTabStripOverflowVariations[] = …;
#endif
const FeatureEntry::FeatureParam kChromeLabsEnabledInFlags[] = …;
const FeatureEntry::FeatureVariation kChromeLabsVariations[] = …;
#if !BUILDFLAG(IS_ANDROID)
const FeatureEntry::FeatureParam kNtpCalendarModuleFakeData[] = …;
const FeatureEntry::FeatureVariation kNtpCalendarModuleVariations[] = …;
const FeatureEntry::FeatureParam kNtpChromeCartModuleFakeData[] = …;
const FeatureEntry::FeatureParam kNtpChromeCartModuleAbandonedCartDiscount[] = …;
const FeatureEntry::FeatureParam kNtpChromeCartModuleHeuristicsImprovement[] = …;
const FeatureEntry::FeatureParam kNtpChromeCartModuleRBDAndCouponDiscount[] = …;
const FeatureEntry::FeatureVariation kNtpChromeCartModuleVariations[] = …;
const flags_ui::FeatureEntry::FeatureParam kDiscountConsentNtpDialog[] = …;
const flags_ui::FeatureEntry::FeatureParam kDiscountConsentNtpNativeDialog[] = …;
const FeatureEntry::FeatureVariation kDiscountConsentV2Variations[] = …;
const flags_ui::FeatureEntry::FeatureParam kCodeBasedRBDEnabled[] = …;
const FeatureEntry::FeatureVariation kCodeBasedRBDVariations[] = …;
const FeatureEntry::FeatureParam kNtpDriveModuleFakeData[] = …;
const FeatureEntry::FeatureParam kNtpDriveModuleManagedUsersOnly[] = …;
const FeatureEntry::FeatureVariation kNtpDriveModuleVariations[] = …;
const FeatureEntry::FeatureParam kNtpMiddleSlotPromoDismissalFakeData[] = …;
const FeatureEntry::FeatureVariation kNtpMiddleSlotPromoDismissalVariations[] = …;
const FeatureEntry::FeatureParam
kNtpRealboxCr23NoShadowExpandedStateBgMatchesSteadyState[]{ … };
const FeatureEntry::FeatureParam
kNtpRealboxCr23ShadowExpandedStateBgMatchesOmnibox[]{ … };
const FeatureEntry::FeatureParam
kNtpRealboxCr23ShadowExpandedStateBgMatchesSteadyState[]{ … };
const FeatureEntry::FeatureVariation kNtpRealboxCr23ThemingVariations[] = …;
const FeatureEntry::FeatureParam kNtpSafeBrowsingModuleFastCooldown[] = …;
const FeatureEntry::FeatureVariation kNtpSafeBrowsingModuleVariations[] = …;
const FeatureEntry::FeatureParam kNtpMostRelevantTabResumptionModuleFakeData[] = …;
const FeatureEntry::FeatureParam
kNtpMostRelevantTabResumptionModuleFakeDataMostRecent[] = …;
const FeatureEntry::FeatureParam
kNtpMostRelevantTabResumptionModuleFakeDataFrequentlyVisitedAtTime[] = …;
const FeatureEntry::FeatureParam kNtpMostRelevantTabResumptionModuleTabData[] = …;
const FeatureEntry::FeatureParam
kNtpMostRelevantTabResumptionModuleRemoteTabData[] = …;
const FeatureEntry::FeatureParam
kNtpMostRelevantTabResumptionModuleVisitData[] = …;
const FeatureEntry::FeatureVariation
kNtpMostRelevantTabResumptionModuleVariations[] = …;
#endif
#if !BUILDFLAG(IS_ANDROID)
const FeatureEntry::FeatureParam kPerformanceInterventionStringVersion1[] = …;
const FeatureEntry::FeatureParam kPerformanceInterventionStringVersion2[] = …;
const FeatureEntry::FeatureParam kPerformanceInterventionStringVersion3[] = …;
const FeatureEntry::FeatureVariation
kPerformanceInterventionStringVariations[] = …;
#endif
#if BUILDFLAG(IS_ANDROID)
const FeatureEntry::FeatureParam kContextualSearchSuppressShortViewWith300Dp[] =
{{"contextual_search_minimum_page_height_dp", "300"}};
const FeatureEntry::FeatureParam kContextualSearchSuppressShortViewWith400Dp[] =
{{"contextual_search_minimum_page_height_dp", "400"}};
const FeatureEntry::FeatureParam kContextualSearchSuppressShortViewWith500Dp[] =
{{"contextual_search_minimum_page_height_dp", "500"}};
const FeatureEntry::FeatureParam kContextualSearchSuppressShortViewWith600Dp[] =
{{"contextual_search_minimum_page_height_dp", "600"}};
const FeatureEntry::FeatureVariation
kContextualSearchSuppressShortViewVariations[] = {
{"(300 dp)", kContextualSearchSuppressShortViewWith300Dp,
std::size(kContextualSearchSuppressShortViewWith300Dp), nullptr},
{"(400 dp)", kContextualSearchSuppressShortViewWith400Dp,
std::size(kContextualSearchSuppressShortViewWith400Dp), nullptr},
{"(500 dp)", kContextualSearchSuppressShortViewWith500Dp,
std::size(kContextualSearchSuppressShortViewWith500Dp), nullptr},
{"(600 dp)", kContextualSearchSuppressShortViewWith600Dp,
std::size(kContextualSearchSuppressShortViewWith600Dp), nullptr},
};
const FeatureEntry::FeatureParam kRichAutocompletionFullUrlThreeMinChar[] = {
{"rich_autocomplete_full_url", "true"},
{"rich_autocomplete_minimum_characters", "3"}};
const FeatureEntry::FeatureParam kRichAutocompletionNoFullUrlThreeMinChar[] = {
{"rich_autocomplete_full_url", "false"},
{"rich_autocomplete_minimum_characters", "3"}};
const FeatureEntry::FeatureParam kRichAutocompletionFullUrlFourMinChar[] = {
{"rich_autocomplete_full_url", "true"},
{"rich_autocomplete_minimum_characters", "4"}};
const FeatureEntry::FeatureParam kRichAutocompletionNoFullUrlFourMinChar[] = {
{"rich_autocomplete_full_url", "false"},
{"rich_autocomplete_minimum_characters", "4"}};
const FeatureEntry::FeatureVariation kRichAutocompletionAndroidVariations[] = {
{"(full url, 3 chars at least)", kRichAutocompletionFullUrlThreeMinChar,
std::size(kRichAutocompletionFullUrlThreeMinChar), nullptr},
{"(no full url, 3 chars at least)",
kRichAutocompletionNoFullUrlThreeMinChar,
std::size(kRichAutocompletionNoFullUrlThreeMinChar), nullptr},
{"(full url, 4 chars at least)", kRichAutocompletionFullUrlFourMinChar,
std::size(kRichAutocompletionFullUrlFourMinChar), nullptr},
{"(no full url, 4 chars at least)", kRichAutocompletionNoFullUrlFourMinChar,
std::size(kRichAutocompletionNoFullUrlFourMinChar), nullptr},
};
#endif
const FeatureEntry::FeatureParam
kResamplingScrollEventsPredictionTimeBasedEnabled[] = …;
const FeatureEntry::FeatureParam
kResamplingScrollEventsPredictionFramesBasedEnabled[] = …;
const FeatureEntry::FeatureVariation
kResamplingScrollEventsExperimentalPredictionVariations[] = …;
#if BUILDFLAG(IS_ANDROID)
const FeatureEntry::FeatureParam kStartSurfaceReturnTime_Immediate[] = {
{"start_surface_return_time_seconds", "0"},
{"start_surface_return_time_on_tablet_seconds", "0"}};
const FeatureEntry::FeatureParam kStartSurfaceReturnTime_10Seconds[] = {
{"start_surface_return_time_seconds", "10"},
{"start_surface_return_time_on_tablet_seconds", "10"}};
const FeatureEntry::FeatureParam kStartSurfaceReturnTime_1Minute[] = {
{"start_surface_return_time_seconds", "60"},
{"start_surface_return_time_on_tablet_seconds", "60"}};
const FeatureEntry::FeatureParam kStartSurfaceReturnTime_5Minute[] = {
{"start_surface_return_time_seconds", "300"},
{"start_surface_return_time_on_tablet_seconds", "300"}};
const FeatureEntry::FeatureParam kStartSurfaceReturnTime_60Minute[] = {
{"start_surface_return_time_seconds", "3600"},
{"start_surface_return_time_on_tablet_seconds", "3600"}};
const FeatureEntry::FeatureVariation kStartSurfaceReturnTimeVariations[] = {
{"Immediate", kStartSurfaceReturnTime_Immediate,
std::size(kStartSurfaceReturnTime_Immediate), nullptr},
{"10 seconds", kStartSurfaceReturnTime_10Seconds,
std::size(kStartSurfaceReturnTime_10Seconds), nullptr},
{"1 minute", kStartSurfaceReturnTime_1Minute,
std::size(kStartSurfaceReturnTime_1Minute), nullptr},
{"5 minute", kStartSurfaceReturnTime_5Minute,
std::size(kStartSurfaceReturnTime_5Minute), nullptr},
{"60 minute", kStartSurfaceReturnTime_60Minute,
std::size(kStartSurfaceReturnTime_60Minute), nullptr},
};
const FeatureEntry::FeatureParam kMagicStackAndroid_show_all_modules[] = {
{"show_all_modules", "true"}};
const FeatureEntry::FeatureVariation kMagicStackAndroidVariations[] = {
{"Show all modules", kMagicStackAndroid_show_all_modules,
std::size(kMagicStackAndroid_show_all_modules), nullptr},
};
const FeatureEntry::FeatureParam
kAccountReauthenticationRecentTimeWindow_0Minutes[] = {
{"account_reauthentication_recent_time_window_minutes", "0"},
};
const FeatureEntry::FeatureParam
kAccountReauthenticationRecentTimeWindow_1Minutes[] = {
{"account_reauthentication_recent_time_window_minutes", "1"},
};
const FeatureEntry::FeatureParam
kAccountReauthenticationRecentTimeWindow_5Minutes[] = {
{"account_reauthentication_recent_time_window_minutes", "5"},
};
const FeatureEntry::FeatureParam
kAccountReauthenticationRecentTimeWindow_10Minutes[] = {
{"account_reauthentication_recent_time_window_minutes", "10"},
};
const FeatureEntry::FeatureVariation
kAccountReauthenticationRecentTimeWindowVariations[] = {
{"0 minutes", kAccountReauthenticationRecentTimeWindow_0Minutes,
std::size(kAccountReauthenticationRecentTimeWindow_0Minutes), nullptr},
{"1 minutes", kAccountReauthenticationRecentTimeWindow_1Minutes,
std::size(kAccountReauthenticationRecentTimeWindow_1Minutes), nullptr},
{"5 minutes", kAccountReauthenticationRecentTimeWindow_5Minutes,
std::size(kAccountReauthenticationRecentTimeWindow_5Minutes), nullptr},
{"10 minutes", kAccountReauthenticationRecentTimeWindow_10Minutes,
std::size(kAccountReauthenticationRecentTimeWindow_10Minutes),
nullptr},
};
#endif
#if BUILDFLAG(IS_ANDROID)
const FeatureEntry::FeatureParam kLogoPolish_large[] = {
{"polish_logo_size_large", "true"},
{"polish_logo_size_medium", "false"}};
const FeatureEntry::FeatureParam kLogoPolish_medium[] = {
{"polish_logo_size_large", "false"},
{"polish_logo_size_medium", "true"}};
const FeatureEntry::FeatureParam kLogoPolish_small[] = {
{"polish_logo_size_large", "false"},
{"polish_logo_size_medium", "false"}};
const FeatureEntry::FeatureVariation kLogoPolishVariations[] = {
{"Logo height is large", kLogoPolish_large, std::size(kLogoPolish_large),
nullptr},
{"Logo height is medium", kLogoPolish_medium, std::size(kLogoPolish_medium),
nullptr},
{"Logo height is small", kLogoPolish_small, std::size(kLogoPolish_small),
nullptr},
};
const FeatureEntry::FeatureParam kFeedPositionAndroid_pull_up_feed[] = {
{"pull_up_feed", "true"}};
const FeatureEntry::FeatureParam
kFeedPositionAndroid_push_down_feed_target_feed_active[] = {
{"feed_active_targeting", "active"}};
const FeatureEntry::FeatureParam
kFeedPositionAndroid_push_down_feed_target_non_feed_active[] = {
{"feed_active_targeting", "non-active"}};
const FeatureEntry::FeatureParam
kFeedPositionAndroid_pull_up_feed_target_feed_active[] = {
{"pull_up_feed", "true"},
{"feed_active_targeting", "active"}};
const FeatureEntry::FeatureParam
kFeedPositionAndroid_pull_up_feed_target_non_feed_active[] = {
{"pull_up_feed", "true"},
{"feed_active_targeting", "non-active"}};
const FeatureEntry::FeatureVariation kFeedPositionAndroidVariations[] = {
{"Pull up Feed", kFeedPositionAndroid_pull_up_feed,
std::size(kFeedPositionAndroid_pull_up_feed), nullptr},
{"Push down Feed with targeting Feed active users",
kFeedPositionAndroid_push_down_feed_target_feed_active,
std::size(kFeedPositionAndroid_push_down_feed_target_feed_active),
nullptr},
{"Push down Feed with targeting non-Feed active users",
kFeedPositionAndroid_push_down_feed_target_non_feed_active,
std::size(kFeedPositionAndroid_push_down_feed_target_non_feed_active),
nullptr},
{"Pull up Feed with targeting Feed active users",
kFeedPositionAndroid_pull_up_feed_target_feed_active,
std::size(kFeedPositionAndroid_pull_up_feed_target_feed_active), nullptr},
{"Pull up Feed with targeting non-Feed active users",
kFeedPositionAndroid_pull_up_feed_target_non_feed_active,
std::size(kFeedPositionAndroid_pull_up_feed_target_non_feed_active),
nullptr},
};
const FeatureEntry::FeatureParam kSearchResumption_use_new_service[] = {
{"use_new_service", "true"}};
const FeatureEntry::FeatureVariation
kSearchResumptionModuleAndroidVariations[] = {
{"Use New Service", kSearchResumption_use_new_service,
std::size(kSearchResumption_use_new_service), nullptr},
};
const FeatureEntry::FeatureParam kTabResumptionModule_defaul_app_filter[] = {
{"show_see_more", "true"},
{"use_default_app_filter", "true"},
};
const FeatureEntry::FeatureParam kTabResumptionModule_salient_image[] = {
{"show_see_more", "true"},
{"use_default_app_filter", "true"},
{"use_salient_image", "true"},
};
const FeatureEntry::FeatureParam
kTabResumptionModule_single_tile_with_salient_image[] = {
{"max_tiles_number", "1"},
{"show_see_more", "true"},
{"use_default_app_filter", "true"},
{"use_salient_image", "true"},
};
const FeatureEntry::FeatureParam
kTabResumptionModule_single_tile_with_salient_image_show_default_reason[] =
{
{"max_tiles_number", "1"}, {"show_default_reason", "true"},
{"show_see_more", "true"}, {"use_default_app_filter", "true"},
{"use_salient_image", "true"},
};
const FeatureEntry::FeatureParam
kTabResumptionModule_combine_tabs_with_salient_image[] = {
{"show_see_more", "true"},
{"show_tabs_in_one_module", "true"},
{"use_default_app_filter", "true"},
{"use_salient_image", "true"},
};
const FeatureEntry::FeatureParam
kTabResumptionModule_combine_tabs_with_salient_image_single_tab_show_default_reason
[] = {
{"max_tiles_number", "1"},
{"show_default_reason", "true"},
{"show_see_more", "true"},
{"show_tabs_in_one_module", "true"},
{"use_default_app_filter", "true"},
{"use_salient_image", "true"},
};
const FeatureEntry::FeatureParam kTabResumptionModule_enable_v2_arm1[] = {
{"disable_blend", "true"}, {"enable_v2", "true"},
{"show_see_more", "true"}, {"show_tabs_in_one_module", "true"},
{"use_default_app_filter", "true"},
};
const FeatureEntry::FeatureParam kTabResumptionModule_enable_v2_arm2[] = {
{"enable_v2", "true"},
{"show_see_more", "true"},
{"show_tabs_in_one_module", "true"},
{"use_default_app_filter", "true"},
{"use_salient_image", "true"},
};
const FeatureEntry::FeatureParam kTabResumptionModule_enable_v2_arm3[] = {
{"disable_blend", "true"}, {"enable_v2", "true"},
{"max_tiles_number", "1"}, {"show_see_more", "true"},
{"show_tabs_in_one_module", "true"}, {"use_default_app_filter", "true"},
{"use_salient_image", "true"},
};
const FeatureEntry::FeatureParam
kTabResumptionModule_enable_v2_arm3_show_default_reason[] = {
{"disable_blend", "true"}, {"enable_v2", "true"},
{"max_tiles_number", "1"}, {"show_default_reason", "true"},
{"show_see_more", "true"}, {"show_tabs_in_one_module", "true"},
{"use_default_app_filter", "true"}, {"use_salient_image", "true"},
};
const FeatureEntry::FeatureParam kTabResumptionModule_enable_v2_arm4[] = {
{"disable_blend", "true"}, {"enable_v2", "true"},
{"show_see_more", "true"}, {"show_tabs_in_one_module", "true"},
{"use_default_app_filter", "true"}, {"use_salient_image", "true"},
};
const FeatureEntry::FeatureParam kTabResumptionModule_enable_v2_ml[] = {
{"enable_v2", "true"},
{"fetch_history_backend", "true"},
{"fetch_local_tabs_backend", "true"},
{"show_see_more", "true"},
{"show_tabs_in_one_module", "true"},
{"use_default_app_filter", "true"},
{"use_salient_image", "true"},
};
const FeatureEntry::FeatureParam
kTabResumptionModule_enable_v2_ml_show_default_reason[] = {
{"enable_v2", "true"},
{"fetch_history_backend", "true"},
{"fetch_local_tabs_backend", "true"},
{"max_tiles_number", "1"},
{"show_default_reason", "true"},
{"show_see_more", "true"},
{"show_tabs_in_one_module", "true"},
{"use_default_app_filter", "true"},
{"use_salient_image", "true"},
};
const FeatureEntry::FeatureVariation kTabResumptionModuleAndroidVariations[] = {
{"Default app filter", kTabResumptionModule_defaul_app_filter,
std::size(kTabResumptionModule_defaul_app_filter), nullptr},
{"Default app filter + Salient image", kTabResumptionModule_salient_image,
std::size(kTabResumptionModule_salient_image), nullptr},
{"Default app filter + Salient image + single tile",
kTabResumptionModule_single_tile_with_salient_image,
std::size(kTabResumptionModule_single_tile_with_salient_image), nullptr},
{"Default app filter + Salient image + one Tab module",
kTabResumptionModule_combine_tabs_with_salient_image,
std::size(kTabResumptionModule_combine_tabs_with_salient_image), nullptr},
{"V2 Arm1", kTabResumptionModule_enable_v2_arm1,
std::size(kTabResumptionModule_enable_v2_arm1), nullptr},
{"V2 Arm2", kTabResumptionModule_enable_v2_arm2,
std::size(kTabResumptionModule_enable_v2_arm2), nullptr},
{"V2 Arm3", kTabResumptionModule_enable_v2_arm3,
std::size(kTabResumptionModule_enable_v2_arm3), nullptr},
{"V2 Arm4", kTabResumptionModule_enable_v2_arm4,
std::size(kTabResumptionModule_enable_v2_arm4), nullptr},
{"V2 ML (collect data)", kTabResumptionModule_enable_v2_ml,
std::size(kTabResumptionModule_enable_v2_ml), nullptr},
{"Default app filter + Salient image + single tile + default reason",
kTabResumptionModule_single_tile_with_salient_image_show_default_reason,
std::size(
kTabResumptionModule_single_tile_with_salient_image_show_default_reason),
nullptr},
{"Default app filter + one Tab module + single tab + default reason",
kTabResumptionModule_combine_tabs_with_salient_image_single_tab_show_default_reason,
std::size(
kTabResumptionModule_combine_tabs_with_salient_image_single_tab_show_default_reason),
nullptr},
{"V2 Arm3 with default reason",
kTabResumptionModule_enable_v2_arm3_show_default_reason,
std::size(kTabResumptionModule_enable_v2_arm3_show_default_reason),
nullptr},
{"V2 ML with default reason",
kTabResumptionModule_enable_v2_ml_show_default_reason,
std::size(kTabResumptionModule_enable_v2_ml_show_default_reason), nullptr},
};
const FeatureEntry::FeatureParam
kMostVitedTilesReselect_enable_partial_match_arm1[] = {
{"lax_scheme_host", "true"},
{"lax_ref", "true"},
{"lax_query", "false"},
{"lax_path", "false"},
};
const FeatureEntry::FeatureParam
kMostVitedTilesReselect_enable_partial_match_arm2[] = {
{"lax_scheme_host", "true"},
{"lax_ref", "true"},
{"lax_query", "true"},
{"lax_path", "false"},
};
const FeatureEntry::FeatureParam
kMostVitedTilesReselect_enable_partial_match_arm3[] = {
{"lax_scheme_host", "true"},
{"lax_ref", "true"},
{"lax_query", "true"},
{"lax_path", "true"},
};
const FeatureEntry::FeatureVariation kMostVisitedTilesReselectVariations[] = {
{"Partial match Arm 1", kMostVitedTilesReselect_enable_partial_match_arm1,
std::size(kMostVitedTilesReselect_enable_partial_match_arm1), nullptr},
{"Partial match Arm 2", kMostVitedTilesReselect_enable_partial_match_arm2,
std::size(kMostVitedTilesReselect_enable_partial_match_arm2), nullptr},
{"Partial match Arm 3", kMostVitedTilesReselect_enable_partial_match_arm3,
std::size(kMostVitedTilesReselect_enable_partial_match_arm3), nullptr},
};
const FeatureEntry::FeatureParam
kNotificationPermissionRationale_show_dialog_next_start[] = {
{"always_show_rationale_before_requesting_permission", "true"},
{"permission_request_interval_days", "0"},
};
const FeatureEntry::FeatureVariation
kNotificationPermissionRationaleVariations[] = {
{"- Show rationale UI on next startup",
kNotificationPermissionRationale_show_dialog_next_start,
std::size(kNotificationPermissionRationale_show_dialog_next_start),
nullptr},
};
const FeatureEntry::FeatureParam kWebFeedAwareness_new_animation[] = {
{"awareness_style", "new_animation"}};
const FeatureEntry::FeatureParam kWebFeedAwareness_new_animation_no_limit[] = {
{"awareness_style", "new_animation_no_limit"}};
const FeatureEntry::FeatureParam kWebFeedAwareness_IPH[] = {
{"awareness_style", "IPH"}};
const FeatureEntry::FeatureVariation kWebFeedAwarenessVariations[] = {
{"new animation", kWebFeedAwareness_new_animation,
std::size(kWebFeedAwareness_new_animation), nullptr},
{"new animation rate limit off", kWebFeedAwareness_new_animation_no_limit,
std::size(kWebFeedAwareness_new_animation_no_limit), nullptr},
{"IPH and dot", kWebFeedAwareness_IPH, std::size(kWebFeedAwareness_IPH),
nullptr},
};
const FeatureEntry::FeatureParam kFeedCloseRefresh_Open[] = {
{"require_interaction", "false"}};
const FeatureEntry::FeatureParam kFeedCloseRefresh_Interact[] = {
{"require_interaction", "true"}};
const FeatureEntry::FeatureVariation kFeedCloseRefreshVariations[] = {
{"Open", kFeedCloseRefresh_Open, std::size(kFeedCloseRefresh_Open),
nullptr},
{"Interact", kFeedCloseRefresh_Interact,
std::size(kFeedCloseRefresh_Interact), nullptr},
};
#endif
const FeatureEntry::Choice kNotificationSchedulerChoices[] = …;
#if BUILDFLAG(IS_ANDROID)
const FeatureEntry::FeatureParam kPhotoPickerAdoptionStudyActionGetContent[] = {
{"use_action_get_content", "true"}};
const FeatureEntry::FeatureParam kPhotoPickerAdoptionStudyActionPickImages[] = {
{"use_action_pick_images", "true"}};
const FeatureEntry::FeatureParam
kPhotoPickerAdoptionStudyActionPickImagesPlus[] = {
{"use_action_pick_images_plus", "true"}};
const FeatureEntry::FeatureParam
kPhotoPickerAdoptionStudyChromePickerWithoutBrowse[] = {
{"chrome_picker_suppress_browse", "true"}};
const FeatureEntry::FeatureVariation
kPhotoPickerAdoptionStudyFeatureVariations[] = {
{"(Android Picker w/ACTION_GET_CONTENT)",
kPhotoPickerAdoptionStudyActionGetContent,
std::size(kPhotoPickerAdoptionStudyActionGetContent), nullptr},
{"(Android Picker w/ACTION_PICK_IMAGES)",
kPhotoPickerAdoptionStudyActionPickImages,
std::size(kPhotoPickerAdoptionStudyActionPickImages), nullptr},
{"(Android Picker w/ACTION_PICK_IMAGES Plus)",
kPhotoPickerAdoptionStudyActionPickImagesPlus,
std::size(kPhotoPickerAdoptionStudyActionPickImagesPlus), nullptr},
{"(Chrome Picker without Browse)",
kPhotoPickerAdoptionStudyChromePickerWithoutBrowse,
std::size(kPhotoPickerAdoptionStudyChromePickerWithoutBrowse),
nullptr}};
const FeatureEntry::FeatureParam kAuxiliarySearchDonation_MaxDonation_20[] = {
{chrome::android::kAuxiliarySearchMaxBookmarksCountParam.name, "20"},
{chrome::android::kAuxiliarySearchMaxTabsCountParam.name, "20"}};
const FeatureEntry::FeatureParam kAuxiliarySearchDonation_MaxDonation_100[] = {
{chrome::android::kAuxiliarySearchMaxBookmarksCountParam.name, "100"},
{chrome::android::kAuxiliarySearchMaxTabsCountParam.name, "100"}};
const FeatureEntry::FeatureParam kAuxiliarySearchDonation_MaxDonation_200[] = {
{chrome::android::kAuxiliarySearchMaxBookmarksCountParam.name, "200"},
{chrome::android::kAuxiliarySearchMaxTabsCountParam.name, "200"}};
const FeatureEntry::FeatureParam kAuxiliarySearchDonation_MaxDonation_500[] = {
{chrome::android::kAuxiliarySearchMaxBookmarksCountParam.name, "500"},
{chrome::android::kAuxiliarySearchMaxTabsCountParam.name, "500"}};
const FeatureEntry::FeatureVariation kAuxiliarySearchDonationVariations[] = {
{"50 counts", kAuxiliarySearchDonation_MaxDonation_20,
std::size(kAuxiliarySearchDonation_MaxDonation_20), nullptr},
{"100 counts", kAuxiliarySearchDonation_MaxDonation_100,
std::size(kAuxiliarySearchDonation_MaxDonation_100), nullptr},
{"200 counts", kAuxiliarySearchDonation_MaxDonation_200,
std::size(kAuxiliarySearchDonation_MaxDonation_200), nullptr},
{"500 counts", kAuxiliarySearchDonation_MaxDonation_500,
std::size(kAuxiliarySearchDonation_MaxDonation_500), nullptr},
};
const FeatureEntry::FeatureParam kBoardingPassDetectorUrl_AA[] = {
{features::kBoardingPassDetectorUrlParamName,
"https://www.aa.com/checkin/viewMobileBoardingPass"}};
const FeatureEntry::FeatureParam kBoardingPassDetectorUrl_All[] = {
{features::kBoardingPassDetectorUrlParamName,
"https://www.aa.com/checkin/viewMobileBoardingPass,https://united.com"}};
const FeatureEntry::FeatureParam kBoardingPassDetectorUrl_Test[] = {
{features::kBoardingPassDetectorUrlParamName, "http"}};
const FeatureEntry::FeatureVariation kBoardingPassDetectorVariations[] = {
{"AA", kBoardingPassDetectorUrl_AA, std::size(kBoardingPassDetectorUrl_AA),
nullptr},
{"All", kBoardingPassDetectorUrl_All,
std::size(kBoardingPassDetectorUrl_All), nullptr},
{"Test", kBoardingPassDetectorUrl_Test,
std::size(kBoardingPassDetectorUrl_Test), nullptr},
};
#endif
const FeatureEntry::FeatureParam kBackForwardCache_ForceCaching[] = …;
const FeatureEntry::FeatureVariation kBackForwardCacheVariations[] = …;
const FeatureEntry::FeatureParam kRenderDocument_Subframe[] = …;
const FeatureEntry::FeatureParam kRenderDocument_AllFrames[] = …;
const FeatureEntry::FeatureVariation kRenderDocumentVariations[] = …;
#if BUILDFLAG(IS_ANDROID)
const FeatureEntry::Choice kWebOtpBackendChoices[] = {
{flags_ui::kGenericExperimentChoiceDefault, "", ""},
{flag_descriptions::kWebOtpBackendSmsVerification, switches::kWebOtpBackend,
switches::kWebOtpBackendSmsVerification},
{flag_descriptions::kWebOtpBackendUserConsent, switches::kWebOtpBackend,
switches::kWebOtpBackendUserConsent},
{flag_descriptions::kWebOtpBackendAuto, switches::kWebOtpBackend,
switches::kWebOtpBackendAuto},
};
#endif
const FeatureEntry::Choice kDownloadWarningImprovementsChoices[] = …;
const FeatureEntry::Choice kEnableExperimentalCookieFeaturesChoices[] = …;
const FeatureEntry::FeatureParam kDrawPredictedPointExperiment1Point12Ms[] = …;
const FeatureEntry::FeatureParam kDrawPredictedPointExperiment2Points6Ms[] = …;
const FeatureEntry::FeatureParam kDrawPredictedPointExperiment1Point6Ms[] = …;
const FeatureEntry::FeatureParam kDrawPredictedPointExperiment2Points3Ms[] = …;
const FeatureEntry::FeatureVariation kDrawPredictedPointVariations[] = …;
#if BUILDFLAG(IS_CHROMEOS_ASH)
const FeatureEntry::Choice kForceControlFaceAeChoices[] = {
{"Default", "", ""},
{"Enable", media::switches::kForceControlFaceAe, "enable"},
{"Disable", media::switches::kForceControlFaceAe, "disable"}};
const FeatureEntry::Choice kAutoFramingOverrideChoices[] = {
{"Default", "", ""},
{"Force enabled", media::switches::kAutoFramingOverride,
media::switches::kAutoFramingForceEnabled},
{"Force disabled", media::switches::kAutoFramingOverride,
media::switches::kAutoFramingForceDisabled}};
const FeatureEntry::Choice kCameraSuperResOverrideChoices[] = {
{"Default", "", ""},
{"Enabled", media::switches::kCameraSuperResOverride,
media::switches::kCameraSuperResForceEnabled},
{"Disabled", media::switches::kCameraSuperResOverride,
media::switches::kCameraSuperResForceDisabled}};
const FeatureEntry::Choice kFaceRetouchOverrideChoices[] = {
{"Default", "", ""},
{"Enabled with relighting", media::switches::kFaceRetouchOverride,
media::switches::kFaceRetouchForceEnabledWithRelighting},
{"Enabled without relighting", media::switches::kFaceRetouchOverride,
media::switches::kFaceRetouchForceEnabledWithoutRelighting},
{"Disabled", media::switches::kFaceRetouchOverride,
media::switches::kFaceRetouchForceDisabled}};
#endif
#if BUILDFLAG(IS_CHROMEOS_ASH)
const FeatureEntry::Choice kCrostiniContainerChoices[] = {
{"Default", "", ""},
{"Buster", crostini::kCrostiniContainerFlag, "buster"},
{"Bullseye", crostini::kCrostiniContainerFlag, "bullseye"},
{"Bookworm", crostini::kCrostiniContainerFlag, "bookworm"},
};
#endif
#if !BUILDFLAG(IS_ANDROID)
const FeatureEntry::FeatureParam kSCTAuditingSamplingRateNone[] = …;
const FeatureEntry::FeatureParam kSCTAuditingSamplingRateAlternativeOne[] = …;
const FeatureEntry::FeatureParam kSCTAuditingSamplingRateAlternativeTwo[] = …;
const FeatureEntry::FeatureVariation kSCTAuditingVariations[] = …;
#endif
#if BUILDFLAG(IS_CHROMEOS_ASH)
const FeatureEntry::FeatureParam kProductivityLauncher_WithoutContinue[] = {
{"enable_continue", "false"}};
const FeatureEntry::FeatureVariation kProductivityLauncherVariations[] = {
{"without Continue", kProductivityLauncher_WithoutContinue,
std::size(kProductivityLauncher_WithoutContinue), nullptr}};
const FeatureEntry::FeatureParam kLauncherItemSuggest_LongDelay10Mins[] = {
{"long_delay_minutes", "10"}};
const FeatureEntry::FeatureParam kLauncherItemSuggest_LongDelay12Hours[] = {
{"long_delay_minutes", "720"}};
const FeatureEntry::FeatureParam kLauncherItemSuggest_LongDelay24Hours[] = {
{"long_delay_minutes", "1440"}};
const FeatureEntry::FeatureParam kLauncherItemSuggest_LongDelay36Hours[] = {
{"long_delay_minutes", "2160"}};
const FeatureEntry::FeatureParam kLauncherItemSuggest_LongDelay48Hours[] = {
{"long_delay_minutes", "2880"}};
const FeatureEntry::FeatureParam kLauncherItemSuggest_LongDelay60Hours[] = {
{"long_delay_minutes", "3600"}};
const FeatureEntry::FeatureParam kLauncherItemSuggest_LongDelay72Hours[] = {
{"long_delay_minutes", "4320"}};
const FeatureEntry::FeatureVariation kLauncherItemSuggestVariations[] = {
{"with 10 minute long delay", kLauncherItemSuggest_LongDelay10Mins,
std::size(kLauncherItemSuggest_LongDelay10Mins), nullptr},
{"with 12 hour long delay", kLauncherItemSuggest_LongDelay12Hours,
std::size(kLauncherItemSuggest_LongDelay12Hours), nullptr},
{"with 24 hour long delay", kLauncherItemSuggest_LongDelay24Hours,
std::size(kLauncherItemSuggest_LongDelay24Hours), nullptr},
{"with 36 hour long delay", kLauncherItemSuggest_LongDelay36Hours,
std::size(kLauncherItemSuggest_LongDelay36Hours), nullptr},
{"with 48 hour long delay", kLauncherItemSuggest_LongDelay48Hours,
std::size(kLauncherItemSuggest_LongDelay48Hours), nullptr},
{"with 60 hour long delay", kLauncherItemSuggest_LongDelay60Hours,
std::size(kLauncherItemSuggest_LongDelay60Hours), nullptr},
{"with 72 hour long delay", kLauncherItemSuggest_LongDelay72Hours,
std::size(kLauncherItemSuggest_LongDelay72Hours), nullptr}};
const FeatureEntry::FeatureParam kLauncherLocalImageSearchConfidence_10[] = {
{"confidence_threshold", "10"}};
const FeatureEntry::FeatureParam kLauncherLocalImageSearchConfidence_20[] = {
{"confidence_threshold", "20"}};
const FeatureEntry::FeatureParam kLauncherLocalImageSearchConfidence_30[] = {
{"confidence_threshold", "30"}};
const FeatureEntry::FeatureParam kLauncherLocalImageSearchConfidence_40[] = {
{"confidence_threshold", "40"}};
const FeatureEntry::FeatureParam kLauncherLocalImageSearchConfidence_50[] = {
{"confidence_threshold", "50"}};
const FeatureEntry::FeatureParam kLauncherLocalImageSearchConfidence_60[] = {
{"confidence_threshold", "60"}};
const FeatureEntry::FeatureParam kLauncherLocalImageSearchConfidence_70[] = {
{"confidence_threshold", "70"}};
const FeatureEntry::FeatureParam kLauncherLocalImageSearchConfidence_80[] = {
{"confidence_threshold", "80"}};
const FeatureEntry::FeatureParam kLauncherLocalImageSearchConfidence_90[] = {
{"confidence_threshold", "90"}};
const FeatureEntry::FeatureParam kLauncherLocalImageSearchConfidence_100[] = {
{"confidence_threshold", "100"}};
const FeatureEntry::FeatureParam kLauncherLocalImageSearchConfidence_110[] = {
{"confidence_threshold", "110"}};
const FeatureEntry::FeatureParam kLauncherLocalImageSearchConfidence_120[] = {
{"confidence_threshold", "120"}};
const FeatureEntry::FeatureVariation
kLauncherLocalImageSearchConfidenceVariations[] = {
{"threshold 10", kLauncherLocalImageSearchConfidence_10,
std::size(kLauncherLocalImageSearchConfidence_10), nullptr},
{"threshold 20", kLauncherLocalImageSearchConfidence_20,
std::size(kLauncherLocalImageSearchConfidence_20), nullptr},
{"threshold 30", kLauncherLocalImageSearchConfidence_30,
std::size(kLauncherLocalImageSearchConfidence_30), nullptr},
{"threshold 40", kLauncherLocalImageSearchConfidence_40,
std::size(kLauncherLocalImageSearchConfidence_40), nullptr},
{"threshold 50", kLauncherLocalImageSearchConfidence_50,
std::size(kLauncherLocalImageSearchConfidence_50), nullptr},
{"threshold 60", kLauncherLocalImageSearchConfidence_60,
std::size(kLauncherLocalImageSearchConfidence_60), nullptr},
{"threshold 70", kLauncherLocalImageSearchConfidence_70,
std::size(kLauncherLocalImageSearchConfidence_70), nullptr},
{"threshold 80", kLauncherLocalImageSearchConfidence_80,
std::size(kLauncherLocalImageSearchConfidence_80), nullptr},
{"threshold 90", kLauncherLocalImageSearchConfidence_90,
std::size(kLauncherLocalImageSearchConfidence_90), nullptr},
{"threshold 100", kLauncherLocalImageSearchConfidence_100,
std::size(kLauncherLocalImageSearchConfidence_100), nullptr},
{"threshold 110", kLauncherLocalImageSearchConfidence_110,
std::size(kLauncherLocalImageSearchConfidence_110), nullptr},
{"threshold 120", kLauncherLocalImageSearchConfidence_120,
std::size(kLauncherLocalImageSearchConfidence_120), nullptr}};
const FeatureEntry::FeatureParam kLauncherLocalImageSearchRelevance_10[] = {
{"relevance_threshold", "0.1"}};
const FeatureEntry::FeatureParam kLauncherLocalImageSearchRelevance_20[] = {
{"relevance_threshold", "0.2"}};
const FeatureEntry::FeatureParam kLauncherLocalImageSearchRelevance_30[] = {
{"relevance_threshold", "0.3"}};
const FeatureEntry::FeatureParam kLauncherLocalImageSearchRelevance_40[] = {
{"relevance_threshold", "0.4"}};
const FeatureEntry::FeatureParam kLauncherLocalImageSearchRelevance_50[] = {
{"relevance_threshold", "0.5"}};
const FeatureEntry::FeatureParam kLauncherLocalImageSearchRelevance_60[] = {
{"relevance_threshold", "0.6"}};
const FeatureEntry::FeatureParam kLauncherLocalImageSearchRelevance_70[] = {
{"relevance_threshold", "0.7"}};
const FeatureEntry::FeatureParam kLauncherLocalImageSearchRelevance_80[] = {
{"relevance_threshold", "0.8"}};
const FeatureEntry::FeatureParam kLauncherLocalImageSearchRelevance_90[] = {
{"relevance_threshold", "0.9"}};
const FeatureEntry::FeatureVariation
kLauncherLocalImageSearchRelevanceVariations[] = {
{"threshold 0.1", kLauncherLocalImageSearchRelevance_10,
std::size(kLauncherLocalImageSearchRelevance_10), nullptr},
{"threshold 0.2", kLauncherLocalImageSearchRelevance_20,
std::size(kLauncherLocalImageSearchRelevance_20), nullptr},
{"threshold 0.3", kLauncherLocalImageSearchRelevance_30,
std::size(kLauncherLocalImageSearchRelevance_30), nullptr},
{"threshold 0.4", kLauncherLocalImageSearchRelevance_40,
std::size(kLauncherLocalImageSearchRelevance_40), nullptr},
{"threshold 0.5", kLauncherLocalImageSearchRelevance_50,
std::size(kLauncherLocalImageSearchRelevance_50), nullptr},
{"threshold 0.6", kLauncherLocalImageSearchRelevance_60,
std::size(kLauncherLocalImageSearchRelevance_60), nullptr},
{"threshold 0.7", kLauncherLocalImageSearchRelevance_70,
std::size(kLauncherLocalImageSearchRelevance_70), nullptr},
{"threshold 0.8", kLauncherLocalImageSearchRelevance_80,
std::size(kLauncherLocalImageSearchRelevance_80), nullptr},
{"threshold 0.9", kLauncherLocalImageSearchRelevance_90,
std::size(kLauncherLocalImageSearchRelevance_90), nullptr}};
const FeatureEntry::FeatureParam kEolIncentiveOffer[] = {
{"incentive_type", "offer"}};
const FeatureEntry::FeatureParam kEolIncentiveNoOffer[] = {
{"incentive_type", "no_offer"}};
const FeatureEntry::FeatureVariation kEolIncentiveVariations[] = {
{"with offer", kEolIncentiveOffer, std::size(kEolIncentiveOffer), nullptr},
{"with no offer", kEolIncentiveNoOffer, std::size(kEolIncentiveNoOffer),
nullptr}};
const FeatureEntry::FeatureParam kCampbell9dot[] = {{"icon", "9dot"}};
const FeatureEntry::FeatureParam kCampbellHero[] = {{"icon", "hero"}};
const FeatureEntry::FeatureParam kCampbellAction[] = {{"icon", "action"}};
const FeatureEntry::FeatureParam kCampbellText[] = {{"icon", "text"}};
const FeatureEntry::FeatureVariation kCampbellGlyphVariations[] = {
{"9dot", kCampbell9dot, std::size(kCampbell9dot), nullptr},
{"hero", kCampbellHero, std::size(kCampbellHero), nullptr},
{"action", kCampbellAction, std::size(kCampbellAction), nullptr},
{"text", kCampbellText, std::size(kCampbellText), nullptr}};
const FeatureEntry::FeatureParam kCaptureModeEducationShortcutNudge[] = {
{"CaptureModeEducationParam", "ShortcutNudge"}};
const FeatureEntry::FeatureParam kCaptureModeEducationShortcutTutorial[] = {
{"CaptureModeEducationParam", "ShortcutTutorial"}};
const FeatureEntry::FeatureParam kCaptureModeEducationQuickSettingsNudge[] = {
{"CaptureModeEducationParam", "QuickSettingsNudge"}};
const FeatureEntry::FeatureVariation kCaptureModeEducationVariations[] = {
{"Shortcut Nudge", kCaptureModeEducationShortcutNudge,
std::size(kCaptureModeEducationShortcutNudge), nullptr},
{"Shortcut Tutorial", kCaptureModeEducationShortcutTutorial,
std::size(kCaptureModeEducationShortcutTutorial), nullptr},
{"Quick Settings Nudge", kCaptureModeEducationQuickSettingsNudge,
std::size(kCaptureModeEducationQuickSettingsNudge), nullptr}};
const FeatureEntry::FeatureParam
kSystemShortcutBehaviorIgnoreCommonVdiShortcuts[] = {
{"behavior_type", "ignore_common_vdi_shortcuts"}};
const FeatureEntry::FeatureParam
kSystemShortcutBehaviorIgnoreCommonVdiShortcutsFullscreenOnly[] = {
{"behavior_type", "ignore_common_vdi_shortcut_fullscreen_only"}};
const FeatureEntry::FeatureParam
kSystemShortcutBehaviorAllowSearchBasedPassthrough[] = {
{"behavior_type", "allow_search_based_passthrough"}};
const FeatureEntry::FeatureParam
kSystemShortcutBehaviorAllowSearchBasedPassthroughFullscreenOnly[] = {
{"behavior_type", "allow_search_based_passthrough_fullscreen_only"}};
const FeatureEntry::FeatureVariation kSystemShortcutBehaviorVariations[] = {
{"Ignore Common VDI Shortcuts",
kSystemShortcutBehaviorIgnoreCommonVdiShortcuts,
std::size(kSystemShortcutBehaviorIgnoreCommonVdiShortcuts), nullptr},
{"Ignore Common VDI Shortcuts while Fullscreen",
kSystemShortcutBehaviorIgnoreCommonVdiShortcutsFullscreenOnly,
std::size(kSystemShortcutBehaviorIgnoreCommonVdiShortcutsFullscreenOnly),
nullptr},
{"Allow Search Based Passthrough",
kSystemShortcutBehaviorAllowSearchBasedPassthrough,
std::size(kSystemShortcutBehaviorAllowSearchBasedPassthrough), nullptr},
{"Allow Search Based Passthrough while Fullscreen",
kSystemShortcutBehaviorAllowSearchBasedPassthroughFullscreenOnly,
std::size(
kSystemShortcutBehaviorAllowSearchBasedPassthroughFullscreenOnly),
nullptr},
};
#endif
#if BUILDFLAG(IS_CHROMEOS)
constexpr char kTaskManagerEndProcessDisabledForExtensionInternalName[] =
"enable-task-manager-end-process-disabled-for-extension";
#endif
#if BUILDFLAG(IS_CHROMEOS_ASH)
constexpr char kWallpaperFastRefreshInternalName[] = "wallpaper-fast-refresh";
constexpr char kWallpaperGooglePhotosSharedAlbumsInternalName[] =
"wallpaper-google-photos-shared-albums";
constexpr char kWallpaperPerDeskName[] = "per-desk-wallpaper";
constexpr char kGlanceablesTimeManagementClassroomStudentViewInternalName[] =
"glanceables-time-management-classroom-student-view";
constexpr char kGlanceablesTimeManagementTasksViewInternalName[] =
"glanceables-time-management-tasks-view";
constexpr char kBackgroundListeningName[] = "background-listening";
constexpr char kAppInstallServiceUriBorealisName[] =
"app-install-service-uri-borealis";
constexpr char kBorealisBigGlInternalName[] = "borealis-big-gl";
constexpr char kBorealisDGPUInternalName[] = "borealis-dgpu";
constexpr char kBorealisEnableUnsupportedHardwareInternalName[] =
"borealis-enable-unsupported-hardware";
constexpr char kBorealisForceBetaClientInternalName[] =
"borealis-force-beta-client";
constexpr char kBorealisForceDoubleScaleInternalName[] =
"borealis-force-double-scale";
constexpr char kBorealisLinuxModeInternalName[] = "borealis-linux-mode";
constexpr char kBorealisPermittedInternalName[] = "borealis-enabled";
constexpr char kBorealisProvisionInternalName[] = "borealis-provision";
constexpr char kBorealisScaleClientByDPIInternalName[] =
"borealis-scale-client-by-dpi";
constexpr char kBorealisZinkGlDriverInternalName[] = "borealis-zink-gl-driver";
constexpr char kClipboardHistoryLongpressInternalName[] =
"clipboard-history-longpress";
constexpr char kClipboardHistoryRefreshInternalName[] =
"clipboard-history-refresh";
constexpr char kClipboardHistoryUrlTitlesInternalName[] =
"clipboard-history-url-titles";
constexpr char kBluetoothUseFlossInternalName[] = "bluetooth-use-floss";
constexpr char kBluetoothUseLLPrivacyInternalName[] = "bluetooth-use-llprivacy";
constexpr char kSeaPenInternalName[] = "sea-pen";
constexpr char kAssistantIphInternalName[] = "assistant-iph";
constexpr char kGrowthCampaigns[] = "growth-campaigns";
constexpr char kGrowthCampaignsTestTag[] = "campaigns-test-tag";
constexpr char kVcTrayMicIndicatorInternalName[] = "vc-tray-mic-indicator";
constexpr char kVcTrayTitleHeaderInternalName[] = "vc-tray-title-header";
#endif
#if !BUILDFLAG(IS_ANDROID) && BUILDFLAG(GOOGLE_CHROME_BRANDING)
constexpr FeatureEntry::FeatureParam kIOSPromoBookmarkBubbleContextual[] = {
{"activation", "contextual"}};
constexpr FeatureEntry::FeatureParam kIOSPromoBookmarkBubbleAlwaysShow[] = {
{"activation", "always-show"}};
constexpr FeatureEntry::FeatureVariation kIOSPromoBookmarkBubbleVariations[] = {
{"contextual activation", kIOSPromoBookmarkBubbleContextual,
std::size(kIOSPromoBookmarkBubbleContextual), nullptr},
{"always show activation", kIOSPromoBookmarkBubbleAlwaysShow,
std::size(kIOSPromoBookmarkBubbleAlwaysShow), nullptr}};
#endif
#if BUILDFLAG(ENABLE_LENS_DESKTOP_GOOGLE_BRANDED_FEATURES)
constexpr FeatureEntry::FeatureParam kCscStagingEnvVariation[] = {
{"companion-homepage-url",
"https://lens-staging.corp.google.com/companion"},
{"companion-image-upload-url",
"https://lens-staging.corp.google.com/v2/upload"}};
constexpr FeatureEntry::FeatureParam kCscClobberVariation[] = {
{"open-links-in-current-tab", "true"},
};
constexpr FeatureEntry::FeatureParam kCscNewTabVariation[] = {
{"open-links-in-current-tab", "false"},
};
constexpr FeatureEntry::FeatureVariation kSidePanelCompanionVariations[] = {
{"with staging URL", kCscStagingEnvVariation,
std::size(kCscStagingEnvVariation), nullptr},
{"with clobber", kCscClobberVariation, std::size(kCscClobberVariation),
nullptr},
{"with new tab", kCscNewTabVariation, std::size(kCscNewTabVariation),
nullptr},
};
const FeatureEntry::Choice kForceCompanionPinnedStateChoices[] = {
{flags_ui::kGenericExperimentChoiceDefault, "", ""},
{"Forced Pinned", companion::switches::kForceCompanionPinnedState,
"pinned"},
{"Forced Unpinned", companion::switches::kForceCompanionPinnedState,
"unpinned"},
};
#endif
#if !BUILDFLAG(IS_ANDROID)
const FeatureEntry::FeatureParam kLensOverlayNoOmniboxEntryPoint[] = …;
const FeatureEntry::FeatureParam kLensOverlayResponsiveOmniboxEntryPoint[] = …;
const FeatureEntry::FeatureParam kLensOverlayPersistentOmniboxEntryPoint[] = …;
const FeatureEntry::FeatureParam kLensOverlaySearchBubble[] = …;
const FeatureEntry::FeatureVariation kLensOverlayVariations[] = …;
#endif
#if BUILDFLAG(IS_CHROMEOS_ASH)
const FeatureEntry::Choice kAlwaysEnableHdcpChoices[] = {
{flag_descriptions::kAlwaysEnableHdcpDefault, "", ""},
{flag_descriptions::kAlwaysEnableHdcpType0,
ash::switches::kAlwaysEnableHdcp, "type0"},
{flag_descriptions::kAlwaysEnableHdcpType1,
ash::switches::kAlwaysEnableHdcp, "type1"},
};
const FeatureEntry::Choice kPrintingPpdChannelChoices[] = {
{flags_ui::kGenericExperimentChoiceDefault, "", ""},
{ash::switches::kPrintingPpdChannelProduction,
ash::switches::kPrintingPpdChannel,
ash::switches::kPrintingPpdChannelProduction},
{ash::switches::kPrintingPpdChannelStaging,
ash::switches::kPrintingPpdChannel,
ash::switches::kPrintingPpdChannelStaging},
{ash::switches::kPrintingPpdChannelDev, ash::switches::kPrintingPpdChannel,
ash::switches::kPrintingPpdChannelDev},
{ash::switches::kPrintingPpdChannelLocalhost,
ash::switches::kPrintingPpdChannel,
ash::switches::kPrintingPpdChannelLocalhost}};
#endif
#if !BUILDFLAG(IS_ANDROID)
const FeatureEntry::FeatureParam kIsolateSandboxedIframesGroupingPerSite{ … };
const FeatureEntry::FeatureParam kIsolateSandboxedIframesGroupingPerOrigin{ … };
const FeatureEntry::FeatureParam kIsolateSandboxedIframesGroupingPerDocument{ … };
const FeatureEntry::FeatureVariation
kIsolateSandboxedIframesGroupingVariations[] = …;
#endif
const FeatureEntry::FeatureParam kWebRtcApmDownmixMethodAverage[] = …;
const FeatureEntry::FeatureParam kWebRtcApmDownmixMethodFirstChannel[] = …;
const FeatureEntry::FeatureVariation kWebRtcApmDownmixMethodVariations[] = …;
const FeatureEntry::FeatureParam
kSafetyCheckUnusedSitePermissionsNoDelayParam[] = …;
const FeatureEntry::FeatureParam
kSafetyCheckUnusedSitePermissionsWithDelayParam[] = …;
const FeatureEntry::FeatureVariation
kSafetyCheckUnusedSitePermissionsVariations[] = …;
const FeatureEntry::FeatureParam kSafetyHub_NoDelay[] = …;
const FeatureEntry::FeatureParam kSafetyHub_WithDelay[] = …;
const FeatureEntry::FeatureVariation kSafetyHubVariations[] = …;
const FeatureEntry::FeatureParam kTPCPhaseOutFacilitatedTestingControl1[] = …;
const FeatureEntry::FeatureParam kTPCPhaseOutFacilitatedTestingLabelOnly[] = …;
const FeatureEntry::FeatureParam kTPCPhaseOutFacilitatedTestingTreatment[] = …;
const FeatureEntry::FeatureParam kTPCPhaseOutFacilitatedTestingControl2[] = …;
const FeatureEntry::FeatureParam kTPCPhaseOutFacilitatedTestingForceControl1[] = …;
const FeatureEntry::FeatureParam
kTPCPhaseOutFacilitatedTestingForceLabelOnly[] = …;
const FeatureEntry::FeatureParam
kTPCPhaseOutFacilitatedTestingForceTreatment[] = …;
const FeatureEntry::FeatureParam kTPCPhaseOutFacilitatedTestingForceControl2[] = …;
const FeatureEntry::FeatureVariation
kTPCPhaseOutFacilitatedTestingVariations[] = …;
#if BUILDFLAG(IS_ANDROID)
const FeatureEntry::FeatureParam kTabStateFlatBufferMigrateStaleTabs[] = {
{"migrate_stale_tabs", "true"}};
const FeatureEntry::FeatureVariation kTabStateFlatBufferVariations[] = {
{"Migrate Stale Tabs", kTabStateFlatBufferMigrateStaleTabs,
std::size(kTabStateFlatBufferMigrateStaleTabs), nullptr}};
#endif
const FeatureEntry::FeatureParam
kTpcdHeuristicsGrants_CurrentInteraction_ShortRedirect_MainFrameInitiator
[] = …;
const FeatureEntry::FeatureParam
kTpcdHeuristicsGrants_CurrentInteraction_LongRedirect_MainFrameInitiator[] = …;
const FeatureEntry::FeatureParam
kTpcdHeuristicsGrants_CurrentInteraction_ShortRedirect_AllFrameInitiator[] = …;
const FeatureEntry::FeatureParam
kTpcdHeuristicsGrants_CurrentInteraction_LongRedirect_AllFrameInitiator[] = …;
const FeatureEntry::FeatureVariation kTpcdHeuristicsGrantsVariations[] = …;
#if BUILDFLAG(IS_CHROMEOS_ASH)
const FeatureEntry::FeatureParam kVcInferenceBackendAuto[] = {
{"inference_backend", "AUTO"},
};
const FeatureEntry::FeatureParam kVcInferenceBackendGpu[] = {
{"inference_backend", "GPU"},
};
const FeatureEntry::FeatureParam kVcInferenceBackendNpu[] = {
{"inference_backend", "NPU"},
};
const FeatureEntry::FeatureVariation kVcRelightingInferenceBackendVariations[] =
{{"AUTO", kVcInferenceBackendAuto, std::size(kVcInferenceBackendAuto),
nullptr},
{"GPU", kVcInferenceBackendGpu, std::size(kVcInferenceBackendGpu),
nullptr},
{"NPU", kVcInferenceBackendNpu, std::size(kVcInferenceBackendNpu),
nullptr}};
const FeatureEntry::FeatureVariation
kVcSegmentationInferenceBackendVariations[] = {
{"AUTO", kVcInferenceBackendAuto, std::size(kVcInferenceBackendAuto),
nullptr},
{"GPU", kVcInferenceBackendGpu, std::size(kVcInferenceBackendGpu),
nullptr},
{"NPU", kVcInferenceBackendNpu, std::size(kVcInferenceBackendNpu),
nullptr}};
const FeatureEntry::FeatureParam kVcSegmentationModelHighResolution[] = {
{"segmentation_model", "high_resolution"},
};
const FeatureEntry::FeatureParam kVcSegmentationModelLowerResolution[] = {
{"segmentation_model", "lower_resolution"},
};
const FeatureEntry::FeatureVariation kVcSegmentationModelVariations[] = {
{"High resolution model", kVcSegmentationModelHighResolution,
std::size(kVcSegmentationModelHighResolution), nullptr},
{"Lower resolution model", kVcSegmentationModelLowerResolution,
std::size(kVcSegmentationModelLowerResolution), nullptr},
};
const FeatureEntry::FeatureParam kVcLightIntensity10[] = {
{"light_intensity", "1.0"},
};
const FeatureEntry::FeatureParam kVcLightIntensity13[] = {
{"light_intensity", "1.3"},
};
const FeatureEntry::FeatureParam kVcLightIntensity15[] = {
{"light_intensity", "1.5"},
};
const FeatureEntry::FeatureParam kVcLightIntensity17[] = {
{"light_intensity", "1.7"},
};
const FeatureEntry::FeatureParam kVcLightIntensity18[] = {
{"light_intensity", "1.8"},
};
const FeatureEntry::FeatureParam kVcLightIntensity20[] = {
{"light_intensity", "2.0"},
};
const FeatureEntry::FeatureVariation kVcLightIntensityVariations[] = {
{"1.0", kVcLightIntensity10, std::size(kVcLightIntensity10), nullptr},
{"1.3", kVcLightIntensity13, std::size(kVcLightIntensity13), nullptr},
{"1.5", kVcLightIntensity15, std::size(kVcLightIntensity15), nullptr},
{"1.7", kVcLightIntensity17, std::size(kVcLightIntensity17), nullptr},
{"1.8", kVcLightIntensity18, std::size(kVcLightIntensity18), nullptr},
{"2.0", kVcLightIntensity20, std::size(kVcLightIntensity20), nullptr},
};
#endif
#if BUILDFLAG(IS_CHROMEOS_ASH)
const FeatureEntry::FeatureParam
kCrOSLateBootMissiveDisableStorageDegradation[] = {
{"controlled_degradation", "false"}};
const FeatureEntry::FeatureParam
kCrOSLateBootMissiveEnableStorageDegradation[] = {
{"controlled_degradation", "true"}};
const FeatureEntry::FeatureParam kCrOSLateBootMissiveDisableLegacyStorage[] = {
{"legacy_storage_enabled",
"UNDEFINED_PRIORITY"}};
const FeatureEntry::FeatureParam kCrOSLateBootMissiveEnableLegacyStorage[] = {
{"legacy_storage_enabled",
"SECURITY,"
"IMMEDIATE,"
"FAST_BATCH,"
"SLOW_BATCH,"
"BACKGROUND_BATCH,"
"MANUAL_BATCH,"
"MANUAL_BATCH_LACROS,"}};
const FeatureEntry::FeatureParam kCrOSLateBootMissivePartialLegacyStorage[] = {
{"legacy_storage_enabled",
"SECURITY,"
"IMMEDIATE,"}};
const FeatureEntry::FeatureParam kCrOSLateBootMissiveSecurityLegacyStorage[] = {
{"legacy_storage_enabled", "SECURITY,"}};
const FeatureEntry::FeatureVariation
kCrOSLateBootMissiveStorageDefaultVariations[] = {
{"Enable storage degradation",
kCrOSLateBootMissiveEnableStorageDegradation,
std::size(kCrOSLateBootMissiveEnableStorageDegradation), nullptr},
{"Disable storage degradation",
kCrOSLateBootMissiveDisableStorageDegradation,
std::size(kCrOSLateBootMissiveDisableStorageDegradation), nullptr},
{"Enable all queues legacy", kCrOSLateBootMissiveEnableLegacyStorage,
std::size(kCrOSLateBootMissiveEnableLegacyStorage), nullptr},
{"Disable all queues legacy", kCrOSLateBootMissiveDisableLegacyStorage,
std::size(kCrOSLateBootMissiveDisableLegacyStorage), nullptr},
{"Enable SECURITY and IMMEDIATE queues legacy only",
kCrOSLateBootMissivePartialLegacyStorage,
std::size(kCrOSLateBootMissivePartialLegacyStorage), nullptr},
{"Enable SECURITY queues legacy only",
kCrOSLateBootMissiveSecurityLegacyStorage,
std::size(kCrOSLateBootMissiveSecurityLegacyStorage), nullptr},
};
#endif
#if !BUILDFLAG(IS_ANDROID)
const FeatureEntry::Choice kCastMirroringTargetPlayoutDelayChoices[] = …;
#endif
#if !BUILDFLAG(IS_ANDROID)
const FeatureEntry::FeatureParam kPasswordGenerationTrustedAdvice[] = …;
const FeatureEntry::FeatureParam kPasswordGenerationSafetyFirst[] = …;
const FeatureEntry::FeatureParam kPasswordGenerationTrySomethingNew[] = …;
const FeatureEntry::FeatureParam kPasswordGenerationConvenience[] = …;
const FeatureEntry::FeatureParam kPasswordGenerationCrossDevice[] = …;
const FeatureEntry::FeatureParam kPasswordGenerationEditPassword[] = …;
const FeatureEntry::FeatureParam kPasswordGenerationChunkPassword[] = …;
const FeatureEntry::FeatureParam kPasswordGenerationNudgePassword[] = …;
const FeatureEntry::FeatureVariation kPasswordGenerationExperimentVariations[] = …;
#endif
#if BUILDFLAG(ENABLE_BOUND_SESSION_CREDENTIALS)
const FeatureEntry::FeatureParam kEnableBoundSessionCredentialsWithDice[] = …;
const FeatureEntry::FeatureVariation
kEnableBoundSessionCredentialsVariations[] = …;
#endif
#if BUILDFLAG(IS_ANDROID)
const FeatureEntry::FeatureParam kWebAuthnAndroidCredManGpmInCredManParam = {
device::kWebAuthnAndroidGpmInCredMan.name, "true"};
const FeatureEntry::FeatureParam kWebAuthnAndroidCredManGpmNotInCredManParam = {
device::kWebAuthnAndroidGpmInCredMan.name, "false"};
const FeatureEntry::FeatureVariation kWebAuthnAndroidCredManVariations[] = {
{"for Google Password Manager and 3rd party passkeys",
&kWebAuthnAndroidCredManGpmInCredManParam, 1, nullptr},
{"for 3rd party passkeys", &kWebAuthnAndroidCredManGpmNotInCredManParam, 1,
nullptr}};
const FeatureEntry::FeatureParam kHubPhase2WithIcons[] = {
{"supports_other_tabs", "true"}};
const FeatureEntry::FeatureParam kHubPhase2WithText[] = {
{"pane_switcher_uses_text", "true"},
{"supports_other_tabs", "true"}};
const FeatureEntry::FeatureParam kHubPhase3[] = {
{"pane_switcher_uses_text", "true"},
{"supports_other_tabs", "true"},
{"supports_search", "true"}};
const FeatureEntry::FeatureParam kHubPhase4[] = {
{"pane_switcher_uses_text", "true"},
{"supports_other_tabs", "true"},
{"supports_search", "true"},
{"supports_bookmarks", "true"}};
const FeatureEntry::FeatureVariation kAndroidHubV2Variations[] = {
{"Phase 2 w/ Icons", kHubPhase2WithIcons, std::size(kHubPhase2WithIcons),
nullptr},
{"Phase 2 w/ Text", kHubPhase2WithText, std::size(kHubPhase2WithText),
nullptr},
{"Phase 3", kHubPhase3, std::size(kHubPhase3), nullptr},
{"Phase 4", kHubPhase4, std::size(kHubPhase4), nullptr}};
const FeatureEntry::FeatureParam
kAndroidHubFloatingActionButtonAlternativeColors[] = {
{"hub_alternative_fab_color", "true"},
};
const FeatureEntry::FeatureVariation
kAndroidHubFloatingActionButtonVariations[] = {
{"Alternative colors", kAndroidHubFloatingActionButtonAlternativeColors,
std::size(kAndroidHubFloatingActionButtonAlternativeColors), nullptr},
};
const FeatureEntry::FeatureParam kTabGroupParityAndroidSkipCreationDialog[] = {
{"skip_tab_group_creation_dialog", "true"}};
const FeatureEntry::FeatureVariation kTabGroupParityAndroidVariations[] = {
{"Skip tab group creation dialog", kTabGroupParityAndroidSkipCreationDialog,
std::size(kTabGroupParityAndroidSkipCreationDialog), nullptr}};
const FeatureEntry::FeatureParam kTabGroupCreationDialogAndroidShowSetting[] = {
{"show_tab_group_creation_dialog_setting", "true"}};
const FeatureEntry::FeatureVariation
kTabGroupCreationDialogAndroidVariations[] = {
{"Show tab group creation dialog setting",
kTabGroupCreationDialogAndroidShowSetting,
std::size(kTabGroupCreationDialogAndroidShowSetting), nullptr}};
const FeatureEntry::FeatureParam kGtsCloseTabAnimationUseStandardEasing[] = {
{"rearrange_standard_easing", "true"}};
const FeatureEntry::FeatureParam
kGtsCloseTabAnimationCloseAllQuickDeleteAnimation[] = {
{"rearrange_standard_easing", "true"},
{"close_all_quick_delete_animation", "true"}};
const FeatureEntry::FeatureVariation kGtsCloseTabAnimationVariations[] = {
{"Option C use standard easing for rearrange",
kGtsCloseTabAnimationUseStandardEasing,
std::size(kGtsCloseTabAnimationUseStandardEasing), nullptr},
{"Option D close all uses quick delete animation",
kGtsCloseTabAnimationCloseAllQuickDeleteAnimation,
std::size(kGtsCloseTabAnimationCloseAllQuickDeleteAnimation), nullptr},
};
const FeatureEntry::FeatureParam kEdgeToEdgeBottomChinDebugFeatureParams[] = {
{chrome::android::kEdgeToEdgeBottomChinDebugParam.name, "true"}};
const FeatureEntry::FeatureVariation kEdgeToEdgeBottomChinVariations[] = {
{"debug", kEdgeToEdgeBottomChinDebugFeatureParams,
std::size(kEdgeToEdgeBottomChinDebugFeatureParams), nullptr},
};
const FeatureEntry::FeatureParam kBottomBrowserControlsRefactorParams[] = {
{"disable_bottom_controls_stacker_y_offset", "false"}};
const FeatureEntry::FeatureVariation
kBottomBrowserControlsRefactorVariations[] = {
{"Dispatch yOffset", kBottomBrowserControlsRefactorParams,
std::size(kBottomBrowserControlsRefactorParams), nullptr},
};
#endif
const flags_ui::FeatureEntry::FeatureParam kParcelTrackingTestDataDelivered[] = …;
const flags_ui::FeatureEntry::FeatureParam kParcelTrackingTestDataInProgress[] = …;
const flags_ui::FeatureEntry::FeatureParam
kParcelTrackingTestDataOutForDelivery[] = …;
const flags_ui::FeatureEntry::FeatureVariation
kParcelTrackingTestDataVariations[] = …;
#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_WIN) || \
BUILDFLAG(IS_CHROMEOS)
const flags_ui::FeatureEntry::FeatureParam kPwaNavigationCapturingDefaultOn[] = …;
const flags_ui::FeatureEntry::FeatureParam kPwaNavigationCapturingDefaultOff[] = …;
const flags_ui::FeatureEntry::FeatureParam
kPwaNavigationCapturingReimplDefaultOn[] = …;
const flags_ui::FeatureEntry::FeatureParam
kPwaNavigationCapturingReimplDefaultOff[] = …;
const flags_ui::FeatureEntry::FeatureVariation
kPwaNavigationCapturingVariations[] = …;
#endif
#if BUILDFLAG(IS_ANDROID)
const FeatureEntry::Choice kAccountBookmarksAndReadingListBehindOptInChoices[] =
{
{"Default", "", ""},
{"Enabled", switches::kEnableFeatures,
"SyncEnableBookmarksInTransportMode,"
"ReadingListEnableSyncTransportModeUponSignIn"},
};
const char kReplaceSyncPromosWithSignInPromosFeatures[] =
"ReplaceSyncPromosWithSignInPromos,"
"ReadingListEnableSyncTransportModeUponSignIn,"
"SyncEnableContactInfoDataTypeInTransportMode,"
"SyncEnableContactInfoDataTypeForCustomPassphraseUsers,"
"SyncEnableWalletMetadataInTransportMode,"
"SyncEnableWalletOfferInTransportMode,"
"EnablePasswordsAccountStorageForNonSyncingUsers,"
"HideSettingsSignInPromo,"
"FeedBottomSyncStringRemoval,"
"EnableBatchUploadFromSettings";
const char kFastFollowFeatures[] =
"ReplaceSyncPromosWithSignInPromos,"
"ReadingListEnableSyncTransportModeUponSignIn,"
"SyncEnableContactInfoDataTypeInTransportMode,"
"SyncEnableContactInfoDataTypeForCustomPassphraseUsers,"
"SyncEnableWalletMetadataInTransportMode,"
"SyncEnableWalletOfferInTransportMode,"
"EnablePasswordsAccountStorageForNonSyncingUsers,"
"HideSettingsSignInPromo,"
"FeedBottomSyncStringRemoval,"
"EnableBatchUploadFromSettings,"
"UnoPhase2FollowUp";
const FeatureEntry::Choice kReplaceSyncPromosWithSignInPromosChoices[] = {
{"Default", "", ""},
{"Disabled", "disable-features",
kReplaceSyncPromosWithSignInPromosFeatures},
{"Enabled", "enable-features", kReplaceSyncPromosWithSignInPromosFeatures},
{"Enabled with follow-ups", "enable-features", kFastFollowFeatures},
};
#endif
#if !BUILDFLAG(IS_ANDROID)
const FeatureEntry::FeatureParam
kUserEducationVersion2ShortIdleSessionCooldownDuration[] = …;
const FeatureEntry::FeatureVariation
kUserEducationExperienceVersion2Variants[] = …;
#endif
#if !BUILDFLAG(IS_ANDROID)
const FeatureEntry::FeatureParam kLinkPreviewTriggerTypeAltClick[] = …;
const FeatureEntry::FeatureParam kLinkPreviewTriggerTypeAltHover[] = …;
const FeatureEntry::FeatureParam kLinkPreviewTriggerTypeLongPress[] = …;
const FeatureEntry::FeatureVariation kLinkPreviewTriggerTypeVariations[] = …;
#endif
const FeatureEntry::FeatureParam
kAutofillGranularFillingAvailableVariationWithoutImprovedLabels[] = …;
const FeatureEntry::FeatureParam
kAutofillGranularFillingAvailableVariationWithFillEverythingAtTheTop[] = …;
const FeatureEntry::FeatureParam
kAutofillGranularFillingAvailableVariationWithExpandControlVisibleOnSelectionOnly
[] = …;
const FeatureEntry::FeatureVariation kAutofillGranularFillingAvailableVariations[] = …;
#if BUILDFLAG(IS_ANDROID)
inline constexpr flags_ui::FeatureEntry::FeatureParam
kAutofillVirtualViewStructureAndroidSkipCompatibilityCheck = {
autofill::features::
kAutofillVirtualViewStructureAndroidSkipsCompatibilityCheck.name,
"skip_all_checks"};
inline constexpr flags_ui::FeatureEntry::FeatureParam
kAutofillVirtualViewStructureAndroidOnlySkipAwgCheck = {
autofill::features::
kAutofillVirtualViewStructureAndroidSkipsCompatibilityCheck.name,
"only_skip_awg_check"};
inline constexpr flags_ui::FeatureEntry::FeatureVariation
kAutofillVirtualViewStructureVariation[] = {
{" without any compatibility check",
&kAutofillVirtualViewStructureAndroidSkipCompatibilityCheck, 1,
nullptr},
{" without AwG restriction",
&kAutofillVirtualViewStructureAndroidOnlySkipAwgCheck, 1, nullptr}};
#endif
const FeatureEntry::FeatureParam
kPrerender2WarmUpCompositorTriggerPointDidCommitLoad[] = …;
const FeatureEntry::FeatureParam
kPrerender2WarmUpCompositorTriggerPointDidDispatchDOMContentLoadedEvent[] = …;
const FeatureEntry::FeatureParam
kPrerender2WarmUpCompositorTriggerPointDidFinishLoad[] = …;
const FeatureEntry::FeatureVariation
kPrerender2WarmUpCompositorTriggerPointVariations[] = …;
#if BUILDFLAG(ENABLE_COMPOSE)
const FeatureEntry::FeatureParam kComposeProactiveNudge_CompactUI_50[] = …;
const FeatureEntry::FeatureParam kComposeProactiveNudge_LargeUI_50[] = …;
const FeatureEntry::FeatureParam kComposeProactiveNudge_CompactUI_100[] = …;
const FeatureEntry::FeatureParam kComposeProactiveNudge_LargeUI_100[] = …;
const FeatureEntry::FeatureParam kComposeProactiveNudge_NoFocusDelay_10[] = …;
const FeatureEntry::FeatureParam kComposeProactiveNudge_NoFocusDelay_50[] = …;
const FeatureEntry::FeatureParam kComposeProactiveNudge_LongFocusDelay_10[] = …;
const FeatureEntry::FeatureParam kComposeProactiveNudge_LongFocusDelay_50[] = …;
const FeatureEntry::FeatureVariation kComposeProactiveNudgeVariations[] = …;
const FeatureEntry::FeatureParam kComposeSelectionNudge_1[] = …;
const FeatureEntry::FeatureParam kComposeSelectionNudge_15[] = …;
const FeatureEntry::FeatureParam kComposeSelectionNudge_30[] = …;
const FeatureEntry::FeatureParam kComposeSelectionNudge_30_1s[] = …;
const FeatureEntry::FeatureParam kComposeSelectionNudge_30_2s[] = …;
const FeatureEntry::FeatureParam kComposeSelectionNudge_50[] = …;
const FeatureEntry::FeatureParam kComposeSelectionNudge_100[] = …;
const FeatureEntry::FeatureVariation kComposeSelectionNudgeVariations[] = …;
#endif
#if BUILDFLAG(IS_MAC) || BUILDFLAG(IS_WIN)
const FeatureEntry::FeatureParam kLocationProviderManagerModeNetworkOnly[] = {
{"LocationProviderManagerMode", "NetworkOnly"}};
const FeatureEntry::FeatureParam kLocationProviderManagerModePlatformOnly[] = {
{"LocationProviderManagerMode", "PlatformOnly"}};
const FeatureEntry::FeatureParam kLocationProviderManagerModeHybridPlatform[] =
{{"LocationProviderManagerMode", "HybridPlatform"}};
const FeatureEntry::FeatureVariation kLocationProviderManagerVariations[] = {
{"NetworkOnly", kLocationProviderManagerModeNetworkOnly,
std::size(kLocationProviderManagerModeNetworkOnly), nullptr},
{"PlatformOnly", kLocationProviderManagerModePlatformOnly,
std::size(kLocationProviderManagerModePlatformOnly), nullptr},
{"HybridPlatform", kLocationProviderManagerModeHybridPlatform,
std::size(kLocationProviderManagerModeHybridPlatform), nullptr}};
#endif
#if !BUILDFLAG(IS_ANDROID)
const FeatureEntry::FeatureParam kWebAuthnEnclaveAuthenticatorEnabledParam = …;
const FeatureEntry::FeatureVariation kWebAuthnEnclaveAuthenticatorVariations[] = …;
#endif
const FeatureEntry::FeatureParam kAutofillUpstreamUpdatedUi_Security[] = …;
const FeatureEntry::FeatureParam kAutofillUpstreamUpdatedUi_Convenience[] = …;
const FeatureEntry::FeatureParam kAutofillUpstreamUpdatedUi_Education[] = …;
const FeatureEntry::FeatureVariation kAutofillUpstreamUpdatedUiOptions[] = …;
const FeatureEntry::FeatureParam
kDeferRendererTasksAfterInputMinimalTypesPolicyParam[] = …;
const FeatureEntry::FeatureParam
kDeferRendererTasksAfterInputNonUserBlockingDeferrableTypesPolicyParam[] = …;
const FeatureEntry::FeatureParam
kDeferRendererTasksAfterInputAllDeferrableTypesPolicyParam[] = …;
const FeatureEntry::FeatureParam
kDeferRendererTasksAfterInputNonUserBlockingTypesPolicyParam[] = …;
const FeatureEntry::FeatureParam
kDeferRendererTasksAfterInputAllTypesPolicyParam[] = …;
const FeatureEntry::FeatureVariation kDeferRendererTasksAfterInputVariations[] = …;
const FeatureEntry::FeatureParam kAutofillVcnEnrollRequestTimeout_5Seconds[] = …;
const FeatureEntry::FeatureParam
kAutofillVcnEnrollRequestTimeout_7Point5Seconds[] = …;
const FeatureEntry::FeatureParam kAutofillVcnEnrollRequestTimeout_10Seconds[] = …;
const FeatureEntry::FeatureVariation kAutofillVcnEnrollRequestTimeoutOptions[] = …;
#if BUILDFLAG(ENABLE_EXTENSIONS)
const FeatureEntry::FeatureParam
kExtensionTelemetryEnterpriseReportingIntervalSeconds_20Seconds[] = …;
const FeatureEntry::FeatureParam
kExtensionTelemetryEnterpriseReportingIntervalSeconds_60Seconds[] = …;
const FeatureEntry::FeatureParam
kExtensionTelemetryEnterpriseReportingIntervalSeconds_300Seconds[] = …;
const FeatureEntry::FeatureVariation
kExtensionTelemetryEnterpriseReportingIntervalSecondsVariations[] = …;
#endif
const FeatureEntry::FeatureParam kDiscountOnShoppyPage[] = …;
const FeatureEntry::FeatureVariation kDiscountsVariations[] = …;
const FeatureEntry::FeatureParam
kSecurePaymentConfirmationNetworkAndIssuerIcons_Inline[] = …;
const FeatureEntry::FeatureParam
kSecurePaymentConfirmationNetworkAndIssuerIcons_Rows[] = …;
const FeatureEntry::FeatureVariation
kSecurePaymentConfirmationNetworkAndIssuerIconsOptions[] = …;
#if BUILDFLAG(IS_ANDROID)
const FeatureEntry::FeatureParam kClayBlockingWithFakeBackend[] = {
{"use_fake_backend", "true"}};
const FeatureEntry::FeatureVariation kClayBlockingVariations[] = {
{"(with fake backend)", kClayBlockingWithFakeBackend,
std::size(kClayBlockingWithFakeBackend), nullptr}};
#endif
const FeatureEntry kFeatureEntries[] = …;
class FlagsStateSingleton : public flags_ui::FlagsState::Delegate { … };
bool ShouldSkipNonDeprecatedFeatureEntry(const FeatureEntry& entry) { … }
}
#if BUILDFLAG(IS_CHROMEOS_ASH)
void GetStorageAsync(Profile* profile,
GetStorageCallback callback,
bool current_user_is_owner) {
if (current_user_is_owner) {
ash::OwnerSettingsServiceAsh* service =
ash::OwnerSettingsServiceAshFactory::GetForBrowserContext(profile);
std::move(callback).Run(
std::make_unique<ash::about_flags::OwnerFlagsStorage>(
profile->GetPrefs(), service),
flags_ui::kOwnerAccessToFlags);
} else {
std::move(callback).Run(std::make_unique<flags_ui::PrefServiceFlagsStorage>(
profile->GetPrefs()),
flags_ui::kGeneralAccessFlagsOnly);
}
}
#endif
void GetStorage(Profile* profile, GetStorageCallback callback) { … }
bool ShouldSkipConditionalFeatureEntry(const flags_ui::FlagsStorage* storage,
const FeatureEntry& entry) { … }
void ConvertFlagsToSwitches(flags_ui::FlagsStorage* flags_storage,
base::CommandLine* command_line,
flags_ui::SentinelsMode sentinels) { … }
std::vector<std::string> RegisterAllFeatureVariationParameters(
flags_ui::FlagsStorage* flags_storage,
base::FeatureList* feature_list) { … }
void GetFlagFeatureEntries(flags_ui::FlagsStorage* flags_storage,
flags_ui::FlagAccess access,
base::Value::List& supported_entries,
base::Value::List& unsupported_entries) { … }
void GetFlagFeatureEntriesForDeprecatedPage(
flags_ui::FlagsStorage* flags_storage,
flags_ui::FlagAccess access,
base::Value::List& supported_entries,
base::Value::List& unsupported_entries) { … }
flags_ui::FlagsState* GetCurrentFlagsState() { … }
bool IsRestartNeededToCommitChanges() { … }
void SetFeatureEntryEnabled(flags_ui::FlagsStorage* flags_storage,
const std::string& internal_name,
bool enable) { … }
void SetOriginListFlag(const std::string& internal_name,
const std::string& value,
flags_ui::FlagsStorage* flags_storage) { … }
void SetStringFlag(const std::string& internal_name,
const std::string& value,
flags_ui::FlagsStorage* flags_storage) { … }
void RemoveFlagsSwitches(base::CommandLine::SwitchMap* switch_list) { … }
void ResetAllFlags(flags_ui::FlagsStorage* flags_storage) { … }
#if BUILDFLAG(IS_CHROMEOS)
void CrosUrlFlagsRedirect() {
#if BUILDFLAG(IS_CHROMEOS_LACROS)
lacros_url_handling::NavigateInAsh(GURL(chrome::kChromeUIFlagsURL));
#else
DCHECK(crosapi::BrowserManager::Get());
crosapi::BrowserManager::Get()->SwitchToTab(
GURL(chrome::kChromeUIFlagsURL),
NavigateParams::RESPECT);
#endif
}
#endif
void RecordUMAStatistics(flags_ui::FlagsStorage* flags_storage,
const std::string& histogram_name) { … }
namespace testing {
std::vector<FeatureEntry>* GetEntriesForTesting() { … }
void SetFeatureEntries(const std::vector<FeatureEntry>& entries) { … }
ScopedFeatureEntries::ScopedFeatureEntries(
const std::vector<flags_ui::FeatureEntry>& entries) { … }
ScopedFeatureEntries::~ScopedFeatureEntries() { … }
base::span<const FeatureEntry> GetFeatureEntries() { … }
}
}