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

Side by Side 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: remove unnecessary changes. Created 4 years, 2 months 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/search_engines/template_url_service_android.h" 5 #include "chrome/browser/search_engines/template_url_service_android.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include "base/android/jni_string.h" 9 #include "base/android/jni_string.h"
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
50 } 50 }
51 51
52 void TemplateUrlServiceAndroid::Load(JNIEnv* env, 52 void TemplateUrlServiceAndroid::Load(JNIEnv* env,
53 const JavaParamRef<jobject>& obj) { 53 const JavaParamRef<jobject>& obj) {
54 template_url_service_->Load(); 54 template_url_service_->Load();
55 } 55 }
56 56
57 void TemplateUrlServiceAndroid::SetUserSelectedDefaultSearchProvider( 57 void TemplateUrlServiceAndroid::SetUserSelectedDefaultSearchProvider(
58 JNIEnv* env, 58 JNIEnv* env,
59 const JavaParamRef<jobject>& obj, 59 const JavaParamRef<jobject>& obj,
60 jint selected_index) { 60 const JavaParamRef<jstring>& jkeyword) {
61 std::vector<TemplateURL*> template_urls = 61 base::string16 keyword(
62 template_url_service_->GetTemplateURLs(); 62 base::android::ConvertJavaStringToUTF16(env, jkeyword));
63 size_t selected_index_size_t = static_cast<size_t>(selected_index); 63 TemplateURL* template_url =
64 DCHECK_LT(selected_index_size_t, template_urls.size()) << 64 template_url_service_->FindNonExtensionTemplateURLForKeyword(keyword);
65 "Wrong index for search engine";
66
67 TemplateURL* template_url = template_urls[selected_index_size_t];
68 template_url_service_->SetUserSelectedDefaultSearchProvider(template_url); 65 template_url_service_->SetUserSelectedDefaultSearchProvider(template_url);
69 } 66 }
70 67
71 jint TemplateUrlServiceAndroid::GetDefaultSearchProvider( 68 jint TemplateUrlServiceAndroid::GetDefaultSearchProvider(
72 JNIEnv* env, 69 JNIEnv* env,
73 const JavaParamRef<jobject>& obj) { 70 const JavaParamRef<jobject>& obj) {
71 size_t index = -1;
72 template_url_list.clear();
74 std::vector<TemplateURL*> template_urls = 73 std::vector<TemplateURL*> template_urls =
75 template_url_service_->GetTemplateURLs(); 74 template_url_service_->GetTemplateURLs();
76 TemplateURL* default_search_provider = 75 TemplateURL* default_search_provider =
77 template_url_service_->GetDefaultSearchProvider(); 76 template_url_service_->GetDefaultSearchProvider();
77 std::vector<TemplateURL*> recent_visit_list;
78 for (size_t i = 0; i < template_urls.size(); ++i) { 78 for (size_t i = 0; i < template_urls.size(); ++i) {
79 if (default_search_provider == template_urls[i]) 79 if (IsPrepopulatedTemplate(template_urls[i]) ||
80 return i; 80 template_urls[i]->created_by_policy()) {
81 template_url_list.push_back(template_urls[i]);
82 if (default_search_provider == template_urls[i])
83 index = template_url_list.size() - 1;
Ian Wen 2016/10/17 23:32:21 Why is index always size() - 1? Shouldn't it be 1?
ltian 2016/10/18 01:01:55 Our plan is if the default search engine is a rece
84 } else if (default_search_provider == template_urls[i]) {
85 continue;
86 } else {
87 recent_visit_list.push_back(template_urls[i]);
88 }
81 } 89 }
82 return -1; 90 // If default search engine is recently visited one, force it
Ian Wen 2016/10/17 23:32:21 Nit: force it *to* append
ltian 2016/10/18 01:01:55 Done.
91 // append at the bottom of default list.
92 if (!IsPrepopulatedTemplate(default_search_provider) &&
93 !default_search_provider->created_by_policy()) {
94 template_url_list.push_back(default_search_provider);
95 index = template_url_list.size() - 1;
96 }
97 for (size_t i = 0; i < recent_visit_list.size(); ++i)
98 template_url_list.push_back(recent_visit_list[i]);
99 return index;
83 } 100 }
84 101
85 jboolean TemplateUrlServiceAndroid::IsLoaded(JNIEnv* env, 102 jboolean TemplateUrlServiceAndroid::IsLoaded(JNIEnv* env,
86 const JavaParamRef<jobject>& obj) { 103 const JavaParamRef<jobject>& obj) {
87 return template_url_service_->loaded(); 104 return template_url_service_->loaded();
88 } 105 }
89 106
90 jint TemplateUrlServiceAndroid::GetTemplateUrlCount( 107 jint TemplateUrlServiceAndroid::GetTemplateUrlCount(
91 JNIEnv* env, 108 JNIEnv* env,
92 const JavaParamRef<jobject>& obj) { 109 const JavaParamRef<jobject>& obj) {
93 return template_url_service_->GetTemplateURLs().size(); 110 return template_url_list.size();
94 } 111 }
95 112
96 jboolean TemplateUrlServiceAndroid::IsSearchProviderManaged( 113 jboolean TemplateUrlServiceAndroid::IsSearchProviderManaged(
97 JNIEnv* env, 114 JNIEnv* env,
98 const JavaParamRef<jobject>& obj) { 115 const JavaParamRef<jobject>& obj) {
99 return template_url_service_->is_default_search_managed(); 116 return template_url_service_->is_default_search_managed();
100 } 117 }
101 118
102 jboolean TemplateUrlServiceAndroid::IsSearchByImageAvailable( 119 jboolean TemplateUrlServiceAndroid::IsSearchByImageAvailable(
103 JNIEnv* env, 120 JNIEnv* env,
(...skipping 13 matching lines...) Expand all
117 template_url_service_->GetDefaultSearchProvider(); 134 template_url_service_->GetDefaultSearchProvider();
118 return default_search_provider && 135 return default_search_provider &&
119 default_search_provider->url_ref().HasGoogleBaseURLs( 136 default_search_provider->url_ref().HasGoogleBaseURLs(
120 template_url_service_->search_terms_data()); 137 template_url_service_->search_terms_data());
121 } 138 }
122 139
123 base::android::ScopedJavaLocalRef<jobject> 140 base::android::ScopedJavaLocalRef<jobject>
124 TemplateUrlServiceAndroid::GetTemplateUrlAt(JNIEnv* env, 141 TemplateUrlServiceAndroid::GetTemplateUrlAt(JNIEnv* env,
125 const JavaParamRef<jobject>& obj, 142 const JavaParamRef<jobject>& obj,
126 jint index) { 143 jint index) {
127 TemplateURL* template_url = template_url_service_->GetTemplateURLs()[index]; 144 TemplateURL* template_url = template_url_list[index];
Ian Wen 2016/10/17 23:32:21 Since this class does not own the template_urls th
ltian 2016/10/18 01:01:55 Done.
128 return Java_TemplateUrl_create( 145 return Java_TemplateUrl_create(
129 env, index, 146 env, index,
130 base::android::ConvertUTF16ToJavaString(env, template_url->short_name()), 147 base::android::ConvertUTF16ToJavaString(env, template_url->short_name()),
131 IsPrepopulatedTemplate(template_url) || 148 base::android::ConvertUTF8ToJavaString(env, template_url->url()),
132 template_url->created_by_policy()); 149 IsPrepopulatedTemplate(template_url) || template_url->created_by_policy(),
150 base::android::ConvertUTF16ToJavaString(env, template_url->keyword()));
133 } 151 }
134 152
135 bool TemplateUrlServiceAndroid::IsPrepopulatedTemplate(TemplateURL* url) { 153 bool TemplateUrlServiceAndroid::IsPrepopulatedTemplate(TemplateURL* url) {
136 return url->prepopulate_id() > 0; 154 return url->prepopulate_id() > 0;
137 } 155 }
138 156
139 void TemplateUrlServiceAndroid::OnTemplateURLServiceLoaded() { 157 void TemplateUrlServiceAndroid::OnTemplateURLServiceLoaded() {
140 template_url_subscription_.reset(); 158 template_url_subscription_.reset();
141 JNIEnv* env = base::android::AttachCurrentThread(); 159 JNIEnv* env = base::android::AttachCurrentThread();
142 if (weak_java_obj_.get(env).is_null()) 160 if (weak_java_obj_.get(env).is_null())
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
253 url = gurl.spec(); 271 url = gurl.spec();
254 } 272 }
255 273
256 return base::android::ConvertUTF8ToJavaString(env, url); 274 return base::android::ConvertUTF8ToJavaString(env, url);
257 } 275 }
258 276
259 base::android::ScopedJavaLocalRef<jstring> 277 base::android::ScopedJavaLocalRef<jstring>
260 TemplateUrlServiceAndroid::GetSearchEngineUrlFromTemplateUrl( 278 TemplateUrlServiceAndroid::GetSearchEngineUrlFromTemplateUrl(
261 JNIEnv* env, 279 JNIEnv* env,
262 const JavaParamRef<jobject>& obj, 280 const JavaParamRef<jobject>& obj,
263 jint index) { 281 const JavaParamRef<jstring>& jkeyword) {
264 TemplateURL* template_url = template_url_service_->GetTemplateURLs()[index]; 282 base::string16 keyword(
283 base::android::ConvertJavaStringToUTF16(env, jkeyword));
284 TemplateURL* template_url =
285 template_url_service_->FindNonExtensionTemplateURLForKeyword(keyword);
265 std::string url(template_url->url_ref().ReplaceSearchTerms( 286 std::string url(template_url->url_ref().ReplaceSearchTerms(
266 TemplateURLRef::SearchTermsArgs(base::ASCIIToUTF16("query")), 287 TemplateURLRef::SearchTermsArgs(base::ASCIIToUTF16("query")),
267 template_url_service_->search_terms_data())); 288 template_url_service_->search_terms_data()));
268 return base::android::ConvertUTF8ToJavaString(env, url); 289 return base::android::ConvertUTF8ToJavaString(env, url);
269 } 290 }
270 291
271 static jlong Init(JNIEnv* env, const JavaParamRef<jobject>& obj) { 292 static jlong Init(JNIEnv* env, const JavaParamRef<jobject>& obj) {
272 TemplateUrlServiceAndroid* template_url_service_android = 293 TemplateUrlServiceAndroid* template_url_service_android =
273 new TemplateUrlServiceAndroid(env, obj); 294 new TemplateUrlServiceAndroid(env, obj);
274 return reinterpret_cast<intptr_t>(template_url_service_android); 295 return reinterpret_cast<intptr_t>(template_url_service_android);
275 } 296 }
276 297
277 // static 298 // static
278 bool TemplateUrlServiceAndroid::Register(JNIEnv* env) { 299 bool TemplateUrlServiceAndroid::Register(JNIEnv* env) {
279 return RegisterNativesImpl(env); 300 return RegisterNativesImpl(env);
280 } 301 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698