summaryrefslogtreecommitdiffstats
path: root/chrome/browser/google/google_util.cc
diff options
context:
space:
mode:
authorcramya@chromium.org <cramya@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-03-20 11:56:38 +0000
committercramya@chromium.org <cramya@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-03-20 11:56:38 +0000
commit9982806f4cc9e515bffd3bba9f822186338f79e2 (patch)
tree9923f2cfb3ad7b1f9ffb231fe587db79721695ca /chrome/browser/google/google_util.cc
parent97004d495b68faf072479bcbea962cdffa5afd58 (diff)
downloadchromium_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.cc30
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, '&', &parameters);
- 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) {