diff options
author | cramya@chromium.org <cramya@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-03-20 11:56:38 +0000 |
---|---|---|
committer | cramya@chromium.org <cramya@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-03-20 11:56:38 +0000 |
commit | 9982806f4cc9e515bffd3bba9f822186338f79e2 (patch) | |
tree | 9923f2cfb3ad7b1f9ffb231fe587db79721695ca /chrome/browser/google/google_util.cc | |
parent | 97004d495b68faf072479bcbea962cdffa5afd58 (diff) | |
download | chromium_src-9982806f4cc9e515bffd3bba9f822186338f79e2.zip chromium_src-9982806f4cc9e515bffd3bba9f822186338f79e2.tar.gz chromium_src-9982806f4cc9e515bffd3bba9f822186338f79e2.tar.bz2 |
Choose sboxchip parameter in URL fragment over value in query.
GetCorpusNameForMobile() needs to check if there is an sboxchip
parameter in the URL fragment, and if so, prefer that over the value
in the query. Without this, we will often parse out an incorrect chip
value on tablet.
BUG=179439
Review URL: https://chromiumcodereview.appspot.com/12902020
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@189240 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/google/google_util.cc')
-rw-r--r-- | chrome/browser/google/google_util.cc | 30 |
1 files changed, 12 insertions, 18 deletions
diff --git a/chrome/browser/google/google_util.cc b/chrome/browser/google/google_util.cc index a520822..d66a585 100644 --- a/chrome/browser/google/google_util.cc +++ b/chrome/browser/google/google_util.cc @@ -39,28 +39,22 @@ namespace { const char* brand_for_testing = NULL; -// True iff |str| contains a "q=" query parameter with a non-empty value. -// |str| should be a URL parameter or a hash fragment, without the ? or # (as -// returned by GURL::query() or GURL::ref(). -bool HasQueryParameter(const std::string& str) { - std::vector<std::string> parameters; - - base::SplitString(str, '&', ¶meters); - for (std::vector<std::string>::const_iterator itr = parameters.begin(); - itr != parameters.end(); - ++itr) { - if (StartsWithASCII(*itr, "q=", false) && itr->size() > 2) - return true; - } - return false; -} - bool gUseMockLinkDoctorBaseURLForTesting = false; } // anonymous namespace namespace google_util { +bool HasGoogleSearchQueryParam(const std::string& str) { + url_parse::Component query(0, str.length()), key, value; + while (url_parse::ExtractQueryKeyValue(str.c_str(), &query, &key, + &value)) { + if ((key.len == 1) && (str[key.begin] == 'q') && value.is_nonempty()) + return true; + } + return false; +} + GURL LinkDoctorBaseURL() { if (gUseMockLinkDoctorBaseURLForTesting) return GURL("http://mock.linkdoctor.url/for?testing"); @@ -238,8 +232,8 @@ bool IsGoogleSearchUrl(const std::string& url) { // the path type. std::string query(original_url.query()); std::string ref(original_url.ref()); - return HasQueryParameter(ref) || - (!is_home_page_base && HasQueryParameter(query)); + return HasGoogleSearchQueryParam(ref) || + (!is_home_page_base && HasGoogleSearchQueryParam(query)); } bool IsOrganic(const std::string& brand) { |