diff options
author | beaudoin@chromium.org <beaudoin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-01-03 21:22:43 +0000 |
---|---|---|
committer | beaudoin@chromium.org <beaudoin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-01-03 21:22:43 +0000 |
commit | 008987b027bb94fcffec30e2680d712a7eaf9912 (patch) | |
tree | 11991e5b517d991c537add773fa32fab316caf58 /chrome/browser/search_engines | |
parent | 7f25632befd598b0fa96088c03d16ed604724819 (diff) | |
download | chromium_src-008987b027bb94fcffec30e2680d712a7eaf9912.zip chromium_src-008987b027bb94fcffec30e2680d712a7eaf9912.tar.gz chromium_src-008987b027bb94fcffec30e2680d712a7eaf9912.tar.bz2 |
Add search_terms_replacement_key field to TemplateURL.
This CL is the first step in removing the hardcoded "espv" parameter used by instant-extended to detect when to perform search term replacement in the omnibox.
The search_terms_replacement_key has beed added to prepopulated_engines, TemplateURL, policy, web_database, prefs, and sync.
BUG=161602
Review URL: https://chromiumcodereview.appspot.com/11552020
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@175014 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/search_engines')
8 files changed, 73 insertions, 26 deletions
diff --git a/chrome/browser/search_engines/prepopulated_engines.json b/chrome/browser/search_engines/prepopulated_engines.json index 232f571..15a9862 100644 --- a/chrome/browser/search_engines/prepopulated_engines.json +++ b/chrome/browser/search_engines/prepopulated_engines.json @@ -26,7 +26,7 @@ // Increment this if you change the data in ways that mean users with // existing data should get a new version. - "kCurrentDataVersion": 49 + "kCurrentDataVersion": 50 }, // The following engines are included in country lists and are added to the @@ -855,6 +855,7 @@ "{google:baseURL}search#q={searchTerms}", "{google:baseURL}webhp#q={searchTerms}" ], + "search_terms_replacement_key": "{google:instantExtendedEnabledKey}", "type": "SEARCH_ENGINE_GOOGLE", "id": 1 }, diff --git a/chrome/browser/search_engines/prepopulated_engines_schema.json b/chrome/browser/search_engines/prepopulated_engines_schema.json index 0838e22..ae0f1ad 100644 --- a/chrome/browser/search_engines/prepopulated_engines_schema.json +++ b/chrome/browser/search_engines/prepopulated_engines_schema.json @@ -23,9 +23,9 @@ "optional": true }, // If omitted, this engine does not support suggestions. - { "field": "suggest_url", "type": "string", "optional": true }, + { "field": "suggest_url", "type": "string", "optional": true }, // If omitted, this engine does not support instant. - { "field": "instant_url", "type": "string", "optional": true }, + { "field": "instant_url", "type": "string", "optional": true }, // A list of URL patterns that can be used, in addition to |search_url|, // to extract search terms from a URL. { @@ -34,6 +34,14 @@ "contents": { "type": "string" }, "optional": true }, + // A parameter that, if present in the query or ref parameters of a + // search_url or instant_url, causes Chrome to replace the URL with the + // search term. + { + "field": "search_terms_replacement_key", + "type": "string", + "optional": true + }, { "field": "type", "type": "enum", diff --git a/chrome/browser/search_engines/template_url.cc b/chrome/browser/search_engines/template_url.cc index 43c8c38..9944621 100644 --- a/chrome/browser/search_engines/template_url.cc +++ b/chrome/browser/search_engines/template_url.cc @@ -58,6 +58,8 @@ const char kGoogleCursorPositionParameter[] = "google:cursorPosition"; const char kGoogleInstantEnabledParameter[] = "google:instantEnabledParameter"; const char kGoogleInstantExtendedEnabledParameter[] = "google:instantExtendedEnabledParameter"; +const char kGoogleInstantExtendedEnabledKey[] = + "google:instantExtendedEnabledKey"; const char kGoogleOriginalQueryForSuggestionParameter[] = "google:originalQueryForSuggestion"; const char kGoogleRLZParameter[] = "google:RLZ"; @@ -571,6 +573,8 @@ bool TemplateURLRef::ParseParameter(size_t start, } else if (parameter == kGoogleInstantExtendedEnabledParameter) { replacements->push_back(Replacement(GOOGLE_INSTANT_EXTENDED_ENABLED, start)); + } else if (parameter == kGoogleInstantExtendedEnabledKey) { + url->insert(start, google_util::kInstantExtendedAPIParam); } else if (parameter == kGoogleOriginalQueryForSuggestionParameter) { replacements->push_back(Replacement(GOOGLE_ORIGINAL_QUERY_FOR_SUGGESTION, start)); diff --git a/chrome/browser/search_engines/template_url.h b/chrome/browser/search_engines/template_url.h index 6fba137..b5a3576 100644 --- a/chrome/browser/search_engines/template_url.h +++ b/chrome/browser/search_engines/template_url.h @@ -352,6 +352,10 @@ struct TemplateURLData { // search terms from a URL. std::vector<std::string> alternate_urls; + // A parameter that, if present in the query or ref parameters of a search_url + // or instant_url, causes Chrome to replace the URL with the search term. + std::string search_terms_replacement_key; + private: // Private so we can enforce using the setters and thus enforce that these // fields are never empty. @@ -427,6 +431,10 @@ class TemplateURL { const std::string& sync_guid() const { return data_.sync_guid; } + const std::string& search_terms_replacement_key() const { + return data_.search_terms_replacement_key; + } + const TemplateURLRef& url_ref() const { return url_ref_; } const TemplateURLRef& suggestions_url_ref() const { return suggestions_url_ref_; diff --git a/chrome/browser/search_engines/template_url_prepopulate_data.cc b/chrome/browser/search_engines/template_url_prepopulate_data.cc index fa0fc4f4..b2a857b 100644 --- a/chrome/browser/search_engines/template_url_prepopulate_data.cc +++ b/chrome/browser/search_engines/template_url_prepopulate_data.cc @@ -1110,16 +1110,18 @@ int GetDataVersion(PrefService* prefs) { kCurrentDataVersion; } -TemplateURL* MakePrepopulatedTemplateURL(Profile* profile, - const string16& name, - const string16& keyword, - const base::StringPiece& search_url, - const base::StringPiece& suggest_url, - const base::StringPiece& instant_url, - const ListValue& alternate_urls, - const base::StringPiece& favicon_url, - const base::StringPiece& encoding, - int id) { +TemplateURL* MakePrepopulatedTemplateURL( + Profile* profile, + const string16& name, + const string16& keyword, + const base::StringPiece& search_url, + const base::StringPiece& suggest_url, + const base::StringPiece& instant_url, + const base::StringPiece& favicon_url, + const base::StringPiece& encoding, + const ListValue& alternate_urls, + const base::StringPiece& search_terms_replacement_key, + int id) { TemplateURLData data; @@ -1128,12 +1130,6 @@ TemplateURL* MakePrepopulatedTemplateURL(Profile* profile, data.SetURL(search_url.as_string()); data.suggestions_url = suggest_url.as_string(); data.instant_url = instant_url.as_string(); - for (size_t i = 0; i < alternate_urls.GetSize(); ++i) { - std::string alternate_url; - alternate_urls.GetString(i, &alternate_url); - DCHECK(!alternate_url.empty()); - data.alternate_urls.push_back(alternate_url); - } data.favicon_url = GURL(favicon_url.as_string()); data.show_in_default_list = true; data.safe_for_autoreplace = true; @@ -1141,6 +1137,13 @@ TemplateURL* MakePrepopulatedTemplateURL(Profile* profile, data.date_created = base::Time(); data.last_modified = base::Time(); data.prepopulate_id = id; + for (size_t i = 0; i < alternate_urls.GetSize(); ++i) { + std::string alternate_url; + alternate_urls.GetString(i, &alternate_url); + DCHECK(!alternate_url.empty()); + data.alternate_urls.push_back(alternate_url); + } + data.search_terms_replacement_key = search_terms_replacement_key.as_string(); return new TemplateURL(profile, data); } @@ -1177,12 +1180,15 @@ void GetPrepopulatedTemplateFromPrefs(Profile* profile, std::string instant_url; ListValue empty_list; const ListValue* alternate_urls = &empty_list; + std::string search_terms_replacement_key; engine->GetString("suggest_url", &suggest_url); engine->GetString("instant_url", &instant_url); engine->GetList("alternate_urls", &alternate_urls); + engine->GetString("search_terms_replacement_key", + &search_terms_replacement_key); t_urls->push_back(MakePrepopulatedTemplateURL(profile, name, keyword, - search_url, suggest_url, instant_url, *alternate_urls, favicon_url, - encoding, id)); + search_url, suggest_url, instant_url, favicon_url, encoding, + *alternate_urls, search_terms_replacement_key, id)); } } } @@ -1200,8 +1206,8 @@ TemplateURL* MakePrepopulatedTemplateURLFromPrepopulateEngine( return MakePrepopulatedTemplateURL(profile, WideToUTF16(engine.name), WideToUTF16(engine.keyword), engine.search_url, engine.suggest_url, - engine.instant_url, alternate_urls, - engine.favicon_url, engine.encoding, engine.id); + engine.instant_url, engine.favicon_url, engine.encoding, alternate_urls, + engine.search_terms_replacement_key, engine.id); } void GetPrepopulatedEngines(Profile* profile, 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 a8b765c..b53013f 100644 --- a/chrome/browser/search_engines/template_url_prepopulate_data_unittest.cc +++ b/chrome/browser/search_engines/template_url_prepopulate_data_unittest.cc @@ -128,6 +128,7 @@ TEST(TemplateURLPrepopulateDataTest, ProvidersFromPrefs) { EXPECT_TRUE(t_urls[0]->suggestions_url().empty()); EXPECT_TRUE(t_urls[0]->instant_url().empty()); EXPECT_EQ(0u, t_urls[0]->alternate_urls().size()); + EXPECT_TRUE(t_urls[0]->search_terms_replacement_key().empty()); // Test the optional settings too. entry->SetString("suggest_url", "http://foo.com/suggest?q={searchTerms}"); @@ -135,6 +136,7 @@ TEST(TemplateURLPrepopulateDataTest, ProvidersFromPrefs) { ListValue* alternate_urls = new ListValue; alternate_urls->AppendString("http://foo.com/alternate?q={searchTerms}"); entry->Set("alternate_urls", alternate_urls); + entry->SetString("search_terms_replacement_key", "espv"); overrides = new ListValue; overrides->Append(entry->DeepCopy()); prefs->SetUserPref(prefs::kSearchProviderOverrides, overrides); @@ -156,6 +158,7 @@ TEST(TemplateURLPrepopulateDataTest, ProvidersFromPrefs) { ASSERT_EQ(1u, t_urls[0]->alternate_urls().size()); EXPECT_EQ("http://foo.com/alternate?q={searchTerms}", t_urls[0]->alternate_urls()[0]); + EXPECT_EQ("espv", t_urls[0]->search_terms_replacement_key()); // Test that subsequent providers are loaded even if an intermediate // provider has an incomplete configuration. @@ -212,6 +215,7 @@ TEST(TemplateURLPrepopulateDataTest, ProvidersFromPrepopulated) { EXPECT_FALSE(t_urls[default_index]->alternate_urls()[i].empty()); EXPECT_EQ(SEARCH_ENGINE_GOOGLE, TemplateURLPrepopulateData::GetEngineType(t_urls[default_index]->url())); + EXPECT_FALSE(t_urls[default_index]->search_terms_replacement_key().empty()); } TEST(TemplateURLPrepopulateDataTest, GetEngineTypeBasic) { diff --git a/chrome/browser/search_engines/template_url_service.cc b/chrome/browser/search_engines/template_url_service.cc index 9730a09..576bc50 100644 --- a/chrome/browser/search_engines/template_url_service.cc +++ b/chrome/browser/search_engines/template_url_service.cc @@ -80,7 +80,9 @@ bool TemplateURLsHaveSamePrefs(const TemplateURL* url1, (url1->safe_for_autoreplace() == url2->safe_for_autoreplace()) && (url1->show_in_default_list() == url2->show_in_default_list()) && (url1->input_encodings() == url2->input_encodings()) && - (url1->alternate_urls() == url2->alternate_urls()); + (url1->alternate_urls() == url2->alternate_urls()) && + (url1->search_terms_replacement_key() == + url2->search_terms_replacement_key()); } const char kFirstPotentialEngineHistogramName[] = @@ -1246,10 +1248,12 @@ syncer::SyncData TemplateURLService::CreateSyncDataFromTemplateURL( se_specifics->set_sync_guid(turl.sync_guid()); for (size_t i = 0; i < turl.alternate_urls().size(); ++i) se_specifics->add_alternate_urls(turl.alternate_urls()[i]); + se_specifics->set_search_terms_replacement_key( + turl.search_terms_replacement_key()); return syncer::SyncData::CreateLocalData(se_specifics->sync_guid(), - se_specifics->keyword(), - specifics); + se_specifics->keyword(), + specifics); } // static @@ -1309,6 +1313,7 @@ TemplateURL* TemplateURLService::CreateTemplateURLFromTemplateURLAndSyncData( data.alternate_urls.clear(); for (int i = 0; i < specifics.alternate_urls_size(); ++i) data.alternate_urls.push_back(specifics.alternate_urls(i)); + data.search_terms_replacement_key = specifics.search_terms_replacement_key(); TemplateURL* turl = new TemplateURL(profile, data); DCHECK(!turl->IsExtensionKeyword()); @@ -1572,6 +1577,7 @@ void TemplateURLService::SaveDefaultSearchProviderToPrefs( std::string id_string; std::string prepopulate_id; ListValue alternate_urls; + std::string search_terms_replacement_key; if (t_url) { DCHECK(!t_url->IsExtensionKeyword()); enabled = true; @@ -1588,6 +1594,7 @@ void TemplateURLService::SaveDefaultSearchProviderToPrefs( prepopulate_id = base::Int64ToString(t_url->prepopulate_id()); for (size_t i = 0; i < t_url->alternate_urls().size(); ++i) alternate_urls.AppendString(t_url->alternate_urls()[i]); + search_terms_replacement_key = t_url->search_terms_replacement_key(); } prefs->SetBoolean(prefs::kDefaultSearchProviderEnabled, enabled); prefs->SetString(prefs::kDefaultSearchProviderSearchURL, search_url); @@ -1600,6 +1607,8 @@ void TemplateURLService::SaveDefaultSearchProviderToPrefs( prefs->SetString(prefs::kDefaultSearchProviderID, id_string); prefs->SetString(prefs::kDefaultSearchProviderPrepopulateID, prepopulate_id); prefs->Set(prefs::kDefaultSearchProviderAlternateURLs, alternate_urls); + prefs->SetString(prefs::kDefaultSearchProviderSearchTermsReplacementKey, + search_terms_replacement_key); } bool TemplateURLService::LoadDefaultSearchProviderFromPrefs( @@ -1650,6 +1659,8 @@ bool TemplateURLService::LoadDefaultSearchProviderFromPrefs( prefs->GetString(prefs::kDefaultSearchProviderPrepopulateID); const ListValue* alternate_urls = prefs->GetList(prefs::kDefaultSearchProviderAlternateURLs); + std::string search_terms_replacement_key = prefs->GetString( + prefs::kDefaultSearchProviderSearchTermsReplacementKey); TemplateURLData data; data.short_name = name; @@ -1665,6 +1676,7 @@ bool TemplateURLService::LoadDefaultSearchProviderFromPrefs( if (alternate_urls->GetString(i, &alternate_url)) data.alternate_urls.push_back(alternate_url); } + data.search_terms_replacement_key = search_terms_replacement_key; base::SplitString(encodings, ';', &data.input_encodings); if (!id_string.empty() && !*is_managed) { int64 value; diff --git a/chrome/browser/search_engines/template_url_service_factory.cc b/chrome/browser/search_engines/template_url_service_factory.cc index 4dd8d29..6a63158 100644 --- a/chrome/browser/search_engines/template_url_service_factory.cc +++ b/chrome/browser/search_engines/template_url_service_factory.cc @@ -80,6 +80,10 @@ void TemplateURLServiceFactory::RegisterUserPrefs(PrefServiceSyncable* prefs) { PrefServiceSyncable::UNSYNCABLE_PREF); prefs->RegisterListPref(prefs::kDefaultSearchProviderAlternateURLs, PrefServiceSyncable::UNSYNCABLE_PREF); + prefs->RegisterStringPref( + prefs::kDefaultSearchProviderSearchTermsReplacementKey, + std::string(), + PrefServiceSyncable::UNSYNCABLE_PREF); } bool TemplateURLServiceFactory::ServiceRedirectedInIncognito() const { |