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 {
Assert.assertTrue(TestThreadUtils.runOnUiThreadBlockingNoException(new Callable<Boolean>() {
@Override
public Boolean call() {
return templateUrlService.setPlayAPISearchEngine(
"SearchEngine1", "keyword1", PLAY_API_SEARCH_URL, "https://fav.icon");
return templateUrlService.setPlayAPISearchEngine("SearchEngine1", "keyword1",
PLAY_API_SEARCH_URL, "https://suggest.engine?q={searchTerms}",
"https://fav.icon");
}
}));
TemplateUrl defaultSearchEngine =
......@@ -309,8 +310,9 @@ public class TemplateUrlServiceTest {
Assert.assertTrue(TestThreadUtils.runOnUiThreadBlockingNoException(new Callable<Boolean>() {
@Override
public Boolean call() {
return templateUrlService.setPlayAPISearchEngine(
"SearchEngine1", "keyword1", PLAY_API_SEARCH_URL, "https://fav.icon");
return templateUrlService.setPlayAPISearchEngine("SearchEngine1", "keyword1",
PLAY_API_SEARCH_URL, "https://suggest.engine?q={searchTerms}",
"https://fav.icon");
}
}));
TemplateUrl defaultSearchEngine =
......@@ -330,7 +332,8 @@ public class TemplateUrlServiceTest {
@Override
public Boolean call() {
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) {
const base::string16 short_name = ASCIIToUTF16("google");
const base::string16 keyword = ASCIIToUTF16("keyword");
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";
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(keyword, t_url->keyword());
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_TRUE(t_url->created_from_play_api());
ASSERT_EQ(t_url, model()->GetTemplateURLForKeyword(keyword));
......@@ -777,13 +779,16 @@ TEST_F(TemplateURLServiceTest, UpdateFromPlayAPI) {
// Reset the short name and url and make sure it takes.
const base::string16 new_short_name = ASCIIToUTF16("new_name");
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";
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(new_short_name, t_url->short_name());
ASSERT_EQ(keyword, t_url->keyword());
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_TRUE(t_url->created_from_play_api());
......
......@@ -306,14 +306,22 @@ public class TemplateUrlService {
* @param name The name 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 suggestUrl Url for retrieving search suggestions.
* @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
* 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(
String name, String keyword, String searchUrl, String faviconUrl) {
return TemplateUrlServiceJni.get().setPlayAPISearchEngine(mNativeTemplateUrlServiceAndroid,
TemplateUrlService.this, name, keyword, searchUrl, faviconUrl);
TemplateUrlService.this, name, keyword, searchUrl, null, faviconUrl);
}
@VisibleForTesting
......@@ -357,7 +365,7 @@ public class TemplateUrlService {
TemplateUrlService caller, String keyword, int offset);
boolean setPlayAPISearchEngine(long nativeTemplateUrlServiceAndroid,
TemplateUrlService caller, String name, String keyword, String searchUrl,
String faviconUrl);
String suggestUrl, String faviconUrl);
String updateLastVisitedForTesting(
long nativeTemplateUrlServiceAndroid, TemplateUrlService caller, String keyword);
void getTemplateUrls(long nativeTemplateUrlServiceAndroid, TemplateUrlService caller,
......
......@@ -244,6 +244,7 @@ jboolean TemplateUrlServiceAndroid::SetPlayAPISearchEngine(
const base::android::JavaParamRef<jstring>& jname,
const base::android::JavaParamRef<jstring>& jkeyword,
const base::android::JavaParamRef<jstring>& jsearch_url,
const base::android::JavaParamRef<jstring>& jsuggest_url,
const base::android::JavaParamRef<jstring>& jfavicon_url) {
// Check if there is already a search engine created from Play API.
TemplateURLService::TemplateURLVector template_urls =
......@@ -258,12 +259,18 @@ jboolean TemplateUrlServiceAndroid::SetPlayAPISearchEngine(
base::android::ConvertJavaStringToUTF16(env, jkeyword);
base::string16 name = base::android::ConvertJavaStringToUTF16(env, jname);
std::string search_url = base::android::ConvertJavaStringToUTF8(jsearch_url);
std::string favicon_url =
base::android::ConvertJavaStringToUTF8(jfavicon_url);
std::string suggest_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 =
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))
template_url_service_->SetUserSelectedDefaultSearchProvider(t_url);
......
......@@ -75,6 +75,7 @@ class TemplateUrlServiceAndroid : public TemplateURLServiceObserver {
const base::android::JavaParamRef<jstring>& jname,
const base::android::JavaParamRef<jstring>& jkeyword,
const base::android::JavaParamRef<jstring>& jsearch_url,
const base::android::JavaParamRef<jstring>& jsuggest_url,
const base::android::JavaParamRef<jstring>& jfavicon_url);
// Adds a custom search engine, sets |jkeyword| as its short_name and keyword,
......
......@@ -621,6 +621,7 @@ TemplateURL* TemplateURLService::CreateOrUpdateTemplateURLFromPlayAPIData(
const base::string16& title,
const base::string16& keyword,
const std::string& search_url,
const std::string& suggestions_url,
const std::string& favicon_url) {
TemplateURL* existing_turl = FindNonExtensionTemplateURLForKeyword(keyword);
TemplateURLData data;
......@@ -629,6 +630,7 @@ TemplateURL* TemplateURLService::CreateOrUpdateTemplateURLFromPlayAPIData(
data.SetShortName(title);
data.SetKeyword(keyword);
data.SetURL(search_url);
data.suggestions_url = suggestions_url;
data.favicon_url = GURL(favicon_url);
data.safe_for_autoreplace = true;
data.created_from_play_api = true;
......
......@@ -261,6 +261,7 @@ class TemplateURLService : public WebDataServiceConsumer,
const base::string16& title,
const base::string16& keyword,
const std::string& search_url,
const std::string& suggestions_url,
const std::string& favicon_url);
// 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