Index: chrome/browser/predictors/resource_prefetch_common.cc |
diff --git a/chrome/browser/predictors/resource_prefetch_common.cc b/chrome/browser/predictors/resource_prefetch_common.cc |
index 174848d8e9f14fe856155a06a3093347ae4e4cb6..27ea7933c98834c5ddcc57903fc9775dce60cd82 100644 |
--- a/chrome/browser/predictors/resource_prefetch_common.cc |
+++ b/chrome/browser/predictors/resource_prefetch_common.cc |
@@ -8,18 +8,31 @@ |
#include <tuple> |
#include "base/command_line.h" |
+#include "base/metrics/field_trial.h" |
#include "chrome/browser/net/prediction_options.h" |
#include "chrome/browser/profiles/profile.h" |
#include "chrome/browser/sessions/session_tab_helper.h" |
#include "chrome/common/chrome_switches.h" |
#include "components/prefs/pref_service.h" |
+#include "components/variations/variations_associated_data.h" |
#include "content/public/browser/browser_thread.h" |
#include "content/public/browser/web_contents.h" |
namespace predictors { |
+const char kSpeculativeResourcePrefetchingFeatureName[] = |
+ "SpeculativeResourcePrefetching"; |
+const char kModeParamName[] = "mode"; |
+const char kLearningMode[] = "learning"; |
+const char kExternalPrefetchingMode[] = "external-prefetching"; |
+const char kPrefetchingMode[] = "prefetching"; |
+ |
namespace { |
+const base::Feature kSpeculativeResourcePrefetchingFeature{ |
+ kSpeculativeResourcePrefetchingFeatureName, |
+ base::FEATURE_DISABLED_BY_DEFAULT}; |
+ |
bool IsPrefetchingEnabledInternal(Profile* profile, int mode, int mask) { |
DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
if ((mode & mask) == 0) |
@@ -41,35 +54,27 @@ bool IsSpeculativeResourcePrefetchingEnabled( |
ResourcePrefetchPredictorConfig* config) { |
DCHECK(config); |
- // Off the record - disabled. |
+ // Disabled for of-the-record. Policy choice, not a technical limitation. |
if (!profile || profile->IsOffTheRecord()) |
return false; |
- // Enabled by command line switch. The config has the default params already |
- // set. The command line with just enable them with the default params. |
- if (base::CommandLine::ForCurrentProcess()->HasSwitch( |
- switches::kSpeculativeResourcePrefetching)) { |
- const std::string value = |
- base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII( |
- switches::kSpeculativeResourcePrefetching); |
- |
- if (value == switches::kSpeculativeResourcePrefetchingDisabled) { |
- return false; |
- } else if (value == switches::kSpeculativeResourcePrefetchingLearning) { |
- config->mode |= ResourcePrefetchPredictorConfig::LEARNING; |
- return true; |
- } else if (value == |
- switches::kSpeculativeResourcePrefetchingEnabledExternal) { |
- config->mode |= ResourcePrefetchPredictorConfig::LEARNING | |
- ResourcePrefetchPredictorConfig::PREFETCHING_FOR_EXTERNAL; |
- return true; |
- } else if (value == switches::kSpeculativeResourcePrefetchingEnabled) { |
- config->mode |= |
- ResourcePrefetchPredictorConfig::LEARNING | |
- ResourcePrefetchPredictorConfig::PREFETCHING_FOR_NAVIGATION | |
- ResourcePrefetchPredictorConfig::PREFETCHING_FOR_EXTERNAL; |
- return true; |
- } |
+ if (!base::FeatureList::IsEnabled(kSpeculativeResourcePrefetchingFeature)) |
+ return false; |
+ |
+ std::string mode_value = variations::GetVariationParamValueByFeature( |
+ kSpeculativeResourcePrefetchingFeature, kModeParamName); |
+ if (mode_value == kLearningMode) { |
+ config->mode |= ResourcePrefetchPredictorConfig::LEARNING; |
+ return true; |
+ } else if (mode_value == kExternalPrefetchingMode) { |
+ config->mode |= ResourcePrefetchPredictorConfig::LEARNING | |
+ ResourcePrefetchPredictorConfig::PREFETCHING_FOR_EXTERNAL; |
+ return true; |
+ } else if (mode_value == kPrefetchingMode) { |
+ config->mode |= ResourcePrefetchPredictorConfig::LEARNING | |
+ ResourcePrefetchPredictorConfig::PREFETCHING_FOR_EXTERNAL | |
+ ResourcePrefetchPredictorConfig::PREFETCHING_FOR_NAVIGATION; |
+ return true; |
} |
return false; |