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