Avi Drissman | 4e1b7bc3 | 2022-09-15 14:03:50 | [diff] [blame] | 1 | // Copyright 2022 The Chromium Authors |
Max Curran | 6c2835ea | 2022-03-07 19:52:38 | [diff] [blame] | 2 | // Use of this source code is governed by a BSD-style license that can be |
| 3 | // found in the LICENSE file. |
| 4 | |
Sreeja Kamishetty | f66553a | 2022-07-14 17:41:27 | [diff] [blame] | 5 | #include "content/browser/preloading/prefetch/prefetch_features.h" |
Hiroshige Hayashizaki | 583b496 | 2025-08-19 18:58:26 | [diff] [blame] | 6 | |
Kouhei Ueno | 6a350f0 | 2023-11-17 05:39:23 | [diff] [blame] | 7 | #include "base/feature_list.h" |
Hiroshige Hayashizaki | 583b496 | 2025-08-19 18:58:26 | [diff] [blame] | 8 | #include "content/public/browser/content_browser_client.h" |
| 9 | #include "content/public/common/content_client.h" |
Max Curran | 6c2835ea | 2022-03-07 19:52:38 | [diff] [blame] | 10 | |
Jeremy Roman | e77bc6c | 2023-12-08 07:07:34 | [diff] [blame] | 11 | namespace features { |
Max Curran | 6c2835ea | 2022-03-07 19:52:38 | [diff] [blame] | 12 | |
Xiaohan Wang | 2b2aabb | 2025-08-19 23:42:30 | [diff] [blame] | 13 | BASE_FEATURE(PrefetchTesting, |
kenoss | 557dafa | 2025-07-01 10:38:35 | [diff] [blame] | 14 | base::FEATURE_DISABLED_BY_DEFAULT); |
Hiroshige Hayashizaki | c0b6aea | 2023-10-17 21:56:43 | [diff] [blame] | 15 | |
kenoss | 24fec1b | 2025-02-26 02:30:27 | [diff] [blame] | 16 | // 4MiB, 2**20 * 4. |
Hiroshige Hayashizaki | c0b6aea | 2023-10-17 21:56:43 | [diff] [blame] | 17 | const base::FeatureParam<int> kPrefetchReusableBodySizeLimit{ |
kenoss | 557dafa | 2025-07-01 10:38:35 | [diff] [blame] | 18 | &kPrefetchTesting, "kPrefetchReusableBodySizeLimit", 4194304}; |
| 19 | |
Xiaohan Wang | 2b2aabb | 2025-08-19 23:42:30 | [diff] [blame] | 20 | BASE_FEATURE(PrefetchUseContentRefactor, |
kenoss | 557dafa | 2025-07-01 10:38:35 | [diff] [blame] | 21 | base::FEATURE_ENABLED_BY_DEFAULT); |
Hiroshige Hayashizaki | c0b6aea | 2023-10-17 21:56:43 | [diff] [blame] | 22 | |
Xiaohan Wang | 2b2aabb | 2025-08-19 23:42:30 | [diff] [blame] | 23 | BASE_FEATURE(PrefetchNIKScope, |
Kouhei Ueno | d47c0bbc | 2023-11-15 23:16:17 | [diff] [blame] | 24 | base::FEATURE_DISABLED_BY_DEFAULT); |
| 25 | |
Xiaohan Wang | 2b2aabb | 2025-08-19 23:42:30 | [diff] [blame] | 26 | BASE_FEATURE(PrefetchClientHints, |
Jeremy Roman | 8171c8cc | 2024-02-13 22:07:03 | [diff] [blame] | 27 | base::FEATURE_ENABLED_BY_DEFAULT); |
Jeremy Roman | 586b5ec | 2024-02-13 15:14:40 | [diff] [blame] | 28 | |
| 29 | constexpr base::FeatureParam<PrefetchClientHintsCrossSiteBehavior>::Option |
| 30 | kPrefetchClientHintsCrossSiteBehaviorOptions[] = { |
| 31 | {PrefetchClientHintsCrossSiteBehavior::kNone, "none"}, |
| 32 | {PrefetchClientHintsCrossSiteBehavior::kLowEntropy, "low_entropy"}, |
| 33 | {PrefetchClientHintsCrossSiteBehavior::kAll, "all"}, |
| 34 | }; |
| 35 | const base::FeatureParam<PrefetchClientHintsCrossSiteBehavior> |
| 36 | kPrefetchClientHintsCrossSiteBehavior{ |
| 37 | &kPrefetchClientHints, "cross_site_behavior", |
| 38 | PrefetchClientHintsCrossSiteBehavior::kLowEntropy, |
| 39 | &kPrefetchClientHintsCrossSiteBehaviorOptions}; |
| 40 | |
Xiaohan Wang | 2b2aabb | 2025-08-19 23:42:30 | [diff] [blame] | 41 | BASE_FEATURE(PrefetchStateContaminationMitigation, |
Jeremy Roman | e561b41 | 2024-02-15 18:31:34 | [diff] [blame] | 42 | base::FEATURE_ENABLED_BY_DEFAULT); |
| 43 | |
Jeremy Roman | 3146e87 | 2024-03-12 18:57:24 | [diff] [blame] | 44 | const base::FeatureParam<bool> |
| 45 | kPrefetchStateContaminationSwapsBrowsingContextGroup{ |
Jeremy Roman | aed9149 | 2024-07-24 17:14:51 | [diff] [blame] | 46 | &kPrefetchStateContaminationMitigation, "swaps_bcg", true}; |
Jeremy Roman | 3146e87 | 2024-03-12 18:57:24 | [diff] [blame] | 47 | |
Xiaohan Wang | 2b2aabb | 2025-08-19 23:42:30 | [diff] [blame] | 48 | BASE_FEATURE(PrefetchServiceWorkerNoFetchHandlerFix, |
Hiroshige Hayashizaki | e354fb63 | 2025-08-04 21:31:39 | [diff] [blame] | 49 | base::FEATURE_ENABLED_BY_DEFAULT); |
Hiroshige Hayashizaki | 13aac4c | 2024-11-22 21:03:19 | [diff] [blame] | 50 | |
Xiaohan Wang | 2b2aabb | 2025-08-19 23:42:30 | [diff] [blame] | 51 | BASE_FEATURE(PrefetchNetworkPriorityForEmbedders, |
Taiyo Mizuhashi | 2bef668 | 2025-03-07 08:58:45 | [diff] [blame] | 52 | base::FEATURE_ENABLED_BY_DEFAULT); |
| 53 | |
Xiaohan Wang | 2b2aabb | 2025-08-19 23:42:30 | [diff] [blame] | 54 | BASE_FEATURE(PrefetchBumpNetworkPriorityAfterBeingServed, |
Taiyo Mizuhashi | 06c0436a | 2025-03-28 15:07:02 | [diff] [blame] | 55 | base::FEATURE_ENABLED_BY_DEFAULT); |
| 56 | |
Xiaohan Wang | 2b2aabb | 2025-08-19 23:42:30 | [diff] [blame] | 57 | BASE_FEATURE(PrefetchServiceWorker, |
Hiroshige Hayashizaki | fc303d9 | 2025-07-28 00:02:55 | [diff] [blame] | 58 | base::FEATURE_ENABLED_BY_DEFAULT); |
Hiroshige Hayashizaki | 0cc9782 | 2025-03-14 00:58:44 | [diff] [blame] | 59 | |
Hiroki Nakagawa | fc2a24d | 2025-05-23 08:06:23 | [diff] [blame] | 60 | bool IsPrefetchServiceWorkerEnabled(content::BrowserContext* browser_context) { |
| 61 | return base::FeatureList::IsEnabled(kPrefetchServiceWorker) && |
| 62 | content::GetContentClient()->browser()->IsPrefetchWithServiceWorkerAllowed( |
| 63 | browser_context); |
| 64 | } |
| 65 | |
Xiaohan Wang | 2b2aabb | 2025-08-19 23:42:30 | [diff] [blame] | 66 | BASE_FEATURE(PrefetchBrowsingDataRemoval, |
Taiyo Mizuhashi | b9780f2 | 2025-03-28 18:29:03 | [diff] [blame] | 67 | base::FEATURE_ENABLED_BY_DEFAULT); |
| 68 | |
Xiaohan Wang | 2b2aabb | 2025-08-19 23:42:30 | [diff] [blame] | 69 | BASE_FEATURE(PrefetchScheduler, |
Ken Okada | f5daa7f | 2025-08-07 10:46:17 | [diff] [blame] | 70 | base::FEATURE_DISABLED_BY_DEFAULT); |
kenoss | 0a56736 | 2025-05-16 11:18:55 | [diff] [blame] | 71 | const base::FeatureParam<bool> kPrefetchSchedulerProgressSyncBestEffort{ |
| 72 | &kPrefetchScheduler, "kPrefetchSchedulerProgressSyncBestEffort", true}; |
kenoss | 1b8ebc2 | 2025-04-04 00:11:35 | [diff] [blame] | 73 | |
Xiaohan Wang | 2b2aabb | 2025-08-19 23:42:30 | [diff] [blame] | 74 | BASE_FEATURE(PrefetchSchedulerTesting, |
kenoss | 1b8ebc2 | 2025-04-04 00:11:35 | [diff] [blame] | 75 | base::FEATURE_DISABLED_BY_DEFAULT); |
| 76 | const base::FeatureParam<size_t> |
| 77 | kPrefetchSchedulerTestingActiveSetSizeLimitForBase{ |
| 78 | &kPrefetchSchedulerTesting, |
| 79 | "kPrefetchSchedulerTestingActiveSetSizeLimitForBase", 1}; |
| 80 | const base::FeatureParam<size_t> |
| 81 | kPrefetchSchedulerTestingActiveSetSizeLimitForBurst{ |
| 82 | &kPrefetchSchedulerTesting, |
| 83 | "kPrefetchSchedulerTestingActiveSetSizeLimitForBurst", 1}; |
| 84 | |
Xiaohan Wang | 2b2aabb | 2025-08-19 23:42:30 | [diff] [blame] | 85 | BASE_FEATURE(PrefetchQueueingPartialFixWithoutScheduler, |
Taiyo Mizuhashi | 4e624a2 | 2025-05-15 11:28:54 | [diff] [blame] | 86 | base::FEATURE_ENABLED_BY_DEFAULT); |
| 87 | |
Xiaohan Wang | 2b2aabb | 2025-08-19 23:42:30 | [diff] [blame] | 88 | BASE_FEATURE(PrefetchCanaryCheckerParams, |
Taiyo Mizuhashi | 576a6297 | 2025-06-23 11:09:25 | [diff] [blame] | 89 | base::FEATURE_ENABLED_BY_DEFAULT); |
Taiyo Mizuhashi | 98e3dea | 2025-06-23 18:32:58 | [diff] [blame] | 90 | |
Xiaohan Wang | 2b2aabb | 2025-08-19 23:42:30 | [diff] [blame] | 91 | BASE_FEATURE(PrefetchMultipleActiveSetSizeLimitForBase, |
Taiyo Mizuhashi | 98e3dea | 2025-06-23 18:32:58 | [diff] [blame] | 92 | base::FEATURE_DISABLED_BY_DEFAULT); |
| 93 | const base::FeatureParam<size_t> |
| 94 | kPrefetchMultipleActiveSetSizeLimitForBaseValue{ |
| 95 | &kPrefetchMultipleActiveSetSizeLimitForBase, |
| 96 | "prefetch_multiple_active_set_size_limit_for_base_value", 2}; |
Jeremy Roman | e77bc6c | 2023-12-08 07:07:34 | [diff] [blame] | 97 | } // namespace features |