summaryrefslogtreecommitdiffstats
path: root/chrome/browser/search_engines
diff options
context:
space:
mode:
authorbeaudoin@chromium.org <beaudoin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-01-03 21:22:43 +0000
committerbeaudoin@chromium.org <beaudoin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-01-03 21:22:43 +0000
commit008987b027bb94fcffec30e2680d712a7eaf9912 (patch)
tree11991e5b517d991c537add773fa32fab316caf58 /chrome/browser/search_engines
parent7f25632befd598b0fa96088c03d16ed604724819 (diff)
downloadchromium_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')
-rw-r--r--chrome/browser/search_engines/prepopulated_engines.json3
-rw-r--r--chrome/browser/search_engines/prepopulated_engines_schema.json12
-rw-r--r--chrome/browser/search_engines/template_url.cc4
-rw-r--r--chrome/browser/search_engines/template_url.h8
-rw-r--r--chrome/browser/search_engines/template_url_prepopulate_data.cc46
-rw-r--r--chrome/browser/search_engines/template_url_prepopulate_data_unittest.cc4
-rw-r--r--chrome/browser/search_engines/template_url_service.cc18
-rw-r--r--chrome/browser/search_engines/template_url_service_factory.cc4
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 {