| 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) {
|
| + 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_.
|
| 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]);
|
| + }
|
| }
|
| - 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));
|
| + 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()));
|
|
|