blob: 7da6ec8591194cf1a78b9acaebbf71f2e2858730 [file] [log] [blame]
Avi Drissman4e1b7bc32022-09-15 14:03:501// Copyright 2022 The Chromium Authors
Max Curran6c2835ea2022-03-07 19:52:382// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
Sreeja Kamishettyf66553a2022-07-14 17:41:275#include "content/browser/preloading/prefetch/prefetch_features.h"
Hiroshige Hayashizaki583b4962025-08-19 18:58:266
Kouhei Ueno6a350f02023-11-17 05:39:237#include "base/feature_list.h"
Hiroshige Hayashizaki583b4962025-08-19 18:58:268#include "content/public/browser/content_browser_client.h"
9#include "content/public/common/content_client.h"
Max Curran6c2835ea2022-03-07 19:52:3810
Jeremy Romane77bc6c2023-12-08 07:07:3411namespace features {
Max Curran6c2835ea2022-03-07 19:52:3812
Xiaohan Wang2b2aabb2025-08-19 23:42:3013BASE_FEATURE(PrefetchTesting,
kenoss557dafa2025-07-01 10:38:3514 base::FEATURE_DISABLED_BY_DEFAULT);
Hiroshige Hayashizakic0b6aea2023-10-17 21:56:4315
kenoss24fec1b2025-02-26 02:30:2716// 4MiB, 2**20 * 4.
Hiroshige Hayashizakic0b6aea2023-10-17 21:56:4317const base::FeatureParam<int> kPrefetchReusableBodySizeLimit{
kenoss557dafa2025-07-01 10:38:3518 &kPrefetchTesting, "kPrefetchReusableBodySizeLimit", 4194304};
19
Xiaohan Wang2b2aabb2025-08-19 23:42:3020BASE_FEATURE(PrefetchUseContentRefactor,
kenoss557dafa2025-07-01 10:38:3521 base::FEATURE_ENABLED_BY_DEFAULT);
Hiroshige Hayashizakic0b6aea2023-10-17 21:56:4322
Xiaohan Wang2b2aabb2025-08-19 23:42:3023BASE_FEATURE(PrefetchNIKScope,
Kouhei Uenod47c0bbc2023-11-15 23:16:1724 base::FEATURE_DISABLED_BY_DEFAULT);
25
Xiaohan Wang2b2aabb2025-08-19 23:42:3026BASE_FEATURE(PrefetchClientHints,
Jeremy Roman8171c8cc2024-02-13 22:07:0327 base::FEATURE_ENABLED_BY_DEFAULT);
Jeremy Roman586b5ec2024-02-13 15:14:4028
29constexpr base::FeatureParam<PrefetchClientHintsCrossSiteBehavior>::Option
30 kPrefetchClientHintsCrossSiteBehaviorOptions[] = {
31 {PrefetchClientHintsCrossSiteBehavior::kNone, "none"},
32 {PrefetchClientHintsCrossSiteBehavior::kLowEntropy, "low_entropy"},
33 {PrefetchClientHintsCrossSiteBehavior::kAll, "all"},
34};
35const base::FeatureParam<PrefetchClientHintsCrossSiteBehavior>
36 kPrefetchClientHintsCrossSiteBehavior{
37 &kPrefetchClientHints, "cross_site_behavior",
38 PrefetchClientHintsCrossSiteBehavior::kLowEntropy,
39 &kPrefetchClientHintsCrossSiteBehaviorOptions};
40
Xiaohan Wang2b2aabb2025-08-19 23:42:3041BASE_FEATURE(PrefetchStateContaminationMitigation,
Jeremy Romane561b412024-02-15 18:31:3442 base::FEATURE_ENABLED_BY_DEFAULT);
43
Jeremy Roman3146e872024-03-12 18:57:2444const base::FeatureParam<bool>
45 kPrefetchStateContaminationSwapsBrowsingContextGroup{
Jeremy Romanaed91492024-07-24 17:14:5146 &kPrefetchStateContaminationMitigation, "swaps_bcg", true};
Jeremy Roman3146e872024-03-12 18:57:2447
Xiaohan Wang2b2aabb2025-08-19 23:42:3048BASE_FEATURE(PrefetchServiceWorkerNoFetchHandlerFix,
Hiroshige Hayashizakie354fb632025-08-04 21:31:3949 base::FEATURE_ENABLED_BY_DEFAULT);
Hiroshige Hayashizaki13aac4c2024-11-22 21:03:1950
Xiaohan Wang2b2aabb2025-08-19 23:42:3051BASE_FEATURE(PrefetchNetworkPriorityForEmbedders,
Taiyo Mizuhashi2bef6682025-03-07 08:58:4552 base::FEATURE_ENABLED_BY_DEFAULT);
53
Xiaohan Wang2b2aabb2025-08-19 23:42:3054BASE_FEATURE(PrefetchBumpNetworkPriorityAfterBeingServed,
Taiyo Mizuhashi06c0436a2025-03-28 15:07:0255 base::FEATURE_ENABLED_BY_DEFAULT);
56
Xiaohan Wang2b2aabb2025-08-19 23:42:3057BASE_FEATURE(PrefetchServiceWorker,
Hiroshige Hayashizakifc303d92025-07-28 00:02:5558 base::FEATURE_ENABLED_BY_DEFAULT);
Hiroshige Hayashizaki0cc97822025-03-14 00:58:4459
Hiroki Nakagawafc2a24d2025-05-23 08:06:2360bool IsPrefetchServiceWorkerEnabled(content::BrowserContext* browser_context) {
61 return base::FeatureList::IsEnabled(kPrefetchServiceWorker) &&
62 content::GetContentClient()->browser()->IsPrefetchWithServiceWorkerAllowed(
63 browser_context);
64}
65
Xiaohan Wang2b2aabb2025-08-19 23:42:3066BASE_FEATURE(PrefetchBrowsingDataRemoval,
Taiyo Mizuhashib9780f22025-03-28 18:29:0367 base::FEATURE_ENABLED_BY_DEFAULT);
68
Xiaohan Wang2b2aabb2025-08-19 23:42:3069BASE_FEATURE(PrefetchScheduler,
Ken Okadaf5daa7f2025-08-07 10:46:1770 base::FEATURE_DISABLED_BY_DEFAULT);
kenoss0a567362025-05-16 11:18:5571const base::FeatureParam<bool> kPrefetchSchedulerProgressSyncBestEffort{
72 &kPrefetchScheduler, "kPrefetchSchedulerProgressSyncBestEffort", true};
kenoss1b8ebc22025-04-04 00:11:3573
Xiaohan Wang2b2aabb2025-08-19 23:42:3074BASE_FEATURE(PrefetchSchedulerTesting,
kenoss1b8ebc22025-04-04 00:11:3575 base::FEATURE_DISABLED_BY_DEFAULT);
76const base::FeatureParam<size_t>
77 kPrefetchSchedulerTestingActiveSetSizeLimitForBase{
78 &kPrefetchSchedulerTesting,
79 "kPrefetchSchedulerTestingActiveSetSizeLimitForBase", 1};
80const base::FeatureParam<size_t>
81 kPrefetchSchedulerTestingActiveSetSizeLimitForBurst{
82 &kPrefetchSchedulerTesting,
83 "kPrefetchSchedulerTestingActiveSetSizeLimitForBurst", 1};
84
Xiaohan Wang2b2aabb2025-08-19 23:42:3085BASE_FEATURE(PrefetchQueueingPartialFixWithoutScheduler,
Taiyo Mizuhashi4e624a22025-05-15 11:28:5486 base::FEATURE_ENABLED_BY_DEFAULT);
87
Xiaohan Wang2b2aabb2025-08-19 23:42:3088BASE_FEATURE(PrefetchCanaryCheckerParams,
Taiyo Mizuhashi576a62972025-06-23 11:09:2589 base::FEATURE_ENABLED_BY_DEFAULT);
Taiyo Mizuhashi98e3dea2025-06-23 18:32:5890
Xiaohan Wang2b2aabb2025-08-19 23:42:3091BASE_FEATURE(PrefetchMultipleActiveSetSizeLimitForBase,
Taiyo Mizuhashi98e3dea2025-06-23 18:32:5892 base::FEATURE_DISABLED_BY_DEFAULT);
93const base::FeatureParam<size_t>
94 kPrefetchMultipleActiveSetSizeLimitForBaseValue{
95 &kPrefetchMultipleActiveSetSizeLimitForBase,
96 "prefetch_multiple_active_set_size_limit_for_base_value", 2};
Jeremy Romane77bc6c2023-12-08 07:07:3497} // namespace features