1 // Copyright 2020 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "chrome/browser/prefetch/search_prefetch/field_trial_settings.h"
6 
7 #include <string>
8 
9 #include "base/command_line.h"
10 
11 // Enables the feature completely with a few skipped checks to make local
12 // testing easier.
13 constexpr char kSearchPrefetchServiceCommandLineFlag[] =
14     "enable-search-prefetch-service";
15 
16 const base::Feature kSearchPrefetchService{"SearchPrefetchService",
17                                            base::FEATURE_DISABLED_BY_DEFAULT};
18 
19 const base::Feature kSearchPrefetchServicePrefetching{
20     "SearchPrefetchServicePrefetching", base::FEATURE_DISABLED_BY_DEFAULT};
21 
SearchPrefetchServiceIsEnabled()22 bool SearchPrefetchServiceIsEnabled() {
23   return base::CommandLine::ForCurrentProcess()->HasSwitch(
24              kSearchPrefetchServiceCommandLineFlag) ||
25          base::FeatureList::IsEnabled(kSearchPrefetchService);
26 }
27 
SearchPrefetchServicePrefetchingIsEnabled()28 bool SearchPrefetchServicePrefetchingIsEnabled() {
29   return base::CommandLine::ForCurrentProcess()->HasSwitch(
30              kSearchPrefetchServiceCommandLineFlag) ||
31          base::FeatureList::IsEnabled(kSearchPrefetchServicePrefetching);
32 }
33 
SearchPrefetchCachingLimit()34 base::TimeDelta SearchPrefetchCachingLimit() {
35   return base::TimeDelta::FromMilliseconds(
36       base::GetFieldTrialParamByFeatureAsInt(kSearchPrefetchServicePrefetching,
37                                              "prefetch_caching_limit_ms",
38                                              60000));
39 }
40 
SearchPrefetchMaxAttemptsPerCachingDuration()41 size_t SearchPrefetchMaxAttemptsPerCachingDuration() {
42   if (base::CommandLine::ForCurrentProcess()->HasSwitch(
43           kSearchPrefetchServiceCommandLineFlag)) {
44     return 100;
45   }
46   return base::GetFieldTrialParamByFeatureAsInt(
47       kSearchPrefetchServicePrefetching, "max_attempts_per_caching_duration",
48       2);
49 }
50 
SearchPrefetchErrorBackoffDuration()51 base::TimeDelta SearchPrefetchErrorBackoffDuration() {
52   if (base::CommandLine::ForCurrentProcess()->HasSwitch(
53           kSearchPrefetchServiceCommandLineFlag)) {
54     return base::TimeDelta::FromSeconds(1);
55   }
56   return base::TimeDelta::FromMilliseconds(
57       base::GetFieldTrialParamByFeatureAsInt(kSearchPrefetchServicePrefetching,
58                                              "error_backoff_duration_ms",
59                                              60000));
60 }
61 
SearchPrefetchOnlyFetchDefaultMatch()62 bool SearchPrefetchOnlyFetchDefaultMatch() {
63   return base::GetFieldTrialParamByFeatureAsBool(
64       kSearchPrefetchServicePrefetching, "only_prefetch_default_match", false);
65 }
66 
SearchPrefetchShouldCancelUneededInflightRequests()67 bool SearchPrefetchShouldCancelUneededInflightRequests() {
68   return base::GetFieldTrialParamByFeatureAsBool(
69       kSearchPrefetchServicePrefetching, "cancel_inflight_unneeded", true);
70 }
71