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
content / browser / preloading / prerender / prerender_features.cc [blame]
// Copyright 2023 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/browser/preloading/prerender/prerender_features.h"
#include "third_party/blink/public/common/features.h"
namespace features {
// This was used for enabling a new limit and scheduler for prerender triggers
// (crbug.com/1464021). Now the new implementation is used by default and this
// flag is just for injecting parameters through field trials.
BASE_FEATURE(kPrerender2NewLimitAndScheduler,
"Prerender2NewLimitAndScheduler",
base::FEATURE_ENABLED_BY_DEFAULT);
// Allows activation in background tab. For now, this is used only on web
// platform tests on macOS to run activation with target hint tests that have
// race conditions between visibility change and activation start on a prerender
// WebContents. Note that this issue does not happen on browser_tests, so this
// could be specific to WPT setup.
// TODO(crbug.com/40249964): Allow activation in background by default.
BASE_FEATURE(kPrerender2AllowActivationInBackground,
"Prerender2AllowActivationInBackground",
base::FEATURE_DISABLED_BY_DEFAULT);
// Prerender2 Embedders trigger based on rules decided by the browser. Prevent
// the browser from triggering on the hosts listed.
// Blocked hosts are expected to be passed as a comma separated string.
// e.g. example1.test,example2.test
BASE_FEATURE(kPrerender2EmbedderBlockedHosts,
"Prerender2EmbedderBlockedHosts",
base::FEATURE_ENABLED_BY_DEFAULT);
const base::FeatureParam<std::string> kPrerender2EmbedderBlockedHostsParam{
&kPrerender2EmbedderBlockedHosts, "embedder_blocked_hosts", ""};
// Enables fallback from prerender to prefetch for Speculation Rules.
// See https://crbug.com/342089123 for more details.
BASE_FEATURE(kPrerender2FallbackPrefetchSpecRules,
"Prerender2FallbackPrefetchSpecRules",
base::FEATURE_DISABLED_BY_DEFAULT);
constexpr base::FeatureParam<Prerender2FallbackPrefetchReusablePolicy>::Option
kPrerender2FallbackPrefetchReusablePolicyOptions[] = {
{Prerender2FallbackPrefetchReusablePolicy::kNotUse, "NotUse"},
{Prerender2FallbackPrefetchReusablePolicy::
kUseIfIsLikelyAheadOfPrerender,
"UseIfIsLikelyAheadOfPrerender"},
{Prerender2FallbackPrefetchReusablePolicy::kUseAlways, "UseAlways"},
};
const base::FeatureParam<Prerender2FallbackPrefetchReusablePolicy>
kPrerender2FallbackPrefetchReusablePolicy{
&kPrerender2FallbackPrefetchSpecRules,
"kPrerender2FallbackPrefetchReusablePolicy",
Prerender2FallbackPrefetchReusablePolicy::kNotUse,
&kPrerender2FallbackPrefetchReusablePolicyOptions};
const base::FeatureParam<int>
kPrerender2NoVarySearchWaitForHeadersTimeoutEagerPrerender{
&blink::features::kPrerender2NoVarySearch,
"wait_for_headers_timeout_eager_prerender", 1000};
const base::FeatureParam<int>
kPrerender2NoVarySearchWaitForHeadersTimeoutModeratePrerender{
&blink::features::kPrerender2NoVarySearch,
"wait_for_headers_timeout_moderate_prerender", 0};
const base::FeatureParam<int>
kPrerender2NoVarySearchWaitForHeadersTimeoutConservativePrerender{
&blink::features::kPrerender2NoVarySearch,
"wait_for_headers_timeout_conservative_prerender", 0};
const base::FeatureParam<int>
kPrerender2NoVarySearchWaitForHeadersTimeoutForEmbedders{
&blink::features::kPrerender2NoVarySearch,
"wait_for_headers_timeout_embedders", 1000};
// If enabled, suppresses prerendering on slow network.
BASE_FEATURE(kSuppressesPrerenderingOnSlowNetwork,
"SuppressesPrerenderingOnSlowNetwork",
base::FEATURE_DISABLED_BY_DEFAULT);
// Regarding how this number was chosen, see the design doc linked from
// crbug.com/350519234.
const base::FeatureParam<base::TimeDelta>
kSuppressesPrerenderingOnSlowNetworkThreshold{
&kSuppressesPrerenderingOnSlowNetwork,
"slow_network_threshold_for_prerendering", base::Milliseconds(208)};
} // namespace features