summaryrefslogtreecommitdiffstats
path: root/chrome/browser/browser_main.cc
diff options
context:
space:
mode:
authorgavinp@chromium.org <gavinp@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-02-12 23:45:15 +0000
committergavinp@chromium.org <gavinp@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-02-12 23:45:15 +0000
commit0e6f56d09ae4323ce7a8ac65f367524b05d22e11 (patch)
tree62be0d0889b41eb05d8768404cdc0e8abe3b2ef2 /chrome/browser/browser_main.cc
parent9a55bb981e5f390f796912bab0f58f5443112674 (diff)
downloadchromium_src-0e6f56d09ae4323ce7a8ac65f367524b05d22e11.zip
chromium_src-0e6f56d09ae4323ce7a8ac65f367524b05d22e11.tar.gz
chromium_src-0e6f56d09ae4323ce7a8ac65f367524b05d22e11.tar.bz2
Updated about_flags and command-line switch handling for prerender/prefetch
The second half of http://codereview.chromium.org/6410082/ , which cbentzel suggested be landed in two halves. This upload addresses comments from that review (improved description, unified options, no more contradictory option possibilities). BUG=70610 TEST=lots of manual testing, http://browserspy.dk/prefetch.php Review URL: http://codereview.chromium.org/6480002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@74740 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/browser_main.cc')
-rw-r--r--chrome/browser/browser_main.cc95
1 files changed, 66 insertions, 29 deletions
diff --git a/chrome/browser/browser_main.cc b/chrome/browser/browser_main.cc
index b813a17..9ef2054 100644
--- a/chrome/browser/browser_main.cc
+++ b/chrome/browser/browser_main.cc
@@ -429,39 +429,76 @@ void BrowserMainParts::SpdyFieldTrial() {
}
}
-// If any of --enable-prerender, --enable-content-prefetch or
-// --disable-content-prefetch are set, use those to determine if
-// prefetch is enabled. Otherwise, randomly assign users to an A/B test for
-// prefetching.
+// Parse the --prerender= command line switch, which controls both prerendering
+// and prefetching. If the switch is unset, or is set to "auto", then the user
+// is assigned to a field trial.
void BrowserMainParts::PrefetchAndPrerenderFieldTrial() {
- if (parsed_command_line().HasSwitch(switches::kEnableContentPrefetch) ||
- parsed_command_line().HasSwitch(switches::kEnablePagePrerender))
- ResourceDispatcherHost::set_is_prefetch_enabled(true);
- else if (parsed_command_line().HasSwitch(switches::kDisableContentPrefetch)) {
- ResourceDispatcherHost::set_is_prefetch_enabled(false);
- } else {
- const base::FieldTrial::Probability kPrefetchDivisor = 1000;
- const base::FieldTrial::Probability no_prefetch_probability = 500;
- // After June 30, 2011 builds, it will always be in default group.
- scoped_refptr<base::FieldTrial> trial(
- new base::FieldTrial("Prefetch", kPrefetchDivisor,
- "ContentPrefetchEnabled", 2011, 6, 30));
- const int yes_prefetch_grp = trial->kDefaultGroupNumber;
- trial->AppendGroup("ContentPrefetchDisabled", no_prefetch_probability);
- const int trial_grp = trial->group();
- ResourceDispatcherHost::set_is_prefetch_enabled(
- trial_grp == yes_prefetch_grp);
+ enum PrerenderOption {
+ PRERENDER_OPTION_AUTO,
+ PRERENDER_OPTION_DISABLED,
+ PRERENDER_OPTION_ENABLED,
+ PRERENDER_OPTION_PREFETCH_ONLY,
+ };
+
+ PrerenderOption prerender_option = PRERENDER_OPTION_AUTO;
+ if (parsed_command_line().HasSwitch(switches::kPrerender)) {
+ const std::string switch_value =
+ parsed_command_line().GetSwitchValueASCII(switches::kPrerender);
+
+ if (switch_value == switches::kPrerenderSwitchValueAuto) {
+ prerender_option = PRERENDER_OPTION_AUTO;
+ } else if (switch_value == switches::kPrerenderSwitchValueDisabled) {
+ prerender_option = PRERENDER_OPTION_DISABLED;
+ } else if (switch_value.empty() ||
+ switch_value == switches::kPrerenderSwitchValueEnabled) {
+ // The empty string means the option was provided with no value, and that
+ // means enable.
+ prerender_option = PRERENDER_OPTION_ENABLED;
+ } else if (switch_value == switches::kPrerenderSwitchValuePrefetchOnly) {
+ prerender_option = PRERENDER_OPTION_PREFETCH_ONLY;
+ } else {
+ prerender_option = PRERENDER_OPTION_DISABLED;
+ LOG(ERROR) << "Invalid --prerender option received on command line: "
+ << switch_value;
+ LOG(ERROR) << "Disabling prerendering!";
+ }
}
- PrerenderManager::PrerenderManagerMode prerender_mode =
- PrerenderManager::PRERENDER_MODE_DISABLED;
- if (parsed_command_line().HasSwitch(switches::kEnablePagePrerender))
- prerender_mode = PrerenderManager::PRERENDER_MODE_ENABLED;
- else
- prerender_mode = PrerenderManager::PRERENDER_MODE_DISABLED;
- PrerenderManager::SetMode(prerender_mode);
+ switch (prerender_option) {
+ case PRERENDER_OPTION_AUTO: {
+ const base::FieldTrial::Probability kPrefetchDivisor = 1000;
+ const base::FieldTrial::Probability no_prefetch_probability = 500;
+ // After June 30, 2011 builds, it will always be in default group.
+ scoped_refptr<base::FieldTrial> trial(
+ new base::FieldTrial("Prefetch", kPrefetchDivisor,
+ "ContentPrefetchEnabled", 2011, 6, 30));
+ const int yes_prefetch_grp = trial->kDefaultGroupNumber;
+ trial->AppendGroup("ContentPrefetchDisabled", no_prefetch_probability);
+ const int trial_grp = trial->group();
+ ResourceDispatcherHost::set_is_prefetch_enabled(
+ trial_grp == yes_prefetch_grp);
+
+ // There is currently no prerendering field trial.
+ PrerenderManager::SetMode(PrerenderManager::PRERENDER_MODE_DISABLED);
+ break;
+ }
+ case PRERENDER_OPTION_DISABLED:
+ ResourceDispatcherHost::set_is_prefetch_enabled(false);
+ PrerenderManager::SetMode(PrerenderManager::PRERENDER_MODE_DISABLED);
+ break;
+ case PRERENDER_OPTION_ENABLED:
+ ResourceDispatcherHost::set_is_prefetch_enabled(true);
+ PrerenderManager::SetMode(PrerenderManager::PRERENDER_MODE_ENABLED);
+ break;
+ case PRERENDER_OPTION_PREFETCH_ONLY:
+ ResourceDispatcherHost::set_is_prefetch_enabled(true);
+ PrerenderManager::SetMode(PrerenderManager::PRERENDER_MODE_DISABLED);
+ break;
+ default:
+ NOTREACHED();
+ }
- UMA_HISTOGRAM_ENUMERATION("Prerender.Sessions", prerender_mode,
+ UMA_HISTOGRAM_ENUMERATION("Prerender.Sessions", PrerenderManager::GetMode(),
PrerenderManager::PRERENDER_MODE_MAX);
}