1 // Copyright 2018 The Chromium Authors 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "net/base/features.h" 6 7 #include <vector> 8 9 #include "base/feature_list.h" 10 #include "build/build_config.h" 11 #include "net/base/cronet_buildflags.h" 12 #include "net/net_buildflags.h" 13 14 namespace net::features { 15 16 BASE_FEATURE(kAlpsForHttp2, "AlpsForHttp2", base::FEATURE_ENABLED_BY_DEFAULT); 17 18 BASE_FEATURE(kAvoidH2Reprioritization, 19 "AvoidH2Reprioritization", 20 base::FEATURE_DISABLED_BY_DEFAULT); 21 22 BASE_FEATURE(kCapReferrerToOriginOnCrossOrigin, 23 "CapReferrerToOriginOnCrossOrigin", 24 base::FEATURE_DISABLED_BY_DEFAULT); 25 26 BASE_FEATURE(kDnsTransactionDynamicTimeouts, 27 "DnsTransactionDynamicTimeouts", 28 base::FEATURE_DISABLED_BY_DEFAULT); 29 30 const base::FeatureParam<double> kDnsTransactionTimeoutMultiplier{ 31 &kDnsTransactionDynamicTimeouts, "DnsTransactionTimeoutMultiplier", 7.5}; 32 33 const base::FeatureParam<base::TimeDelta> kDnsMinTransactionTimeout{ 34 &kDnsTransactionDynamicTimeouts, "DnsMinTransactionTimeout", 35 base::Seconds(12)}; 36 37 BASE_FEATURE(kUseDnsHttpsSvcb, 38 "UseDnsHttpsSvcb", 39 base::FEATURE_ENABLED_BY_DEFAULT); 40 41 const base::FeatureParam<bool> kUseDnsHttpsSvcbEnforceSecureResponse{ 42 &kUseDnsHttpsSvcb, "UseDnsHttpsSvcbEnforceSecureResponse", false}; 43 44 const base::FeatureParam<base::TimeDelta> kUseDnsHttpsSvcbInsecureExtraTimeMax{ 45 &kUseDnsHttpsSvcb, "UseDnsHttpsSvcbInsecureExtraTimeMax", 46 base::Milliseconds(50)}; 47 48 const base::FeatureParam<int> kUseDnsHttpsSvcbInsecureExtraTimePercent{ 49 &kUseDnsHttpsSvcb, "UseDnsHttpsSvcbInsecureExtraTimePercent", 20}; 50 51 const base::FeatureParam<base::TimeDelta> kUseDnsHttpsSvcbInsecureExtraTimeMin{ 52 &kUseDnsHttpsSvcb, "UseDnsHttpsSvcbInsecureExtraTimeMin", 53 base::Milliseconds(5)}; 54 55 const base::FeatureParam<base::TimeDelta> kUseDnsHttpsSvcbSecureExtraTimeMax{ 56 &kUseDnsHttpsSvcb, "UseDnsHttpsSvcbSecureExtraTimeMax", 57 base::Milliseconds(50)}; 58 59 const base::FeatureParam<int> kUseDnsHttpsSvcbSecureExtraTimePercent{ 60 &kUseDnsHttpsSvcb, "UseDnsHttpsSvcbSecureExtraTimePercent", 20}; 61 62 const base::FeatureParam<base::TimeDelta> kUseDnsHttpsSvcbSecureExtraTimeMin{ 63 &kUseDnsHttpsSvcb, "UseDnsHttpsSvcbSecureExtraTimeMin", 64 base::Milliseconds(5)}; 65 66 BASE_FEATURE(kUseDnsHttpsSvcbAlpn, 67 "UseDnsHttpsSvcbAlpn", 68 base::FEATURE_ENABLED_BY_DEFAULT); 69 70 const base::FeatureParam<int> kAlternativePortForGloballyReachableCheck{ 71 &kUseAlternativePortForGloballyReachableCheck, 72 "AlternativePortForGloballyReachableCheck", 443}; 73 74 BASE_FEATURE(kUseAlternativePortForGloballyReachableCheck, 75 "UseAlternativePortForGloballyReachableCheck", 76 base::FEATURE_DISABLED_BY_DEFAULT); 77 78 BASE_FEATURE(kEnableIPv6ReachabilityOverride, 79 "EnableIPv6ReachabilityOverride", 80 base::FEATURE_DISABLED_BY_DEFAULT); 81 82 BASE_FEATURE(kSHA1ServerSignature, 83 "SHA1ServerSignature", 84 base::FEATURE_DISABLED_BY_DEFAULT); 85 86 BASE_FEATURE(kEnableTLS13EarlyData, 87 "EnableTLS13EarlyData", 88 base::FEATURE_DISABLED_BY_DEFAULT); 89 90 BASE_FEATURE(kEncryptedClientHello, 91 "EncryptedClientHello", 92 base::FEATURE_ENABLED_BY_DEFAULT); 93 94 BASE_FEATURE(kEncryptedClientHelloQuic, 95 "EncryptedClientHelloQuic", 96 base::FEATURE_ENABLED_BY_DEFAULT); 97 98 BASE_FEATURE(kRSAKeyUsageForLocalAnchors, 99 "RSAKeyUsageForLocalAnchors", 100 base::FEATURE_ENABLED_BY_DEFAULT); 101 102 BASE_FEATURE(kNetworkQualityEstimator, 103 "NetworkQualityEstimator", 104 base::FEATURE_DISABLED_BY_DEFAULT); 105 106 BASE_FEATURE(kSplitCacheByIncludeCredentials, 107 "SplitCacheByIncludeCredentials", 108 base::FEATURE_DISABLED_BY_DEFAULT); 109 110 BASE_FEATURE(kSplitCacheByNetworkIsolationKey, 111 "SplitCacheByNetworkIsolationKey", 112 base::FEATURE_DISABLED_BY_DEFAULT); 113 114 BASE_FEATURE(kSplitCodeCacheByNetworkIsolationKey, 115 "SplitCodeCacheByNetworkIsolationKey", 116 base::FEATURE_DISABLED_BY_DEFAULT); 117 118 BASE_FEATURE(kSplitHostCacheByNetworkIsolationKey, 119 "SplitHostCacheByNetworkIsolationKey", 120 base::FEATURE_DISABLED_BY_DEFAULT); 121 122 BASE_FEATURE(kPartitionConnectionsByNetworkIsolationKey, 123 "PartitionConnectionsByNetworkIsolationKey", 124 base::FEATURE_DISABLED_BY_DEFAULT); 125 126 BASE_FEATURE(kPartitionHttpServerPropertiesByNetworkIsolationKey, 127 "PartitionHttpServerPropertiesByNetworkIsolationKey", 128 base::FEATURE_DISABLED_BY_DEFAULT); 129 130 BASE_FEATURE(kPartitionSSLSessionsByNetworkIsolationKey, 131 "PartitionSSLSessionsByNetworkIsolationKey", 132 base::FEATURE_DISABLED_BY_DEFAULT); 133 134 BASE_FEATURE(kPartitionNelAndReportingByNetworkIsolationKey, 135 "PartitionNelAndReportingByNetworkIsolationKey", 136 base::FEATURE_DISABLED_BY_DEFAULT); 137 138 BASE_FEATURE(kEnableCrossSiteFlagNetworkIsolationKey, 139 "EnableCrossSiteFlagNetworkIsolationKey", 140 base::FEATURE_DISABLED_BY_DEFAULT); 141 BASE_FEATURE(kEnableFrameSiteSharedOpaqueNetworkIsolationKey, 142 "EnableFrameSiteSharedOpaqueNetworkIsolationKey", 143 base::FEATURE_DISABLED_BY_DEFAULT); 144 BASE_FEATURE(kHttpCacheKeyingExperimentControlGroup, 145 "HttpCacheKeyingExperimentControlGroup", 146 base::FEATURE_DISABLED_BY_DEFAULT); 147 148 BASE_FEATURE(kTLS13KeyUpdate, 149 "TLS13KeyUpdate", 150 base::FEATURE_DISABLED_BY_DEFAULT); 151 152 BASE_FEATURE(kPermuteTLSExtensions, 153 "PermuteTLSExtensions", 154 base::FEATURE_ENABLED_BY_DEFAULT); 155 156 BASE_FEATURE(kPostQuantumKyber, 157 "PostQuantumKyber", 158 base::FEATURE_DISABLED_BY_DEFAULT); 159 160 BASE_FEATURE(kNetUnusedIdleSocketTimeout, 161 "NetUnusedIdleSocketTimeout", 162 base::FEATURE_DISABLED_BY_DEFAULT); 163 164 BASE_FEATURE(kShortLaxAllowUnsafeThreshold, 165 "ShortLaxAllowUnsafeThreshold", 166 base::FEATURE_DISABLED_BY_DEFAULT); 167 168 BASE_FEATURE(kSameSiteDefaultChecksMethodRigorously, 169 "SameSiteDefaultChecksMethodRigorously", 170 base::FEATURE_DISABLED_BY_DEFAULT); 171 172 #if BUILDFLAG(CHROME_ROOT_STORE_OPTIONAL) 173 BASE_FEATURE(kChromeRootStoreUsed, 174 "ChromeRootStoreUsed", 175 #if BUILDFLAG(IS_ANDROID) 176 base::FEATURE_ENABLED_BY_DEFAULT 177 #else 178 base::FEATURE_DISABLED_BY_DEFAULT 179 #endif 180 ); 181 #endif // BUILDFLAG(CHROME_ROOT_STORE_OPTIONAL) 182 183 #if BUILDFLAG(IS_MAC) || BUILDFLAG(USE_NSS_CERTS) || BUILDFLAG(IS_WIN) 184 BASE_FEATURE(kTrustStoreTrustedLeafSupport, 185 "TrustStoreTrustedLeafSupport", 186 base::FEATURE_ENABLED_BY_DEFAULT); 187 #endif 188 189 BASE_FEATURE(kTurnOffStreamingMediaCachingOnBattery, 190 "TurnOffStreamingMediaCachingOnBattery", 191 base::FEATURE_DISABLED_BY_DEFAULT); 192 193 BASE_FEATURE(kTurnOffStreamingMediaCachingAlways, 194 "TurnOffStreamingMediaCachingAlways", 195 base::FEATURE_DISABLED_BY_DEFAULT); 196 197 BASE_FEATURE(kSchemefulSameSite, 198 "SchemefulSameSite", 199 base::FEATURE_ENABLED_BY_DEFAULT); 200 201 BASE_FEATURE(kLimitOpenUDPSockets, 202 "LimitOpenUDPSockets", 203 base::FEATURE_ENABLED_BY_DEFAULT); 204 205 extern const base::FeatureParam<int> kLimitOpenUDPSocketsMax( 206 &kLimitOpenUDPSockets, 207 "LimitOpenUDPSocketsMax", 208 6000); 209 210 BASE_FEATURE(kTimeoutTcpConnectAttempt, 211 "TimeoutTcpConnectAttempt", 212 base::FEATURE_DISABLED_BY_DEFAULT); 213 214 extern const base::FeatureParam<double> kTimeoutTcpConnectAttemptRTTMultiplier( 215 &kTimeoutTcpConnectAttempt, 216 "TimeoutTcpConnectAttemptRTTMultiplier", 217 5.0); 218 219 extern const base::FeatureParam<base::TimeDelta> kTimeoutTcpConnectAttemptMin( 220 &kTimeoutTcpConnectAttempt, 221 "TimeoutTcpConnectAttemptMin", 222 base::Seconds(8)); 223 224 extern const base::FeatureParam<base::TimeDelta> kTimeoutTcpConnectAttemptMax( 225 &kTimeoutTcpConnectAttempt, 226 "TimeoutTcpConnectAttemptMax", 227 base::Seconds(30)); 228 229 #if BUILDFLAG(ENABLE_REPORTING) 230 BASE_FEATURE(kDocumentReporting, 231 "DocumentReporting", 232 base::FEATURE_ENABLED_BY_DEFAULT); 233 #endif // BUILDFLAG(ENABLE_REPORTING) 234 235 #if BUILDFLAG(IS_POSIX) || BUILDFLAG(IS_FUCHSIA) 236 BASE_FEATURE(kUdpSocketPosixAlwaysUpdateBytesReceived, 237 "UdpSocketPosixAlwaysUpdateBytesReceived", 238 base::FEATURE_ENABLED_BY_DEFAULT); 239 #endif // BUILDFLAG(IS_POSIX) || BUILDFLAG(IS_FUCHSIA) 240 241 BASE_FEATURE(kCookieSameSiteConsidersRedirectChain, 242 "CookieSameSiteConsidersRedirectChain", 243 base::FEATURE_DISABLED_BY_DEFAULT); 244 245 BASE_FEATURE(kWaitForFirstPartySetsInit, 246 "WaitForFirstPartySetsInit", 247 base::FEATURE_DISABLED_BY_DEFAULT); 248 249 BASE_FEATURE(kPartitionedCookies, 250 "PartitionedCookies", 251 base::FEATURE_ENABLED_BY_DEFAULT); 252 253 BASE_FEATURE(kBlockTruncatedCookies, 254 "BlockTruncatedCookies", 255 base::FEATURE_ENABLED_BY_DEFAULT); 256 257 BASE_FEATURE(kStaticKeyPinningEnforcement, 258 "StaticKeyPinningEnforcement", 259 base::FEATURE_ENABLED_BY_DEFAULT); 260 261 BASE_FEATURE(kCookieDomainRejectNonASCII, 262 "CookieDomainRejectNonASCII", 263 base::FEATURE_DISABLED_BY_DEFAULT); 264 265 // Enables partitioning of third party storage (IndexedDB, CacheStorage, etc.) 266 // by the top level site to reduce fingerprinting. 267 BASE_FEATURE(kThirdPartyStoragePartitioning, 268 "ThirdPartyStoragePartitioning", 269 base::FEATURE_ENABLED_BY_DEFAULT); 270 271 // Whether to use the new code paths needed to support partitioning Blob URLs. 272 // This exists as a kill-switch in case an issue is identified with the Blob 273 // URL implementation that causes breakage. 274 BASE_FEATURE(kSupportPartitionedBlobUrl, 275 "SupportPartitionedBlobUrl", 276 base::FEATURE_ENABLED_BY_DEFAULT); 277 278 BASE_FEATURE(kTpcdSupportSettings, 279 "TpcdSupportSettings", 280 base::FEATURE_ENABLED_BY_DEFAULT); 281 282 BASE_FEATURE(kTpcdMetadataGrants, 283 "TpcdMetadataGrants", 284 base::FEATURE_ENABLED_BY_DEFAULT); 285 286 BASE_FEATURE(kAlpsParsing, "AlpsParsing", base::FEATURE_ENABLED_BY_DEFAULT); 287 288 BASE_FEATURE(kAlpsClientHintParsing, 289 "AlpsClientHintParsing", 290 base::FEATURE_ENABLED_BY_DEFAULT); 291 292 BASE_FEATURE(kShouldKillSessionOnAcceptChMalformed, 293 "ShouldKillSessionOnAcceptChMalformed", 294 base::FEATURE_DISABLED_BY_DEFAULT); 295 296 BASE_FEATURE(kCaseInsensitiveCookiePrefix, 297 "CaseInsensitiveCookiePrefix", 298 base::FEATURE_ENABLED_BY_DEFAULT); 299 300 BASE_FEATURE(kEnableWebsocketsOverHttp3, 301 "EnableWebsocketsOverHttp3", 302 base::FEATURE_DISABLED_BY_DEFAULT); 303 304 BASE_FEATURE(kUseNAT64ForIPv4Literal, 305 "UseNAT64ForIPv4Literal", 306 base::FEATURE_ENABLED_BY_DEFAULT); 307 308 BASE_FEATURE(kBlockNewForbiddenHeaders, 309 "BlockNewForbiddenHeaders", 310 base::FEATURE_ENABLED_BY_DEFAULT); 311 312 #if BUILDFLAG(IS_WIN) 313 BASE_FEATURE(kPlatformKeyProbeSHA256, 314 "PlatformKeyProbeSHA256", 315 base::FEATURE_ENABLED_BY_DEFAULT); 316 317 // Disabled because of https://crbug.com/1489696. 318 BASE_FEATURE(kEnableGetNetworkConnectivityHintAPI, 319 "EnableGetNetworkConnectivityHintAPI", 320 base::FEATURE_DISABLED_BY_DEFAULT); 321 #endif 322 323 // Prefetch to follow normal semantics instead of 5-minute rule 324 // https://crbug.com/1345207 325 BASE_FEATURE(kPrefetchFollowsNormalCacheSemantics, 326 "PrefetchFollowsNormalCacheSemantics", 327 base::FEATURE_DISABLED_BY_DEFAULT); 328 329 // A flag for new Kerberos feature, that suggests new UI 330 // when Kerberos authentication in browser fails on ChromeOS. 331 // b/260522530 332 #if BUILDFLAG(IS_CHROMEOS) 333 BASE_FEATURE(kKerberosInBrowserRedirect, 334 "KerberosInBrowserRedirect", 335 base::FEATURE_ENABLED_BY_DEFAULT); 336 #endif 337 338 // A flag to use asynchronous session creation for new QUIC sessions. 339 BASE_FEATURE(kAsyncQuicSession, 340 "AsyncQuicSession", 341 #if BUILDFLAG(IS_WIN) 342 base::FEATURE_ENABLED_BY_DEFAULT); 343 #else 344 base::FEATURE_DISABLED_BY_DEFAULT); 345 #endif 346 347 // A flag to make multiport context creation asynchronous. 348 BASE_FEATURE(kAsyncMultiPortPath, 349 "AsyncMultiPortPath", 350 #if !BUILDFLAG(CRONET_BUILD) && (BUILDFLAG(IS_WIN) || BUILDFLAG(IS_ANDROID)) 351 base::FEATURE_ENABLED_BY_DEFAULT); 352 #else 353 base::FEATURE_DISABLED_BY_DEFAULT); 354 #endif 355 356 // IP protection experiment configuration settings 357 BASE_FEATURE(kEnableIpProtectionProxy, 358 "EnableIpPrivacyProxy", 359 base::FEATURE_DISABLED_BY_DEFAULT); 360 361 const base::FeatureParam<std::string> kIpPrivacyTokenServer{ 362 &kEnableIpProtectionProxy, /*name=*/"IpPrivacyTokenServer", 363 /*default_value=*/"https://phosphor-pa.googleapis.com"}; 364 365 const base::FeatureParam<std::string> kIpPrivacyTokenServerGetInitialDataPath{ 366 &kEnableIpProtectionProxy, 367 /*name=*/"IpPrivacyTokenServerGetInitialDataPath", 368 /*default_value=*/"/v1/ipblinding/getInitialData"}; 369 370 const base::FeatureParam<std::string> kIpPrivacyTokenServerGetTokensPath{ 371 &kEnableIpProtectionProxy, /*name=*/"IpPrivacyTokenServerGetTokensPath", 372 /*default_value=*/"/v1/ipblinding/auth"}; 373 374 const base::FeatureParam<std::string> kIpPrivacyTokenServerGetProxyConfigPath{ 375 &kEnableIpProtectionProxy, 376 /*name=*/"IpPrivacyTokenServerGetProxyConfigPath", 377 /*default_value=*/"/v1/ipblinding/getProxyConfig"}; 378 379 const base::FeatureParam<int> kIpPrivacyAuthTokenCacheBatchSize{ 380 &kEnableIpProtectionProxy, /*name=*/"IpPrivacyAuthTokenCacheBatchSize", 381 /*default_value=*/64}; 382 383 const base::FeatureParam<int> kIpPrivacyAuthTokenCacheLowWaterMark{ 384 &kEnableIpProtectionProxy, /*name=*/"IpPrivacyAuthTokenCacheLowWaterMark", 385 /*default_value=*/16}; 386 387 const base::FeatureParam<base::TimeDelta> kIpPrivacyProxyListFetchInterval{ 388 &kEnableIpProtectionProxy, /*name=*/"IpPrivacyProxyListFetchInterval", 389 /*default_value=*/base::Hours(1)}; 390 391 const base::FeatureParam<base::TimeDelta> kIpPrivacyProxyListMinFetchInterval{ 392 &kEnableIpProtectionProxy, /*name=*/"IpPrivacyProxyMinListFetchInterval", 393 /*default_value=*/base::Minutes(1)}; 394 395 const base::FeatureParam<bool> kIpPrivacyDirectOnly{ 396 &kEnableIpProtectionProxy, /*name=*/"IpPrivacyDirectOnly", 397 /*default_value=*/false}; 398 399 const base::FeatureParam<bool> kIpPrivacyBsaEnablePrivacyPass{ 400 &kEnableIpProtectionProxy, /*name=*/"IpPrivacyBsaEnablePrivacyPass", 401 /*default_value=*/false}; 402 403 const base::FeatureParam<std::string> kIpPrivacyProxyBPsk{ 404 &kEnableIpProtectionProxy, /*name=*/"IpPrivacyProxyBPsk", 405 /*default_value=*/""}; 406 407 const base::FeatureParam<bool> kIpPrivacyUseProxyChains{ 408 &kEnableIpProtectionProxy, /*name=*/"IpPrivacyUseProxyChains", 409 /*default_value=*/false}; 410 411 // Network-change migration requires NetworkHandle support, which are currently 412 // only supported on Android (see 413 // NetworkChangeNotifier::AreNetworkHandlesSupported). 414 #if BUILDFLAG(IS_ANDROID) 415 inline constexpr auto kMigrateSessionsOnNetworkChangeV2Default = 416 base::FEATURE_DISABLED_BY_DEFAULT; 417 #else // !BUILDFLAG(IS_ANDROID) 418 inline constexpr auto kMigrateSessionsOnNetworkChangeV2Default = 419 base::FEATURE_DISABLED_BY_DEFAULT; 420 #endif // BUILDFLAG(IS_ANDROID) 421 BASE_FEATURE(kMigrateSessionsOnNetworkChangeV2, 422 "MigrateSessionsOnNetworkChangeV2", 423 kMigrateSessionsOnNetworkChangeV2Default); 424 425 BASE_FEATURE(kDisableBlackholeOnNoNewNetwork, 426 "DisableBlackHoleOnNoNewNetwork", 427 base::FEATURE_DISABLED_BY_DEFAULT); 428 429 #if BUILDFLAG(IS_LINUX) 430 BASE_FEATURE(kAddressTrackerLinuxIsProxied, 431 "AddressTrackerLinuxIsProxied", 432 base::FEATURE_ENABLED_BY_DEFAULT); 433 #endif // BUILDFLAG(IS_LINUX) 434 435 // Enables binding of cookies to the port that originally set them by default. 436 BASE_FEATURE(kEnablePortBoundCookies, 437 "EnablePortBoundCookies", 438 base::FEATURE_DISABLED_BY_DEFAULT); 439 440 // Enables binding of cookies to the scheme that originally set them. 441 NET_EXPORT BASE_DECLARE_FEATURE(kEnableSchemeBoundCookies); 442 BASE_FEATURE(kEnableSchemeBoundCookies, 443 "EnableSchemeBoundCookies", 444 base::FEATURE_DISABLED_BY_DEFAULT); 445 446 // Enable third-party cookie blocking from the command line. 447 BASE_FEATURE(kForceThirdPartyCookieBlocking, 448 "ForceThirdPartyCookieBlockingEnabled", 449 base::FEATURE_DISABLED_BY_DEFAULT); 450 451 BASE_FEATURE(kEnableEarlyHintsOnHttp11, 452 "EnableEarlyHintsOnHttp11", 453 base::FEATURE_DISABLED_BY_DEFAULT); 454 455 BASE_FEATURE(kEnableWebTransportDraft07, 456 "EnableWebTransportDraft07", 457 base::FEATURE_DISABLED_BY_DEFAULT); 458 459 BASE_FEATURE(kZstdContentEncoding, 460 "ZstdContentEncoding", 461 base::FEATURE_DISABLED_BY_DEFAULT); 462 463 // When enabled, partitioned storage will be allowed even if third-party cookies 464 // are disabled by default. Partitioned storage will not be allowed if 465 // third-party cookies are disabled due to a specific rule. 466 BASE_FEATURE(kThirdPartyPartitionedStorageAllowedByDefault, 467 "ThirdPartyPartitionedStorageAllowedByDefault", 468 base::FEATURE_ENABLED_BY_DEFAULT); 469 470 BASE_FEATURE(kPriorityHeader, 471 "PriorityHeader", 472 base::FEATURE_DISABLED_BY_DEFAULT); 473 474 BASE_FEATURE(kSpdyHeadersToHttpResponseUseBuilder, 475 "SpdyHeadersToHttpResponseUseBuilder", 476 base::FEATURE_DISABLED_BY_DEFAULT); 477 478 BASE_FEATURE(kReceiveEcn, "ReceiveEcn", base::FEATURE_DISABLED_BY_DEFAULT); 479 480 // TODO(crbug.com/634470): Remove this feature flag in January 2024 if the new 481 // limit sticks. 482 BASE_FEATURE(kNewCertPathBuilderIterationLimit, 483 "NewCertPathBuilderIterationLimit", 484 base::FEATURE_ENABLED_BY_DEFAULT); 485 486 BASE_FEATURE(kUseAlpsNewCodepoint, 487 "UseAlpsNewCodepoint", 488 base::FEATURE_DISABLED_BY_DEFAULT); 489 490 BASE_FEATURE(kTreatHTTPExpiresHeaderValueZeroAsExpired, 491 "TreatHTTPExpiresHeaderValueZeroAsExpired", 492 base::FEATURE_ENABLED_BY_DEFAULT); 493 494 } // namespace net::features 495