Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(285)

Side by Side Diff: chrome/browser/prerender/prerender_field_trial.cc

Issue 2754003006: Prerender: omnibox and instant field trial parameters. (Closed)
Patch Set: comments Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 <string> 7 #include <string>
8 8
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/metrics/field_trial.h" 10 #include "base/metrics/field_trial.h"
11 #include "base/metrics/field_trial_params.h"
11 #include "chrome/browser/prerender/prerender_manager.h" 12 #include "chrome/browser/prerender/prerender_manager.h"
12 #include "chrome/common/chrome_switches.h" 13 #include "chrome/common/chrome_switches.h"
13 #include "components/variations/variations_associated_data.h"
14 14
15 namespace prerender { 15 namespace prerender {
16 16
17 // NoStatePrefetch feature modes, to control the PrerenderManager mode using 17 namespace {
18 // the base::Feature API and field trials. 18
19 PrerenderManager::PrerenderManagerMode ParsePrerenderMode(
20 const char* parameter_name,
21 PrerenderManager::PrerenderManagerMode default_mode) {
22 PrerenderManager::PrerenderManagerMode mode = default_mode;
23 if (!base::FeatureList::IsEnabled(kNoStatePrefetchFeature)) {
24 mode = PrerenderManager::PRERENDER_MODE_DISABLED;
25 } else {
26 std::string mode_value = base::GetFieldTrialParamValueByFeature(
27 kNoStatePrefetchFeature, parameter_name);
28 if (mode_value.empty()) {
29 mode = default_mode;
30 } else if (mode_value == kNoStatePrefetchFeatureModeParameterPrefetch) {
31 mode = PrerenderManager::PRERENDER_MODE_NOSTATE_PREFETCH;
32 } else if (mode_value == kNoStatePrefetchFeatureModeParameterPrerender) {
33 mode = PrerenderManager::PRERENDER_MODE_ENABLED;
34 } else if (mode_value == kNoStatePrefetchFeatureModeParameterSimpleLoad) {
35 mode = PrerenderManager::PRERENDER_MODE_SIMPLE_LOAD_EXPERIMENT;
36 } else if (mode_value == kNoStatePrefetchFeatureModeParameterDisabled) {
37 mode = PrerenderManager::PRERENDER_MODE_DISABLED;
38 } else {
39 LOG(ERROR) << "Invalid prerender mode: " << mode_value << " for "
40 << parameter_name;
41 LOG(ERROR) << "Using default mode " << default_mode << " for "
42 << parameter_name << "!";
43 mode = default_mode;
44 }
45 }
46 return mode;
47 }
48
49 } // namespace
50
51 // NoStatePrefetch feature parameters, to control the PrerenderManager mode
52 // using the base::Feature API and field trials.
53
54 // The general prerender mode for most origins.
19 const char kNoStatePrefetchFeatureModeParameterName[] = "mode"; 55 const char kNoStatePrefetchFeatureModeParameterName[] = "mode";
56
57 // The origins can have prerendering overridden differently than the rest of the
58 // experiment.
59 const char kNoStatePrefetchFeatureInstantModeParameterName[] = "instant_mode";
60 const char kNoStatePrefetchFeatureOmniboxModeParameterName[] = "omnibox_mode";
61
62 // Mode values.
20 const char kNoStatePrefetchFeatureModeParameterPrefetch[] = "no_state_prefetch"; 63 const char kNoStatePrefetchFeatureModeParameterPrefetch[] = "no_state_prefetch";
21 const char kNoStatePrefetchFeatureModeParameterPrerender[] = "prerender"; 64 const char kNoStatePrefetchFeatureModeParameterPrerender[] = "prerender";
22 const char kNoStatePrefetchFeatureModeParameterSimpleLoad[] = "simple_load"; 65 const char kNoStatePrefetchFeatureModeParameterSimpleLoad[] = "simple_load";
66 const char kNoStatePrefetchFeatureModeParameterDisabled[] = "disabled";
23 67
24 const base::Feature kNoStatePrefetchFeature{"NoStatePrefetch", 68 const base::Feature kNoStatePrefetchFeature{"NoStatePrefetch",
25 base::FEATURE_ENABLED_BY_DEFAULT}; 69 base::FEATURE_ENABLED_BY_DEFAULT};
26 70
27 void ConfigurePrerender() { 71 void ConfigurePrerender() {
28 PrerenderManager::PrerenderManagerMode mode = 72 PrerenderManager::PrerenderManagerMode overall_mode =
29 PrerenderManager::PRERENDER_MODE_ENABLED; 73 ParsePrerenderMode(kNoStatePrefetchFeatureModeParameterName,
30 if (!base::FeatureList::IsEnabled(kNoStatePrefetchFeature)) { 74 PrerenderManager::PRERENDER_MODE_ENABLED);
31 mode = PrerenderManager::PRERENDER_MODE_DISABLED;
32 } else {
33 std::string mode_value = variations::GetVariationParamValueByFeature(
34 kNoStatePrefetchFeature, kNoStatePrefetchFeatureModeParameterName);
35 if (mode_value == kNoStatePrefetchFeatureModeParameterPrefetch) {
36 mode = PrerenderManager::PRERENDER_MODE_NOSTATE_PREFETCH;
37 } else if (mode_value.empty() ||
38 mode_value == kNoStatePrefetchFeatureModeParameterPrerender) {
39 // The empty string means the option was provided with no value, and that
40 // means enable.
41 mode = PrerenderManager::PRERENDER_MODE_ENABLED;
42 } else if (mode_value == kNoStatePrefetchFeatureModeParameterSimpleLoad) {
43 mode = PrerenderManager::PRERENDER_MODE_SIMPLE_LOAD_EXPERIMENT;
44 } else {
45 LOG(ERROR) << "Invalid prerender mode: " << mode_value;
46 LOG(ERROR) << "Disabling prerendering!";
47 mode = PrerenderManager::PRERENDER_MODE_DISABLED;
48 }
49 }
50 75
51 PrerenderManager::SetMode(mode); 76 PrerenderManager::SetMode(overall_mode);
77 PrerenderManager::SetInstantMode(ParsePrerenderMode(
78 kNoStatePrefetchFeatureInstantModeParameterName, overall_mode));
79 PrerenderManager::SetOmniboxMode(ParsePrerenderMode(
80 kNoStatePrefetchFeatureOmniboxModeParameterName, overall_mode));
52 } 81 }
53 82
54 bool IsOmniboxEnabled(Profile* profile) { 83 bool IsOmniboxEnabled(Profile* profile) {
55 if (!profile) 84 if (!profile)
56 return false; 85 return false;
57 86
58 if (!PrerenderManager::IsPrerenderingPossible()) 87 if (!PrerenderManager::IsAnyPrerenderingPossible())
59 return false; 88 return false;
60 89
61 // Override any field trial groups if the user has set a command line flag. 90 // Override any field trial groups if the user has set a command line flag.
62 if (base::CommandLine::ForCurrentProcess()->HasSwitch( 91 if (base::CommandLine::ForCurrentProcess()->HasSwitch(
63 switches::kPrerenderFromOmnibox)) { 92 switches::kPrerenderFromOmnibox)) {
64 const std::string switch_value = 93 const std::string switch_value =
65 base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII( 94 base::CommandLine::ForCurrentProcess()->GetSwitchValueASCII(
66 switches::kPrerenderFromOmnibox); 95 switches::kPrerenderFromOmnibox);
67 96
68 if (switch_value == switches::kPrerenderFromOmniboxSwitchValueEnabled) 97 if (switch_value == switches::kPrerenderFromOmniboxSwitchValueEnabled)
69 return true; 98 return true;
70 99
71 if (switch_value == switches::kPrerenderFromOmniboxSwitchValueDisabled) 100 if (switch_value == switches::kPrerenderFromOmniboxSwitchValueDisabled)
72 return false; 101 return false;
73 102
74 DCHECK_EQ(switches::kPrerenderFromOmniboxSwitchValueAuto, switch_value); 103 DCHECK_EQ(switches::kPrerenderFromOmniboxSwitchValueAuto, switch_value);
75 } 104 }
76 105
77 return (base::FieldTrialList::FindFullName("PrerenderFromOmnibox") != 106 return (base::FieldTrialList::FindFullName("PrerenderFromOmnibox") !=
78 "OmniboxPrerenderDisabled"); 107 "OmniboxPrerenderDisabled");
79 } 108 }
80 109
81 } // namespace prerender 110 } // namespace prerender
OLDNEW
« no previous file with comments | « chrome/browser/prerender/prerender_field_trial.h ('k') | chrome/browser/prerender/prerender_manager.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698