Index: chrome/browser/search_engines/template_url_service_android.cc |
diff --git a/chrome/browser/search_engines/template_url_service_android.cc b/chrome/browser/search_engines/template_url_service_android.cc |
index 6563f7e0d9fe6723a26a201d775e14c8373f0bb8..e5760def8b3b4064cd57bcbe2ab0bf52a24f1017 100644 |
--- a/chrome/browser/search_engines/template_url_service_android.cc |
+++ b/chrome/browser/search_engines/template_url_service_android.cc |
@@ -57,29 +57,48 @@ void TemplateUrlServiceAndroid::Load(JNIEnv* env, |
void TemplateUrlServiceAndroid::SetUserSelectedDefaultSearchProvider( |
JNIEnv* env, |
const JavaParamRef<jobject>& obj, |
- jint selected_index) { |
- std::vector<TemplateURL*> template_urls = |
- template_url_service_->GetTemplateURLs(); |
- size_t selected_index_size_t = static_cast<size_t>(selected_index); |
- DCHECK_LT(selected_index_size_t, template_urls.size()) << |
- "Wrong index for search engine"; |
- |
- TemplateURL* template_url = template_urls[selected_index_size_t]; |
+ const JavaParamRef<jstring>& jkeyword) { |
+ base::string16 keyword( |
+ base::android::ConvertJavaStringToUTF16(env, jkeyword)); |
+ TemplateURL* template_url = |
+ template_url_service_->GetTemplateURLForKeyword(keyword); |
template_url_service_->SetUserSelectedDefaultSearchProvider(template_url); |
} |
jint TemplateUrlServiceAndroid::GetDefaultSearchProvider( |
JNIEnv* env, |
const JavaParamRef<jobject>& obj) { |
Peter Kasting
2016/11/02 00:34:03
It seems like it might be simpler to implement the
ltian
2016/11/22 21:51:40
Done.
|
+ size_t index = -1; |
+ template_urls_.clear(); |
std::vector<TemplateURL*> template_urls = |
template_url_service_->GetTemplateURLs(); |
TemplateURL* default_search_provider = |
template_url_service_->GetDefaultSearchProvider(); |
+ std::vector<TemplateURL*> recent_visit_list; |
+ // Add only IsInDefaultList() providers to the template_urls_. |
Peter Kasting
2016/11/02 00:34:02
Nit: Blank line separating a comment + block of co
ltian
2016/11/22 21:51:40
Done.
|
for (size_t i = 0; i < template_urls.size(); ++i) { |
- if (default_search_provider == template_urls[i]) |
- return i; |
+ if (template_url_service_->IsInDefaultList(template_urls[i])) { |
+ template_urls_.push_back(template_urls[i]); |
+ if (default_search_provider == template_urls[i]) |
+ index = template_urls_.size() - 1; |
+ // Skip if default search engine is a custom one. |
+ } else if (default_search_provider == template_urls[i]) { |
+ continue; |
+ } else { |
+ recent_visit_list.push_back(template_urls[i]); |
Peter Kasting
2016/11/02 00:34:02
Doesn't this need some kind of recency check? Oth
ltian
2016/11/22 21:51:41
Will write a sort function to simplify these opera
|
+ } |
} |
- return -1; |
+ // If default search engine is custom one, force it to |
+ // be appended at the bottom of list. |
+ if (!template_url_service_->IsInDefaultList(default_search_provider)) { |
+ template_urls_.push_back(default_search_provider); |
+ index = template_urls_.size() - 1; |
+ } |
+ // Append all custom search engines after default search |
+ // engine and prepopulated search engines. |
+ for (size_t i = 0; i < recent_visit_list.size(); ++i) |
+ template_urls_.push_back(recent_visit_list[i]); |
+ return index; |
} |
jboolean TemplateUrlServiceAndroid::IsLoaded(JNIEnv* env, |
@@ -90,7 +109,7 @@ jboolean TemplateUrlServiceAndroid::IsLoaded(JNIEnv* env, |
jint TemplateUrlServiceAndroid::GetTemplateUrlCount( |
JNIEnv* env, |
const JavaParamRef<jobject>& obj) { |
- return template_url_service_->GetTemplateURLs().size(); |
+ return template_urls_.size(); |
} |
jboolean TemplateUrlServiceAndroid::IsSearchProviderManaged( |
@@ -124,16 +143,15 @@ base::android::ScopedJavaLocalRef<jobject> |
TemplateUrlServiceAndroid::GetTemplateUrlAt(JNIEnv* env, |
const JavaParamRef<jobject>& obj, |
jint index) { |
- TemplateURL* template_url = template_url_service_->GetTemplateURLs()[index]; |
+ TemplateURL* template_url = template_urls_[index]; |
+ if (!template_url) |
+ return nullptr; |
return Java_TemplateUrl_create( |
env, index, |
base::android::ConvertUTF16ToJavaString(env, template_url->short_name()), |
- IsPrepopulatedTemplate(template_url) || |
- template_url->created_by_policy()); |
-} |
- |
-bool TemplateUrlServiceAndroid::IsPrepopulatedTemplate(TemplateURL* url) { |
- return url->prepopulate_id() > 0; |
+ base::android::ConvertUTF8ToJavaString(env, template_url->url()), |
+ template_url_service_->IsInDefaultList(template_url), |
+ base::android::ConvertUTF16ToJavaString(env, template_url->keyword())); |
} |
void TemplateUrlServiceAndroid::OnTemplateURLServiceLoaded() { |
@@ -260,8 +278,11 @@ base::android::ScopedJavaLocalRef<jstring> |
TemplateUrlServiceAndroid::GetSearchEngineUrlFromTemplateUrl( |
JNIEnv* env, |
const JavaParamRef<jobject>& obj, |
- jint index) { |
- TemplateURL* template_url = template_url_service_->GetTemplateURLs()[index]; |
+ const JavaParamRef<jstring>& jkeyword) { |
+ base::string16 keyword( |
+ base::android::ConvertJavaStringToUTF16(env, jkeyword)); |
Peter Kasting
2016/11/02 00:34:02
Nit: Prefer assignment to constructor-style init f
ltian
2016/11/22 21:51:41
Sorry I am a little confused. Is the constructor-s
Peter Kasting
2016/11/22 21:57:10
Yes, and as the reference notes, you should prefer
ltian
2016/11/22 23:25:10
Got it, thx!
|
+ TemplateURL* template_url = |
+ template_url_service_->GetTemplateURLForKeyword(keyword); |
std::string url(template_url->url_ref().ReplaceSearchTerms( |
TemplateURLRef::SearchTermsArgs(base::ASCIIToUTF16("query")), |
template_url_service_->search_terms_data())); |