#include "third_party/blink/public/common/features.h"
#include "arkweb/build/features/features.h"
#include "base/command_line.h"
#include "base/feature_list.h"
#include "base/features.h"
#include "base/time/time.h"
#include "build/android_buildflags.h"
#include "build/build_config.h"
#include "build/buildflag.h"
#include "build/chromecast_buildflags.h"
#include "net/http/http_cache.h"
#include "third_party/blink/public/common/features_generated.h"
#include "third_party/blink/public/common/interest_group/ad_auction_constants.h"
#include "third_party/blink/public/common/switches.h"
namespace blink::features {
BASE_FEATURE(kAIPageContentIncludePopupWindows,
base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kAIPageContentMissingSubframesFailSilently,
base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kAdAuctionSignals, base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE_PARAM(int,
kAdAuctionSignalsMaxSizeBytes,
&kAdAuctionSignals,
"ad-auction-signals-max-size-bytes",
10000);
#if BUILDFLAG(IS_ANDROID)
BASE_FEATURE(kAndroidDesktopWebPrefsLargeDisplays,
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kAndroidSpellcheckNativeUi, base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kAndroidSpellcheckFullApiBlink, base::FEATURE_DISABLED_BY_DEFAULT);
#endif
BASE_FEATURE(kAvoidTrustedParamsCopies, base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kAsyncTouchMovesImmediatelyAfterScroll,
#if BUILDFLAG(IS_ANDROID)
base::FEATURE_ENABLED_BY_DEFAULT
#else
base::FEATURE_DISABLED_BY_DEFAULT
#endif
);
BASE_FEATURE(kBlockMidiByDefault, base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kComputePressureRateObfuscationMitigation,
base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kCrashReportingAPIMoreContextData,
base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kOverrideCrashReportingEndpoint, base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kLowerHighResolutionTimerThreshold,
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kAllowDatapipeDrainedAsBytesConsumerInBFCache,
base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kAllowDevToolsMainThreadDebuggerForMultipleMainFrames,
base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kAllowURNsInIframes, base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kDisplayWarningDeprecateURNIframesUseFencedFrames,
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kAudioWorkletThreadRealtimePriority,
base::FEATURE_ENABLED_BY_DEFAULT);
#if BUILDFLAG(IS_APPLE)
BASE_FEATURE(kAudioWorkletThreadRealtimePeriodMac,
base::FEATURE_ENABLED_BY_DEFAULT);
#endif
BASE_FEATURE(kAudioWorkletThreadPool, base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kAutofillEnableSyntheticSelectMetricsLogging,
base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kAutofillFixFieldsAssociatedWithNestedFormsByParser,
base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kAutofillSendUnidentifiedKeyAfterFill,
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kAutoSpeculationRules, base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE_PARAM(bool,
kAutoSpeculationRulesHoldback,
&kAutoSpeculationRules,
"holdback",
false);
BASE_FEATURE(kBFCacheOpenBroadcastChannel, base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kBFCacheWithSharedWorker, base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kBackForwardCacheDWCOnJavaScriptExecution,
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kBackgroundResourceFetch, base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE_PARAM(bool,
kBackgroundFontResponseProcessor,
&kBackgroundResourceFetch,
"background-font-response-processor",
true);
BASE_FEATURE_PARAM(bool,
kBackgroundScriptResponseProcessor,
&kBackgroundResourceFetch,
"background-script-response-processor",
true);
BASE_FEATURE_PARAM(bool,
kBackgroundCodeCacheDecoderStart,
&kBackgroundResourceFetch,
"background-code-cache-decoder-start",
true);
BASE_FEATURE(kBakedGamutMapping, base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kBackgroundTracingPerformanceMark,
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE_PARAM(std::string,
kBackgroundTracingPerformanceMark_AllowList,
&kBackgroundTracingPerformanceMark,
"allow_list",
"");
BASE_FEATURE(kBoostImageSetLoadingTaskPriority,
base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kBoostFontLoadingTaskPriority, base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kBoostVideoLoadingTaskPriority, base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kBoostRenderBlockingStyleLoadingTaskPriority,
base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kBoostNonRenderBlockingStyleLoadingTaskPriority,
base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kBrowsingTopicsBypassIPIsPubliclyRoutableCheck,
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kBrowsingTopicsDocumentAPI, base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kBrowsingTopicsParameters, base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE_PARAM(base::TimeDelta,
kBrowsingTopicsTimePeriodPerEpoch,
&kBrowsingTopicsParameters,
"time_period_per_epoch",
base::Days(7));
BASE_FEATURE_PARAM(int,
kBrowsingTopicsNumberOfEpochsToExpose,
&kBrowsingTopicsParameters,
"number_of_epochs_to_expose",
3);
BASE_FEATURE_PARAM(int,
kBrowsingTopicsNumberOfTopTopicsPerEpoch,
&kBrowsingTopicsParameters,
"number_of_top_topics_per_epoch",
5);
BASE_FEATURE_PARAM(int,
kBrowsingTopicsUseRandomTopicProbabilityPercent,
&kBrowsingTopicsParameters,
"use_random_topic_probability_percent",
5);
BASE_FEATURE_PARAM(base::TimeDelta,
kBrowsingTopicsMaxEpochIntroductionDelay,
&kBrowsingTopicsParameters,
"max_epoch_introduction_delay",
base::Days(2));
BASE_FEATURE_PARAM(base::TimeDelta,
kBrowsingTopicsEpochRetentionDuration,
&kBrowsingTopicsParameters,
"epoch_retention_duration",
base::Days(28));
BASE_FEATURE_PARAM(base::TimeDelta,
kBrowsingTopicsMaxEpochPhaseOutTimeOffset,
&kBrowsingTopicsParameters,
"max_epoch_phase_out_time_offset",
base::Days(2));
BASE_FEATURE_PARAM(
int,
kBrowsingTopicsNumberOfEpochsOfObservationDataToUseForFiltering,
&kBrowsingTopicsParameters,
"number_of_epochs_of_observation_data_to_use_for_filtering",
3);
BASE_FEATURE_PARAM(
int,
kBrowsingTopicsMaxNumberOfApiUsageContextDomainsToKeepPerTopic,
&kBrowsingTopicsParameters,
"max_number_of_api_usage_context_domains_to_keep_per_topic",
1000);
BASE_FEATURE_PARAM(
int,
kBrowsingTopicsMaxNumberOfApiUsageContextEntriesToLoadPerEpoch,
&kBrowsingTopicsParameters,
"max_number_of_api_usage_context_entries_to_load_per_epoch",
100000);
BASE_FEATURE_PARAM(
int,
kBrowsingTopicsMaxNumberOfApiUsageContextDomainsToStorePerPageLoad,
&kBrowsingTopicsParameters,
"max_number_of_api_usage_context_domains_to_store_per_page_load",
30);
BASE_FEATURE_PARAM(int,
kBrowsingTopicsTaxonomyVersion,
&kBrowsingTopicsParameters,
"taxonomy_version",
kBrowsingTopicsTaxonomyVersionDefault);
BASE_FEATURE_PARAM(std::string,
kBrowsingTopicsDisabledTopicsList,
&kBrowsingTopicsParameters,
"disabled_topics_list",
"");
BASE_FEATURE_PARAM(std::string,
kBrowsingTopicsPrioritizedTopicsList,
&kBrowsingTopicsParameters,
"prioritized_topics_list",
"57,86,126,149,172,180,196,207,239,254,263,272,289,299,332");
BASE_FEATURE_PARAM(base::TimeDelta,
kBrowsingTopicsFirstTimeoutRetryDelay,
&kBrowsingTopicsParameters,
"first_timeout_retry_delay",
base::Minutes(1));
BASE_FEATURE(kCacheStorageCodeCacheHintHeader,
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE_PARAM(std::string,
kCacheStorageCodeCacheHintHeaderName,
&kCacheStorageCodeCacheHintHeader,
"name",
"x-CacheStorageCodeCacheHint");
BASE_FEATURE(kCanvas2DHibernation,
base::FeatureState::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kCanvas2DHibernationReleaseTransferMemory,
base::FeatureState::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kCanvas2DHibernationNoSmallCanvas,
base::FeatureState::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kCaptureJSExecutionLocation, base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kCheckHTMLParserBudgetLessOften,
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kClearSiteDataPrefetchPrerenderCache,
base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kClientHintsDPR_DEPRECATED, base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kClientHintsDeviceMemory_DEPRECATED,
base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kClientHintsResourceWidth_DEPRECATED,
base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kClientHintsViewportWidth_DEPRECATED,
base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kCompressParkableStrings, base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kLessAggressiveParkableString, base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE_PARAM(int,
kMaxDiskDataAllocatorCapacityMB,
&kCompressParkableStrings,
"max_disk_capacity_mb",
-1);
BASE_FEATURE(kCombineNewWindowIPCs, base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kConsumeCodeCacheOffThread, base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kContentCaptureConstantStreaming,
base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kCreateImageBitmapOrientationNone,
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kDeclarativeCSSModulesUseDataURI,
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kDeferRendererTasksAfterInput, base::FEATURE_ENABLED_BY_DEFAULT);
const char kDeferRendererTasksAfterInputPolicyParamName[] = "policy";
const char kDeferRendererTasksAfterInputMinimalTypesPolicyName[] =
"minimal-types";
const char
kDeferRendererTasksAfterInputNonUserBlockingDeferrableTypesPolicyName[] =
"non-user-blocking-deferrable-types";
const char kDeferRendererTasksAfterInputNonUserBlockingTypesPolicyName[] =
"non-user-blocking-types";
const char kDeferRendererTasksAfterInputAllDeferrableTypesPolicyName[] =
"all-deferrable-types";
const char kDeferRendererTasksAfterInputAllTypesPolicyName[] = "all-types";
const base::FeatureParam<TaskDeferralPolicy>::Option kTaskDeferralOptions[] = {
{TaskDeferralPolicy::kMinimalTypes,
kDeferRendererTasksAfterInputMinimalTypesPolicyName},
{TaskDeferralPolicy::kNonUserBlockingDeferrableTypes,
kDeferRendererTasksAfterInputNonUserBlockingDeferrableTypesPolicyName},
{TaskDeferralPolicy::kNonUserBlockingTypes,
kDeferRendererTasksAfterInputNonUserBlockingTypesPolicyName},
{TaskDeferralPolicy::kAllDeferrableTypes,
kDeferRendererTasksAfterInputAllDeferrableTypesPolicyName},
{TaskDeferralPolicy::kAllTypes,
kDeferRendererTasksAfterInputAllTypesPolicyName}};
BASE_FEATURE_ENUM_PARAM(TaskDeferralPolicy,
kTaskDeferralPolicyParam,
&kDeferRendererTasksAfterInput,
kDeferRendererTasksAfterInputPolicyParamName,
TaskDeferralPolicy::kAllTypes,
&kTaskDeferralOptions);
BASE_FEATURE(kDelayAsyncScriptExecution, base::FEATURE_DISABLED_BY_DEFAULT);
const base::FeatureParam<DelayAsyncScriptDelayType>::Option
delay_async_script_execution_delay_types[] = {
{DelayAsyncScriptDelayType::kFinishedParsing, "finished_parsing"},
{DelayAsyncScriptDelayType::kFirstPaintOrFinishedParsing,
"first_paint_or_finished_parsing"},
{DelayAsyncScriptDelayType::kTillFirstLcpCandidate,
"till_first_lcp_candidate"},
};
BASE_FEATURE_ENUM_PARAM(DelayAsyncScriptDelayType,
kDelayAsyncScriptExecutionDelayParam,
&kDelayAsyncScriptExecution,
"delay_async_exec_delay_type",
DelayAsyncScriptDelayType::kFinishedParsing,
&delay_async_script_execution_delay_types);
BASE_FEATURE_PARAM(bool,
kDelayAsyncScriptExecutionCrossSiteOnlyParam,
&kDelayAsyncScriptExecution,
"cross_site_only",
false);
BASE_FEATURE_PARAM(base::TimeDelta,
kDelayAsyncScriptExecutionDelayLimitParam,
&kDelayAsyncScriptExecution,
"delay_async_exec_delay_limit",
base::Seconds(0));
BASE_FEATURE_PARAM(base::TimeDelta,
kDelayAsyncScriptExecutionFeatureLimitParam,
&kDelayAsyncScriptExecution,
"delay_async_exec_feature_limit",
base::Seconds(0));
BASE_FEATURE_PARAM(bool,
kDelayAsyncScriptExecutionDelayByDefaultParam,
&kDelayAsyncScriptExecution,
"delay_async_exec_delay_by_default",
true);
BASE_FEATURE_PARAM(bool,
kDelayAsyncScriptExecutionMainFrameOnlyParam,
&kDelayAsyncScriptExecution,
"delay_async_exec_main_frame_only",
false);
BASE_FEATURE_PARAM(bool,
kDelayAsyncScriptExecutionWhenLcpFoundInHtml,
&kDelayAsyncScriptExecution,
"delay_async_exec_when_lcp_found_in_html",
false);
const base::FeatureParam<AsyncScriptExperimentalSchedulingTarget>::Option
async_script_experimental_scheduling_targets[] = {
{AsyncScriptExperimentalSchedulingTarget::kAds, "ads"},
{AsyncScriptExperimentalSchedulingTarget::kNonAds, "non_ads"},
{AsyncScriptExperimentalSchedulingTarget::kBoth, "both"},
};
BASE_FEATURE_ENUM_PARAM(AsyncScriptExperimentalSchedulingTarget,
kDelayAsyncScriptExecutionTargetParam,
&kDelayAsyncScriptExecution,
"delay_async_exec_target_script_category",
AsyncScriptExperimentalSchedulingTarget::kBoth,
&async_script_experimental_scheduling_targets);
BASE_FEATURE_PARAM(bool,
kDelayAsyncExecExcludeNonParserInsertedParam,
&kDelayAsyncScriptExecution,
"delay_async_exec_exclude_non_parser_inserted",
false);
BASE_FEATURE_PARAM(bool,
kDelayAsyncExecExcludeDocumentWriteParam,
&kDelayAsyncScriptExecution,
"delay_async_exec_exclude_document_write",
false);
BASE_FEATURE_PARAM(bool,
kDelayAsyncScriptExecutionOptOutLowFetchPriorityHintParam,
&kDelayAsyncScriptExecution,
"delay_async_exec_opt_out_low_fetch_priority_hint",
false);
BASE_FEATURE_PARAM(bool,
kDelayAsyncScriptExecutionOptOutAutoFetchPriorityHintParam,
&kDelayAsyncScriptExecution,
"delay_async_exec_opt_out_auto_fetch_priority_hint",
false);
BASE_FEATURE_PARAM(bool,
kDelayAsyncScriptExecutionOptOutHighFetchPriorityHintParam,
&kDelayAsyncScriptExecution,
"delay_async_exec_opt_out_high_fetch_priority_hint",
true);
BASE_FEATURE(kDelayLayerTreeViewDeletionOnLocalSwap,
#if BUILDFLAG(IS_ANDROID)
base::FEATURE_ENABLED_BY_DEFAULT
#else
base::FEATURE_DISABLED_BY_DEFAULT
#endif
);
BASE_FEATURE_PARAM(base::TimeDelta,
kDelayLayerTreeViewDeletionOnLocalSwapTaskDelayParam,
&kDelayLayerTreeViewDeletionOnLocalSwap,
"deletion_task_delay",
base::Milliseconds(1000));
BASE_FEATURE(kDevToolsImprovedNetworkError, base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kDirectCompositorThreadIpc,
#if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_MAC) || \
BUILDFLAG(IS_WIN)
base::FEATURE_ENABLED_BY_DEFAULT
#else
base::FEATURE_DISABLED_BY_DEFAULT
#endif
);
BASE_FEATURE(kDisableArrayBufferSizeLimitsForTesting,
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kDiscardInputEventsToRecentlyMovedFrames,
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kDropInputEventsWhilePaintHolding,
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kEnableDevtoolsDeepLinkViaExtensibilityApi,
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kEstablishGpuChannelAsync, base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kEnableLazyLoadImageForInvisiblePage,
base::FEATURE_DISABLED_BY_DEFAULT);
const base::FeatureParam<EnableLazyLoadImageForInvisiblePageType>::Option
enable_lazy_load_image_for_invisible_page_types[] = {
{EnableLazyLoadImageForInvisiblePageType::kAllInvisiblePage,
"all_invisible_page"},
{EnableLazyLoadImageForInvisiblePageType::kPrerenderPage,
"prerender_page"}};
BASE_FEATURE_ENUM_PARAM(
EnableLazyLoadImageForInvisiblePageType,
kEnableLazyLoadImageForInvisiblePageTypeParam,
&kEnableLazyLoadImageForInvisiblePage,
"enabled_page_type",
EnableLazyLoadImageForInvisiblePageType::kAllInvisiblePage,
&enable_lazy_load_image_for_invisible_page_types);
BASE_FEATURE(kEnforceNoopenerOnBlobURLNavigation,
base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kEventTimingIgnorePresentationTimeFromUnexpectedFrameSource,
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kExpandCompositedCullRect, base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE_PARAM(int,
kCullRectPixelDistanceToExpand,
&kExpandCompositedCullRect,
"pixels",
#if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_FUCHSIA)
2000
#else
4000
#endif
);
BASE_FEATURE_PARAM(double,
kCullRectExpansionDPRCoef,
&kExpandCompositedCullRect,
"dpr_coef",
1);
BASE_FEATURE_PARAM(bool,
kSmallScrollersUseMinCullRect,
&kExpandCompositedCullRect,
"small_scroller_opt",
true);
BASE_FEATURE_PARAM(int,
kCullRectChangedEnoughDistance,
&kExpandCompositedCullRect,
"changed_enough",
512);
BASE_FEATURE(kFadeInScrollbarWhenMouseWheelMayBegin,
base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kFencedFrames, base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kFencedFramesCrossOriginEventReporting,
base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kFencedFramesAutomaticBeaconCredentials,
base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kFencedFramesCrossOriginAutomaticBeaconData,
base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kFencedFramesLocalUnpartitionedDataAccess,
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kFencedFramesReportEventHeaderChanges,
base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kFencedFramesSrcPermissionsPolicy,
base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kExemptUrlFromNetworkRevocationForTesting,
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kFetchDestinationJsonCssModules,
"kFetchDestinationJsonCssModules",
base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kFileHandlingIcons, base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kFileSystemUrlNavigation, base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kFileSystemUrlNavigationForChromeAppsOnly,
base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kFilteringScrollPrediction,
#if BUILDFLAG(IS_ANDROID)
base::FEATURE_ENABLED_BY_DEFAULT
#else
base::FEATURE_DISABLED_BY_DEFAULT
#endif
);
BASE_FEATURE_PARAM(std::string,
kFilteringScrollPredictionFilterParam,
&kFilteringScrollPrediction,
"filter",
"one_euro_filter");
BASE_FEATURE(kFledge, base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kFledgeBiddingAndAuctionServer, base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE_PARAM(std::string,
kFledgeBiddingAndAuctionKeyURL,
&kFledgeBiddingAndAuctionServer,
"FledgeBiddingAndAuctionKeyURL",
"");
BASE_FEATURE_PARAM(std::string,
kFledgeBiddingAndAuctionKeyConfig,
&kFledgeBiddingAndAuctionServer,
"FledgeBiddingAndAuctionKeyConfig",
"");
BASE_FEATURE(kFledgeOriginScopedKeys, base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE_PARAM(std::string,
kFledgeOriginScopedKeyConfig,
&kFledgeOriginScopedKeys,
"FledgeOriginScopedKeyConfig",
"");
BASE_FEATURE(kFledgeConsiderKAnonymity, base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kFledgeEnforceKAnonymity, base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kFledgeLimitSelectableBuyerAndSellerReportingIds,
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE_PARAM(int,
kFledgeSelectableBuyerAndSellerReportingIdsSoftLimit,
&kFledgeLimitSelectableBuyerAndSellerReportingIds,
"SelectableBuyerAndSellerReportingIdsSoftLimit",
-1);
BASE_FEATURE_PARAM(int,
kFledgeSelectableBuyerAndSellerReportingIdsHardLimit,
&kFledgeLimitSelectableBuyerAndSellerReportingIds,
"SelectableBuyerAndSellerReportingIdsHardLimit",
-1);
BASE_FEATURE(kFledgeMaxGroupLifetimeFeature, base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE_PARAM(base::TimeDelta,
kFledgeMaxGroupLifetime,
&kFledgeMaxGroupLifetimeFeature,
"fledge_max_group_lifetime",
base::Days(30));
BASE_FEATURE_PARAM(base::TimeDelta,
kFledgeMaxGroupLifetimeForMetadata,
&kFledgeMaxGroupLifetimeFeature,
"fledge_max_group_lifetime_for_metadata",
base::Days(30));
BASE_FEATURE(kFledgeEnableSampleDebugReportOnCookieSetting,
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kFledgeSampleDebugReports, base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE_PARAM(base::TimeDelta,
kFledgeDebugReportLockout,
&kFledgeSampleDebugReports,
"fledge_debug_report_lockout",
base::Days(365 * 3));
BASE_FEATURE_PARAM(base::TimeDelta,
kFledgeDebugReportRestrictedCooldown,
&kFledgeSampleDebugReports,
"fledge_debug_report_restricted_cooldown",
base::Days(365));
BASE_FEATURE_PARAM(base::TimeDelta,
kFledgeDebugReportShortCooldown,
&kFledgeSampleDebugReports,
"fledge_debug_report_short_cooldown",
base::Days(14));
BASE_FEATURE_PARAM(int,
kFledgeDebugReportSamplingRandomMax,
&kFledgeSampleDebugReports,
"fledge_debug_report_sampling_random_max",
1000);
BASE_FEATURE_PARAM(
int,
kFledgeDebugReportSamplingRestrictedCooldownRandomMax,
&kFledgeSampleDebugReports,
"fledge_debug_report_sampling_restricted_cooldown_random_max",
10);
BASE_FEATURE_PARAM(base::TimeDelta,
kFledgeEnableFilteringDebugReportStartingFrom,
&kFledgeSampleDebugReports,
"fledge_enable_filtering_debug_report_starting_from",
base::Milliseconds(0));
BASE_FEATURE_PARAM(int,
kFledgeCustomMaxAuctionAdComponentsValue,
&kFledgeCustomMaxAuctionAdComponents,
"FledgeAdComponentLimit",
40);
BASE_FEATURE_PARAM(int,
kFledgeRealTimeReportingNumBuckets,
&kFledgeRealTimeReporting,
"FledgeRealTimeReportingNumBuckets",
1024);
BASE_FEATURE_PARAM(double,
kFledgeRealTimeReportingEpsilon,
&kFledgeRealTimeReporting,
"FledgeRealTimeReportingEpsilon",
1);
BASE_FEATURE_PARAM(double,
kFledgeRealTimeReportingPlatformContributionPriority,
&kFledgeRealTimeReporting,
"FledgeRealTimeReportingPlatformContributionPriority",
1);
BASE_FEATURE_PARAM(base::TimeDelta,
kFledgeRealTimeReportingWindow,
&kFledgeRealTimeReporting,
"FledgeRealTimeReportingWindow",
base::Seconds(20));
BASE_FEATURE_PARAM(int,
kFledgeRealTimeReportingMaxReports,
&kFledgeRealTimeReporting,
"FledgeRealTimeReportingMaxReports",
10);
BASE_FEATURE(kFledgeEnforcePermissionPolicyContributeOnEvent,
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kFledgeDisableLocalAdsAuctions, base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kFledgeLimitSelectableBuyerAndSellerReportingIdsFetchedFromKAnon,
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE_PARAM(
int,
kFledgeSelectableBuyerAndSellerReportingIdsFetchedFromKAnonLimit,
&kFledgeLimitSelectableBuyerAndSellerReportingIdsFetchedFromKAnon,
"SelectableBuyerAndSellerReportingIdsFetchedFromKAnonLimit",
-1);
BASE_FEATURE(kFledgeTruncateSelectableBuyerAndSellerReportingIdsToKAnonLimit,
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kForceHighPerformanceGPUForWebGL,
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kForceOffTextAutosizing, base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kForceWebContentsDarkMode,
"WebContentsForceDark",
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE_PARAM(int,
kForceDarkForegroundLightnessThresholdParam,
&kForceWebContentsDarkMode,
"foreground_lightness_threshold",
-1);
BASE_FEATURE_PARAM(int,
kForceDarkBackgroundLightnessThresholdParam,
&kForceWebContentsDarkMode,
"background_lightness_threshold",
-1);
BASE_FEATURE(kFrameMetadataObserver, base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kFrequencyCappingForLargeStickyAdDetection,
base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kFrequencyCappingForOverlayPopupDetection,
base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kGMSCoreEmoji, base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kGetDisplayMediaIgnoreAudioPermissionFailures,
base::FEATURE_ENABLED_BY_DEFAULT);
#if BUILDFLAG(IS_OHOS)
BASE_FEATURE(kEnableOcrTextRecognition,
"EnableOcrTextRecognition",
base::FEATURE_DISABLED_BY_DEFAULT);
bool IsEnableOcrTextRecognition() {
return base::FeatureList::IsEnabled(kEnableOcrTextRecognition);
}
#endif
BASE_FEATURE_PARAM(std::string,
kHTMLParserYieldEventNameForPause,
&kHTMLParserYieldByUserTiming,
"pause_event_name",
"");
BASE_FEATURE_PARAM(std::string,
kHTMLParserYieldEventNameForResume,
&kHTMLParserYieldByUserTiming,
"resume_event_name",
"");
BASE_FEATURE_PARAM(size_t,
kHTMLParserYieldTimeoutInMs,
&kHTMLParserYieldByUserTiming,
"timeout_ms",
20);
BASE_FEATURE(kIgnoreInputWhileHidden,
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kImageLoadingPrioritizationFix, base::FEATURE_DISABLED_BY_DEFAULT);
#if BUILDFLAG(ARKWEB_OHOS_MEM_USAGE_REPORT)
BASE_FEATURE(kMemUsageReport,
"kMemUsageReport",
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE_PARAM(int,
kMemUsageReportCount,
&kMemUsageReport,
"mur_count",
0);
#endif
#if !BUILDFLAG(IS_ANDROID)
BASE_FEATURE(kInitialWebUIWithoutExtensions, base::FEATURE_DISABLED_BY_DEFAULT);
#endif
BASE_FEATURE(kIndexedDBCompressValuesWithSnappy,
base::FEATURE_ENABLED_BY_DEFAULT);
constexpr base::FeatureParam<int>
kIndexedDBCompressValuesWithSnappyCompressionThreshold{
&features::kIndexedDBCompressValuesWithSnappy,
"compression-threshold",
-1};
BASE_FEATURE(kInputPredictorTypeChoice, base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kInputScenarioPriorityBoost, base::FEATURE_DISABLED_BY_DEFAULT);
constexpr base::FeatureParam<bool> kInputScenarioPriorityBoostIncludesLoading{
&features::kInputScenarioPriorityBoost,
"input_scenario_priority_boost_includes_loading", false};
BASE_FEATURE(kIntensiveWakeUpThrottling, base::FEATURE_ENABLED_BY_DEFAULT);
const char kIntensiveWakeUpThrottling_GracePeriodSeconds_Name[] =
"grace_period_seconds";
BASE_FEATURE(kInteractiveDetectorIgnoreFcp, base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kIsolateSandboxedIframes, base::FEATURE_ENABLED_BY_DEFAULT);
const base::FeatureParam<IsolateSandboxedIframesGrouping>::Option
isolated_sandboxed_iframes_grouping_types[] = {
{IsolateSandboxedIframesGrouping::kPerSite, "per-site"},
{IsolateSandboxedIframesGrouping::kPerOrigin, "per-origin"},
{IsolateSandboxedIframesGrouping::kPerDocument, "per-document"}};
BASE_FEATURE_ENUM_PARAM(IsolateSandboxedIframesGrouping,
kIsolateSandboxedIframesGroupingParam,
&kIsolateSandboxedIframes,
"grouping",
IsolateSandboxedIframesGrouping::kPerOrigin,
&isolated_sandboxed_iframes_grouping_types);
BASE_FEATURE(kKeepAliveInBrowserMigration, base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kLimitLayerMergeDistance, base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE_PARAM(size_t,
kLayerMergeDistanceLimit,
&kLimitLayerMergeDistance,
"limit",
0x10000000);
BASE_FEATURE(kLCPCriticalPathPredictor, base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE_PARAM(bool,
kLCPCriticalPathAdjustImageLoadPriority,
&kLCPCriticalPathPredictor,
"lcpp_adjust_image_load_priority",
false);
BASE_FEATURE_PARAM(size_t,
kLCPCriticalPathPredictorMaxElementLocatorLength,
&kLCPCriticalPathPredictor,
"lcpp_max_element_locator_length",
1024);
BASE_FEATURE_PARAM(bool,
kLCPCriticalPathAdjustImageLoadPriorityOverrideFirstNBoost,
&kLCPCriticalPathPredictor,
"lcpp_adjust_image_load_priority_override_first_n_boost",
false);
BASE_FEATURE_PARAM(double,
kLcppAdjustImageLoadPriorityConfidenceThreshold,
&kLCPCriticalPathPredictor,
"lcpp_adjust_image_load_priority_confidence_threshold",
0);
const base::FeatureParam<LcppRecordedLcpElementTypes>::Option
lcpp_recorded_element_types[] = {
{LcppRecordedLcpElementTypes::kAll, "all"},
{LcppRecordedLcpElementTypes::kImageOnly, "image_only"},
};
BASE_FEATURE_ENUM_PARAM(LcppRecordedLcpElementTypes,
kLCPCriticalPathPredictorRecordedLcpElementTypes,
&kLCPCriticalPathPredictor,
"lcpp_recorded_lcp_element_types",
LcppRecordedLcpElementTypes::kImageOnly,
&lcpp_recorded_element_types);
const base::FeatureParam<LcppResourceLoadPriority>::Option
lcpp_resource_load_priorities[] = {
{LcppResourceLoadPriority::kMedium, "medium"},
{LcppResourceLoadPriority::kHigh, "high"},
{LcppResourceLoadPriority::kVeryHigh, "very_high"},
};
BASE_FEATURE_ENUM_PARAM(LcppResourceLoadPriority,
kLCPCriticalPathPredictorImageLoadPriority,
&kLCPCriticalPathPredictor,
"lcpp_image_load_priority",
LcppResourceLoadPriority::kVeryHigh,
&lcpp_resource_load_priorities);
BASE_FEATURE_PARAM(
bool,
kLCPCriticalPathPredictorImageLoadPriorityEnabledForHTMLImageElement,
&kLCPCriticalPathPredictor,
"lcpp_enable_image_load_priority_for_htmlimageelement",
false);
BASE_FEATURE_PARAM(int,
kLCPCriticalPathPredictorMaxHostsToTrack,
&kLCPCriticalPathPredictor,
"lcpp_max_hosts_to_track",
100);
BASE_FEATURE_PARAM(int,
kLCPCriticalPathPredictorSlidingWindowSize,
&kLCPCriticalPathPredictor,
"lcpp_sliding_window_size",
1000);
BASE_FEATURE_PARAM(int,
kLCPCriticalPathPredictorMaxHistogramBuckets,
&kLCPCriticalPathPredictor,
"lcpp_max_histogram_buckets",
10);
BASE_FEATURE(kLCPScriptObserver, base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE_ENUM_PARAM(LcppResourceLoadPriority,
kLCPScriptObserverScriptLoadPriority,
&kLCPScriptObserver,
"lcpscriptobserver_script_load_priority",
LcppResourceLoadPriority::kVeryHigh,
&lcpp_resource_load_priorities);
BASE_FEATURE_ENUM_PARAM(LcppResourceLoadPriority,
kLCPScriptObserverImageLoadPriority,
&kLCPScriptObserver,
"lcpscriptobserver_image_load_priority",
LcppResourceLoadPriority::kVeryHigh,
&lcpp_resource_load_priorities);
BASE_FEATURE_PARAM(size_t,
kLCPScriptObserverMaxUrlLength,
&kLCPScriptObserver,
"lcpscriptobserver_script_max_url_length",
1024);
BASE_FEATURE_PARAM(size_t,
kLCPScriptObserverMaxUrlCountPerOrigin,
&kLCPScriptObserver,
"lcpscriptobserver_script_max_url_count_per_origin",
5);
BASE_FEATURE_PARAM(bool,
kLCPScriptObserverAdjustImageLoadPriority,
&kLCPScriptObserver,
"lcpscriptobserver_adjust_image_load_priority",
false);
BASE_FEATURE_PARAM(int,
kLCPScriptObserverSlidingWindowSize,
&kLCPScriptObserver,
"lcpscriptobserver_sliding_window_size",
1000);
BASE_FEATURE_PARAM(int,
kLCPScriptObserverMaxHistogramBuckets,
&kLCPScriptObserver,
"lcpscriptobserver_max_histogram_buckets",
10);
BASE_FEATURE(kLCPTimingPredictorPrerender2, base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE_PARAM(int,
kLCPTimingPredictorSlidingWindowSize,
&kLCPTimingPredictorPrerender2,
"lcp_timing_predictor_sliding_window_size",
1000);
BASE_FEATURE_PARAM(int,
kLCPTimingPredictorMaxHistogramBuckets,
&kLCPTimingPredictorPrerender2,
"lcp_timing_predictor_max_histogram_buckets",
10);
BASE_FEATURE(kLCPPAutoPreconnectLcpOrigin, base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE_PARAM(double,
kLCPPAutoPreconnectFrequencyThreshold,
&kLCPPAutoPreconnectLcpOrigin,
"lcpp_preconnect_frequency_threshold",
0.5);
BASE_FEATURE_PARAM(int,
kkLCPPAutoPreconnectMaxPreconnectOriginsCount,
&kLCPPAutoPreconnectLcpOrigin,
"lcpp_preconnect_max_origins",
2);
BASE_FEATURE_PARAM(int,
kLCPPAutoPreconnectSlidingWindowSize,
&kLCPPAutoPreconnectLcpOrigin,
"lcpp_preconnect_sliding_window_size",
1000);
BASE_FEATURE_PARAM(int,
kLCPPAutoPreconnectMaxHistogramBuckets,
&kLCPPAutoPreconnectLcpOrigin,
"lcpp_preconnect_max_histogram_buckets",
10);
BASE_FEATURE_PARAM(bool,
kLCPPAutoPreconnectRecordAllOrigins,
&kLCPPAutoPreconnectLcpOrigin,
"lcpp_preconnect_record_all_origins",
false);
BASE_FEATURE(kLCPPDeferUnusedPreload, base::FEATURE_DISABLED_BY_DEFAULT);
const base::FeatureParam<LcppDeferUnusedPreloadExcludedResourceType>::Option
lcpp_defer_unused_preload_excluded_resource_type[] = {
{LcppDeferUnusedPreloadExcludedResourceType::kNone, "none"},
{LcppDeferUnusedPreloadExcludedResourceType::kStyleSheet, "stylesheet"},
{LcppDeferUnusedPreloadExcludedResourceType::kScript, "script"},
{LcppDeferUnusedPreloadExcludedResourceType::kMock, "mock"},
};
BASE_FEATURE_ENUM_PARAM(LcppDeferUnusedPreloadExcludedResourceType,
kLcppDeferUnusedPreloadExcludedResourceType,
&kLCPPDeferUnusedPreload,
"excluded_resource_type",
LcppDeferUnusedPreloadExcludedResourceType::kNone,
&lcpp_defer_unused_preload_excluded_resource_type);
BASE_FEATURE_PARAM(double,
kLCPPDeferUnusedPreloadFrequencyThreshold,
&kLCPPDeferUnusedPreload,
"lcpp_unused_preload_frequency_threshold",
0.5);
const base::FeatureParam<LcppDeferUnusedPreloadPreloadedReason>::Option
lcpp_defer_unused_preload_preloaded_reason[] = {
{LcppDeferUnusedPreloadPreloadedReason::kAll, "all"},
{LcppDeferUnusedPreloadPreloadedReason::kLinkPreloadOnly,
"link_preload"},
{LcppDeferUnusedPreloadPreloadedReason::kBrowserSpeculativePreloadOnly,
"speculative_preload"},
};
BASE_FEATURE_ENUM_PARAM(LcppDeferUnusedPreloadPreloadedReason,
kLcppDeferUnusedPreloadPreloadedReason,
&kLCPPDeferUnusedPreload,
"preloaded_reason",
LcppDeferUnusedPreloadPreloadedReason::kAll,
&lcpp_defer_unused_preload_preloaded_reason);
const base::FeatureParam<LcppDeferUnusedPreloadTiming>::Option
lcpp_defer_unused_preload_timing[] = {
{LcppDeferUnusedPreloadTiming::kPostTask, "post_task"},
{LcppDeferUnusedPreloadTiming::kLcpTimingPredictor,
"lcp_timing_predictor"},
{LcppDeferUnusedPreloadTiming::kLcpTimingPredictorWithPostTask,
"lcp_timing_predictor_with_post_task"},
};
BASE_FEATURE_ENUM_PARAM(LcppDeferUnusedPreloadTiming,
kLcppDeferUnusedPreloadTiming,
&kLCPPDeferUnusedPreload,
"load_timing",
LcppDeferUnusedPreloadTiming::kPostTask,
&lcpp_defer_unused_preload_timing);
BASE_FEATURE_PARAM(int,
kLCPPDeferUnusedPreloadSlidingWindowSize,
&kLCPPDeferUnusedPreload,
"lcpp_unused_preload_sliding_window_size",
1000);
BASE_FEATURE_PARAM(int,
kLCPPDeferUnusedPreloadMaxHistogramBuckets,
&kLCPPDeferUnusedPreload,
"lcpp_unused_preload_max_histogram_buckets",
10);
BASE_FEATURE(kLCPPFontURLPredictor, base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE_PARAM(size_t,
kLCPPFontURLPredictorMaxUrlLength,
&kLCPPFontURLPredictor,
"lcpp_max_font_url_length",
1024);
BASE_FEATURE_PARAM(size_t,
kLCPPFontURLPredictorMaxUrlCountPerOrigin,
&kLCPPFontURLPredictor,
"lcpp_max_font_url_count_per_origin",
10);
BASE_FEATURE_PARAM(double,
kLCPPFontURLPredictorFrequencyThreshold,
&kLCPPFontURLPredictor,
"lcpp_font_url_frequency_threshold",
0.5);
BASE_FEATURE_PARAM(int,
kLCPPFontURLPredictorMaxPreloadCount,
&kLCPPFontURLPredictor,
"lcpp_max_font_url_to_preload",
5);
BASE_FEATURE_PARAM(bool,
kLCPPFontURLPredictorEnablePrefetch,
&kLCPPFontURLPredictor,
"lcpp_enable_font_prefetch",
false);
BASE_FEATURE_PARAM(double,
kLCPPFontURLPredictorThresholdInMbps,
&kLCPPFontURLPredictor,
"lcpp_font_prefetch_threshold",
-1);
const base::FeatureParam<std::string> kLCPPFontURLPredictorExcludedHosts{
&kLCPPFontURLPredictor, "lcpp_font_prefetch_excluded_hosts", ""};
BASE_FEATURE_PARAM(bool,
kLCPPCrossSiteFontPredictionAllowed,
&kLCPPFontURLPredictor,
"lcpp_cross_site_font_prediction_allowed",
false);
BASE_FEATURE_PARAM(int,
kLCPPFontURLPredictorSlidingWindowSize,
&kLCPPFontURLPredictor,
"lcpp_font_sliding_window_size",
1000);
BASE_FEATURE_PARAM(int,
kLCPPFontURLPredictorMaxHistogramBuckets,
&kLCPPFontURLPredictor,
"lcpp_font_max_histogram_buckets",
10);
BASE_FEATURE(kLCPPInitiatorOrigin, base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE_PARAM(int,
kLcppInitiatorOriginHistogramSlidingWindowSize,
&kLCPPInitiatorOrigin,
"lcpp_initiator_origin_histogram_sliding_window_size",
10000);
BASE_FEATURE_PARAM(int,
kLcppInitiatorOriginMaxHistogramBuckets,
&kLCPPInitiatorOrigin,
"lcpp_initiator_origin_max_histogram_buckets",
100);
BASE_FEATURE(kLCPPLazyLoadImagePreload, base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE_PARAM(bool,
kLCPPLazyLoadImagePreloadDryRun,
&kLCPPLazyLoadImagePreload,
"lcpp_lazy_load_image_preload_dry_run",
false);
const base::FeatureParam<
LcppPreloadLazyLoadImageType>::Option lcpp_preload_lazy_load_image[] = {
{LcppPreloadLazyLoadImageType::kNone, "none"},
{LcppPreloadLazyLoadImageType::kNativeLazyLoading, "native_lazy_loading"},
{LcppPreloadLazyLoadImageType::kCustomLazyLoading, "custom_lazy_loading"},
{LcppPreloadLazyLoadImageType::kAll, "all"},
};
BASE_FEATURE_ENUM_PARAM(LcppPreloadLazyLoadImageType,
kLCPCriticalPathPredictorPreloadLazyLoadImageType,
&kLCPPLazyLoadImagePreload,
"lcpp_preload_lazy_load_image_type",
LcppPreloadLazyLoadImageType::kNativeLazyLoading,
&lcpp_preload_lazy_load_image);
BASE_FEATURE(kPreloadSystemFonts, base::FEATURE_DISABLED_BY_DEFAULT);
const base::FeatureParam<std::string> kPreloadSystemFontsTargets{
&kPreloadSystemFonts, "preload_system_fonts_targets", "[]"};
BASE_FEATURE_PARAM(int,
kPreloadSystemFontsRequiredMemoryGB,
&kPreloadSystemFonts,
"preload_system_fonts_required_memory_gb",
4);
BASE_FEATURE(kLCPPMultipleKey, base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE_PARAM(size_t,
kLCPPMultipleKeyMaxPathLength,
&kLCPPMultipleKey,
"lcpp_multiple_key_max_path_length",
15);
const base::FeatureParam<LcppMultipleKeyTypes>::Option
lcpp_multiple_key_types[] = {
{LcppMultipleKeyTypes::kDefault, "default"},
{LcppMultipleKeyTypes::kLcppKeyStat, "lcpp_key_stat"},
};
BASE_FEATURE_ENUM_PARAM(LcppMultipleKeyTypes,
kLcppMultipleKeyType,
&kLCPPMultipleKey,
"lcpp_multiple_key_type",
LcppMultipleKeyTypes::kLcppKeyStat,
&lcpp_multiple_key_types);
BASE_FEATURE_PARAM(int,
kLcppMultipleKeyHistogramSlidingWindowSize,
&kLCPPMultipleKey,
"lcpp_multiple_key_histogram_sliding_window_size",
1000);
BASE_FEATURE_PARAM(int,
kLcppMultipleKeyMaxHistogramBuckets,
&kLCPPMultipleKey,
"lcpp_multiple_key_max_histogram_buckets",
10);
BASE_FEATURE(kLCPPPrefetchSubresource, base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kLCPPPrefetchSubresourceAsync, base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kHttpDiskCachePrewarming, base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE_PARAM(size_t,
kHttpDiskCachePrewarmingMaxUrlLength,
&kHttpDiskCachePrewarming,
"http_disk_cache_prewarming_max_url_length",
1024);
BASE_FEATURE_PARAM(int,
kHttpDiskCachePrewarmingHistorySize,
&kHttpDiskCachePrewarming,
"http_disk_cache_prewarming_history_size",
1024);
BASE_FEATURE_PARAM(base::TimeDelta,
kHttpDiskCachePrewarmingReprewarmPeriod,
&kHttpDiskCachePrewarming,
"http_disk_cache_prewarming_reprewarm_period",
base::Minutes(10));
BASE_FEATURE_PARAM(bool,
kHttpDiskCachePrewarmingTriggerOnNavigation,
&kHttpDiskCachePrewarming,
"http_disk_cache_prewarming_trigger_on_navigation",
true);
BASE_FEATURE_PARAM(
bool,
kHttpDiskCachePrewarmingTriggerOnPointerDownOrHover,
&kHttpDiskCachePrewarming,
"http_disk_cache_prewarming_trigger_on_pointer_down_or_hover",
true);
BASE_FEATURE_PARAM(
bool,
kHttpDiskCachePrewarmingUseReadAndDiscardBodyOption,
&kHttpDiskCachePrewarming,
"http_disk_cache_prewarming_use_read_and_discard_body_option",
false);
BASE_FEATURE_PARAM(bool,
kHttpDiskCachePrewarmingSkipDuringBrowserStartup,
&kHttpDiskCachePrewarming,
"http_disk_cache_prewarming_skip_during_browser_startup",
true);
BASE_FEATURE_PARAM(int,
kHttpDiskCachePrewarmingSlidingWindowSize,
&kHttpDiskCachePrewarming,
"http_disk_cache_prewarming_sliding_window_size",
1000);
BASE_FEATURE_PARAM(int,
kHttpDiskCachePrewarmingMaxHistogramBuckets,
&kHttpDiskCachePrewarming,
"http_disk_cache_prewarming_max_histogram_buckets",
10);
BASE_FEATURE(kLegacyParsingOfXContentTypeOptions,
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kLightweightNoStatePrefetch,
#if BUILDFLAG(IS_ANDROID)
base::FEATURE_ENABLED_BY_DEFAULT
#else
base::FEATURE_DISABLED_BY_DEFAULT
#endif
);
BASE_FEATURE(kLinkPreview, base::FEATURE_DISABLED_BY_DEFAULT);
constexpr base::FeatureParam<LinkPreviewTriggerType>::Option
link_preview_trigger_type_options[] = {
{LinkPreviewTriggerType::kAltClick, "alt_click"},
{LinkPreviewTriggerType::kAltHover, "alt_hover"},
{LinkPreviewTriggerType::kLongPress, "long_press"}};
BASE_FEATURE_ENUM_PARAM(LinkPreviewTriggerType,
kLinkPreviewTriggerType,
&kLinkPreview,
"trigger_type",
LinkPreviewTriggerType::kAltHover,
&link_preview_trigger_type_options);
BASE_FEATURE(kLoadingTasksUnfreezable, base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kLogUnexpectedIPCPostedToBackForwardCachedDocuments,
base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kLowLatencyCanvas2dImageChromium,
#if BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_ANDROID)
base::FEATURE_ENABLED_BY_DEFAULT
#else
base::FEATURE_DISABLED_BY_DEFAULT
#endif
);
BASE_FEATURE(kLowLatencyWebGLImageChromium,
#if BUILDFLAG(IS_ANDROID)
base::FEATURE_ENABLED_BY_DEFAULT
#else
base::FEATURE_DISABLED_BY_DEFAULT
#endif
);
BASE_FEATURE(kLowPriorityAsyncScriptExecution,
#if BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_ANDROID)
base::FEATURE_DISABLED_BY_DEFAULT
#else
base::FEATURE_ENABLED_BY_DEFAULT
#endif
);
BASE_FEATURE_PARAM(double,
kMinimumPhysicalMemoryForLowPriorityAsyncScriptExecution,
&kLowPriorityAsyncScriptExecution,
"low_pri_async_exec_minimum_physical_memory_gb",
3.0);
BASE_FEATURE_PARAM(base::TimeDelta,
kTimeoutForLowPriorityAsyncScriptExecution,
&kLowPriorityAsyncScriptExecution,
"low_pri_async_exec_timeout",
base::Seconds(1));
BASE_FEATURE_PARAM(base::TimeDelta,
kLowPriorityAsyncScriptExecutionFeatureLimitParam,
&kLowPriorityAsyncScriptExecution,
"low_pri_async_exec_feature_limit",
base::Seconds(3));
BASE_FEATURE_PARAM(bool,
kLowPriorityAsyncScriptExecutionCrossSiteOnlyParam,
&kLowPriorityAsyncScriptExecution,
"low_pri_async_exec_cross_site_only",
true);
BASE_FEATURE_PARAM(bool,
kLowPriorityAsyncScriptExecutionMainFrameOnlyParam,
&kLowPriorityAsyncScriptExecution,
"low_pri_async_exec_main_frame_only",
true);
BASE_FEATURE_PARAM(bool,
kLowPriorityAsyncScriptExecutionExcludeLcpInfluencersParam,
&kLowPriorityAsyncScriptExecution,
"low_pri_async_exec_exclude_lcp_influencers",
false);
BASE_FEATURE_PARAM(bool,
kLowPriorityAsyncScriptExecutionDisableWhenLcpNotInHtmlParam,
&kLowPriorityAsyncScriptExecution,
"low_pri_async_exec_disable_when_lcp_not_in_html",
false);
BASE_FEATURE_ENUM_PARAM(AsyncScriptExperimentalSchedulingTarget,
kLowPriorityAsyncScriptExecutionTargetParam,
&kLowPriorityAsyncScriptExecution,
"low_pri_async_exec_target",
AsyncScriptExperimentalSchedulingTarget::kNonAds,
&async_script_experimental_scheduling_targets);
BASE_FEATURE_PARAM(
bool,
kLowPriorityAsyncScriptExecutionExcludeNonParserInsertedParam,
&kLowPriorityAsyncScriptExecution,
"low_pri_async_exec_exclude_non_parser_inserted",
false);
BASE_FEATURE_PARAM(bool,
kLowPriorityAsyncScriptExecutionExcludeDocumentWriteParam,
&kLowPriorityAsyncScriptExecution,
"low_pri_async_exec_exclude_document_write",
true);
BASE_FEATURE_PARAM(
bool,
kLowPriorityAsyncScriptExecutionOptOutLowFetchPriorityHintParam,
&kLowPriorityAsyncScriptExecution,
"low_pri_async_exec_opt_out_low_fetch_priority_hint",
false);
BASE_FEATURE_PARAM(
bool,
kLowPriorityAsyncScriptExecutionOptOutAutoFetchPriorityHintParam,
&kLowPriorityAsyncScriptExecution,
"low_pri_async_exec_opt_out_auto_fetch_priority_hint",
false);
BASE_FEATURE_PARAM(
bool,
kLowPriorityAsyncScriptExecutionOptOutHighFetchPriorityHintParam,
&kLowPriorityAsyncScriptExecution,
"low_pri_async_exec_opt_out_high_fetch_priority_hint",
true);
BASE_FEATURE(kMixedContentAutoupgrade,
"AutoupgradeMixedContent",
base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kMemoryCacheIntelligentPruning, base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE_PARAM(double,
kMemoryCacheIntelligentPruningFreqWeight,
&kMemoryCacheIntelligentPruning,
"freq_weight",
50.0);
BASE_FEATURE_PARAM(double,
kMemoryCacheIntelligentPruningCostWeight,
&kMemoryCacheIntelligentPruning,
"cost_weight",
0.0001);
BASE_FEATURE_PARAM(double,
kMemoryCacheIntelligentPruningTypeWeight,
&kMemoryCacheIntelligentPruning,
"type_weight",
100.0);
BASE_FEATURE(kMemoryCacheStrongReferenceExtensions,
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE_PARAM(bool,
kMemoryCacheStrongRefXSLStyleSheet,
&kMemoryCacheStrongReferenceExtensions,
"xsl_stylesheet",
false);
BASE_FEATURE_PARAM(bool,
kMemoryCacheStrongRefRaw,
&kMemoryCacheStrongReferenceExtensions,
"raw",
false);
BASE_FEATURE_PARAM(bool,
kMemoryCacheStrongRefImage,
&kMemoryCacheStrongReferenceExtensions,
"image",
false);
BASE_FEATURE_PARAM(bool,
kMemoryCacheStrongRefSVGDocument,
&kMemoryCacheStrongReferenceExtensions,
"svg_document",
false);
BASE_FEATURE_PARAM(bool,
kMemoryCacheStrongRefManifest,
&kMemoryCacheStrongReferenceExtensions,
"manifest",
false);
BASE_FEATURE_PARAM(bool,
kMemoryCacheStrongRefAudio,
&kMemoryCacheStrongReferenceExtensions,
"audio",
false);
BASE_FEATURE_PARAM(bool,
kMemoryCacheStrongRefVideo,
&kMemoryCacheStrongReferenceExtensions,
"video",
false);
BASE_FEATURE_PARAM(bool,
kMemoryCacheStrongRefTextTrack,
&kMemoryCacheStrongReferenceExtensions,
"text_track",
false);
BASE_FEATURE_PARAM(bool,
kMemoryCacheStrongRefLinkPrefetch,
&kMemoryCacheStrongReferenceExtensions,
"link_prefetch",
false);
BASE_FEATURE_PARAM(bool,
kMemoryCacheStrongRefSpeculationRules,
&kMemoryCacheStrongReferenceExtensions,
"speculation_rules",
false);
BASE_FEATURE_PARAM(bool,
kMemoryCacheStrongRefDictionary,
&kMemoryCacheStrongReferenceExtensions,
"dictionary",
false);
BASE_FEATURE(kMemoryCacheStrongReference,
#if BUILDFLAG(IS_ANDROID)
base::FEATURE_DISABLED_BY_DEFAULT
#else
base::FEATURE_ENABLED_BY_DEFAULT
#endif
);
BASE_FEATURE_PARAM(int,
kMemoryCacheStrongReferenceTotalSizeThresholdParam,
&kMemoryCacheStrongReference,
"memory_cache_strong_ref_total_size_threshold",
15 * 1024 * 1024);
BASE_FEATURE_PARAM(int,
kMemoryCacheStrongReferenceResourceSizeThresholdParam,
&kMemoryCacheStrongReference,
"memory_cache_strong_ref_resource_size_threshold",
3 * 1024 * 1024);
BASE_FEATURE(kMemoryPurgeOnFreeze,
#if BUILDFLAG(IS_ANDROID)
base::FEATURE_ENABLED_BY_DEFAULT
#else
base::FEATURE_DISABLED_BY_DEFAULT
#endif
);
BASE_FEATURE(kMemoryPurgeOnFreezeLimit, base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kMemorySaverModeRenderTuning, base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE_PARAM(int,
kAvailableMemoryThresholdParamMb,
&kMemorySaverModeRenderTuning,
"available_memory_threshold_mb",
740);
BASE_FEATURE(kMHTML_Improvements, base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kNavigationPredictor, base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE_PARAM(int,
kPredictorTrafficClientEnabledPercent,
&kNavigationPredictor,
"traffic_client_enabled_percent",
#if BUILDFLAG(IS_ANDROID)
100
#else
5
#endif
);
BASE_FEATURE(kNavigationPredictorNewViewportFeatures,
#if BUILDFLAG(IS_ANDROID)
base::FEATURE_ENABLED_BY_DEFAULT
#else
base::FEATURE_DISABLED_BY_DEFAULT
#endif
);
BASE_FEATURE(kNoForcedFrameUpdatesForWebTests,
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kNoReferrerForPreloadFromSubresource,
base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kNoThrottlingVisibleAgent, base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kNoThrowForCSPBlockedWorker, base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kOpenAllUrlsOrFilesOnDrop, base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kOptimizeHTMLElementUrls, base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE_PARAM(size_t,
kDocumentURLCacheSize,
&kOptimizeHTMLElementUrls,
"cache_size",
500);
BASE_FEATURE(kOriginAgentClusterDefaultEnabled,
"OriginAgentClusterDefaultEnable",
#if BUILDFLAG(ARKWEB_NETWORK_BASE)
base::FEATURE_DISABLED_BY_DEFAULT);
#else
base::FEATURE_ENABLED_BY_DEFAULT);
#endif
BASE_FEATURE(kPaintHolding, base::FEATURE_ENABLED_BY_DEFAULT);
#if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_CHROMEOS)
BASE_FEATURE_PARAM(bool,
kPartialLowEndModeExcludeCanvasFontCache,
&base::features::kPartialLowEndModeOnMidRangeDevices,
"exclude-canvas-font-cache",
false);
#endif
BASE_FEATURE(kPath2DPaintCache, base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kDedicatedWorkerAblationStudyEnabled,
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE_PARAM(int,
kDedicatedWorkerStartDelayInMs,
&kDedicatedWorkerAblationStudyEnabled,
"DedicatedWorkerStartDelayInMs",
0);
BASE_FEATURE(kUseAncestorRenderFrameForWorker,
base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kPrecompileInlineScripts, base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kPreferCompositingToLCDText,
#if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_CHROMEOS)
base::FEATURE_ENABLED_BY_DEFAULT
#else
base::FEATURE_DISABLED_BY_DEFAULT
#endif
);
#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_OHOS)
BASE_FEATURE(kPrefetchFontLookupTables,
#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_OHOS)
base::FEATURE_DISABLED_BY_DEFAULT
#else
base::FEATURE_ENABLED_BY_DEFAULT
#endif
);
#endif
BASE_FEATURE(kPreloadingEagerHoverHeuristics,
#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_LINUX) || \
BUILDFLAG(IS_CHROMEOS)
base::FEATURE_ENABLED_BY_DEFAULT
#else
base::FEATURE_DISABLED_BY_DEFAULT
#endif
);
BASE_FEATURE_PARAM(base::TimeDelta,
kPreloadingEagerHoverHeuristicsDwellTime,
&kPreloadingEagerHoverHeuristics,
"hover_dwell_time",
base::Milliseconds(10));
BASE_FEATURE(kPreloadingEagerViewportHeuristics,
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE_PARAM(base::TimeDelta,
kPreloadingEagerViewportHeuristicsPresentTime,
&kPreloadingEagerViewportHeuristics,
"viewport_present_time",
base::Milliseconds(100));
BASE_FEATURE(kPreloadingHeuristicsMLModel, base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE_PARAM(int,
kPreloadingModelTimerStartDelay,
&kPreloadingHeuristicsMLModel,
"timer_start_delay",
0);
BASE_FEATURE_PARAM(int,
kPreloadingModelTimerInterval,
&kPreloadingHeuristicsMLModel,
"timer_interval",
100);
BASE_FEATURE_PARAM(base::TimeDelta,
kPreloadingModelMaxHoverTime,
&kPreloadingHeuristicsMLModel,
"max_hover_time",
base::Seconds(10));
BASE_FEATURE_PARAM(bool,
kPreloadingModelEnactCandidates,
&kPreloadingHeuristicsMLModel,
"enact_candidates",
false);
BASE_FEATURE_PARAM(int,
kPreloadingModelPrefetchModerateThreshold,
&kPreloadingHeuristicsMLModel,
"prefetch_moderate_threshold",
50);
BASE_FEATURE_PARAM(int,
kPreloadingModelPrerenderModerateThreshold,
&kPreloadingHeuristicsMLModel,
"prerender_moderate_threshold",
50);
BASE_FEATURE(kPreloadingModerateViewportHeuristics,
#if BUILDFLAG(IS_ANDROID)
base::FEATURE_ENABLED_BY_DEFAULT
#else
base::FEATURE_DISABLED_BY_DEFAULT
#endif
);
BASE_FEATURE(kPageHideEventForPrerender2, base::FEATURE_ENABLED_BY_DEFAULT);
const char kPrerender2MaxNumOfRunningSpeculationRules[] =
"max_num_of_running_speculation_rules";
BASE_FEATURE(kPrerender2MemoryControls, base::FEATURE_ENABLED_BY_DEFAULT);
const char kPrerender2MemoryThresholdParamName[] = "memory_threshold_in_mb";
const char kPrerender2MemoryAcceptablePercentOfSystemMemoryParamName[] =
"acceptable_percent_of_system_memory";
BASE_FEATURE(kPrerender2EarlyDocumentLifecycleUpdate,
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kPrivateAggregationApi, base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE_PARAM(bool,
kPrivateAggregationApiEnabledInSharedStorage,
&kPrivateAggregationApi,
"enabled_in_shared_storage",
true);
BASE_FEATURE_PARAM(bool,
kPrivateAggregationApiEnabledInProtectedAudience,
&kPrivateAggregationApi,
"enabled_in_fledge",
true);
BASE_FEATURE_PARAM(bool,
kPrivateAggregationApiDebugModeEnabledAtAll,
&kPrivateAggregationApi,
"debug_mode_enabled_at_all",
true);
BASE_FEATURE(kPrivateAggregationApiProtectedAudienceAdditionalExtensions,
base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kProcessHtmlDataImmediately, base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE_PARAM(bool,
kProcessHtmlDataImmediatelyChildFrame,
&kProcessHtmlDataImmediately,
"child",
false);
BASE_FEATURE_PARAM(bool,
kProcessHtmlDataImmediatelyFirstChunk,
&kProcessHtmlDataImmediately,
"first",
false);
BASE_FEATURE_PARAM(bool,
kProcessHtmlDataImmediatelyMainFrame,
&kProcessHtmlDataImmediately,
"main",
false);
BASE_FEATURE_PARAM(bool,
kProcessHtmlDataImmediatelySubsequentChunks,
&kProcessHtmlDataImmediately,
"rest",
false);
BASE_FEATURE(kForceProduceCompileHints, base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kLocalCompileHints, base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kQuoteEmptySecChUaStringHeadersConsistently,
base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kReducedReferrerGranularity, base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kRefactorCompositorThreadEventQueue,
base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE_PARAM(std::string,
kUserAgentFrozenBuildVersion,
&kReduceUserAgentMinorVersion,
"build_version",
"0");
BASE_FEATURE(kReleaseResourceStrongReferencesOnMemoryPressure,
base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kReleaseResourceDecodedDataOnMemoryPressure,
base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kRemoveCommitRedirectUrlsArray, base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kRemovePurposeHeaderForPrefetch, base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kRenderBlockingFonts, base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE_PARAM(int,
kMaxBlockingTimeMsForRenderBlockingFonts,
&features::kRenderBlockingFonts,
"max-blocking-time",
1500);
BASE_FEATURE_PARAM(int,
kMaxFCPDelayMsForRenderBlockingFonts,
&features::kRenderBlockingFonts,
"max-fcp-delay",
100);
BASE_FEATURE(kRenderSizeInScoreAdBrowserSignals,
base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kResamplingInputEvents, base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kResamplingScrollEvents, base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kResourceFetcherStoresStrongReferences,
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kRestrictSpellingAndGrammarHighlights,
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE_PARAM(bool,
kRestrictSpellingAndGrammarHighlightsChangedContents,
&kRestrictSpellingAndGrammarHighlights,
"RestrictSpellingAndGrammarHighlightsChangedContents",
false);
BASE_FEATURE_PARAM(bool,
kRestrictSpellingAndGrammarHighlightsChangedEnablement,
&kRestrictSpellingAndGrammarHighlights,
"RestrictSpellingAndGrammarHighlightsChangedEnablement",
false);
BASE_FEATURE_PARAM(bool,
kRestrictSpellingAndGrammarHighlightsChangedSelection,
&kRestrictSpellingAndGrammarHighlights,
"RestrictSpellingAndGrammarHighlightsChangedSelection",
false);
BASE_FEATURE(kSafelistPaytoToRegisterProtocolHandler,
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kPausePagesPerBrowsingContextGroup,
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kShowHudDisplayForPausedPages, base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kScriptStreaming, base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kScriptStreamingForNonHTTP,
#if BUILDFLAG(IS_ANDROID)
base::FEATURE_DISABLED_BY_DEFAULT
#else
base::FEATURE_ENABLED_BY_DEFAULT
#endif
);
BASE_FEATURE(kSecPurposePrefetchHeaderNoStatePrefetch,
base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kSecPurposePrefetchHeaderRelPrefetch,
base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kSendCnameAliasesToSubresourceFilterFromRenderer,
base::FEATURE_DISABLED_BY_DEFAULT);
#if BUILDFLAG(IS_ARKWEB)
BASE_FEATURE(kSetIntervalWithoutClamp, base::FEATURE_DISABLED_BY_DEFAULT);
#else
BASE_FEATURE(kSetIntervalWithoutClamp, base::FEATURE_ENABLED_BY_DEFAULT);
#endif
BASE_FEATURE(kSharedStorageWorkletSharedBackingThreadImplementation,
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kSharedStorageCreateWorkletCustomDataOrigin,
base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kSharedStorageSelectURLSavedQueries,
base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kSharedStorageAPIEnableWALForDatabase,
base::FEATURE_ENABLED_BY_DEFAULT);
const char kSkipTouchEventFilterTypeParamName[] = "type";
const char kSkipTouchEventFilterTypeParamValueDiscrete[] = "discrete";
const char kSkipTouchEventFilterTypeParamValueAll[] = "all";
const char kSkipTouchEventFilterFilteringProcessParamName[] =
"skip_filtering_process";
const char kSkipTouchEventFilterFilteringProcessParamValueBrowser[] = "browser";
const char kSkipTouchEventFilterFilteringProcessParamValueBrowserAndRenderer[] =
"browser_and_renderer";
BASE_FEATURE(kSpeculativeImageDecodes, base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kSpeculativeServiceWorkerWarmUp, base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE_PARAM(int,
kSpeculativeServiceWorkerWarmUpMaxCount,
&kSpeculativeServiceWorkerWarmUp,
"sw_warm_up_max_count",
2);
BASE_FEATURE_PARAM(base::TimeDelta,
kSpeculativeServiceWorkerWarmUpDuration,
&kSpeculativeServiceWorkerWarmUp,
"sw_warm_up_duration",
base::Minutes(5));
const base::FeatureParam<bool> kSpeculativeServiceWorkerWarmUpOnPointerover{
&kSpeculativeServiceWorkerWarmUp, "sw_warm_up_on_pointerover", true};
const base::FeatureParam<bool> kSpeculativeServiceWorkerWarmUpOnPointerdown{
&kSpeculativeServiceWorkerWarmUp, "sw_warm_up_on_pointerdown", true};
BASE_FEATURE(kServiceWorkerSyntheticResponse,
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE_PARAM(std::string,
kServiceWorkerSyntheticResponseAllowedUrl,
&kServiceWorkerSyntheticResponse,
"allowed_url",
"");
BASE_FEATURE_PARAM(std::string,
kServiceWorkerSyntheticResponseDeniedUrlParams,
&kServiceWorkerSyntheticResponse,
"denied_url_params",
"");
BASE_FEATURE_PARAM(std::string,
kServiceWorkerSyntheticResponseIgnoredHeaders,
&kServiceWorkerSyntheticResponse,
"ignored_headers",
"date,alt-svc,p3p,strict-transport-security");
BASE_FEATURE_PARAM(bool,
kServiceWorkerSyntheticResponseReportInconsistentHeader,
&kServiceWorkerSyntheticResponse,
"report_inconsistent_header",
false);
BASE_FEATURE_PARAM(bool,
kServiceWorkerSyntheticResponseDryRun,
&kServiceWorkerSyntheticResponse,
"dry_run",
false);
BASE_FEATURE_PARAM(bool,
kServiceWorkerSyntheticResponseBypassSubresource,
&kServiceWorkerSyntheticResponse,
"bypass_subresource",
false);
const base::FeatureParam<SoftNavigationHeuristicsMode>::Option
kSoftNavigationHeuristicsModes[] = {
{SoftNavigationHeuristicsMode::kBasic, "basic"},
{SoftNavigationHeuristicsMode::kAdvancedPaintAttribution,
"advanced_paint_attribution"},
{SoftNavigationHeuristicsMode::kPrePaintBasedAttribution,
"pre_paint_based_attribution"}};
BASE_FEATURE_ENUM_PARAM(SoftNavigationHeuristicsMode,
kSoftNavigationHeuristicsModeParam,
&kSoftNavigationHeuristics,
"mode",
SoftNavigationHeuristicsMode::kBasic,
&kSoftNavigationHeuristicsModes);
BASE_FEATURE(
kBoostRenderProcessForLoading,
#if BUILDFLAG(IS_ANDROID)
base::FEATURE_DISABLED_BY_DEFAULT
#else
base::FEATURE_ENABLED_BY_DEFAULT
#endif
);
BASE_FEATURE_PARAM(std::string,
kBoostRenderProcessForLoadingTargetUrls,
&kBoostRenderProcessForLoading,
"target_urls",
"[]");
BASE_FEATURE_PARAM(bool,
kBoostRenderProcessForLoadingPrioritizePrerendering,
&kBoostRenderProcessForLoading,
"prioritize_prerendering",
true);
BASE_FEATURE_PARAM(bool,
kBoostRenderProcessForLoadingPrioritizePrerenderingOnly,
&kBoostRenderProcessForLoading,
"prioritize_prerendering_only",
false);
BASE_FEATURE_PARAM(bool,
kBoostRenderProcessForLoadingPrioritizeRestore,
&kBoostRenderProcessForLoading,
"prioritize_restore",
false);
BASE_FEATURE(kBypassRequestForbiddenHeadersCheck,
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kStopInBackground,
"stop-in-background",
#if BUILDFLAG(IS_ANDROID) && !BUILDFLAG(IS_CAST_ANDROID) && \
!BUILDFLAG(IS_DESKTOP_ANDROID)
base::FEATURE_ENABLED_BY_DEFAULT
#else
base::FEATURE_DISABLED_BY_DEFAULT
#endif
);
BASE_FEATURE(kStreamlineRendererInit, base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kSubSampleWindowProxyUsageMetrics,
base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kSupportOpeningDraggedLinksInSameTab,
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kTaskAttributionTraceMicrotaskTaskState,
base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kThreadedBodyLoader, base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kThreadedPreloadScanner, base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE_PARAM(bool,
kThrottleFrameRateOnInitialization,
&features::kRenderBlockingFullFrameRate,
"throttle-frame-rate-on-initialization",
false);
BASE_FEATURE(kThrottleInstallingServiceWorker,
base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE_PARAM(int,
kInstallingServiceWorkerOutstandingThrottledLimit,
&kThrottleInstallingServiceWorker,
"limit",
3);
BASE_FEATURE(kThrottleUnimportantFrameTimers,
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE_PARAM(int,
kUnimportantFrameTimersThrottledWakeUpIntervalMills,
&features::kThrottleUnimportantFrameTimers,
"unimportant_frame_timers_throttled_wake_up_interval_millis",
32);
BASE_FEATURE_PARAM(int,
kLargeFrameSizePercentThreshold,
&features::kThrottleUnimportantFrameTimers,
"large_frame_size_percent_threshold",
75);
BASE_FEATURE(kUACHOverrideBlank, base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kEmulateLoadStartedForInspectorOncePerResource,
"kEmulateLoadStartedForInspectorOncePerResource",
base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kDevToolsAllowPopoverForcing, base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kUnloadBlocklisted, base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kUrgentMainFrameForInput, base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kURLPatternDummyURLCanonicalization,
base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kUsePageViewportInLCP, base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kUsePersistentCacheForCodeCache,
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kUseSnappyForParkableStrings, base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kUseZstdForParkableStrings, base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE_PARAM(int,
kZstdCompressionLevel,
&features::kUseZstdForParkableStrings,
"compression_level",
1);
BASE_FEATURE(kVSyncDecoding, base::FEATURE_DISABLED_BY_DEFAULT);
#if BUILDFLAG(ARKWEB_NOT_LOAD_IFRAME)
BASE_FEATURE(kNotLoadIframe,
"kNotLoadIframe",
base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE_PARAM(int,
kCrashesFrequencyPerUnitTime,
&kNotLoadIframe,
"crashes_frequency_per_unit_time",
16);
#endif
BASE_FEATURE_PARAM(base::TimeDelta,
kVSyncDecodingHiddenOccludedTickDuration,
&kVSyncDecoding,
"occluded_tick_duration",
base::Hertz(10));
BASE_FEATURE(kVSyncEncoding, base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kWebBluetoothCancelConnect,
#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_ANDROID)
base::FEATURE_DISABLED_BY_DEFAULT);
#else
base::FEATURE_ENABLED_BY_DEFAULT);
#endif
BASE_FEATURE(kWebRtcUseCaptureBeginTimestamp, base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kWebRtcAudioSinkUseTimestampAligner,
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kWebRtcPqcForDtls, base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kWebAppBorderless, base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kWebAppEnableScopeExtensionsBySite,
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kWebAppManifestLockScreen, base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kWebAudioAllowDenormalInProcessing,
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kWebAudioDeferPullStatusUpdate, base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kWebFontsCacheAwareTimeoutAdaption,
#if BUILDFLAG(IS_ANDROID) || BUILDFLAG(ARKWEB_NETWORK_BASE)
base::FEATURE_DISABLED_BY_DEFAULT
#else
base::FEATURE_ENABLED_BY_DEFAULT
#endif
);
BASE_FEATURE(kWebRtcHideLocalIpsWithMdns, base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kWebRtcIgnoreUnspecifiedColorSpace,
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kWebRtcUseMinMaxVEADimensions,
#if BUILDFLAG(IS_CHROMEOS)
base::FEATURE_ENABLED_BY_DEFAULT
#else
base::FEATURE_DISABLED_BY_DEFAULT
#endif
);
BASE_FEATURE(kWebRtcAllowDataChannelRecordingInWebrtcInternals,
base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kWebUSBTransferSizeLimit, base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kWebviewAccelerateSmallCanvases,
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kWorkerThreadSequentialShutdown, base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kWorkerThreadRespectTermRequest, base::FEATURE_ENABLED_BY_DEFAULT);
BASE_FEATURE(kXrDevice, base::FEATURE_DISABLED_BY_DEFAULT);
bool IsAllowURNsInIframeEnabled() {
return base::FeatureList::IsEnabled(blink::features::kAllowURNsInIframes);
}
bool IsCanvas2DHibernationEnabled() {
return base::FeatureList::IsEnabled(features::kCanvas2DHibernation);
}
bool DisplayWarningDeprecateURNIframesUseFencedFrames() {
return base::FeatureList::IsEnabled(
blink::features::kDisplayWarningDeprecateURNIframesUseFencedFrames);
}
bool IsFencedFramesEnabled() {
return base::FeatureList::IsEnabled(blink::features::kFencedFrames);
}
bool IsParkableStringsToDiskEnabled() {
return base::FeatureList::IsEnabled(kCompressParkableStrings);
}
bool IsPersistentCacheForCodeCacheEnabled() {
return net::HttpCache::IsSplitCacheEnabled() &&
base::FeatureList::IsEnabled(kUsePersistentCacheForCodeCache);
}
bool IsSetIntervalWithoutClampEnabled() {
return base::FeatureList::IsEnabled(features::kSetIntervalWithoutClamp);
}
bool IsUnloadBlocklisted() {
return base::FeatureList::IsEnabled(kUnloadBlocklisted);
}
bool ParkableStringsUseSnappy() {
return base::FeatureList::IsEnabled(kUseSnappyForParkableStrings);
}
bool IsKeepAliveURLLoaderServiceEnabled() {
return base::FeatureList::IsEnabled(kKeepAliveInBrowserMigration) ||
base::FeatureList::IsEnabled(kFetchLaterAPI);
}
bool IsLinkPreviewTriggerTypeEnabled(LinkPreviewTriggerType type) {
return base::FeatureList::IsEnabled(blink::features::kLinkPreview) &&
type == blink::features::kLinkPreviewTriggerType.Get();
}
bool IsXrDevice() {
return base::FeatureList::IsEnabled(blink::features::kXrDevice);
}
}