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 | #ifndef CONTENT_BROWSER_PRELOADING_PREFETCH_PREFETCH_FEATURES_H_ |
| 6 | #define CONTENT_BROWSER_PRELOADING_PREFETCH_PREFETCH_FEATURES_H_ |
Max Curran | 6c2835ea | 2022-03-07 19:52:38 | [diff] [blame] | 7 | |
| 8 | #include "base/feature_list.h" |
Hiroshige Hayashizaki | c0b6aea | 2023-10-17 21:56:43 | [diff] [blame] | 9 | #include "base/metrics/field_trial_params.h" |
Max Curran | 6c2835ea | 2022-03-07 19:52:38 | [diff] [blame] | 10 | #include "content/common/content_export.h" |
| 11 | |
Hiroki Nakagawa | fc2a24d | 2025-05-23 08:06:23 | [diff] [blame] | 12 | namespace content { |
| 13 | class BrowserContext; |
| 14 | } // namespace content |
| 15 | |
Jeremy Roman | e77bc6c | 2023-12-08 07:07:34 | [diff] [blame] | 16 | namespace features { |
Max Curran | 6c2835ea | 2022-03-07 19:52:38 | [diff] [blame] | 17 | |
kenoss | 557dafa | 2025-07-01 10:38:35 | [diff] [blame] | 18 | // Controls params for tests of prefetch. |
| 19 | CONTENT_EXPORT BASE_DECLARE_FEATURE(kPrefetchTesting); |
| 20 | |
| 21 | // The size limit of body size in bytes that can be reused in |
| 22 | // `PrefetchDataPipeTee`. |
| 23 | CONTENT_EXPORT extern const base::FeatureParam<int> |
| 24 | kPrefetchReusableBodySizeLimit; |
| 25 | |
Lingqi Chi | fb4bd46 | 2024-08-21 01:29:56 | [diff] [blame] | 26 | // This feature was used to launch the prefetch migration from embedder layer to |
| 27 | // content/, and this work has finished and the old implemnetation was deleted. |
| 28 | // Now this flag is just for injecting parameters through field trials as an |
| 29 | // umberella feature. |
Daniel Cheng | 0abd9f3 | 2022-09-22 04:20:11 | [diff] [blame] | 30 | CONTENT_EXPORT BASE_DECLARE_FEATURE(kPrefetchUseContentRefactor); |
Max Curran | 6c2835ea | 2022-03-07 19:52:38 | [diff] [blame] | 31 | |
Kouhei Ueno | 5ad2196 | 2023-11-16 04:38:54 | [diff] [blame] | 32 | // If enabled, navigational prefetch is scoped to the referring document's |
| 33 | // network isolation key instead of the old behavior of the referring document |
| 34 | // itself. See crbug.com/1502326 |
Kouhei Ueno | d47c0bbc | 2023-11-15 23:16:17 | [diff] [blame] | 35 | BASE_DECLARE_FEATURE(kPrefetchNIKScope); |
| 36 | |
Jeremy Roman | 586b5ec | 2024-02-13 15:14:40 | [diff] [blame] | 37 | // If enabled, prefetches may include client hints request headers. |
| 38 | CONTENT_EXPORT BASE_DECLARE_FEATURE(kPrefetchClientHints); |
| 39 | |
| 40 | // This allows controlling the behavior of client hints with prefetches in case |
| 41 | // an unexpected issue arises with the planned behavior, or one is suspected and |
| 42 | // we want to debug more easily. |
| 43 | // TODO(crbug.com/41497015): Remove this control once a behavior is shipped and |
| 44 | // stabilized. |
| 45 | enum class PrefetchClientHintsCrossSiteBehavior { |
| 46 | // Send no client hints cross-site. |
| 47 | kNone, |
| 48 | // Send only the "low-entropy" hints which are included by default. |
| 49 | kLowEntropy, |
| 50 | // Send all client hints that would normally be sent. |
| 51 | kAll, |
| 52 | }; |
| 53 | CONTENT_EXPORT extern const base::FeatureParam< |
| 54 | PrefetchClientHintsCrossSiteBehavior> |
| 55 | kPrefetchClientHintsCrossSiteBehavior; |
| 56 | |
Jeremy Roman | e561b41 | 2024-02-15 18:31:34 | [diff] [blame] | 57 | // If enabled, then prefetch serving will apply mitigations if it may have been |
| 58 | // contaminated by cross-partition state. |
| 59 | CONTENT_EXPORT BASE_DECLARE_FEATURE(kPrefetchStateContaminationMitigation); |
| 60 | |
Jeremy Roman | 3146e87 | 2024-03-12 18:57:24 | [diff] [blame] | 61 | // If true, contaminated prefetches will also force a browsing context group |
| 62 | // swap. |
| 63 | CONTENT_EXPORT extern const base::FeatureParam<bool> |
| 64 | kPrefetchStateContaminationSwapsBrowsingContextGroup; |
| 65 | |
Hiroshige Hayashizaki | 13aac4c | 2024-11-22 21:03:19 | [diff] [blame] | 66 | // Fix for prefetching a URL controlled by a ServiceWorker without fetch |
| 67 | // handler. Currently this stops prefetching for such cases |
| 68 | // (https://crbug.com/379076354). |
Hiroshige Hayashizaki | 0cc9782 | 2025-03-14 00:58:44 | [diff] [blame] | 69 | // Even when `kPrefetchServiceWorker` is enabled, this is still effective for |
| 70 | // SW-ineligible prefetches. |
Hiroshige Hayashizaki | 13aac4c | 2024-11-22 21:03:19 | [diff] [blame] | 71 | CONTENT_EXPORT BASE_DECLARE_FEATURE(kPrefetchServiceWorkerNoFetchHandlerFix); |
| 72 | |
Taiyo Mizuhashi | 2bef668 | 2025-03-07 08:58:45 | [diff] [blame] | 73 | // Enabling this will apply net::RequestPriority::MEDIUM for prefetch |
| 74 | // requests triggered by embedders. See crbug.com/353628437 to track this issue. |
| 75 | CONTENT_EXPORT BASE_DECLARE_FEATURE(kPrefetchNetworkPriorityForEmbedders); |
| 76 | |
Taiyo Mizuhashi | 06c0436a | 2025-03-28 15:07:02 | [diff] [blame] | 77 | // Enabling this will bupm net::RequestPriority once after the running prefetch |
| 78 | // starts to be served. |
| 79 | CONTENT_EXPORT BASE_DECLARE_FEATURE( |
| 80 | kPrefetchBumpNetworkPriorityAfterBeingServed); |
| 81 | |
Hiroshige Hayashizaki | 0cc9782 | 2025-03-14 00:58:44 | [diff] [blame] | 82 | // Allow prefetching ServiceWorker-controlled URLs. |
| 83 | CONTENT_EXPORT BASE_DECLARE_FEATURE(kPrefetchServiceWorker); |
Hiroki Nakagawa | fc2a24d | 2025-05-23 08:06:23 | [diff] [blame] | 84 | bool IsPrefetchServiceWorkerEnabled(content::BrowserContext* browser_context); |
Hiroshige Hayashizaki | 0cc9782 | 2025-03-14 00:58:44 | [diff] [blame] | 85 | |
Taiyo Mizuhashi | b9780f2 | 2025-03-28 18:29:03 | [diff] [blame] | 86 | // If enabled, prefetch caches are cleared when browsing data removal. Please |
| 87 | // see crbug.com/40262310 for more details. |
| 88 | CONTENT_EXPORT BASE_DECLARE_FEATURE(kPrefetchBrowsingDataRemoval); |
| 89 | |
kenoss | 1b8ebc2 | 2025-04-04 00:11:35 | [diff] [blame] | 90 | // Replace current prefetch queue with a new queue and scheduler, which allows |
| 91 | // prioritization, concurrent prefetches, bursting. |
| 92 | // |
| 93 | // For more details, see |
| 94 | // https://docs.google.com/document/d/1W0Nk3Nq6NaUXkBppOUC5zyNmhVqMjYShm1bydGYd9qc |
| 95 | CONTENT_EXPORT BASE_DECLARE_FEATURE(kPrefetchScheduler); |
| 96 | |
kenoss | 0a56736 | 2025-05-16 11:18:55 | [diff] [blame] | 97 | // Call `PrefetchScheduler::Progress()` synchronously as much as possible. |
| 98 | CONTENT_EXPORT extern const base::FeatureParam<bool> |
| 99 | kPrefetchSchedulerProgressSyncBestEffort; |
| 100 | |
kenoss | 1b8ebc2 | 2025-04-04 00:11:35 | [diff] [blame] | 101 | // Controls params for tests of `PrefetchScheduler`. |
| 102 | CONTENT_EXPORT BASE_DECLARE_FEATURE(kPrefetchSchedulerTesting); |
| 103 | CONTENT_EXPORT extern const base::FeatureParam<size_t> |
| 104 | kPrefetchSchedulerTestingActiveSetSizeLimitForBase; |
| 105 | CONTENT_EXPORT extern const base::FeatureParam<size_t> |
| 106 | kPrefetchSchedulerTestingActiveSetSizeLimitForBurst; |
| 107 | |
Taiyo Mizuhashi | 4e624a2 | 2025-05-15 11:28:54 | [diff] [blame] | 108 | // Provide a partial fix for prefetch queueing problem (crbug.com/400233773), |
| 109 | // without `PrefetchScheduler` feature. |
| 110 | CONTENT_EXPORT BASE_DECLARE_FEATURE( |
| 111 | kPrefetchQueueingPartialFixWithoutScheduler); |
| 112 | |
Taiyo Mizuhashi | 576a6297 | 2025-06-23 11:09:25 | [diff] [blame] | 113 | // Controls field trials parameters for prefetch canary checker. |
| 114 | CONTENT_EXPORT BASE_DECLARE_FEATURE(kPrefetchCanaryCheckerParams); |
| 115 | |
Taiyo Mizuhashi | 98e3dea | 2025-06-23 18:32:58 | [diff] [blame] | 116 | // Allows multiple base limit on `PrefetchScheduler`. |
| 117 | CONTENT_EXPORT BASE_DECLARE_FEATURE(kPrefetchMultipleActiveSetSizeLimitForBase); |
| 118 | CONTENT_EXPORT extern const base::FeatureParam<size_t> |
| 119 | kPrefetchMultipleActiveSetSizeLimitForBaseValue; |
Jeremy Roman | e77bc6c | 2023-12-08 07:07:34 | [diff] [blame] | 120 | } // namespace features |
Max Curran | 6c2835ea | 2022-03-07 19:52:38 | [diff] [blame] | 121 | |
Sreeja Kamishetty | f66553a | 2022-07-14 17:41:27 | [diff] [blame] | 122 | #endif // CONTENT_BROWSER_PRELOADING_PREFETCH_PREFETCH_FEATURES_H_ |