-
Notifications
You must be signed in to change notification settings - Fork 6.7k
/
content_features.cc
1694 lines (1445 loc) · 71 KB
/
content_features.cc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
// Copyright 2015 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "content/public/common/content_features.h"
#include <string>
#include "base/feature_list.h"
#include "base/time/time.h"
#include "build/build_config.h"
#include "build/chromeos_buildflags.h"
#include "content/common/buildflags.h"
#include "content/public/common/dips_utils.h"
namespace features {
// All features in alphabetical order.
// Enables content-initiated, main frame navigations to data URLs.
// TODO(meacer): Remove when the deprecation is complete.
// https://www.chromestatus.com/feature/5669602927312896
BASE_FEATURE(kAllowContentInitiatedDataUrlNavigations,
"AllowContentInitiatedDataUrlNavigations",
base::FEATURE_DISABLED_BY_DEFAULT);
// Allows Blink to request fonts from the Android Downloadable Fonts API through
// the service implemented on the Java side.
BASE_FEATURE(kAndroidDownloadableFontsMatching,
"AndroidDownloadableFontsMatching",
base::FEATURE_ENABLED_BY_DEFAULT);
#if BUILDFLAG(IS_ANDROID)
// Use chromim's implementation of selection magnifier built using surface
// control APIs, instead of using the system-provided magnifier.
BASE_FEATURE(kAndroidSurfaceControlMagnifier,
"AndroidSurfaceControlMagnifier",
base::FEATURE_DISABLED_BY_DEFAULT);
#endif // BUILDFLAG(IS_ANDROID)
// Enables FLEDGE and Attribution Reporting API integration.
BASE_FEATURE(kAttributionFencedFrameReportingBeacon,
"AttributionFencedFrameReportingBeacon",
base::FEATURE_ENABLED_BY_DEFAULT);
// Launches the audio service on the browser startup.
BASE_FEATURE(kAudioServiceLaunchOnStartup,
"AudioServiceLaunchOnStartup",
base::FEATURE_DISABLED_BY_DEFAULT);
// Runs the audio service in a separate process.
BASE_FEATURE(kAudioServiceOutOfProcess,
"AudioServiceOutOfProcess",
// TODO(crbug.com/1052397): Remove !IS_CHROMEOS_LACROS once lacros starts being
// built with OS_CHROMEOS instead of OS_LINUX.
#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || \
(BUILDFLAG(IS_LINUX) && !BUILDFLAG(IS_CHROMEOS_LACROS))
base::FEATURE_ENABLED_BY_DEFAULT
#else
base::FEATURE_DISABLED_BY_DEFAULT
#endif
);
// Enables the audio-service sandbox. This feature has an effect only when the
// kAudioServiceOutOfProcess feature is enabled.
BASE_FEATURE(kAudioServiceSandbox,
"AudioServiceSandbox",
#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC) || BUILDFLAG(IS_FUCHSIA)
base::FEATURE_ENABLED_BY_DEFAULT
#else
base::FEATURE_DISABLED_BY_DEFAULT
#endif
);
// The following two features, when enabled, result in the browser process only
// asking the renderer process to run beforeunload handlers if it knows such
// handlers are registered. The two slightly differ in what they do and how
// they behave:
// . `kAvoidUnnecessaryBeforeUnloadCheckPostTask` in this case content continues
// to report a beforeunload handler is present (even though it isn't). When
// asked to dispatch the beforeunload handler, a post task is used (rather
// than going to the renderer).
// . `kAvoidUnnecessaryBeforeUnloadCheckSync` in this case content does not
// report a beforeunload handler is present. A ramification of this is
// navigations that would normally check beforeunload handlers before
// continuing will not, and navigation will synchronously continue.
// Only one should be used (if both are set, the second takes precedence). The
// second is unsafe for Android WebView (and thus entirely disabled via
// ContentBrowserClient::SupportsAvoidUnnecessaryBeforeUnloadCheckSync()),
// because the embedder may trigger reentrancy, which cannot be avoided.
BASE_FEATURE(kAvoidUnnecessaryBeforeUnloadCheckSync,
"AvoidUnnecessaryBeforeUnloadCheckSync",
base::FEATURE_DISABLED_BY_DEFAULT);
// Kill switch for Background Fetch.
BASE_FEATURE(kBackgroundFetch,
"BackgroundFetch",
base::FEATURE_ENABLED_BY_DEFAULT);
// Enable using the BackForwardCache.
BASE_FEATURE(kBackForwardCache,
"BackForwardCache",
base::FEATURE_ENABLED_BY_DEFAULT);
// Enable showing a page preview during back/forward navigations.
BASE_FEATURE(kBackForwardTransitions,
"BackForwardTransitions",
base::FEATURE_DISABLED_BY_DEFAULT);
// Enables reporting ResourceTiming entries for document, who initiated a
// cancelled navigation in one of their <iframe>.
BASE_FEATURE(kResourceTimingForCancelledNavigationInFrame,
"ResourceTimingForCancelledNavigationInFrame",
base::FEATURE_ENABLED_BY_DEFAULT);
// Allows pages that created a MediaSession service to stay eligible for the
// back/forward cache.
BASE_FEATURE(kBackForwardCacheMediaSessionService,
"BackForwardCacheMediaSessionService",
base::FEATURE_DISABLED_BY_DEFAULT);
// Set a time limit for the page to enter the cache. Disabling this prevents
// flakes during testing.
BASE_FEATURE(kBackForwardCacheEntryTimeout,
"BackForwardCacheEntryTimeout",
base::FEATURE_ENABLED_BY_DEFAULT);
// Enables controlling the time to live for pages in the BackForwardCache.
// The time to live is defined by the param 'time_to_live_seconds'; if this
// param is not specified then this feature is ignored and the default is used.
BASE_FEATURE(kBackForwardCacheTimeToLiveControl,
"BackForwardCacheTimeToLiveControl",
base::FEATURE_DISABLED_BY_DEFAULT);
// Enable back/forward cache for screen reader users. This flag should be
// removed once the https://crbug.com/1271450 is resolved.
BASE_FEATURE(kEnableBackForwardCacheForScreenReader,
"EnableBackForwardCacheForScreenReader",
base::FEATURE_ENABLED_BY_DEFAULT);
// BackForwardCache is disabled on low memory devices. The threshold is defined
// via a field trial param: "memory_threshold_for_back_forward_cache_in_mb"
// It is compared against base::SysInfo::AmountOfPhysicalMemoryMB().
// "BackForwardCacheMemoryControls" is checked before "BackForwardCache". It
// means the low memory devices will activate neither the control group nor the
// experimental group of the BackForwardCache field trial.
// BackForwardCacheMemoryControls is enabled only on Android to disable
// BackForwardCache for lower memory devices due to memory limiations.
BASE_FEATURE(kBackForwardCacheMemoryControls,
"BackForwardCacheMemoryControls",
#if BUILDFLAG(IS_ANDROID)
base::FEATURE_ENABLED_BY_DEFAULT
#else
base::FEATURE_DISABLED_BY_DEFAULT
#endif
);
// When this feature is enabled, private network requests initiated from
// non-secure contexts in the `public` address space are blocked.
//
// See also:
// - https://wicg.github.io/private-network-access/#integration-fetch
// - kBlockInsecurePrivateNetworkRequestsFromPrivate
// - kBlockInsecurePrivateNetworkRequestsFromUnknown
BASE_FEATURE(kBlockInsecurePrivateNetworkRequests,
"BlockInsecurePrivateNetworkRequests",
base::FEATURE_ENABLED_BY_DEFAULT);
// When this feature is enabled, requests to localhost initiated from non-secure
// contexts in the `private` IP address space are blocked.
//
// See also:
// - https://wicg.github.io/private-network-access/#integration-fetch
// - kBlockInsecurePrivateNetworkRequests
BASE_FEATURE(kBlockInsecurePrivateNetworkRequestsFromPrivate,
"BlockInsecurePrivateNetworkRequestsFromPrivate",
base::FEATURE_DISABLED_BY_DEFAULT);
// When this feature is enabled, requests to localhost initiated from non-secure
// contexts in the `unknown` IP address space are blocked.
//
// See also:
// - kBlockInsecurePrivateNetworkRequests
BASE_FEATURE(kBlockInsecurePrivateNetworkRequestsFromUnknown,
"BlockInsecurePrivateNetworkRequestsFromUnknown",
base::FEATURE_DISABLED_BY_DEFAULT);
// Enables use of the PrivateNetworkAccessNonSecureContextsAllowed deprecation
// trial. This is a necessary yet insufficient condition: documents that wish to
// make use of the trial must additionally serve a valid origin trial token.
BASE_FEATURE(kBlockInsecurePrivateNetworkRequestsDeprecationTrial,
"BlockInsecurePrivateNetworkRequestsDeprecationTrial",
base::FEATURE_ENABLED_BY_DEFAULT);
// Broker file operations on disk cache in the Network Service.
// This is no-op if the network service is hosted in the browser process.
BASE_FEATURE(kBrokerFileOperationsOnDiskCacheInNetworkService,
"BrokerFileOperationsOnDiskCacheInNetworkService",
base::FEATURE_DISABLED_BY_DEFAULT);
// When enabled, keyboard user activation will be verified by the browser side.
BASE_FEATURE(kBrowserVerifiedUserActivationKeyboard,
"BrowserVerifiedUserActivationKeyboard",
base::FEATURE_DISABLED_BY_DEFAULT);
// When enabled, mouse user activation will be verified by the browser side.
BASE_FEATURE(kBrowserVerifiedUserActivationMouse,
"BrowserVerifiedUserActivationMouse",
base::FEATURE_DISABLED_BY_DEFAULT);
// Allows pages with cache-control:no-store to enter the back/forward cache.
// Feature params can specify whether pages with cache-control:no-store can be
// restored if cookies change / if HTTPOnly cookies change.
// TODO(crbug.com/1228611): Enable this feature.
BASE_FEATURE(kCacheControlNoStoreEnterBackForwardCache,
"CacheControlNoStoreEnterBackForwardCache",
base::FEATURE_DISABLED_BY_DEFAULT);
// If Canvas2D Image Chromium is allowed, this feature controls whether it is
// enabled.
BASE_FEATURE(kCanvas2DImageChromium,
"Canvas2DImageChromium",
#if BUILDFLAG(IS_APPLE) || BUILDFLAG(IS_CHROMEOS_LACROS)
base::FEATURE_ENABLED_BY_DEFAULT
#else
base::FEATURE_DISABLED_BY_DEFAULT
#endif
);
// Clear the window.name property for the top-level cross-site navigations that
// swap BrowsingContextGroups(BrowsingInstances).
BASE_FEATURE(kClearCrossSiteCrossBrowsingContextGroupWindowName,
"ClearCrossSiteCrossBrowsingContextGroupWindowName",
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kCompositeBGColorAnimation,
"CompositeBGColorAnimation",
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kCompositeClipPathAnimation,
"CompositeClipPathAnimation",
base::FEATURE_DISABLED_BY_DEFAULT);
// When enabled, code cache does not use a browsing_data filter for deletions.
BASE_FEATURE(kCodeCacheDeletionWithoutFilter,
"CodeCacheDeletionWithoutFilter",
base::FEATURE_ENABLED_BY_DEFAULT);
// When enabled, event.movement is calculated in blink instead of in browser.
BASE_FEATURE(kConsolidatedMovementXY,
"ConsolidatedMovementXY",
base::FEATURE_ENABLED_BY_DEFAULT);
// Enables Blink cooperative scheduling.
BASE_FEATURE(kCooperativeScheduling,
"CooperativeScheduling",
base::FEATURE_DISABLED_BY_DEFAULT);
// Enables crash reporting via Reporting API.
// https://www.w3.org/TR/reporting/#crash-report
BASE_FEATURE(kCrashReporting,
"CrashReporting",
base::FEATURE_ENABLED_BY_DEFAULT);
// Enables support for the `Critical-CH` response header.
// https://github.com/WICG/client-hints-infrastructure/blob/master/reliability.md#critical-ch
BASE_FEATURE(kCriticalClientHint,
"CriticalClientHint",
base::FEATURE_ENABLED_BY_DEFAULT);
// Enable changing source dynamically for desktop capture.
BASE_FEATURE(kDesktopCaptureChangeSource,
"DesktopCaptureChangeSource",
base::FEATURE_ENABLED_BY_DEFAULT);
// Enable the device posture API.
// Tracking bug for enabling device posture API: https://crbug.com/1066842.
BASE_FEATURE(kDevicePosture,
"DevicePosture",
base::FEATURE_DISABLED_BY_DEFAULT);
// Controls whether the Digital Goods API is enabled.
// https://github.com/WICG/digital-goods/
BASE_FEATURE(kDigitalGoodsApi,
"DigitalGoodsApi",
#if BUILDFLAG(IS_ANDROID) || BUILDFLAG(IS_CHROMEOS)
base::FEATURE_ENABLED_BY_DEFAULT
#else
base::FEATURE_DISABLED_BY_DEFAULT
#endif
);
// Enables the DIPS (Detect Incidental Party State) feature.
// On by default to allow for collecting metrics. All potentially dangerous
// behavior (database persistence, DIPS deletion) will be gated by params.
BASE_FEATURE(kDIPS, "DIPS", base::FEATURE_ENABLED_BY_DEFAULT);
// Set whether DIPS persists its database to disk.
const base::FeatureParam<bool> kDIPSPersistedDatabaseEnabled{
&kDIPS, "persist_database", true};
// Set whether DIPS performs deletion.
const base::FeatureParam<bool> kDIPSDeletionEnabled{&kDIPS, "delete", false};
// Set the time period that Chrome will wait for before clearing storage for a
// site after it performs some action (e.g. bouncing the user or using storage)
// without user interaction.
const base::FeatureParam<base::TimeDelta> kDIPSGracePeriod{
&kDIPS, "grace_period", base::Hours(1)};
// Set the cadence at which Chrome will attempt to clear incidental state
// repeatedly.
const base::FeatureParam<base::TimeDelta> kDIPSTimerDelay{&kDIPS, "timer_delay",
base::Hours(1)};
// Sets how long DIPS maintains interactions and Web Authn Assertions (WAA) for
// a site.
//
// If a site in the DIPS database has an interaction or WAA within the grace
// period a DIPS-triggering action, then that action and all ensuing actions are
// protected from DIPS clearing until the interaction and WAA "expire" as set
// by this param.
// NOTE: Updating this param name (to reflect WAA) is deemed unnecessary as far
// as readability is concerned.
const base::FeatureParam<base::TimeDelta> kDIPSInteractionTtl{
&kDIPS, "interaction_ttl", base::Days(45)};
constexpr base::FeatureParam<content::DIPSTriggeringAction>::Option
kDIPSTriggeringActionOptions[] = {
{content::DIPSTriggeringAction::kNone, "none"},
{content::DIPSTriggeringAction::kStorage, "storage"},
{content::DIPSTriggeringAction::kBounce, "bounce"},
{content::DIPSTriggeringAction::kStatefulBounce, "stateful_bounce"}};
// Sets the actions which will trigger DIPS clearing for a site. The default is
// to set to kBounce, but can be overridden by Finch experiment groups,
// command-line flags, or chrome flags.
//
// Note: Maintain a matching nomenclature of the options with the feature flag
// entries at about_flags.cc.
const base::FeatureParam<content::DIPSTriggeringAction> kDIPSTriggeringAction{
&kDIPS, "triggering_action", content::DIPSTriggeringAction::kNone,
&kDIPSTriggeringActionOptions};
// Denotes the length of a time interval within which any client-side redirect
// is viewed as a bounce (provided all other criteria are equally met). The
// interval starts every time a page finishes a navigation (a.k.a. a commit is
// registered).
const base::FeatureParam<base::TimeDelta> kDIPSClientBounceDetectionTimeout{
&kDIPS, "client_bounce_detection_timeout", base::Seconds(10)};
// Enable document policy for configuring and restricting feature behavior.
BASE_FEATURE(kDocumentPolicy,
"DocumentPolicy",
base::FEATURE_ENABLED_BY_DEFAULT);
// Enable document policy negotiation mechanism.
BASE_FEATURE(kDocumentPolicyNegotiation,
"DocumentPolicyNegotiation",
base::FEATURE_DISABLED_BY_DEFAULT);
// Enable establishing the GPU channel early in renderer startup.
BASE_FEATURE(kEarlyEstablishGpuChannel,
"EarlyEstablishGpuChannel",
base::FEATURE_DISABLED_BY_DEFAULT);
// Requires documents embedded via <iframe>, etc, to explicitly opt-into the
// embedding: https://github.com/mikewest/embedding-requires-opt-in.
BASE_FEATURE(kEmbeddingRequiresOptIn,
"EmbeddingRequiresOptIn",
base::FEATURE_DISABLED_BY_DEFAULT);
// Enables canvas 2d methods BeginLayer and EndLayer.
BASE_FEATURE(kEnableCanvas2DLayers,
"EnableCanvas2DLayers",
base::FEATURE_DISABLED_BY_DEFAULT);
// Enables the Machine Learning Model Loader Web Platform API. Explainer:
// https://github.com/webmachinelearning/model-loader/blob/main/explainer.md
BASE_FEATURE(kEnableMachineLearningModelLoaderWebPlatformApi,
"EnableMachineLearningModelLoaderWebPlatformApi",
base::FEATURE_DISABLED_BY_DEFAULT);
// Enables service workers on chrome-untrusted:// urls.
BASE_FEATURE(kEnableServiceWorkersForChromeUntrusted,
"EnableServiceWorkersForChromeUntrusted",
base::FEATURE_DISABLED_BY_DEFAULT);
// Enables service workers on chrome:// urls.
BASE_FEATURE(kEnableServiceWorkersForChromeScheme,
"EnableServiceWorkersForChromeScheme",
base::FEATURE_DISABLED_BY_DEFAULT);
// If this feature is enabled and device permission is not granted by the user,
// media-device enumeration will provide at most one device per type and the
// device IDs will not be available.
BASE_FEATURE(kEnumerateDevicesHideDeviceIDs,
"EnumerateDevicesHideDeviceIDs",
base::FEATURE_ENABLED_BY_DEFAULT);
// Content counterpart of ExperimentalContentSecurityPolicyFeatures in
// third_party/blink/renderer/platform/runtime_enabled_features.json5. Enables
// experimental Content Security Policy features ('navigate-to').
BASE_FEATURE(kExperimentalContentSecurityPolicyFeatures,
"ExperimentalContentSecurityPolicyFeatures",
base::FEATURE_DISABLED_BY_DEFAULT);
// Enables JavaScript API to intermediate federated identity requests.
// Note that actual exposure of the FedCM API to web content is controlled
// by the flag in RuntimeEnabledFeatures on the blink side. See also
// the use of kSetOnlyIfOverridden in content/child/runtime_features.cc.
// We enable it here by default to support use in origin trials.
BASE_FEATURE(kFedCm, "FedCm", base::FEATURE_ENABLED_BY_DEFAULT);
// Field trial boolean parameter which indicates whether FedCM IDP sign-out
// is enabled.
const char kFedCmIdpSignoutFieldTrialParamName[] = "IdpSignout";
// Enables usage of the FedCM AccountAutoSelectedFlag feature. ChromeStatus
// entry: https://chromestatus.com/feature/5384360374566912
BASE_FEATURE(kFedCmAccountAutoSelectedFlag,
"FedCmAccountAutoSelectedFlag",
base::FEATURE_DISABLED_BY_DEFAULT);
// Enables usage of the FedCM Authz API.
BASE_FEATURE(kFedCmAuthz, "FedCmAuthz", base::FEATURE_DISABLED_BY_DEFAULT);
// Enables usage of the FedCM Error API.
BASE_FEATURE(kFedCmError, "FedCmError", base::FEATURE_DISABLED_BY_DEFAULT);
// Enables usage of the FedCM HostedDomain feature. ChromeStatus entry:
// https://chromestatus.com/feature/5202286040580096
BASE_FEATURE(kFedCmHostedDomain,
"FedCmHostedDomain",
base::FEATURE_ENABLED_BY_DEFAULT);
// Enables usage of the FedCM IdP Registration API.
BASE_FEATURE(kFedCmIdPRegistration,
"FedCmIdPregistration",
base::FEATURE_DISABLED_BY_DEFAULT);
// Enables usage of the FedCM API with metrics endpoint at the same time.
BASE_FEATURE(kFedCmMetricsEndpoint,
"FedCmMetricsEndpoint",
base::FEATURE_DISABLED_BY_DEFAULT);
// Enables usage of the FedCM API with multiple identity providers at the same
// time.
BASE_FEATURE(kFedCmMultipleIdentityProviders,
"FedCmMultipleIdentityProviders",
base::FEATURE_DISABLED_BY_DEFAULT);
// Enables usage of the FedCM API with the Selective Disclosure API at the same
// time.
BASE_FEATURE(kFedCmSelectiveDisclosure,
"FedCmSelectiveDisclosure",
base::FEATURE_DISABLED_BY_DEFAULT);
// Enables metrics collection for signin status mismatches. Also enables
// parsing the signin status HTTP headers.
// kFedCmIdpSigninStatusEnabled takes precedence over this feature flag.
BASE_FEATURE(kFedCmIdpSigninStatusMetrics,
"FedCmIdpSigninStatusMetrics",
base::FEATURE_ENABLED_BY_DEFAULT);
// Enables the IDP signin status API for use with FedCM, including avoiding
// network requests when not signed in and mismatch handling.
BASE_FEATURE(kFedCmIdpSigninStatusEnabled,
"FedCmIdpSigninStatusEnabled",
base::FEATURE_DISABLED_BY_DEFAULT);
// Enables bypassing the well-known file enforcement.
BASE_FEATURE(kFedCmWithoutWellKnownEnforcement,
"FedCmWithoutWellKnownEnforcement",
base::FEATURE_DISABLED_BY_DEFAULT);
// Enables browser-side focus verification when crossing fenced boundaries.
BASE_FEATURE(kFencedFramesEnforceFocus,
"FencedFramesEnforceFocus",
base::FEATURE_DISABLED_BY_DEFAULT);
// Enables the MDocs API in the IdentityCredential.
BASE_FEATURE(kWebIdentityMDocs,
"WebIdentityMDocs",
base::FEATURE_DISABLED_BY_DEFAULT);
// Enables usage of First Party Sets to determine cookie availability.
BASE_FEATURE(kFirstPartySets,
"FirstPartySets",
base::FEATURE_DISABLED_BY_DEFAULT);
// Controls whether to clear sites data on FPS transitions.
const base::FeatureParam<bool> kFirstPartySetsClearSiteDataOnChangedSets{
&kFirstPartySets, "FirstPartySetsClearSiteDataOnChangedSets", true};
// Controls how many sites are allowed to be in the Associated subset (ignoring
// ccTLD aliases).
const base::FeatureParam<int> kFirstPartySetsMaxAssociatedSites{
&kFirstPartySets, "FirstPartySetsMaxAssociatedSites", 3};
// Controls the maximum time duration an outermost frame navigation should be
// deferred by FPS initialization.
// Using 2s as the starting default timeout. This is based on the UMA metric
// `History.ClearBrowsingData.Duration.OriginDeletion`.
const base::FeatureParam<base::TimeDelta>
kFirstPartySetsNavigationThrottleTimeout{
&kFirstPartySets, "FirstPartySetsNavigationThrottleTimeout",
base::Seconds(2)};
// Enables fixes for matching src: local() for web fonts correctly against full
// font name or postscript name. Rolling out behind a flag, as enabling this
// enables a font indexer on Android which we need to test in the field first.
BASE_FEATURE(kFontSrcLocalMatching,
"FontSrcLocalMatching",
base::FEATURE_ENABLED_BY_DEFAULT);
#if !BUILDFLAG(IS_ANDROID)
// Feature controlling whether or not memory pressure signals will be forwarded
// to the GPU process.
BASE_FEATURE(kForwardMemoryPressureEventsToGpuProcess,
"ForwardMemoryPressureEventsToGpuProcess",
base::FEATURE_ENABLED_BY_DEFAULT);
#endif
// If enabled, limits the number of FLEDGE auctions that can be run between page
// load and unload -- any attempt to run more than this number of auctions will
// fail (return null to JavaScript).
BASE_FEATURE(kFledgeLimitNumAuctions,
"LimitNumFledgeAuctions",
base::FEATURE_DISABLED_BY_DEFAULT);
// The number of allowed auctions for each page load (load to unload).
const base::FeatureParam<int> kFledgeLimitNumAuctionsParam{
&kFledgeLimitNumAuctions, "max_auctions_per_page", 8};
// Enables scrollers inside Blink to store scroll offsets in fractional
// floating-point numbers rather than truncating to integers.
BASE_FEATURE(kFractionalScrollOffsets,
"FractionalScrollOffsets",
base::FEATURE_DISABLED_BY_DEFAULT);
// Puts network quality estimate related Web APIs in the holdback mode. When the
// holdback is enabled the related Web APIs return network quality estimate
// set by the experiment (regardless of the actual quality).
BASE_FEATURE(kNetworkQualityEstimatorWebHoldback,
"NetworkQualityEstimatorWebHoldback",
base::FEATURE_DISABLED_BY_DEFAULT);
// Determines if an extra brand version pair containing possibly escaped double
// quotes and escaped backslashed should be added to the Sec-CH-UA header
// (activated by kUserAgentClientHint)
BASE_FEATURE(kGreaseUACH, "GreaseUACH", base::FEATURE_ENABLED_BY_DEFAULT);
#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS)
// Supports proxying thread type changes of renderer processes to browser
// process and having browser process handle adjusting thread properties (nice
// value, c-group, latency sensitivity...) for renderers which have sandbox
// restrictions.
BASE_FEATURE(kHandleRendererThreadTypeChangesInBrowser,
"HandleRendererThreadTypeChangesInBrowser",
base::FEATURE_ENABLED_BY_DEFAULT);
#endif
// This is intended as a kill switch for the Idle Detection feature. To enable
// this feature, the experimental web platform features flag should be set,
// or the site should obtain an Origin Trial token.
BASE_FEATURE(kIdleDetection, "IdleDetection", base::FEATURE_ENABLED_BY_DEFAULT);
// A feature flag for the memory-backed code cache.
BASE_FEATURE(kInMemoryCodeCache,
"InMemoryCodeCache",
base::FEATURE_DISABLED_BY_DEFAULT);
// During compositor frame eviction, collect not only the surfaces that are
// reachable from the main frame tree, but also recurse into inner
// frames. Otherwise only toplevel frames and OOPIF are handled, and other
// cases, e.g. PDF tiles are ignored. See https://crbug.com/1360351 for details.
BASE_FEATURE(kInnerFrameCompositorSurfaceEviction,
"InnerFrameCompositorSurfaceEviction",
base::FEATURE_ENABLED_BY_DEFAULT);
// Kill switch for the GetInstalledRelatedApps API.
BASE_FEATURE(kInstalledApp, "InstalledApp", base::FEATURE_ENABLED_BY_DEFAULT);
// Allow Windows specific implementation for the GetInstalledRelatedApps API.
BASE_FEATURE(kInstalledAppProvider,
"InstalledAppProvider",
base::FEATURE_ENABLED_BY_DEFAULT);
// Enable support for isolated web apps. This will guard features like serving
// isolated web apps via the isolated-app:// scheme, and other advanced isolated
// app functionality. See https://github.com/reillyeon/isolated-web-apps for a
// general overview.
// Please don't use this feature flag directly to guard the IWA code. Use
// IsolatedWebAppsPolicy::AreIsolatedWebAppsEnabled() in the browser process
// or check kEnableIsolatedWebAppsInRenderer command line flag in the renderer
// process.
BASE_FEATURE(kIsolatedWebApps,
"IsolatedWebApps",
base::FEATURE_DISABLED_BY_DEFAULT);
// Enable support for IWA Controlled Frame. This gates allowing IWAs to provide
// a functional Controlled Frame tag to IWA apps.
// See https://github.com/chasephillips/controlled-frame/blob/main/EXPLAINER.md
// for more info.
BASE_FEATURE(kIwaControlledFrame,
"IwaControlledFrame",
base::FEATURE_DISABLED_BY_DEFAULT);
// Enables process isolation of fenced content (content inside fenced frames)
// from non-fenced content. See
// https://github.com/WICG/fenced-frame/blob/master/explainer/process_isolation.md
// for rationale and more details.
BASE_FEATURE(kIsolateFencedFrames,
"IsolateFencedFrames",
base::FEATURE_DISABLED_BY_DEFAULT);
// Alternative to switches::kIsolateOrigins, for turning on origin isolation.
// List of origins to isolate has to be specified via
// kIsolateOriginsFieldTrialParamName.
BASE_FEATURE(kIsolateOrigins,
"IsolateOrigins",
base::FEATURE_DISABLED_BY_DEFAULT);
const char kIsolateOriginsFieldTrialParamName[] = "OriginsList";
// Enables the TC39 Array grouping proposal.
BASE_FEATURE(kJavaScriptArrayGrouping,
"JavaScriptArrayGrouping",
base::FEATURE_DISABLED_BY_DEFAULT);
// Enables experimental JavaScript shared memory features.
BASE_FEATURE(kJavaScriptExperimentalSharedMemory,
"JavaScriptExperimentalSharedMemory",
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kLazyFrameLoading,
"LazyFrameLoading",
base::FEATURE_ENABLED_BY_DEFAULT);
// Enable lazy initialization of the media controls.
BASE_FEATURE(kLazyInitializeMediaControls,
"LazyInitializeMediaControls",
base::FEATURE_ENABLED_BY_DEFAULT);
// Using top-level document URL when create an enterprise report for legacy
// technologies usage
BASE_FEATURE(kLegacyTechReportTopLevelUrl,
"LegacyTechReportTopLevelUrl",
base::FEATURE_DISABLED_BY_DEFAULT);
// Configures whether Blink on Windows 8.0 and below should use out of process
// API font fallback calls to retrieve a fallback font family name as opposed to
// using a hard-coded font lookup table.
BASE_FEATURE(kLegacyWindowsDWriteFontFallback,
"LegacyWindowsDWriteFontFallback",
base::FEATURE_DISABLED_BY_DEFAULT);
BASE_FEATURE(kLogJsConsoleMessages,
"LogJsConsoleMessages",
#if BUILDFLAG(IS_ANDROID)
base::FEATURE_DISABLED_BY_DEFAULT
#else
base::FEATURE_ENABLED_BY_DEFAULT
#endif
);
// Enables a fix for a macOS IME Live Conversion issue. crbug.com/1328530.
BASE_FEATURE(kMacImeLiveConversionFix,
"MacImeLiveConversionFix",
base::FEATURE_ENABLED_BY_DEFAULT);
// Uses ThreadType::kCompositing for the main thread
BASE_FEATURE(kMainThreadCompositingPriority,
"MainThreadCompositingPriority",
base::FEATURE_ENABLED_BY_DEFAULT);
// The MBI mode controls whether or not communication over the
// AgentSchedulingGroup is ordered with respect to the render-process-global
// legacy IPC channel, as well as the granularity of AgentSchedulingGroup
// creation. This will break ordering guarantees between different agent
// scheduling groups (ordering withing a group is still preserved).
// DO NOT USE! The feature is not yet fully implemented. See crbug.com/1111231.
BASE_FEATURE(kMBIMode,
"MBIMode",
#if BUILDFLAG(MBI_MODE_PER_RENDER_PROCESS_HOST) || \
BUILDFLAG(MBI_MODE_PER_SITE_INSTANCE)
base::FEATURE_ENABLED_BY_DEFAULT
#else
base::FEATURE_DISABLED_BY_DEFAULT
#endif
);
const base::FeatureParam<MBIMode>::Option mbi_mode_types[] = {
{MBIMode::kLegacy, "legacy"},
{MBIMode::kEnabledPerRenderProcessHost, "per_render_process_host"},
{MBIMode::kEnabledPerSiteInstance, "per_site_instance"}};
const base::FeatureParam<MBIMode> kMBIModeParam {
&kMBIMode, "mode",
#if BUILDFLAG(MBI_MODE_PER_RENDER_PROCESS_HOST)
MBIMode::kEnabledPerRenderProcessHost,
#elif BUILDFLAG(MBI_MODE_PER_SITE_INSTANCE)
MBIMode::kEnabledPerSiteInstance,
#else
MBIMode::kLegacy,
#endif
&mbi_mode_types
};
// If this feature is enabled, media-device enumerations use a cache that is
// invalidated upon notifications sent by base::SystemMonitor. If disabled, the
// cache is considered invalid on every enumeration request.
BASE_FEATURE(kMediaDevicesSystemMonitorCache,
"MediaDevicesSystemMonitorCaching",
#if BUILDFLAG(IS_MAC) || BUILDFLAG(IS_WIN)
base::FEATURE_ENABLED_BY_DEFAULT
#else
base::FEATURE_DISABLED_BY_DEFAULT
#endif
);
// Allow cross-context transfer of MediaStreamTracks.
BASE_FEATURE(kMediaStreamTrackTransfer,
"MediaStreamTrackTransfer",
base::FEATURE_DISABLED_BY_DEFAULT);
// If enabled Mojo uses a dedicated background thread to listen for incoming
// IPCs. Otherwise it's configured to use Content's IO thread for that purpose.
BASE_FEATURE(kMojoDedicatedThread,
"MojoDedicatedThread",
base::FEATURE_DISABLED_BY_DEFAULT);
// Enables/disables the video capture service.
BASE_FEATURE(kMojoVideoCapture,
"MojoVideoCapture",
base::FEATURE_ENABLED_BY_DEFAULT);
// When NavigationNetworkResponseQueue is enabled, the browser will schedule
// some tasks related to navigation network responses in a kHigh priority
// queue.
BASE_FEATURE(kNavigationNetworkResponseQueue,
"NavigationNetworkResponseQueue",
base::FEATURE_DISABLED_BY_DEFAULT);
// When enabled, RenderFrameHostManager::CommitPending will also update the
// visibility of all child views, not just that of the main frame.
BASE_FEATURE(kNavigationUpdatesChildViewsVisibility,
"NavigationUpdatesChildViewsVisibility",
base::FEATURE_ENABLED_BY_DEFAULT);
// If the network service is enabled, runs it in process.
BASE_FEATURE(kNetworkServiceInProcess,
"NetworkServiceInProcess2",
#if BUILDFLAG(IS_ANDROID)
base::FEATURE_ENABLED_BY_DEFAULT
#else
base::FEATURE_DISABLED_BY_DEFAULT
#endif
);
// Kill switch for Web Notification content images.
BASE_FEATURE(kNotificationContentImage,
"NotificationContentImage",
base::FEATURE_ENABLED_BY_DEFAULT);
// Enables the notification trigger API.
BASE_FEATURE(kNotificationTriggers,
"NotificationTriggers",
base::FEATURE_ENABLED_BY_DEFAULT);
// Feature which holdbacks NoStatePrefetch on all surfaces.
BASE_FEATURE(kNoStatePrefetchHoldback,
"NoStatePrefetchHoldback",
base::FEATURE_DISABLED_BY_DEFAULT);
// Controls the Origin-Agent-Cluster header. Tracking bug
// https://crbug.com/1042415; flag removal bug (for when this is fully launched)
// https://crbug.com/1148057.
//
// The name is "OriginIsolationHeader" because that was the old name when the
// feature was under development.
BASE_FEATURE(kOriginIsolationHeader,
"OriginIsolationHeader",
base::FEATURE_ENABLED_BY_DEFAULT);
// History navigation in response to horizontal overscroll (aka gesture-nav).
BASE_FEATURE(kOverscrollHistoryNavigation,
"OverscrollHistoryNavigation",
base::FEATURE_ENABLED_BY_DEFAULT);
// Setting to control overscroll history navigation.
BASE_FEATURE(kOverscrollHistoryNavigationSetting,
"OverscrollHistoryNavigationSetting",
base::FEATURE_DISABLED_BY_DEFAULT);
// Whether web apps can run periodic tasks upon network connectivity.
BASE_FEATURE(kPeriodicBackgroundSync,
"PeriodicBackgroundSync",
base::FEATURE_DISABLED_BY_DEFAULT);
// Kill-switch to introduce a compatibility breaking restriction.
BASE_FEATURE(kPepperCrossOriginRedirectRestriction,
"PepperCrossOriginRedirectRestriction",
base::FEATURE_ENABLED_BY_DEFAULT);
// Enables Persistent Origin Trials. It causes tokens for an origin to be stored
// and persisted for the next navigation. This way, an origin trial can affect
// things before receiving the response, for instance it can affect the next
// navigation's network request.
BASE_FEATURE(kPersistentOriginTrials,
"PersistentOriginTrials",
base::FEATURE_ENABLED_BY_DEFAULT);
// Enables process sharing for sites that do not require a dedicated process
// by using a default SiteInstance. Default SiteInstances will only be used
// on platforms that do not use full site isolation.
// Note: This feature is mutally exclusive with
// kProcessSharingWithStrictSiteInstances. Only one of these should be enabled
// at a time.
BASE_FEATURE(kProcessSharingWithDefaultSiteInstances,
"ProcessSharingWithDefaultSiteInstances",
base::FEATURE_ENABLED_BY_DEFAULT);
// Whether cross-site frames should get their own SiteInstance even when
// strict site isolation is disabled. These SiteInstances will still be
// grouped into a shared default process based on BrowsingInstance.
BASE_FEATURE(kProcessSharingWithStrictSiteInstances,
"ProcessSharingWithStrictSiteInstances",
base::FEATURE_DISABLED_BY_DEFAULT);
// Tells the RenderFrameHost to send beforeunload messages on a different
// local frame interface which will handle the messages at a higher priority.
BASE_FEATURE(kHighPriorityBeforeUnload,
"HighPriorityBeforeUnload",
base::FEATURE_DISABLED_BY_DEFAULT);
// If enabled, then an updated prefetch request limit policy will be used that
// separates eager and non-eager prefetches, and allows for evictions.
BASE_FEATURE(kPrefetchNewLimits,
"PrefetchNewLimits",
base::FEATURE_DISABLED_BY_DEFAULT);
// Preload cookie database on NetworkContext creation.
BASE_FEATURE(kPreloadCookies,
"PreloadCookies",
base::FEATURE_DISABLED_BY_DEFAULT);
// Preloading holdback feature disables preloading (e.g., preconnect, prefetch,
// and prerender) on all predictors. This is useful in comparing the impact of
// blink::features::kPrerender2 experiment with and without them.
// This Feature allows configuring preloading features via a parameter string.
// See content/browser/preloading/preloading_config.cc to see how to use this
// feature.
BASE_FEATURE(kPreloadingConfig,
"PreloadingConfig",
base::FEATURE_ENABLED_BY_DEFAULT);
// Enables exposure of the core milestone 1 (M1) APIs in the renderer without an
// origin trial token: Attribution Reporting, FLEDGE, Topics.
BASE_FEATURE(kPrivacySandboxAdsAPIsM1Override,
"PrivacySandboxAdsAPIsM1Override",
base::FEATURE_DISABLED_BY_DEFAULT);
// Enables exposure of ads APIs in the renderer: Attribution Reporting,
// FLEDGE, Topics, along with a number of other features actively in development
// within these APIs.
BASE_FEATURE(kPrivacySandboxAdsAPIsOverride,
"PrivacySandboxAdsAPIsOverride",
base::FEATURE_DISABLED_BY_DEFAULT);
// Enables Private Network Access checks for all types of web workers.
//
// This affects initial worker script fetches, fetches initiated by workers
// themselves, and service worker update fetches.
//
// The exact checks run are the same as for other document subresources, and
// depend on the state of other Private Network Access feature flags:
//
// - `kBlockInsecurePrivateNetworkRequests`
// - `kPrivateNetworkAccessSendPreflights`
// - `kPrivateNetworkAccessRespectPreflightResults`
//
BASE_FEATURE(kPrivateNetworkAccessForWorkers,
"PrivateNetworkAccessForWorkers",
base::FEATURE_ENABLED_BY_DEFAULT);
// Enables Private Network Access checks in warning mode for all types of web
// workers.
//
// Does nothing if `kPrivateNetworkAccessForWorkers` is disabled.
//
// If both this and `kPrivateNetworkAccessForWorkers` are enabled, then PNA
// preflight requests for workers are not required to succeed. If one fails, a
// warning is simply displayed in DevTools.
BASE_FEATURE(kPrivateNetworkAccessForWorkersWarningOnly,
"PrivateNetworkAccessForWorkersWarningOnly",
base::FEATURE_ENABLED_BY_DEFAULT);
// Enables Private Network Access checks for iframe navigations.
//
// The exact checks run are the same as for document subresources, and depend on
// the state of other Private Network Access feature flags:
// - `kBlockInsecurePrivateNetworkRequests`
// - `kPrivateNetworkAccessSendPreflights`
// - `kPrivateNetworkAccessRespectPreflightResults`
BASE_FEATURE(kPrivateNetworkAccessForIframes,
"PrivateNetworkAccessForIframes",
base::FEATURE_DISABLED_BY_DEFAULT);
// Enables Private Network Access checks in warning mode for iframe navigations.
//
// Does nothing if `kPrivateNetworkAccessForIframes` is disabled.
//
// If both this and `kPrivateNetworkAccessForIframes` are enabled, then PNA
// preflight requests for iframe navigations are not required to succeed. If
// one fails, a warning is simply displayed in DevTools.
BASE_FEATURE(kPrivateNetworkAccessForIframesWarningOnly,
"PrivateNetworkAccessForIframesWarningOnly",
base::FEATURE_DISABLED_BY_DEFAULT);
// Requires that CORS preflight requests succeed before sending private network
// requests. This flag implies `kPrivateNetworkAccessSendPreflights`.
// See: https://wicg.github.io/private-network-access/#cors-preflight
BASE_FEATURE(kPrivateNetworkAccessRespectPreflightResults,
"PrivateNetworkAccessRespectPreflightResults",
base::FEATURE_DISABLED_BY_DEFAULT);
// Enables sending CORS preflight requests ahead of private network requests.
// See: https://wicg.github.io/private-network-access/#cors-preflight
BASE_FEATURE(kPrivateNetworkAccessSendPreflights,
"PrivateNetworkAccessSendPreflights",
base::FEATURE_ENABLED_BY_DEFAULT);
// Enable the ProactivelySwapBrowsingInstance experiment. A browsing instance
// represents a set of frames that can script each other. Currently, Chrome does
// not always switch BrowsingInstance when navigating in between two unrelated
// pages. This experiment makes Chrome swap BrowsingInstances for cross-site
// HTTP(S) navigations when the BrowsingInstance doesn't contain any other
// windows.
BASE_FEATURE(kProactivelySwapBrowsingInstance,
"ProactivelySwapBrowsingInstance",
base::FEATURE_DISABLED_BY_DEFAULT);
// Enables origin-keyed processes by default, unless origins opt out using
// Origin-Agent-Cluster: ?0. This feature only takes effect if the Blink feature
// OriginAgentClusterDefaultEnable is enabled, since origin-keyed processes
// require origin-agent-clusters.
BASE_FEATURE(kOriginKeyedProcessesByDefault,
"OriginKeyedProcessesByDefault",
base::FEATURE_DISABLED_BY_DEFAULT);
// Fires the `pushsubscriptionchange` event defined here:
// https://w3c.github.io/push-api/#the-pushsubscriptionchange-event
// for subscription refreshes, revoked permissions or subscription losses
BASE_FEATURE(kPushSubscriptionChangeEvent,
"PushSubscriptionChangeEvent",
base::FEATURE_DISABLED_BY_DEFAULT);
// When enabled, queues navigations instead of cancelling the previous
// navigation if the previous navigation is already waiting for commit.
// See https://crbug.com/838348 and https://crbug.com/1220337.
BASE_FEATURE(kQueueNavigationsWhileWaitingForCommit,
"QueueNavigationsWhileWaitingForCommit",
base::FEATURE_DISABLED_BY_DEFAULT);
// When enabled, sends SubresourceResponseStarted IPC only when the user has
// allowed any HTTPS-related warning exceptions. From field data, (see
// `SSL.Experimental.SubresourceResponse`), ~100% of subresource notifications
// are not required, since allowing certificate exceptions by users is a rare
// event. Hence, if user has never allowed any certificate or HTTP exceptions,
// notifications are not sent to the browser. Once we start sending these
// messages, we keep sending them until all exceptions are revoked and browser
// restart occurs.
BASE_FEATURE(kReduceSubresourceResponseStartedIPC,
"ReduceSubresourceResponseStartedIPC",
base::FEATURE_DISABLED_BY_DEFAULT);
// Causes hidden tabs with crashed subframes to be marked for reload, meaning
// that if a user later switches to that tab, the current page will be
// reloaded. This will hide crashed subframes from the user at the cost of
// extra reloads.
BASE_FEATURE(kReloadHiddenTabsWithCrashedSubframes,
"ReloadHiddenTabsWithCrashedSubframes",
#if BUILDFLAG(IS_ANDROID)
base::FEATURE_ENABLED_BY_DEFAULT
#else
base::FEATURE_DISABLED_BY_DEFAULT
#endif
);
// RenderDocument:
//
// Currently, a RenderFrameHost represents neither a frame nor a document, but a
// frame in a given process. A new one is created after a different-process
// navigation. The goal of RenderDocument is to get a new one for each document
// instead.
//
// Design doc: https://bit.ly/renderdocument
// Main bug tracker: https://crbug.com/936696