| // Copyright 2012 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifdef UNSAFE_BUFFERS_BUILD |
| // TODO(crbug.com/40285824): Remove this and convert code to safer constructs. |
| #pragma allow_unsafe_buffers |
| #endif |
| |
| // Instructions for adding new entries to this file: |
| // https://chromium.googlesource.com/chromium/src/+/main/docs/how_to_add_your_feature_flag.md#step-2_adding-the-feature-flag-to-the-chrome_flags-ui |
| |
| #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/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/task_manager/common/task_manager_features.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 "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/remote_cocoa/app_shim/features.h" |
| #include "components/safe_browsing/core/common/features.h" |
| #include "components/saved_tab_groups/public/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 "skia/buildflags.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/payments/content/android/payment_feature_map.h" |
| #include "components/segmentation_platform/public/features.h" |
| #include "components/translate/content/android/translate_message.h" |
| #include "ui/android/ui_android_features.h" |
| #else // BUILDFLAG(IS_ANDROID) |
| #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 // BUILDFLAG(IS_ANDROID) |
| |
| #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" // nogncheck |
| #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 // BUILDFLAG(IS_CHROMEOS_ASH) |
| |
| #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 // BUILDFLAG(IS_MAC) |
| |
| #if BUILDFLAG(ENABLE_EXTENSIONS) |
| #include "chrome/browser/extensions/cws_info_service.h" |
| #include "extensions/common/extension_features.h" |
| #include "extensions/common/switches.h" |
| #endif // BUILDFLAG(ENABLE_EXTENSIONS) |
| |
| #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 // BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS_ASH) |
| |
| #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 // BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_WIN) |
| |
| #if !BUILDFLAG(IS_ANDROID) |
| // This causes a gn error on Android builds, because gn does not understand |
| // buildflags. |
| #include "components/user_education/common/user_education_features.h" // nogncheck |
| #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 // defined(TOOLKIT_VIEWS) |
| |
| #if BUILDFLAG(ENABLE_BOUND_SESSION_CREDENTIALS) |
| #include "components/unexportable_keys/features.h" // nogncheck |
| #endif |
| |
| #if BUILDFLAG(SKIA_BUILD_RUST_PNG) |
| #include "skia/rusty_png_feature.h" |
| #endif |
| |
| using flags_ui::FeatureEntry; |
| using flags_ui::kDeprecated; |
| using flags_ui::kOsAndroid; |
| using flags_ui::kOsCrOS; |
| using flags_ui::kOsCrOSOwnerOnly; |
| using flags_ui::kOsLacros; |
| using flags_ui::kOsLinux; |
| using flags_ui::kOsMac; |
| using flags_ui::kOsWin; |
| |
| namespace about_flags { |
| |
| namespace { |
| |
| const unsigned kOsAll = |
| kOsMac | kOsWin | kOsLinux | kOsCrOS | kOsAndroid | kOsLacros; |
| const unsigned kOsDesktop = kOsMac | kOsWin | kOsLinux | kOsCrOS | kOsLacros; |
| |
| #if defined(USE_AURA) |
| const unsigned kOsAura = kOsWin | kOsLinux | kOsCrOS | kOsLacros; |
| #endif // USE_AURA |
| |
| #if defined(USE_AURA) |
| const FeatureEntry::Choice kPullToRefreshChoices[] = { |
| {flags_ui::kGenericExperimentChoiceDefault, "", ""}, |
| {flags_ui::kGenericExperimentChoiceDisabled, switches::kPullToRefresh, "0"}, |
| {flags_ui::kGenericExperimentChoiceEnabled, switches::kPullToRefresh, "1"}, |
| {flag_descriptions::kPullToRefreshEnabledTouchscreen, |
| switches::kPullToRefresh, "2"}}; |
| #endif // USE_AURA |
| |
| const FeatureEntry::Choice kEnableBenchmarkingChoices[] = { |
| {flag_descriptions::kEnableBenchmarkingChoiceDisabled, "", ""}, |
| {flag_descriptions::kEnableBenchmarkingChoiceDefaultFeatureStates, |
| variations::switches::kEnableBenchmarking, ""}, |
| {flag_descriptions::kEnableBenchmarkingChoiceMatchFieldTrialTestingConfig, |
| variations::switches::kEnableBenchmarking, |
| variations::switches::kEnableFieldTrialTestingConfig}, |
| }; |
| |
| const FeatureEntry::Choice kOverlayStrategiesChoices[] = { |
| {flag_descriptions::kOverlayStrategiesDefault, "", ""}, |
| {flag_descriptions::kOverlayStrategiesNone, |
| switches::kEnableHardwareOverlays, ""}, |
| {flag_descriptions::kOverlayStrategiesUnoccludedFullscreen, |
| switches::kEnableHardwareOverlays, "single-fullscreen"}, |
| {flag_descriptions::kOverlayStrategiesUnoccluded, |
| switches::kEnableHardwareOverlays, "single-fullscreen,single-on-top"}, |
| {flag_descriptions::kOverlayStrategiesOccludedAndUnoccluded, |
| switches::kEnableHardwareOverlays, |
| "single-fullscreen,single-on-top,underlay"}, |
| }; |
| |
| const FeatureEntry::Choice kTouchTextSelectionStrategyChoices[] = { |
| {flags_ui::kGenericExperimentChoiceDefault, "", ""}, |
| {flag_descriptions::kTouchSelectionStrategyCharacter, |
| blink::switches::kTouchTextSelectionStrategy, |
| blink::switches::kTouchTextSelectionStrategy_Character}, |
| {flag_descriptions::kTouchSelectionStrategyDirection, |
| blink::switches::kTouchTextSelectionStrategy, |
| blink::switches::kTouchTextSelectionStrategy_Direction}}; |
| |
| #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[] = { |
| {flag_descriptions::kExtensionsToolbarZeroStateChoicesDisabled, "", ""}, |
| {flag_descriptions::kExtensionsToolbarZeroStateVistWebStore, |
| switches::kExtensionsToolbarZeroStateVariation, |
| switches::kExtensionsToolbarZeroStateSingleWebStoreLink}, |
| {flag_descriptions::kExtensionsToolbarZeroStateExploreExtensionsByCategory, |
| switches::kExtensionsToolbarZeroStateVariation, |
| switches::kExtensionsToolbarZeroStateExploreExtensionsByCategory}, |
| }; |
| #endif // ENABLE_EXTENSIONS |
| |
| #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[] = { |
| {flag_descriptions::kOzonePlatformHintChoiceDefault, "", ""}, |
| {flag_descriptions::kOzonePlatformHintChoiceAuto, |
| switches::kOzonePlatformHint, "auto"}, |
| #if BUILDFLAG(IS_OZONE_X11) |
| {flag_descriptions::kOzonePlatformHintChoiceX11, |
| switches::kOzonePlatformHint, "x11"}, |
| #endif |
| #if BUILDFLAG(IS_OZONE_WAYLAND) |
| {flag_descriptions::kOzonePlatformHintChoiceWayland, |
| switches::kOzonePlatformHint, "wayland"}, |
| #endif |
| }; |
| #endif |
| |
| #if BUILDFLAG(ENABLE_VR) |
| const FeatureEntry::Choice kWebXrForceRuntimeChoices[] = { |
| {flags_ui::kGenericExperimentChoiceDefault, "", ""}, |
| {flag_descriptions::kWebXrRuntimeChoiceNone, switches::kWebXrForceRuntime, |
| switches::kWebXrRuntimeNone}, |
| #if BUILDFLAG(ENABLE_ARCORE) |
| {flag_descriptions::kWebXrRuntimeChoiceArCore, switches::kWebXrForceRuntime, |
| switches::kWebXrRuntimeArCore}, |
| #endif |
| #if BUILDFLAG(ENABLE_CARDBOARD) |
| {flag_descriptions::kWebXrRuntimeChoiceCardboard, |
| switches::kWebXrForceRuntime, switches::kWebXrRuntimeCardboard}, |
| #endif |
| #if BUILDFLAG(ENABLE_OPENXR) |
| {flag_descriptions::kWebXrRuntimeChoiceOpenXR, switches::kWebXrForceRuntime, |
| switches::kWebXrRuntimeOpenXr}, |
| #endif // ENABLE_OPENXR |
| {flag_descriptions::kWebXrRuntimeChoiceOrientationSensors, |
| switches::kWebXrForceRuntime, switches::kWebXrRuntimeOrientationSensors}, |
| }; |
| #endif // ENABLE_VR |
| |
| #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 // BUILDFLAG(IS_ANDROID) |
| |
| #if !BUILDFLAG(IS_CHROMEOS_ASH) |
| const FeatureEntry::FeatureParam kForceDark_SimpleHsl[] = { |
| {"inversion_method", "hsl_based"}, |
| {"image_behavior", "none"}, |
| {"foreground_lightness_threshold", "150"}, |
| {"background_lightness_threshold", "205"}}; |
| |
| const FeatureEntry::FeatureParam kForceDark_SimpleCielab[] = { |
| {"inversion_method", "cielab_based"}, |
| {"image_behavior", "none"}, |
| {"foreground_lightness_threshold", "150"}, |
| {"background_lightness_threshold", "205"}}; |
| |
| const FeatureEntry::FeatureParam kForceDark_SimpleRgb[] = { |
| {"inversion_method", "rgb_based"}, |
| {"image_behavior", "none"}, |
| {"foreground_lightness_threshold", "150"}, |
| {"background_lightness_threshold", "205"}}; |
| |
| // Keep in sync with the kForceDark_SelectiveImageInversion |
| // in aw_feature_entries.cc if you tweak these parameters. |
| const FeatureEntry::FeatureParam kForceDark_SelectiveImageInversion[] = { |
| {"inversion_method", "cielab_based"}, |
| {"image_behavior", "selective"}, |
| {"foreground_lightness_threshold", "150"}, |
| {"background_lightness_threshold", "205"}}; |
| |
| const FeatureEntry::FeatureParam kForceDark_SelectiveElementInversion[] = { |
| {"inversion_method", "cielab_based"}, |
| {"image_behavior", "none"}, |
| {"foreground_lightness_threshold", "150"}, |
| {"background_lightness_threshold", "205"}}; |
| |
| const FeatureEntry::FeatureParam kForceDark_SelectiveGeneralInversion[] = { |
| {"inversion_method", "cielab_based"}, |
| {"image_behavior", "selective"}, |
| {"foreground_lightness_threshold", "150"}, |
| {"background_lightness_threshold", "205"}}; |
| |
| const FeatureEntry::FeatureParam kForceDark_TransparencyAndNumColors[] = { |
| {"classifier_policy", "transparency_and_num_colors"}}; |
| |
| const FeatureEntry::FeatureVariation kForceDarkVariations[] = { |
| {"with simple HSL-based inversion", kForceDark_SimpleHsl, |
| std::size(kForceDark_SimpleHsl), nullptr}, |
| {"with simple CIELAB-based inversion", kForceDark_SimpleCielab, |
| std::size(kForceDark_SimpleCielab), nullptr}, |
| {"with simple RGB-based inversion", kForceDark_SimpleRgb, |
| std::size(kForceDark_SimpleRgb), nullptr}, |
| {"with selective image inversion", kForceDark_SelectiveImageInversion, |
| std::size(kForceDark_SelectiveImageInversion), nullptr}, |
| {"with selective inversion of non-image elements", |
| kForceDark_SelectiveElementInversion, |
| std::size(kForceDark_SelectiveElementInversion), nullptr}, |
| {"with selective inversion of everything", |
| kForceDark_SelectiveGeneralInversion, |
| std::size(kForceDark_SelectiveGeneralInversion), nullptr}, |
| {"with selective image inversion based on transparency and number of " |
| "colors", |
| kForceDark_TransparencyAndNumColors, |
| std::size(kForceDark_TransparencyAndNumColors), nullptr}}; |
| #endif // !BUILDFLAG(IS_CHROMEOS) |
| |
| const FeatureEntry::FeatureParam |
| kWebIdentityDigitalIdentityCredentialNoDialogParam[] = { |
| {"dialog", "no_dialog"}}; |
| const FeatureEntry::FeatureParam |
| kWebIdentityDigitalIdentityCredentialDefaultParam[] = { |
| {"dialog", "default"}}; |
| const FeatureEntry::FeatureParam |
| kWebIdentityDigitalIdentityCredentialLowRiskDialogParam[] = { |
| {"dialog", "low_risk"}}; |
| const FeatureEntry::FeatureParam |
| kWebIdentityDigitalIdentityCredentialHighRiskDialogParam[] = { |
| {"dialog", "high_risk"}}; |
| const FeatureEntry::FeatureVariation |
| kWebIdentityDigitalIdentityCredentialVariations[] = { |
| {"with dialog depending on what credentials are requested", |
| kWebIdentityDigitalIdentityCredentialDefaultParam, |
| std::size(kWebIdentityDigitalIdentityCredentialDefaultParam), nullptr}, |
| {"without dialog", kWebIdentityDigitalIdentityCredentialNoDialogParam, |
| std::size(kWebIdentityDigitalIdentityCredentialNoDialogParam), |
| nullptr}, |
| {"with confirmation dialog with mild warning before sending identity " |
| "request to Android OS", |
| kWebIdentityDigitalIdentityCredentialLowRiskDialogParam, |
| std::size(kWebIdentityDigitalIdentityCredentialLowRiskDialogParam), |
| nullptr}, |
| {"with confirmation dialog with severe warning before sending " |
| "identity request to Android OS", |
| kWebIdentityDigitalIdentityCredentialHighRiskDialogParam, |
| std::size(kWebIdentityDigitalIdentityCredentialHighRiskDialogParam), |
| nullptr}}; |
| |
| const FeatureEntry::FeatureParam kClipboardMaximumAge60Seconds[] = { |
| {"UIClipboardMaximumAge", "60"}}; |
| const FeatureEntry::FeatureParam kClipboardMaximumAge90Seconds[] = { |
| {"UIClipboardMaximumAge", "90"}}; |
| const FeatureEntry::FeatureParam kClipboardMaximumAge120Seconds[] = { |
| {"UIClipboardMaximumAge", "120"}}; |
| const FeatureEntry::FeatureParam kClipboardMaximumAge150Seconds[] = { |
| {"UIClipboardMaximumAge", "150"}}; |
| const FeatureEntry::FeatureParam kClipboardMaximumAge180Seconds[] = { |
| {"UIClipboardMaximumAge", "180"}}; |
| |
| const FeatureEntry::FeatureVariation kClipboardMaximumAgeVariations[] = { |
| {"Enabled 60 seconds", kClipboardMaximumAge60Seconds, |
| std::size(kClipboardMaximumAge60Seconds), nullptr}, |
| {"Enabled 90 seconds", kClipboardMaximumAge90Seconds, |
| std::size(kClipboardMaximumAge90Seconds), nullptr}, |
| {"Enabled 120 seconds", kClipboardMaximumAge120Seconds, |
| std::size(kClipboardMaximumAge120Seconds), nullptr}, |
| {"Enabled 150 seconds", kClipboardMaximumAge150Seconds, |
| std::size(kClipboardMaximumAge150Seconds), nullptr}, |
| {"Enabled 180 seconds", kClipboardMaximumAge180Seconds, |
| std::size(kClipboardMaximumAge180Seconds), nullptr}, |
| }; |
| |
| const FeatureEntry::FeatureParam kMBIModeLegacy[] = {{"mode", "legacy"}}; |
| const FeatureEntry::FeatureParam kMBIModeEnabledPerRenderProcessHost[] = { |
| {"mode", "per_render_process_host"}}; |
| const FeatureEntry::FeatureParam kMBIModeEnabledPerSiteInstance[] = { |
| {"mode", "per_site_instance"}}; |
| |
| const FeatureEntry::FeatureVariation kMBIModeVariations[] = { |
| {"legacy mode", kMBIModeLegacy, std::size(kMBIModeLegacy), nullptr}, |
| {"per render process host", kMBIModeEnabledPerRenderProcessHost, |
| std::size(kMBIModeEnabledPerRenderProcessHost), nullptr}, |
| {"per site instance", kMBIModeEnabledPerSiteInstance, |
| std::size(kMBIModeEnabledPerSiteInstance), nullptr}}; |
| |
| const FeatureEntry::FeatureParam kSearchPrefetchWithoutHoldback[] = { |
| {"prefetch_holdback", "false"}}; |
| const FeatureEntry::FeatureParam kSearchPrefetchWithHoldback[] = { |
| {"prefetch_holdback", "true"}}; |
| |
| const FeatureEntry::FeatureVariation |
| kSearchPrefetchServicePrefetchingVariations[] = { |
| {"without holdback", kSearchPrefetchWithoutHoldback, |
| std::size(kSearchPrefetchWithoutHoldback), nullptr}, |
| {"with holdback", kSearchPrefetchWithHoldback, |
| std::size(kSearchPrefetchWithHoldback), nullptr}}; |
| |
| #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 // BUILDFLAG(IS_CHROMEOS_ASH) |
| |
| const FeatureEntry::Choice kEnableGpuRasterizationChoices[] = { |
| {flags_ui::kGenericExperimentChoiceDefault, "", ""}, |
| {flags_ui::kGenericExperimentChoiceEnabled, |
| switches::kEnableGpuRasterization, ""}, |
| {flags_ui::kGenericExperimentChoiceDisabled, |
| switches::kDisableGpuRasterization, ""}, |
| }; |
| |
| const FeatureEntry::Choice kTopChromeTouchUiChoices[] = { |
| {flags_ui::kGenericExperimentChoiceDefault, "", ""}, |
| {flags_ui::kGenericExperimentChoiceAutomatic, switches::kTopChromeTouchUi, |
| switches::kTopChromeTouchUiAuto}, |
| {flags_ui::kGenericExperimentChoiceDisabled, switches::kTopChromeTouchUi, |
| switches::kTopChromeTouchUiDisabled}, |
| {flags_ui::kGenericExperimentChoiceEnabled, switches::kTopChromeTouchUi, |
| switches::kTopChromeTouchUiEnabled}}; |
| |
| #if !BUILDFLAG(IS_ANDROID) |
| const FeatureEntry::FeatureParam kToastWith6Seconds[] = { |
| {"toast_timeout", "6s"}, |
| {"toast_without_action_timeout", "6s"}, |
| {"toast_demo_mode", "true"}}; |
| const FeatureEntry::FeatureParam kToastWith8Seconds[] = { |
| {"toast_timeout", "8s"}, |
| {"toast_without_action_timeout", "8s"}, |
| {"toast_demo_mode", "true"}}; |
| const FeatureEntry::FeatureParam kToastWith10Seconds[] = { |
| {"toast_timeout", "10s"}, |
| {"toast_without_action_timeout", "10s"}, |
| {"toast_demo_mode", "true"}}; |
| const FeatureEntry::FeatureParam kToastWith12Seconds[] = { |
| {"toast_timeout", "12s"}, |
| {"toast_without_action_timeout", "12s"}, |
| {"toast_demo_mode", "true"}}; |
| |
| const FeatureEntry::FeatureVariation kToastVariations[] = { |
| {"with 6s", kToastWith6Seconds, std::size(kToastWith6Seconds), nullptr}, |
| {"with 8s", kToastWith8Seconds, std::size(kToastWith8Seconds), nullptr}, |
| {"with 10s", kToastWith10Seconds, std::size(kToastWith10Seconds), nullptr}, |
| {"with 12s", kToastWith12Seconds, std::size(kToastWith12Seconds), nullptr}}; |
| #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 // BUILDFLAG(IS_CHROMEOS_ASH) |
| |
| const FeatureEntry::Choice kForceUIDirectionChoices[] = { |
| {flags_ui::kGenericExperimentChoiceDefault, "", ""}, |
| {flag_descriptions::kForceDirectionLtr, switches::kForceUIDirection, |
| switches::kForceDirectionLTR}, |
| {flag_descriptions::kForceDirectionRtl, switches::kForceUIDirection, |
| switches::kForceDirectionRTL}, |
| }; |
| |
| const FeatureEntry::Choice kForceTextDirectionChoices[] = { |
| {flags_ui::kGenericExperimentChoiceDefault, "", ""}, |
| {flag_descriptions::kForceDirectionLtr, switches::kForceTextDirection, |
| switches::kForceDirectionLTR}, |
| {flag_descriptions::kForceDirectionRtl, switches::kForceTextDirection, |
| switches::kForceDirectionRTL}, |
| }; |
| |
| const FeatureEntry::Choice kIpProtectionProxyOptOutChoices[] = { |
| {flag_descriptions::kIpProtectionProxyOptOutChoiceDefault, "", ""}, |
| {flag_descriptions::kIpProtectionProxyOptOutChoiceOptOut, |
| switches::kDisableIpProtectionProxy, ""}, |
| }; |
| |
| #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 // BUILDFLAG(IS_CHROMEOS_ASH) |
| |
| #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 // BUILDFLAG(IS_CHROMEOS_ASH) |
| |
| #if BUILDFLAG(ENABLE_NACL) |
| // Note: This needs to be kept in sync with parsing in |
| // content/common/zygote/zygote_communication_linux.cc |
| 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 // ENABLE_NACL |
| |
| const FeatureEntry::Choice kSiteIsolationOptOutChoices[] = { |
| {flag_descriptions::kSiteIsolationOptOutChoiceDefault, "", ""}, |
| {flag_descriptions::kSiteIsolationOptOutChoiceOptOut, |
| switches::kDisableSiteIsolation, ""}, |
| }; |
| |
| const FeatureEntry::Choice kForceColorProfileChoices[] = { |
| {flags_ui::kGenericExperimentChoiceDefault, "", ""}, |
| {flag_descriptions::kForceColorProfileSRGB, |
| switches::kForceDisplayColorProfile, "srgb"}, |
| {flag_descriptions::kForceColorProfileP3, |
| switches::kForceDisplayColorProfile, "display-p3-d65"}, |
| {flag_descriptions::kForceColorProfileRec2020, |
| switches::kForceDisplayColorProfile, "rec2020"}, |
| {flag_descriptions::kForceColorProfileColorSpin, |
| switches::kForceDisplayColorProfile, "color-spin-gamma24"}, |
| {flag_descriptions::kForceColorProfileSCRGBLinear, |
| switches::kForceDisplayColorProfile, "scrgb-linear"}, |
| {flag_descriptions::kForceColorProfileHDR10, |
| switches::kForceDisplayColorProfile, "hdr10"}, |
| }; |
| |
| const FeatureEntry::Choice kMemlogModeChoices[] = { |
| {flags_ui::kGenericExperimentChoiceDisabled, "", ""}, |
| {flag_descriptions::kMemlogModeMinimal, heap_profiling::kMemlogMode, |
| heap_profiling::kMemlogModeMinimal}, |
| {flag_descriptions::kMemlogModeAll, heap_profiling::kMemlogMode, |
| heap_profiling::kMemlogModeAll}, |
| {flag_descriptions::kMemlogModeBrowser, heap_profiling::kMemlogMode, |
| heap_profiling::kMemlogModeBrowser}, |
| {flag_descriptions::kMemlogModeGpu, heap_profiling::kMemlogMode, |
| heap_profiling::kMemlogModeGpu}, |
| {flag_descriptions::kMemlogModeAllRenderers, heap_profiling::kMemlogMode, |
| heap_profiling::kMemlogModeAllRenderers}, |
| {flag_descriptions::kMemlogModeRendererSampling, |
| heap_profiling::kMemlogMode, heap_profiling::kMemlogModeRendererSampling}, |
| }; |
| |
| const FeatureEntry::Choice kMemlogStackModeChoices[] = { |
| {flags_ui::kGenericExperimentChoiceDefault, "", ""}, |
| {flag_descriptions::kMemlogStackModeNative, |
| heap_profiling::kMemlogStackMode, heap_profiling::kMemlogStackModeNative}, |
| {flag_descriptions::kMemlogStackModeNativeWithThreadNames, |
| heap_profiling::kMemlogStackMode, |
| heap_profiling::kMemlogStackModeNativeWithThreadNames}, |
| }; |
| |
| const FeatureEntry::Choice kMemlogSamplingRateChoices[] = { |
| {flags_ui::kGenericExperimentChoiceDefault, "", ""}, |
| {flag_descriptions::kMemlogSamplingRate10KB, |
| heap_profiling::kMemlogSamplingRate, |
| heap_profiling::kMemlogSamplingRate10KB}, |
| {flag_descriptions::kMemlogSamplingRate50KB, |
| heap_profiling::kMemlogSamplingRate, |
| heap_profiling::kMemlogSamplingRate50KB}, |
| {flag_descriptions::kMemlogSamplingRate100KB, |
| heap_profiling::kMemlogSamplingRate, |
| heap_profiling::kMemlogSamplingRate100KB}, |
| {flag_descriptions::kMemlogSamplingRate500KB, |
| heap_profiling::kMemlogSamplingRate, |
| heap_profiling::kMemlogSamplingRate500KB}, |
| {flag_descriptions::kMemlogSamplingRate1MB, |
| heap_profiling::kMemlogSamplingRate, |
| heap_profiling::kMemlogSamplingRate1MB}, |
| {flag_descriptions::kMemlogSamplingRate5MB, |
| heap_profiling::kMemlogSamplingRate, |
| heap_profiling::kMemlogSamplingRate5MB}, |
| }; |
| |
| const FeatureEntry::FeatureParam |
| kOptimizationGuideOnDeviceModelBypassPerfParams[] = { |
| {"compatible_on_device_performance_classes", "*"}, |
| {"on_device_retract_unsafe_content", "true"}, |
| }; |
| const FeatureEntry::FeatureParam |
| kOptimizationGuideOnDeviceModelBypassTextSafetyParams[] = { |
| {"on_device_retract_unsafe_content", "false"}, |
| }; |
| const FeatureEntry::FeatureParam |
| kOptimizationGuideOnDeviceModelBypassPerfAndTextSafetyParams[] = { |
| {"compatible_on_device_performance_classes", "*"}, |
| {"on_device_retract_unsafe_content", "false"}, |
| }; |
| const FeatureEntry::FeatureVariation |
| kOptimizationGuideOnDeviceModelVariations[] = { |
| {"BypassPerfRequirement", |
| kOptimizationGuideOnDeviceModelBypassPerfParams, |
| std::size(kOptimizationGuideOnDeviceModelBypassPerfParams), nullptr}, |
| {"BypassTextSafety", |
| kOptimizationGuideOnDeviceModelBypassTextSafetyParams, |
| std::size(kOptimizationGuideOnDeviceModelBypassTextSafetyParams), |
| nullptr}, |
| {"BypassPerfAndTextSafety", |
| kOptimizationGuideOnDeviceModelBypassPerfAndTextSafetyParams, |
| std::size( |
| kOptimizationGuideOnDeviceModelBypassPerfAndTextSafetyParams), |
| nullptr}, |
| }; |
| |
| const FeatureEntry::FeatureParam kPageContentAnnotationsContentParams[] = { |
| {"annotate_title_instead_of_page_content", "false"}, |
| {"extract_related_searches", "true"}, |
| {"max_size_for_text_dump_in_bytes", "5120"}, |
| {"write_to_history_service", "true"}, |
| }; |
| const FeatureEntry::FeatureParam kPageContentAnnotationsTitleParams[] = { |
| {"annotate_title_instead_of_page_content", "true"}, |
| {"extract_related_searches", "true"}, |
| {"write_to_history_service", "true"}, |
| }; |
| const FeatureEntry::FeatureVariation kPageContentAnnotationsVariations[] = { |
| {"All Annotations and Persistence on Content", |
| kPageContentAnnotationsContentParams, |
| std::size(kPageContentAnnotationsContentParams), nullptr}, |
| {"All Annotations and Persistence on Title", |
| kPageContentAnnotationsTitleParams, |
| std::size(kPageContentAnnotationsTitleParams), nullptr}, |
| }; |
| |
| #if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_MAC) || \ |
| BUILDFLAG(IS_WIN) |
| const FeatureEntry::FeatureParam kHistoryEmbeddingsAtKeywordAcceleration[]{ |
| {"AtKeywordAcceleration", "true"}, |
| }; |
| const FeatureEntry::FeatureVariation kHistoryEmbeddingsVariations[] = { |
| {"with AtKeywordAcceleration", kHistoryEmbeddingsAtKeywordAcceleration, |
| std::size(kHistoryEmbeddingsAtKeywordAcceleration), nullptr}, |
| }; |
| |
| #endif // BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_MAC) || |
| // BUILDFLAG(IS_WIN) |
| |
| const FeatureEntry::FeatureParam kJourneysShowAllVisitsParams[] = { |
| {"JourneysLocaleOrLanguageAllowlist", "*"}, |
| // To show all visits, set the number of visits above the fold to a very |
| // high number. |
| {"JourneysNumVisitsToAlwaysShowAboveTheFold", "200"}, |
| }; |
| const FeatureEntry::FeatureParam kJourneysAllLocalesParams[] = { |
| {"JourneysLocaleOrLanguageAllowlist", "*"}, |
| }; |
| const FeatureEntry::FeatureVariation kJourneysVariations[] = { |
| {"No 'Show More' - Show all visits", kJourneysShowAllVisitsParams, |
| std::size(kJourneysShowAllVisitsParams), nullptr}, |
| {"All Supported Locales", kJourneysAllLocalesParams, |
| std::size(kJourneysAllLocalesParams), nullptr}, |
| }; |
| |
| const FeatureEntry::FeatureVariation |
| kImageServiceOptimizationGuideSalientImagesVariations[] = { |
| {"High Performance Canonicalization", nullptr, 0, "3362133"}, |
| }; |
| |
| const FeatureEntry::FeatureParam kSidePanelJourneysOpensFromOmniboxParams[] = { |
| {"SidePanelJourneysOpensFromOmnibox", "true"}, |
| }; |
| const FeatureEntry::FeatureVariation |
| kSidePanelJourneysOpensFromOmniboxVariations[] = { |
| {"Omnibox opens Side Panel Journeys", |
| kSidePanelJourneysOpensFromOmniboxParams, |
| std::size(kSidePanelJourneysOpensFromOmniboxParams), nullptr}, |
| }; |
| |
| #if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_MAC) || \ |
| BUILDFLAG(IS_WIN) |
| const FeatureEntry::FeatureParam kShortcutBoostSingleUrl[] = { |
| {"ShortcutBoostSearchScore", "0"}, |
| {"ShortcutBoostNonTopHitThreshold", "0"}, |
| {"ShortcutBoostGroupWithSearches", "false"}, |
| }; |
| const FeatureEntry::FeatureParam kShortcutBoostMultipleUrls[] = { |
| {"ShortcutBoostSearchScore", "0"}, |
| {"ShortcutBoostNonTopHitThreshold", "2"}, |
| {"ShortcutBoostGroupWithSearches", "true"}, |
| }; |
| const FeatureEntry::FeatureParam kShortcutBoostMultipleSearchesAndUrls[] = { |
| {"ShortcutBoostSearchScore", "1414"}, |
| {"ShortcutBoostNonTopHitThreshold", "2"}, |
| {"ShortcutBoostNonTopHitSearchThreshold", "3"}, |
| {"ShortcutBoostGroupWithSearches", "true"}, |
| }; |
| |
| const FeatureEntry::FeatureVariation kOmniboxShortcutBoostVariations[] = { |
| {"Single URL", kShortcutBoostSingleUrl, std::size(kShortcutBoostSingleUrl), |
| nullptr}, |
| {"Multiple URLs", kShortcutBoostMultipleUrls, |
| std::size(kShortcutBoostMultipleUrls), nullptr}, |
| {"Multiple Searches and URLs", kShortcutBoostMultipleSearchesAndUrls, |
| std::size(kShortcutBoostMultipleSearchesAndUrls), nullptr}, |
| }; |
| |
| // A limited number of combinations of the rich autocompletion params. |
| const FeatureEntry::FeatureParam |
| kOmniboxRichAutocompletionConservativeModerate[] = { |
| {"RichAutocompletionAutocompleteTitles", "true"}, |
| {"RichAutocompletionAutocompleteNonPrefixShortcutProvider", "true"}, |
| {"RichAutocompletionAutocompleteTitlesMinChar", "3"}, |
| {"RichAutocompletionAutocompleteNonPrefixMinChar", "5"}}; |
| const FeatureEntry::FeatureParam |
| kOmniboxRichAutocompletionConservativeModerate2[] = { |
| {"RichAutocompletionAutocompleteTitlesShortcutProvider", "true"}, |
| {"RichAutocompletionAutocompleteNonPrefixShortcutProvider", "true"}, |
| {"RichAutocompletionAutocompleteTitlesMinChar", "3"}, |
| {"RichAutocompletionAutocompleteNonPrefixMinChar", "5"}}; |
| const FeatureEntry::FeatureParam kOmniboxRichAutocompletionAggressive2[] = { |
| {"RichAutocompletionAutocompleteTitlesShortcutProvider", "true"}, |
| {"RichAutocompletionAutocompleteTitlesMinChar", "2"}, |
| {"RichAutocompletionAutocompleteShortcutText", "true"}, |
| {"RichAutocompletionAutocompleteShortcutTextMinChar", "2"}}; |
| const FeatureEntry::FeatureParam kOmniboxRichAutocompletionAggressive3[] = { |
| {"RichAutocompletionAutocompleteTitlesShortcutProvider", "true"}, |
| {"RichAutocompletionAutocompleteTitlesMinChar", "3"}, |
| {"RichAutocompletionAutocompleteShortcutText", "true"}, |
| {"RichAutocompletionAutocompleteShortcutTextMinChar", "3"}}; |
| const FeatureEntry::FeatureParam kOmniboxRichAutocompletionAggressive4[] = { |
| {"RichAutocompletionAutocompleteTitlesShortcutProvider", "true"}, |
| {"RichAutocompletionAutocompleteTitlesMinChar", "4"}, |
| {"RichAutocompletionAutocompleteShortcutText", "true"}, |
| {"RichAutocompletionAutocompleteShortcutTextMinChar", "4"}}; |
| |
| const FeatureEntry::FeatureVariation |
| kOmniboxRichAutocompletionPromisingVariations[] = { |
| {"Conservative Moderate - Title, Shortcut Non-Prefix, min 3/5", |
| kOmniboxRichAutocompletionConservativeModerate, |
| std::size(kOmniboxRichAutocompletionConservativeModerate), nullptr}, |
| {"Conservative Moderate 2 - Shortcut Title, Shortcut Non-Prefix, min " |
| "3/5", |
| kOmniboxRichAutocompletionConservativeModerate2, |
| std::size(kOmniboxRichAutocompletionConservativeModerate2), nullptr}, |
| {"Aggressive 2 - Title Shortcut Title 2, Shortcut Text 2", |
| kOmniboxRichAutocompletionAggressive2, |
| std::size(kOmniboxRichAutocompletionAggressive2), nullptr}, |
| {"Aggressive 3 - Title Shortcut Title 3, Shortcut Text 3", |
| kOmniboxRichAutocompletionAggressive3, |
| std::size(kOmniboxRichAutocompletionAggressive3), nullptr}, |
| {"Aggressive 4 - Title Shortcut Title 4, Shortcut Text 4", |
| kOmniboxRichAutocompletionAggressive4, |
| std::size(kOmniboxRichAutocompletionAggressive4), nullptr}, |
| }; |
| |
| const FeatureEntry::FeatureParam |
| kOmniboxDriveSuggestionsIgnoreWhenDebouncing[] = { |
| {"DocumentProviderIgnoreWhenDebouncing", "true"}}; |
| const FeatureEntry::FeatureVariation kOmniboxDriveSuggestionsVariations[] = { |
| {"ignore when debouncing", kOmniboxDriveSuggestionsIgnoreWhenDebouncing, |
| std::size(kOmniboxDriveSuggestionsIgnoreWhenDebouncing), nullptr}}; |
| |
| const FeatureEntry::FeatureParam kOmniboxStarterPackExpansionPreProdUrl[] = { |
| {"StarterPackGeminiUrlOverride", "https://gemini.google.com/corp/prompt"}}; |
| const FeatureEntry::FeatureParam kOmniboxStarterPackExpansionStagingUrl[] = { |
| {"StarterPackGeminiUrlOverride", |
| "https://gemini.google.com/staging/prompt"}}; |
| const FeatureEntry::FeatureVariation kOmniboxStarterPackExpansionVariations[] = |
| {{"pre-prod url", kOmniboxStarterPackExpansionPreProdUrl, |
| std::size(kOmniboxStarterPackExpansionPreProdUrl), nullptr}, |
| {"staging url", kOmniboxStarterPackExpansionStagingUrl, |
| std::size(kOmniboxStarterPackExpansionStagingUrl), nullptr}}; |
| #endif // BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_MAC) || |
| // BUILDFLAG(IS_WIN) |
| |
| const FeatureEntry::FeatureParam kOmniboxMlUrlScoringEnabledWithFixes[] = { |
| {"enable_scoring_signals_annotators_for_ml_scoring", "true"}, |
| {"MlUrlScoringShortcutDocumentSignals", "true"}, |
| }; |
| const FeatureEntry::FeatureParam kOmniboxMlUrlScoringUnlimitedNumCandidates[] = |
| { |
| {"MlUrlScoringUnlimitedNumCandidates", "true"}, |
| {"enable_scoring_signals_annotators_for_ml_scoring", "true"}, |
| {"MlUrlScoringShortcutDocumentSignals", "true"}, |
| }; |
| // Sets Bookmark(1), History Quick(4), History URL(8), Shortcuts(64), |
| // Document(512), and History Fuzzy(65536) providers max matches to 10. |
| const FeatureEntry::FeatureParam kOmniboxMlUrlScoringMaxMatchesByProvider10[] = |
| { |
| {"MlUrlScoringMaxMatchesByProvider", |
| "1:10,4:10,8:10,64:10,512:10,65536:10"}, |
| {"enable_scoring_signals_annotators_for_ml_scoring", "true"}, |
| {"MlUrlScoringShortcutDocumentSignals", "true"}, |
| }; |
| // Enables ML scoring for Search suggestions. |
| const FeatureEntry::FeatureParam kOmniboxMlUrlScoringWithSearches[] = { |
| {"MlUrlScoring_EnableMlScoringForSearches", "true"}, |
| }; |
| // Enables ML scoring for verbatim URL suggestions. |
| const FeatureEntry::FeatureParam kOmniboxMlUrlScoringWithVerbatimURLs[] = { |
| {"MlUrlScoring_EnableMlScoringForVerbatimUrls", "true"}, |
| }; |
| // Enables ML scoring for both Search and verbatim URL suggestions. |
| const FeatureEntry::FeatureParam |
| kOmniboxMlUrlScoringWithSearchesAndVerbatimURLs[] = { |
| {"MlUrlScoring_EnableMlScoringForSearches", "true"}, |
| {"MlUrlScoring_EnableMlScoringForVerbatimUrls", "true"}, |
| }; |
| |
| const FeatureEntry::FeatureVariation kOmniboxMlUrlScoringVariations[] = { |
| {"Enabled with fixes", kOmniboxMlUrlScoringEnabledWithFixes, |
| std::size(kOmniboxMlUrlScoringEnabledWithFixes), nullptr}, |
| {"unlimited suggestion candidates", |
| kOmniboxMlUrlScoringUnlimitedNumCandidates, |
| std::size(kOmniboxMlUrlScoringUnlimitedNumCandidates), nullptr}, |
| {"Increase provider max limit to 10", |
| kOmniboxMlUrlScoringMaxMatchesByProvider10, |
| std::size(kOmniboxMlUrlScoringMaxMatchesByProvider10), nullptr}, |
| {"with scoring of Search suggestions", kOmniboxMlUrlScoringWithSearches, |
| std::size(kOmniboxMlUrlScoringWithSearches), nullptr}, |
| {"with scoring of verbatim URL suggestions", |
| kOmniboxMlUrlScoringWithVerbatimURLs, |
| std::size(kOmniboxMlUrlScoringWithVerbatimURLs), nullptr}, |
| {"with scoring of Search & verbatim URL suggestions", |
| kOmniboxMlUrlScoringWithSearchesAndVerbatimURLs, |
| std::size(kOmniboxMlUrlScoringWithSearchesAndVerbatimURLs), nullptr}, |
| }; |
| |
| const FeatureEntry::FeatureParam |
| kMlUrlPiecewiseMappedSearchBlendingAdjustedBy0[] = { |
| {"MlUrlPiecewiseMappedSearchBlending", "true"}, |
| {"MlUrlPiecewiseMappedSearchBlending_BreakPoints", |
| "0,550;0.018,1300;0.14,1398;1,1422"}, |
| {"MlUrlPiecewiseMappedSearchBlending_GroupingThreshold", "1400"}, |
| {"MlUrlPiecewiseMappedSearchBlending_RelevanceBias", "0"}}; |
| const FeatureEntry::FeatureParam |
| kMlUrlPiecewiseMappedSearchBlendingDemotedBy50[] = { |
| {"MlUrlPiecewiseMappedSearchBlending", "true"}, |
| {"MlUrlPiecewiseMappedSearchBlending_BreakPoints", |
| "0,550;0.018,1250;0.14,1348;1,1422"}, |
| {"MlUrlPiecewiseMappedSearchBlending_GroupingThreshold", "1350"}, |
| {"MlUrlPiecewiseMappedSearchBlending_RelevanceBias", "0"}}; |
| const FeatureEntry::FeatureParam |
| kMlUrlPiecewiseMappedSearchBlendingPromotedBy50[] = { |
| {"MlUrlPiecewiseMappedSearchBlending", "true"}, |
| {"MlUrlPiecewiseMappedSearchBlending_BreakPoints", |
| "0,550;0.018,1350;0.14,1448;1,1472"}, |
| {"MlUrlPiecewiseMappedSearchBlending_GroupingThreshold", "1450"}, |
| {"MlUrlPiecewiseMappedSearchBlending_RelevanceBias", "0"}}; |
| const FeatureEntry::FeatureParam |
| kMlUrlPiecewiseMappedSearchBlendingPromotedBy100[] = { |
| {"MlUrlPiecewiseMappedSearchBlending", "true"}, |
| {"MlUrlPiecewiseMappedSearchBlending_BreakPoints", |
| "0,550;0.018,1400;0.14,1498;1,1522"}, |
| {"MlUrlPiecewiseMappedSearchBlending_GroupingThreshold", "1500"}, |
| {"MlUrlPiecewiseMappedSearchBlending_RelevanceBias", "0"}}; |
| const FeatureEntry::FeatureParam |
| kMlUrlPiecewiseMappedSearchBlendingMobileMapping[] = { |
| {"MlUrlPiecewiseMappedSearchBlending", "true"}, |
| {"MlUrlPiecewiseMappedSearchBlending_BreakPoints", |
| "0,590;0.006,790;0.082,1290;0.443,1360;0.464,1400;0.987,1425;1,1530"}, |
| {"MlUrlPiecewiseMappedSearchBlending_GroupingThreshold", "1340"}, |
| {"MlUrlPiecewiseMappedSearchBlending_RelevanceBias", "0"}}; |
| |
| const FeatureEntry::FeatureVariation |
| kMlUrlPiecewiseMappedSearchBlendingVariations[] = { |
| {"adjusted by 0", kMlUrlPiecewiseMappedSearchBlendingAdjustedBy0, |
| std::size(kMlUrlPiecewiseMappedSearchBlendingAdjustedBy0), nullptr}, |
| {"demoted by 50", kMlUrlPiecewiseMappedSearchBlendingDemotedBy50, |
| std::size(kMlUrlPiecewiseMappedSearchBlendingDemotedBy50), nullptr}, |
| {"promoted by 50", kMlUrlPiecewiseMappedSearchBlendingPromotedBy50, |
| std::size(kMlUrlPiecewiseMappedSearchBlendingPromotedBy50), nullptr}, |
| {"promoted by 100", kMlUrlPiecewiseMappedSearchBlendingPromotedBy100, |
| std::size(kMlUrlPiecewiseMappedSearchBlendingPromotedBy100), nullptr}, |
| {"mobile mapping", kMlUrlPiecewiseMappedSearchBlendingMobileMapping, |
| std::size(kMlUrlPiecewiseMappedSearchBlendingMobileMapping), nullptr}, |
| }; |
| |
| const FeatureEntry::FeatureParam kMlUrlSearchBlendingStable[] = { |
| {"MlUrlSearchBlending_StableSearchBlending", "true"}, |
| {"MlUrlSearchBlending_MappedSearchBlending", "false"}, |
| }; |
| const FeatureEntry::FeatureParam kMlUrlSearchBlendingMappedConservativeUrls[] = |
| { |
| {"MlUrlSearchBlending_StableSearchBlending", "false"}, |
| {"MlUrlSearchBlending_MappedSearchBlending", "true"}, |
| {"MlUrlSearchBlending_MappedSearchBlendingMin", "0"}, |
| {"MlUrlSearchBlending_MappedSearchBlendingMax", "2000"}, |
| {"MlUrlSearchBlending_MappedSearchBlendingGroupingThreshold", "1000"}, |
| }; |
| const FeatureEntry::FeatureParam kMlUrlSearchBlendingMappedModerateUrls[] = { |
| {"MlUrlSearchBlending_StableSearchBlending", "false"}, |
| {"MlUrlSearchBlending_MappedSearchBlending", "true"}, |
| }; |
| const FeatureEntry::FeatureParam kMlUrlSearchBlendingMappedAggressiveUrls[] = { |
| {"MlUrlSearchBlending_StableSearchBlending", "false"}, |
| {"MlUrlSearchBlending_MappedSearchBlending", "true"}, |
| {"MlUrlSearchBlending_MappedSearchBlendingMin", "1000"}, |
| {"MlUrlSearchBlending_MappedSearchBlendingMax", "4000"}, |
| {"MlUrlSearchBlending_MappedSearchBlendingGroupingThreshold", "1500"}, |
| }; |
| |
| const FeatureEntry::FeatureVariation kMlUrlSearchBlendingVariations[] = { |
| {"Stable", kMlUrlSearchBlendingStable, |
| std::size(kMlUrlSearchBlendingStable), nullptr}, |
| {"Mapped conservative urls", kMlUrlSearchBlendingMappedConservativeUrls, |
| std::size(kMlUrlSearchBlendingMappedConservativeUrls), nullptr}, |
| {"Mapped moderate urls", kMlUrlSearchBlendingMappedModerateUrls, |
| std::size(kMlUrlSearchBlendingMappedModerateUrls), nullptr}, |
| {"Mapped aggressive urls", kMlUrlSearchBlendingMappedAggressiveUrls, |
| std::size(kMlUrlSearchBlendingMappedAggressiveUrls), nullptr}, |
| }; |
| |
| const FeatureEntry::FeatureParam |
| kMostVitedTilesNewScoring_DecayStaircaseCap10[] = { |
| {history::kMvtScoringParamRecencyFactor, |
| history::kMvtScoringParamRecencyFactor_DecayStaircase}, |
| {history::kMvtScoringParamDailyVisitCountCap, "10"}, |
| }; |
| const FeatureEntry::FeatureVariation kMostVisitedTilesNewScoringVariations[] = { |
| {"Decay Staircase, Cap 10", kMostVitedTilesNewScoring_DecayStaircaseCap10, |
| std::size(kMostVitedTilesNewScoring_DecayStaircaseCap10), nullptr}, |
| }; |
| |
| const FeatureEntry::FeatureVariation kUrlScoringModelVariations[] = { |
| {"Small model (desktop)", nullptr, 0, nullptr}, |
| {"Full model (desktop)", nullptr, 0, "3380045"}, |
| {"Small model (ios)", nullptr, 0, "3379590"}, |
| {"Full model (ios)", nullptr, 0, "3380197"}, |
| {"Small model (android)", nullptr, 0, "3381543"}, |
| {"Full model (android)", nullptr, 0, "3381544"}, |
| }; |
| |
| const FeatureEntry::FeatureParam |
| kOmniboxZeroSuggestPrefetchDebouncingMinimalFromLastRun[] = { |
| {"ZeroSuggestPrefetchDebounceDelay", "300"}, |
| {"ZeroSuggestPrefetchDebounceFromLastRun", "true"}, |
| }; |
| const FeatureEntry::FeatureParam |
| kOmniboxZeroSuggestPrefetchDebouncingMinimalFromLastRequest[] = { |
| {"ZeroSuggestPrefetchDebounceDelay", "300"}, |
| {"ZeroSuggestPrefetchDebounceFromLastRun", "false"}, |
| }; |
| const FeatureEntry::FeatureParam |
| kOmniboxZeroSuggestPrefetchDebouncingModerateFromLastRun[] = { |
| {"ZeroSuggestPrefetchDebounceDelay", "600"}, |
| {"ZeroSuggestPrefetchDebounceFromLastRun", "true"}, |
| }; |
| const FeatureEntry::FeatureParam |
| kOmniboxZeroSuggestPrefetchDebouncingModerateFromLastRequest[] = { |
| {"ZeroSuggestPrefetchDebounceDelay", "600"}, |
| {"ZeroSuggestPrefetchDebounceFromLastRun", "false"}, |
| }; |
| const FeatureEntry::FeatureParam |
| kOmniboxZeroSuggestPrefetchDebouncingAggressiveFromLastRun[] = { |
| {"ZeroSuggestPrefetchDebounceDelay", "900"}, |
| {"ZeroSuggestPrefetchDebounceFromLastRun", "true"}, |
| }; |
| const FeatureEntry::FeatureParam |
| kOmniboxZeroSuggestPrefetchDebouncingAggressiveFromLastRequest[] = { |
| {"ZeroSuggestPrefetchDebounceDelay", "900"}, |
| {"ZeroSuggestPrefetchDebounceFromLastRun", "false"}, |
| }; |
| |
| const FeatureEntry::FeatureVariation |
| kOmniboxZeroSuggestPrefetchDebouncingVariations[] = { |
| {"Minimal debouncing relative to last run", |
| kOmniboxZeroSuggestPrefetchDebouncingMinimalFromLastRun, |
| std::size(kOmniboxZeroSuggestPrefetchDebouncingMinimalFromLastRun), |
| nullptr}, |
| {"Minimal debouncing relative to last request", |
| kOmniboxZeroSuggestPrefetchDebouncingMinimalFromLastRequest, |
| std::size(kOmniboxZeroSuggestPrefetchDebouncingMinimalFromLastRequest), |
| nullptr}, |
| {"Moderate debouncing relative to last run", |
| kOmniboxZeroSuggestPrefetchDebouncingModerateFromLastRun, |
| std::size(kOmniboxZeroSuggestPrefetchDebouncingModerateFromLastRun), |
| nullptr}, |
| {"Moderate debouncing relative to last request", |
| kOmniboxZeroSuggestPrefetchDebouncingModerateFromLastRequest, |
| std::size( |
| kOmniboxZeroSuggestPrefetchDebouncingModerateFromLastRequest), |
| nullptr}, |
| {"Aggressive debouncing relative to last run", |
| kOmniboxZeroSuggestPrefetchDebouncingAggressiveFromLastRun, |
| std::size(kOmniboxZeroSuggestPrefetchDebouncingAggressiveFromLastRun), |
| nullptr}, |
| {"Aggressive debouncing relative to last request", |
| kOmniboxZeroSuggestPrefetchDebouncingAggressiveFromLastRequest, |
| std::size( |
| kOmniboxZeroSuggestPrefetchDebouncingAggressiveFromLastRequest), |
| nullptr}, |
| }; |
| |
| #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 // BUILDFLAG(IS_ANDROID) |
| |
| const FeatureEntry::FeatureParam kMaxZeroSuggestMatches5[] = { |
| {"MaxZeroSuggestMatches", "5"}}; |
| const FeatureEntry::FeatureParam kMaxZeroSuggestMatches6[] = { |
| {"MaxZeroSuggestMatches", "6"}}; |
| const FeatureEntry::FeatureParam kMaxZeroSuggestMatches7[] = { |
| {"MaxZeroSuggestMatches", "7"}}; |
| const FeatureEntry::FeatureParam kMaxZeroSuggestMatches8[] = { |
| {"MaxZeroSuggestMatches", "8"}}; |
| const FeatureEntry::FeatureParam kMaxZeroSuggestMatches9[] = { |
| {"MaxZeroSuggestMatches", "9"}}; |
| const FeatureEntry::FeatureParam kMaxZeroSuggestMatches10[] = { |
| {"MaxZeroSuggestMatches", "10"}}; |
| const FeatureEntry::FeatureParam kMaxZeroSuggestMatches11[] = { |
| {"MaxZeroSuggestMatches", "11"}}; |
| const FeatureEntry::FeatureParam kMaxZeroSuggestMatches12[] = { |
| {"MaxZeroSuggestMatches", "12"}}; |
| const FeatureEntry::FeatureParam kMaxZeroSuggestMatches13[] = { |
| {"MaxZeroSuggestMatches", "13"}}; |
| const FeatureEntry::FeatureParam kMaxZeroSuggestMatches14[] = { |
| {"MaxZeroSuggestMatches", "14"}}; |
| const FeatureEntry::FeatureParam kMaxZeroSuggestMatches15[] = { |
| {"MaxZeroSuggestMatches", "15"}}; |
| |
| const FeatureEntry::FeatureVariation kMaxZeroSuggestMatchesVariations[] = { |
| {"5", kMaxZeroSuggestMatches5, std::size(kMaxZeroSuggestMatches5), nullptr}, |
| {"6", kMaxZeroSuggestMatches6, std::size(kMaxZeroSuggestMatches6), nullptr}, |
| {"7", kMaxZeroSuggestMatches7, std::size(kMaxZeroSuggestMatches7), nullptr}, |
| {"8", kMaxZeroSuggestMatches8, std::size(kMaxZeroSuggestMatches8), nullptr}, |
| {"9", kMaxZeroSuggestMatches9, std::size(kMaxZeroSuggestMatches9), nullptr}, |
| {"10", kMaxZeroSuggestMatches10, std::size(kMaxZeroSuggestMatches10), |
| nullptr}, |
| {"11", kMaxZeroSuggestMatches11, std::size(kMaxZeroSuggestMatches11), |
| nullptr}, |
| {"12", kMaxZeroSuggestMatches12, std::size(kMaxZeroSuggestMatches12), |
| nullptr}, |
| {"13", kMaxZeroSuggestMatches13, std::size(kMaxZeroSuggestMatches13), |
| nullptr}, |
| {"14", kMaxZeroSuggestMatches14, std::size(kMaxZeroSuggestMatches14), |
| nullptr}, |
| {"15", kMaxZeroSuggestMatches15, std::size(kMaxZeroSuggestMatches15), |
| nullptr}}; |
| |
| const FeatureEntry::FeatureParam kOmniboxUIMaxAutocompleteMatches3[] = { |
| {OmniboxFieldTrial::kUIMaxAutocompleteMatchesParam, "3"}}; |
| const FeatureEntry::FeatureParam kOmniboxUIMaxAutocompleteMatches4[] = { |
| {OmniboxFieldTrial::kUIMaxAutocompleteMatchesParam, "4"}}; |
| const FeatureEntry::FeatureParam kOmniboxUIMaxAutocompleteMatches5[] = { |
| {OmniboxFieldTrial::kUIMaxAutocompleteMatchesParam, "5"}}; |
| const FeatureEntry::FeatureParam kOmniboxUIMaxAutocompleteMatches6[] = { |
| {OmniboxFieldTrial::kUIMaxAutocompleteMatchesParam, "6"}}; |
| const FeatureEntry::FeatureParam kOmniboxUIMaxAutocompleteMatches7[] = { |
| {OmniboxFieldTrial::kUIMaxAutocompleteMatchesParam, "7"}}; |
| const FeatureEntry::FeatureParam kOmniboxUIMaxAutocompleteMatches8[] = { |
| {OmniboxFieldTrial::kUIMaxAutocompleteMatchesParam, "8"}}; |
| const FeatureEntry::FeatureParam kOmniboxUIMaxAutocompleteMatches9[] = { |
| {OmniboxFieldTrial::kUIMaxAutocompleteMatchesParam, "9"}}; |
| const FeatureEntry::FeatureParam kOmniboxUIMaxAutocompleteMatches10[] = { |
| {OmniboxFieldTrial::kUIMaxAutocompleteMatchesParam, "10"}}; |
| const FeatureEntry::FeatureParam kOmniboxUIMaxAutocompleteMatches12[] = { |
| {OmniboxFieldTrial::kUIMaxAutocompleteMatchesParam, "12"}}; |
| |
| const FeatureEntry::FeatureVariation |
| kOmniboxUIMaxAutocompleteMatchesVariations[] = { |
| {"3 matches", kOmniboxUIMaxAutocompleteMatches3, |
| std::size(kOmniboxUIMaxAutocompleteMatches3), nullptr}, |
| {"4 matches", kOmniboxUIMaxAutocompleteMatches4, |
| std::size(kOmniboxUIMaxAutocompleteMatches4), nullptr}, |
| {"5 matches", kOmniboxUIMaxAutocompleteMatches5, |
| std::size(kOmniboxUIMaxAutocompleteMatches5), nullptr}, |
| {"6 matches", kOmniboxUIMaxAutocompleteMatches6, |
| std::size(kOmniboxUIMaxAutocompleteMatches6), nullptr}, |
| {"7 matches", kOmniboxUIMaxAutocompleteMatches7, |
| std::size(kOmniboxUIMaxAutocompleteMatches7), nullptr}, |
| {"8 matches", kOmniboxUIMaxAutocompleteMatches8, |
| std::size(kOmniboxUIMaxAutocompleteMatches8), nullptr}, |
| {"9 matches", kOmniboxUIMaxAutocompleteMatches9, |
| std::size(kOmniboxUIMaxAutocompleteMatches9), nullptr}, |
| {"10 matches", kOmniboxUIMaxAutocompleteMatches10, |
| std::size(kOmniboxUIMaxAutocompleteMatches10), nullptr}, |
| {"12 matches", kOmniboxUIMaxAutocompleteMatches12, |
| std::size(kOmniboxUIMaxAutocompleteMatches12), nullptr}}; |
| |
| const FeatureEntry::FeatureParam kOmniboxMaxURLMatches2[] = { |
| {OmniboxFieldTrial::kOmniboxMaxURLMatchesParam, "2"}}; |
| const FeatureEntry::FeatureParam kOmniboxMaxURLMatches3[] = { |
| {OmniboxFieldTrial::kOmniboxMaxURLMatchesParam, "3"}}; |
| const FeatureEntry::FeatureParam kOmniboxMaxURLMatches4[] = { |
| {OmniboxFieldTrial::kOmniboxMaxURLMatchesParam, "4"}}; |
| const FeatureEntry::FeatureParam kOmniboxMaxURLMatches5[] = { |
| {OmniboxFieldTrial::kOmniboxMaxURLMatchesParam, "5"}}; |
| const FeatureEntry::FeatureParam kOmniboxMaxURLMatches6[] = { |
| {OmniboxFieldTrial::kOmniboxMaxURLMatchesParam, "6"}}; |
| |
| const FeatureEntry::FeatureVariation kOmniboxMaxURLMatchesVariations[] = { |
| {"2 matches", kOmniboxMaxURLMatches2, std::size(kOmniboxMaxURLMatches2), |
| nullptr}, |
| {"3 matches", kOmniboxMaxURLMatches3, std::size(kOmniboxMaxURLMatches3), |
| nullptr}, |
| {"4 matches", kOmniboxMaxURLMatches4, std::size(kOmniboxMaxURLMatches4), |
| nullptr}, |
| {"5 matches", kOmniboxMaxURLMatches5, std::size(kOmniboxMaxURLMatches5), |
| nullptr}, |
| {"6 matches", kOmniboxMaxURLMatches6, std::size(kOmniboxMaxURLMatches6), |
| nullptr}}; |
| |
| const FeatureEntry::FeatureParam kOmniboxDynamicMaxAutocomplete90[] = { |
| {"OmniboxDynamicMaxAutocompleteUrlCutoff", "0"}, |
| {"OmniboxDynamicMaxAutocompleteIncreasedLimit", "9"}}; |
| const FeatureEntry::FeatureParam kOmniboxDynamicMaxAutocomplete91[] = { |
| {"OmniboxDynamicMaxAutocompleteUrlCutoff", "1"}, |
| {"OmniboxDynamicMaxAutocompleteIncreasedLimit", "9"}}; |
| const FeatureEntry::FeatureParam kOmniboxDynamicMaxAutocomplete92[] = { |
| {"OmniboxDynamicMaxAutocompleteUrlCutoff", "2"}, |
| {"OmniboxDynamicMaxAutocompleteIncreasedLimit", "9"}}; |
| const FeatureEntry::FeatureParam kOmniboxDynamicMaxAutocomplete100[] = { |
| {"OmniboxDynamicMaxAutocompleteUrlCutoff", "0"}, |
| {"OmniboxDynamicMaxAutocompleteIncreasedLimit", "10"}}; |
| const FeatureEntry::FeatureParam kOmniboxDynamicMaxAutocomplete101[] = { |
| {"OmniboxDynamicMaxAutocompleteUrlCutoff", "1"}, |
| {"OmniboxDynamicMaxAutocompleteIncreasedLimit", "10"}}; |
| const FeatureEntry::FeatureParam kOmniboxDynamicMaxAutocomplete102[] = { |
| {"OmniboxDynamicMaxAutocompleteUrlCutoff", "2"}, |
| {"OmniboxDynamicMaxAutocompleteIncreasedLimit", "10"}}; |
| |
| const FeatureEntry::FeatureVariation |
| kOmniboxDynamicMaxAutocompleteVariations[] = { |
| {"9 suggestions if 0 or fewer URLs", kOmniboxDynamicMaxAutocomplete90, |
| std::size(kOmniboxDynamicMaxAutocomplete90), nullptr}, |
| {"9 suggestions if 1 or fewer URLs", kOmniboxDynamicMaxAutocomplete91, |
| std::size(kOmniboxDynamicMaxAutocomplete91), nullptr}, |
| {"9 suggestions if 2 or fewer URLs", kOmniboxDynamicMaxAutocomplete92, |
| std::size(kOmniboxDynamicMaxAutocomplete92), nullptr}, |
| {"10 suggestions if 0 or fewer URLs", kOmniboxDynamicMaxAutocomplete100, |
| std::size(kOmniboxDynamicMaxAutocomplete100), nullptr}, |
| {"10 suggestions if 1 or fewer URLs", kOmniboxDynamicMaxAutocomplete101, |
| std::size(kOmniboxDynamicMaxAutocomplete101), nullptr}, |
| {"10 suggestions if 2 or fewer URLs", kOmniboxDynamicMaxAutocomplete102, |
| std::size(kOmniboxDynamicMaxAutocomplete102), nullptr}}; |
| |
| const FeatureEntry::FeatureParam kRepeatableQueries_6Searches_90Days[] = { |
| {"RepeatableQueriesIgnoreDuplicateVisits", "true"}, |
| {"RepeatableQueriesMinVisitCount", "6"}, |
| }; |
| const FeatureEntry::FeatureParam kRepeatableQueries_12Searches_90Days[] = { |
| {"RepeatableQueriesIgnoreDuplicateVisits", "true"}, |
| {"RepeatableQueriesMinVisitCount", "12"}, |
| }; |
| const FeatureEntry::FeatureParam kRepeatableQueries_6Searches_7Days[] = { |
| {"RepeatableQueriesIgnoreDuplicateVisits", "true"}, |
| {"RepeatableQueriesMinVisitCount", "6"}, |
| {"RepeatableQueriesMaxAgeDays", "7"}, |
| }; |
| const FeatureEntry::FeatureParam kRepeatableQueries_12Searches_7Days[] = { |
| {"RepeatableQueriesIgnoreDuplicateVisits", "true"}, |
| {"RepeatableQueriesMinVisitCount", "12"}, |
| {"RepeatableQueriesMaxAgeDays", "7"}, |
| }; |
| |
| const FeatureEntry::FeatureVariation kOrganicRepeatableQueriesVariations[] = { |
| {"6+ uses, once in last 90d", kRepeatableQueries_6Searches_90Days, |
| std::size(kRepeatableQueries_6Searches_90Days), nullptr}, |
| {"12+ uses, once in last 90d", kRepeatableQueries_12Searches_90Days, |
| std::size(kRepeatableQueries_12Searches_90Days), nullptr}, |
| {"6+ uses, once in last 7d", kRepeatableQueries_6Searches_7Days, |
| std::size(kRepeatableQueries_6Searches_7Days), nullptr}, |
| {"12+ uses, once in last 7d", kRepeatableQueries_12Searches_7Days, |
| std::size(kRepeatableQueries_12Searches_7Days), nullptr}, |
| }; |
| #if !BUILDFLAG(IS_ANDROID) |
| const FeatureEntry::FeatureParam kMinimumTabWidthSettingPinned[] = { |
| {tabs::kMinimumTabWidthFeatureParameterName, "54"}}; |
| const FeatureEntry::FeatureParam kMinimumTabWidthSettingMedium[] = { |
| {tabs::kMinimumTabWidthFeatureParameterName, "72"}}; |
| const FeatureEntry::FeatureParam kMinimumTabWidthSettingLarge[] = { |
| {tabs::kMinimumTabWidthFeatureParameterName, "140"}}; |
| const FeatureEntry::FeatureParam kMinimumTabWidthSettingFull[] = { |
| {tabs::kMinimumTabWidthFeatureParameterName, "256"}}; |
| |
| const FeatureEntry::FeatureVariation kTabScrollingVariations[] = { |
| {" - tabs shrink to pinned tab width", kMinimumTabWidthSettingPinned, |
| std::size(kMinimumTabWidthSettingPinned), nullptr}, |
| {" - tabs shrink to a medium width", kMinimumTabWidthSettingMedium, |
| std::size(kMinimumTabWidthSettingMedium), nullptr}, |
| {" - tabs shrink to a large width", kMinimumTabWidthSettingLarge, |
| std::size(kMinimumTabWidthSettingLarge), nullptr}, |
| {" - tabs don't shrink", kMinimumTabWidthSettingFull, |
| std::size(kMinimumTabWidthSettingFull), nullptr}}; |
| #endif |
| |
| #if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) || \ |
| BUILDFLAG(IS_CHROMEOS) |
| const FeatureEntry::FeatureParam kTabstripDeclutterQuickModeParams[] = { |
| {"stale_threshold_duration", "10s"}, |
| {"declutter_timer_interval", "10s"}, |
| {"nudge_timer_interval", "30s"}, |
| }; |
| |
| const FeatureEntry::FeatureVariation kTabstripDeclutterVariations[] = { |
| {"Quick Mode", kTabstripDeclutterQuickModeParams, |
| std::size(kTabstripDeclutterQuickModeParams)}, |
| }; |
| #endif |
| |
| const FeatureEntry::FeatureParam kTabScrollingButtonPositionRight[] = { |
| {features::kTabScrollingButtonPositionParameterName, "0"}}; |
| const FeatureEntry::FeatureParam kTabScrollingButtonPositionLeft[] = { |
| {features::kTabScrollingButtonPositionParameterName, "1"}}; |
| const FeatureEntry::FeatureParam kTabScrollingButtonPositionSplit[] = { |
| {features::kTabScrollingButtonPositionParameterName, "2"}}; |
| |
| const FeatureEntry::FeatureVariation kTabScrollingButtonPositionVariations[] = { |
| {" - to the right of the tabstrip", kTabScrollingButtonPositionRight, |
| std::size(kTabScrollingButtonPositionRight), nullptr}, |
| {" - to the left of the tabstrip", kTabScrollingButtonPositionLeft, |
| std::size(kTabScrollingButtonPositionLeft), nullptr}, |
| {" - on both sides of the tabstrip", kTabScrollingButtonPositionSplit, |
| std::size(kTabScrollingButtonPositionSplit), nullptr}}; |
| |
| #if !BUILDFLAG(IS_ANDROID) |
| const FeatureEntry::FeatureParam kTabScrollingWithDraggingWithConstantSpeed[] = |
| {{tabs::kTabScrollingWithDraggingModeName, "1"}}; |
| const FeatureEntry::FeatureParam kTabScrollingWithDraggingWithVariableSpeed[] = |
| {{tabs::kTabScrollingWithDraggingModeName, "2"}}; |
| |
| const FeatureEntry::FeatureVariation kTabScrollingWithDraggingVariations[] = { |
| {" - tabs scrolling with constant speed", |
| kTabScrollingWithDraggingWithConstantSpeed, |
| std::size(kTabScrollingWithDraggingWithConstantSpeed), nullptr}, |
| {" - tabs scrolling with variable speed region", |
| kTabScrollingWithDraggingWithVariableSpeed, |
| std::size(kTabScrollingWithDraggingWithVariableSpeed), nullptr}}; |
| |
| const FeatureEntry::FeatureParam kScrollableTabStripOverflowDivider[] = { |
| {tabs::kScrollableTabStripOverflowModeName, "1"}}; |
| const FeatureEntry::FeatureParam kScrollableTabStripOverflowFade[] = { |
| {tabs::kScrollableTabStripOverflowModeName, "2"}}; |
| const FeatureEntry::FeatureParam kScrollableTabStripOverflowShadow[] = { |
| {tabs::kScrollableTabStripOverflowModeName, "3"}}; |
| |
| const FeatureEntry::FeatureVariation kScrollableTabStripOverflowVariations[] = { |
| {" - Divider", kScrollableTabStripOverflowDivider, |
| std::size(kScrollableTabStripOverflowDivider), nullptr}, // Divider |
| {" - Fade", kScrollableTabStripOverflowFade, |
| std::size(kScrollableTabStripOverflowFade), nullptr}, // Fade |
| {" - Shadow", kScrollableTabStripOverflowShadow, |
| std::size(kScrollableTabStripOverflowShadow), nullptr}, // Shadow |
| }; |
| #endif |
| |
| const FeatureEntry::FeatureParam kChromeLabsEnabledInFlags[] = { |
| {features::kChromeLabsActivationParameterName, "100"}}; |
| |
| const FeatureEntry::FeatureVariation kChromeLabsVariations[] = { |
| {" use this one!", kChromeLabsEnabledInFlags, |
| std::size(kChromeLabsEnabledInFlags), nullptr}}; |
| |
| #if !BUILDFLAG(IS_ANDROID) |
| const FeatureEntry::FeatureParam kNtpCalendarModuleFakeData[] = { |
| {ntp_features::kNtpCalendarModuleDataParam, "fake"}}; |
| const FeatureEntry::FeatureVariation kNtpCalendarModuleVariations[] = { |
| {"- Fake Data", kNtpCalendarModuleFakeData, |
| std::size(kNtpCalendarModuleFakeData), nullptr}, |
| }; |
| |
| const FeatureEntry::FeatureParam kNtpChromeCartModuleFakeData[] = { |
| {ntp_features::kNtpChromeCartModuleDataParam, "fake"}, |
| {ntp_features::kNtpChromeCartModuleAbandonedCartDiscountParam, "true"}}; |
| const FeatureEntry::FeatureParam kNtpChromeCartModuleAbandonedCartDiscount[] = { |
| {ntp_features::kNtpChromeCartModuleAbandonedCartDiscountParam, "true"}, |
| {ntp_features::kNtpChromeCartModuleAbandonedCartDiscountUseUtmParam, |
| "true"}, |
| {"partner-merchant-pattern", |
| "(electronicexpress.com|zazzle.com|wish.com|homesquare.com|iherb.com|" |
| "zappos.com|otterbox.com)"}}; |
| const FeatureEntry::FeatureParam kNtpChromeCartModuleHeuristicsImprovement[] = { |
| {ntp_features::kNtpChromeCartModuleHeuristicsImprovementParam, "true"}}; |
| const FeatureEntry::FeatureParam kNtpChromeCartModuleRBDAndCouponDiscount[] = { |
| {ntp_features::kNtpChromeCartModuleHeuristicsImprovementParam, "true"}, |
| {ntp_features::kNtpChromeCartModuleAbandonedCartDiscountParam, "true"}, |
| {ntp_features::kNtpChromeCartModuleAbandonedCartDiscountUseUtmParam, |
| "true"}, |
| {"partner-merchant-pattern", |
| "(electronicexpress.com|zazzle.com|wish.com|homesquare.com)"}, |
| {ntp_features::kNtpChromeCartModuleCouponParam, "true"}}; |
| const FeatureEntry::FeatureVariation kNtpChromeCartModuleVariations[] = { |
| {"- Fake Data And Discount", kNtpChromeCartModuleFakeData, |
| std::size(kNtpChromeCartModuleFakeData), nullptr}, |
| {"- Abandoned Cart Discount", kNtpChromeCartModuleAbandonedCartDiscount, |
| std::size(kNtpChromeCartModuleAbandonedCartDiscount), nullptr}, |
| {"- Heuristics Improvement", kNtpChromeCartModuleHeuristicsImprovement, |
| std::size(kNtpChromeCartModuleHeuristicsImprovement), nullptr}, |
| {"- RBD and Coupons", kNtpChromeCartModuleRBDAndCouponDiscount, |
| std::size(kNtpChromeCartModuleRBDAndCouponDiscount), nullptr}, |
| }; |
| |
| // The following are consent v2 variations in the Chrome Cart module. |
| const flags_ui::FeatureEntry::FeatureParam kDiscountConsentNtpDialog[] = { |
| {commerce::kNtpChromeCartModuleDiscountConsentNtpVariationParam, "3"}}; |
| const flags_ui::FeatureEntry::FeatureParam kDiscountConsentNtpNativeDialog[] = { |
| {commerce::kNtpChromeCartModuleDiscountConsentNtpVariationParam, "4"}}; |
| |
| const FeatureEntry::FeatureVariation kDiscountConsentV2Variations[] = { |
| {"WebUi Dialog Consent", kDiscountConsentNtpDialog, |
| std::size(kDiscountConsentNtpDialog), nullptr}, |
| {"Native Dialog Consent", kDiscountConsentNtpNativeDialog, |
| std::size(kDiscountConsentNtpNativeDialog), nullptr}, |
| }; |
| |
| // The following is Code-based RBD variation. |
| const flags_ui::FeatureEntry::FeatureParam kCodeBasedRBDEnabled[] = { |
| {commerce::kCodeBasedRuleDiscountParam, "true"}}; |
| |
| const FeatureEntry::FeatureVariation kCodeBasedRBDVariations[] = { |
| {"code-based RBD", kCodeBasedRBDEnabled, std::size(kCodeBasedRBDEnabled), |
| "t3362898"}, |
| }; |
| |
| const FeatureEntry::FeatureParam kNtpDriveModuleFakeData[] = { |
| {ntp_features::kNtpDriveModuleDataParam, "fake"}}; |
| const FeatureEntry::FeatureParam kNtpDriveModuleManagedUsersOnly[] = { |
| {ntp_features::kNtpDriveModuleManagedUsersOnlyParam, "true"}}; |
| const FeatureEntry::FeatureVariation kNtpDriveModuleVariations[] = { |
| {"- Fake Data", kNtpDriveModuleFakeData, std::size(kNtpDriveModuleFakeData), |
| nullptr}, |
| {"- Managed Users Only", kNtpDriveModuleManagedUsersOnly, |
| std::size(kNtpDriveModuleManagedUsersOnly), nullptr}, |
| }; |
| |
| const FeatureEntry::FeatureParam kNtpOutlookCalendarModuleFakeData[] = { |
| {ntp_features::kNtpOutlookCalendarModuleDataParam, "fake"}}; |
| const FeatureEntry::FeatureVariation kNtpOutlookCalendarModuleVariations[] = { |
| {"- Fake Data", kNtpOutlookCalendarModuleFakeData, |
| std::size(kNtpOutlookCalendarModuleFakeData), nullptr}, |
| }; |
| |
| const FeatureEntry::FeatureParam kNtpMiddleSlotPromoDismissalFakeData[] = { |
| {ntp_features::kNtpMiddleSlotPromoDismissalParam, "fake"}}; |
| const FeatureEntry::FeatureVariation kNtpMiddleSlotPromoDismissalVariations[] = |
| { |
| {"- Fake Data", kNtpMiddleSlotPromoDismissalFakeData, |
| std::size(kNtpMiddleSlotPromoDismissalFakeData), nullptr}, |
| }; |
| |
| const FeatureEntry::FeatureParam |
| kNtpRealboxCr23NoShadowExpandedStateBgMatchesSteadyState[]{ |
| {"kNtpRealboxCr23ExpandedStateBgMatchesOmnibox", "false"}, |
| {"kNtpRealboxCr23SteadyStateShadow", "false"}}; |
| const FeatureEntry::FeatureParam |
| kNtpRealboxCr23ShadowExpandedStateBgMatchesOmnibox[]{ |
| {"kNtpRealboxCr23ExpandedStateBgMatchesOmnibox", "true"}, |
| {"kNtpRealboxCr23SteadyStateShadow", "true"}}; |
| const FeatureEntry::FeatureParam |
| kNtpRealboxCr23ShadowExpandedStateBgMatchesSteadyState[]{ |
| {"kNtpRealboxCr23ExpandedStateBgMatchesOmnibox", "false"}, |
| {"kNtpRealboxCr23SteadyStateShadow", "true"}}; |
| |
| const FeatureEntry::FeatureVariation kNtpRealboxCr23ThemingVariations[] = { |
| {" - Steady state shadow", |
| kNtpRealboxCr23ShadowExpandedStateBgMatchesOmnibox, |
| std::size(kNtpRealboxCr23ShadowExpandedStateBgMatchesOmnibox), nullptr}, |
| {" - No steady state shadow + Dark mode background color matches steady" |
| "state", |
| kNtpRealboxCr23NoShadowExpandedStateBgMatchesSteadyState, |
| std::size(kNtpRealboxCr23NoShadowExpandedStateBgMatchesSteadyState), |
| nullptr}, |
| {" - Steady state shadow + Dark mode background color matches steady " |
| "state", |
| kNtpRealboxCr23ShadowExpandedStateBgMatchesSteadyState, |
| std::size(kNtpRealboxCr23ShadowExpandedStateBgMatchesSteadyState), |
| nullptr}, |
| }; |
| |
| const FeatureEntry::FeatureParam kNtpSafeBrowsingModuleFastCooldown[] = { |
| {ntp_features::kNtpSafeBrowsingModuleCooldownPeriodDaysParam, "0.001"}, |
| {ntp_features::kNtpSafeBrowsingModuleCountMaxParam, "1"}}; |
| const FeatureEntry::FeatureVariation kNtpSafeBrowsingModuleVariations[] = { |
| {"(Fast Cooldown)", kNtpSafeBrowsingModuleFastCooldown, |
| std::size(kNtpSafeBrowsingModuleFastCooldown), nullptr}, |
| }; |
| |
| const FeatureEntry::FeatureParam kNtpMostRelevantTabResumptionModuleFakeData[] = |
| {{ntp_features::kNtpMostRelevantTabResumptionModuleDataParam, "Fake Data"}}; |
| const FeatureEntry::FeatureParam |
| kNtpMostRelevantTabResumptionModuleFakeDataMostRecent[] = { |
| {ntp_features::kNtpMostRelevantTabResumptionModuleDataParam, |
| "Fake Data - Most Recent Decorator"}}; |
| const FeatureEntry::FeatureParam |
| kNtpMostRelevantTabResumptionModuleFakeDataFrequentlyVisitedAtTime[] = { |
| {ntp_features::kNtpMostRelevantTabResumptionModuleDataParam, |
| "Fake Data - Frequently Visited At Time Decorator"}}; |
| const FeatureEntry::FeatureParam |
| kNtpMostRelevantTabResumptionModuleFakeDataJustVisited[] = { |
| {ntp_features::kNtpMostRelevantTabResumptionModuleDataParam, |
| "Fake Data - Just Visited Decorator"}}; |
| const FeatureEntry::FeatureParam kNtpMostRelevantTabResumptionModuleTabData[] = |
| {{ntp_features::kNtpMostRelevantTabResumptionModuleDataParam, "1,2"}}; |
| const FeatureEntry::FeatureParam |
| kNtpMostRelevantTabResumptionModuleRemoteTabData[] = { |
| {ntp_features::kNtpMostRelevantTabResumptionModuleDataParam, "2"}}; |
| const FeatureEntry::FeatureParam |
| kNtpMostRelevantTabResumptionModuleVisitData[] = { |
| {ntp_features::kNtpMostRelevantTabResumptionModuleDataParam, |
| "1,2,3,4"}}; |
| // Most relevant tab resumption module data params may be expressed as a comma |
| // separated value consisting of the integer representations of the |
| // `FetchOptions::URLType` enumeration, to specify what URL types should be |
| // provided as options to the Visited URL Ranking Service's APIs. |
| const FeatureEntry::FeatureVariation |
| kNtpMostRelevantTabResumptionModuleVariations[] = { |
| {"- Fake Data", kNtpMostRelevantTabResumptionModuleFakeData, |
| std::size(kNtpMostRelevantTabResumptionModuleFakeData), nullptr}, |
| {"- Fake Data - Most Recent Decorator", |
| kNtpMostRelevantTabResumptionModuleFakeDataMostRecent, |
| std::size(kNtpMostRelevantTabResumptionModuleFakeData), nullptr}, |
| {"- Fake Data - Frequently Visited At Time Decorator", |
| kNtpMostRelevantTabResumptionModuleFakeDataFrequentlyVisitedAtTime, |
| std::size(kNtpMostRelevantTabResumptionModuleFakeData), nullptr}, |
| {"- Fake Data - Just Visited Decorator", |
| kNtpMostRelevantTabResumptionModuleFakeDataJustVisited, |
| std::size(kNtpMostRelevantTabResumptionModuleFakeData), nullptr}, |
| {"- Tabs Only", kNtpMostRelevantTabResumptionModuleTabData, |
| std::size(kNtpMostRelevantTabResumptionModuleTabData), nullptr}, |
| {"- Remote Tabs Only", kNtpMostRelevantTabResumptionModuleRemoteTabData, |
| std::size(kNtpMostRelevantTabResumptionModuleRemoteTabData), nullptr}, |
| {"- All Visits", kNtpMostRelevantTabResumptionModuleVisitData, |
| std::size(kNtpMostRelevantTabResumptionModuleVisitData), nullptr}, |
| }; |
| #endif // !BUILDFLAG(IS_ANDROID) |
| |
| #if !BUILDFLAG(IS_ANDROID) |
| const FeatureEntry::FeatureParam kPerformanceInterventionStringVersion1[] = { |
| {"intervention_dialog_version", "1"}}; |
| const FeatureEntry::FeatureParam kPerformanceInterventionStringVersion2[] = { |
| {"intervention_dialog_version", "2"}}; |
| const FeatureEntry::FeatureParam kPerformanceInterventionStringVersion3[] = { |
| {"intervention_dialog_version", "3"}}; |
| |
| const FeatureEntry::FeatureVariation |
| kPerformanceInterventionStringVariations[] = { |
| {"String version 1", kPerformanceInterventionStringVersion1, |
| std::size(kPerformanceInterventionStringVersion1), nullptr}, |
| {"String version 2", kPerformanceInterventionStringVersion2, |
| std::size(kPerformanceInterventionStringVersion2), nullptr}, |
| {"String version 3", kPerformanceInterventionStringVersion3, |
| std::size(kPerformanceInterventionStringVersion3), nullptr}, |
| }; |
| #endif // !BUILDFLAG(IS_ANDROID) |
| |
| #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 // BUILDFLAG(IS_ANDROID) |
| |
| const FeatureEntry::FeatureParam |
| kResamplingScrollEventsPredictionTimeBasedEnabled[] = { |
| {"mode", features::kPredictionTypeTimeBased}, |
| {"latency", features::kPredictionTypeDefaultTime}}; |
| const FeatureEntry::FeatureParam |
| kResamplingScrollEventsPredictionFramesBasedEnabled[] = { |
| {"mode", features::kPredictionTypeFramesBased}, |
| {"latency", features::kPredictionTypeDefaultFramesRatio}}; |
| const FeatureEntry::FeatureVariation |
| kResamplingScrollEventsExperimentalPredictionVariations[] = { |
| {features::kPredictionTypeTimeBased, |
| kResamplingScrollEventsPredictionTimeBasedEnabled, |
| std::size(kResamplingScrollEventsPredictionTimeBasedEnabled), nullptr}, |
| {features::kPredictionTypeFramesBased, |
| kResamplingScrollEventsPredictionFramesBasedEnabled, |
| std::size(kResamplingScrollEventsPredictionFramesBasedEnabled), |
| nullptr}}; |
| |
| #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 kEducationalTipModule_force_default_browser[] = |
| {{"force_default_browser", "true"}}; |
| const FeatureEntry::FeatureParam kEducationalTipModule_force_tab_group[] = { |
| {"force_tab_group", "true"}}; |
| const FeatureEntry::FeatureParam kEducationalTipModule_force_tab_group_sync[] = |
| {{"force_tab_group_sync", "true"}}; |
| const FeatureEntry::FeatureParam kEducationalTipModule_force_quick_delete[] = { |
| {"force_quick_delete", "true"}}; |
| |
| const FeatureEntry::FeatureVariation kEducationalTipModuleVariations[] = { |
| {"Show default browser promo", kEducationalTipModule_force_default_browser, |
| std::size(kEducationalTipModule_force_default_browser), nullptr}, |
| {"Show tab group promo", kEducationalTipModule_force_tab_group, |
| std::size(kEducationalTipModule_force_tab_group), nullptr}, |
| {"Show tab group sync promo", kEducationalTipModule_force_tab_group_sync, |
| std::size(kEducationalTipModule_force_tab_group_sync), nullptr}, |
| {"Show quick delete promo", kEducationalTipModule_force_quick_delete, |
| std::size(kEducationalTipModule_force_quick_delete), 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 // BUILDFLAG(IS_ANDROID) |
| #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_decorator_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::FeatureParam |
| kTabResumptionModule_enable_v2_ml_show_decorator_visited_x_ago[] = { |
| {"enable_v2", "true"}, |
| {"fetch_history_backend", "true"}, |
| {"fetch_local_tabs_backend", "true"}, |
| {"override_decoration", "1"}, // kVisitedXAgo |
| {"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_ml_show_decorator_most_visited[] = { |
| {"enable_v2", "true"}, |
| {"fetch_history_backend", "true"}, |
| {"fetch_local_tabs_backend", "true"}, |
| {"override_decoration", "2"}, // kMostRecent |
| {"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_ml_show_decorator_frequently_visited[] = { |
| {"enable_v2", "true"}, |
| {"fetch_history_backend", "true"}, |
| {"fetch_local_tabs_backend", "true"}, |
| {"override_decoration", "3"}, // kFrequentlyVisited |
| {"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_ml_show_decorator_frequently_visited_at_time |
| [] = { |
| {"enable_v2", "true"}, |
| {"fetch_history_backend", "true"}, |
| {"fetch_local_tabs_backend", "true"}, |
| {"override_decoration", "4"}, // kFrequentlyVisitedAtTime |
| {"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_decorator_default_reason, |
| std::size(kTabResumptionModule_enable_v2_ml_show_decorator_default_reason), |
| nullptr}, |
| {"V2 ML: visited x ago decorator", |
| kTabResumptionModule_enable_v2_ml_show_decorator_visited_x_ago, |
| std::size(kTabResumptionModule_enable_v2_ml_show_decorator_visited_x_ago), |
| nullptr}, |
| {"V2 ML: most visited decorator", |
| kTabResumptionModule_enable_v2_ml_show_decorator_most_visited, |
| std::size(kTabResumptionModule_enable_v2_ml_show_decorator_most_visited), |
| nullptr}, |
| {"V2 ML: frequently visited decorator", |
| kTabResumptionModule_enable_v2_ml_show_decorator_frequently_visited, |
| std::size( |
| kTabResumptionModule_enable_v2_ml_show_decorator_frequently_visited), |
| nullptr}, |
| {"V2 ML: frequently visited at time decorator", |
| kTabResumptionModule_enable_v2_ml_show_decorator_frequently_visited_at_time, |
| std::size( |
| kTabResumptionModule_enable_v2_ml_show_decorator_frequently_visited_at_time), |
| 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}, |
| }; |
| |
| #endif // BUILDFLAG(IS_ANDROID) |
| |
| const FeatureEntry::Choice kNotificationSchedulerChoices[] = { |
| {flags_ui::kGenericExperimentChoiceDefault, "", ""}, |
| {flag_descriptions:: |
| kNotificationSchedulerImmediateBackgroundTaskDescription, |
| notifications::switches::kNotificationSchedulerImmediateBackgroundTask, |
| ""}, |
| }; |
| |
| #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 // BUILDFLAG(IS_ANDROID) |
| |
| // TODO(crbug.com/991082,1015377): Remove after proper support for back/forward |
| // cache is implemented. |
| const FeatureEntry::FeatureParam kBackForwardCache_ForceCaching[] = { |
| {"TimeToLiveInBackForwardCacheInSeconds", "300"}, |
| {"should_ignore_blocklists", "true"}}; |
| |
| const FeatureEntry::FeatureVariation kBackForwardCacheVariations[] = { |
| {"force caching all pages (experimental)", kBackForwardCache_ForceCaching, |
| std::size(kBackForwardCache_ForceCaching), nullptr}, |
| }; |
| |
| const FeatureEntry::FeatureParam kRenderDocument_Subframe[] = { |
| {"level", "subframe"}}; |
| const FeatureEntry::FeatureParam kRenderDocument_AllFrames[] = { |
| {"level", "all-frames"}}; |
| |
| const FeatureEntry::FeatureVariation kRenderDocumentVariations[] = { |
| {"Swap RenderFrameHosts on same-site navigations from subframes and " |
| "crashed frames (experimental)", |
| kRenderDocument_Subframe, std::size(kRenderDocument_Subframe), nullptr}, |
| {"Swap RenderFrameHosts on same-site navigations from any frame " |
| "(experimental)", |
| kRenderDocument_AllFrames, std::size(kRenderDocument_AllFrames), nullptr}, |
| |