Commit 025b85f0 authored by Pavel Yatsuk's avatar Pavel Yatsuk Committed by Commit Bot

[SEC] Add support for suggestions url for Play API search engine

Search engine propagated from Play API should provide search
suggestions. This CL adds support for suggestions_url parameter.

R=krb@chromium.org,tedchoc@chromium.org

Bug: 1002271
Change-Id: I45ee7bf9585363b4c793b81369a8ce72f75246ed
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1880372Reviewed-by: default avatarTed Choc <tedchoc@chromium.org>
Reviewed-by: default avatarKevin Bailey <krb@chromium.org>
Commit-Queue: Pavel Yatsuk <pavely@chromium.org>
Cr-Commit-Position: refs/heads/master@{#709475}
parent e732005b
...@@ -279,8 +279,9 @@ public class TemplateUrlServiceTest { ...@@ -279,8 +279,9 @@ public class TemplateUrlServiceTest {
Assert.assertTrue(TestThreadUtils.runOnUiThreadBlockingNoException(new Callable<Boolean>() { Assert.assertTrue(TestThreadUtils.runOnUiThreadBlockingNoException(new Callable<Boolean>() {
@Override @Override
public Boolean call() { public Boolean call() {
return templateUrlService.setPlayAPISearchEngine( return templateUrlService.setPlayAPISearchEngine("SearchEngine1", "keyword1",
"SearchEngine1", "keyword1", PLAY_API_SEARCH_URL, "https://fav.icon"); PLAY_API_SEARCH_URL, "https://suggest.engine?q={searchTerms}",
"https://fav.icon");
} }
})); }));
TemplateUrl defaultSearchEngine = TemplateUrl defaultSearchEngine =
...@@ -309,8 +310,9 @@ public class TemplateUrlServiceTest { ...@@ -309,8 +310,9 @@ public class TemplateUrlServiceTest {
Assert.assertTrue(TestThreadUtils.runOnUiThreadBlockingNoException(new Callable<Boolean>() { Assert.assertTrue(TestThreadUtils.runOnUiThreadBlockingNoException(new Callable<Boolean>() {
@Override @Override
public Boolean call() { public Boolean call() {
return templateUrlService.setPlayAPISearchEngine( return templateUrlService.setPlayAPISearchEngine("SearchEngine1", "keyword1",
"SearchEngine1", "keyword1", PLAY_API_SEARCH_URL, "https://fav.icon"); PLAY_API_SEARCH_URL, "https://suggest.engine?q={searchTerms}",
"https://fav.icon");
} }
})); }));
TemplateUrl defaultSearchEngine = TemplateUrl defaultSearchEngine =
...@@ -330,7 +332,8 @@ public class TemplateUrlServiceTest { ...@@ -330,7 +332,8 @@ public class TemplateUrlServiceTest {
@Override @Override
public Boolean call() { public Boolean call() {
return templateUrlService.setPlayAPISearchEngine("SearchEngine2", return templateUrlService.setPlayAPISearchEngine("SearchEngine2",
"keyword2", PLAY_API_SEARCH_URL, "https://fav.icon"); "keyword2", PLAY_API_SEARCH_URL,
"https://suggest.engine?q={searchTerms}", "https://fav.icon");
} }
})); }));
......
...@@ -730,12 +730,14 @@ TEST_F(TemplateURLServiceTest, CreateFromPlayAPI) { ...@@ -730,12 +730,14 @@ TEST_F(TemplateURLServiceTest, CreateFromPlayAPI) {
const base::string16 short_name = ASCIIToUTF16("google"); const base::string16 short_name = ASCIIToUTF16("google");
const base::string16 keyword = ASCIIToUTF16("keyword"); const base::string16 keyword = ASCIIToUTF16("keyword");
const std::string search_url = "http://www.google.com/foo/bar"; const std::string search_url = "http://www.google.com/foo/bar";
const std::string suggest_url = "http://www.google.com/suggest";
const std::string favicon_url = "http://favicon.url"; const std::string favicon_url = "http://favicon.url";
TemplateURL* t_url = model()->CreateOrUpdateTemplateURLFromPlayAPIData( TemplateURL* t_url = model()->CreateOrUpdateTemplateURLFromPlayAPIData(
short_name, keyword, search_url, favicon_url); short_name, keyword, search_url, suggest_url, favicon_url);
ASSERT_EQ(short_name, t_url->short_name()); ASSERT_EQ(short_name, t_url->short_name());
ASSERT_EQ(keyword, t_url->keyword()); ASSERT_EQ(keyword, t_url->keyword());
ASSERT_EQ(search_url, t_url->url()); ASSERT_EQ(search_url, t_url->url());
ASSERT_EQ(suggest_url, t_url->suggestions_url());
ASSERT_EQ(GURL(favicon_url), t_url->favicon_url()); ASSERT_EQ(GURL(favicon_url), t_url->favicon_url());
ASSERT_TRUE(t_url->created_from_play_api()); ASSERT_TRUE(t_url->created_from_play_api());
ASSERT_EQ(t_url, model()->GetTemplateURLForKeyword(keyword)); ASSERT_EQ(t_url, model()->GetTemplateURLForKeyword(keyword));
...@@ -777,13 +779,16 @@ TEST_F(TemplateURLServiceTest, UpdateFromPlayAPI) { ...@@ -777,13 +779,16 @@ TEST_F(TemplateURLServiceTest, UpdateFromPlayAPI) {
// Reset the short name and url and make sure it takes. // Reset the short name and url and make sure it takes.
const base::string16 new_short_name = ASCIIToUTF16("new_name"); const base::string16 new_short_name = ASCIIToUTF16("new_name");
const std::string new_search_url = "new_url"; const std::string new_search_url = "new_url";
const std::string new_suggest_url = "new_suggest_url";
const std::string new_favicon_url = "new_favicon_url"; const std::string new_favicon_url = "new_favicon_url";
TemplateURL* updated_turl = model()->CreateOrUpdateTemplateURLFromPlayAPIData( TemplateURL* updated_turl = model()->CreateOrUpdateTemplateURLFromPlayAPIData(
new_short_name, keyword, new_search_url, new_favicon_url); new_short_name, keyword, new_search_url, new_suggest_url,
new_favicon_url);
ASSERT_EQ(t_url, updated_turl); ASSERT_EQ(t_url, updated_turl);
ASSERT_EQ(new_short_name, t_url->short_name()); ASSERT_EQ(new_short_name, t_url->short_name());
ASSERT_EQ(keyword, t_url->keyword()); ASSERT_EQ(keyword, t_url->keyword());
ASSERT_EQ(new_search_url, t_url->url()); ASSERT_EQ(new_search_url, t_url->url());
ASSERT_EQ(new_suggest_url, t_url->suggestions_url());
ASSERT_EQ(GURL(new_favicon_url), t_url->favicon_url()); ASSERT_EQ(GURL(new_favicon_url), t_url->favicon_url());
ASSERT_TRUE(t_url->created_from_play_api()); ASSERT_TRUE(t_url->created_from_play_api());
......
...@@ -306,14 +306,22 @@ public class TemplateUrlService { ...@@ -306,14 +306,22 @@ public class TemplateUrlService {
* @param name The name of the search engine to be added. * @param name The name of the search engine to be added.
* @param keyword The keyword of the search engine to be added. * @param keyword The keyword of the search engine to be added.
* @param searchUrl Search url of the search engine to be added. * @param searchUrl Search url of the search engine to be added.
* @param suggestUrl Url for retrieving search suggestions.
* @param faviconUrl Favicon url of the search engine to be added. * @param faviconUrl Favicon url of the search engine to be added.
* @return True if search engine was successfully added, false if search engine from Play API * @return True if search engine was successfully added, false if search engine from Play API
* with such keyword already existed (e.g. from previous attempt to set search engine). * with such keyword already existed (e.g. from previous attempt to set search engine).
*/ */
public boolean setPlayAPISearchEngine(
String name, String keyword, String searchUrl, String suggestUrl, String faviconUrl) {
return TemplateUrlServiceJni.get().setPlayAPISearchEngine(mNativeTemplateUrlServiceAndroid,
TemplateUrlService.this, name, keyword, searchUrl, suggestUrl, faviconUrl);
}
// TODO(crbug/1002271): This API is called from clank repo. Helper function below will be
// removed once clank repo is updated.
public boolean setPlayAPISearchEngine( public boolean setPlayAPISearchEngine(
String name, String keyword, String searchUrl, String faviconUrl) { String name, String keyword, String searchUrl, String faviconUrl) {
return TemplateUrlServiceJni.get().setPlayAPISearchEngine(mNativeTemplateUrlServiceAndroid, return TemplateUrlServiceJni.get().setPlayAPISearchEngine(mNativeTemplateUrlServiceAndroid,
TemplateUrlService.this, name, keyword, searchUrl, faviconUrl); TemplateUrlService.this, name, keyword, searchUrl, null, faviconUrl);
} }
@VisibleForTesting @VisibleForTesting
...@@ -357,7 +365,7 @@ public class TemplateUrlService { ...@@ -357,7 +365,7 @@ public class TemplateUrlService {
TemplateUrlService caller, String keyword, int offset); TemplateUrlService caller, String keyword, int offset);
boolean setPlayAPISearchEngine(long nativeTemplateUrlServiceAndroid, boolean setPlayAPISearchEngine(long nativeTemplateUrlServiceAndroid,
TemplateUrlService caller, String name, String keyword, String searchUrl, TemplateUrlService caller, String name, String keyword, String searchUrl,
String faviconUrl); String suggestUrl, String faviconUrl);
String updateLastVisitedForTesting( String updateLastVisitedForTesting(
long nativeTemplateUrlServiceAndroid, TemplateUrlService caller, String keyword); long nativeTemplateUrlServiceAndroid, TemplateUrlService caller, String keyword);
void getTemplateUrls(long nativeTemplateUrlServiceAndroid, TemplateUrlService caller, void getTemplateUrls(long nativeTemplateUrlServiceAndroid, TemplateUrlService caller,
......
...@@ -244,6 +244,7 @@ jboolean TemplateUrlServiceAndroid::SetPlayAPISearchEngine( ...@@ -244,6 +244,7 @@ jboolean TemplateUrlServiceAndroid::SetPlayAPISearchEngine(
const base::android::JavaParamRef<jstring>& jname, const base::android::JavaParamRef<jstring>& jname,
const base::android::JavaParamRef<jstring>& jkeyword, const base::android::JavaParamRef<jstring>& jkeyword,
const base::android::JavaParamRef<jstring>& jsearch_url, const base::android::JavaParamRef<jstring>& jsearch_url,
const base::android::JavaParamRef<jstring>& jsuggest_url,
const base::android::JavaParamRef<jstring>& jfavicon_url) { const base::android::JavaParamRef<jstring>& jfavicon_url) {
// Check if there is already a search engine created from Play API. // Check if there is already a search engine created from Play API.
TemplateURLService::TemplateURLVector template_urls = TemplateURLService::TemplateURLVector template_urls =
...@@ -258,12 +259,18 @@ jboolean TemplateUrlServiceAndroid::SetPlayAPISearchEngine( ...@@ -258,12 +259,18 @@ jboolean TemplateUrlServiceAndroid::SetPlayAPISearchEngine(
base::android::ConvertJavaStringToUTF16(env, jkeyword); base::android::ConvertJavaStringToUTF16(env, jkeyword);
base::string16 name = base::android::ConvertJavaStringToUTF16(env, jname); base::string16 name = base::android::ConvertJavaStringToUTF16(env, jname);
std::string search_url = base::android::ConvertJavaStringToUTF8(jsearch_url); std::string search_url = base::android::ConvertJavaStringToUTF8(jsearch_url);
std::string favicon_url = std::string suggest_url;
base::android::ConvertJavaStringToUTF8(jfavicon_url); if (jsuggest_url) {
suggest_url = base::android::ConvertJavaStringToUTF8(jsuggest_url);
}
std::string favicon_url;
if (jfavicon_url) {
favicon_url = base::android::ConvertJavaStringToUTF8(jfavicon_url);
}
TemplateURL* t_url = TemplateURL* t_url =
template_url_service_->CreateOrUpdateTemplateURLFromPlayAPIData( template_url_service_->CreateOrUpdateTemplateURLFromPlayAPIData(
name, keyword, search_url, favicon_url); name, keyword, search_url, suggest_url, favicon_url);
if (template_url_service_->CanMakeDefault(t_url)) if (template_url_service_->CanMakeDefault(t_url))
template_url_service_->SetUserSelectedDefaultSearchProvider(t_url); template_url_service_->SetUserSelectedDefaultSearchProvider(t_url);
......
...@@ -75,6 +75,7 @@ class TemplateUrlServiceAndroid : public TemplateURLServiceObserver { ...@@ -75,6 +75,7 @@ class TemplateUrlServiceAndroid : public TemplateURLServiceObserver {
const base::android::JavaParamRef<jstring>& jname, const base::android::JavaParamRef<jstring>& jname,
const base::android::JavaParamRef<jstring>& jkeyword, const base::android::JavaParamRef<jstring>& jkeyword,
const base::android::JavaParamRef<jstring>& jsearch_url, const base::android::JavaParamRef<jstring>& jsearch_url,
const base::android::JavaParamRef<jstring>& jsuggest_url,
const base::android::JavaParamRef<jstring>& jfavicon_url); const base::android::JavaParamRef<jstring>& jfavicon_url);
// Adds a custom search engine, sets |jkeyword| as its short_name and keyword, // Adds a custom search engine, sets |jkeyword| as its short_name and keyword,
......
...@@ -621,6 +621,7 @@ TemplateURL* TemplateURLService::CreateOrUpdateTemplateURLFromPlayAPIData( ...@@ -621,6 +621,7 @@ TemplateURL* TemplateURLService::CreateOrUpdateTemplateURLFromPlayAPIData(
const base::string16& title, const base::string16& title,
const base::string16& keyword, const base::string16& keyword,
const std::string& search_url, const std::string& search_url,
const std::string& suggestions_url,
const std::string& favicon_url) { const std::string& favicon_url) {
TemplateURL* existing_turl = FindNonExtensionTemplateURLForKeyword(keyword); TemplateURL* existing_turl = FindNonExtensionTemplateURLForKeyword(keyword);
TemplateURLData data; TemplateURLData data;
...@@ -629,6 +630,7 @@ TemplateURL* TemplateURLService::CreateOrUpdateTemplateURLFromPlayAPIData( ...@@ -629,6 +630,7 @@ TemplateURL* TemplateURLService::CreateOrUpdateTemplateURLFromPlayAPIData(
data.SetShortName(title); data.SetShortName(title);
data.SetKeyword(keyword); data.SetKeyword(keyword);
data.SetURL(search_url); data.SetURL(search_url);
data.suggestions_url = suggestions_url;
data.favicon_url = GURL(favicon_url); data.favicon_url = GURL(favicon_url);
data.safe_for_autoreplace = true; data.safe_for_autoreplace = true;
data.created_from_play_api = true; data.created_from_play_api = true;
......
...@@ -261,6 +261,7 @@ class TemplateURLService : public WebDataServiceConsumer, ...@@ -261,6 +261,7 @@ class TemplateURLService : public WebDataServiceConsumer,
const base::string16& title, const base::string16& title,
const base::string16& keyword, const base::string16& keyword,
const std::string& search_url, const std::string& search_url,
const std::string& suggestions_url,
const std::string& favicon_url); const std::string& favicon_url);
// Updates any search providers matching |potential_search_url| with the new // Updates any search providers matching |potential_search_url| with the new
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment