OLD | NEW |
---|---|
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/prerender/prerender_field_trial.h" | 5 #include "chrome/browser/prerender/prerender_field_trial.h" |
6 | 6 |
7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
8 #include "base/logging.h" | 8 #include "base/logging.h" |
9 #include "base/metrics/field_trial.h" | 9 #include "base/metrics/field_trial.h" |
10 #include "base/metrics/histogram.h" | 10 #include "base/metrics/histogram.h" |
(...skipping 15 matching lines...) Expand all Loading... | |
26 using base::FieldTrial; | 26 using base::FieldTrial; |
27 using base::FieldTrialList; | 27 using base::FieldTrialList; |
28 using base::StringToInt; | 28 using base::StringToInt; |
29 using std::string; | 29 using std::string; |
30 using std::vector; | 30 using std::vector; |
31 | 31 |
32 namespace prerender { | 32 namespace prerender { |
33 | 33 |
34 namespace { | 34 namespace { |
35 | 35 |
36 const char kOmniboxTrialName[] = "PrerenderFromOmnibox"; | |
37 int g_omnibox_trial_default_group_number = kint32min; | |
38 | |
39 const char kDisabledGroup[] = "Disabled"; | 36 const char kDisabledGroup[] = "Disabled"; |
40 const char kEnabledGroup[] = "Enabled"; | 37 const char kEnabledGroup[] = "Enabled"; |
41 | 38 |
42 const char kLocalPredictorSpecTrialName[] = "PrerenderLocalPredictorSpec"; | 39 const char kLocalPredictorSpecTrialName[] = "PrerenderLocalPredictorSpec"; |
43 const char kLocalPredictorKeyName[] = "LocalPredictor"; | 40 const char kLocalPredictorKeyName[] = "LocalPredictor"; |
44 const char kLocalPredictorUnencryptedSyncOnlyKeyName[] = | 41 const char kLocalPredictorUnencryptedSyncOnlyKeyName[] = |
45 "LocalPredictorUnencryptedSyncOnly"; | 42 "LocalPredictorUnencryptedSyncOnly"; |
46 const char kLocalPredictorNetworkPredictionEnabledOnly[] = | 43 const char kLocalPredictorNetworkPredictionEnabledOnly[] = |
47 "LocalPredictorNetworkPredictionEnabledOnly"; | 44 "LocalPredictorNetworkPredictionEnabledOnly"; |
48 const char kLocalPredictorOnCellularOnly[] = "LocalPredictorOnCellularOnly"; | 45 const char kLocalPredictorOnCellularOnly[] = "LocalPredictorOnCellularOnly"; |
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
194 } else if (trial_group == experiment_match_complete_group) { | 191 } else if (trial_group == experiment_match_complete_group) { |
195 PrerenderManager::SetMode( | 192 PrerenderManager::SetMode( |
196 PrerenderManager::PRERENDER_MODE_EXPERIMENT_MATCH_COMPLETE_GROUP); | 193 PrerenderManager::PRERENDER_MODE_EXPERIMENT_MATCH_COMPLETE_GROUP); |
197 } else { | 194 } else { |
198 NOTREACHED(); | 195 NOTREACHED(); |
199 } | 196 } |
200 } | 197 } |
201 | 198 |
202 } // end namespace | 199 } // end namespace |
203 | 200 |
204 void ConfigureOmniboxPrerender(); | |
205 | |
206 void ConfigurePrerender(const CommandLine& command_line) { | 201 void ConfigurePrerender(const CommandLine& command_line) { |
207 enum PrerenderOption { | 202 enum PrerenderOption { |
208 PRERENDER_OPTION_AUTO, | 203 PRERENDER_OPTION_AUTO, |
209 PRERENDER_OPTION_DISABLED, | 204 PRERENDER_OPTION_DISABLED, |
210 PRERENDER_OPTION_ENABLED, | 205 PRERENDER_OPTION_ENABLED, |
211 }; | 206 }; |
212 | 207 |
213 PrerenderOption prerender_option = PRERENDER_OPTION_AUTO; | 208 PrerenderOption prerender_option = PRERENDER_OPTION_AUTO; |
214 if (command_line.HasSwitch(switches::kPrerenderMode)) { | 209 if (command_line.HasSwitch(switches::kPrerenderMode)) { |
215 const string switch_value = | 210 const string switch_value = |
(...skipping 22 matching lines...) Expand all Loading... | |
238 break; | 233 break; |
239 case PRERENDER_OPTION_DISABLED: | 234 case PRERENDER_OPTION_DISABLED: |
240 PrerenderManager::SetMode(PrerenderManager::PRERENDER_MODE_DISABLED); | 235 PrerenderManager::SetMode(PrerenderManager::PRERENDER_MODE_DISABLED); |
241 break; | 236 break; |
242 case PRERENDER_OPTION_ENABLED: | 237 case PRERENDER_OPTION_ENABLED: |
243 PrerenderManager::SetMode(PrerenderManager::PRERENDER_MODE_ENABLED); | 238 PrerenderManager::SetMode(PrerenderManager::PRERENDER_MODE_ENABLED); |
244 break; | 239 break; |
245 default: | 240 default: |
246 NOTREACHED(); | 241 NOTREACHED(); |
247 } | 242 } |
248 | |
249 ConfigureOmniboxPrerender(); | |
250 } | |
251 | |
252 void ConfigureOmniboxPrerender() { | |
253 // Field trial to see if we're enabled. | |
254 const FieldTrial::Probability kDivisor = 100; | |
255 | |
256 FieldTrial::Probability kDisabledProbability = 10; | |
257 chrome::VersionInfo::Channel channel = chrome::VersionInfo::GetChannel(); | |
258 if (channel == chrome::VersionInfo::CHANNEL_STABLE || | |
259 channel == chrome::VersionInfo::CHANNEL_BETA) { | |
260 kDisabledProbability = 1; | |
261 } | |
262 scoped_refptr<FieldTrial> omnibox_prerender_trial( | |
263 FieldTrialList::FactoryGetFieldTrial( | |
264 kOmniboxTrialName, kDivisor, "OmniboxPrerenderEnabled", | |
265 2014, 12, 31, FieldTrial::SESSION_RANDOMIZED, | |
266 &g_omnibox_trial_default_group_number)); | |
267 omnibox_prerender_trial->AppendGroup("OmniboxPrerenderDisabled", | |
268 kDisabledProbability); | |
269 } | 243 } |
270 | 244 |
271 bool IsOmniboxEnabled(Profile* profile) { | 245 bool IsOmniboxEnabled(Profile* profile) { |
272 if (!profile) | 246 if (!profile) |
273 return false; | 247 return false; |
274 | 248 |
275 if (!PrerenderManager::IsPrerenderingPossible()) | 249 if (!PrerenderManager::IsPrerenderingPossible()) |
276 return false; | 250 return false; |
277 | 251 |
278 // Override any field trial groups if the user has set a command line flag. | 252 // Override any field trial groups if the user has set a command line flag. |
279 if (CommandLine::ForCurrentProcess()->HasSwitch( | 253 if (CommandLine::ForCurrentProcess()->HasSwitch( |
280 switches::kPrerenderFromOmnibox)) { | 254 switches::kPrerenderFromOmnibox)) { |
281 const string switch_value = | 255 const string switch_value = |
282 CommandLine::ForCurrentProcess()->GetSwitchValueASCII( | 256 CommandLine::ForCurrentProcess()->GetSwitchValueASCII( |
283 switches::kPrerenderFromOmnibox); | 257 switches::kPrerenderFromOmnibox); |
284 | 258 |
285 if (switch_value == switches::kPrerenderFromOmniboxSwitchValueEnabled) | 259 if (switch_value == switches::kPrerenderFromOmniboxSwitchValueEnabled) |
286 return true; | 260 return true; |
287 | 261 |
288 if (switch_value == switches::kPrerenderFromOmniboxSwitchValueDisabled) | 262 if (switch_value == switches::kPrerenderFromOmniboxSwitchValueDisabled) |
289 return false; | 263 return false; |
290 | 264 |
291 DCHECK_EQ(switches::kPrerenderFromOmniboxSwitchValueAuto, switch_value); | 265 DCHECK_EQ(switches::kPrerenderFromOmniboxSwitchValueAuto, switch_value); |
292 } | 266 } |
293 | 267 |
294 const int group = FieldTrialList::FindValue(kOmniboxTrialName); | 268 return (FieldTrialList::FindFullName("PrerenderFromOmnibox") != |
cbentzel
2014/09/29 11:19:17
Do you anticipate ever having multiple Disabled gr
tburkard
2014/09/29 11:22:11
I think we don't have a need for this at this poin
| |
295 return group == FieldTrial::kNotFinalized || | 269 "OmniboxPrerenderDisabled"); |
296 group == g_omnibox_trial_default_group_number; | |
297 } | 270 } |
298 | 271 |
299 /* | 272 /* |
300 PrerenderLocalPredictorSpec is a field trial, and its value must have the | 273 PrerenderLocalPredictorSpec is a field trial, and its value must have the |
301 following format: | 274 following format: |
302 key1=value1:key2=value2:key3=value3 | 275 key1=value1:key2=value2:key3=value3 |
303 eg "LocalPredictor=Enabled:SideEffectFreeWhitelist=Enabled" | 276 eg "LocalPredictor=Enabled:SideEffectFreeWhitelist=Enabled" |
304 The function below extracts the value corresponding to a key provided from the | 277 The function below extracts the value corresponding to a key provided from the |
305 LocalPredictorSpec. | 278 LocalPredictorSpec. |
306 */ | 279 */ |
(...skipping 206 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
513 return GetLocalPredictorSpecValue(kDisableSessionStorageNamespaceMerging) != | 486 return GetLocalPredictorSpecValue(kDisableSessionStorageNamespaceMerging) != |
514 kDisabledGroup; | 487 kDisabledGroup; |
515 } | 488 } |
516 | 489 |
517 bool IsPrerenderCookieStoreEnabled() { | 490 bool IsPrerenderCookieStoreEnabled() { |
518 return GetLocalPredictorSpecValue(kPrerenderCookieStore) != kDisabledGroup && | 491 return GetLocalPredictorSpecValue(kPrerenderCookieStore) != kDisabledGroup && |
519 FieldTrialList::FindFullName(kPrerenderCookieStore) != kDisabledGroup; | 492 FieldTrialList::FindFullName(kPrerenderCookieStore) != kDisabledGroup; |
520 } | 493 } |
521 | 494 |
522 } // namespace prerender | 495 } // namespace prerender |
OLD | NEW |