diff options
| author | tburkard@chromium.org <tburkard@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-07-07 21:58:39 +0000 |
|---|---|---|
| committer | tburkard@chromium.org <tburkard@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-07-07 21:58:39 +0000 |
| commit | e253ab0e0b22dbf13ba6388945c0ccc2a1e94091 (patch) | |
| tree | 06b6bdd404fb406baf255d873714f4d939d3e74e /chrome/browser/prerender/prerender_util.cc | |
| parent | 49c4757170b6044fb1c8ce04486ec8aef6f886ce (diff) | |
| download | chromium_src-e253ab0e0b22dbf13ba6388945c0ccc2a1e94091.zip chromium_src-e253ab0e0b22dbf13ba6388945c0ccc2a1e94091.tar.gz chromium_src-e253ab0e0b22dbf13ba6388945c0ccc2a1e94091.tar.bz2 | |
Updating histograms to allow for experiments & log origin-based histograms.
R=cbentzel@chromium.org, dominich@chromium.org
Review URL: http://codereview.chromium.org/7289020
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@91765 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/prerender/prerender_util.cc')
| -rw-r--r-- | chrome/browser/prerender/prerender_util.cc | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/chrome/browser/prerender/prerender_util.cc b/chrome/browser/prerender/prerender_util.cc new file mode 100644 index 0000000..100b93e --- /dev/null +++ b/chrome/browser/prerender/prerender_util.cc @@ -0,0 +1,64 @@ +// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "chrome/browser/prerender/prerender_util.h" + +#include "base/logging.h" +#include "googleurl/src/url_canon.h" +#include "googleurl/src/url_parse.h" +#include "googleurl/src/url_util.h" + +namespace prerender { + +bool MaybeGetQueryStringBasedAliasURL( + const GURL& url, GURL* alias_url) { + DCHECK(alias_url); + url_parse::Parsed parsed; + url_parse::ParseStandardURL(url.spec().c_str(), url.spec().length(), + &parsed); + url_parse::Component query = parsed.query; + url_parse::Component key, value; + while (url_parse::ExtractQueryKeyValue(url.spec().c_str(), &query, &key, + &value)) { + if (key.len != 3 || strncmp(url.spec().c_str() + key.begin, "url", key.len)) + continue; + // We found a url= query string component. + if (value.len < 1) + continue; + url_canon::RawCanonOutputW<1024> decoded_url; + url_util::DecodeURLEscapeSequences(url.spec().c_str() + value.begin, + value.len, &decoded_url); + GURL new_url(string16(decoded_url.data(), decoded_url.length())); + if (!new_url.is_empty() && new_url.is_valid()) { + *alias_url = new_url; + return true; + } + return false; + } + return false; +} + +uint8 GetQueryStringBasedExperiment(const GURL& url) { + url_parse::Parsed parsed; + url_parse::ParseStandardURL(url.spec().c_str(), url.spec().length(), + &parsed); + url_parse::Component query = parsed.query; + url_parse::Component key, value; + while (url_parse::ExtractQueryKeyValue(url.spec().c_str(), &query, &key, + &value)) { + if (key.len != 3 || strncmp(url.spec().c_str() + key.begin, "lpe", key.len)) + continue; + + // We found a lpe= query string component. + if (value.len != 1) + continue; + uint8 exp = *(url.spec().c_str() + value.begin) - '0'; + if (exp < 1 || exp > 9) + continue; + return exp; + } + return kNoExperiment; +} + +} // namespace prerender |
