Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1273)

Unified Diff: chrome/browser/search_engines/template_url_service_android.cc

Issue 2367373003: [Android] Allow setting recently visited search engines as default search engine (Closed)
Patch Set: Update based on Dan's new comments. Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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()));

Powered by Google App Engine
This is Rietveld 408576698