summaryrefslogtreecommitdiffstats
path: root/chrome
diff options
context:
space:
mode:
authorivankr@chromium.org <ivankr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-12-20 11:18:52 +0000
committerivankr@chromium.org <ivankr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-12-20 11:18:52 +0000
commit16c179ad5f531e1ea3aefe56ba40d82cd579908d (patch)
tree8984c006ff5ce09c4c798b6392b1b3f24cc7df4a /chrome
parent4f9b1433901a742ba7fc7aba9824509dc186b913 (diff)
downloadchromium_src-16c179ad5f531e1ea3aefe56ba40d82cd579908d.zip
chromium_src-16c179ad5f531e1ea3aefe56ba40d82cd579908d.tar.gz
chromium_src-16c179ad5f531e1ea3aefe56ba40d82cd579908d.tar.bz2
Protector: use search URL origin to get search engine ID for histograms.
BUG=108061 TEST=TemplateURLPrepopulateDataTest.FindPrepopulatedEngine; manual: replace google:baseURL with a custom URL like www.google.com; Protector should still report this search engine as 'Google' (1) instead of 'Other' (0). Review URL: http://codereview.chromium.org/8992014 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@115111 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome')
-rw-r--r--chrome/browser/search_engines/template_url_prepopulate_data.cc12
-rw-r--r--chrome/browser/search_engines/template_url_prepopulate_data.h6
-rw-r--r--chrome/browser/search_engines/template_url_prepopulate_data_unittest.cc44
3 files changed, 54 insertions, 8 deletions
diff --git a/chrome/browser/search_engines/template_url_prepopulate_data.cc b/chrome/browser/search_engines/template_url_prepopulate_data.cc
index 15579d6..2f65c87 100644
--- a/chrome/browser/search_engines/template_url_prepopulate_data.cc
+++ b/chrome/browser/search_engines/template_url_prepopulate_data.cc
@@ -14,6 +14,7 @@
#include "base/string_util.h"
#include "base/stl_util.h"
#include "base/utf_string_conversions.h"
+#include "chrome/browser/google/google_util.h"
#include "chrome/browser/prefs/pref_service.h"
#include "chrome/browser/search_engines/search_engine_type.h"
#include "chrome/browser/search_engines/search_terms_data.h"
@@ -3551,11 +3552,12 @@ int GetSearchEngineLogo(const GURL& url_to_find) {
}
TemplateURL* FindPrepopulatedEngine(const std::string& search_url) {
- for (size_t i = 0; i < arraysize(kAllEngines); ++i) {
- if (search_url == ToUTF8(kAllEngines[i]->search_url))
- return MakePrepopulateTemplateURLFromPrepopulateEngine(*kAllEngines[i]);
- }
- return NULL;
+ GURL search_origin(GetOriginForSearchURL(search_url));
+ // First check if it is a Google URL. User may have a custom search provider
+ // with a hard-coded Google domain instead of {google:baseURL}.
+ if (google_util::IsGoogleHomePageUrl((search_origin.spec())))
+ return MakePrepopulateTemplateURLFromPrepopulateEngine(google);
+ return GetEngineForOrigin(NULL, search_origin);
}
} // namespace TemplateURLPrepopulateData
diff --git a/chrome/browser/search_engines/template_url_prepopulate_data.h b/chrome/browser/search_engines/template_url_prepopulate_data.h
index 80a5001..66c20d6 100644
--- a/chrome/browser/search_engines/template_url_prepopulate_data.h
+++ b/chrome/browser/search_engines/template_url_prepopulate_data.h
@@ -46,9 +46,9 @@ TemplateURL* GetEngineForOrigin(PrefService* prefs, const GURL& url_to_find);
// Returns search engine logo for URLs known to have a search engine logo.
int GetSearchEngineLogo(const GURL& url_to_find);
-// Returns the prepopulated search provider whose search URL matches
-// |search_url| or NULL if none is found. The caller is responsible for
-// deleting the returned TemplateURL.
+// Returns the prepopulated search provider whose search URL origin matches the
+// origin of |search_url| or NULL if none is found. The caller is responsible
+// for deleting the returned TemplateURL.
TemplateURL* FindPrepopulatedEngine(const std::string& search_url);
} // namespace TemplateURLPrepopulateData
diff --git a/chrome/browser/search_engines/template_url_prepopulate_data_unittest.cc b/chrome/browser/search_engines/template_url_prepopulate_data_unittest.cc
index ca675f0..9d8ac53 100644
--- a/chrome/browser/search_engines/template_url_prepopulate_data_unittest.cc
+++ b/chrome/browser/search_engines/template_url_prepopulate_data_unittest.cc
@@ -185,3 +185,47 @@ TEST_F(TemplateURLPrepopulateDataTest, GetSearchEngineLogo) {
TemplateURLPrepopulateData::GetSearchEngineLogo(engine_no_logo));
}
+
+TEST_F(TemplateURLPrepopulateDataTest, FindPrepopulatedEngine) {
+ // Google URLs in different forms.
+ std::string google_search_url =
+ "{google:baseURL}search?{google:RLZ}{google:acceptedSuggestion}"
+ "{google:originalQueryForSuggestion}{google:searchFieldtrialParameter}"
+ "{google:instantFieldTrialGroupParameter}"
+ "sourceid=chrome&ie={inputEncoding}&q={searchTerms}";
+ std::string custom_google_search_url1 =
+ "http://google.com/search?{google:RLZ}{google:acceptedSuggestion}"
+ "{google:originalQueryForSuggestion}{google:searchFieldtrialParameter}"
+ "{google:instantFieldTrialGroupParameter}"
+ "sourceid=chrome&ie={inputEncoding}&q={searchTerms}";
+ std::string custom_google_search_url2 =
+ "http://www.google.ru/search?{google:RLZ}{google:acceptedSuggestion}"
+ "{google:originalQueryForSuggestion}{google:searchFieldtrialParameter}"
+ "{google:instantFieldTrialGroupParameter}"
+ "sourceid=chrome&ie={inputEncoding}&q={searchTerms}";
+ // Google's prepopulated ID is 1:
+ EXPECT_EQ(1, TemplateURLPrepopulateData::FindPrepopulatedEngine(
+ google_search_url)->prepopulate_id());
+ EXPECT_EQ(1, TemplateURLPrepopulateData::FindPrepopulatedEngine(
+ custom_google_search_url1)->prepopulate_id());
+ EXPECT_EQ(1, TemplateURLPrepopulateData::FindPrepopulatedEngine(
+ custom_google_search_url2)->prepopulate_id());
+ // Non-Google URLs.
+ std::string yahoo_search_url =
+ "http://search.yahoo.com/search?"
+ "ei={inputEncoding}&fr=crmas&p={searchTerms}";
+ std::string custom_yahoo_search_url =
+ "http://search.yahoo.com/search?p={searchTerms}";
+ // Yahoo!'s prepopulated ID is 2:
+ EXPECT_EQ(2, TemplateURLPrepopulateData::FindPrepopulatedEngine(
+ yahoo_search_url)->prepopulate_id());
+ EXPECT_EQ(2, TemplateURLPrepopulateData::FindPrepopulatedEngine(
+ custom_yahoo_search_url)->prepopulate_id());
+ // Search URL for which no prepopulated search provider exists.
+ std::string example_search_url = "http://example.net/search?q={searchTerms}";
+ EXPECT_FALSE(TemplateURLPrepopulateData::FindPrepopulatedEngine(
+ example_search_url));
+ // Invalid search URL.
+ EXPECT_FALSE(TemplateURLPrepopulateData::FindPrepopulatedEngine(
+ "invalid:search:url"));
+}