Index: chrome/browser/prerender/prerender_field_trial.cc |
diff --git a/chrome/browser/prerender/prerender_field_trial.cc b/chrome/browser/prerender/prerender_field_trial.cc |
index d8fd77e19cb85139a41dc7cd27e1642846032892..04b1baf4aaea453fb5cce2f42fc430d1e931dfaf 100644 |
--- a/chrome/browser/prerender/prerender_field_trial.cc |
+++ b/chrome/browser/prerender/prerender_field_trial.cc |
@@ -23,6 +23,10 @@ namespace { |
const char kOmniboxTrialName[] = "PrerenderFromOmnibox"; |
int g_omnibox_trial_default_group_number = -1; |
+const char kSpeculativePrefetchingLearningTrialName[] = |
+ "SpeculativePrefetchingLearning"; |
+int g_speculative_prefetching_learning_default_group_number = -1; |
+ |
void SetupPrefetchFieldTrial() { |
chrome::VersionInfo::Channel channel = chrome::VersionInfo::GetChannel(); |
if (channel == chrome::VersionInfo::CHANNEL_STABLE || |
@@ -122,6 +126,7 @@ void SetupPrerenderFieldTrial() { |
} // end namespace |
void ConfigureOmniboxPrerender(); |
+void ConfigureSpeculativePrefetching(); |
void ConfigurePrefetchAndPrerender(const CommandLine& command_line) { |
enum PrerenderOption { |
@@ -182,6 +187,7 @@ void ConfigurePrefetchAndPrerender(const CommandLine& command_line) { |
PrerenderManager::PRERENDER_MODE_MAX); |
ConfigureOmniboxPrerender(); |
+ ConfigureSpeculativePrefetching(); |
} |
void ConfigureOmniboxPrerender() { |
@@ -230,4 +236,46 @@ bool IsOmniboxEnabled(Profile* profile) { |
group == g_omnibox_trial_default_group_number; |
} |
+void ConfigureSpeculativePrefetching() { |
+ // Field trial to see if we're enabled. |
+ const base::FieldTrial::Probability kDivisor = 100; |
+ |
+ base::FieldTrial::Probability kDisabledProbability = 99; |
+ chrome::VersionInfo::Channel channel = chrome::VersionInfo::GetChannel(); |
+ if (channel == chrome::VersionInfo::CHANNEL_STABLE || |
+ channel == chrome::VersionInfo::CHANNEL_BETA) { |
+ kDisabledProbability = 100; |
+ } |
+ scoped_refptr<base::FieldTrial> speculative_prefetching_learning_trial( |
+ base::FieldTrialList::FactoryGetFieldTrial( |
+ kSpeculativePrefetchingLearningTrialName, |
+ kDivisor, |
+ "SpeculativePrefetchingLearningEnabled", |
+ 2012, 12, 30, |
+ &g_speculative_prefetching_learning_default_group_number)); |
+ speculative_prefetching_learning_trial->AppendGroup( |
+ "SpeculativePrefetchingDisabled", |
+ kDisabledProbability); |
+} |
+ |
+bool IsSpeculativeResourcePrefetchingLearningEnabled(Profile* profile) { |
+ if (!profile) |
+ return false; |
+ |
+ // Override any field trial groups if the user has set a command line flag. |
+ if (CommandLine::ForCurrentProcess()->HasSwitch( |
+ switches::kSpeculativeResourcePrefetching)) { |
+ const std::string switch_value = |
+ CommandLine::ForCurrentProcess()->GetSwitchValueASCII( |
+ switches::kSpeculativeResourcePrefetching); |
+ |
+ if (switch_value == switches::kSpeculativeResourcePrefetchingLearning) |
+ return true; |
+ } |
+ |
+ const int group = base::FieldTrialList::FindValue( |
+ kSpeculativePrefetchingLearningTrialName); |
+ return group == g_speculative_prefetching_learning_default_group_number; |
+} |
+ |
} // namespace prerender |