diff options
author | ivankr@chromium.org <ivankr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-12-20 11:18:52 +0000 |
---|---|---|
committer | ivankr@chromium.org <ivankr@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-12-20 11:18:52 +0000 |
commit | 16c179ad5f531e1ea3aefe56ba40d82cd579908d (patch) | |
tree | 8984c006ff5ce09c4c798b6392b1b3f24cc7df4a /chrome | |
parent | 4f9b1433901a742ba7fc7aba9824509dc186b913 (diff) | |
download | chromium_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')
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")); +} |